密钥基础:常见的密钥类型及安全特性

大家好,欢迎来到第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)字段纳入你异常检测模型的特性。如果一个本应几分钟就过期的短期令牌,却连续使用了几个小时,这往往是精密的鱼叉攻击。

总结一下,这五种密钥,每种都有自己的“性格”。对称密钥快但分发难,非对称密钥安全但慢,和密码常见但有泄露风险,令牌灵活但容易被滥用。我们做密钥异常检测,不能一概而论。你需要理解每种密钥的生命周期和典型行为。下一个章节,我们会聊到怎么围绕这些密钥,构建你的第一个特征工程。