STM32 密码学算法库X-CUBE-CRYPTOLIB
1概述
资源下载链接
2支持的主要算法
3X-CUBE-CRYPTOLIB V4
CRYPTOLIB V4支持的算法变化
软件包内容
代码质量进一步提升
更小代码+更高性能
更加灵活易用
算法认证
4参考资料与培训资源
文档资料
相关培训资源
密码学算法以及随机数是信息安全中常用的工具,通常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
•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
2021年STM32发布了V4版本的Cryptobli,和之前的V3版本相比有了很多变化
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)
V4的目录结构 vs. V3的目录结构
V3软件包的目录结构是每一个STM32系列对应一个单独的目录
每个芯片系列都有对应的Middleware目录, 里面包含加解密库
加解密库有多个库文件,分别针对不同编译器以及不同的优化选项
参考例程工程同样也在每个STM32系列子目录的Projects目录中。
V4的目录结构则完全兼容Cube/X-Cube软件包(STM32Cubexx / X-Cube-xxx)架构,方便与Cube/X-Cube包进行集成。
V4中包含加解密库的Middleware文件夹直接在顶层目录
lib目录下的库文件不针对每个STM32系列,也不再区分不同的编译器和优化方式
加解密库文件按照Cortex内核版本,每个内核提供一个统一的库文件
同一个库文件可以适用于各种编译器(AEABI兼容)
对于不同优化选项的选择可以在链接阶段进行配置
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就用来选择下层的具体实现使用哪一个。
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即可完成
算法认证
V4提供的加解密库经过了NIST CAVP(Cryptographic Algorithm Validation Program)的认证。
认证测试覆盖了不同的性能和代码大小的配置方式(前面提到的可以通过头文件的宏定义进行的配置选择)
认证基于Cortex®-M内核,而不是和某个特定的STM32系列绑定,所以可以适用于所有STM32系列
有关加解密库认证的详细信息可以参考此链接: https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Security:Cryptographic_Library_Certifications
文档资料
V3版本的相关文档
用户手册/演示文稿 | ||
《STM32加密库》 | 用户手册(V3) | |
演示文稿(V3) |
所有Cryptolib V4相关的文档都通过STM32 MCU Wiki以网页形式提供,不再提供单独的UM和其他文档:https://wiki.st.com/stm32mcu/wiki/Category:Cryptographic_library
内容包括
加解密库简介、使用指南、密码学算法的基础知识
如何安全地使用加解密库、如何实现HKDF、加解密库认证信息、如何迁移到新版加解密库
加解密库的性能及资源占用信息
培训课程及资料 | |
视频课程 | |
培训课件 | |