加密引擎基础:对称加密、非对称加密与哈希算法

各位同学,今天我们来啃一块硬骨头——加密引擎的核心算法。说实话,我刚入行那会儿,看到AES、RSA、SHA这些缩写就头大。后来在工业安全芯片项目里踩了无数坑,才慢慢摸清它们的脾气。今天我就把这几年的实战心得,掰开了揉碎了讲给你们听。

一、对称加密:AES与SM4

对称加密,说白了就是加密和解密用同一把钥匙。就像你家的门锁,用钥匙锁上,再用同一把钥匙打开。工业场景里,最常用的就是AES和SM4。

AES(高级加密标准)

AES是目前全球应用最广的对称加密算法。我最早接触它是在一个物联网网关项目里,当时需要加密传感器数据。AES支持128、192、256位密钥,工业上128位就够用,但安全等级要求高的场合,我建议直接用256位。

核心参数:

  • 分组长度:128位(固定)
  • 密钥长度:128/192/256位
  • 轮数:10/12/14轮(对应不同密钥长度)
  • 工作模式:ECB、CBC、CTR、GCM等

这里有个坑,我必须要说。ECB模式虽然简单,但千万别用在工业场景里。为什么?因为同样的明文块会生成同样的密文块,攻击者能看出数据模式。我曾经在一个老项目里看到过这种用法,后来被安全审计直接打了回来。

// AES-128 CBC模式加密示例(伪代码)
void aes_cbc_encrypt(uint8_t *plaintext, uint8_t *key, uint8_t *iv) {
    uint8_t block[16];
    // 初始化向量与第一块明文异或
    xor_blocks(block, plaintext, iv);
    // 执行AES加密
    aes_encrypt_block(block, key);
    // 输出密文,同时作为下一轮的IV
    memcpy(output, block, 16);
    memcpy(iv, block, 16);
}

SM4(国密算法)

SM4是中国的国家标准对称加密算法。说实话,它的结构和AES不太一样,但安全强度相当。我在做电力行业项目时,客户明确要求必须用SM4。它的分组长度也是128位,密钥长度128位,轮数32轮。

特性 AES SM4
分组长度 128位 128位
密钥长度 128/192/256位 128位
轮数 10/12/14 32
S盒规模 8×8 8×8
硬件实现 成熟,面积小 稍大,但可控

我个人习惯在芯片设计时,把AES和SM4的硬件引擎都做进去。这样既能兼容国际标准,又能满足国内合规要求。嗯,这里要注意,SM4的S盒实现和AES不同,不能复用,得单独设计。

二、非对称加密:RSA与SM2

非对称加密,就是公钥加密、私钥解密。你想想看,这解决了什么问题?密钥分发!对称加密最大的痛点就是怎么安全地把密钥传给对方,非对称加密直接把这个难题绕过去了。

RSA算法

RSA基于大整数分解难题。我记得第一次在芯片上实现RSA时,被那个模幂运算折磨得够呛。1024位的RSA已经不安全了,现在工业上至少用2048位,我建议直接上4096位。

避坑指南:

我曾经在某个项目中,为了追求性能,用了小公钥指数(e=3)。结果被攻击者利用Coppersmith攻击破解了部分密文。从那以后,我坚持用65537作为公钥指数,虽然慢一点,但安全多了。

// RSA密钥生成核心步骤
1. 选择两个大素数 p, q
2. 计算 n = p × q
3. 计算 φ(n) = (p-1)(q-1)
4. 选择 e,满足 1 < e < φ(n),且 gcd(e, φ(n)) = 1
5. 计算 d ≡ e⁻¹ mod φ(n)
6. 公钥:(n, e),私钥:(n, d)

SM2(国密椭圆曲线)

SM2基于椭圆曲线密码学,比RSA效率高得多。同样安全强度下,SM2的密钥长度只有256位,而RSA需要3072位。我在做车载安全芯片时,就用的SM2,因为芯片资源有限,RSA太占地方了。

说白了,SM2就是中国版的ECC。它的曲线参数是国密局指定的,不能随便改。我建议你们在做国密合规项目时,直接用硬件IP核,别自己写软件实现,容易出问题。

对比项 RSA-2048 SM2
密钥长度 2048位 256位
签名速度
加密速度 中等
硬件面积
安全强度 112位 128位

三、哈希算法:SHA与SM3

哈希算法,就是把任意长度的数据,压缩成固定长度的摘要。它不可逆,主要用于完整性校验和数字签名。我经常跟团队说,哈希算法是加密引擎的「指纹仪」。

SHA系列

SHA-1已经不安全了,别用。现在工业上主流是SHA-256和SHA-3。SHA-256输出256位摘要,SHA-3是新一代标准,结构完全不同。我个人更倾向SHA-256,因为硬件实现成熟,而且大多数安全芯片都原生支持。

实战技巧:

在做固件升级校验时,我习惯先用SHA-256计算固件哈希,再用SM2签名。这样既保证了完整性,又验证了来源。千万别只用哈希,攻击者可以替换固件和哈希值一起伪造。

SM3(国密哈希)

SM3输出256位摘要,和SHA-256安全强度相当。它的结构基于Merkle-Damgård,但压缩函数不同。我在做金融安全芯片时,SM3是必选项。说实话,SM3的硬件实现比SHA-256稍微复杂一点,但差距不大。

// SM3压缩函数核心(简化版)
void sm3_compress(uint32_t *w, uint32_t *v) {
    uint32_t ss1, ss2, tt1, tt2;
    for (int j = 0; j < 64; j++) {
        ss1 = ROTL_LEFT((ROTL_LEFT(v[0], 12) + v[4] + ROTL_LEFT(Tj(j), j)), 7);
        ss2 = ss1 ^ ROTL_LEFT(v[0], 12);
        tt1 = FFj(j, v[0], v[1], v[2]) + v[3] + ss2 + w[j];
        tt2 = GGj(j, v[4], v[5], v[6]) + v[7] + ss1 + w[j];
        // 更新寄存器
        ...
    }
}

四、三种加密算法的对比总结

好了,三种算法都讲完了。我画了一张图,帮你们理清它们之间的关系和适用场景。

加密引擎知识体系 对称加密 非对称加密 哈希算法 AES SM4 RSA SM2 SHA SM3 数据加密 密钥长度短 速度快 密钥交换 数字签名 速度慢 完整性校验 不可逆 固定输出 实际应用中,对称加密+非对称加密+哈希 三者组合使用 例如:TLS握手用RSA/SM2交换密钥,AES/SM4加密数据,SHA/SM3校验完整性

最后,我给你们一个实战建议。在工业安全芯片里,别只依赖一种算法。我设计的芯片通常包含:AES-256 + SM4(对称)、RSA-4096 + SM2(非对称)、SHA-256 + SM3(哈希)。这样无论客户要求国际标准还是国密标准,都能直接支持。

嗯,加密引擎这块内容不少,但核心就三点:对称加密管数据加密,非对称加密管密钥分发,哈希算法管完整性校验。把这三点吃透了,后面做安全协议就轻松多了。

专注资料整理