Verilog开源项目——百兆以太网交换机(二)AES加解密模块设计

news2025/1/9 1:27:28

Verilog开源项目——百兆以太网交换机(二)AES加解密模块设计


🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机  从零开始 verilog 以太网交换机系列专栏:点击这里
💥第二代交换机  Atom(百兆以太网交换机)专利:点击这里

  在Atom的MAC中和第一代设计有所不同的是,Atom将实现数据包的加解密,支持AES和SM2两种加解密算法。本章重在介绍AES在Atom中的实现方案,就不介绍AES算法原理了。

  虽然暂时做不到MACSEC IP那样专业化的方案,但是Atom的SEC还是会尽可能向实用化靠拢。



一、AES Feature

  • 支持128-bits192-bits256-bits密钥长度加解密;
  • 每个MAC的RMAC和TMAC密钥可配置;(不支持MACSEC)
  • 支持ECBCBC两种工作模式;
  • 256-bits密钥长度模式下,32 cycle内至少完成一次128-bits数据的加解密;
  • CBC模式下初始向量可配置也可以自动生成(后续支持
  • 电路最高主频达250MHz(为后续扩展支持2Gbps或更高转发速率);


二、AES概述

  因为Atom定位于百兆交换速率,所以MAC中仍采用MII接口,clk频率为25MHz,数据位宽为4-bits,MAC上游数据位宽为8-bits,所以MAC以12.5MHz频率处理发送数据,就能满足MII时序要求。

  以TMAC为例,TMC将与上游模块PM以256-bits数据位宽进行数据收发,256=32*8-bits,即一个时钟周期内PM下发的数据,足够MII发送32个时钟,为了满足MII接口以最大速率发送,AES模块需要在32 cycle内完成一次256-bits的加解密,否则数据转发速率将受限。同理,如果后续转发速率提升至1G,AES主频需要达到125MHz。为留出足够裕量能进一步提升速度,将直接以250MHz为目标进行设计。

  另一方面,从一次加解密的时钟周期开销分析,AES操作基础为SBox转换、行移位、列混淆、密钥变换,统一将这些操作执行一次称做一轮子操作。对于密钥长度为128、192、256-bits而言,分别需要完成10、12、14轮操作,为保证14轮操作也能在32 cycle内完成,所以需要限制每轮操作在2 cycle内。

            请添加图片描述

  AES核心模块为:密钥扩展、轮密钥加、S盒替换、行移位、列混合。不论是ECB或BCB工作模式,计算过程类似,只是两次明文子块间是否有依赖关系。

  在实现上将S盒替换、行移位进行合并,成为一个操作,并和轮密钥加一起在一个时钟内完成列混合独立消耗一个时钟,而密钥扩展考虑到解密时需要首先用到最后一轮的子密钥,所以根据最终timing,将在2个clk内完成全部扩展

  如下图所示,计算过程中128-bits明文/密文按Byte为单位切分为16个单元,组成矩阵形式参与全程计算,密钥也是同样方式转换。

在这里插入图片描述

  • Key Add(轮密钥加):将明文块与密钥进行异或;
  • SBox(S盒替换):SBox本质上是在复合域实现乘法逆,具体原理就不介绍了,在Atom中为了追求性能,先直接采用查表的方式,且全部用寄存器堆搭建,实现全并行查找(如果后续timing有较大裕量,可以采用更节约面积的做法)
  • Line Shifter(行移位):按下图移位方式实现即可,具体实现中,可以讲SBox与Line Shifter合并为一步,例如S0’代表S0进行SBox替换后的结果。

在这里插入图片描述

  • Col Mixer(列混合):列混合是状态矩阵与常数矩阵相乘的过程,由于其中一个是常数矩阵,所以计算过程相对简单,由于我们追求较高的主频,所以每个元素都采用并行的方式计算。
    在这里插入图片描述

解密中的列混合逆变换,就是将求逆后的常数矩阵与状态矩阵相乘,计算方式一致,可以采用模块复用,具体的常数矩阵如下。

在这里插入图片描述

  • Key Extend(密钥扩展):当分组长度和密钥长度都是128位时,AES的加密算法共迭代10轮,需要10个子密钥,AES的密钥扩展的目的是将输入的128位密钥扩展成11个128位的子密钥。以字为一个基本单位(4B),刚好是密钥矩阵一列。


三、AES接口

在这里插入图片描述


若有不专业或错误之处,欢迎指正!


搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序的投票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信小程序的主要功能有:管理员的主要功能有:具体实现截图论文参考为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,C…

Vue.js路由及Node.js的入门使用---超详细

一,Vue路由 1.1 路由是什么 路由是用来管理应用程序中不同页面之间导航的概念。Vue Router是Vue.js官方提供的路由管理器,它允许我们通过定义路由规则和视图组件来配置路由 1.2 路由给我们带来的好处有哪些? 单页应用(Single Pag…

Springboot整合jdbc和Mybatis

目录 整合jdbc 1. 新建项目 2. 编写yaml配置文件连接数据库 3. 测试类 使用原生的jdbcTemplate进行访问测试 使用Druid连接池 1. 添加类型 2. 初始化连接池 3. 编写config类 配置Druid数据源监视 整合Mybatis 1. 导入依赖 2. 编写mapper接口 3. 编写实体类 4. 编…

GLTF编辑器的另一个作用

1、GLB模型介绍 GLB(GLTF Binary)是一种用于表示三维模型和场景的文件格式。GLTF是"GL Transmission Format"的缩写,是一种开放的、跨平台的标准,旨在在各种3D图形应用程序和引擎之间进行交换和共享。 GLB文件是GLTF文件…

MySQL数据库详解 二:数据库的高级语句(高级查询语句)

文章目录 1. 克隆表 ---- 将数据表的数据记录生成到新的表中1.1 方式一:先创建新表,再导入数据1.2 方式二:创建的时候同时导入 2. 清空表 ---- 删除表内的所有数据2.1 delete删除2.2 truncate删除(重新记录)2.3 创建临…

别着急,解决不了的问题,就请交给时间吧

转眼间我走出社会已过去四年之久,但很多事依旧历历在目,就好像昨天发生的一样。 我小时候,因为一场医学事故患有先天性白内障,真的是连黑板的看不清,当时自己也不太懂事,上课对我来说就是画画以及一切能够消…

保姆级 Keras 实现 Faster R-CNN 十三 (训练)

保姆级 Keras 实现 Faster R-CNN 十三 训练 一. 将 Faster R-CNN 包装成一个类二. 修改模型结构1. 修改 input_reader 函数2. 增加 RoiLabelLayer 层 三. 损失函数1. 自定义损失函数2. 自定义精度评价函数 四. 模型编译五. 模型训练六. 预训练模型七. 保存模型与参数八. 代码下…

更新、修改

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法: update 表名 列名该列新值, 列名该列新值, ... where 记录匹配条件; 说明:update 更新、修改 set 设置 …

通讯网关软件011——利用CommGate X2ODBC实现DDE数据转入ODBC

本文介绍利用CommGate X2ODBC实将DDE数据源中的数据转入到ODBC数据源。CommGate X2ODBC是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,将DDE数据源(如Excel)的数据写…

【软件设计师-从小白到大牛】下午题基础篇:第一章 数据流图(DFD)

文章目录 前言章节提要一、数据流图基本概念二、数据流图的分层(DFD)三、数据字典四、数据流图平衡原则五、答题技巧问题一问题二问题三问题四 六、案例分析1、案例12、案例2 前言 ​ 本系列文章为观看b站视频以及b站up主zst_2001系列视频所做的笔记&…

DAZ To UMA⭐一.DAZ简单使用教程

文章目录 🟥 DAZ快捷键🟧 DAZ界面介绍 🟥 DAZ快捷键 移动物体:ctrlalt鼠标左键 旋转物体:ctrlalt鼠标右键 导入模型:双击左侧模型UI 🟧 DAZ界面介绍 Files:显示全部文件 Products:显示全部产品 Figures:安装的全部人物 Wardrobe…

Floyd算法基础

弗洛伊德算法(Floyd) 之前介绍了迪杰斯特拉算法(Dijkstra)。具体请看:最短路径算法——简单明了的迪杰斯特拉算法(Dijkstra)。Dijkstra适用于非负权图,并且一次只能从网络中找源点到任何一个节点的最短路径,而Floyd算法的应用更加广泛&#…

基于vue的黑马前端项目小兔鲜

目录 项目学习 初始化项目 建立项目 引入elementplus elementPlus主题设置 配置axios 路由 引入静态资源 自动导入scss变量 Layout页 组件结构快速搭建 字体图标渲染 一级导航渲染 吸顶导航交互实现 Pinia优化重复请求 Home页 分类实现 banner轮播图 …

vue变量赋值中文,但是输出为乱码,解决办法

很奇怪,展示出来为乱码 来看代码输出 控制台的输出也是乱码 这是因为文件编码问题,可以看到我使用的编码不对 更改一下编码 要选择UTF-8 保存之后重新运行,就可以看到正确显示啦!

JavaScript学习笔记05

JavaScript笔记05 操作 BOM 对象(重点) 什么是 BOM BOM(Browser Object Model)是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型。浏览器对象模型(BOM)提供了独立于内容的、可…

分享一个java+springboot+vue校园电动车租赁系统(源码、调试、开题、lw)

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

UE5学习笔记(2)——打包第一个安卓demo(附碰到的问题)

这里是目录 0. 安装Android Studio我的解决方案 1. 调试安卓设备2. 创建游戏项目问题记录 3. 配置APK4. UE,启动!很不辛,闪退了编译完,部署到设备:部署失败!原因再试一次! 5. 打包安卓包UE&…

【企业级SpringBoot单体项目模板 】—— 一些开发规范

😜作 者:是江迪呀✒️本文关键词:SpringBoot项目模版、企业级☀️每日 一言:种一棵树最好的时间是十年前,其次是现在! 上一回我们已经搭建了一个单体SpringBoot项目并且做了一些全局的配置、比…

C语言自定义类型(上)

大家好,我们又见面了,这一次我们来学习一些C语言有关于自定义类型的结构。 目录 1.结构体 2位段 1.结构体 前面我们已经学习了一些有关于结构体的知识,现在我们进行深入的学习有关于它的知识。 结构是一些值的集合,这些值称为…