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