数字电路基础 第10讲 数字电路安全:密码芯片 数字电路安全 自主设计课程 密码芯片、硬件安全 课程材料借鉴资料 – Gang Qu, “Hardware Security”, Coursera, 2022 马里兰大学教授,硬件安全专家 – Yier Jin, “Hardware Security and Trusted Circuit Design”, 佛罗里达州立大学, 佛罗里达州立大学冠名教授,硬件安全专家 – Cetin Kaya Koc (Editor): Cryptographic Engineering. 1st edition, Springer, 2009. 作业 – Xiao, Kan, et al. "Hardware trojans: Lessons learned after one decade of research." ACM Transactions on Design Automation of Electronic Systems (TODAES) 22.1 (2016): 1-23. – Transactions on Computers/IACR CHES等会议、期刊上的文章 目录 1 数字电路安全概述 2 对称密码芯片设计 2 公钥密码芯片设计 数字电路安全概述 数字电路安全的需求 SRC美国半导体十年计划 十年内每年6亿美元投入 基与硬件的隐私与安全基础设施 数字电路安全概述 数字电路安全的需求 科技部国家重点研发计划 后量子加密芯片架构 机密计算芯片架构 数字电路安全概述 网络空间安全中的数字电路 密码算法的硬件实现 1. 对称加密:AES、SM4 2. 非对称(公钥)加密:RSA、ECC、SM2、Kyber 3. 哈希:SHA3、SM3 硬件安全 1. 侧信道攻击:功耗侧信道、磁场侧信道 2. 硬件安全攻防:硬件木马、物理不可克隆函数、可 信执行环境 目录 1 数字电路安全概述 2 对称密码芯片设计 2 公钥密码芯片设计 对称密码芯片设计 AES对称加密的硬件实现 AES密码算法 国密SM4在实验中涉及 对称加密 消息空间、密钥、密文空间:128-bit … AES 𝑘𝑘127 … 𝑚𝑚127 … 𝑚𝑚0 𝑚𝑚1 𝑘𝑘0 𝑘𝑘1 𝑐𝑐0 𝑐𝑐1 𝑐𝑐127 𝑐𝑐 = Enc 𝑚𝑚 𝑚𝑚 = Dec 𝑐𝑐 数字电路安全概述 AES对称加密的硬件实现 循环计算Cipher Round函数 Cipher Round中有四大混淆操作 数字电路安全概述 AES对称加密的硬件实现 四大混淆操作 SubBytes – 本质上是ℱ8 域上的多项式乘法 数字电路安全概述 AES对称加密的硬件实现 四大混淆操作 SubBytes – 本质上是ℱ8 域上的多项式乘法 Sbox 02 = 77,Sbox 13 = 7D 数字电路安全概述 AES对称加密的硬件实现 SubBytes的硬件实现 𝑠𝑠[0] 𝑠𝑠[0] MUX … 𝐂𝐂𝐂𝐂 𝟏𝟏𝟏𝟏 16 × 8 × 8选1数据选择器 MUX … 𝟖𝟖𝟖𝟖 𝟕𝟕𝟕𝟕 𝑠𝑠[1] MUX 𝐂𝐂𝐂𝐂 … 𝟔𝟔𝟔𝟔 16 × 8选1数据选择器 1152个8选1 MUX Sbox 02 = 77,Sbox 13 = 7D 数字电路安全概述 AES对称加密的硬件实现 SubBytes的硬件实现 256 ∗ 8 = 2048比特只读存储器 Sbox 02 = 77,Sbox 13 = 7D 数字电路安全概述 AES对称加密的硬件实现 ShiftRows的硬件实现 桶形移位器(Barrel Shifter) 4 ∗ 32 log 32 = 640选择器 数字电路安全概述 AES对称加密的硬件实现 ShiftRows的硬件实现 桶形移位器(Barrel Shifter) 4 ∗ 322 = 4096选择器 数字电路安全概述 AES对称加密的硬件实现 MixColumn的硬件实现 移位+异或 数字电路安全概述 AES对称加密的硬件实现 AddRoundKey的硬件实现 掺入密钥:单纯异或 本轮密钥 MixColumns输出 本轮输出 数字电路安全概述 AES对称加密的硬件实现 整体的逻辑部分 纯组合逻辑:输入直达输出 SubBytes ShiftRows … MUX MUX … MUX … 10~14轮 MixColumns AddRoundKey 数字电路安全概述 AES对称加密的硬件实现 组合逻辑面积过大 利用时序逻辑 数字电路安全概述 AES对称加密的硬件实现 基于时序逻辑的AES实现 R1:寄存器 数字电路安全概述 AES对称加密的硬件实现 时序AES的问题 速度/吞吐量均不高 R1:寄存器 数字电路安全概述 AES对称加密的硬件实现 组合逻辑延迟过大 线性增加 信号传播延迟累积 15%-85%规律 IN T1 IN 1 T1 1 T2 1 T3 1 T2 OUT T3 OUT Latency 数字电路安全概述 AES对称加密的硬件实现 流水线设计 提高吞吐量,减少平均延迟 T1 IN 1 1 T2 1 线性增加 T1 IN 1 T3 1 1 OUT T2 1 时钟控制 CLK IN T1 T2 T3 OUT IN T1 T2 T3 OUT Latency Latency T3 1 OUT 数字电路安全概述 AES对称加密的硬件实现 IN 1 非流水线设计的问题 吞吐量低 IN T1 T2 T3 OUT 𝟎𝟎 → 𝟏𝟏延迟 𝟏𝟏 → 𝟎𝟎延迟 T1 1 T2 1 T3 1 OUT 数字电路安全概述 AES对称加密的硬件实现 非流水线设计的问题 延迟不稳定 IN IN 1 𝟏𝟏 → 𝟎𝟎延迟 𝟎𝟎 → 𝟏𝟏延迟 T1 T2 T3 OUT Latency T1 1 T2 1 T3 1 OUT 数字电路安全概述 AES对称加密的硬件实现 IN 1 流水线设计 𝟎𝟎 → 𝟏𝟏延迟 CLK 𝟏𝟏 → 𝟎𝟎延迟 IN T1 T2 T3 OUT Latency T1 1 T2 1 T3 1 OUT 数字电路安全概述 AES对称加密的硬件实现 流水线设计 T1 IN 1 1 𝟎𝟎 → 𝟏𝟏 → 𝟎𝟎延迟=平均3个周期 𝟎𝟎 → 𝟏𝟏延迟=5个周期 CLK 𝟏𝟏 → 𝟎𝟎延迟 IN T1 T2 T3 OUT Latency T2 1 T3 1 OUT 数字电路安全概述 AES对称加密的硬件实现 流水线设计 T1 IN 1 1 𝟎𝟎 → 𝟏𝟏 → 𝟎𝟎 → 𝟏𝟏 → 𝟎𝟎延迟=平均2个周期 𝟎𝟎 → 𝟏𝟏延迟=5个周期 CLK T2 𝟏𝟏 → 𝟎𝟎延迟 IN T1 T2 T3 OUT Latency T3 1 1 𝐎𝐎𝐎𝐎𝐎𝐎 − 𝐈𝐈𝐈𝐈 = 𝟏𝟏 𝓵𝓵→∞ 𝓵𝓵 lim OUT 𝓵𝓵:输入的个数 数字电路安全概述 AES对称加密的硬件实现 AES的流水线实现 模块间流水线 寄存器 SubBytes ShiftRows 块内流水线 MixColumns … MUX MUX … MUX … k级流水线 K级流水线 AddRoundKey 数字电路安全概述 AES对称加密的硬件实现 AES的流水线实现 吞吐量 面积 单次延迟 面积 目录 1 数字电路安全概述 2 对称密码芯片设计 2 公钥密码芯片设计 公钥密码芯片设计 公钥密码体系 基于大整数分解困难问题的方案 RSA、ECC(椭圆曲线) 基于格上困难问题的方案(后量子加密标准) LWE、LPN 公钥𝑒𝑒 事先分配密钥𝑘𝑘 Enc𝑘𝑘 (𝑥𝑥) Dec𝑘𝑘 Enc𝑘𝑘 𝑥𝑥 Enc𝑒𝑒 (𝑥𝑥) 拥有私钥𝑑𝑑 Dec𝑑𝑑 Enc𝑒𝑒 𝑥𝑥 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 大整数(≥ 300比特)模乘 在RSA中大于2048比特 25195908475657893494027183240048398571429282126204032027777137836 04366202070759555626401852588078440691829064124951508218929855914 91761845028084891200728449926873928072877767359714183472702618963 75014971824691165077613379859095700097330459748808428401797429100 64245869181719511874612151517265463228221686998754918242243363725 2065536 mod 90851418654620435767984233871847744479207399342365848238242811981 63815010674810451660377306056201619676256133844143603833904414952 63443219011465754445417842402092461651572335077870774981712577246 79629263863563732899121548314381678998850404453640235273819513786 36564391212010397122822120720357 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 大整数模乘 2048-bit × 2048-bit / 2048-bit 取余 32比特乘法器:面积约𝟎𝟎. 𝟎𝟎𝟎𝟎𝟎𝟎𝐦𝐦𝐦𝐦𝟐𝟐 计算2048比特乘法, 需要多少32比特乘法器? 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 64比特乘法需要几个32比特乘法器? 𝒙𝒙, 𝒚𝒚 ∈ ℤ𝟐𝟐𝟔𝟔𝟔𝟔 𝒂𝒂, 𝒃𝒃, 𝒄𝒄, 𝒅𝒅 ∈ ℤ𝟐𝟐𝟑𝟑𝟑𝟑 单纯乘法拆分 𝒙𝒙 = 𝒂𝒂𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒃𝒃 𝒚𝒚 = 𝒄𝒄𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒅𝒅 𝒂𝒂𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒃𝒃 × 𝒄𝒄𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒅𝒅 = 𝒂𝒂𝒂𝒂𝟐𝟐𝟔𝟔𝟔𝟔 + 𝒂𝒂𝒂𝒂 + 𝒃𝒃𝒃𝒃 𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒃𝒃𝒃𝒃 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 64比特乘法需要几个32比特乘法器? 𝒂𝒂𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒃𝒃 × 𝒄𝒄𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒅𝒅 = 𝒂𝒂𝒂𝒂𝟐𝟐𝟔𝟔𝟔𝟔 + 𝒂𝒂𝒂𝒂 + 𝒃𝒃𝒃𝒃 𝟐𝟐𝟑𝟑𝟑𝟑 + 𝒃𝒃𝒃𝒃 𝒂𝒂 𝒄𝒄 𝒂𝒂 𝒅𝒅 𝒃𝒃 𝒄𝒄 𝒃𝒃 𝒅𝒅 32 32比特 [127:64] 64 + 32比特 + 32比特 32比特 64 65 [95:32] [95:32] 128 + 128 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 64比特乘法需要几个32比特乘法器? 4个 128比特乘法需要几个32比特乘法器? 需要4个64比特乘法器=16个32比特乘法器 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 64比特乘法需要几个32比特乘法器? 4个 128比特乘法需要几个32比特乘法器? 4*4=16个 𝑛𝑛比特(𝑛𝑛 ≥ 25 )乘法需要几个32比特乘法器? 2𝑛𝑛 25 = 2𝑛𝑛−5 次递归,每次递归需4个乘法器 𝟒𝟒𝒏𝒏−𝟓𝟓 个32比特乘法器(指数级增长) 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 2048比特乘法需要几个32比特乘法器? 411−5 = 46 = 4096个 2048比特乘法器面积258mm2 32比特乘法器:面积约𝟎𝟎. 𝟎𝟎𝟎𝟎𝟎𝟎𝐦𝐦𝐦𝐦𝟐𝟐 对比:华为升腾910旗舰AI加速芯片 热设计功耗350W 半精度浮点性能256TFlops 内核面积182.4平方毫米 一个乘法器比整个AI加速芯片还要大 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 时序展开乘法器 用时间换空间 乘法器 … MUX … 𝒏𝒏比特存储器 32比特 MUX 写入地址选择 读取地址选择 𝒏𝒏比特存储器 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 2048比特乘法所需周期: 411−5 = 46 = 4096个 需要多少个乘法器,就会折算成多少个周期 写入地址选择 读取地址选择 乘法器 … MUX … 𝒏𝒏比特存储器 32比特 MUX • 𝒏𝒏比特存储器 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 Karatsuba乘法 AD+BC =AC+AD+BC+BD-AC-BD =(A+B)(C+D)-AC-BD 可以复用乘法结果! AC AD+BC BD AD+BC是两个乘法 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 Karatsuba乘法 AC AD+BC BD AD+BC是两个乘法 AC (A+B)(C+D)-AC-BD BD (A+B)(C+D)仅需一次乘法 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 2048比特乘法需要几个32比特Karatsuba乘法器? 311−5 = 36 = 729个 • 递归Karatsuba算法,比基本方法乘法器数量少5倍 32比特乘法器:面积约0.063mm2 —— 2048比特乘法器面积46mm2 对比:华为升腾910旗舰AI加速芯片 热设计功耗350W 半精度浮点性能256TFlops 内核面积182.4平方毫米 在可接受范围内 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 Karatsuba只提高乘法速度 递归Karatsuba算法:𝑂𝑂 4𝑛𝑛 → 𝑂𝑂(3𝑛𝑛 ) 取模算法 正常需要除法取余(除法器的硬件设计极为复杂) 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 Karatsuba只提高乘法速度 递归Karatsuba算法:𝑂𝑂 4𝑛𝑛 → 𝑂𝑂(3𝑛𝑛 ) 取模算法 𝒂𝒂 𝐦𝐦𝐦𝐦𝐦𝐦 𝒏𝒏 = 𝒂𝒂 − 𝒂𝒂/𝒏𝒏 𝒏𝒏 正常需要除法取余(除法器的硬件设计极为复杂) • 在嵌入式小型设备中,通常会用乘法代替除法 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 取模算法 Barrett取模 Montgomery取模 FFT大整数模乘 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 取模算法 Barrett取模 Montgomery取模 FFT大整数模乘 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 取模算法 注意:设𝑠𝑠 = 1/𝑛𝑛(实数) 𝒂𝒂 𝐦𝐦𝐦𝐦𝐦𝐦 𝒏𝒏 = 𝒂𝒂 − 𝒂𝒂/𝒏𝒏 𝒏𝒏 = 𝒂𝒂 − 𝒂𝒂𝒂𝒂 𝒏𝒏 完全精确 方法:设整数𝑚𝑚,通过 𝑚𝑚/2𝑘𝑘 (实数除法)逼近𝑠𝑠 = 1/𝑛𝑛 整数的2次幂除法=位移 计算精度依赖于𝑘𝑘 (11)10 = 1×23+0 ×22+1 ×21+1 ×20 11/2 = ( 1×22+0 ×21+1 ×20+1 ×20 )=(101) 2 =(5)10 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 取模算法 方法:设整数𝑚𝑚,通过 𝑚𝑚/2𝑘𝑘 (实数除法)逼近𝑠𝑠 = 1/𝑛𝑛 𝒂𝒂 𝐦𝐦𝐦𝐦𝐦𝐦 𝒏𝒏 = 𝒂𝒂 − 𝒂𝒂/𝒏𝒏 𝒏𝒏 = 𝒂𝒂 − 𝒂𝒂𝒂𝒂 𝒏𝒏 完全精确 𝒎𝒎 ≈ 𝒂𝒂 − 𝒂𝒂 ⋅ 𝒌𝒌 𝒏𝒏 计算精度依赖于𝑘𝑘 𝟐𝟐 𝑎𝑎 � 𝑚𝑚可用乘法器 2𝑘𝑘 除法取整可以位移 整个运算无需除法 结果与𝑛𝑛相乘 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 基于Barrett取模的模乘 方法: 𝒙𝒙 ⋅ 𝒚𝒚 = (𝒙𝒙𝒙𝒙) − (𝒙𝒙𝒙𝒙) ⋅ 𝒙𝒙 𝒚𝒚 𝒎𝒎 𝟐𝟐𝒌𝒌 𝒎𝒎 移位器 - 𝒏𝒏 𝒏𝒏 公钥密码芯片设计 公钥密码的核心运算:大整数模乘 基于Karatsuba+Barrett取模的大整数模乘 𝒙𝒙 𝒚𝒚 𝒎𝒎 移位器 Karatsuba乘法器 - 𝒏𝒏 小结 对称加密硬件架构 数据混淆计算 – 多为数据选择器 流水线设计 – 减少延迟,增加吞吐量 公钥密码硬件架构 Karatsuba+Barrett大整数模乘 设计规模大于现有芯片制造能力 总体思想 软硬件协同设计:选择算法+设计硬件 结论:面向网安的硬件设计还有很多未知 课堂作业 设计一个4比特的S Box电路 X2X3 X0X1 00 01 10 11 00 0 F 8 A 01 1 3 4 9 10 B C D E 11 2 5 6 7 可用与或非门、数据选择器或存储器 课堂作业 通过Karatsuba及Barrett模乘计算𝒙𝒙 � 𝒚𝒚 𝐦𝐦𝐦𝐦𝐦𝐦 𝒏𝒏 基于2比特乘法器计算 𝑥𝑥 = 12, 𝑦𝑦 = 7, 𝑛𝑛 = 5 • 写出具体计算步骤,计算所需乘法次数