含泪入坑 GMSSL
個人博客
最近一次去理發,天橋底下手藝最好的發型師老張告訴我:不能再剪了,你的發量本來就不多。
是的,最近在搞商密(實情也可能是被商密搞),在存量系統里搞到頭禿實屬正常,不過這次不談這個,寫篇博客緩一緩。
首先是一點點基礎 😉
在通用密碼學領域,主要有 3 種技術:
- 對稱加密(Symmetric),使用一個密鑰(一串很大的數字)將明文處理為密文,加密和解密使用同一個密鑰,典型算法如 DES、三重 DES、AES。由于 DES、三重 DES、AES 都屬于分組密碼算法,只能加密固定長度的明文(DES 64 bit,AES 128 bit),而現實中經常需要處理超出分組長度的明文,因此必須進行迭代處理,一般有 6 種迭代模式可以選擇:ECB(電子密碼本模式)、CBC(密碼分組鏈接模式)、CFB(密文反饋模式)、OFB(輸出反饋模式)、CTR(計數器模式)、GCM(GMAC+CTR),此處不展開。一般不建議使用純切塊的 ECB 模式。
- 非對稱加密(Asymmetric),同樣是將明文處理為密文,加密和解密使用不同的密鑰,兩個密鑰是基于數學上的大數分解得到唯一成對的兩個數字,一個作為公鑰,一個作為私鑰,使用公鑰加密后的密文只有對應的私鑰才能解密,典型算法如 RSA。
- 單向散列(又稱哈希),通過一個散列算法從明文得到散列值,但不能通過算法從散列值反向計算出明文(除非用哈希碰撞),典型算法如 MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA3。散列值是明文的指紋。在學哈希表的時候大多數人就接觸過,Java 里每個對象也有 hashCode 方法。另外,很多人會將哈希處理稱為加密,這種說法顯然是不正確的。
以上的技術,一般會用在哪里呢?
典型的應用領域為 TLS 層實現——可謂是集密碼學技術之大成。我們日常訪問各種網站時,可以留心一下瀏覽器地址欄最左邊是否出現了一個🔒圖標,有的話就用到了該技術。
在 TLS 層實現中,靈活地結合了非對稱加密、對稱加密、單向散列技術,可以簡單地認為是通過非對稱加密傳遞了對稱密鑰,然后使用對稱密鑰來加密傳輸數據,兼顧了安全性和處理效率。
還記得下面這張圖嗎?來自前面的一篇博文,出現在建立 HTTPS 連接過程中。我們來看看紅框中的第 6 條記錄—— TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256。
- ECDHE 指密鑰交換采用 ECDHE 方式進行;
- RSA 指身份認證采用 RSA 公鑰密碼算法;
- AES 指傳輸數據時采用 AES 算法加密;
- 128 指 AES 算法中用到的對稱密鑰長度為 128 位;
- CBC 指迭代方式為 CBC 模式;
- SHA256 指 MAC 或 PRF 算法的加密基元為 SHA256。
如果我們看第一條 TLS_RSA_WITH_AES_128_CBC_SHA256,則密鑰交換和身份認證都是采用 RSA 公鑰密碼算法。
另一個比較火的應用領域就是區塊鏈了,這個此處也不展開了。
為了對標國際通用密碼學算法,國內搞出了 SM 系列算法,常用的包括 SM1/SM2/SM3/SM4/SM9。
- SM1 為分組密碼算法,算法細節目前未公開,由有資質的廠商用硬件來實現——也就是沒有軟實現,主要通過加密卡的形式提供服務。
- SM2(GB/T?32918-2016)為公鑰密碼算法(也稱非對稱加密算法),可以部分替代 RSA。
- SM3(GB/T?32905-2016)為密碼哈希算法,可以代替 MD5/SHA1/SHA256。
- SM4(GB/T?32907-2016)為分組密碼算法,可以代替 AES/DES。
- SM9 為基于身份的密碼算法,用于 SSL VPN,可以建立類似 PKI/CA 的身份體系。
接下來可以動手了
一般國際通用的算法,openssl 項目里都有實現,操作系統安裝了 openssl,各種上層應用就可以使用這些通用密碼學算法。為了推廣 SM 算法,類似的實現不可或缺。北大的關志研究員在 github 上開源了一個比較活躍的項目—Gmssl,一個類似 OpenSSL 的商密算法工具。看項目首頁的介紹,現在已經搞到 3.0 版本了。
下載 GMSSL-3.0.0 項目到 Fedora Workstation 36 ,編譯需要一些依賴,剛裝的白板系統里沒有,先裝上
sudo dnf install cmake g++編譯安裝步驟比較簡單
# 進入 src 目錄 mkdir build cd build cmake .. make make test sudo make install執行 gmssl 可以試試各種商密算法功能。
[1] 報錯 "CMAKE_CXX_COMPILER-NOTFOUND",應安裝 g++
[2] 運行 gmssl,提示找不到 libgmssl.so.3,執行:sudo cp /usr/local/lib/libgmssl.so.3 /usr/lib/ && sudo ldconfig
[3] 編譯提示找不到 CMakeLists.txt,在 /build 下執行:cmake build -S ../..
總結
以上是生活随笔為你收集整理的含泪入坑 GMSSL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据类型汇总_python基
- 下一篇: 华为服务器故障灯不开机_华为服务器日常维