LOKI97加密解密
澳大利亚分组密码 - 128位分组、可变密钥长度的AES候选算法
安全提示
LOKI97曾是AES候选算法,但未被选为标准。对于需要高安全性的新应用,建议使用AES(Rijndael)。
关于LOKI97
LOKI97 是澳大利亚 LOKI 密码家族的第三代算法,由 Lawrie Brown(澳大利亚国防军官学院)和 Josef Pieprzyk(麦考瑞大学)设计。该家族始于 LOKI89(1990 年),采用 64 位分组,后被 Biham 和 Shamir 的差分密码分析攻破。LOKI91 改进了 S 盒的三次多项式构造。LOKI97 是 1998 年提交给 NIST 的完全重新设计版本,采用 128 位分组和 128、192 或 256 位密钥。
LOKI97 最具特色的结构元素是其 S 盒——通过在 GF(2¹³) 上求解不可约多项式生成,比 DES 的手工设计 S 盒或 AES 的 GF(2⁸) SubBytes 具有更复杂的代数结构。密钥编排通过递归地将 LOKI97 的轮函数本身应用于主密钥来推导所有轮子密钥,使子密钥生成的安全性与密码本身的强度相当。LOKI97 未通过 AES 评选的第一轮,但至今密码学上未被攻破。
主要特点
- 128 位分组——从 LOKI89 的 64 位分组升级而来,消除了影响 64 位 LOKI89 的生日界漏洞
- 三种密钥长度:128、192 和 256 位——与 AES 完整密钥范围一致,允许灵活的安全级别选择
- 在 GF(2¹³) 上生成 S 盒的 16 轮费斯特尔网络——比 DES 或 AES 更具代数复杂性的 S 盒构造
- 自引用密钥编排——轮子密钥通过递归将 LOKI97 轮函数应用于主密钥材料来推导
- 澳大利亚起源与传承:在澳大利亚国防军官学院和麦考瑞大学设计,是唯一具有纯南半球学术血统的 AES 候选算法
LOKI家族历史
- LOKI89:1989年设计的原始密码,采用64位分组和64位密钥。
- LOKI91:解决LOKI89弱点的改进版本。
- LOKI97:采用128位分组的最终演进版,提交至AES竞赛。
加密模式
- CBC: 密码块链接模式——每个 128 位 LOKI97 明文块在进入 16 轮 GF(2¹³)-S 盒费斯特尔序列之前与前一密文块异或。与 64 位的 LOKI89/91 不同,LOKI97 的 128 位分组意味着生日界碰撞概率在约 2⁶⁴ 个块(~148 EB/密钥)之前可以忽略不计,使实际 CBC 使用完全安全地避开了 Sweet32 问题。
- ECB: 电子密码本模式——每个 128 位 LOKI97 块独立地经过全部 16 轮费斯特尔处理。由于 LOKI97 的密钥编排从主密钥递归生成子密钥,所有块共用相同的推导轮密钥;相同的 128 位明文块产生相同密文。ECB 仅适用于单块令牌或密钥封装,绝不能用于多块明文。
- CFB: 密码反馈模式——LOKI97 的 128 位块函数对前一密文块(从 IV 开始)加密,输出的高 n 位与 n 位明文异或。LOKI97-CFB 产生的密钥流同时来自 GF(2¹³) S 盒替换和费斯特尔扩散网络,是一种带错误传播的同步流模式。
- OFB: 输出反馈模式——LOKI97 的块函数在完全独立于明文的情况下反复加密当前状态,绕过扩展密钥编排来生成确定性密钥流。128 位内部状态意味着 OFB 密钥流循环长度至少为 2⁶⁴(生日界论证),远大于 LOKI97 的 64 位前身。
- RAW: 原始块模式——对单个 16 字节数据进行一次 LOKI97 全部 16 轮费斯特尔处理,不使用任何反馈链接。用于密钥封装、密码测试和独立分析轮函数。输入必须恰好为 128 位(16 字节),不使用 IV。
算法结构
LOKI97采用16轮Feistel网络结构。每轮处理一个128位分组,将其分为两个64位半块(L和R)。
密钥扩展
256位主密钥通过f函数和常量DELTA(源自黄金分割比)扩展为48个子密钥(SK[0]到SK[47])。对于128位或192位密钥,密钥材料会被复制以填充256位密钥寄存器,然后再进行扩展。
轮函数
每轮应用:L' = R + SK[3i],R' = L XOR f(R + SK[3i], SK[3i+1], SK[3i+2])。加法运算为模2^64。
f函数
核心f函数f(A, B)由四层组成:
- KP(密钥控制置换):根据B中的控制位从A中选择比特
- Sa(S盒层a):使用两种类型的八个并行S盒查找(S1:13→8位,S2:11→8位)
- P(置换):使用8×8位交织模式的64位置换
- Sb(S盒层b):使用B中额外密钥材料的第二轮八个S盒查找
S盒
S1有8192个条目(13位输入→8位输出),S2有2048个条目(11位输入→8位输出)。两者分别使用GF(2^13)和GF(2^11)中的立方运算计算,采用特定的生成多项式以确保强非线性。
解密过程
解密使用相同的结构,但子密钥以相反顺序应用(从SK[47]到SK[0]),并使用减法代替加法。
算法比较
| 算法 | 密钥长度 | 分组大小 | 安全性 | 速度 |
|---|---|---|---|---|
| LOKI97 | 128/192/256 bits | 128 bits | 良好 | 中等 |
| AES | 128/192/256 bits | 128 bits | 优秀 | 快速 |
| Serpent | 128/192/256 bits | 128 bits | 优秀 | 中等 |
| DES | 56 bits | 64 bits | 弱 | 快速 |
安全注意事项
- LOKI97 对其完整 16 轮至今没有已发表的实际攻击。最好的学术密码分析针对约简轮次变体;GF(2¹³) S 盒结构专门为对抗 LOKI89 中暴露的弱点而设计,能抵抗差分和线性密码分析。
- 128 位分组消除了影响 64 位前身 LOKI89 和 LOKI91 的 Sweet32 生日攻击。LOKI97 下的生日界碰撞需要约 2⁶⁴ 个加密块——大约 148 EB——使其在实际部署中完全不成问题。
- LOKI97 在 AES 评估中未能晋级是效率而非安全性的判断。AES 委员会认为 LOKI97 的软件性能相比 Rijndael 和 Twofish 较慢。排除的原因不涉及任何密码学弱点;算法在 AES 后收到了有限但积极的密码分析评价。
- 所有新系统请使用 AES-128-GCM 或 AES-256-GCM。LOKI97 适用于读取现有 LOKI97 部署中加密的数据、澳大利亚密码设计的学术研究,或有明确要求使用非 AES 算法的系统。
使用场景
- 学术密码分析研究:LOKI97 的 GF(2¹³) S 盒构造和自引用密钥编排为研究代数密码设计和 AES 历史评估过程的学生提供了独特的研究对象
- 澳大利亚政府和国防遗留系统兼容性:1990 年代末在澳大利亚本土密码政策下建立的系统可能标准化了 LOKI97;读取或迁移此类档案需要 LOKI97 支持
- AES 候选算法比较研究:与 Serpent、Twofish、RC6 和 MARS 一起,LOKI97 代表 NIST AES 评估的第一轮——研究所有五个第一轮候选算法可以全面了解被考虑的设计权衡
- 非 AES 合规场景:某些组织或监管背景规定主密码不得基于 AES;LOKI97 提供了一种经过充分分析且未被攻破的 128 位分组替代方案,具有有记录的学术传承