2、密码学基础回顾:对称加密(AES)、非对称加密(RSA/ECC)、哈希函数(SHA-256)的数学原理与硬件实现考量
好,咱们进入正题。这一章是密码学基础,但我不打算跟你念教科书。我会从硬件工程师的视角,聊聊这些算法到底怎么在芯片里跑起来。
你想想看,做芯片安全,说白了就是跟三件事打交道:加密、解密、验真。而这三件事,绕不开AES、RSA/ECC和SHA-256。我个人习惯把这三样称为「安全三件套」。今天咱们一个一个拆开看。
2.1 对称加密:AES的数学原理与硬件实现
AES,高级加密标准。这玩意儿现在几乎是硬件加密的标配。为什么?因为它快,而且硬件实现起来非常规整。
2.1.1 数学原理:字节代换、行移位、列混合、轮密钥加
AES的核心就四个操作,反复循环。我刚开始学的时候觉得挺复杂,后来发现其实就是一套「搅乱+扩散」的流程。
- 字节代换(SubBytes):用一个S盒,把每个字节映射成另一个字节。这个S盒是固定的,有数学上的逆元性质。
- 行移位(ShiftRows):把状态矩阵的行,按不同偏移量循环左移。说白了就是让数据「串个门」。
- 列混合(MixColumns):每一列做一次矩阵乘法。注意,这是在伽罗瓦域GF(2^8)上做的,不是普通乘法。
- 轮密钥加(AddRoundKey):把当前状态跟轮密钥做异或。这一步最简单,但也是最关键的。
嗯,这里要注意:AES-128是10轮,AES-192是12轮,AES-256是14轮。轮数越多,越安全,但硬件面积和延迟也越大。
2.1.2 硬件实现考量:面积、速度、功耗的权衡
做AES硬件,我遇到过最头疼的问题就是S盒的实现。S盒可以用查找表(LUT),也可以用组合逻辑直接算。
关键权衡点:
- 查找表方式:面积大,但速度快。适合高性能场景。
- 组合逻辑方式:面积小,但路径延迟长。适合低功耗、小面积场景。
我曾经在一个IoT芯片项目里,为了省面积,硬是把S盒用组合逻辑实现了。结果时序差点没收敛,折腾了两周才搞定。所以我的建议是:除非面积极度受限,否则老老实实用查找表。
另外,AES的密钥扩展也是个坑。有些设计把密钥扩展放在每次加密时实时算,这样省寄存器,但会拖慢速度。我习惯的做法是:预计算所有轮密钥,存到寄存器里。这样面积大一点,但吞吐量能翻倍。
2.2 非对称加密:RSA与ECC的数学原理与硬件实现
非对称加密,说白了就是「公钥加密,私钥解密」。RSA和ECC是两大主流。但它们的数学原理完全不同。
2.2.1 RSA:大整数分解难题
RSA的安全性基于一个事实:两个大素数相乘很容易,但反过来分解很难。
数学上,RSA的核心操作就是模幂运算:c = m^e mod n。这个e通常取65537,因为它的二进制表示只有两个1,做模幂时计算量小。
但硬件实现RSA,最痛苦的就是大数乘法。1024位的RSA,需要做1024位的乘法,这在硬件里可不是闹着玩的。
我的经验:做RSA硬件,一定要用蒙哥马利模乘(Montgomery Modular Multiplication)。它能避免除法,把模运算变成移位和加法。我当年第一次实现RSA时,没用蒙哥马利,结果面积大得离谱,直接被领导骂了一顿。
2.2.2 ECC:椭圆曲线离散对数难题
ECC的安全性基于椭圆曲线上的点乘运算。跟RSA比,ECC可以用更短的密钥达到相同的安全强度。比如,256位的ECC跟3072位的RSA安全性差不多。
ECC的硬件实现,核心是点加和点倍。这两个操作又依赖于底层的大数运算,包括模加、模减、模乘、模逆。
我个人觉得,ECC的硬件实现比RSA更「优雅」。因为它的运算粒度更细,可以更好地做流水线。但ECC的难点在于:曲线参数的选择。不同曲线(比如P-256、Curve25519)的硬件实现差异很大。
避坑指南:我曾经在一个项目中,直接用了软件库里的曲线参数,没做硬件适配。结果发现,某些参数在硬件里计算模逆时,延迟特别大。后来我换了一种曲线,性能直接提升了30%。所以,选曲线一定要跟硬件实现一起考虑。
2.3 哈希函数:SHA-256的数学原理与硬件实现
哈希函数,说白了就是「指纹」。SHA-256把任意长度的输入,压缩成256位的输出。而且,这个输出是单向的——你没法从哈希值反推出原始数据。
2.3.1 数学原理:Merkle-Damgård结构与压缩函数
SHA-256用的是Merkle-Damgård结构。先把消息分成512位的块,然后每个块经过一个压缩函数,跟当前的状态混合,产生新的状态。
压缩函数里,有64轮迭代。每一轮都包含:
- 消息扩展:把16个32位字,扩展成64个32位字。
- 状态更新:用8个32位寄存器,做一堆移位、异或、与、非操作。
嗯,这里要注意:SHA-256的运算全是位运算和加法,没有乘法。所以硬件实现起来,比AES和RSA都简单。
2.3.2 硬件实现考量:吞吐量与延迟的平衡
SHA-256的硬件实现,主要有两种架构:
| 架构类型 | 特点 | 适用场景 |
|---|---|---|
| 迭代架构 | 面积小,但每拍只能算一轮 | 低功耗、小面积 |
| 流水线架构 | 面积大,但每拍能算多轮 | 高吞吐量 |
我建议,如果做的是数据加密加速器,用流水线架构。因为哈希运算经常是瓶颈,流水线能大幅提升整体性能。
另外,SHA-256的消息填充也是个容易出错的地方。标准要求,消息末尾要加一个'1',然后补0,最后64位是消息长度。我见过有同事在填充时,把长度字段的字节序搞反了,结果哈希值全错。这种低级错误,调试起来特别痛苦。
总结一下:
- AES:对称加密,速度快,硬件实现规整。S盒实现是关键。
- RSA:非对称加密,安全性高,但硬件实现复杂。蒙哥马利模乘是必备技能。
- ECC:非对称加密,密钥短,硬件实现更灵活。曲线选择很重要。
- SHA-256:哈希函数,硬件实现简单。吞吐量和延迟需要权衡。
好了,这一章就到这里。下一章我们会聊聊「真随机数发生器(TRNG)的设计与实现」。到时候我会分享一个我踩过的坑——TRNG的熵源设计,差点让整个芯片的安全等级降级。敬请期待。