關於橢圓曲線密碼學的探究

買賣虛擬貨幣
橢圓曲線密碼學(ECC),是一種基於橢圓曲線數學誕生的非對稱秘鑰加密的演算法,加密過後只有特定的人才能對其進行解密。例如,ECC可用於確保使用者在傳送電子郵件時,除了收件人之外,沒有人可以閱讀這封郵件。橢圓曲線是近幾十年來被廣泛探索的一個重要數學新領域。它作為一種解決複雜數字問題的工具,以及在密碼學中的應用顯示出巨大的潛力。本文內容整理自Trias技術團隊與北大軟微學院的學術沙龍活動。橢圓曲線數學在探究ECC之前,我們有必要回顧一下橢圓曲線數學。我們定義平行線相交於無窮遠點P∞,使平面上所有直線都統一為有唯一的交點,而區別於無窮遠點的原來平面上的點為平常點。透過無窮遠點和平常點我們可以引入射影平面的概念。
射影平面:平面上全體無窮遠點與全體平常點構成射影平面。而橢圓曲線,指的就是在射影平面上滿足威爾斯特拉斯方程(Weierstrass)所有點的集合,且曲線上所有點都是非奇異的。

所謂非奇異,指的是曲線上任意一點的偏導數不能同時為0。

明白了橢圓曲線的由來,我們再來看橢圓曲線在密碼學上應用的方案。首先面對的問題就是橢圓曲線是連續的,並不適合用於加密。因此,橢圓曲線密碼學的第一要務就是把橢圓曲線定義在有限域上,(有限域Fp ,p為素數),並提出一條適於加密的曲線:y2=x3+ax+b (modp)。 

相比起在商業中被廣泛採用的RSA加密演算法,ECC優勢是可以使用更短的金鑰,來實現與RSA相當或更高階別的安全。透過下圖我們清楚的發現,160位ECC加密安全性相當於1024位RSA加密,而210位ECC加密安全性甚至相當於2048位RSA加密。

眾所周知,比特幣中的公私鑰生成以及簽名演算法ECDSA都是基於橢圓曲線加密演算法而誕生的。ECDSA演算法可以說是應用最廣泛的橢圓曲線簽名演算法,從比特幣開始,並且已經被其它區塊鏈專案所廣泛使用。在區塊鏈中使用的公鑰生成演算法是SECP256K1。

其中以太坊和比特幣的在ECDSA中的區別在於二者使用的雜湊演算法不同,在比特幣中使用的是SHA2-256,在以太坊中使用的是SHA3-256,同樣位元組數的SHA3比SHA2更安全。

橢圓曲線加密與並行性

學術界已經提出了很多不同的ECC選擇標準,每一個都試圖確保橢圓曲線離散對數問題(ECDLP)是困難的。而ECDLP是在給定使用者公鑰的情況下查詢ECC使用者金鑰的問題。

但遺憾的是,雖然標準曲線在安全實現理論上可行,但實踐卻表明,ECDLP並不足以完全保障ECC的安全性。人們發現,很多攻擊可以繞過困難問題,在不解決ECDLP的情況下破壞了現實中在使用的ECC。

因此,如何選擇更優質的曲線來保障安全,並能夠比較簡單的高效率實現,就成了安全曲線相關課題擺在明面上的難題。

為了達到上述目的,許多解決方案透過各國的學術論文被提了出來。但隨後很多的研究表明,許多所謂能提高效率的決策都不靠譜,有的並沒有作用,還有的雖然有用,但是會損害安全性。

透過研究發現,基於橢圓曲線的密碼系統主要有7個系統引數T=(q,FR,a,b,G,n,h),其中q表示所選擇的有限域;FR是有限域上的元素的表示方法;a和b表示橢圓曲線的引數;G是在曲線上選擇的基點;n表示該基點的階,是一個足夠大的素數;h是n的餘因子,是一個小整數。

在所有橢圓曲線公鑰密碼體系的實現中,有兩種型別的基本運算:一類是在密碼體系設計階段要用到的基本運算,另一類是執行階段所要用到的。第一類是橢圓曲線密碼體系基本引數的選取,包括安全橢圓曲線的尋找和基點的選取兩部分;第二類是橢圓曲線有限域上的各種代數運算,包括點加、倍點和數乘三種運算。

另外,曲線係數的選取必須滿足判別式δ=4a3+27b2≠0,這是曲線選取的必要條件。異常曲線和超奇異曲線已經被證明是不安全曲線,一定要避免使用。

關於橢圓曲線並行加速

同 RSA 公鑰密碼相比,橢圓曲線密碼提供了更高的單位位元安全強度 , 160 位金鑰長度的橢圓曲線密碼提供的安全強度,相當於 1024 位金鑰長度的 RSA 密碼提供的安全強度。在這種背景下,對運算進行最佳化便具有重要意義,並行加速便是最佳化運算的一種方式。

橢圓曲線加密的並行性處理方式到目前尚在學術界討論階段,是一個比較前沿的研究方向。就目前從技術角度而言,並行性存在著安全隱患和效率提升不明顯等問題,所以這項技術尚未大規模落地投入應用。即便是以比特幣為代表的加密貨幣這樣的輕量級應用,出於種種顧慮,也未採用並行加速。

北大方躍堅老師提出了4種提升橢圓加密演算法效率的方式:

1、多執行緒並行
2、GPU並行
3、專用硬體並行處理器
4、SSE指令加速

這4種方法各有優劣,如GPU並行雖然單位時間內總吞吐量較高,但單個運算卻不如CPU;專用硬體雖然能較為容易的將點乘轉化為點加提升速度,在抗攻擊等方面則存在一些問題。

馮新宇博士從等式Q=KP出發,提出了幾種可能提高演算法效率的方法。在這個等式中,K是一個大整數,P相當於私鑰,Q相當於公鑰,所有這些演算法都是透過對整數K進行轉化來減少點運算的次數。想要提升效率,就要找到一個快速計算出K·P結果的辦法,既然P不能變,那就只能從K來入手。

二進位制演算法:將K轉換成2進位制(即2的冪)的形式,然後再進行背點運算和點加運算,時常和滑動視窗方法結合起來使用。

視窗NAF方法:透過編碼來減少位元位中含1的個數,從而減少點加的次數。但是有一個缺點,即不能抗邊通道攻擊。

邊通道攻擊(SCA, Side Channel Attack)是一種透過分析密碼裝置洩露的邊通道資訊來推測秘鑰的密碼分析方法。

滑動視窗方法:透過跳過位元值為0的位來減少點加的次數。

Montgomery:Montgomery 型橢圓曲線定義為E :By2 =x3 +Ax2 +x。此處 , A , B ∈ Fpn並且B(A2 -4)≠0。Euclid 加法鏈是滿足如下條件的加法鏈 :v1 =1 , v2=2 , v3 =v1 +v2,對所有的 3 ≤i ≤l -1 ,如果 vi =vi -1 +vj(j <i -1),則 vi +1 =vi +vi -1或 vi +1 =vi +vj。透過輾轉相減可以求得計算任意整數 k 的加法鏈,但該加法鏈的長度取決於選取的減數g ,求最短加法鏈問題是一個 NP 完全問題。

NP完全問題,是世界七大數學難題之一。NP的英文全稱是Non-deterministic Polynomial的問題,即多項式複雜程度的非確定性問題。簡單的寫法是 NP=P?,問題就在這個問號上,到底是NP等於P,還是NP不等於P。

固定視窗方法:預存P的i倍來減少點加次數。這種方法很容易理解,即將幾種可能的情況提前算好,使用的時候直接拿來取用,提升效率的辦法。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;