Blowfish

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;
      }
}

参考资料

  1. ^ Vincent Rijmen. Cryptanalysis and Design of Iterated Block Ciphers. Ph.D thesis. 1997 [2015-03-16]. (原始内容 (PostScript)存档于2013-05-08). 
  2. ^ 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. 
常见加密算法
次常见加密算法
  • Camellia
  • CAST-128英语CAST-128
  • IDEA
  • RC2英语RC2
  • RC5
  • SEED英语SEED
  • Skipjack英语Skipjack
  • TEA
  • XTEA
其他加密算法
  • 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
密码标准
工作方式