密钥基础:常见的密钥类型及安全特性
大家好,欢迎来到第2章。上一章我们聊了聊异常检测的大致轮廓,从今天开始,我们要真正接触异常检测的核心物料了。密钥,不同的密钥有不同的脾气。我这些年排查过的安全事件,十有八九都栽在密钥管理上。说白了,你不了解密钥的底细,就别谈什么检测异常。
这一章,我带你认认门。我们会搞清楚密钥家族里几类常见成员:对称密钥、非对称密钥、、密码和令牌。我的经验是,先理解它们的“基因”,才能看懂它们在被滥用时的“行为”特征。
密钥家族一图览
先看一张总图。这张图把常见密钥类型、它们的核心特性以及典型的使用场景串在了一起。你可以把它作为本章的“导航地图”。
对称密钥
对称密钥,你可以把它想象成一把万能钥匙。加密和解密用的是同一把。优点是速度飞快,特别适合加密大量数据。
我见过很多新手,觉得对称密钥简单,就直接把密钥硬编码在代码里。嗯,这很致命。一旦代码泄露,密钥就等于公开了。
核心特点:
- 加解密速度快,算法如AES、DES、SM4
- 密钥长度通常128位、192位或256位
- 最大的挑战是密钥分发和存储
我的一点经验:千万别用对称密钥直接加密密钥本身。我用过一个系统,工程师为了“方便”,用AES加密了一个数据库密码,然后把AES密钥明文放在配置文件里。这相当于把锁和钥匙放在了同一个口袋里。
非对称密钥
非对称密钥,就是配了两把钥匙——公钥和私钥。公钥可以随便发,私钥必须自己藏好。一个加密,另一个才能解开。
为什么需要它?你想想,在互联网上和陌生人通讯,怎么安全地分享对称密钥?非对称密钥解决了这个难题。实际中,我们常用它来做**数字签名**或**密钥交换**。
我记得有一次帮朋友公司做安全审计。他们的系统用非对称算法签名,但私钥居然存在一个共享的网络磁盘上。任何人只要拿到内网权限,就能伪造签名。这风险太大了。
避坑指南:我曾经查过一个线上事故,应用启动时报签名错误。最后发现是运维换了一个新的RSA密钥对,但是签名时用了旧私钥,验证时用了新公钥——根本对不上。记住,私钥的生命周期管理要跟公钥严格同步。
与密码
,本质上是一个**标识符+秘密**的组合。它用来告诉服务端,“我是某某服务,我来访问了”。密码则是用户层面的知识型凭证。
你可能觉得,这不都是字符串吗?区别大了。通常是系统生成的,随机性高,但很容易被硬编码。密码是用户设置的,有规律可循,容易遭受暴力破解。
我的一个教训:监控的时候,别只看请求频率。我还见过攻击者拿到一个失效的,然后循环测试其他服务,企图撞库。频率很低,但全是异常行为。
| 特性 | 密码 | |
|---|---|---|
| 生成方式 | 系统自动生成,随机性强 | 用户手动设置,可预测性高 |
| 使用场景 | 服务间通信、SDK访问 | 用户登录、身份验证 |
| 泄露风险 | 常见于代码仓库、日志 | 钓鱼、撞库、暴力破解 |
| 异常检测要点 | 从未知IP调用、调用时间突变 | 登录失败次数、异地登录 |
令牌
令牌,可以理解为一次性的短期通行证。你登录成功后,系统给你发一个令牌,以后你拿着它,就不用每次都输入密码了。常用的有JWT、OAuth令牌。
令牌的核心是时效性。大部分令牌都有有效期,短的几分钟,长的几天。我在项目中曾经遇到过一种攻击手法:攻击者偷到了一个长期有效的刷新令牌,然后像正常的用户一样每天刷新一次,持续了整整一个月才被发现。为什么?因为行为太“正常”了。
// 一个典型的JWT令牌结构示例
// Header
{
"alg": "HS256",
"typ": "JWT"
}
// Payload
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622
}
// Signature: 使用Header中指定的算法和密钥对前两部分签名
一个小提醒:我建议你把令牌的失效时间(exp)字段纳入你异常检测模型的特性。如果一个本应几分钟就过期的短期令牌,却连续使用了几个小时,这往往是精密的鱼叉攻击。
总结一下,这五种密钥,每种都有自己的“性格”。对称密钥快但分发难,非对称密钥安全但慢,和密码常见但有泄露风险,令牌灵活但容易被滥用。我们做密钥异常检测,不能一概而论。你需要理解每种密钥的生命周期和典型行为。下一个章节,我们会聊到怎么围绕这些密钥,构建你的第一个特征工程。