獵戶攻防實驗室獵戶攻防實驗室 安全視點安全視點 标準與課題标準與課題
TaSSL——完全支持國密體系的OpenSSL

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


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


TaSSL源碼下載:http://zhongte50642.cn/images/TASSL-openssl_1.0.2o.rar


一、天安TaSSL的功能特點


1、将國密算法SM2、SM3、SM4及祖沖之流密碼算法作為OpenSSL的内置算法,并且嚴格按照《GMT 0006-2012 密碼應用标識規範》定義的OID來對相關國密算法進行标識;

2、将SM2作為EC的内置曲線,可通過ECDSA、ECDH分别完成SM2的簽名和密鑰協商;

3、可通過EVP_DigestSignInit、EVP_DigestSignUpdate、EVP_DigestSignFinal、EVP_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()為支持國密雙證書體系而添加的函數。

Copyright @ 2005-2013, 北京江南天安科技有限公司, All Rights Reserved  京ICP備08012318号  技術支持博樂虎科技