當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 制定了大量的密碼管理方案和方案,并制定了大量的密碼管理方案和規(guī)范。

制定了大量的密碼管理方案和方案,并制定了大量的密碼管理方案和規(guī)范。

隨著近年來外部的國際貿(mào)易沖突和技術(shù)封鎖,內(nèi)部互聯(lián)網(wǎng)的快速發(fā)展,IoT 領(lǐng)域的崛起,以及金融領(lǐng)域的變革愈演愈烈。擺脫對國外技術(shù)和產(chǎn)品的過度依賴,建設(shè)行業(yè)網(wǎng)絡(luò)安全環(huán)境,增強(qiáng)我國行業(yè)信息系統(tǒng)的安全可信顯得尤為必要和迫切。

密碼算法是保障信息安全的核心技術(shù),尤其是最關(guān)鍵的銀行業(yè)核心領(lǐng)域長期以來都是沿用 3DES、SHA-1、RSA 等國際通用的密碼算法體系及相關(guān)標(biāo)準(zhǔn)。?

2010 年底,國家密碼管理局公布了我國自主研制的“橢圓曲線公鑰密碼算法”(SM2 算法)。為保障重要經(jīng)濟(jì)系統(tǒng)密碼應(yīng)用安全,國家密碼管理局于 2011 年發(fā)布了《關(guān)于做好公鑰密碼算法升級工作的通知》,明確要求“自 2011 年 3 月 1 日起,在建和擬建公鑰密碼基礎(chǔ)設(shè)施電子認(rèn)證系統(tǒng)和密鑰管理系統(tǒng)應(yīng)使用國密算法。自 2011 年 7 月 1 日起,投入運(yùn)行并使用公鑰密碼的信息系統(tǒng),應(yīng)使用 SM2 算法?!?/p>

自 2012 年以來,國家密碼管理局以《中華人民共和國密碼行業(yè)標(biāo)準(zhǔn)》的方式,陸續(xù)公布了 SM2/SM3/SM4 等密碼算法標(biāo)準(zhǔn)及其應(yīng)用規(guī)范。其中“SM”代表“商密”,即用于商用的、不涉及國家秘密的密碼技術(shù)。

這其中值得我們關(guān)注的主要是以下公開的算法:

SM2:基于橢圓曲線密碼(ECC)的公鑰密碼算法標(biāo)準(zhǔn),提供數(shù)字簽名,密鑰交換,公鑰加密,用于替換 RSA/ECDSA/ECDH 等國際算法

SM3:消息摘要算法,哈希結(jié)果為 256 位,用于替換 MD5/SHA1/SHA256 等國際算法

SM4:對稱加密算法,密鑰長度和分組長度均為 128 位,主要用于無線局域網(wǎng)標(biāo)準(zhǔn),用于替換 DES/AES 等算法

國密證書:這里的國密證書指的是使用國密算法(SM2-with-SM3)的標(biāo)準(zhǔn) X509 格式證書,證書使用 SM3 作為哈希算法,使用 SM2 作為數(shù)字簽名算法

國密 SSL:采用國密算法,符合國密標(biāo)準(zhǔn)的安全傳輸協(xié)議,也就是 SSL/TLS 協(xié)議的國密版本。

SM2進(jìn)階Linux內(nèi)核之路

目前 Linux 內(nèi)核已經(jīng)較好的支持了 SM3 和 SM4 算法,這得益于無線局域網(wǎng)標(biāo)準(zhǔn)的廣泛使用。但 SM2 算法和國密證書遲遲沒有得到支持,也就無法基于國密來建立全??尚藕蛢?nèi)核中的完整性驗(yàn)證,因此在內(nèi)核中支持這一套體系也變得迫切起來。整個(gè)規(guī)劃是:在內(nèi)核中支持 SM2 算法和國密證書,在內(nèi)部業(yè)務(wù)率先應(yīng)用起來后,最終推進(jìn)到社區(qū)。

整個(gè)流程下來,諸多不順,權(quán)且記錄下來。

第一回

有了規(guī)劃,接下來就是考慮如何實(shí)施。但凡密碼學(xué)算法,都會先考慮是否可以從 openssl 做移植。幸運(yùn)的是,openssl 對 SM2/3/4 支持得非常好,橢圓曲線算法的實(shí)現(xiàn)久經(jīng)考驗(yàn),非常成熟,而且最新版本也完整支持了國密證書。

不幸的是,openssl 的各個(gè)模塊之間耦合度很高,要實(shí)現(xiàn) SM2 和國密證書,需要移植 openssl 架構(gòu)和基礎(chǔ)設(shè)施代碼,包括 BIGNUM、ECC、X509 等。這個(gè)工作量無疑是巨大的,即便實(shí)現(xiàn)了,這種方式也很難被社區(qū)接受,再三考慮權(quán)衡后,果斷放棄了這條"捷徑"。

第二回

發(fā)現(xiàn)了一個(gè)令人驚喜的事實(shí):內(nèi)核中已經(jīng)有了一個(gè)橢圓算法的基礎(chǔ)實(shí)現(xiàn)(crypto/ecc.c),何不嘗試基于這個(gè)算法來做呢?于是參照 SM2 規(guī)范開始編碼,但結(jié)果有點(diǎn)遺憾,這個(gè)橢圓算法在 SM2 上居然失效了,連最基本的點(diǎn)乘結(jié)果都是錯(cuò)的!納尼?劇本不應(yīng)該是這樣的。于是發(fā)郵件咨詢該算法的一個(gè)資深開發(fā)者,很快就得到了下面的回復(fù)(感嘆天下還是好心人多):?

Shamir's trick algo is probably generic, but it's ecc_point_double_jacobian()that is curve specific.

Algorithms are chosen that are fit curves I (and previous coders) used.You need to check their properties carefully if you going to use them.

Some variants of used algos, that may fit other curves, are in referencedpapers (in comments).

總結(jié)原因:這個(gè)算法是經(jīng)過高度優(yōu)化的算法,是精確適配過 NIST 和 ECRDSA 橢圓曲線參數(shù)的,并不一定適合國內(nèi)的 SM2 曲線參數(shù),看來這條路是走不通了......?

......哭泣中,別理我。

......擦干眼淚,看成敗,人生豪邁,不過是從頭再來......?

第三回

經(jīng)過反復(fù)探索,發(fā)現(xiàn)內(nèi)核中 RSA 算法是基于一個(gè) mpi(高精度整數(shù))庫實(shí)現(xiàn)的,這個(gè)庫來源于 libgcrypt(這是知名隱私保護(hù)軟件 GnuPG 的底層算法實(shí)現(xiàn))。內(nèi)核中已經(jīng)實(shí)現(xiàn)了一個(gè)早期版本的 mpi,當(dāng)時(shí)就是為了實(shí)現(xiàn) RSA 引入的。

現(xiàn)在的 libgcrypt 已經(jīng)有了完整的橢圓曲線基礎(chǔ)算法,于是抱著試試看的心態(tài)基于 libgcrypt 測試 SM2 算法曲線,蒼天保佑,這次的驚喜沒有變成驚嚇,實(shí)驗(yàn)結(jié)果與 SM2 規(guī)范一致。

第四回

libgcrypt 中的 ECC 算法是個(gè)通用的算法,實(shí)現(xiàn)耦合度低。于是有了一個(gè)想法,可以嘗試先在 libgcrypt 中實(shí)現(xiàn) SM2,小試牛刀之后再把這一套東西全部移植到內(nèi)核,進(jìn)一步推進(jìn)到社區(qū),看起來這也是能被社區(qū)接受的方式。

有了計(jì)劃后,索性擺個(gè)安逸的造型,莊嚴(yán)肅穆地將雙手放在鍵盤上,讓思維隨著手指自然流淌,接下來的開發(fā)調(diào)試就比較順利了,很快便有了公鑰算法的四件套:加密,解密,簽名,驗(yàn)簽。

一鼓作氣把這些實(shí)現(xiàn)提交到了 libgcrypt 社區(qū),經(jīng)過兩輪的審核再修改之后,最終 SM2 算法作為 ECC 的一個(gè)子算法被社區(qū)接受,這里要感謝 libgcrypt 的維護(hù)者之一的 NIIBE Yutaka,耐心友好,對中國傳統(tǒng)文化也很了解。整體過程比較順利,表過不提。附上相關(guān)提交:

第五回

趁熱打鐵,由于內(nèi)核中的 lib/mpi 庫是一個(gè)較老的版本并且是為 RSA 服務(wù)的,相對于 libgcrypt 中的 mpi,是一個(gè)閹割的版本,需要移植缺失的函數(shù)以及 ECC 算法,這沒什么技術(shù)難度,卻也是一個(gè)精細(xì)活,工作量也不小。

在實(shí)踐中,把實(shí)現(xiàn) SM2 的過程中所缺失的東西都移植過來,很快便有了相應(yīng)的 SM2 算法和國密證書的實(shí)現(xiàn)。再經(jīng)過幾輪打磨,并做了充分的測試后,就有了最初的這組補(bǔ)?。?https://lkml.org/lkml/2020/2/16/43?

第六回

中國古語曰過,一鼓作氣,再而衰,三而竭,事情的進(jìn)展再次遇到阻礙。Linux 內(nèi)核比不得專用的密碼學(xué)庫,對于這么一個(gè)不怎么知名的算法,社區(qū)并沒有表現(xiàn)出什么興趣,甚至鮮有人問津,最終以沒有實(shí)際應(yīng)用場景而被拒絕。事情當(dāng)然不能就這么結(jié)束,考慮到代碼量大,維護(hù)者審核意愿低,果斷裁剪掉了 SM2 的加解密和簽名,只保留了支持國密證書必要的驗(yàn)簽功能,后來陸陸續(xù)續(xù)又做了一些小修小補(bǔ),同時(shí)給 IMA 的上游做了國密算法的增強(qiáng)以便將國密功能在 IMA 場景的應(yīng)用作為實(shí)際案例。

同時(shí),隨著跟相關(guān)開發(fā)者和維護(hù)者不斷的軟si磨chan硬lan泡da,不斷地發(fā)送新的補(bǔ)丁,最后甚至都摸透了維護(hù)者習(xí)慣性的回復(fù)時(shí)間和補(bǔ)丁的合入規(guī)律,持續(xù)地緩慢推進(jìn) SM2 進(jìn)入社區(qū)的步伐。這期間沒有波瀾壯闊的故事,也沒有狗血的劇情,balabalabala......,省略while (1) {...}?循環(huán)。

第七回

年過中秋月過半, 歷時(shí)半年多時(shí)間,SM2 早已不是那個(gè)最熟悉的娃,不知不覺補(bǔ)丁也更新到了 v7 版本。中秋月圓之夜向來都是有大事要發(fā)生的。是夜,一個(gè)蓋世英雄,頭頂鍋蓋,腰纏海帶,腳踩七彩祥云飛過來了,SM2 終于等到了它的至尊寶。言歸正傳,這個(gè)版本的補(bǔ)丁最終被社區(qū)接受,目前已經(jīng)合并到了 Linux 主線的 5.10-rc1:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=Tianjia+Zhang?

如不出意外會在 5.10 內(nèi)核版本中正式發(fā)布。

libgcrypt 全面支持國密算法

后來有幸在某個(gè)機(jī)緣巧合之下,在 libgcrypt 中實(shí)現(xiàn)了 SM4。作為國密開發(fā)過程的一個(gè)附屬產(chǎn)物,目前 libgcrypt 已經(jīng)全面支持了國密算法 SM2/3/4,這些實(shí)現(xiàn)都會在下一個(gè)版本 1.9.0 正式發(fā)布。其中 SM3 由相關(guān)同事在 2017 年開發(fā)。

ima-evm-utils 支持 SM2-with-SM3 國密簽名

內(nèi)核已經(jīng)支持了 SM2 和國密證書,作為 IMA 完整性簽名的用戶態(tài)工具,ima-evm-utils 對國密的支持當(dāng)然不能落下,附上相關(guān)的提交:

https://sourceforge.net/p/linux-ima/ima-evm-utils/ci/ceecb28d3b5267c7d32c6e9401923c94f5786cfb/log/?path=?

已知問題

當(dāng)下 SM2 還有一些問題需要注意:

SM2 X509 證書中沒有為 SM2 公鑰算法定義獨(dú)立的 OID 標(biāo)識,目前是識別 OID_id_ecPublicKey 標(biāo)識默認(rèn)當(dāng)作 SM2

SM2 規(guī)范沒有為推薦的橢圓曲線參數(shù)定義 OID 標(biāo)識,這也導(dǎo)致 SM2 算法僅有一個(gè)默認(rèn)的橢圓曲線參數(shù)

SM2 規(guī)范中對消息簽名時(shí),除了要計(jì)算消息自身的 SM3。同時(shí) SM2 橢圓曲線參數(shù)和公鑰都要參與到 SM3 的計(jì)算中來,SM2 私鑰簽名是對最終的哈希結(jié)果做簽名,這一規(guī)范定義是有點(diǎn)另類,這是與國際通用算法的一個(gè)主要差異:?

正常情況下,X509 證書解析與算法都被實(shí)現(xiàn)為獨(dú)立的模塊。正是由于 SM2 的這個(gè)規(guī)范會導(dǎo)致實(shí)現(xiàn)上的強(qiáng)耦合:X509 證書驗(yàn)證時(shí)需要計(jì)算證書中 tbs 的 SM3 哈希,這個(gè)哈希同樣需要橢圓曲線參數(shù)以及公鑰數(shù)據(jù),而這些數(shù)據(jù)是一次完整 SM2 驗(yàn)簽過程中的臨時(shí)數(shù)據(jù),目前的內(nèi)核中并沒有提供這樣的回調(diào)機(jī)制(當(dāng)然這是 SM2 的特殊情況),這就把 X509 證書解析與 SM2 算法強(qiáng)綁到了一起,沒法解耦。

這也導(dǎo)致了應(yīng)用該功能的一點(diǎn)限制,SM2 只能支持內(nèi)建編譯(Y),而不支持編譯成模塊(M),讓 X509 在編譯時(shí)就知道已經(jīng)支持 SM2,才能正常驗(yàn)簽國密證書。從實(shí)現(xiàn)上看,也有一些動態(tài)加載 SM2 模塊獲取獲取函數(shù)指針的方法,相比于框架層的支持,都不是很友好。

IMA 簽名在計(jì)算文件哈希的時(shí)候,內(nèi)核是直接計(jì)算文件哈希的,這塊并沒有針對是否使用 SM2 簽名而做特殊處理(指上圖中的增加 Za 值)。當(dāng)下內(nèi)核做的 IMA 國密簽名驗(yàn)證的支持,同時(shí)也支持了 ima-evm-utils 的國密 sm2+sm3 簽名(依賴最新的 openssl),目前這塊都是直接計(jì)算文件哈希,沒有加 Za 值,這也是當(dāng)下最優(yōu)的方案。

需要說明的一點(diǎn)是,Za 是國密簽名以及驗(yàn)簽里要求的,只是簽名驗(yàn)簽的流程里需要,但是國密這個(gè)流程跟目前主流的算法是相悖的,如果要支持,內(nèi)核和 ima-evm-utils 工具都需要較大修改,內(nèi)核要涉及到架構(gòu)修改,社區(qū)也不愿意接受,所以目前就按主流方式支持了 sm2+sm3 的 IMA 簽名。

總而言之,言而總之兩條:

要支持國密證書驗(yàn)證,SM2 要么不編譯,要么必須內(nèi)建編譯,不支持編譯成模塊。當(dāng)然了,SM2 作為一個(gè)非對稱算法,只簽名一個(gè)哈希或者基于國密的 IMA 驗(yàn)證,并沒有這個(gè)限制。IMA 簽名工具 ima-evm-utils 以及內(nèi)核計(jì)算文件 SM3 哈希所用的國密算法沒有加 Za,這個(gè)是與規(guī)范的一點(diǎn)差異。

- THE END -

#Linux#加密

中國的責(zé)任

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉