DS5250微控制器的模幂时序

描述

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.用于对模块化幂计算进行计时的伪代码。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分