常見公鑰算法加解密公式

相關基礎數學知識請看:https://blog.csdn.net/weixin_43790779/article/details/105621372

RSA (大整數分解)

  1. 密鑰生成:
    • 大素數:p、q (至少爲1024位 );
    • n=p×qφ(n)=(p1)(q1)n=p×q ,φ(n)=(p-1)(q-1) ,其中 φ(n)φ(n) 是n的歐拉函數值;
    • 選擇一整數e,滿足1<e<φ(n),且gcd(φ(n), e)=1;
    • 計算d,滿足 de1modφ(n)d·e ≡1 mod φ(n)
    • 公鑰{e, n},私鑰{d, n}。
  2. 加密:
    cmemodn c ≡ m^e mod n
  3. 解密:
    mcdmodn m ≡ c^d mod n

ElGamal密碼 (離散對數問題)

  1. 密鑰生成:
    • p,一個較大的素數;
    • g,ZpZ^ *_ p 中的生成元;
    • αZp1,β=gαmodp\alpha \in Z_{p-1} ,\beta=g^{\alpha} mod p
    • p,g,β爲公鑰;α爲私鑰;
  2. 加密:
    隨機生成一個祕密數k,kZp1k\in Z_{p-1}
    E(x,k)=(r,s),r=gkmodps=xβkmodp E(x,k)=(r,s),其中 r=g^k mod p s=x\beta^k mod p
  3. 解密:
    D(r,s)=s(rα)1modp=xgakgakmodp=x D(r,s)=s(r^\alpha)^{-1} mod p=xg^{ak}g^{-ak}mod p=x

橢圓曲線上ElGamal祕密(橢圓曲線,離散對數問題)

  1. 密鑰生成:
    在橢圓曲線Ep(a,b)E_p(a,b) 上選取一個階爲n(n爲一個大素數)的生成元P。隨機選取整數x(1<x<n),計算Q=xP。公鑰爲Q,私鑰爲x。
  2. 加密:
    爲了加密PmP_m,隨機選取一個整數k,1<k<n,計算
    C1=kP,C2=Pm+kQ C_1=kP, C_2=P_m+kQ
    則密文c=(C1,C2)c=(C_1,C_2)
  3. 解密:
    爲了解密一個密文c=(C1,C2)c=(C_1,C_2),計算
    C2xC1=Pm+kQxkP=Pm+kxPxkP=Pm C_2-xC_1=P_m+kQ-xkP=P_m+kxP-xkP=P_m
    攻擊者要想從c=(C1,C2)c=(C_1,C_2),計算出PmP_m,就必須知道k。而要從P和kP中計算出k將面臨求解橢圓曲線上的離散對數問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章