Blowfish
The round function (Feistel function) of Blowfish | |
概述 | |
---|---|
设计者 | 布鲁斯·施奈尔 |
首次发布 | 1993 |
继承算法 | Twofish |
密码细节 | |
密钥长度 | 32-448位 |
分组长度 | 64位 |
结构 | 费斯妥密码 |
重复回数 | 16 |
最佳公开破解 | |
Four rounds of Blowfish are susceptible to a second-order differential attack (Rijmen, 1997);[1] for a class of weak keys, 14 rounds of Blowfish can be distinguished from a pseudorandom permutation (Vaudenay, 1996). |
Blowfish是一个對稱密鑰加密分组密码算法,由布魯斯·施奈爾於1993年设计,现已应用在多种加密产品。Blowfish算法由於分組長度太小已被認為不安全,施奈尔更建议在现代应用中使用Twofish密码。[2]
施奈爾设计的Blowfish算法用途广泛,意在替代老舊的DES及避免其他算法的問題與限制。Blowfish刚刚研发出的时候,大部分其他加密算法是专利所有的或属于商业(政府)机密,所以发展起来非常受限制。施奈爾则声明Blowfish的使用没有任何限制,任何国家任何人任何时候都可以随意使用Blowfish算法。
Blowfish主要包括关键的几个S盒和一个复杂的核心变换函数。
Blowfish的伪代码
uint32_t P[18]; uint32_t S[4][256]; uint32_t f (uint32_t x) { uint32_t h = S[0][x >> 24] + S[1][x >> 16 & 0xff]; return ( h ^ S[2][x >> 8 & 0xff] ) + S[3][x & 0xff]; } void encrypt (uint32_t & L, uint32_t & R) { for (int i=0 ; i<16 ; i += 2) { L ^= P[i]; R ^= f(L); R ^= P[i+1]; L ^= f(R); } L ^= P[16]; R ^= P[17]; swap (L, R); } void decrypt (uint32_t & L, uint32_t & R) { for (int i=16 ; i > 0 ; i -= 2) { L ^= P[i+1]; R ^= f(L); R ^= P[i]; L ^= f(R); } L ^= P[1]; R ^= P[0]; swap (L, R); } // ... // initializing the P-array and S-boxes with values derived from pi; omitted in the example // ... { for (int i=0 ; i<18 ; ++i) P[i] ^= key[i % keylen]; uint32_t L = 0, R = 0; for (int i=0 ; i<18 ; i+=2) { encrypt (L, R); P[i] = L; P[i+1] = R; } for (int i=0 ; i<4 ; ++i) for (int j=0 ; j<256; j+=2) { encrypt (L, R); S[i][j] = L; S[i][j+1] = R; } }
参考资料
- ^ Vincent Rijmen. Cryptanalysis and Design of Iterated Block Ciphers. Ph.D thesis. 1997 [2015-03-16]. (原始内容 (PostScript)存档于2013-05-08).
- ^ Dahna, McConnachie. Bruce Almighty: Schneier preaches security to Linux faithful. Computerworld: 3. 2007-12-27 [2018-01-26]. (原始内容存档于2016-12-02).
At this point, though, I'm amazed it's still being used. If people ask, I recommend Twofish instead.
- 查
- 论
- 编
- 3-Way(英语:3-Way)
- ABC(英语:ABC (cipher))
- Akelarre(英语:Akelarre (cipher))
- Anubis(英语:Anubis (cipher))
- ARIA(英语:ARIA (cipher))
- BaseKing(英语:BaseKing)
- BassOmatic(英语:BassOmatic)
- BATON(英语:BATON)
- BEAR and LION(英语:BEAR and LION ciphers)
- CAST-256(英语:CAST-256)
- CIKS-1(英语:CIKS-1)
- CIPHERUNICORN-A(英语:CIPHERUNICORN-A)
- CIPHERUNICORN-E(英语:CIPHERUNICORN-E)
- CLEFIA(英语:CLEFIA)
- CMEA(英语:Cellular Message Encryption Algorithm)
- Cobra(英语:Cobra ciphers)
- COCONUT98(英语:COCONUT98)
- Crab(英语:Crab (cipher))
- Cryptomeria/C2(英语:Cryptomeria cipher)
- CRYPTON(英语:CRYPTON (cipher))
- CS-Cipher(英语:CS-Cipher)
- DEAL(英语:DEAL)
- DES-X(英语:DES-X)
- DFC(英语:DFC (cipher))
- E2(英语:E2 (cipher))
- FEAL(英语:FEAL)
- FEA-M(英语:FEA-M)
- FROG(英语:FROG)
- G-DES(英语:GDES)
- GOST(英语:GOST (block cipher))
- Grand Cru(英语:Grand Cru (cipher))
- Hasty Pudding cipher(英语:Hasty Pudding cipher)
- Hierocrypt(英语:Hierocrypt)
- ICE(英语:ICE (cipher))
- IDEA NXT(英语:Idea NXT)
- Intel Cascade Cipher(英语:Intel Cascade Cipher)
- Iraqi(英语:Iraqi block cipher)
- KASUMI(英语:KASUMI (block cipher))
- KeeLoq(英语:KeeLoq)
- KHAZAD(英语:KHAZAD)
- Khufu and Khafre(英语:Khufu and Khafre)
- KN-Cipher(英语:KN-Cipher)
- Ladder-DES(英语:Ladder-DES)
- Libelle(英语:Libelle (cipher))
- LOKI97(英语:LOKI97)
- LOKI89/91(英语:LOKI)
- Lucifer(英语:Lucifer (cipher))
- M6(英语:M6 (cipher))
- M8(英语:M8 (cipher))
- MacGuffin(英语:MacGuffin (cipher))
- Madryga(英语:Madryga)
- MAGENTA(英语:MAGENTA)
- MARS(英语:MARS (cipher))
- Mercy(英语:Mercy (cipher))
- MESH(英语:MESH (cipher))
- MISTY1(英语:MISTY1)
- MMB(英语:MMB)
- MULTI2(英语:MULTI2)
- MultiSwap(英语:MultiSwap)
- New Data Seal(英语:New Data Seal)
- NewDES(英语:NewDES)
- Nimbus(英语:Nimbus (cipher))
- NOEKEON(英语:NOEKEON)
- NUSH(英语:NUSH)
- Q(英语:Q (cipher))
- RC6
- REDOC(英语:REDOC)
- Red Pike(英语:Red Pike (cipher))
- S-1(英语:S-1 block cipher)
- SAFER(英语:SAFER)
- SAVILLE(英语:SAVILLE)
- SC2000(英语:SC2000)
- SHACAL(英语:SHACAL)
- SHARK
- SM4
- Speck
- Spectr-H64(英语:Spectr-H64)
- Square(英语:Square (cipher))
- SXAL/MBAL(英语:SXAL/MBAL)
- Threefish(英语:Threefish)
- Treyfer(英语:Treyfer)
- UES(英语:UES (cipher))
- Xenon(英语:Xenon (cipher))
- xmx(英语:xmx)
- XXTEA
- Zodiac(英语:Zodiac (cipher))
- 穷举攻击/蛮力攻击(EFF DES破解机)
- 中途相遇攻击(Biclique攻击(英语:Biclique attack) · 三子集中途相遇攻击(英语:Biclique attack))
- 线性密码分析(英语:Linear cryptanalysis)(堆积引理(英语:Piling-up lemma))
- 差分密码分析(不可能差分密码分析(英语:Impossible differential cryptanalysis))
- 截断差分分析(英语:Truncated differential cryptanalysis)
- 高阶差分分析(英语:Higher-order differential cryptanalysis)
- 差分-线性攻击(英语:Differential-linear)
- 区分攻击(英语:Distinguishing attack)(已知密钥区分攻击(英语:Known-key distinguishing attack))
- 积分密码分析(英语:Integral cryptanalysis)
- 回力镖攻击(英语:Boomerang attack)
- 模n密码分析(英语:Mod n cryptanalysis)
- 相关密钥攻击(英语:Related-key attack)
- 滑动攻击(英语:Slide attack)
- 回旋密码分析(英语:Rotational cryptanalysis)
- 計時攻擊(英语:Timing attack)
- XSL攻击(英语:XSL attack)
- 插值攻擊
- Partitioning(英语:Partitioning cryptanalysis)
- 戴维斯攻击(英语:Davies' attack)
- 回弹攻击(英语:Rebound attack)
- 弱密钥(英语:Weak key)
- 肯德尔等级相关系数(英语:Kendall tau rank correlation coefficient)
- 卡方检验
- 时间、内存、数据取舍攻击(英语:Time/memory/data tradeoff attack)
- 高级加密标准(AES)评选过程
- CRYPTREC(英语:CRYPTREC)
- NESSIE(英语:NESSIE)