0%

嵌入式加密算法应用记录

前言

讲述在嵌入式软件开发中,密码学相关算法知识,以及其应用。

开源算法库,如何适配。算法接口

以小米手环的流程为例

嵌入式之加密应用简述

嵌入式设备间认证
绑定认证
通信
支付
各个应用场景都要求保证数据的安全性

但数据通信通道是不安全的,传输数据是明文,易被监听,如何保证数据的安全性?

所以需要加密,使得 即使他人监听到传输数据,也无法逆推出有效数据。

现代加密协议 TLS 1.3

加密算法概念简述

  • ECDH(Elliptic Curve Diffie-Hellman)​ 是一种基于椭圆曲线密码学的密钥交换协议,用于在不安全的通信环境中安全协商共享密钥

  • AES: 高级加密标准,一种对称加密算法,用于对数据进行加密和解密
    主要特性:
    对称加密:加密和解密使用相同的密钥
    分组密码:将明文分成128位的块进行处理
    密钥长度:支持128位、192位、256位三种长度
    加密轮数:根据密钥长度不同,分别为10轮、12轮、14轮
    加密流程:
    字节替换(SubBytes)
    行移位(ShiftRows)
    列混合(MixColumns)
    轮密钥加(AddRoundKey)
    应用场景:TLS/SSL、磁盘加密、移动支付、物联网设备等

  • HMAC: 基于密钥的哈希消息认证码,用于验证消息的完整性和来源
    特点:
    需要密钥才能生成和验证
    防止消息被篡改
    常用于API认证、数字签名等

  • HKDF: 密钥派生函数,用于从一个主密钥派生出多个安全强度高的子密钥

一个完整的流程:ECDH协商共享密钥,HKDF派生会话密钥,AES加密数据,HMAC验证消息完整性

加密算法说明及用例

ECDH(椭圆曲线迪菲-赫尔曼密钥交换)

ECDH(Elliptic Curve Diffie-Hellman)是一种基于椭圆曲线密码学的密钥交换协议,用于在不安全的通信环境中安全协商共享密钥

核心:双方交换公开参数,生成共享密钥,无需直接传输密钥本身

流程: 以secp256r1(P-256)曲线为例

  • 协商:双方事先约定使用相同的椭圆曲线参数(曲线类型)
  • 私钥生成:随机生成一个整数d,私钥的大小(以位数表示)等于曲线阶的比特长度;例如,对于secp256r1(P-256)曲线,私钥是一个256位(32字节)的整数。
  • 公钥生成:私钥与基点G通过点乘运算得到

    基点G(x,y) 是椭圆曲线的一部分,通常由椭圆曲线的标准定义决定。如果使用标准曲线,则不用协商定义
    公钥 Q = d * G,Q值是一个坐标(x,y),在代码中用64个字节表示,其中前32字节表示x坐标,后32字节表示y坐标

  • 公钥交换:A设备和B设备通信交换各自的公钥
  • 共享密钥计算:设备A和B分别使用 各自的私钥d x 对方的公钥,得到共享密钥S。两者计算出的共享密钥S是相同的。

共享密钥原理:

  • 椭圆曲线点乘的交换律​,满足:
    [d_A \times (d_B \times G) = d_B \times (d_A \times G)]
  • G是

安全原理:

  • 椭圆曲线离散对数问题(ECDLP)​:从公钥 Q 反推私钥 d 的难度极高,确保攻击者无法破解私钥。
  • 与数学的椭圆曲线不同,其作用于有限域,且是取模运算(取余数),基本无法从余数反推出私钥值

优势:

椭圆曲线
有限域
取模运算(取余数)
公钥 = 私钥 * k % 模数
知道公钥,但不可能推算出私钥。
但双方 公钥 * 私钥 % 模数 = 共享密钥 是一致的

生成密钥后,又是如何对数据进行加密的呢

代码以及用例验证

python代码,得到结果
可以用来对照部署在嵌入式设备,验证算法接口的正确性

SHA256

比CRC、CheckSum高级,更安全可靠

SHA256作为一种安全可靠的哈希算法,广泛应用于密码存储、数字签名、数据完整性验证等场景,是现代密码学体系中的重要组成部分。

对ECDH生成的共享密钥进行哈希处理,生成会话密钥

SHA256通过一系列复杂的位运算(包括位移、逻辑运算、模加法等),将输入数据分块处理,最终生成哈希值。整个过程涉及:

数据填充和分块
初始化哈希值
按块进行压缩函数运算
最终输出哈希值

OOB 拼接

HMAC

HKDF

AES

AES128

MD5

加密流程讲述

典型协议流程示例(TLS 1.3)​

TLS 1.3是啥

​客户端与服务器协商参数:选择椭圆曲线(如 secp256k1)和哈希算法(如 SHA-256)。
​ECDH 密钥交换:双方交换公钥,生成共享密钥 S。
​密钥派生:使用 SHA-256 对 S 和其他参数进行哈希,生成会话密钥。
​数据加密与验证:
使用 AES-256(密钥来自步骤3)加密数据。
使用 SHA-256 生成 HMAC 校验数据完整性。

XiaoMi 穿戴加密流程

本地绑定
派生密钥

鉴权
oob 如何生成

id

通信

正常透传通信后,每次收发数据都进行加解密

ccm解密miwear_crypto_ccm_decrypt:642
aes128加密

嵌入式加密算法移植、设计与应用

github 算法库
接口

思考与拓展

如何自己搭建/应用现代加密协议栈?

验证算法接口是否正确,python可执行对比

ECDH与SHA256的联系?

TLS、TLS 1.3 是啥加密协议流程?

加密算法代码占用空间?

嵌入式C语言开发中
实例应用中,至少需要准备200KB的空间,用于部署加密算法库

所有的数据通信都是密文吗?基于ECDH得到的共享密钥,如何对数据进行加密?

密钥哈希化:将原始密钥通过哈希算法(如SHA256)进行处理,生成一个固定长度的哈希值,然后将这个哈希值用作后续加密操作的密钥
使用哈希值 + 数据 进行AES128加密

对方使用密钥哈希值 + 加密数据 进行AES128解密

非对称加密是什么?对称加密是什么?区别与联系、应用?

三元组是啥?与加密算法的联系?四元组呢?

在加密领域,三元组(3DES),通常指 ​三重DES(Triple DES,3DES)​,这是一种对称加密算法,用于增强经典DES算法的安全性。

现已经逐步淘汰,逐渐被AES取代。

加密领域,通常没有四元组的概念,在计算机科学和网络通信中,“四元组”指用于唯一标识网络连接或数据流的一组四个参数。

在网络层(如IP)和传输层(如TCP/UDP)中,四元组唯一标识一条端到端的通信连接
​绑定四元组:会话密钥通常与四元组关联,确保同一连接的不同数据流使用相同密钥加解密

:为什么一些联网的设备需要提前烧录四元组?

可能破解的流程是怎样的?知道了私钥,能破解数据吗?

须多重解密
每一次的数据传输,都是AES叠加HMAC

数字签名是什么?

JL有没有数字签名?

基于非对称密码学的数学机制,用于让接收方确信消息确实来自声称的发送方,并且在途中没有被篡改

目标 手段 密钥
加密 防止别人看到内容 公钥加密,私钥解密
签名 防止别人伪造/篡改内容 私钥签名,公钥验签

公钥给你一把‘只能锁门’的挂锁;只有我手里的私钥才能造出‘能开门’的钥匙

先使用了私钥进行了运算,只有对的公钥才能验证算式成功

HMAC也是验证数据完整性的一种机制,所以HMAC是数字签名吗?

HMAC 只能做“消息认证码”(MAC),而数字签名必须基于非对称密钥(私钥签名+公钥验签)。二者最本质的差别:

能力 HMAC 数字签名
是否用到非对称密钥 ❌ 对称密钥(双方共享同一把) ✅ 私钥签名,公钥验签
能否让第三方仲裁 ❌ 任何能验的人也能伪造,无法证明“是谁签的” ✅ 公钥公开,私钥唯一;第三方可独立验证
主要作用 防篡改、防伪造(参与双方诚实场景) additionally 提供不可否认性(可上法庭)
性能 哈希+一次对称运算,极快 非对称运算,慢一个量级
常见标准 HMAC-SHA256、HMAC-SHA512 RSA-PSS、ECDSA、Ed25519

参考站点