國密SM2非對稱演算法與實現

來源:互聯網
上載者:User

國密SM2是非對稱密碼演算法,是基於ECC演算法的非對稱演算法。SM2演算法標準公佈於:http://www.oscca.gov.cn/News/201012/News_1197.htm,有興趣的可下載學習。

       國密SM2演算法標準包括4個部分,第1部分為總則,主要介紹了ECC基本的演算法描述,包括素數域和二元擴域兩種演算法描述,第2部分為數位簽章演算法,這個演算法不同於ECDSA演算法,其計算量大,也比ECDSA複雜些,也許這樣會更安全吧,第3部分為金鑰交換協議,與ECDH功能相同,但複雜性高,計算量加大,第4部分為公開金鑰加密演算法,使用ECC公開金鑰進行加密和ECC私密金鑰進行密碼編譯演算法,其實現上是在ECDH上分散出流密鑰,之後與明文或者是密文進行異或運算,並沒有採用第3部分的金鑰交換協議產生的密鑰。對於SM2演算法的總體感覺,應該是國家發明,其計算上比國際上公布的ECC演算法複雜,相對來說演算法速度可能慢,但可能是更安全一點。

        SM2標準還公布了一條建議的256位的ECC曲線,但沒有在國際上被公認。SM2演算法是好,但要使用,又有很多障礙,就是統一的國際標識與互認,如演算法沒有OID標識,曲線也沒有公認OID標識,這在通用上就大打折扣了,這一點需要考慮的。

        網上可以查到一些SM2演算法的實現代碼,有C#的、有Java的,還有C的,但想找到一個完整的C語言代碼還是很難,人家做了不公開,演算法標準都公開的,代碼不開源啊,但比較有意義的是這些代碼都是使用Openssl或bouncycastle這些開源的演算法庫實現的。但至少給你個資訊,使用開源密碼演算法可以實現SM2演算法。

        要實現SM2演算法,首先要實現ECC曲線基本描述,這個要獨立去寫還是需要很多計算演算法能力的,不是搞數學的,還是有許多難度的。Openssl的ECC演算法是SUN公司奉獻的,大家就是大家,寫的就是好。Bouncycastle也是一個比較好的演算法,有Java版和C#版,網上可以得到C#的SM2演算法,但是使用C語言的代碼能夠下載的SM2都有一點騙人感情啊,只給了代碼測試回合包,沒有公開源碼。

        筆者按著這些資訊,細細分析了Openssl的ECC、ECDSA、ECDH演算法,可以作為基礎用來實現SM2是豪無問題的,待代碼進一步完善後可以與大家分享。

        最後說一下,RSA與ECC。這兩位都是目前主流的非對稱式加密演算法,也代表了2大密碼編譯演算法難題,一個是大素數分解,一個離散對數難題。RSA的模長在不斷的加大,1024不可用了,要用2048,這計算量啊要求也大,就需要使用計算量小的ECC演算法,但RSA已大行其道這麼多年,還不會馬上被ECC所替換,ECC使用也很複雜,要定義多種曲線,要管理這些參數曲線,否則很難互連,還有專利的限制等等。ECC的密碼編譯演算法也不同於RSA,有公開金鑰加密和私密金鑰解密,而RSA加解密都有啊。不論是RSA還是ECC都是計算上的複雜,隨著時間,密鑰長度都將加長,這就需要有更好的密碼演算法來替代了。也許不需要等到那一天,人類社會發展會非常完善,不要求輸入密碼了,是個完全透明的、可信任的社會了。

       使用Openssl實現的SM2演算法代碼如下:http://download.csdn.net/detail/goldboar/3833072,為演算法實現示範,請參考。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.