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

        歡迎訪問 生活随笔!

        生活随笔

        當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

        编程问答

        含泪入坑 GMSSL

        發(fā)布時(shí)間:2023/12/10 编程问答 65 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 含泪入坑 GMSSL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

        個(gè)人博客

        最近一次去理發(fā),天橋底下手藝最好的發(fā)型師老張告訴我:不能再剪了,你的發(fā)量本來就不多。

        是的,最近在搞商密(實(shí)情也可能是被商密搞),在存量系統(tǒng)里搞到頭禿實(shí)屬正常,不過這次不談這個(gè),寫篇博客緩一緩。

        首先是一點(diǎn)點(diǎn)基礎(chǔ) 😉

        在通用密碼學(xué)領(lǐng)域,主要有 3 種技術(shù):

        • 對稱加密(Symmetric),使用一個(gè)密鑰(一串很大的數(shù)字)將明文處理為密文,加密和解密使用同一個(gè)密鑰,典型算法如 DES、三重 DES、AES。由于 DES、三重 DES、AES 都屬于分組密碼算法,只能加密固定長度的明文(DES 64 bit,AES 128 bit),而現(xiàn)實(shí)中經(jīng)常需要處理超出分組長度的明文,因此必須進(jìn)行迭代處理,一般有 6 種迭代模式可以選擇:ECB(電子密碼本模式)、CBC(密碼分組鏈接模式)、CFB(密文反饋模式)、OFB(輸出反饋模式)、CTR(計(jì)數(shù)器模式)、GCM(GMAC+CTR),此處不展開。一般不建議使用純切塊的 ECB 模式。
        • 非對稱加密(Asymmetric),同樣是將明文處理為密文,加密和解密使用不同的密鑰,兩個(gè)密鑰是基于數(shù)學(xué)上的大數(shù)分解得到唯一成對的兩個(gè)數(shù)字,一個(gè)作為公鑰,一個(gè)作為私鑰,使用公鑰加密后的密文只有對應(yīng)的私鑰才能解密,典型算法如 RSA。
        • 單向散列(又稱哈希),通過一個(gè)散列算法從明文得到散列值,但不能通過算法從散列值反向計(jì)算出明文(除非用哈希碰撞),典型算法如 MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA3。散列值是明文的指紋。在學(xué)哈希表的時(shí)候大多數(shù)人就接觸過,Java 里每個(gè)對象也有 hashCode 方法。另外,很多人會(huì)將哈希處理稱為加密,這種說法顯然是不正確的。

        以上的技術(shù),一般會(huì)用在哪里呢?

        典型的應(yīng)用領(lǐng)域?yàn)?TLS 層實(shí)現(xiàn)——可謂是集密碼學(xué)技術(shù)之大成。我們?nèi)粘TL問各種網(wǎng)站時(shí),可以留心一下瀏覽器地址欄最左邊是否出現(xiàn)了一個(gè)🔒圖標(biāo),有的話就用到了該技術(shù)。

        在 TLS 層實(shí)現(xiàn)中,靈活地結(jié)合了非對稱加密、對稱加密、單向散列技術(shù),可以簡單地認(rèn)為是通過非對稱加密傳遞了對稱密鑰,然后使用對稱密鑰來加密傳輸數(shù)據(jù),兼顧了安全性和處理效率。

        還記得下面這張圖嗎?來自前面的一篇博文,出現(xiàn)在建立 HTTPS 連接過程中。我們來看看紅框中的第 6 條記錄—— TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

        • ECDHE 指密鑰交換采用 ECDHE 方式進(jìn)行;
        • RSA 指身份認(rèn)證采用 RSA 公鑰密碼算法;
        • AES 指傳輸數(shù)據(jù)時(shí)采用 AES 算法加密;
        • 128 指 AES 算法中用到的對稱密鑰長度為 128 位;
        • CBC 指迭代方式為 CBC 模式;
        • SHA256 指 MAC 或 PRF 算法的加密基元為 SHA256。

        如果我們看第一條 TLS_RSA_WITH_AES_128_CBC_SHA256,則密鑰交換和身份認(rèn)證都是采用 RSA 公鑰密碼算法。

        另一個(gè)比較火的應(yīng)用領(lǐng)域就是區(qū)塊鏈了,這個(gè)此處也不展開了。

        為了對標(biāo)國際通用密碼學(xué)算法,國內(nèi)搞出了 SM 系列算法,常用的包括 SM1/SM2/SM3/SM4/SM9。

        • SM1 為分組密碼算法,算法細(xì)節(jié)目前未公開,由有資質(zhì)的廠商用硬件來實(shí)現(xiàn)——也就是沒有軟實(shí)現(xiàn),主要通過加密卡的形式提供服務(wù)。
        • 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 的身份體系。

        接下來可以動(dòng)手了

        一般國際通用的算法,openssl 項(xiàng)目里都有實(shí)現(xiàn),操作系統(tǒng)安裝了 openssl,各種上層應(yīng)用就可以使用這些通用密碼學(xué)算法。為了推廣 SM 算法,類似的實(shí)現(xiàn)不可或缺。北大的關(guān)志研究員在 github 上開源了一個(gè)比較活躍的項(xiàng)目—Gmssl,一個(gè)類似 OpenSSL 的商密算法工具。看項(xiàng)目首頁的介紹,現(xiàn)在已經(jīng)搞到 3.0 版本了。

        下載 GMSSL-3.0.0 項(xiàng)目到 Fedora Workstation 36 ,編譯需要一些依賴,剛裝的白板系統(tǒng)里沒有,先裝上

        sudo dnf install cmake g++

        編譯安裝步驟比較簡單

        # 進(jìn)入 src 目錄 mkdir build cd build cmake .. make make test sudo make install

        執(zhí)行 gmssl 可以試試各種商密算法功能。

        [1] 報(bào)錯(cuò) "CMAKE_CXX_COMPILER-NOTFOUND",應(yīng)安裝 g++

        [2] 運(yùn)行 gmssl,提示找不到 libgmssl.so.3,執(zhí)行:sudo cp /usr/local/lib/libgmssl.so.3 /usr/lib/ && sudo ldconfig

        [3] 編譯提示找不到 CMakeLists.txt,在 /build 下執(zhí)行:cmake build -S ../..

        總結(jié)

        以上是生活随笔為你收集整理的含泪入坑 GMSSL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。