概要
Mbed TLS是一個開源、可移植、易于使用、代碼可讀性高的SSL庫。可實(shí)現(xiàn)常用的加密/解密算法,X.509證書操作以及TLS/DTLS 協(xié)議。它的各個功能模塊相對獨(dú)立、耦合低,可以通過配置宏定義裁剪,非常適合用于嵌入式系統(tǒng)。它提供了具有直觀的API和可讀源代碼的SSL 庫。該庫即開即用,可以在大部分系統(tǒng)上直接構(gòu)建它,也可以手動選擇和配置各項(xiàng)功能。
MbedTLS庫提供了一組可單獨(dú)使用和編譯的加密組件,還可以使用單個配置頭文件加入或排除這些組件。從功能角度來看,該MbedTLS分為三個主要部分:
SSL/TLS 協(xié)議實(shí)施。
一個加密庫。
一個 X.509 證書處理庫。
MbedTLS遵循Apache 2.0開源許可協(xié)議,目前由TrustedFirmware維護(hù)(Linaro主持的一個治理開放社區(qū)項(xiàng)目),在Github上已收獲 3k star,目前Github上發(fā)布的最新版本為2.26.0版本,開源倉庫地址為:https://github.com/ARMmbed/mbedtls
MbedTLS庫提供了TLS/DTLS協(xié)議的實(shí)現(xiàn),有了MbedTLS庫之后意味著:
TCP + TLS = TCP(S)
MQTT + TLS = MQTT(S)
HTTP + TLS = HTTP(S)
COAP + DTLS = COAP(S)
目前進(jìn)入萬物互聯(lián)的時代,網(wǎng)絡(luò)通信(TCP/UDP)是必不可少的,同時各大廠商推出了各種通信模組,可以實(shí)現(xiàn)基于TCP/UDP通信的上層協(xié)議:HTTP、MQTT、COAP等等。這些應(yīng)用層協(xié)議最大的特點(diǎn)是“明文傳輸”,一旦有中間人想要截獲篡改數(shù)據(jù),非常容易。
在我的網(wǎng)絡(luò)協(xié)議棧解析的文章中,所有的實(shí)例都是以明文的形式進(jìn)行試驗(yàn)。然后有網(wǎng)友問我,怎么保證數(shù)據(jù)安全呢?為了方便學(xué)習(xí)使用Mbed TLS庫,我直接在ubuntu(18.04)上進(jìn)行實(shí)操。
ubuntu安裝MbedTLS庫
下載源碼直接從github下載最新的MbedTLS源代碼:https://github.com/ARMmbed/mbedtls
git clone https://github.com/ARMmbed/mbedtls.git
構(gòu)建及安裝MbedTLS庫MbedTLS庫提供了兩種構(gòu)建方式:make和cmake。并且可以在目標(biāo)主機(jī)安裝MbedTLS動態(tài)鏈接庫和頭文件。而本文采用cmake進(jìn)行構(gòu)建:
注:如果你的ubuntu沒有安裝cmake需要安裝cmake構(gòu)建工具,安裝命令如下:
# 更新軟件源
sudo apt-get update
# 安裝cmake
sudo apt-get install cmake
編譯安裝MbedTLS,其中:
-DUSE_SHARED_MBEDTLS_LIBRARY=On 生成動態(tài)鏈接庫
cmake時,不要忘記之后cmake指令之后的“。”,該點(diǎn)表示當(dāng)前目錄
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是可以裁剪的(注:在這個實(shí)驗(yàn)中,我是按照默認(rèn)配置);MbedTLS可以通過修改配置文件的方式進(jìn)行裁剪,MbedTLS提供了幾個參考模板,具體的config.h文件可在mbedtls/configs目錄,參考文件config-ccm-psk-tls1_2.h和config-mini-tls1_1.h等文件。這里以CMake為例:
# 刪除之前cmake相關(guān)中間文件,但是不包括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 。
安裝之后查看是否安裝成功:
默認(rèn)情況下 動態(tài)鏈接庫安裝至 /usr/local/lib 包括libmbedtls.so libmbedcrypto.so libmbedx509.so
默認(rèn)情況下 頭文件安裝至 /usr/local/include/mbedtls
默認(rèn)情況下 mbedtls的相關(guān)工具將安裝在 /usr/local/bin目錄下,例如gen_key等
SHA-1實(shí)驗(yàn)
SHA-1是一種數(shù)據(jù)加密算法,該算法的思想是接收一段明文,然后以一種不可逆的方式將它轉(zhuǎn)換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預(yù)映射或信息),并把它們轉(zhuǎn)化為長度較短、位數(shù)固定的輸出序列即散列值(也稱為信息摘要或信息認(rèn)證代碼)的過程。
單向散列函數(shù)的安全性在于其產(chǎn)生散列值的操作過程具有較強(qiáng)的單向性。如果在輸入序列中嵌入密碼,那么任何人在不知道密碼的情況下都不能產(chǎn)生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個字節(jié))進(jìn)行分塊,并產(chǎn)生20個字節(jié)的被稱為信息認(rèn)證代碼或信息摘要的輸出。
該算法輸入報(bào)文的長度不限,產(chǎn)生的輸出是一個160位的報(bào)文摘要。輸入是按512位的分組進(jìn)行處理的。SHA-1是不可逆的、防沖突,并具有良好的雪崩效應(yīng)。
通過散列算法可實(shí)現(xiàn)數(shù)字簽名實(shí)現(xiàn),數(shù)字簽名的原理是將要傳送的明文通過一種函數(shù)運(yùn)算(Hash)轉(zhuǎn)換成報(bào)文摘要(不同的明文對應(yīng)不同的報(bào)文摘要),報(bào)文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報(bào)文摘要與發(fā)送方的發(fā)來報(bào)文摘要解密比較,比較結(jié)果一致表示明文未被改動,如果不一致表示明文已被篡改。
MAC(信息認(rèn)證代碼)就是一個散列結(jié)果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計(jì)算和驗(yàn)證MAC碼的合法性。
SHA-1加密的實(shí)驗(yàn):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;
}
構(gòu)建測試代碼的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”進(jìn)行加密的SHA-1值:[CBD12068E2F91DF5DB148742DF108131AF76287E]
測試SHA1是否正確,可以通過https://1024tools.com/hash在線工具進(jìn)行測試,可以看到是一致的結(jié)果。
注意:如果運(yùn)行可執(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文件
總結(jié):
MbedTLS是一個非常強(qiáng)大的開源庫,而且功能上可以靈活的裁剪,對于嵌入式設(shè)備來說非常的友好。
后續(xù)將玩轉(zhuǎn)一下這個庫其他加解密算法。可以持續(xù)關(guān)注。
編輯:jq
-
開源
+關(guān)注
關(guān)注
3文章
3254瀏覽量
42408 -
SSL
+關(guān)注
關(guān)注
0文章
125瀏覽量
25721 -
萬物互聯(lián)
+關(guān)注
關(guān)注
1文章
223瀏覽量
14106
原文標(biāo)題:MbedTLS學(xué)習(xí)--SHA-1
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論