0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一篇文章帶你深入了解Mbed TLS是啥

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:Rice嵌入式開發(fā) ? 作者:Rice嵌入式開發(fā) ? 2021-06-29 09:58 ? 次閱讀

概要

Mbed TLS是一個開源、可移植、易于使用、代碼可讀性高的SSL庫。可實現(xiàn)常用的加密/解密算法,X.509證書操作以及TLS/DTLS 協(xié)議。它的各個功能模塊相對獨立、耦合低,可以通過配置宏定義裁剪,非常適合用于嵌入式系統(tǒng)。它提供了具有直觀的API和可讀源代碼的SSL 庫。該庫即開即用,可以在大部分系統(tǒng)上直接構建它,也可以手動選擇和配置各項功能。

MbedTLS庫提供了一組可單獨使用和編譯的加密組件,還可以使用單個配置頭文件加入或排除這些組件。從功能角度來看,該MbedTLS分為三個主要部分:

SSL/TLS 協(xié)議實施。

一個加密庫。

一個 X.509 證書處理庫。

MbedTLS遵循Apache 2.0開源許可協(xié)議,目前由TrustedFirmware維護(Linaro主持的一個治理開放社區(qū)項目),在Github上已收獲 3k star,目前Github上發(fā)布的最新版本為2.26.0版本,開源倉庫地址為:https://github.com/ARMmbed/mbedtls

MbedTLS庫提供了TLS/DTLS協(xié)議的實現(xiàn),有了MbedTLS庫之后意味著:

TCP + TLS = TCP(S)

MQTT + TLS = MQTT(S)

HTTP + TLS = HTTP(S)

COAP + DTLS = COAP(S)

目前進入萬物互聯(lián)的時代,網(wǎng)絡通信(TCP/UDP)是必不可少的,同時各大廠商推出了各種通信模組,可以實現(xiàn)基于TCP/UDP通信的上層協(xié)議:HTTP、MQTT、COAP等等。這些應用層協(xié)議最大的特點是“明文傳輸”,一旦有中間人想要截獲篡改數(shù)據(jù),非常容易。

在我的網(wǎng)絡協(xié)議棧解析的文章中,所有的實例都是以明文的形式進行試驗。然后有網(wǎng)友問我,怎么保證數(shù)據(jù)安全呢?為了方便學習使用Mbed TLS庫,我直接在ubuntu(18.04)上進行實操。

ubuntu安裝MbedTLS庫

下載源碼直接從github下載最新的MbedTLS源代碼:https://github.com/ARMmbed/mbedtls

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

構建及安裝MbedTLS庫MbedTLS庫提供了兩種構建方式:make和cmake。并且可以在目標主機安裝MbedTLS動態(tài)鏈接庫和頭文件。而本文采用cmake進行構建:

注:如果你的ubuntu沒有安裝cmake需要安裝cmake構建工具,安裝命令如下:

# 更新軟件源

sudo apt-get update

# 安裝cmake

sudo apt-get install cmake

編譯安裝MbedTLS,其中:

-DUSE_SHARED_MBEDTLS_LIBRARY=On 生成動態(tài)鏈接庫

cmake時,不要忘記之后cmake指令之后的“?!保擖c表示當前目錄

rice@rice:~/mbedtls_study/mbedtls$ cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On 。

rice@rice:~/mbedtls_study/mbedtls$ make

rice@rice:~/mbedtls_study/mbedtls$ sudo make install

在概述中,我們提到MbedTLS是可以裁剪的(注:在這個實驗中,我是按照默認配置);MbedTLS可以通過修改配置文件的方式進行裁剪,MbedTLS提供了幾個參考模板,具體的config.h文件可在mbedtls/configs目錄,參考文件config-ccm-psk-tls1_2.h和config-mini-tls1_1.h等文件。這里以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 。

安裝之后查看是否安裝成功:

默認情況下 動態(tài)鏈接庫安裝至 /usr/local/lib 包括libmbedtls.so libmbedcrypto.so libmbedx509.so

3f6f99b0-d873-11eb-9e57-12bb97331649.png

默認情況下 頭文件安裝至 /usr/local/include/mbedtls

3f9ecce4-d873-11eb-9e57-12bb97331649.png

默認情況下 mbedtls的相關工具將安裝在 /usr/local/bin目錄下,例如gen_key等

3ff13196-d873-11eb-9e57-12bb97331649.png

SHA-1實驗

SHA-1是一種數(shù)據(jù)加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段(通常更?。┟芪?,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),并把它們轉化為長度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。

單向散列函數(shù)的安全性在于其產(chǎn)生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產(chǎn)生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個字節(jié))進行分塊,并產(chǎn)生20個字節(jié)的被稱為信息認證代碼或信息摘要的輸出。

該算法輸入報文的長度不限,產(chǎn)生的輸出是一個160位的報文摘要。輸入是按512位的分組進行處理的。SHA-1是不可逆的、防沖突,并具有良好的雪崩效應。

通過散列算法可實現(xiàn)數(shù)字簽名實現(xiàn),數(shù)字簽名的原理是將要傳送的明文通過一種函數(shù)運算(Hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報文摘要與發(fā)送方的發(fā)來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。

MAC(信息認證代碼)就是一個散列結果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計算和驗證MAC碼的合法性。

SHA-1加密的實驗:SHA-1加密測試代碼(測試內(nèi)容:RiceChen的SHA-1值):

#include 《string.h》#include 《stdio.h》#include “mbedtls/sha1.h”#define mbedtls_printf printfint main(void)

{

int ret;

unsigned char buffer[] = “RiceChen”;

unsigned char digest[32] = {0};

mbedtls_sha1_context sha1_ctx;

memset(digest, 0x00, sizeof(digest));

mbedtls_sha1_init(&sha1_ctx);

mbedtls_sha1_starts(&sha1_ctx);

mbedtls_sha1_update(&sha1_ctx, buffer, sizeof(buffer) - 1);

mbedtls_sha1_finish(&sha1_ctx, digest);

int i = 0;

mbedtls_printf(“SHA1: [”);

while(digest[i])

{

mbedtls_printf(“%02X”, digest[i]);

i++;

}

mbedtls_printf(“]

”);

exit:

mbedtls_sha1_free(&sha1_ctx);

return ret;

}

構建測試代碼的CMakeLists.txt文件內(nèi)容:

cmake_minimum_required(VERSION 2.6)

project(“mbedtls-test”)

set(libs

mbedtls

mbedcrypto

mbedx509

set(targets

mbedtls-test

add_executable(mbedtls-test mbedtls-test.c)

target_link_libraries(mbedtls-test ${libs})

編譯測試代碼:

rice@rice:~/mbedtls_study/demo$ mkdir build

rice@rice:~/mbedtls_study/demo$ cd build

rice@rice:~/mbedtls_study/demo/build$ cmake 。./

-- The C compiler identification is GNU 7.5.0

-- The CXX compiler identification is GNU 7.5.0

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Detecting C compile features

-- Detecting C compile features - done

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- Configuring done

-- Generating done

-- Build files have been written to: /home/rice/mbedtls_study/demo/build

rice@rice:~/mbedtls_study/demo/build$ make

Scanning dependencies of target mbedtls-test

[ 50%] Building C object CMakeFiles/mbedtls-test.dir/mbedtls-test.c.o

[100%] Linking C executable mbedtls-test

[100%] Built target mbedtls-test

rice@rice:~/mbedtls_study/demo/build$ 。/mbedtls-test

SHA1: [CBD12068E2F91DF5DB148742DF108131AF76287E]

可以看到通過MbedTLS對“RiceChen”進行加密的SHA-1值:[CBD12068E2F91DF5DB148742DF108131AF76287E]

測試SHA1是否正確,可以通過https://1024tools.com/hash在線工具進行測試,可以看到是一致的結果。

注意:如果運行可執(zhí)行文件出現(xiàn)如下問題:

問題:

rice@rice:~/mbedtls_study/demo/build$ 。/mbedtls-test

。/mbedtls-test: error while loading shared libraries: libmbedcrypto.so.0: cannot open shared object file: No such file or directory

解決方法:

rice@rice:~/mbedtls_study/demo/build$ sudo vim /etc/ld.so.conf //在新的一行中加入庫文件所在目錄

/usr/local/lib

rice@rice:~/mbedtls_study/demo/build$ sudo ldconfig //更新/etc/ld.so.cache文件

總結:

MbedTLS是一個非常強大的開源庫,而且功能上可以靈活的裁剪,對于嵌入式設備來說非常的友好。

后續(xù)將玩轉一下這個庫其他加解密算法??梢猿掷m(xù)關注。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源
    +關注

    關注

    3

    文章

    3181

    瀏覽量

    42235
  • SSL
    SSL
    +關注

    關注

    0

    文章

    122

    瀏覽量

    25699
  • 萬物互聯(lián)

    關注

    1

    文章

    223

    瀏覽量

    14077

原文標題:MbedTLS學習--SHA-1

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    帶你深入了解RS485總線

    做工程很多時候會提到RS485控制線,它到底是什么呢?今天我聊聊RS485相關的應用,深入了解RS485,你會發(fā)現(xiàn)里面的知識確實有很多,那么我們就選擇些平時在弱電中會考慮到的問題供大家了解。
    發(fā)表于 05-16 14:13 ?9988次閱讀
    <b class='flag-5'>帶你</b><b class='flag-5'>深入了解</b>RS485總線

    深入了解示波器

    深入了解示波器
    發(fā)表于 11-14 22:32

    單片機的深入了解!

    項目名稱:單片機的深入了解!項目是否開源:否申請開發(fā)板數(shù)量:1 塊申請人團隊介紹:我們團隊由五個人組成,我們打算開始著手單片機的程序改編,設計些比較特殊新穎的東西!希望給以支持!
    發(fā)表于 10-12 20:00

    深入了解LabVIEW FPGA資料分享

    深入了解LabVIEW FPGA
    發(fā)表于 05-27 08:35

    文章帶你了解原型制作化技術

    文章帶你了解什么是原型制作化技術?
    發(fā)表于 04-26 06:15

    mbed TLS的目標是什么

    前言 mbed TLS(以前稱為PolarSSL)是TLS和SSL協(xié)議的實現(xiàn),并且需要相應的加密算法和支持代碼。這是雙重許可與Apache許可證2.0版(與GPLv2許可也可)。網(wǎng)站上指出,m
    發(fā)表于 07-19 06:11

    AT32基于mbed TLS的HTTPS服務器

    AT32基于mbed TLS的HTTPS服務器介紹如何使用mbed TLS 搭建個HTTPS 服務器,用戶可以根據(jù)自己的應用去編寫網(wǎng)頁內(nèi)容
    發(fā)表于 10-26 08:24

    示波器的深入了解

    示波器的深入了解 引言自然界運行著各種形式的正弦波,比如海浪、地震、聲波、爆破、空氣中傳播的聲音,或者身體運轉的自然節(jié)律。物理世界里,能
    發(fā)表于 11-04 11:53 ?52次下載
    示波器的<b class='flag-5'>深入了解</b>

    起來認識深入了解水銀

    起來認識深入了解水銀    汞在常溫下呈液態(tài),
    發(fā)表于 10-23 09:22 ?2139次閱讀

    帶你深入了解光耦

    電子發(fā)燒友網(wǎng)帶你深入了解光耦相關知識,講述光耦的作用,光耦原理及各種光耦型號和替代型號,讓大家全面了解光電耦合器
    發(fā)表于 03-16 16:43
    <b class='flag-5'>帶你</b><b class='flag-5'>深入了解</b>光耦

    深入了解示波器入門手冊

    深入了解示波器入門手冊
    發(fā)表于 03-27 17:43 ?241次下載
    <b class='flag-5'>深入了解</b>示波器入門手冊

    了解IC內(nèi)部結構嗎本文帶你深入了解

    本文檔的主要內(nèi)容詳細介紹的是IC內(nèi)部結構 你了解IC內(nèi)部結構嗎本文帶你深入了解
    的頭像 發(fā)表于 03-09 11:33 ?1.1w次閱讀
    你<b class='flag-5'>了解</b>IC內(nèi)部結構嗎本文<b class='flag-5'>帶你</b><b class='flag-5'>深入了解</b>

    帶你深入了解示波器

    帶你深入了解示波器
    發(fā)表于 02-07 14:26 ?19次下載

    深入了解安全光柵

    深入了解安全光柵
    的頭像 發(fā)表于 06-25 13:53 ?1095次閱讀
    <b class='flag-5'>深入了解</b>安全光柵

    深入了解 GaN 技術

    深入了解 GaN 技術
    的頭像 發(fā)表于 12-06 17:28 ?5971次閱讀
    <b class='flag-5'>深入了解</b> GaN 技術