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使用该配置文件:
2. DH秘钥协商功能API说明
使用该功能模块需要包含头文件:
#include "mbed