OpenSSL密码库算法笔记——第2.2.1章 除法算法函数Barrett约化的思想

记x÷m的商的为q。先来对商q做个小小的变形。

…………(2.1)

这样一来,就相当于把x和m“分离”了,“分离”出来的B2k/m与x无关。既然B2k/m的值与x无关,那么这部分值就可以预先计算出来。

再来看另外一部分x/B2k。x的低t(t为某个不确定的值,需要在后面估算)个字对q的影响应该非常有限。这就好比在计算两个十进制大数(足够大的数)相乘时,把被乘数的足够低的位(比如百位以下)都当成零再来计算乘积,这样得到的结果和准确的乘积相差不会很多,同时计算起来也更方便。基于这个想法,所以可以考虑扔掉低t个字。

               …………(2.2)

只要t值取的好,那么既能使q的真实值和估计值的误差很小,又能大大的简化运算。t到底取多少才合适呢?这在后面给出。

现在考虑(2.2)式的右边。如果对前两个除式取整,忽略掉小数部分,那么就可以得到Barrett对q的估计值:

                  …………(2.3)

再现来考虑一个问题:忽略掉的那些小数部分对估计值的影响有多大呢,即估计值和真实值的差值会不会很大,t的值到底应该取多少才最好呢?

如果,则两者之差最多为2:

                          …………(2.4)

更进一步,在90%的情况下,估计值和真实值q是相等的,而两者之差为2的可能性也只有大约1%。

t的最优取值为t=k+1,这里所谓的最优是指既能使得所做的运算最简单又能使最大误差最小[7,8]。

余数的估计值为(如果B>2)

  …………(2.5)

由于商的估计值和真实值最多相差2,所以余数的估计值最多比2m大些,此时只需做两次减法减去m。

        这里说明一下。以上结论是对B>2而言,如果取B=2的话(给出的C程序就是如此),以上估算思想同样适合,只是\widehat{q}和q的差就会比2更大,这就使得从\widehat{r}求出r可能需要做更多次减法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值