核心内容摘要
《地下偶像NASA》1-28
B站视频讲解Bilibili博主个人介绍《Yocto项目实战教程》京东购买链接Yocto项目实战教程加博主微信进技术交流群jerrydev各类密码算法与应用场景全指南含实战示例目标用一篇文章把「密码学在工程中的角色」讲清楚——各类算法解决什么问题、适合哪些场景、如何选择与组合并给出可直接上手的实战示例Linux/openssl/Python。
密码学在工程里到底做什么工程安全通常不是“用一个算法就结束”而是由一条链路构成机密性Confidentiality数据不被看见加密。
完整性Integrity数据不被悄悄改动校验/认证。
身份认证Authentication确认“对方是谁”证书/签名/共享密钥证明。
不可否认Non-repudiation对方事后无法否认数字签名。
密钥管理Key Management密钥如何生成、保存、轮换、吊销。
把这几个目标映射到常见方案Secure Boot用“签名 哈希”保证启动链代码可信。
磁盘加密用“对称加密XTS 等”保护静态数据用“TEE/TPM/RPMB/OTP”等保护密钥。
TEE把“密钥与敏感运算”隔离到安全世界降低被窃取概率。
fTPM/TPM提供度量、证明、密钥封装、单调计数器防回滚等能力。
密码算法的分类框架密码算法可以按“解决的问题”来分工程上最常用的是下面 6 类。
1 对称加密Symmetric Encryption核心用途加密大量数据速度快。
代表算法AES、SM4国密、旧DES/3DES。
关键概念分组密码Block CipherAES/SM4 一次处理固定大小的块AES 的块大小为 128 bit。
工作模式Mode决定“块如何串起来”。
常见模式与典型场景模式关注点典型场景备注ECB无 IV相同明文块产生相同密文块基本不建议用于真实数据容易泄漏结构CBC需要随机 IV历史兼容场景仅机密性不含认证CTR计数器 nonce可并行高性能流式加密nonce 不可重复XTS扇区 tweak面向块设备磁盘/分区加密典型是 AES-XTSGCM/CCMAEAD机密性 完整性TLS、协议加密、消息加密nonce 不可重复工程建议“加密文件/消息/网络数据”优先AES-GCM或ChaCha20-Poly1305软件生态更常见在国密体系中对应SM4-GCM/CCM。
“磁盘/块设备”优先AES-XTS。
2 哈希Hash核心用途把任意长度数据映射为固定长度摘要用于完整性检测与度量。
代表算法SHA-256/SHA-384/SHA-
SM3。
常见误区哈希不提供机密性只是“改了就会变”。
典型用途文件校验镜像、固件包、模型文件。
度量measurement把启动链各阶段的摘要写入 TPM PCR。
工程建议避免把MD5/SHA1用作安全用途碰撞风险兼容场景除外。
3 消息认证码MAC与 HMAC核心用途证明数据来自“拥有共享密钥的一方”并保证完整性。
HMACHMAC-SHA
HMAC-SM3。
与签名的区别HMAC 使用共享密钥双方都能生成与验证。
数字签名使用私钥签名、公钥验证更适合分发与不可否认。
典型用途设备与服务器共享密钥的接口鉴权。
OTA 分发链路中内部系统用 HMAC 做快速鉴权外部发布更常用签名。
4 AEADAuthenticated Encryption with Associated Data核心用途一次完成“加密 完整性认证”避免“先加密再哈希”的组合陷阱。
代表算法AES-GCM、AES-CCM、ChaCha20-Poly
SM4-GCM/CCM。
AADAssociated Data需要认证但不加密的数据如头部、版本号、序列号。
工程建议在能用 AEAD 的地方尽量用 AEAD特别是网络协议与消息加密。
5 非对称密码Asymmetric Cryptography核心用途身份、签名、密钥交换速度慢但用于小数据/密钥很合适。
代表算法RSA常见 2048/3072/4096ECCECDSA、Ed
X25519 等数字签名Signature用途固件签名、证书体系、软件发布。
典型场景Secure Boot、OTA 包签名、驱动/模块签名。
密钥交换Key Exchange用途在不安全信道上协商对称密钥。
典型场景TLS 握手X25519/ECDHE。
6 密钥派生KDF与口令学Password-based核心用途把一个“原始秘密”变成适合加密/认证使用的密钥或把口令变得难以暴力破解。
KDFHKDF、NIST SP
计数器模式 KDF、PBKDF2。
口令哈希bcrypt/scrypt/Argon2。
典型用途从设备唯一信息或主密钥派生会话密钥、卷密钥。
LUKS 中从口令派生主密钥。
从需求到算法选择一张工程决策表需求推荐组合常见落地保护磁盘/分区数据静态AES-XTS 安全存储密钥TEE/TPM/RPMB/OTPdm-crypt/LUKS、全盘加密保护网络传输动态AEADAES-GCM/ChaCha20-Poly1305 ECDHETLS
3固件/镜像可信发布SHA-256/SM3 数字签名RSA/ECDSA/SM2Secure Boot、OTA设备身份与证明TPM PCR 度量 证书/签名远程证明attestation防回滚Anti-rollback单调计数器 签名验证 安全存储计数器eFuse/OTP、RPMB、TPM NV设备内安全存储AEAD 密钥不出 TEEOP-TEE Secure Storage
与 Secure Boot、磁盘加密、TEE、fTPM/回滚的联系这一节把“算法”与“系统机制”做一一对应。
1 Secure Boot签名把启动链串起来目标从 ROM 开始逐级验证 bootloader、固件、内核、设备树等。
关键算法哈希SHA-256/SM3计算镜像摘要签名RSA/ECDSA/国密体系 SM2核心逻辑计算下一阶段镜像摘要。
用公钥验证签名。
验证失败拒绝启动或进入恢复流程。
Secure Boot 关心的是“代码是否来自可信发布方”不直接解决“数据保密”。
2 磁盘加密XTS 保护静态数据密钥管理决定安全上限目标设备丢失、磁盘被拔走时离线无法读取数据。
典型算法AES-XTS。
关键工程点加密算法只解决“数据变不可读”真正的难点是“密钥在哪里”。
常见做法密钥在TEE生成与封装Linux 只拿到短期派生密钥或解密后的卷密钥。
或使用TPM做密钥封装seal/unseal。
防篡改计数器/回滚信息可放在 RPMB/OTP/TPM NV。
3 TEE把密钥与敏感运算隔离出去目标即使 Linux 被攻破攻击者仍难以直接读取密钥。
TEE 常做的事生成密钥依赖 TRNG。
存储密钥安全存储。
提供解密服务密钥不出安全世界。
常见设计Linux 侧只保存加密后的密钥材料或句柄。
TEE 侧持有主密钥按策略派生/解密出工作密钥。
4 fTPM/TPM度量、证明与防回滚的“制度化接口”度量measurement把启动链摘要写入 PCR。
证明attestation把 PCR 状态签名给远端验证。
防回滚anti-rollback使用单调计数器或 NV 存储确保版本号不可倒退。
回滚为什么与密码学相关只有“签名验证”无法阻止“刷回旧版本的合法镜像”。
必须引入不可倒退的版本状态eFuse/OTP一次性或受限写入RPMB带密钥认证的防篡改存储TPM NV策略控制的 NV 空间
实战示例 1文件签名与验证模拟 Secure Boot/OTA 的核心动作这一节用最小示例复现“发布方签名 → 设备端验签”。
1 生成密钥对发布方# 生成 RSA 私钥示例用 3072也可用 4096openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out vendor_rsa_priv.pem# 导出公钥openssl pkey -in vendor_rsa_priv.pem -pubout -out vendor_rsa_pub.pem
2 对固件/镜像生成摘要并签名# 假设 firmware.bin 是要发布的固件openssl dgst -sha256 -sign vendor_rsa_priv.pem -out firmware.sig firmware.bin# 同时可生成摘要文件便于审计openssl dgst -sha256 -out firmware.sha256 firmware.bin
3 设备侧验证签名openssl dgst -sha256 -verify vendor_rsa_pub.pem -signature firmware.sig firmware.bin输出包含Verified OK表示验证通过。
可验证的攻击模拟篡改固件cpfirmware.bin firmware_tampered.binprintf\x00|ddoffirmware_tampered.binbs1seek100count1convnotrunc openssl dgst -sha256 -verify vendor_rsa_pub.pem -signature firmware.sig firmware_tampered.bin应当验证失败。
这就是 Secure Boot/OTA 的核心动作签名绑定内容篡改必然被发现。
实战示例 2AES-GCM 加密与认证消息/配置/模型文件的典型做法这一节演示 AEAD 的正确姿势加密 认证 AAD。
1 Python 示例cryptography 库说明示例用于理解流程部署时请按项目依赖管理。
fromcryptography.hazmat.primitives.ciphers.aeadimportAESGCMimportos# 256-bit keykeyAESGCM.generate_key(bit_length
aesgcmAESGCM(key)# GCM nonce 通常 96-bit12 bytes必须保证同一 key 下不重复nonceos.urandom(
plaintextbdevice_config: version3; modeprod;# AAD参与认证但不加密例如版本号、设备标识aadbheader:v1ciphertextaesgcm.encrypt(nonce,plaintext,aad)print(ciphertext_len,len(ciphertext))# 解密若密文或 aad 或 tag 被篡改会抛异常recoveredaesgcm.decrypt(nonce,ciphertext,aad)print(recovered)
2 关键
注意事项nonce 不可重复同一密钥下复用 nonce 会严重破坏安全性。
不要手工拼接“加密 哈希”优先用 AEAD。
实战示例 3Linux 磁盘加密LUKS/dm-cryptAES-XTS 典型落地风险提示下列命令会清空目标分区数据。
请使用测试盘或虚拟块设备。
假设目标分区为/dev/sdb1。
1 初始化 LUKS 容器选择 XTSsudocryptsetup luksFormat /dev/sdb1 --type luks2 --cipher aes-xts-plain64 --key-size512--hash sha256说明aes-xts-plain64块设备常用。
--key-size 512XTS 需要两把 AES key2×256。
2 打开加密卷并创建文件系统sudocryptsetupopen/dev/sdb1 securedatasudomkfs.ext4 /dev/mapper/securedatasudomkdir-p /mnt/securedatasudomount/dev/mapper/securedata /mnt/securedata写入测试数据echosecret|sudotee/mnt/securedata/secret.txtsudosync
3 关闭卷sudoumount/mnt/securedatasudocryptsetup close securedata
4 验证“离线不可读”直接挂载原分区将无法读取有效文件系统因为数据已加密。
5 硬件加速相关的验证路径可选查看算法实现不同发行版输出不同cat/proc/crypto|grep-i xts -ncat/proc/crypto|grep-i aes -n查看是否存在硬件实现标识例如驱动名包含 rk/crypto 等。
注意能看到算法并不等同于“磁盘加密一定走硬件加速”。
实际是否 offload 还与内核配置、缓冲区对齐、DMA 路径等相关。
实战示例 4HWRNG/TRNG 在 Linux 中的用法与验证
1 读取硬件随机数# 读取少量数据进行基本验证sudohead-c32/dev/hwrng|hexdump -C
2 查看系统熵状态辅助观察cat/proc/sys/kernel/random/entropy_avail
3 工程使用原则密钥、nonce、会话种子等应来自可靠随机源。
若设备具备 TRNG建议让其参与系统随机池。
“硬件密码引擎Crypto IP”与软件栈的关系在 SoC例如 Rockchip Crypto v2上硬件通常提供以下能力对称加密加速AES/SM4 多模式HASH/HMAC 加速大数运算加速供 RSA/ECC 封装使用TRNG 随机源软件栈常见层次内核驱动注册到 Linux Crypto API/proc/crypto可见。
用户态库例如厂商库或通用库OpenSSL、mbedTLS 等。
系统能力dm-crypt、TLS、Secure Boot、OTA、TEE 调用链。
工程验证建议功能验证先用通用接口跑通openssl/cryptsetup。
性能验证做吞吐/CPU 占用对比数据块大小要覆盖 4K/64K/1MB。
安全验证nonce 管理、密钥生命周期、回滚计数器策略。
常见误区与排查清单
1
1 把“哈希”当成“加密”哈希只能检测篡改无法隐藏内容。
1
2 复用 nonce/IVGCM/CCM/CTR 一旦复用 nonce安全性会严重下降。
工程上应采用单调计数器或随机 nonce 去重策略推荐计数器式。
1
3 用 ECB 加密结构化数据会泄漏模式与结构。
1
4 只做签名不做防回滚攻击者可以刷回旧版本合法镜像。
需要单调计数器OTP/RPMB/TPM NV与启动阶段对比策略。
1
5 密钥落在普通文件系统即使加密算法正确密钥一旦可读系统仍不安全。
建议TEE/TPM/RPMB/OTP 参与密钥保护。
真实应用场景把“算法组合”落到产品需求
1
1 工业网关/边缘计算盒子Secure Boot阻止启动链被替换。
磁盘加密保护本地日志、配置、模型与客户数据。
OTA签名校验 防回滚计数器。
远程证明TPM/fTPM 证明设备处于可信状态。
1
2 摄像头/门禁/安防设备录像与配置加密AES-XTS存储/AES-GCM配置/消息。
设备身份证书 ECDSA/Ed25519。
防降级回滚策略避免旧固件漏洞被利用。
1
3 车载/机器人控制器供应链可信Secure Boot 签名发布。
安全更新签名 A/B 防回滚。
数据保护分区加密 TEE 密钥保护。
一套可执行的学习路线建议 14 天原则每一步都有“可验证输出”避免停留在概念层。
第 1~3 天打牢分类与术语能区分对称/非对称/哈希/HMAC/AEAD/KDF。
明确nonce/IV/盐salt/tag 的含义。
第 4~6 天签名链路最小闭环生成密钥对 → 签名文件 → 验签 → 篡改验证失败。
扩展用 ECDSA/Ed25519 再做一次。
第 7~9 天AEAD 最小闭环AES-GCM包含 AAD验证篡改密文或 AAD 会失败。
建立 nonce 管理策略计数器式。
第 10~12 天磁盘加密闭环LUKSformat/open/mount/close。
性能观察不同块大小下的吞吐与 CPU 占用。
第 13~14 天把硬件加速纳入视野查看/proc/crypto是否出现 SoC 驱动实现。
设计测试禁用硬件驱动 vs 启用硬件驱动如可控对比性能。
结语密码学不是“选算法”而是“建链路”在真实系统里Secure Boot解决“代码可信”。
磁盘加密解决“数据静态保护”。
TEE/TPM解决“密钥与状态可信”。
防回滚解决“旧版本漏洞被复用”。
算法只是工具关键是密钥如何生成TRNG密钥如何保存TEE/TPM/RPMB/OTP密钥如何使用AEAD/XTS/签名系统如何验证与拒绝Secure Boot/OTA/回滚策略附录 A常用术语简表术语含义IVInitialization Vector初始化向量常用于 CBC 等noncenumber used once同一 key 下不可重复GCM/CTR 等tagAEAD 认证标签完整性/认证AADAssociated Data参与认证但不加密的数据KDFKey Derivation Function密钥派生函数PCRTPM Platform Configuration Register用于度量附录 B进一步扩展按需国密体系SM2/SM3/SM4 与 TLS 国密套件。
设备侧密钥派生基于硬件唯一值HUK KDF 的分层密钥模型。
RPMB防篡改存储在防回滚与密钥封装中的角色。
若你提供目标平台例如 RK3588/RV1106与目标能力优先级磁盘加密/secure boot/OTA/TPM可以把本文的实战部分进一步收敛为“项目级落地步骤清单”每一步包含验证点与失败排查路径。
B站视频讲解Bilibili博主个人介绍《Yocto项目实战教程》京东购买链接Yocto项目实战教程加博主微信进技术交流群jerrydev