【超級賬本】前置知識點-ECC
阿新 • • 發佈:2018-12-12
【參考資料】
橢圓曲線
數學上定義滿足如下方程的點的集合稱之為橢圓曲線:
$Y^2X+a_1XYZ+a_3YZ^2=^3+a_2X^2Z+a_4XZ^2+a_6Z^3$
參考檔案中的圖例,在離線的橢圓曲線上定義了一個運算,即從P點座標 + P點座標 = R點座標。通過這個運算在橢圓曲線的集合上構建了一個群,
這個群是一個有限迴圈群。
可以理解為 $\left\{ P, P^2, P^3, ....., P^n \right\}$
由於群的封閉性,你總可以有一個P點,然後經過k次加法(跳轉後)達到一個點R。同時由於群的可逆性也可以從R點反推回P。
所以這裡所謂群的概念與演算法本身無多大關係,只是從理論上證明了這種跳轉用於加密的合理性,諸如封閉、可逆等等
橢圓曲線加密(ECC)
橢圓曲線加密和RSA一樣是一種非對稱加密演算法,核心也是某個運算正向處理很簡單,而反向處理非常困難。在RSA中利用的是兩個大質數求積很容易,但反向分解出兩個大質數則很難。
同樣對於ECC而言,由P(通常稱為G點)經過k(k<=n)次後得到$P_k$
運算簡單,而已知P和$P_k$
求k非常困難 實際運用中P、n會取的相當大!!!
備註:這裡的n稱為階,應具備$n \times G = 0$
ECC加解密流程如下:
- Alice選擇一條曲線E、基點P和階數n;
- Alice選擇一個階數k<n(私鑰),得到P在k次運算後的點
$P_k$
(公鑰) - Aliec傳送曲線E、P和
$P_k$
- Bob收到資訊後首先將明文資訊(當前假設只有一個值)對應到E上的某個座標點M,同時取隨機階r
- Bob計算兩個值
$C_1=M+rP_k \quad C_2=rP$
,併發送給Alice - Alice收到這兩個值通過
$M=C_1-kC_2$
得到明文
基於橢圓曲線的數字簽名(ECDSA)
ECDSA 簽名及驗證流程如下:
簽名的步驟:
- Alice選擇一條曲線E、基點P和階數n;
- Alice建立一對祕鑰,其中私鑰是
$d_A$
(一個小於n的整數),公鑰是$Q_A = d_A \times G$
- Alice要對明文m進行簽名;
- Alice首先計算m的hash值,例如SHA-2等,得到e=hash(m);
- 取e最左側的n位(n為階數),得到
$z=L_n$
; - 在[1,n-1]之間取密碼安全的隨機整數k;
- 計算其對應曲線上的一個點
$(x_1, y_1) = k \times G $
- 計算得到
$r=x_1 \quad mod \quad n$
,如果是0,則回到第5步重取隨機數 - 計算得到
$s=k^-1(z+rd_A) \quad mod \quad n$
如果n為0,則回到第5步重新開始 - Alice得到簽名(r, s)
驗證的步驟:
- Bod得到公鑰
$Q_A$
、曲線G、階數n、簽名對(r, s)和hash演算法; - Bob計算m的hash值,得到e=hash(m);
- 取e最左側的n位(n為階數),得到
$z=L_n$
; - 計算得到
$w=s^{-1} \quad mod \quad n$
; - 計算得到
$u_1=zw \quad mod \quad n$
和$u_2=rw \quad mod \quad n$
- 計算得到一個曲線上的點
$(x_1, y_1)=u_1 \times G + u_2 \times Q_A$
- 若
$r = x_1(mod \quad n)$
則證明簽名是正確的
ECC164位的金鑰產生一個安全級,相當於RSA 1024位金鑰提供的保密強度,而且計算量較小,處理速度更快,儲存空間和傳輸頻寬佔用較少。目前我國居民二代身份證正在使用 256 位的橢圓曲線密碼,虛擬貨幣比特幣也選擇ECC作為加密演算法。我理解在ECDSA中之所以有了SHA的hash還要再用EC的原因也在於此,用更小的計算量得到更高的加密等級。