加密密钥基础:对称密钥、非对称密钥、哈希

做字段级加密,绕不开的就是密钥种类。你想想看,数据保护方案里,密钥是所有安全性的根基。我记得刚入行时,总把“用什么算法”放在第一位,后来踩了几次坑才明白——选错密钥类型,架构再漂亮也白搭。

这一节我们掰开揉碎,讲清楚三类核心密钥:对称密钥、非对称密钥和哈希。它们不是平行的三个概念,而是各自负责不同安全维度的基石。

三种密码学核心逻辑对比 对称加密 同⼀密钥 明文 密文 密钥 密文 明文 同一密钥解密 非对称加密 公钥 / 私钥 明文 密文 公钥加密 密文 明文 私钥解密 哈希 单向不可逆 任意输入 固定摘要 无解密 同一输入 相同摘要 防篡改校验

对称密钥:快,但分发是硬伤

对称密钥,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。AES、DES、SM4 都是常见算法。我做过一个金融交易系统,字段级加密就用 AES-256-GCM,吞吐量非常高,单条记录加密在微秒级。

优点:速度快,适合大数据量加密。硬件支持好,很多 CPU 有 AES-NI 指令集。

缺点:密钥分发是个大麻烦。如果加密方和解密方不在同一个安全域,怎么把密钥安全传过去?我曾在项目里用对称密钥加密数据库的敏感列,结果密钥硬编码在配置文件中,上线后被扫描工具扫出来——那真是噩梦般的经历。

⚠️ 避坑指南:我曾经见过团队在微服务间直接抄写对称密钥,明文传输。记住,对称密钥必须通过密钥管理服务(KMS)或专用通道分发,绝不能写死在代码或环境变量里。

非对称密钥:慢但安全,专治分发难题

非对称密钥依赖密钥对:公钥公开,私钥私密。RSA 和 ECC 是主流。用它加密,公钥加密的数据只有私钥能解;用它签名,私钥签名的数据公钥一验就知道是谁发的。

我个人的习惯是:需要身份认证或数字签名时,优先选非对称。比如在字段级加密中,可以用 RSA 加密每个业务行的数据密钥(DEK),这样 DEK 分发就安全了——公钥随便给,私钥藏在 KMS 里。

但别指望用它直接加密大段数据。RSA-2048 加密 1KB 数据需要几毫秒,比对称密钥慢上千倍。所以我通常只拿它保护“密钥本身”,或者加密小字段比如身份证号、手机号。

💡 经验之谈:ECC(椭圆曲线)比 RSA 更省带宽,相同安全强度下密钥长度更短。比如 ECC-256 的强度 ≈ RSA-3072。我在移动端加密项目中全部改用 ECC,证书体积小,握手速度快。

哈希:单向函数,不是加密

很多人把哈希和加密混为一谈,这是个大误区。哈希是单向函数,从哈希值无法还原原文。SHA-256、SM3 都是哈希算法。它不存储密钥,也不给你解密途径。

用在字段级加密的什么地方?

  • 完整性校验:对加密后的密文算个哈希,防止数据被篡改。
  • 密码存储:存储用户密码的哈希值,而不是明文。注意要加盐。
  • 数据去重:对敏感字段计算哈希,用于模糊匹配或索引(但要小心彩虹表)。

注意,哈希不是加密,它是不可逆的。如果你想要加密后还能解密,别用哈希。有一次我被问到“能不能用 SHA-256 加密手机号?”,我告诉他,那就永远解不开了。

三类密码学概念对比

特性 对称密钥 非对称密钥 哈希
密钥数量 1 个 2 个(公钥+私钥) 无密钥
可逆性 可逆(用密钥解密) 可逆(用私钥解密) 不可逆
典型算法 AES, SM4, ChaCha20 RSA, ECC, SM2 SHA-256, SHA-3, SM3
加密速度 非常快(微秒级) 慢(毫秒级) 快(哈希运算)
主要用途 大数据加密、传输加密 密钥交换、数字签名、小数据加密 完整性验证、密码存储
核心挑战 密钥分发与存储 性能瓶颈 彩虹表攻击、冲突风险

选型建议:实战中怎么搭

在字段级加密架构里,三种技术经常混合使用。我习惯这样设计:

  1. 数据加密用对称密钥(AES-256-GCM),每行数据生成一个数据密钥(DEK)。快,且支持身份认证。
  2. DEK 用非对称密钥加密(RSA-2048),加密后存储。这样只要保护好 RSA 私钥,所有 DEK 都安全。
  3. 完整性校验用哈希(SHA-256),对密文+认证标签计算哈希,存入另一列。查询时先验哈希,防篡改。
🔑 小结:对称密钥负责“快”,非对称密钥负责“安全分发”,哈希负责“验真”。三者各司其职,缺一不可。我设计的这套模式在几个大型金融项目里跑了三年,没出过安全事故。

搞清楚了这些基础,后面聊密钥边界划分才能落地。否则光有理论,到真实业务里还是不知道哪把钥匙该放谁手里。