摘要: DS5250高速,安全的微控制器具有MAA(模块化算术加速器)。本应用程序说明解释了用于求幂的MAA的配置,讨论了在执行时间上的权衡,并显示了典型的执行时间。
模幂运算在许多密码算法中都有应用。任何实现这些算法之一的人都必须知道操作大约需要多长时间。本应用笔记描述了如何在DS5250高速安全微控制器上进行模幂运算。它列出了运行各种表达式的典型时间,并描述了获取时间的代码流。
模幂是函数,(底(指数))模模。例如,(2(9)mod 10)等于(512 mod 10),即等于2。答案总是介于0和模数-1之间的数。
DS5250上的MAA(模算术加速器)总是使用MAA寄存器“a”作为基数,MAA寄存器“e”作为指数,MAA寄存器“m”作为模数。MAA寄存器“b”在操作前初始化为1,并包含操作后的结果。MAA大小寄存器(A2h和A1h的MAS1和MAS0)告诉MAA这些寄存器中的最大位数。寄存器m必须设置最高位才能工作。大小寄存器的值可以从2到4096。
模运算加速器控制寄存器(MACT at A3h)包含用于控制MAA操作的位。计算配置位(MACT寄存器的CLC1和CLC0)决定要执行四个操作中的哪一个。运算可以是模乘;模平方;模平方和乘法;这里讨论的运算,模幂。
模幂运算是用重复的平方和乘来计算的。对指数中的每一位进行平方运算。只有当指数中相应的位被设置时,才需要进行乘法运算。图1给出了模求幂运算的伪代码。优化计算控制位(MACT寄存器的OCALC)决定是否对每个位进行乘法运算。当启用OCALC位时,每次在指数中找到1位时,就执行乘法操作。当OCALC位被禁用时,对指数中的每个位(0或1)进行乘法,从而为任何特定模量大小提供类似的时间计算。所有私钥计算都应该使用OCALC=0(禁用)以及从环运行(RNGSEL=1)来完成,以避免定时攻击。
图1所示、模求幂的伪代码
MAA可以使用系统时钟运行,也可以从环运行。当选择此选项时,MAA以系统时钟速度的一半运行。因此,对于22.1MHz晶体,MAA将运行在10.05MHz。当从系统时钟运行时,执行相同的值将花费相同的时间。当MAA从环上运行时,执行时间可能会根据电压、温度和环的固有速度而变化,这些速度会因部分而异。MAA以环的全速运行。在表1和表2所示的典型数据中,环运行在22Mhz附近。环形振荡器选择(RNGSEL)的MACT寄存器控制哪个时钟用于模幂运算。
优化上 时钟脉冲源 | 优化了 时钟脉冲源 | |||||
模量大小 | 环 | 22.1 mhz Osc | 11.1 mhz Osc | 环 | 22.1 mhz Osc | 11.1 mhz 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 | 1252 .23 |
1024 | 507.39 | 1050 .53点 | 2079 .01点 | 664.20 | 1397 .87点 | 2793 .32 |
1280 | 958.41 | 1967 .81点 | 3922 .17 | 1248 .33 | 2629 .90 | 5258点 |
1536 | 1611年。08 | 3321 .94 | 6623 .29 | 2112 .68点 | 4421 .99 | 8833 .31 |
1792 | 2520 .53点 | 5176 .46 | 10311 .88点 | 3295 .64点 | 6889 .75点 | 13771点 |
2048 | 3729点 | 7573 .35点 | 15199点 | 4863年10 | 10143 .31 | 20249 .51 |
2304 | 5251 .26 | 10773 .81点 | 21372 .70 | 6852 .96点 | 14276 .87点 | 28532 .62 |
2560 | 7159 .86点 | 14557点 | 29079 .79 | 9328 | 19392 .38点 | 38761 .51 |
2816 | 9434 .47点 | 19216 .24点 | 38474 .44点 | 12334 .35点 | 25636 .24点 | 51189 .86点 |
3072 | 12152 .62 | 24807 .55 | 49631年36 | 15930 .13 | 33070 .91点 | 66018 .62 |
3328 | 15360 .16 | 31377 .07点 | 62436 .28点 | 20147 .92点 | 41818 .90 | 83544 .01点 |
3584 | 19138 .10 | 38988 .81点 | 78039 .69点 | 25073 .03点 | 51951 .35点 | 103848 .07点 |
3840 | 23445年。08 | 47678 .86点 | 95490 .03点 | 30691 .85 | 63689 .30 | 127205 .55 |
4096 | 28327 .98点 | 57649 .65点 | 115295 | 37128 .98点 | 76965 .83点 | 153828 .69点 |
优化上 时钟脉冲源 | 优化了 时钟脉冲源 | |||||
模量大小 | 环 | 22.1 mhz Osc | 11.1 mhz Osc | 环 | 22.1 mhz Osc | 11.1 mhz 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 | 1222 .39点 |
1024 | 6.16 | 12.70 | 25.35 | 660.95 | 1371 .87点 | 2741 .38点 |
1280 | 9.20 | 18.97 | 37.89 | 1248 .98点 | 2587 .99 | 5171 .69点 |
1536 | 12.88 | 26.49 | 52.93 | 2110点 | 4366 .96点 | 8726 .72点 |
1792 | 17.16 | 35.27 | 70.55 | 3297 .84 | 6815 .56点 | 13619 .78点 |
2048 | 22.03 | 45.33 | 90.51 | 4862 .39点 | 10040年36 | 20064 .18 |
2304 | 27.55 | 56.60 | 113.06 | 6856 .06点 | 14148 .38点 | 28273 .26 |
2560 | 33.67 | 69.14 | 138.26 | 9332 .14点 | 19246 .16 | 38460 .11点 |
2816 | 40.41 | 82.91 | 165.70 | 12342 .92点 | 25440点 | 50838点 |
3072 | 47.74 | 97.92 | 195.79 | 15933点 | 32838 .19 | 65621点 |
3328 | 55.70 | 114.25 | 228.36 | 20158 .79 | 41545 .91点 | 83022 .64点 |
3584 | 64.28 | 131.83 | 263.28 | 25083 .32 | 51670 .49点 | 103254 .99 |
3840 | 73.45 | 150.57 | 300.69 | 30747 .58 | 63318点 | 126532 .11点 |
4096 | 83.27 | 170.62 | 340.98 | 37183 .65点 | 76597 .28点 | 153067 .16 |
收集到的计时分为两组。第一组研究的是模数、基数和指数中的大数。第二组在使用仅设置了2位的小指数(特别是值10001h)时查看计时。这个数字有时用作RSA算法中的公共指数。在每一组中,都有两半。前半部分启用了优化(OCALC=1),后半部分禁用了优化。在每个半部分中,列出了不同时钟源的典型定时值。这些计时都以毫秒为单位显示。
表中给出的典型计时值是在每个寄存器中使用随机值进行的10次不同计算的平均值。模数是随机的,直到最高有效数字,它总是1。一般来说,每个参数中大约有一半的位被设置。
每次计算的计时使用定时器0作为一个除以12的时钟来测量。当16位定时器0滚动时,发生中断,并在6个外部计数字节上添加1。在计算结束时,计时器停止,外部计数字节和16位计时器计数显示为64位数字,给出了计算的长度。22.1MHz的振荡器每个计时器的分辨率为543ns。在11.0592MHz时分辨率为1.085µs。图2给出了计时MAA计算的伪代码。
图2、为模幂计算计时的伪代码
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308