DS5250高速、安全微控制器具有MAA(模块化算术加速器)。本应用笔记解释了MAA的幂法配置,讨论了执行时间的权衡,并显示了典型的执行时间。
介绍
模幂用于许多加密算法。任何实现这些算法之一的人都必须知道操作大约需要多长时间。本应用笔记描述了如何在DS5250高速、安全微控制器上完成模幂运算。它列出了运行各种表达式的典型时间,并描述了获取计时的代码流。
基本 MAA 操作
模幂是函数,(基数指数) 模量。例如,(29mod 10) 等于 (512 mod 10),等于 2。答案始终是介于 0 和模数 1 之间的数字。
DS5250上的MAA(模算术加速器)始终使用MAA寄存器“a”作为基数,MAA寄存器“e”作为指数,MAA寄存器“m”作为模数。MAA 寄存器“b”在操作前初始化为 1,并包含操作后的结果。MAA 大小寄存器(MAS1 和 MAS0 位于 A2h 和 A1h)告诉 MAA 这些寄存器中的最大位数。m 寄存器必须设置最高位才能工作。大小寄存器的值可以介于 2 到 4096 之间。
模块化算术加速器控制寄存器(A3h时的MACT)包含用于控制MAA操作的位。计算配置位(MACT 寄存器的 CLC1 和 CLC0)确定要执行的四个操作中的哪一个。运算可以是模乘法;模平方;模平方和乘法;以及这里讨论的操作,模幂。
模幂是用重复的平方和乘法计算的。平方运算是针对指数中的每个位完成的。只有在设置指数中的相应位时,才需要执行乘法运算。图 1 给出了模幂运算的伪代码。优化计算控制位(MACT 寄存器的 OCALC)确定是否对每个位执行乘法运算。启用 OCALC 位后,每次在指数中找到 1 位时,都会执行乘法运算。当禁用 OCALC 位时,对指数中的每个位(零或 1)进行乘法,从而为任何特定模量大小提供类似的时间计算。所有私钥计算都应在 OCALC=0(禁用)以及从环 (RNGSEL=1) 运行以避免定时攻击的情况下完成。
MAA 可以使用系统时钟运行,也可以从环运行。选择此选项时,MAA 以系统时钟速度的一半运行。因此,对于22.1MHz晶体,MAA将以10.05MHz运行。从系统时钟运行时,执行相同的值需要相同的时间。当MAA从环上运行时,执行时间可能因电压、温度和环的固有速度而异,这些速度因部件而异。MAA以环的全速运行。在表1和表2中的典型数据中,环在22Mhz附近运行。 MACT 寄存器的环形振荡器选择 (RNGSEL) 控制用于模幂运算的时钟。
典型的 MAA 时序
已收集的时间分为两组。第一组查看每个模数、基数和指数中的大数。第二组查看使用仅设置了 2 位的小指数(具体而言,值 10001h)时的时序。此数字有时用作 RSA 算法中的公共指数。在每个组中,有两半。前半部分已启用优化 (OCALC=1),后半部分禁用了优化。在每一半内,列出不同时钟源的典型定时值。这些计时均以毫秒 (ms) 为单位显示。
表中给出的典型时序值是使用每个寄存器中的随机值进行十种不同计算的平均值。模数是随机的,直到最高有效数字,始终为 1。通常,在每个参数中设置了大约一半的位。
每次计算的时序都是使用定时器0作为12分频时钟来测量的。当 16 位定时器 0 滚动更新时,将发生中断,并将 1 添加到六个外部计数字节中。在计算结束时,计时器停止,外部计数字节和 16 位计时器计数显示为 64 位数字,用于给出计算的长度。22.1MHz振荡器每个定时器的分辨率为543ns。分辨率在11.0592MHz时为1.085μs。图 2 包含用于对 MAA 计算进行计时的伪代码。
表 1.以毫秒为单位的模幂时间
(a、e 和 m 是随机值)
时钟源优化 |
优化关断 时钟源 |
|||||
Modulus Size | Ring | 22.1MHz Osc | 11.1MHz Osc | Ring | 22.1MHz Osc | 11.1MHz Osc |
256 | 12.38 | 26.28 | 51.44 | 16.33 | 34.79 | 69.55 |
512 | 74.98 | 155.43 | 312.06 | 98.18 | 208.79 | 416.91 |
768 | 225.44 | 468.50 | 943.04 | 296.10 | 626.89 | 1,252.23 |
1024 | 507.39 | 1,050.53 | 2,079.01 | 664.20 | 1,397.87 | 2,793.32 |
1280 | 958.41 | 1,967.81 | 3,922.17 | 1,248.33 | 2,629.90 | 5,258.52 |
1536 | 1,611.08 | 3,321.94 | 6,623.29 | 2,112.68 | 4,421.99 | 8,833.31 |
1792 | 2,520.53 | 5,176.46 | 10,311.88 | 3,295.64 | 6,889.75 | 13,771.52 |
2048 | 3,729.76 | 7,573.35 | 15,199.66 | 4,863.27 | 10,143.31 | 20,249.51 |
2304 | 5,251.26 | 10,773.81 | 21,372.70 | 6,852.96 | 14,276.87 | 28,532.62 |
2560 | 7,159.86 | 14,557.57 | 29,079.79 | 9,328.25 | 19,392.38 | 38,761.51 |
2816 | 9,434.47 | 19,216.24 | 38,474.44 | 12,334.35 | 25,636.24 | 51,189.86 |
3072 | 12,152.62 | 24,807.55 | 49,631.36 | 15,930.13 | 33,070.91 | 66,018.62 |
3328 | 15,360.16 | 31,377.07 | 62,436.28 | 20,147.92 | 41,818.90 | 83,544.01 |
3584 | 19,138.10 | 38,988.81 | 78,039.69 | 25,073.03 | 51,951.35 | 103,848.07 |
3840 | 23,445.08 | 47,678.86 | 95,490.03 | 30,691.85 | 63,689.30 | 127,205.55 |
4096 | 28,327.98 | 57,649.65 | 115,295.25 | 37,128.98 | 76,965.83 | 153,828.69 |
表 2.以毫秒为单位的模幂时间
(e = 10001h;a 和 m 是随机值)
时钟源优化 |
优化关断 时钟源 |
|||||
Modulus Size | Ring | 22.1MHz Osc | 11.1MHz Osc | Ring | 22.1MHz Osc | 11.1MHz Osc |
256 | 0.65 | 1.35 | 2.70 | 15.87 | 32.62 | 65.15 |
512 | 1.87 | 3.88 | 7.72 | 98.02 | 200.88 | 401.50 |
768 | 3.71 | 7.66 | 15.29 | 294.26 | 611.73 | 1,222.39 |
1024 | 6.16 | 12.70 | 25.35 | 660.95 | 1,371.87 | 2,741.38 |
1280 | 9.20 | 18.97 | 37.89 | 1,248.98 | 2,587.99 | 5,171.69 |
1536 | 12.88 | 26.49 | 52.93 | 2,110.76 | 4,366.96 | 8,726.72 |
1792 | 17.16 | 35.27 | 70.55 | 3,297.84 | 6,815.56 | 13,619.78 |
2048 | 22.03 | 45.33 | 90.51 | 4,862.39 | 10,040.36 | 20,064.18 |
2304 | 27.55 | 56.60 | 113.06 | 6,856.06 | 14,148.38 | 28,273.26 |
2560 | 33.67 | 69.14 | 138.26 | 9,332.14 | 19,246.16 | 38,460.11 |
2816 | 40.41 | 82.91 | 165.70 | 12,342.92 | 25,440.42 | 50,838.52 |
3072 | 47.74 | 97.92 | 195.79 | 15,933.52 | 32,838.19 | 65,621.43 |
3328 | 55.70 | 114.25 | 228.36 | 20,158.79 | 41,545.91 | 83,022.64 |
3584 | 64.28 | 131.83 | 263.28 | 25,083.32 | 51,670.49 | 103,254.99 |
3840 | 73.45 | 150.57 | 300.69 | 30,747.58 | 63,318.76 | 126,532.11 |
4096 | 83.27 | 170.62 | 340.98 | 37,183.65 | 76,597.28 | 153,067.16 |
图1.用于模幂的伪代码。
图2.用于对模块化幂计算进行计时的伪代码。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !