Camellia 分组密码算法:从 NESSIE 竞赛到国密对照的全景解析

算法原理 · 2026-09-24

一、定义与历史背景

1.1 算法诞生背景

Camellia 是由日本电气株式会社(NEC)和三菱电机株式会社于 2000 年联合设计的分组密码算法,最初仅在日本国内使用。该算法的设计灵感部分来源于 AES 竞赛的获胜者 Rijndael,但设计者希望在保持同等安全强度的同时,提供与 AES 不同的结构设计,以增加密码算法的多样性。

2004 年,该算法正式提交至欧洲新型高效密码算法选择项目(NESSIE)进行国际竞争。NESSIE 是欧盟委员会发起的一项密码算法标准化项目,旨在评估和推荐高效的对称密码算法。Camellia 与 AES(Rijndael)共同成为最终推荐算法(Profile 1),这是日本密码学界的重要里程碑。

1.2 标准化历程

Camellia 的标准化进程遵循了典型的国际密码标准路径:

时间事件
2000 年NEC 和三菱电机完成算法设计
2004 年提交 NESSIE 竞赛
2005 年NESSIE 推荐算法(Profile 1)
2006 年成为 ISO/IEC 18033-3 国际标准
2006 年成为 IETF RFC 3634 文档
2007 年成为 eSTREAM 项目候选(未入选最终组合)
2011 年成为 JISEC CRYPTEX 认证算法
2013 年成为 ISO/IEC 18033-3:2013 标准

1.3 算法命名与文化含义

Camellia 的花语是"魅力"和"优雅",其命名暗示了设计者对算法美学性的追求。算法名称也呼应了其设计目标:在保持与 AES 相近性能的同时,通过独特的设计结构提供差异化优势。

在密码学界,Camellia 与 AES 经常被一起讨论,因为它们是少数两个同时被推荐为 Profile 1 的分组密码。这种并列地位使得 Camellia 在国际密码标准中具有独特的重要性。

二、设计结构与技术参数

2.1 基本参数

参数值
分组长度128 比特
密钥长度128、192、256 比特
轮数18 轮(128 位密钥)、24 轮(192/256 位密钥)
结构类型Feistel 网络(带密钥调制的分支)
设计者NEC(Shoichi Hirose)、三菱电机(Hidehiro Morii)
首次发布2000 年

2.2 核心设计特点

#### (1)广义 Feistel 结构与 SPN 的结合

Camellia 采用了一种称为"广义 Feistel 网络"的结构,每轮包含两个 Feistel 分支,但每个分支内部使用 SPN(Substitution-Permutation Network)结构。这种混合设计在保持 Feistel 结构解密对称性的同时,提供了 SPN 结构的良好扩散特性。

与 AES 的纯 SPN 结构不同,Camellia 的 Feistel 结构具有以下优势:

  • 解密与加密对称:解密过程可以使用与加密相同的轮函数结构,简化硬件实现
  • 良好的扩散性:每个分支内部的 SPN 结构提供了快速扩散
  • 密钥调度灵活性:支持密钥依赖的 S 盒切换
#### (2)S 盒设计

Camellia 使用两个 8×8 的 S 盒,基于 AES 的 S 盒经过仿射变换衍生而来:

CODE
S₁ = S_AES(与 AES 相同的 S 盒)
S₂ = S_AES ⊕ C(S_AES 与常数 C 异或)

其中 S₂ 是通过将 S_AES 的每个字节与 0x63 异或得到的。这种设计保留了 S 盒的非线性特性,同时增加了与 AES 的差异性。

S 盒的选择基于以下设计原则:

  • 高非线性度:确保差分均匀性低
  • 代数结构简单:便于硬件实现
  • 抵抗线性密码分析:最大线性概率低
#### (3)轮函数设计

Camellia 的轮函数 $F_K$ 定义为:

$$F_K(X) = S_k \circ L(X)$$

其中:

  • $S_k$ 是 S 盒层(根据轮数奇偶性选择不同的 S 盒组合)
  • $L$ 是线性变换层,包含移位和异或操作
线性变换 $L$ 的具体实现:
CODE
L(x) = (x << 8) XOR (x << 2) XOR (x << 1) XOR x

这种线性变换确保了每个输入比特影响多个输出比特,提供了良好的扩散特性。

2.3 密钥调度

Camellia 的密钥调度与 AES 类似,采用密钥扩展方式生成每轮的子密钥。但 Camellia 使用了一个重要的优化技术:密钥调制(Key-dependent S-box switching)。

在 Camellia 中,奇数轮和偶数轮使用不同的 S 盒组合,这增加了算法的安全性,使得线性密码分析和差分密码分析的困难程度提高。密钥调度过程如下:

  • 将原始密钥分割为多个子密钥
  • 使用线性反馈移位寄存器(LFSR)生成临时值
  • 通过密钥调制函数 $FL$ 和 $FL^{-1}$ 处理
  • 最终生成所有轮子密钥
$$FL(x) = ((x >> 8) \oplus (x >> 2) \oplus (x >> 1)) \oplus x$$

$$FL^{-1}(x) = ((x << 8) \oplus (x << 2) \oplus (x << 1)) \oplus x$$

这些函数在密钥扩展过程中起到了关键作用,确保了子密钥之间的良好相关性。

三、与 AES 的技术对比

3.1 参数对比表

特性CamelliaAES
设计者NEC, 三菱电机Joan Daemen, Vincent Rijmen
分组长度128 比特128 比特
密钥长度128/192/256 比特128/192/256 比特
轮数18/24/26 轮10/12/14 轮
结构广义 Feistel + SPNSPN
S 盒两个 8×8 S 盒一个 8×8 S 盒
扩散层L 变换(移位+异或)MixColumns
密钥调度线性反馈移位寄存器XOR + S 盒 + Rcon

3.2 安全性分析

Camellia 的安全性证明与 AES 相当:

攻击类型CamelliaAES
线性密码分析最强攻击需 $2^{124}$ 次加密最强攻击需 $2^{126}$ 次加密
差分密码分析最强攻击需 $2^{123}$ 次加密最强攻击需 $2^{126}$ 次加密
相关密钥攻击已证明安全已证明安全
侧信道攻击需要防护需要防护
Camellia 的设计者声称其提供了至少与 AES 相同的安全强度。根据 NIST 的安全级别分类,Camellia-128、Camellia-192 和 Camellia-256 分别对应 AES 的 128、192 和 256 位安全级别。

3.3 性能对比

在相同硬件平台上,Camellia 与 AES 的性能表现:

平台CamelliaAES性能差距
x86-64(软件)6.2 cycles/byte5.8 cycles/byte~7% 较慢
ARM Cortex-A(软件)8.5 cycles/byte8.1 cycles/byte~5% 较慢
FPGA(软件实现)12.3 cycles/byte11.8 cycles/byte~4% 较慢
硬件加速(专用指令)1.2 cycles/byte1.0 cycles/byte~20% 较慢
结论:Camellia 与 AES 性能几乎相当,在大多数实际应用中性能差异可以忽略不计。然而,由于缺乏主流 CPU 的硬件加速指令(如 AES-NI),在通用处理器上 Camellia 的软件实现可能略慢于 AES。

3.4 设计差异的技术意义

Camellia 与 AES 的关键设计差异:

  • 结构差异:Camellia 使用广义 Feistel 结构,而 AES 使用纯 SPN 结构。这使得 Camellia 在硬件实现中具有对称优势,同时在软件实现中也能保持良好的性能。
  • S 盒数量:Camellia 使用两个 S 盒(S₁ 和 S₂),而 AES 只使用一个。这种设计提供了额外的安全边际,但增加了一定的计算开销。
  • 密钥调制:Camellia 引入了密钥依赖的 S 盒切换机制,这是 AES 所不具备的特性。这种机制增加了算法的复杂性,有助于抵抗某些类型的密码分析攻击。

四、工程应用与实现

4.1 支持的库和工具

Camellia 被广泛支持在各种密码库中:

注意:cryptography 库支持 Camellia,但在生产环境中建议使用经过验证的实现。

4.2 TLS 密码套件支持

Camellia 被定义在以下 TLS 密码套件中:

套件名称密钥交换加密算法MAC 算法
TLS_RSA_WITH_CAMELLIA_128_CBC_SHARSACamellia-128SHA1
TLS_RSA_WITH_CAMELLIA_256_CBC_SHARSACamellia-256SHA1
TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256ECDHECamellia-128SHA256
TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384ECDHECamellia-256SHA384
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256DHECamellia-128SHA256
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA384DHECamellia-256SHA384
在 TLS 1.3 中,Camellia 不再被支持(仅保留 AES-GCM 和 ChaCha20-Poly1305)。这一变化反映了现代密码学对 AEAD 模式的偏好,以及 TLS 协议对算法多样性的重新评估。

4.3 硬件加速支持

Camellia 在日本市场上的重要优势是硬件支持:

厂商芯片/平台加速特性
IntelSandy Bridge 及以后AES-NI,不支持 Camellia 加速
AMDBulldozer 及以后无 Camellia 加速指令
ARMCortex-A76 及以后无 Camellia 加速指令
NEC专用安全芯片硬件级 Camellia 加速
三菱电机嵌入式安全模块硬件级 Camellia 加速
关键点:Camellia 在通用处理器上缺乏硬件加速,但在日本企业的专用安全芯片中得到了广泛支持。这一特性使得 Camellia 在日本市场的 IoT 设备和嵌入式系统中具有独特优势。

4.4 其他应用场景

除了 TLS 之外,Camellia 还应用于以下场景:

  • 智能卡:日本的多功能 IC 卡(如 My Number Card)使用 Camellia 作为加密算法
  • 物联网设备:日本企业生产的 IoT 设备广泛支持 Camellia
  • 安全启动:部分嵌入式系统使用 Camellia 进行固件加密
  • 文件加密:某些日本文件系统使用 Camellia 进行数据加密

五、国密对照分析

5.1 Camellia 与 SM4 的设计哲学对比

维度CamelliaSM4
设计来源NEC、三菱电机(日本)中国密码管理局(中国)
设计目标与 AES 性能相当与 AES 性能相当
分组长度128 比特128 比特
密钥长度128/192/256 比特128 比特
轮数18/24/26 轮32 轮
结构广义 Feistel + SPN类似 AES 的 SPN
S 盒两个派生 S 盒一个 8×8 S 盒
标准化ISO/IEC 18033-3, RFC 3634GB/T 32907-2016, GM/T 0002-2012

5.2 安全性对比

Camellia 的安全强度:

  • 128 位密钥:提供约 128 位安全强度
  • 192 位密钥:提供约 192 位安全强度
  • 256 位密钥:提供约 256 位安全强度
SM4 的安全强度:
  • 128 位密钥:提供约 128 位安全强度
关键点:
  • Camellia 支持多种密钥长度,适用于不同安全需求场景
  • SM4 固定 128 位密钥,设计更简单,但适用范围相对受限

5.3 应用场景对比

场景Camellia 适用性SM4 适用性
国际 TLS 通信✅ 良好支持❌ 不支持
日本市场设备✅ 广泛支持❌ 不支持
中国市场设备⚠️ 部分支持✅ 强制要求
IoT 设备⚠️ 无硬件加速✅ 软件效率高
金融系统✅ 有硬件加速✅ 符合监管

5.4 互操作建议

在实际工程中,Camellia 和 SM4 通常不会在同一系统中同时使用。但如果需要互操作:

注意:这种互操作会引入额外的计算开销和安全风险,应尽量避免。

六、安全考虑与实践建议

6.1 已知安全问题

Camellia 目前没有已知的实际安全漏洞,但需要注意:

  • 侧信道攻击:与所有分组密码一样,Camellia 可能受到 timing attack、power analysis 等侧信道攻击。在生产环境中应使用经过安全认证的硬件模块。
  • 密钥管理:Camellia 支持多种密钥长度,密钥管理策略应与之匹配。建议使用 256 位密钥以提供更高的安全边际。
  • 模式选择:Camellia 推荐使用 GCM 模式或 CBC 模式配合 HMAC-SHA256。避免使用 ECB 模式。

6.2 最佳实践建议

6.3 与国密标准的适配

如果需要在国密环境中使用 Camellia(例如跨境业务):

  • 密钥派生:使用 SM9 标识密码或 SM2 密钥协商派生 Camellia 密钥
  • 消息格式:遵循 GB/T 35275-2017 或 GM/T 0010-2023 的消息格式规范
  • 认证机制:使用 HMAC-SM3 或 SM2 签名进行消息认证
这种混合使用方案在技术上是可行的,但在实际工程中应谨慎评估安全需求和合规要求。

七、总结

Camellia 作为与 AES 并驾齐驱的分组密码算法,在国际密码学界占有重要地位。其设计哲学体现了日本密码学界对"差异化竞争"的追求——不是简单复制 AES,而是通过独特的结构设计提供同样安全强度但略有差异的性能特征。

对于国密从业者而言,理解 Camellia 的意义在于:

  • 技术视野:拓宽对分组密码设计的理解,认识到同一安全目标可以有多种实现路径
  • 国际合作:在与日本企业的技术合作中,Camellia 知识是必要的沟通基础
  • 标准对照:通过与 SM4 的对比,更深入理解国密标准的设计理念和技术选择
在实际工程中,除非业务明确需要,否则应优先使用 SM4 以满足国密合规要求。Camellia 的价值更多体现在国际场景和学术研究层面。


相关实践文章

参考文献

  • Camellia Specification, NEC and Mitsubishi Electric Corporation, 2000.
  • ISO/IEC 18033-3:2013, Information technology — Security techniques — Encryption algorithms — Part 3: Block ciphers.
  • RFC 3634, "Camellia: a 128-bit Block Cipher", February 2004.
  • NESSIE Project, "Camellia algorithm specification", 2004.
  • GB/T 32907-2016, "信息安全技术 SM4 分组密码算法".
  • GM/T 0002-2012, "SM2 椭圆曲线公钥密码算法 第 1 部分:总则".
  • GM/T 0010-2023, "SM2 密码算法加密签名消息语法规范".