A note on the calculation of some functions in finite fields: Tricks of the Trade解读

本节对该paper进行解读,记录笔记。

经常见到的是在素域Fp上计算的,尤其是双线性对出现后,在扩域Fpm上计效率就需要优化了。该论文主要总结了一些在有限域上进行某些计算(求模逆,hash到curve的转换算法,求模平方根等)的技巧。

素域#

模幂(modular exponentiation)#

模幂运算则是指先进行幂运算,在进行模运算,即XN(modp)

这样对于较小的N,一般这样计算:

方法1#

(1)根据运算规则ab(modp)=((amodp)b)modp ,我们知道33335555mod10=35555mod10。由于34=81,所以34mod10=1
(2)根据运算规则(ab)modp=(amodpbmodp)modp,由于5555=41388+3,我们得到

35555mod10=3(41388)33)(mod10)=((3(41388)(mod10)33(mod10))(mod10)=(17)(mod10)=7

计算完毕。
  利用这些规则我们可以有效地计算XN(modP)。简单的算法是将result初始化为1,然后重复将result乘以X,每次乘法之后应用mod运算符(这样使得result的值变小,以免溢出),执行N次相乘后,result就是我们要找的答案。

当N的值很大时,上面的方法需要计算很长时间,是不切实际的,一般用一下方法:

方法2#

(1)如果N是偶数,那么XN=XX[N/2]
(2)如果N是奇数,那么XN=XX(N1)=XXX[N/2]
其中[N]是指小于或等于N的最大整数。

(3)程序

// 函数功能:利用模运算规则,采用递归方式,计算X^N(% P)
// 函数名:PowerMod
// 输入值:unsigned int x,底数x
// unsigned int n,指数n
// unsigned int p,模p
// 返回值:unsigned int,X^N(% P)的结果
unsigned int PowerMod(unsigned int x, unsigned int n, unsigned int p)
{
    if (n ==0)
    {
        return1;
    }
    unsigned int temp = PowerMod((x * x)%p, n/2, p); //递归计算(X*X)^[N/2]
    if ((n &1) !=0) //判断n的奇偶性
    {
        temp = (temp * x) % p;
    }
    return temp;
}

求模逆(Modular inversion)#

意思是:对于ax+bp=gcd(x,p)=1,给出x,p,求a,b。简单点说,就是在模p下,求x的乘法逆元a

给出三种方法

方法1:扩展欧几里得( extended Euclidean algorithm)#

参考:求逆元
该方法的复杂度为O(m2),其中mp的bit数。

方法2:费马小定理( Fermat’s Little Theorem)#

a=xp2(modp)
具体请参考:求逆元
该方法基于模幂运算,复杂度为O(m3),可以在确定时间内完成。
速度慢,更简单,更安全!

方法3#

ax=1(modp),即a=1/x(modp)
该方法速度很快,但很难在确定时间内完成。

使用技巧#

比如要分别求1/x(modp)1/y(modp),可以将求两个模逆转换为求一个模逆,即求1/xy(modp),对于y/xy(modp)x/xy(modp)

二次剩余(Quadratic residuosity)#

也叫做“平方剩余”,是一个数学概念,具体指:
image

Legendre symbol#

image

模平方根(Modular square roots)#

就是如何计算二次剩余中的平方根x
使用Tonelli-Shanks方法计算:

x=a(p2e1)/2e+1modp

其中2e|(p1)

可逆平方根(inverse square root)#

即计算开方的倒数计算:(x)1(modp)

应用#

点的压缩(Point Decompression)#

Hash to Curve#

扩域#

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/16259219.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu