mbedtls交换服务器证书,mbedtls | 07 - DH秘钥协商算法的配置与使用

本文详细介绍了如何使用mbedtls库进行DH秘钥协商算法的配置和使用。首先,解释了DH算法的基本原理和流程,然后展示了配置mbedtls以启用DH秘钥协商所需的宏,并提供了初始化、生成公开参数、读取公开参数、计算共享秘钥及释放结构体等关键API的说明。最后,通过一个简单的测试函数展示了DH秘钥协商的过程和结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mbedtls系列文章

Demo工程源码

https://github.com/Mculover666/mbedtls-study-demo

本工程基于STM32L41RCT6开发板,包含了本系列文章中所编写的所有Demo,持续更新……

文章目录

mbedtls系列文章

Demo工程源码

一、DH秘钥协商算法

二、DH秘钥协商功能的配置和使用

1. 配置宏

2. DH秘钥协商功能API说明

3. 编写测试函数

4. 测试结果

一、DH秘钥协商算法

DH是一种秘钥协商算法,使得通信双方在不安全通道交换共享参数,从而协商出一个会话秘钥。

DH秘钥协商的过程如下:

① 通信双方A和B确认共享参数;

② A生成随机秘钥x;

③ B生成随机秘钥y;

④ A计算共享秘钥;

⑤ B计算共享秘钥;

DH秘钥协商算法可以有效防止中间听者,但是无法方式中间拦截者。

二、DH秘钥协商功能的配置和使用

1. 配置宏

使用DH秘钥协商功能需要提前开启伪随机数生成器(依赖AES算法、SHA256算法、MD通用接口),其中伪随机数生成器的硬件适配移植实现已经讲述,请参考对应的第二篇博客,不再赘述。

综合上述,本实验中需要开启的宏如下表:

宏定义

功能MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES

不使用默认熵源(如果已有、要屏蔽该宏)

MBEDTLS_NO_PLATFORM_ENTROPY

不使用系统内置熵源

MBEDTLS_AES_C

使用AES算法

MBEDTLS_ENTROPY_C

使能熵源模块

MBEDTLS_CTR_DRBG_C

使能随机数模块

MBEDTLS_SHA256_C

使能SHA256算法

MBEDTLS_MD_C

开启MD通用接口

MBEDTLS_AES_ROM_TABLES

使能预定义S盒(节约内存空间)

MBEDTLS_BIGNUM_C

开启大数运算

MBEDTLS_GENPRIME

开启生成素数

MBEDTLS_DHM_C

开启DH秘钥协商模块

下面补充几个一个第一次出现宏的定义。

① MBEDTLS_DHM_C

/**

* \def MBEDTLS_DHM_C

*

* Enable the Diffie-Hellman-Merkle module.

*

* Module: library/dhm.c

* Caller: library/ssl_cli.c

* library/ssl_srv.c

*

* This module is used by the following key exchanges:

* DHE-RSA, DHE-PSK

*

* \warning Using DHE constitutes a security risk as it

* is not possible to validate custom DH parameters.

* If possible, it is recommended users should consider

* preferring other methods of key exchange.

* See dhm.h for more details.

*

*/

#define MBEDTLS_DHM_C

编辑针对本实验的配置文件mbedtls_config_dhm.h:

/**

* @brief Minimal configuration for DHM Function

* @author mculover666

* @date 2020/09/28

*/

#ifndef _MBEDTLS_CONFIG_DHM_H_

#define _MBEDTLS_CONFIG_DHM_H_

/* System support */

#define MBEDTLS_HAVE_ASM

//#define MBEDTLS_HAVE_TIME

/* mbed feature support */

#define MBEDTLS_ENTROPY_HARDWARE_ALT

//#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES

#define MBEDTLS_NO_PLATFORM_ENTROPY

/* mbed modules */

#define MBEDTLS_AES_C

#define MBEDTLS_AES_ROM_TABLES

#define MBEDTLS_CTR_DRBG_C

#define MBEDTLS_ENTROPY_C

#define MBEDTLS_SHA256_C

#define MBEDTLS_MD_C

#define MBEDTLS_BIGNUM_C

#define MBEDTLS_GENPRIME

#define MBEDTLS_DHM_C

#include "mbedtls/check_config.h"

#endif /* _MBEDTLS_CONFIG_DHM_H_ */

在MDK配置mbedtls使用该配置文件:

3ae556ba8c8fc7b44b5f56e6cda57ba2.png

2. DH秘钥协商功能API说明

使用该功能模块需要包含头文件:

#include "mbedtls/dhm.h"

① 初始化DH结构体:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值