目前論文在做MCU的開發,需要使用到mbedtls來做ECDSA跟ECDH,想說能不能在PC上的版本先測試過,再改MbedOS版本的程式碼就好,所以才研究怎麼讓mbedtls在Ubuntu的環境下也能使用。

如果在MbedOS環境想要使用mbedtls的話,不需要額外安裝其他套件,可以直接call mbetls的API

可以參考這個程式, 搭配官方API文件 - ecdsa.h File Reference


下載 mbedtls 原始碼

在Ubuntu下使用的話要自己下載原始碼來編譯安裝到系統中

mbedtls Github repo: https://github.com/ARMmbed/mbedtls

直接下指令來下載

git clone https://github.com/ARMmbed/mbedtls.git

目前的 Release 為 v2.27.0

:::warning v3.0.0 開始mbedtls大幅修改,無法使用此文章的程式碼 :::

checkout 到 release 版本的 tag

git checkout tags/v2.27.0

安裝 mbedtls library

:::info 測試過 v2.26.0 會報錯告知需要安裝 Python :::

說明中有提到可以用 GUN make, CMake 或 Visual Studio 編譯,但我是使用 Ubuntu 所以這裡我會使用 GNU make 來編譯

另外編譯過程會用到 python 3,如果沒裝的話可以先安裝,然後直接切換目錄到 mbedtls,執行 make 和 make install即可。

cd mbedtls
make

# make install會將
# library複製到/usr/local/lib
# include複製到/usr/local/include/mbedtls 
make install

基本上到這裡就完成了,在mbedtls/programs資料夾下有範例程式可以參考 想了解程式碼的話,可以參考官方API文件


範例程式

programs/底下有一些範例程式可以參考,在下make的同時也會把這些範例編好,可以直接使用,舉pkey/pk_signpkey/pk_verify當例子

  • pkey/pk_sign : 使用private key簽章123.txt這個檔案
# usage: mbedtls_pk_sign <key_file> <filename>
programs/pkey/pk_sign ../prikey.pem ../123.txt

  . Seeding the random number generator...
  . Reading private key from '../ECDSA_Keypairs/server/Copy_to_Keys/D4142434445464748.pem'
  . Generating the SHA-256 signature
  . Done (created "../123.txt.sig")

成功後會產生123.txt.sig這個檔案

  • pkey/pk_verify : 使用public key認證123.txt.sig簽章是否正確
# usage: mbedtls_pk_verify <key_file> <filename>
programs/pkey/pk_verify ../pubkey.pem ../123.txt

  . Reading public key from '../pubkey.pem'
  . Verifying the SHA-256 signature
  . OK (the signature is valid)

需要將x509轉換到publickey可以使用openssl

openssl x509 -pubkey -noout -in  ECDSA_Keypairs/server/Copy_to_Certificates/D4142434445464748.pem > pubkey.pem

編譯程式

編譯的時候gcc指令需要指定Library位置,會被放在/usr/local/lib

gcc -o test test.c -lmbedtls -lmbedcrypto -lmbedx509

需要AES-GCM、ECDSA或ECDH的程式可以到我Github上下載。連結


參考資料: