当前位置 : 主页 > 编程语言 > 其它开发 >

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

来源:互联网 收集:自由互联 发布时间:2022-05-30
本节对该paper进行解读,记录笔记。 经常见到的是在素域 \(F_p\) 上计算的,尤其是双线性对出现后,在扩域 \(F_{p^m}\) 上计效率就需要优化了。该论文主要总结了一些在有限域上进行某些

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

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

素域 模幂(modular exponentiation)

模幂运算则是指先进行幂运算,在进行模运算,即\(X^N(mod p)\)

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

方法1

(1)根据运算规则\(ab(mod p)=((a mod p)b) mod p\) ,我们知道\(3333^{5555}(mod10)= 3^{5555}(mod10)\)。由于\(3^4 = 81\),所以\(3^4(mod10)= 1\)
(2)根据运算规则\((a*b)modp=(amodp*bmodp)modp\),由于\(5555 = 4 * 1388 + 3\),我们得到

\[3^{5555}(mod10)=(3^{(4*1388)} * 3^3)(mod10)=((3^{(4*1388)}(mod10)* 3^3(mod10))(mod10)=(1 * 7)(mod10)= 7 \]

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

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

方法2

(1)如果N是偶数,那么\(X^N =(X*X)^{[N/2]}\)
(2)如果N是奇数,那么\(X^N = X*X^{(N-1)} = X *(X*X)^{[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(m^2)\),其中\(m\)\(p\)的bit数。

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

\(a=x^{p-2}(mod p)\)
具体请参考:求逆元
该方法基于模幂运算,复杂度为\(O(m^3)\),可以在确定时间内完成。
速度慢,更简单,更安全!

方法3

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

使用技巧

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

二次剩余(Quadratic residuosity)

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

Legendre symbol

image

模平方根(Modular square roots)

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

\[x=a^{(p-2^e-1)/2^{e+1}}mod p \]

其中\(2^e | (p-1)\)

可逆平方根(inverse square root)

即计算开方的倒数计算:\((\sqrt{x})^{-1}(mod p)\)

应用 点的压缩(Point Decompression) Hash to Curve 扩域 【本文来源:武汉网站推广 http://www.5h5q.com/wzyh/ 提供,感谢支持】
上一篇:静态应用程序安全测试 (SAST) 工具
下一篇:没有了
网友评论