声明:未经作者允许,禁止转载
博主主页:王_嘻嘻的CSDN主页
全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
第一代交换机 — 从零开始 verilog 以太网交换机系列专栏:点击这里
第二代交换机 — Atom(百兆以太网交换机)专利:点击这里
在Atom的MAC中和第一代设计有所不同的是,Atom将实现数据包的加解密,支持AES和SM2两种加解密算法。本章重在介绍AES在Atom中的实现方案,就不介绍AES算法原理了。
虽然暂时做不到MACSEC IP那样专业化的方案,但是Atom的SEC还是会尽可能向实用化靠拢。
因为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个单元,组成矩阵形式参与全程计算,密钥也是同样方式转换。
解密中的列混合逆变换,就是将求逆后的常数矩阵与状态矩阵相乘,计算方式一致,可以采用模块复用,具体的常数矩阵如下。
若有不专业或错误之处,欢迎指正!
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!