0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

RTThread物联网操作系统 来源:Rice嵌入式开发 作者:Rice嵌入式开发 2021-06-29 09:58 次阅读

概要

Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现常用的加密/解密算法,X.509证书操作以及TLS/DTLS 协议。它的各个功能模块相对独立、耦合低,可以通过配置宏定义裁剪,非常适合用于嵌入式系统。它提供了具有直观的API和可读源代码的SSL 库。该库即开即用,可以在大部分系统上直接构建它,也可以手动选择和配置各项功能。

MbedTLS库提供了一组可单独使用和编译的加密组件,还可以使用单个配置头文件加入或排除这些组件。从功能角度来看,该MbedTLS分为三个主要部分:

SSL/TLS 协议实施。

一个加密库。

一个 X.509 证书处理库。

MbedTLS遵循Apache 2.0开源许可协议,目前由TrustedFirmware维护(Linaro主持的一个治理开放社区项目),在Github上已收获 3k star,目前Github上发布的最新版本为2.26.0版本,开源仓库地址为:https://github.com/ARMmbed/mbedtls

MbedTLS库提供了TLS/DTLS协议的实现,有了MbedTLS库之后意味着:

TCP + TLS = TCP(S)

MQTT + TLS = MQTT(S)

HTTP + TLS = HTTP(S)

COAP + DTLS = COAP(S)

目前进入万物互联的时代,网络通信(TCP/UDP)是必不可少的,同时各大厂商推出了各种通信模组,可以实现基于TCP/UDP通信的上层协议:HTTP、MQTT、COAP等等。这些应用层协议最大的特点是“明文传输”,一旦有中间人想要截获篡改数据,非常容易。

在我的网络协议栈解析的文章中,所有的实例都是以明文的形式进行试验。然后有网友问我,怎么保证数据安全呢?为了方便学习使用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动态链接库和头文件。而本文采用cmake进行构建:

注:如果你的ubuntu没有安装cmake需要安装cmake构建工具,安装命令如下:

# 更新软件源

sudo apt-get update

# 安装cmake

sudo apt-get install cmake

编译安装MbedTLS,其中:

-DUSE_SHARED_MBEDTLS_LIBRARY=On 生成动态链接库

cmake时,不要忘记之后cmake指令之后的“。”,该点表示当前目录

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 。

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

默认情况下 动态链接库安装至 /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是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。

该算法输入报文的长度不限,产生的输出是一个160位的报文摘要。输入是按512位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。

通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。

MAC(信息认证代码)就是一个散列结果,其中部分输入信息是密码,只有知道这个密码的参与者才能再次计算和验证MAC码的合法性。

SHA-1加密的实验:SHA-1加密测试代码(测试内容: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文件内容:

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在线工具进行测试,可以看到是一致的结果。

注意:如果运行可执行文件出现如下问题:

问题:

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是一个非常强大的开源库,而且功能上可以灵活的裁剪,对于嵌入式设备来说非常的友好。

后续将玩转一下这个库其他加解密算法。可以持续关注。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    2982

    浏览量

    41692
  • SSL
    SSL
    +关注

    关注

    0

    文章

    119

    浏览量

    25479
  • 万物互联
    +关注

    关注

    1

    文章

    222

    浏览量

    13994

原文标题:MbedTLS学习--SHA-1

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入了解示波器

    深入了解示波器
    发表于 11-14 22:32

    专家开讲:深入了解电池技术 ──Part 1

    。笔者不会一一详细介绍所有的电池技术,只选择些常见或是值得认识的;而在接下来的专栏里,笔者将开始介绍电池分类、常见规格以及专业术语,如果你有特别想知道的电池技术,欢迎留言!扩展阅读:专家开讲:深入了解
    发表于 08-18 09:33

    专家开讲:深入了解电池技术──Part 3

    资深工程师 Ivan Cowie 的「深入了解电池技术」专栏Part 3来啰!这次要介绍的是铅酸电池(lead-acidbatteries)技术。铅酸电池是在1859年由法国物理学家Gaston
    发表于 08-18 09:37

    单片机的深入了解

    项目名称:单片机的深入了解!项目是否开源:否申请开发板数量:1 块申请人团队介绍:我们团队由五个人组成,我们打算开始着手单片机的程序改编,设计些比较特殊新颖的东西!希望给以支持!
    发表于 10-12 20:00

    深入了解LabVIEW FPGA资料分享

    深入了解LabVIEW FPGA
    发表于 05-27 08:35

    深入了解u-boot该看什么书?

    深入了解u-boot 有哪些书推荐下!
    发表于 08-15 01:44

    文章带你了解原型制作化技术

    文章带你了解什么是原型制作化技术?
    发表于 04-26 06:15

    mbed TLS的目标是什么

    前言 mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可与Apache许可证2.0版(与GPLv2许可也可)。网站上指出,m
    发表于 07-19 06:11

    AT32基于mbed TLS的HTTPS服务器

    AT32基于mbed TLS的HTTPS服务器介绍如何使用mbed TLS 搭建个HTTPS 服务器,用户可以根据自己的应用去编写网页内容
    发表于 10-26 08:24

    带你深入了解光耦

    电子发烧友网带你深入了解光耦相关知识,讲述光耦的作用,光耦原理及各种光耦型号和替代型号,让大家全面了解光电耦合器
    发表于 03-16 16:43
    <b class='flag-5'>带你</b><b class='flag-5'>深入了解</b>光耦

    深入了解电感与磁珠的异同

    模拟电子的相关知识学习教材资料——深入了解电感与磁珠的异同
    发表于 09-27 15:19 0次下载

    了解IC内部结构吗本文带你深入了解

    本文档的主要内容详细介绍的是IC内部结构 你了解IC内部结构吗本文带你深入了解
    的头像 发表于 03-09 11:33 1.1w次阅读
    你<b class='flag-5'>了解</b>IC内部结构吗本文<b class='flag-5'>带你</b><b class='flag-5'>深入了解</b>

    带你深入了解示波器

    带你深入了解示波器
    发表于 02-07 14:26 18次下载

    深入了解安全光栅

    深入了解安全光栅
    的头像 发表于 06-25 13:53 749次阅读
    <b class='flag-5'>深入了解</b>安全光栅

    深入了解 GaN 技术

    深入了解 GaN 技术
    的头像 发表于 12-06 17:28 4133次阅读
    <b class='flag-5'>深入了解</b> GaN 技术