3. 常见密钥类型(对称、非对称、证书)

说到密钥发现,第一个要搞清楚的问题就是:你找到的到底是什么类型的密钥?
别笑,我见过不少团队花了几周时间把一堆 Base64 字符串扫出来,结果一半是 JWT ,另一半是配置文件里的假占位符。密钥类型判断不准,后面的可视化全是错的。

我把最常见的密钥类型分成三组:对称密钥、非对称密钥(公私钥对)和数字证书。这三类在存储格式、使用场景、发现特征上差异很大。我自己做 DSPM 落地时,习惯先按这个分类把扫描结果归一下,再往下走。

3.1 对称密钥——藏在代码里最多的那种

对称加密,说白了就是加密和解密用同一个密钥。你想想看,两个人要通信,得先把这个密钥安全地传给对方。麻烦就麻烦在这里——密钥分发是老大难。

工作中最常见的对称算法有:

  • AES(128 / 256 bit)—— 现在是事实标准
  • DES / 3DES —— 老项目里还有,但安全性不够了
  • ChaCha20 —— 移动端和 TLS 1.3 里常见
  • Blowfish / Twofish —— 见过一些遗留系统在用
个人习惯:在 DSPM 的扫描规则里,我会专门加一条针对 AES-256 的 Base64 模式匹配。不是所有 32 字节的随机字节都是密钥,但命中率很高。我曾经在一个 Java 项目的 application.yml 里抓到过硬编码的 AES 密钥,明文写着的 aes.key=Y29tLmV4YW1wbGUuYWVzLmtleQ==……嗯,这种案例太多了。

3.2 非对称密钥——公钥不怕丢,私钥要命

非对称加密用一对密钥:公钥公开,私钥保密。签名、密钥交换、证书体系全都靠它。我经常跟团队说:私钥泄露等于城门失守,公钥泄露倒问题不大。

主流算法:

算法密钥长度典型用途发现特征
RSA2048 / 4096 bit数字签名、密钥传输文件头 -----BEGIN RSA PRIVATE KEY-----
ECC(ECDSA / ECDH)256 / 384 bitTLS 证书、区块链文件头 -----BEGIN EC PRIVATE KEY-----
Ed25519256 bitSSH、现代签名通常以 sk-ed25519 开头
避坑指南:我曾经遇到过一个项目,代码里同时出现了 PEM 格式的私钥和 PKCS#8 格式的私钥,但用的是同一个 RSA 密钥对。DSPM 扫描如果不做格式归一化,会误判成两个独立密钥。后来我加了一步“内容指纹去重”,把 Base64 解码后的模数 n 取哈希,才算搞定。

3.3 数字证书——绑定身份的关键

证书的本质是把公钥和身份信息绑在一起,再找个可信的 CA 签个字。常用的 X.509 证书里有:

  • Subject(所有者身份)
  • Issuer(CA 名称)
  • 公钥(算法 + 公钥数据)
  • 有效期(notBefore / notAfter)
  • 签名值

在密钥发现中,证书通常以 PEM 格式存储:-----BEGIN CERTIFICATE-----。但要注意,有些系统会把根证书和中间证书混在一起,或者自签证书没有信任链。我建议 DSPM 扫出来后,至少校验一下证书是否过期、是否自签名。

实际经验:有一次做金融客户的内审,DSPM 报出 300 多个证书。我一查,其中 80% 都是自签的测试证书,有效期早就过了,但还在生产环境里挂着。你说危不危险?所以我每次都会加一条规则:有效期 >= 当前时间 + 30 天 才算“有效”,否则列入风险清单。

3.4 三种类型的对比与发现要点

维度对称密钥非对称密钥数字证书
密钥数量1 个2 个(公钥 + 私钥)1 个证书(内含公钥)
存储格式Raw bytes / Base64 / HexPEM / DER / PKCS#8PEM / DER / PKCS#12
典型文件扩展名.key .aes .secret.pem .key .priv.crt .cer .pem .pfx
是否可公开否公钥可公开,私钥不可证书可公开
风险场景硬编码、明文存储私钥泄露、弱算法过期、自签、撤销遗漏
密钥发现中三类密钥的识别与处理流程 扫描到密钥数据 类型判定 对称密钥 非对称密钥 数字证书 检查是否硬编码 识别公钥/私钥,验证算法强度 校验有效期、信任链 分类 + 风险评级 → 可视化
一句话总结:我在 DSPM 项目的扫描引擎里,第一层就是按文件头和内容特征分这三类。分对了,后面的可视化报告才能告诉老板“哪里有问题”,而不是“这里有一堆乱七八糟的字符串”。