前言
比特幣是一個(gè)基于區(qū)塊鏈和密碼技術(shù)的應(yīng)用。本文針對(duì)STM32客戶的反饋,對(duì)那些使用STM32加密庫(kù)開(kāi)發(fā)比特幣應(yīng)用作了一些補(bǔ)充的技術(shù)說(shuō)明。
STM32 加密庫(kù)
STM32 加密庫(kù)提供對(duì)稱加解密,非對(duì)稱加解密,以及HASH算法,并通過(guò)了CAVP FIPS認(rèn)證,可使用在各類安全相關(guān)的應(yīng)用。
對(duì)稱加解密算法支持AES、DES、3DES、RC5、Chacha20、Poly1305。其中針對(duì)特定算法,如AES,又支持多種加密模式如ECB、CBC、CTR、GCM、CCM、XTS、Cipher-wrap等。非對(duì)稱加解密算法支持RSA、ECC。Hash算法支持SHA-1、SHA-224、SHA-256、SHA-384、SHA-512、MD5。
STM32加密庫(kù)分為硬件加速和純固件實(shí)現(xiàn)兩種。純固件實(shí)現(xiàn)可以運(yùn)行在所有的STM32系列上。
STM32加密庫(kù)可以通過(guò)訪問(wèn)www.st.com ,在主頁(yè)中的搜索框里輸入cryptolib得到頁(yè)面鏈接。加密庫(kù)下載需要批準(zhǔn),請(qǐng)?jiān)诰€填寫申請(qǐng)后等待郵件通知,一般很快就可以得到回復(fù)。
STM32 TRNG 真隨機(jī)數(shù)
STM32真隨機(jī)數(shù)(TRNG)基于物理噪聲源生成隨機(jī)數(shù),提供了高隨機(jī)性,為不少算法特別是橢圓曲線提供了堅(jiān)實(shí)的基礎(chǔ)。隨機(jī)數(shù)通過(guò)了AIS-31 PTG.2測(cè)試。
比特幣中的加解密算法
比特幣加解密相關(guān)的算法主要是兩類,橢圓曲線ECC以及HASH算法。比特幣使用橢圓曲線簽名和驗(yàn)簽算法來(lái)核實(shí)比特幣交易的可靠性,以及辨別區(qū)塊鏈中比特幣的歸屬地址。HASH算法除了用在橢圓曲線簽名、驗(yàn)證,比特幣地址校驗(yàn),還利用該算法的單向性,創(chuàng)造出比特幣的挖礦機(jī)制。HASH沒(méi)有什么特別,將不在本文補(bǔ)充說(shuō)明。
比特幣中的橢圓曲線
比特幣的橢圓曲線是個(gè)小眾曲線,不是常見(jiàn)的NIST P192、P256和P384,而是SECP256。根據(jù)它的規(guī)范和STM32加密庫(kù)的代碼庫(kù)的參數(shù)格式,比特幣的橢圓曲線參數(shù)可以表示如下:
用戶可以直接將此參數(shù)拷貝STM32 加密庫(kù)的例程,例如
STM32CubeExpansion_Crypto_V3.1.0Fw_CryptoSTM32L4ProjectsSTM32L476RGNucleoECCKeyGen_Sign_VerifSrcmain.c。該例程演示的功能包括:生成ECC 公私鑰匙密鑰對(duì),使用私鑰對(duì)指定消息簽名,再使用對(duì)應(yīng)公鑰對(duì)簽名做驗(yàn)簽。
為了對(duì)這個(gè)曲線做如上運(yùn)行,需要在例程代碼的循環(huán)處增加一個(gè)案例,條件3,如:
別忘了將for 循環(huán)的條件修改成
從私鑰生成公鑰
有客戶提到,STM32 加密庫(kù)提供了橢圓曲線相關(guān)接口調(diào)用,但并沒(méi)有在文檔或者代碼里描述如何從橢圓曲線私鑰生成公鑰。
這里做一個(gè)補(bǔ)充說(shuō)明,實(shí)現(xiàn)該功能關(guān)鍵函數(shù)就是“點(diǎn)乘API:ECCscalarMul”。可以在例程已有代碼的基礎(chǔ)上,通過(guò)“點(diǎn)乘API”來(lái)對(duì)“密鑰對(duì)生成API”的運(yùn)算結(jié)果做一次驗(yàn)證。
其中G 是臨時(shí)變量,需要先定義后使用。
若在求得公鑰后不再需要,需要及時(shí)釋放資源。
而本來(lái)就分配的點(diǎn)資源,例程會(huì)在在程序結(jié)束時(shí)釋放。
另外,如果從外部已經(jīng)拿到私鑰(大數(shù)),是用uint8_t 類型數(shù)組表示;而為了應(yīng)用在我們的加密庫(kù)中,可以通過(guò)以下API 做表示形式的轉(zhuǎn)換:
總結(jié)
本文針對(duì)使用STM32 開(kāi)發(fā)比特幣的客戶,對(duì)STM32 加密庫(kù)的橢圓曲線參數(shù)和點(diǎn)乘函數(shù)做了補(bǔ)充說(shuō)明,方便STM32 客戶進(jìn)行開(kāi)發(fā)比特幣應(yīng)用。
原文標(biāo)題:基于STM32加密庫(kù)開(kāi)發(fā)比特幣應(yīng)用的補(bǔ)充說(shuō)明
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
STM32
+關(guān)注
關(guān)注
2270文章
10906瀏覽量
356479 -
比特幣
+關(guān)注
關(guān)注
57文章
7005瀏覽量
140735
原文標(biāo)題:基于STM32加密庫(kù)開(kāi)發(fā)比特幣應(yīng)用的補(bǔ)充說(shuō)明
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論