[加密]非對稱加密STM32實現


轉自:https://blog.csdn.net/kangerdong/article/details/82432701

把所有的准備工作都做完了以后,可以將加密算法移植到我們具體的項目中去了,在STM32中在出廠前已經將RSA的公鑰私鑰,CA數字簽名和CA公鑰燒寫在STM32的flash上了。

4.1 身份認證

在wifi連接上服務器上后,客戶端首先發起交換密鑰請求,客戶端將自己的RSA公鑰,CA數字簽名發送給服務器,服務器將自己的公鑰,CA數字簽名(是利用CA的私鑰對服務器公鑰機密的一段密文),以及加密后(利用的是客戶端的公鑰加的密)的AES密鑰(為了減小STM32的負擔,隨機密鑰由服務器產生就隨身份認證的信息一起發送過來了)發送給客戶端。客戶端接收到服務器的信息后,首先對服務器公鑰做MD5處理,然后調用STM32密碼庫中的簽名認證函數進行認證,通過則進行后續操作,失敗客戶端進入休眠狀態(wifi不可操作),服務器進行類似的處理。

4.2 解密AES密鑰

將得到的包含AES密鑰的密文利用RSA私鑰進行解密,將得到AES的隨機密鑰。隨后的數據傳輸將利用這個密鑰和AES算法進行加密傳輸。 
項目上的代碼不好貼上面還有好多的細節問題需要處理,大多數是C語言的數據處理問題,有什么問題可以留言我。服務器利用的是openssl加密庫,可以實現生成rsa,加密,解密等等一系列操作,比STN32的加密庫要強好多好多。

4.3 利用openssl生成RSA密鑰對

 

利用 openssl genrsa -out rsa_private_key.pem 1024 生成rsa密鑰,這個文件包含了私鑰和公鑰。 
這里寫圖片描述
利用 openssl asn1parse -in rsa_private_key.pem 
這里寫圖片描述
說起這個密鑰問題到現在都有點心酸負責服務器那邊的人死活不認n,e,d,服務器那邊出來的密鑰都是什么PKCS#8格式的說是需要我這邊來進行處理,我當時也是懵逼的這又是些什么東西啊。無奈之下又去研究PKCS#8和n,e,d的關系,有衍生出一系列的RSA密鑰的規范問題,但是這不是最恐怖的。最恐怖的是STM32F103C8T6的flash爆炸了。我也有心無力,最后我只能從服務器端入手找到了如上的方法,經過幾經周轉對方終於答應放棄了他們原先的密碼庫換成了openssl,之后也還有許多的問題這里就說說這個相對拖得比較久一點的問題。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM