mbedtls安裝與入門【轉】


轉自:https://blog.csdn.net/xukai871105/article/details/72795126

mbedtls簡介

ARM mbedtls使開發人員可以非常輕松地在(嵌入式產品中加入加密和 SSL/TLS 功能。它提供了具有直觀的 API 和可讀源代碼的 SSL 庫。該工具即開即用,可以在大部分系統上直接構建它,也可以手動選擇和配置各項功能。
mbedtls 庫提供了一組可單獨使用和編譯的加密組件,還可以使用單個配置頭文件加入或排除這些組件。
從功能角度來看,該mbedtls分為三個主要部分:

  • SSL/TLS 協議實施。
  • 加密庫。
  • X.509 證書處理庫。

更多mbedtls教程

2017年5月我寫下了這篇博文,於此同時我找到了前同事崔紅鵬,我們倆一起寫了一本關於mbedtls的圖書。密碼技術是熟練使用mbedtls的前提條件,本書除了mbedtls的詳細使用介紹之外,還包括了許多密碼學基礎知識。希望大家可以在本書中找到物聯網安全應用的實施技巧。
mbedtls開發實戰
《密碼技術與物聯網安全:mbedtls開發實戰》

mbedtls安裝

下面介紹如何在 Ubuntu/Debian/raspbian環境下正確安裝mbedtls。

克隆源代碼

前往github克隆最新版的mbedtls源代碼。獲取最新版源代碼之前需要在Ubuntu/Debian中正確安裝git工具

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

切換分支(可選)

切換到某個release分支,此處選擇mbedtls-2.4。

git checkout -b mbedtls-2.4 origin/mbedtls-2.4
  • 1

通過git checkout可檢出具體分支

  • checkout 切換分支
  • -b mbedtls-2.4 創建本地分支
  • origin/mbedtls-2.4 切換到遠程分支mbedtls-2.4

查看分支

通過git branch查看分支,確認已經切換到mbedtls-2.4分支

git branch 
  development
* mbedtls-2.4

安裝

mbedtls支持make、cmake等多種安裝方式。下面介紹make方式和cmake方式編譯源代碼,並在目標主機中安裝mbedtls動態鏈接庫和頭文件。本文推薦使用cmake工具安裝mbedtls。

make方式

make SHARED=1
sudo make install

 

  • 使用make時默認情況下並不會生成動態鏈接庫
  • SHARED=1 生成動態鏈接庫

cmake方式(推薦)

cmake方式比make方式的步驟要多一些,如果目標主機並沒有安裝cmake工具,可通過apt-get工具安裝cmake。

# 更新軟件源
sudo apt-get update
# 通過軟件源安裝cmake
sudo apt-get install cmake
# 生成makefile文件,啟用生成動態鏈接庫選項
cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On .
# 以下步驟和make方式相同
make
sudo make install

 

  • -DUSE_SHARED_MBEDTLS_LIBRARY=On 生成動態鏈接庫
  • 使用cmake時,不要忘記之后cmake指令之后的 . ,該點表示當前目錄

修改mbedtls配置

mbedtls也可以通過修改配置文件的方式進行裁剪,mbedtls提供了幾個參考模板,具體的config.h文件可參考mbedtls/configs目錄,該目錄中包括config-ccm-psk-tls1_2.h, config-mini-tls1_1.h等文件。和mbedtls安裝方法相似,可通過make方法和cmake方法修改具體配置。

make方法

# 設置MBEDTLS_CONFIG_FILE宏,指向config-ccm-psk-tls1_2.h
CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE='<config-ccm-psk-tls1_2.h>'" 
# 重新編譯
make

 

cmake方法

# 刪除之前cmake相關中間文件,但是不包括CMakeLists.txt文件
find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} +
# 指定配置文件為 config-ccm-psk-tls1_2.h,重新編譯
CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE='<config-ccm-psk-tls1_2.h>'" cmake .

 

安裝總結

  • 默認情況下 動態鏈接庫安裝至 /usr/local/lib 包括libmbedtls.so libmbedcrypto.so libmbedx509.so
  • 默認情況下 頭文件安裝至 /usr/local/include/mbedtls
  • 默認情況下 mbedtls的相關工具將安裝只 /usr/local/bin目錄下,例如gen_key等

基礎示例

示例代碼

下面我們通過一個示例來說明如何使用mbedtls。這個示例通過介紹如何使用HMAC算法生成一個消息認證碼。hmac-test.c代碼如下:

#include <string.h>
#include <stdio.h>
#include "mbedtls/md.h"

#define mbedtls_printf     printf

int main(void)
{
    int ret;
    unsigned char secret[] = "a secret";
    unsigned char buffer[] = "some data to hash";
    unsigned char digest[32];
    mbedtls_md_context_t sha_ctx;

    mbedtls_md_init(&sha_ctx);
    memset(digest, 0x00, sizeof(digest));

    ret = mbedtls_md_setup(&sha_ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1);
    if (ret != 0)
    {
        mbedtls_printf("  ! mbedtls_md_setup() returned -0x%04x\n", -ret);
        goto exit;
    }

    mbedtls_md_hmac_starts(&sha_ctx, secret, sizeof(secret) - 1);
    mbedtls_md_hmac_update(&sha_ctx, buffer, sizeof(buffer) - 1);
    mbedtls_md_hmac_finish(&sha_ctx, digest );

    mbedtls_printf("HMAC: ");
    for (int i = 0; i < sizeof(digest); i++)
        mbedtls_printf("%02X", digest[i]);
    mbedtls_printf("\n");

exit:
    mbedtls_md_free( &sha_ctx );

    return ret;
}

 

  • hmac算法需要兩個參數,一個稱為秘鑰,此處為secret,另一個稱為消息,此處為buffer
  • 消息認證碼保留在 digest 數組中
  • 此處hmac算法選擇sha256算法作為單向散列函數,所以hmac的計算結果一定為32字節。
  • 在mbedtls中,消息認證碼的生成分為三個步驟
    1. mbedtls_md_hmac_starts 設置密鑰
    2. mbedtls_md_hmac_update 填充消息,本示例僅填充了一次
    3. mbedtls_md_hmac_finish 生成消息認證碼,結果保存至digest中
  • 最后把digest使用HEX格式打印至控制台

cmake

在hmac-test.c同目錄中新建一個名為Cmakelists.txt的文件,文件內容如下

cmake_minimum_required(VERSION 2.6)
# 定義工程名稱
project("hmac-test")

# 定義依賴動態鏈接庫
set(libs
    mbedtls
 	mbedcrypto 
	mbedx509
)

set(targets
    hmac-test
)

add_executable(hmac-test hmac-test.c)
target_link_libraries(hmac-test ${libs})

 

驗證測試

# 生成makefile文件
cmake .
# 執行makefile,生成可執行文件hmac-test
make
# 運行可執行文件hmac-test
./hmac-test
# 控制台輸出運行結果
HMAC: 7FD04DF92F636FD450BC841C9418E5825C17F33AD9C87C518115A45971F7F77E

更多角度驗證

如果不確定mbedtls的運算結果,也可以編寫一個node.js腳本,使用相同參數的情況下兩者的計算結果應該完全相同。

const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', 'a secret');

hmac.update('some data to hash');
console.log(hmac.digest('hex'));
// Prints:
// 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e

 

總結

  1. 安裝mbedtls可使用make方法和cmake方法,兩種方式均可正確安裝mbedtls
  2. mbedtls提供三個重要動態鏈接庫——libmbedtls.so libmbedcrypto.so libmbedx509.so
  3. 通過cmake方式可更方便的編寫mbedtls應用


免責聲明!

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



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