日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rsa签名算法实现_国密算法在链化未来区块链中的运用

發布時間:2024/9/30 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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發送郵件的流程如下:
  • Alice用單向散列函數計算郵件內容的散列值;
  • Alice用私鑰對散列值進行加密,得到的密文就是Alice對這條散列值的簽名,由于只有Alice才持有自己的私鑰,所以除了Alice本人,其他人無法生成相同的密文,簽出的簽名Alice也無法抵賴;
  • Alice將消息和簽名發送給Bob;
  • Bob用Alice的公鑰對收到的簽名進行解密的到散列值;
  • Bob將4中的得到的散列值與Alice直接發送的消息的散列值進行對比。如果兩者一致,則簽名驗證成功,否則驗證失敗。
  • 圖3. 數字簽名和簽名驗證

    2 橢圓曲線加密算法詳解

    上面我們了解了對稱加密和非對稱加密的基本概念,本節我們主要講用于數字簽名的非對稱加密算法中的橢圓曲線技術。

    2.1 基本概念

    2.1.1 阿貝爾群

    在數學中,群是一種代數結構,有一個集合以及一個二元運算+所組成,滿足以下條件:
  • 封閉性。集合內兩數進行二元運算,結果仍在集合中。
  • 結合性。a+b+c = a+(b+c)
  • 單位元。存在單位元0,使得a+0=0+a=a
  • 逆元。每個元素都存在相反數,對任意a,必存在b使得a+b=0
  • 交換律。a+b+c = a+c+b
  • 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的過程
  • 私鑰為大數kA,公鑰為私鑰與G點相乘的點,P = kAG
  • 生成隨機數小k,計算與基點的乘積K=kG,K點的x軸坐標Kx對橢圓曲線階n的模Kx (mod n)為r,即r = Kx (mod n)
  • 計算k基于曲線階的乘法逆元k-1(mod n)
  • r已經在第2步中生成,s=k-1(h+kAr)(mod n)
    • 簽名驗證
  • 計算s基于橢圓曲線階n的逆元s-1
  • 計算u1 = hs-1
  • 計算u2 = rs-1
  • 計算點Q=u1G+u2*P
  • 取點Q的x軸坐標Qx,若Qx等于r,即簽名過程中K點的x軸坐標Kx,則驗證通過。
    • 證明為什么在驗證簽名過程中有這個特性?
  • 根據簽名計算可知,s=k-1(h+kAr)(mod n),兩邊乘k有sk=(h+kAr)(mod n)。
  • 點Q=u1G+u2*P,又P=KAG,有Q=u1G+u2KAG
  • 把u1和u2代入,Q=hs-1G+rs-1KAG=(h+rkA)s-1G
  • 把步1公式代入步驟3中,Q=sk*s-1G = kG,所以,假如{r,s}, h正確,點K和點P有相同的x軸坐標
  • 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值更復雜,需要分兩步計算:
  • 通過sm3算法計算出Z值:
    Z=SM3(ENTL||ID||a||b||xG||yG||xA||yA)
    ID: 用戶身份標志的字符串
    ENTL: 兩個字節表示的ID的比特長度
    a, b: 曲線參數
    xG, yG:G點坐標x,y軸
    xA,yA:公鑰坐標x,y軸
  • 使用Z和待簽名的消息,通過sm3算出雜湊值h,h=SM3(Z||M)
  • 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签名算法实现_国密算法在链化未来区块链中的运用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。