Loading... <div class="tip inlineBlock share"> 乘法逆元定义:群G中任意一个元素a,都在G中有唯一的逆元a',具有性质aa'=a'a=e,其中e为群的单位元。 </div> 举例: > 例如:4关于1模7的乘法逆元为多少? > 4X≡1 mod 7 > 这个方程等价于求一个X和K,满足 > 4X=7K+1 > 其中X和K都是整数。 > 若ax≡1 mod f, 则称a关于1模f的乘法逆元为x。也可表示为ax≡1(mod f)。 > 当a与f互素时,a关于模f的乘法逆元有解。如果不互素,则无解。如果f为素数,则从1到f-1的任意数都与f互素,即在1到f-1之间都恰好有一个关于模f的乘法逆元。 > 例如,求5关于模14的乘法逆元: > 14=5x2+4 > 5=4x1+1 > 说明5与14互素,存在5关于14的乘法逆元。 > 1=5-4=5-(14-5x2)=5x3-14 > 因此,5关于模14的乘法逆元为3。 其求法可用[欧几里德算法](https://baike.baidu.com/item/%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%B7%E7%AE%97%E6%B3%95): > Extended Euclid (d,f) //算法求d关于模f的乘法逆元d-1 ,即 d* d-1 mod f = 1 > 1 。(X1,X2,X3) := (1,0,f); (Y1,Y2,Y3) := (0,1,d) > 2。 if (Y3=0) then return d-1 = null //无逆元 > 3。 if (Y3=1) then return d-1 = Y2 //Y2为逆元 > 4。 Q := X3 div Y3 //整除 > 5。 (T1,T2,T3) := (X1 - Q*Y1,X2 - Q*Y2,X3 - Q*Y3) > 6 。(X1,X2,X3) := (Y1,Y2,Y3) > 7。 (Y1,Y2,Y3) := (T1,T2,T3) > 8。 goto 2 常用于加密算法中,如仿射算法。求此算法还可以使用费马小定理,只不过局限性比较大,要求模数是素数,a^(p-1)≡1(mod p),p要求是素数,那么a^(p-2)就是a的乘法逆元。 ``` def EX_GCD(a, b, arr): # 扩展欧几里得 if b == 0: arr[0] = 1 arr[1] = 0 return a g = EX_GCD(b, a % b, arr) t = arr[0] arr[0] = arr[1] arr[1] = t - int(a / b) * arr[1] return g def ModReverse(a, n): # ax=1(mod n) 求a模n的乘法逆x arr = [0, 1, ] gcd = EX_GCD(a, n, arr) if gcd == 1: return (arr[0] % n + n) % n else: return -1 a = 7**79 b = 263 arr = [0, 1, ] print(a, '模', b, '的乘法逆:', ModReverse(a, b)) print(a, '和', b, '的最大公约数:', EX_GCD(a, b, arr)) print(arr[1], '×', b, '+', arr[0], '×', a, '= 1') ``` <div class="tip inlineBlock info"> `ElGamal算法`,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。 </div> > 加密算法: > `公开全局量` > q ----- 素数 > a ----- a<q,且a是q的素根 > `Alice生成的密钥` > 选择私钥$X_A$ -----$X_A<q-1$ > 计算$Y_A$ ----- $Y_A=a^{X_A} mod q$ > 公开密钥 ----- $PU=\{q,a,Y_A\}$ > 私钥 ----- $X_A$ > `Bob用Alice的公钥加密` > 明文 ----- $M<q$ > 随机选择整数$k$ ----- $k<q$ > 计算$K$ ----- $K=(Y_A)^k mod q$ > 计算$C_1$ ----- $C_1=a^k mod q$ > 计算$C_2$ ----- $C_2=KM mod q$ > 密文 ----- $(C_1,C_2)$ > `用Alice的私钥解密` > 密文 ----- $(C_1,C_2)$ > 计算$K$ ----- $K=(C_1)^{X_A} mod q$ > 明文 ----- $M=(C_2*K^{—1}) mod q$ Last modification:January 7th, 2021 at 03:59 pm © 允许规范转载 Support 喜欢就加个鸡腿吧! ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat