一、密钥体系基础:对称加密与非对称加密、哈希函数与HMAC、密钥派生函数KDF、3GPP密钥层次结构
各位同学,咱们今天聊点硬核的。密钥体系,说白了就是整个核心网安全的“地基”。地基不稳,上面盖多高的楼都是白搭。我做了十几年核心网安全,见过太多因为密钥管理不当导致全网瘫痪的案例。嗯,咱们今天就把这块掰开揉碎了讲清楚。
1.1 对称加密 vs 非对称加密:两个老伙计
先说说对称加密。它的核心思想很简单:加密和解密用同一把钥匙。就像你家的门锁,钥匙只有一把,开门关门都用它。常见的算法有AES、SM4(国密标准)。
我在项目中遇到过一件事:某运营商的核心网信令面,为了追求性能,用了DES这种老掉牙的算法。结果呢?被第三方用彩虹表几分钟就破解了。后来我建议他们升级到AES-256,配合GCM模式,既保证了机密性,又提供了完整性校验。这里有个坑:对称加密的密钥分发是个大问题。你想想看,如果密钥在传输过程中被截获,那加密就等于没做。
核心要点:对称加密速度快,适合大量数据加密,但密钥管理是命门。
非对称加密就不一样了。它用一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏着。你用我的公钥加密,只有我能用私钥解密。RSA和ECC是典型代表。3GPP的AKA认证流程里,非对称加密主要用于数字签名和密钥协商。
我个人习惯是:用非对称加密做密钥交换,用对称加密做数据加密。这样既解决了密钥分发问题,又保证了性能。你想想看,如果全程用RSA加密几十兆的信令数据,那延迟得让人崩溃。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1个 | 2个(公钥+私钥) |
| 速度 | 快(硬件加速) | 慢(数学运算复杂) |
| 典型算法 | AES, SM4, 3DES | RSA, ECC, SM2 |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
| 3GPP应用 | NAS/AS加密 | AKA认证、根密钥保护 |
1.2 哈希函数与HMAC:数据的“指纹”
哈希函数,说白了就是给数据打一个唯一的“指纹”。你输入任意长度的数据,它输出固定长度的摘要。SHA-256、SM3是现在的主流。哈希函数有个重要特性:不可逆。你不能从摘要反推出原始数据。
我曾经踩过一个坑:某次安全审计,发现有人把用户密码直接存数据库。这要是被拖库,后果不堪设想。后来我强制要求用加盐哈希(bcrypt)存储密码。记住:永远不要存明文密码,这是底线。
HMAC(哈希消息认证码)是哈希函数的升级版。它引入了一个密钥,只有知道密钥的人才能验证消息的完整性。3GPP的NAS消息完整性保护,用的就是HMAC-SHA-256。为什么不用普通哈希?因为普通哈希没有密钥,任何人都可以伪造一个合法的哈希值。HMAC加了密钥,攻击者不知道密钥,就没办法篡改消息。
避坑指南:我曾经见过有人用MD5做HMAC,结果被碰撞攻击轻松绕过。现在至少要用SHA-256,国密环境用SM3。
1.3 密钥派生函数KDF:从“种子”长成“大树”
KDF(Key Derivation Function)的作用,是从一个主密钥派生出多个子密钥。你想想看,核心网里有那么多网元(MME、HSS、AMF、SEAF...),如果都用同一个密钥,那一个被攻破就全完了。KDF就是解决这个问题的。
3GPP TS 33.220里定义了KDF的实现方式。它基于HMAC-SHA-256,输入参数包括:主密钥(K)、算法类型(FC)、参数列表(P0, P1, ...)。输出就是派生出来的子密钥。
我举个例子:在5G AKA流程中,SEAF从HSS拿到根密钥K后,通过KDF派生出KSEAF、KAMF等。每个网元只知道自己需要的密钥,不知道根密钥。这样即使某个网元被攻破,也不会影响全局。
// 3GPP KDF 伪代码示例
Input: K (主密钥), FC (算法类型), P0, P1, ... (参数列表)
Output: 派生密钥
S = K || FC || P0 || P1 || ...
derived_key = HMAC-SHA-256(K, S)
return derived_key
注意:KDF的输入参数必须包含足够多的熵。如果参数太少或可预测,派生出来的密钥强度会大打折扣。我在项目中见过有人只用了时间戳做参数,结果被预测攻击。
1.4 3GPP密钥层次结构:层层设防
3GPP的密钥体系,是一个典型的层次化结构。从最顶层的根密钥,到最底层的空口加密密钥,每一层都有明确的职责和生命周期。
我画了一张图,帮你理解这个结构:
这个层次结构的好处很明显:隔离性。每一层密钥只用于特定场景,即使某一层被攻破,也不会影响其他层。比如,空口的KRRCenc泄露了,攻击者也只能解密RRC信令,拿不到NAS层的KNASenc,更拿不到根密钥K。
我记得有一次做渗透测试,我们模拟攻击者拿到了gNB的KgNB。理论上可以解密空口数据,但想往上追溯KASME?门都没有。因为KDF是单向的,从子密钥推不出父密钥。这就是层次化设计的安全价值。
实战要点:3GPP密钥层次的核心原则是“最小权限”和“单向派生”。每个网元只持有它需要的密钥,且密钥派生不可逆。这是核心网安全设计的基石。
好了,密钥体系的基础就讲到这里。对称加密和非对称加密是工具,哈希和HMAC是保障,KDF是纽带,3GPP层次结构是框架。把这几个点串起来,你就能理解核心网密钥管理的全貌了。