利用橢圓曲線進行加密通訊

kekefen01發表於2020-12-14

一個利用橢圓曲線進行加密通訊的過程:

1、使用者A選定一條橢圓曲線Ep(a,b),並取橢圓曲線上一點,作為基點G。
  2、使用者A選擇一個私有金鑰(隨機數)k,並通過某種快速演算法生成公開金鑰K=kG。
  3、使用者A將Ep(a,b)和點K,G傳給使用者B。
  4、使用者B接到資訊後 ,將待傳輸的明文編碼到Ep(a,b)上一點M,併產生一個隨機整數r(r<n)。
  5、使用者B計算點P1=M+rK;P2=rG。
  6、使用者B將P1、P2傳給使用者A。
  7、使用者A接到資訊後,計算P1-kP2,結果就是點M。

因為P1-kP2=M+rK-k(rG)=M+rK-r(kG)=M,再對點M進行解碼就可以得到明文。

在這個加密通訊中,如果有一個偷窺者H ,他只能看到Ep(a,b)、K、G、P1、P2。
H有兩種方式獲得明文M,一是通過K、G求k,二是通過P2、G求r,都是相對困難的,都需要通過窮舉法暴力破解k或r,演算法複雜度為O(n)。而在做乘法的時候,知道k和G求K,可以有捷徑,比如說通過倍乘相加的方式,這樣可以將演算法複雜度減少到O(logn)。因此,H很難得到A、B間傳送的明文資訊。

簡單來說,假如有種運算,乘法很容易,但是不存在除法。令G=7,私鑰=100,計算出公鑰=700,發給前端是7和700。
前端要傳送的密文假設是28,那麼他尋找一個隨機數r,發給後端28+700r 以及 7r
後端拿到28+700r和7r後,可以很輕鬆地計算出密文28= 28+700r- 7r*私鑰100
H想要破解,只有通過700、7求乘數100,或者通過7r、7來求乘數r的值(M=P1-rK),只能窮舉破解。

SM2非對稱加密的結果由C1,C2,C3三部分組成。最開始的國密標準的結果是按C1C2C3順序的,新標準的是按C1C3C2順序存放的。
其中C1是加密方根據生成的隨機數r,計算出的的橢圓曲線點C1 = rG
C2是密文資料,首先計算rK=X,再以X的兩座標為引數,以某種方式計算出一個位元組流t,將位元組流t異或明文M獲得密文C2,C2=F(rK) ^ M
C3是SM3的摘要值。

解密:因為 M = F(rK) ^ C2,又因為kC1 = rkG = rK,所以 M = F(kC1) ^ C2

相關文章