相關基礎數學知識請看:https://blog.csdn.net/weixin_43790779/article/details/105621372
RSA (大整數分解)
- 密鑰生成:
- 大素數:p、q (至少爲1024位 );
- n=p×q,φ(n)=(p−1)(q−1) ,其中 φ(n) 是n的歐拉函數值;
- 選擇一整數e,滿足1<e<φ(n),且gcd(φ(n), e)=1;
- 計算d,滿足 d⋅e≡1modφ(n);
- 公鑰{e, n},私鑰{d, n}。
- 加密:
c≡memodn
- 解密:
m≡cdmodn
ElGamal密碼 (離散對數問題)
- 密鑰生成:
- p,一個較大的素數;
- g,Zp∗ 中的生成元;
- α∈Zp−1,β=gαmodp ;
- p,g,β爲公鑰;α爲私鑰;
- 加密:
隨機生成一個祕密數k,k∈Zp−1 。
E(x,k)=(r,s),其中r=gkmodps=xβkmodp
- 解密:
D(r,s)=s(rα)−1modp=xgakg−akmodp=x
橢圓曲線上ElGamal祕密(橢圓曲線,離散對數問題)
- 密鑰生成:
在橢圓曲線Ep(a,b) 上選取一個階爲n(n爲一個大素數)的生成元P。隨機選取整數x(1<x<n),計算Q=xP。公鑰爲Q,私鑰爲x。
- 加密:
爲了加密Pm,隨機選取一個整數k,1<k<n,計算
C1=kP,C2=Pm+kQ
則密文c=(C1,C2)。
- 解密:
爲了解密一個密文c=(C1,C2),計算
C2−xC1=Pm+kQ−xkP=Pm+kxP−xkP=Pm
攻擊者要想從c=(C1,C2),計算出Pm,就必須知道k。而要從P和kP中計算出k將面臨求解橢圓曲線上的離散對數問題。