垂直应用

STM32 密码学算法库X-CUBE-CRYPTOLIB



1概述

        资源下载链接

2支持的主要算法

3X-CUBE-CRYPTOLIB V4

        CRYPTOLIB V4支持的算法变化

        软件包内容

        代码质量进一步提升

        更小代码+更高性能

        更加灵活易用

        算法认证

4参考资料与培训资源

        文档资料

        相关培训资源



1.概述


密码学算法以及随机数是信息安全中常用的工具,通常IoT设备中涉及的安全通信,身份认证等都离不开密码学算法,例如通过加解密算法保护信息机密性,通过HASH、MAC以及数字签名验证消息的完整性及其来源,利用随机数防止通信中的重放攻击等。


STM32的生态系统中也提供了密码学算法库:X-CUBE-CRYPTOLIB,可用帮助客户在其应用中轻松使用密码学算法,实现应用中所需的基于密码学的上层功能。


X-CUBE-CRYPTOLIB下载链接:https://www.st.com/x-cube-cryptolib (注:需要在线填写下载申请,获得下载链接)

STM32 crypto library包(X-CUBE-CRYPTOLIB)是基于STM32Cube架构的软件包,包含一系列的密码学算法实现。


资源下载链接

V4版本加解密库可以从XCUBE-CRYPTOLIB常规的网址下载

https://www.st.com/en/embedded-software/x-cube-cryptolib.html

V3版本加解密库可以通过以下链接下载

https://www.st.com/en/embedded-software/x-cube-crypto-v3.html


2.支持的主要算法


•Cipher encryption and decryption:

  • AES: CBC, CCM, CFB, CTR, ECB, GCM, OFB, XTS, KeyWrap

  • SM4: CBC, CFB, CTR, ECB, OFB 

  • Chacha-Poly1305


•Digest generation:

  • SHA-1

  • SHA-2: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256

  • SHA-3: SHA3-224, SHA3-256, SHA3-384, SHA3-512

  • SM3

  • SHAKE


Message authentication code (MAC) generation:

  • HMAC:SHA-1SHA-2: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256SM3

  • AES: CMAC

  • KMAC: SHAKE


Elliptic curves based on key generation, signature and verification:

  • Elliptic curve digital signature algorithm (ECDSA): NIST-R (P-224, P-256, P-384, P-521), NIST-K P-256, BRAINPOOL R/T (P-160, P-192, P-224, P-256, P-320, P-384, P-512), ANSSI P-256

  • Edwards-curve digital signature algorithm (EdDSA): Ed448, Ed25519

  • SM2 digital signature algorithm: OSCCA 256-bits curve


Elliptic curves Diffie-Hellman:

  • Curve448, curve25519

  • NIST-R (P-224, P-256, P-384, P-521), NIST-K P-256, BRAINPOOL R/T (P-160, P-192, P-224, P-256, P-320, P-384, P-512), ANSSI P-256


RSA signature, verification, encryption and decryption:

  • PKCS#1 v1.5 and v2.2

  • Chinese remainder theorem (CRT) key representation

  • Hash method:SHA-1SHA-2: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256


Deterministic random bit generator (DRBG):

  • CTR-DRBG


3.X-CUBE-CRYPTOLIB V4



2021年STM32发布了V4版本的Cryptobli,和之前的V3版本相比有了很多变化

 Picture12.png


CRYPTOLIB V4支持的算法变化

新增加的算法



支持国密SM算法

  • SM4 (CBC, CFB, CTR, ECB, OFB) 

  • SM3

  • SM2 (密钥对生成,计算ZA,签名,验签)

散列算法

  • 除了SM3,还增加了SHA3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512) 和SHAKE

MAC算法

  • HMAC (SM3), KMAC (SHAKE)

ECC椭圆曲线算法

  • 除了SM2,还增加了ECDSA的Ed448

ECDH算法

  • 增加Curve448

RSA算法

  • 新增加PKCS#1 V2.2 以及 RSA CRT模式(包含抵御Bellcore攻击的防护)

随机数生成

  • 增加CTR_DRBG_AES256


不再包含的算法

部分旧的算法,处于安全性考虑不推荐使用,因此在V4中不再包含,例如

  • 块加密算法中的ARC4, DES, TDES

  • 散列算法中的MD5

密钥派生算法HKDF

  • V3中包含的HKDF-512算法在V4中不直接以库的形式提供

  • ST wiki页面中会说明如何在HMAC基础上实现HKDF


软件包内容

新的软件包架构


V4版本采用了新的软件包架构

  • 加解密库仅按照内核提供(每个内核对应一个加解密库)

  • 加解密库不再按照STM32系列分别提供

  • 加解密库不再区分编译器和优化方式(Speed、Size、FPU)


Picture14.png



V4的目录结构 vs. V3的目录结构

V3软件包的目录结构是每一个STM32系列对应一个单独的目录

  • 每个芯片系列都有对应的Middleware目录, 里面包含加解密库

  • 加解密库有多个库文件,分别针对不同编译器以及不同的优化选项

  • 参考例程工程同样也在每个STM32系列子目录的Projects目录中。

Picture15.png


V4的目录结构则完全兼容Cube/X-Cube软件包(STM32Cubexx / X-Cube-xxx)架构,方便与Cube/X-Cube包进行集成。

  • V4中包含加解密库的Middleware文件夹直接在顶层目录

  • lib目录下的库文件不针对每个STM32系列,也不再区分不同的编译器和优化方式

  • 加解密库文件按照Cortex内核版本,每个内核提供一个统一的库文件

  • 同一个库文件可以适用于各种编译器(AEABI兼容)

  • 对于不同优化选项的选择可以在链接阶段进行配置

 

Picture16.png

V4的参考例程则类似Cube/X-Cube包的结构,在Projects目录下的各个系列的子目录中提供。

新版本示例工程支持的系列包括

  • STM32G0,STM32G4

  • STM32H7

  • STM32L0,STM32L1,STM32L4,STM32L5,STM32U5 (V4.0.1中包含)

  • STM32WB,STM32WL


其他STM32系列虽然没有提供直接的参考例程,但也可以参考示例代码的方式使用库文件,因为库是针对不同Cortex®-M内核提供的,并不区分产品系列。


代码质量进一步提升

V4版本加解密库的源码经过MISRAC:2012检查,加解密库的头文件也同样符合MISRAC:2012标准,对于有MISRAC合规需求的场景,V4将提供很好的支持。


更小代码+更高性能

V4的加解密库在优化方面做了很多提升。以STM32G4为例,我们可以用下表对比一下使用CryptoLib V3.1.3和V4.0.0版本,选择最高性能配置时的运算速度比较。可以看到,无论是对称算法,散列算法还是非对称算法,V4在性能上都有了很大提升,同时加解密库的代码量比V3还要更小。

 

用例

V3.1.3   时钟周期数

V4.0.0时钟周期数

性能提高

V3.1.3  

代码大小

V4.0.0  

代码大小

代码空间节约

AES CBC 64 Bytes encryption

11,189

8,660

22.6%

8,218

4,592

44.1%

AES   CBC 64 Bytes decryption

12,000

10,098

15.8%

8,218

4,592

44.1%

SHA256   16 bytes Digest

9,630

6,137

36.2%

2,204

2,144

2.7%

ECDSA   SECP256R1 Signature

20,298,504

2,957,360

85.4%

21,616

14,610

32.41%

ECDSA   SECP256R1 Verification

26,891,792

6,575,536

75.55%

21,616

15,110

30.10%


更加灵活易用

方便灵活的方式选择加解密库的实现配置

V4的加解密库为每个内核提供一个单一的库文件,但是允许客户在其应用工程中可以根据速度和代码大小的需要选择不同的配置。这个配置在链接和使用过程中完成。

  • V3的加解密库在编译阶段使用不同配置,编译出不同的库文件

  • 而V4在相同的算法服务中实现了对不同配置(性能高低和代码量大小)的支持

  • 用户通过Construct API或者每个服务的Processing API来进行选择采用哪个实现

  • 缺省的配置以头文件形式提供

以ECDSA签名算法为例,使用签名函数之前,首先需要调用cmox_ecc_construct()函数,这个函数的第二个输入参数CMOX_ECC256_MATH_FUNCS就用来选择下层的具体实现使用哪一个。

 

image.png


CMOX_ECC256_MATH_FUNCS的定义决定了ECDSA的处理函数将会选择哪个实现,缺省配置为CMOX_MATH_FUNCS_SUPERFAST256,可选配置包括

CMOX_MATH_FUNCS_SMALL : 代码量小,性能相对低

CMOX_MATH_FUNCS_FAST :性能高,代码量相对大

CMOX_MATH_FUNCS_SUPERFAST256:性能更高(针对长度为225到256的ECC曲线)

其他算法的配置也可以使用类似的方法进行性能和代码量大小的选择,具体请参考MiddlewaresSTSTM32_Cryptographicincludecmox_default_config.h

如果希望所有的配置都按照最小代码量来选择,则可以直接使用相同目录下的cmox_small_config.h头文件的定义,如果希望所有配置都按照最高性能来选择,则可以直接使用相同目录下的cmox_fast_config.h头文件的配置。


应用代码调用更加简洁

同样以ECDSA为例,使用V3版本加解密库,应用程序需要调用多个API才能完成 一个ECDSA Verification,而使用V4的加解密库只需要两个API即可完成


Capture.PNG


算法认证

V4提供的加解密库经过了NIST CAVP(Cryptographic Algorithm Validation Program)的认证。

  • 认证测试覆盖了不同的性能和代码大小的配置方式(前面提到的可以通过头文件的宏定义进行的配置选择)

  • 认证基于Cortex®-M内核,而不是和某个特定的STM32系列绑定,所以可以适用于所有STM32系列

有关加解密库认证的详细信息可以参考此链接: https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Security:Cryptographic_Library_Certifications


4.参考资料与培训资源


文档资料


V3版本的相关文档

用户手册/演示文稿

UM1924

STM32 crypto library

《STM32加密库》

用户手册(V3)

CAVP认证

X-CUBE-CRYPTOLIB FIPS CAVP certification

演示文稿(V3)

 

所有Cryptolib V4相关的文档都通过STM32 MCU Wiki以网页形式提供,不再提供单独的UM和其他文档:https://wiki.st.com/stm32mcu/wiki/Category:Cryptographic_library


内容包括

  • 加解密库简介、使用指南、密码学算法的基础知识

    Picture17.png

  • 如何安全地使用加解密库、如何实现HKDF、加解密库认证信息、如何迁移到新版加解密库

    Picture18.png

  • 加解密库的性能及资源占用信息

       Picture19.png

相关培训资源


培训课程及资料

STM32信息安全线上课程

视频课程

密码学基本原理_上

培训课件

密码学基本原理_中

密码学基本原理_下

STM32的加解密硬件模块

 

 

微信扫一扫