國密版openssl開源實現TASSL,符合GMT 0024-2014《SSL VPN技術規範》

今天這裏主要爲了給大家介紹一個開源國密openssl的實現,這版實現是北京江南天安科技有限公司的開源版,完全符合國密規範GMT 0024-2014《SSL VPN技術規範》。這裏把github上的readme粘貼出來。國密openssl實現代碼

北京江南天安科技有限公司支持國密證書和協議的TASSL

OpenSSL是一套件開放源代碼的安全套接字密碼學基礎庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL/TLS協議,並提供豐富的API,以供應用程序開發、測試或其它目的使用。它廣泛地集成在各種類型的操作系統中,作爲其基礎組件之一,深愛廣大IT愛好者的喜愛。即使用某些操作系統沒有將其集成爲組件,通過源代碼下載,也是十分輕鬆地構建OpenSSL的開發及應用環境。

儘管OpenSSL的功能十分強大且豐富,然而對於中國商用密碼體系的算法及相關應用來說,它距離我們還是十分遙遠,因爲它僅僅包含的國際通用的密碼算法、認證體系及相關協議,卻沒有將中國商用密碼體系中的公開算法SM2、SM3、SM4及祖沖之流密碼算法納入其中,也不支持雙證書體系的應用及相關協議。這對於推廣及研究中國商用密碼體系的廣大密碼愛好者來說,卻是十分無奈的事情。國內也存在着不少密碼界同仁,嘗試着將OpenSSL國密化,但其大多都侷限於公司內部交流使用,這對於國密SSL的推廣不利。針對這種現狀,北京江南天安公司經過長時間的研究分析,於2017年上半年推出天安版國密OpenSSL,也就是TaSSL,解決了中國商用密碼體系無法構建基於OpenSSL應用的實際問題。現以源碼的形式提供出來,供大家參考使用,爲促進國密的推廣和應用貢獻自己的一份力量。

(一)天安TaSSL的功能特點

  1. 將國密算法SM2、SM3、SM4及祖沖之流密碼算法作爲OpenSSL的內置算法,並且嚴格按照《GMT 0006-2012 密碼應用標識規範》定義的OID來對相關國密算法進行標識;
  2. 將SM2作爲EC的內置曲線,可通過ECDSA、ECDH分別完成SM2的簽名和密鑰協商;
  3. 可通過EVP_DigestSignInit、EVP_DigestSignUpdate、EVP_DigestSignFinalEVP_DigestVerifyInit、EVP_DigestVerifyUpdate、EVP_DigestVerifyFinal智能化、自動化完成SM2的簽名和驗簽過程;
  4. 實現SM2公鑰加密算法的同時,也將ECIES的公鑰加密算法添加到OpenSSL中,可完成國際EC曲線的公鑰加密;
  5. 可通過引擎的方式來實現SM1算法的應用;
  6. 實現了《GMT 0024-2014 SSL VPN技術規範》中與SM2相關的國密TLSv1.1的密碼套件;
  7. 添加了對中國商用密碼體系的雙證書的支持;
  8. 完善了OpenSSL命令行工具對中國商用密碼體系算法的支持;
  9. 完善了X509對中國商用密碼體系的支持。

(二)天安TaSSL添加的及完善的API

Crypto相關的API

  1. EVP_sm3():取摘要算法SM3算法的EVP調用函數指針;
  2. EVP_sm4()、EVP_sm4_cbc():取SM4對稱加密算法CBC模式的EVP調用的函數指針;
  3. EVP_sm4_cfb():取SM4對稱加密算法CFB模式的EVP調用的函數指針;
  4. EVP_sm4_ecb():取SM4對稱加密算法ECB模式的EVP調用的函數指針;
  5. EVP_sm4_ofb():取SM4對稱加密算法OFB模式的EVP調用的函數指針;
  6. EVP_PKEY系列函數:完善了此係列函數對SM2算法的調用;
  7. EVP_DigestSignInit()、EVP_DigestVerifyInit():完善了SM2簽名時的Z值的計算;
  8. EVP_PKEY_CTX_set_sm2_peer_id():設置SM2密鑰協商所需對方的可辨識ID及長度;
  9. EVP_PKEY_CTX_set_sm2_self_id():設置SM2密鑰協商所需己方的可辨識ID及長度;
  10. EVP_PKEY_CTX_set_sm2_server_tag():設置SM2密鑰協商所需的發起方或者客戶端標識;
  11. EVP_PKEY_CTX_set_sm2_peer_ecdhe():設置SM2密鑰協商所需的對方SM2臨時公鑰;
  12. EVP_PKEY_CTX_gen_sm2_ecdhe_key():生成並獲取己方SM2臨時密鑰對;
  13. EVP_PKEY_CTX_get_sm2_ecdhe_key():獲取己方SM2臨時密鑰對;
  14. EVP_PKEY_CTX_set_sm2_ecdhe_key():設置己方SM2臨時密鑰對
  15. EVP_PKEY_CTX_set_sm2_encdata_format():設置EVP_PKEY調用SM2加、解密的密文格式,其中,format爲0爲DER編碼格式,即國密標準SM2密文格式;非0爲C1C3C2二進制串;
  16. ECDSA系列函數:完善了此係列函數對SM2簽名、驗籤算法的調用;
  17. ECDSA_sm2_get_Z():計算SM2簽名算法中的Z值。詳細情況,請參見GMT 0003-2012的5.5節“用戶其它信息”;
  18. ECDH_compute_key():完善了它對SM2密鑰協商的調用;
  19. SM2Kap_compute_key():國密TLSv1.1的共享密鑰計算函數;
  20. SM3()、SM3_Init()、SM3_Transform()、SM3_Update()、SM3_Final():SM3摘要算法系列函數;
  21. SM4_set_key()、SM4_encrypt()、SM4_decrypt()、SM4_ecb_encrypt()、SM4_cbc_encrypt()、SM4_cfb_encrypt()、SM4_ofb_encrypt():SM4對稱算法系列函數;
  22. sm2_encrypt()、sm2_decrypt()、sm2_do_sign()、sm2_do_verify()、i2d_sm2_enc()、d2i_sm2_enc():SM2算法的簽名、驗籤、加密、解密相關函數;
  23. EVP_sm1()、EVP_sm1_cbc()、EVP_sm1_cfb()、EVP_sm1_ecb()、EVP_sm1_ofb():預留的SM1接口函數,用於使用引擎實現SM1算法。

ssl相關的API

  1. CNTLS_client_method():獲取國密TLSv1.1標準協議的相關SSL/TLS相關方法,以使用客戶端使用標準的TLSv1.1協議進行握手、通訊;
  2. SSL_CTX_check_enc_private_key()、SSL_check_enc_private_key()、SSL_use_enc_PrivateKey()、SSL_use_enc_PrivateKey_ASN1()、SSL_CTX_use_enc_PrivateKey()、SSL_CTX_use_enc_PrivateKey_ASN1()、SSL_use_enc_PrivateKey_file()、SSL_CTX_use_enc_PrivateKey_file()爲支持國密雙證書體系而添加的函數。

(三)TASSL使用說明

  1. 目前開源的版本是基於openssl 1.0.2n版本;
  2. 關於開發,編譯,測試證書以及跟360國密瀏覽器聯調的問題,參見Issues;
  3. 我們開源的主要目的是推進國密算法的推廣及應用,讓你身邊的人都知道TASSL,讓更多的公司和個人用TASSL,一起創造活躍的社區,讓國密算法應用更廣。

(四)關於江南天安

地址:北京市海淀區馬甸東路17號金澳國際大廈11層1110室

郵編:100088

電話:010-82326383

傳真:010-82328039

郵箱:[email protected]

網址:www.tass.com.cn


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章