rsa签名算法实现_国密算法在链化未来区块链中的运用
生活随笔
收集整理的這篇文章主要介紹了
rsa签名算法实现_国密算法在链化未来区块链中的运用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
密碼學是區塊鏈的基礎,區塊鏈中大量采用了密碼學算法,包括對稱加密,非對稱加密,單向散列算法,數字簽名等技術。
為了實現密碼學技術的自主可控,中國也定義了自己的國密標準,2020年央行頒布的《金融分布式賬本技術安全規范》中,明確要求國內的區塊鏈技術必須支持國密算法。鏈化未來區塊鏈現已完成對國密算法的支持,符合央行安全規范的全部要求。
本文首先介紹了對稱加密、非對稱加密和數字簽名的基本概念,然后重點講述了非對稱加密算法中的橢圓曲線密碼技術,最后闡述了國密算法在鏈化未來區塊鏈中的運用。針對openssl國密算法簽名驗簽性能低下的問題,鏈化未來對算法實現進行了優化,實現了3~4倍的性能提升,相關的優化代碼已經提交到openssl Github
(https://github.com/openssl/openssl/issues/11992)。
1、對稱加密與非對稱加密
1.1 對稱加密
對稱加密(symmetric cryptography)是指在加密和解密時使用相同密鑰的方式。對稱密鑰有很多別名,如公共密鑰密碼,傳統密碼,私鑰密碼,共享密鑰密碼等。圖1和圖2分別是對稱密碼加密,解密過程,加密和解密使用相同的密鑰,所以稱為對稱加密。圖1. 對稱密碼加密圖2. 對稱密碼解密1.2 非對稱加密
非對稱加密(asymmetric cryptography)在加密和解密時使用不同密鑰,非對稱加密也稱為公鑰加密(public-key cryptography)。它們通常是一對密鑰: 公鑰(public key)和私鑰(private key), 公鑰加密后的密文,私鑰可以解密;私鑰加密后的密文,公鑰可以解密。公鑰是由私鑰推導出來的,且公鑰是公開的。非對稱加密解決了對稱加密過程中,加密密鑰的分發問題。一般公鑰用于加密,私鑰用于解密。當私鑰用于加密時,本質就是數字簽名(digital signature),即用公鑰解密可以驗證信息確實為私鑰加密結果。公鑰密碼目前主要有如下幾種:- RSA(Ron Rivest, Adi Shamir和Leonard Adleman的姓氏的首字母組成),該算法利用大質因數分解的困難度。
- EIGamal,由Taher EIGamal設計,與RSA不同,它是利用mod N下求離散對數的困難度。
- Rabin,由M.O.Rabin設計的公鑰算法。Rabin方式求平方根的困難度
- 橢圓曲線密碼(Elliptic Curve Cryptography, ECC),
1.3 數字簽名
某天Alice向Bob發送郵件:“hi,Bob,給我打1 000 000元,賬號是6214 6576 8789 8987 賬號名Alice”。在現實生活中,Bob可能會打電話給Alice,確認下郵件是否是偽造;還要確認內容有沒有被篡改,防止收款賬號和金額被惡意修改;當然還有一種場景,Bob把錢打給了Alice,最后Alice卻否認發過這封郵件。能夠防止上述偽造,篡改和否認等威脅的技術就是前面提過的數字簽名。通常消息比較長,我們只對消息的散列值進行簽名,所以Alice發送郵件的流程如下:2 橢圓曲線加密算法詳解
上面我們了解了對稱加密和非對稱加密的基本概念,本節我們主要講用于數字簽名的非對稱加密算法中的橢圓曲線技術。2.1 基本概念
2.1.1 阿貝爾群
在數學中,群是一種代數結構,有一個集合以及一個二元運算+所組成,滿足以下條件:2.1.2 橢圓曲線方程
圖4. 橢圓曲線[1]在密碼學中,定義在素數域GFp的橢圓曲線方程為:E: ?y2 = x3 + ax + b 其中, a,b∈GFp且(4a3 + 27b2) mod p != 0除了p,a,b定義了曲線之外,通常還需要x, y, n來確定一條橢圓曲線。所以,描述一條有限域上的橢圓曲線,有六個變量:T = (p, a, b, x, y, n).p - 素數域內點的個數,p越大越安全,但是伴隨著計算量的增大a, b - 曲線系數x, y - G點的x, y軸坐標n - 為素數,且是G點的階。橢圓曲線上一點P,存在著最小的正整數,使得nP=0∞(原點或無窮遠點,以下無窮遠點用0表示),則稱n為P的階;若n不存在,我們說P是無限階。在素數域上,橢圓曲線所有點的階都存在。2.1.3 橢圓曲線上點運算
素數域橢圓曲線上的點也是阿貝爾群。單位元是無窮遠點0。橢圓曲線上點P的逆元是其x軸對稱的點。P和Q分別為素數域GFp上橢圓曲線兩點,它們的連線與橢圓曲線交于第三點R(見圖5中情況1),有P + Q + R = 0無窮遠點。有幾種特殊情況,分別是下圖中的2,3,4。第2種情況,直線與Q相切,可以看成Q和Q兩點相連,與橢圓曲線相交于P點,即Q + Q + P = 0;第三種P,Q兩點與y軸平行,因為兩條平行線相交于無窮遠點,所以有P + Q + 0 = 0;第四種情況,P和P相連,相交于無窮遠點。圖5. 橢圓曲線運算[1]根據以上我們有如下結論:Q + Q + P = 0即Q + Q = -P, (Q + Q) + (Q + Q) = (-P) + (-P),即以P的對稱點-P做切線,以此類推,我們可以快速得到2n*Q點, n∈[0, +∞)。在橢圓曲線用于加密中,私鑰就是一個大整數,公鑰就是橢圓曲線上的點G與私鑰的乘積。我們通過私鑰的二進制表示快速計算出公鑰。2.2 算法運用
橢圓曲線主要用于數字簽名,以下是實現數字簽名和簽名驗證的數學計算過程。2.2.1 數字簽名和簽名驗證
數字簽名主要需要消息m的散列值(摘要)h,私鑰kA,生成最終的結果{r,s};簽名驗證主要用到公鑰P,消息摘要h。以下是簽名生成和驗簽的計算過程。- 生成簽名,即計算r和s的過程
- 簽名驗證
- 證明為什么在驗證簽名過程中有這個特性?
2.2.2 橢圓曲線與RSA技術對比優勢
之前我們講過非對稱密碼RSA,國密推薦使用橢圓曲線加密,因為橢圓曲線比RSA有一定優勢:- 更安全。橢圓曲線基于離散對數困難度,計算復雜度是指數級的,求解難度大。而RSA算法是大質因數分解困難度,計算復雜度是亞指數級的。
- 更短的密鑰。同等安全程度要求下,橢圓曲線算法比其他公鑰算法需要的密鑰長度小很多。128bit橢圓曲線算法擁有1024bit RSA算法相同的安全程度。
2.3 常用幾種橢圓曲線
- secp256k1. 在比特幣和以太坊網絡中,用的是secp256k1,p是256位的素數,k代表Koblitz。a=0,b=7。曲線方程即y2=x3+7。Koblitz橢圓曲線具有一些特殊屬性,可以更有效地實現組操作。
- secp256r1. secp256k1的姊妹曲線。p也是256位的素數,但值和secp256k1曲線是不一樣的,r代表隨機。"隨機"選擇的參數更安全,然而,有些人懷疑隨機系數可能已經被選擇來提供后門。因此,比特幣網絡并沒有選擇它,而是選擇了更高效的secp256k1。
- SM2曲線。SM2是基于前人對ECC研究的基礎上,中國推薦的標準曲線。GB/T 35276-2017定義了SM2算法的具體實現。
3. 國密算法在鏈化未來中的運用
鏈化未來區塊鏈對國密算法對支持,除了SM2橢圓曲線外,還應用了SM3, SM4。- SM3 散列算法,生成256bit的散列值,主要用于替換SHA256算法。
- SM4 對稱加密算法,鏈化未來錢包公私鑰加密用SM4取代了aes128。
3.1 國密算法實現詳解
上面我們講解了橢圓曲線的原理,SM2曲線也是建立在其之上,但是也有自己的特點:3.1.1 SM2中h值的計算
在secp256k1中,h就是消息的散列值,而在SM2中,計算h值更復雜,需要分兩步計算:Z=SM3(ENTL||ID||a||b||xG||yG||xA||yA)
ID: 用戶身份標志的字符串
ENTL: 兩個字節表示的ID的比特長度
a, b: 曲線參數
xG, yG:G點坐標x,y軸
xA,yA:公鑰坐標x,y軸
3.2 國密算法優化
3.2.1 openssl SM2曲線性能問題
我們基于openssl開發SM2的實現,但是使用過程中發現簽名和驗證速度很慢,在Macbook Pro上,每10秒簽名22496次,每10秒驗簽24374次。定位到EC_POINT_mul速度慢。查看openssl的源代碼,它沒有對2n*G, n∈[0, 256](私鑰是256bit長)這樣的點進行預緩存。如私鑰二進制為:1000 1100,它對于的公鑰就是27*G + 23*G + 22*G,而2*G,22*G,23*G...2256*G都是已知的,所以只需要橢圓曲線上3個點的+運算,不需要每次重新計算。除此之外,有部分核心功能需要用匯編編寫,優化后性能有3-4倍的提高,如下表。表1. 性能優化前后對比
相應的優化代碼我們已經提交到openssl Github。圖6. 優化代碼提交到openssl Github
3.2.2 SM2簽名和消息無法recover公鑰
在secp256k1我們可以根據簽名{r,s}和消息恢復公鑰,但是SM2卻不能通過簽名和消息恢復公鑰,因為在SM2的h值計算過程中,我們用到了公鑰的坐標,所以必須知道公鑰了,和只有簽名和消息recover公鑰相矛盾。因為SM2無法通過簽名和消息recover公鑰,所以在對交易驗證的過程,我們都是取出公鑰然后驗證。但是,在我們的系統里,一個賬號可以擁有幾個公鑰,所以需要遍歷賬號的公鑰驗證交易,導致多公鑰賬號的交易執行性能會低些。幸運的是,我們統計系統中所有的賬號,99%只有一對公私鑰,所以理論上不會對系統整體性能造成影響。4. 結論
本文首先介紹了對稱加密和非對稱加密的基本概念,然后詳細介紹了非對稱加密技術中的橢圓曲線加密技術,最后闡述了鏈化未來區塊鏈對國密算法的支持,橢圓曲線加密部分的理解對數學基礎要求比較高。區塊鏈的去中心化信任建立密碼學之上,密碼學技術又建立在數學之上,所以說,In Math We Trust。參考文獻:
[1]. https://encyclopedia.thefreedictionary.com/elliptic+curve總結
以上是生活随笔為你收集整理的rsa签名算法实现_国密算法在链化未来区块链中的运用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中boxplot函数的参数设
- 下一篇: antd form rules字数限制_