RC6 是什麼?
RC6(Rivest Cipher 6)由 Ronald Rivest 等人於 1998 年為 AES 競賽設計,是五位決選候選之一。它以 128 位元區塊、支援 128/192/256 位元金鑰,並引入整數乘法強化擴散,在安全性與效能間取得優異平衡。
RC6 源自 RC5 架構,保留資料相依旋轉(data-dependent rotation)的設計,並新增整數乘法運算,大幅提升非線性程度。標準規格定義為 RC6-32/20/b,代表字組寬度 32 位元、20 輪迭代、b 位元組金鑰長度。
核心運算機制
RC6 將 128 位元明文分為四個 32 位元字組(A、B、C、D),每輪依序執行以下步驟:先對 B、D 進行整數乘法與循環左移,產生旋轉量 t、u,再以 t、u 驅動 A、C 的循環移位,最後加入回合子金鑰完成混合。此「乘法驅動旋轉」機制使每輪的擴散效率遠優於純 XOR 設計。
金鑰排程採用與 RC5 相似的魔術常數展開法:以常數 P₃₂ = 0xB7E15163、Q₃₂ = 0x9E3779B9 初始化子金鑰陣列,再與原始金鑰混合擴展,共生成 2r + 4 個子金鑰(r = 20 時共 44 個)。
💡 重點整理
- 區塊與金鑰規格:128 位元區塊,支援 128/192/256 位元三種金鑰長度。
- 整數乘法創新:引入 mod 2³² 乘法產生旋轉量,非線性強度優於 RC5。
- 20 輪迭代:標準輪數提供充足安全邊際,目前無實用級全輪攻擊。
- AES 落選原因:軟體效能優秀,但硬體實作面積較 Rijndael 大,最終由 Rijndael 勝出。
以下為 RC6 單輪核心邏輯的虛擬碼示意(r = 20):
for i in 1..20:
t = (B * (2*B + 1)) <<< 5 # 整數乘法 + 循環左移
u = (D * (2*D + 1)) <<< 5
A = ((A XOR t) <<< u) + S[2*i]
C = ((C XOR u) <<< t) + S[2*i+1]
A, B, C, D = B, C, D, A # 字組輪換
RC6 雖未成為 AES 標準,但其整數乘法驅動旋轉的設計思路對後續密碼學研究影響深遠。理解 RC6 有助於掌握 Feistel 網路的變體設計與資料相依運算的安全原理。
📚 參考文獻
- Rivest, R., Sidney, M., Voszila, L.(1998). The RC6™ Block Cipher. RSA Security — AES 競賽官方提交論文,完整規格原始來源。
https://people.csail.mit.edu/rivest/pubs/RRSY98.pdf - NIST AES Competition Archive — 五位決選候選演算法評估報告。