暗号化TEA、XTEA、XXTEA

記事の内容

  • TEA暗号化アルゴリズムの説明





  • TEAの実装





  • 重大なTEAエラーを排除し、XTEA(Block TEA)を取得します





  • XTEAの実装





  • さらに良い:XXTEA(修正されたブロックTEA)





  • 暗号化アルゴリズムの暗号分析





前書き

この記事で使用されているいくつかの定義を考えてみましょう。暗号化には、対称非対称の2つのタイプがあります





では、対称暗号化アルゴリズム、同じ鍵が暗号化データに使用され、それらをデコードします。このキーは、送信者と受信者だけが知っている必要があります。そうでない場合、攻撃者の手にあるデータは基本的に暗号化されません。知らないはずの鍵を知っている人は、暗号文を解読して、あなたが友人に店でパスタを買うように頼んだことを知ることができます。





では、非対称暗号化アルゴリズムではなく、一つのキーはすでに使用されているが、2:パブリックプライベートデータは公開鍵で暗号化され、秘密鍵でのみ復号化されます。公開鍵は誰にでも配布できますが、秘密鍵は秘密にしておく必要があります。





TEA, XTEA, XXTEA . , , , .





, , .





.





TEA

TEA a.k.a. Tiny Encryption Algorithm -- . , , .





. 64 , 32 : K_0、K_1、K_2、K_3. 64, . : 32 2 . -- . . :





\ delta = \ left(\ sqrt {5} -1 \ right)\ cdot 2 ^ {31}-- , . ,





X \ll Y-- X Y ( )





X \oplus Y-- - XOR





X \boxplus Y-- 2^{32}





n- , : \left( L_n, R_n \right), \left( L_{n+1}, R_{n+1} \right) :





: L_{n+1} = R_n





:  n = 2 \cdot i, ~~~ i \in [1; 32]  R_{n+1} = L_n \boxplus \left( \left\{  \left[ R_n \ll 4 \right] \boxplus K_2 \right\} \oplus \left\{ R_n \boxplus i \cdot \delta \right\} \oplus \left\{ \left[ R_n \gg 5 \right] \boxplus K_3 \right\} \right)





: n = 2 \cdot i - 1, ~~~ i \in [1; 32] R_{n+1} = L_n \boxplus \left( \left\{  \left[ R_n \ll 4 \right] \boxplus K_0 \right\} \oplus \left\{ R_n \boxplus i \cdot \delta \right\} \oplus \left\{ \left[ R_n \gg 5 \right] \boxplus K_1 \right\} \right)





, . :





- TEA
- TEA

TEA

, TEA . : David J. Wheeler Roger M. Needham. -- .





  • k[0], k[1], k[2], k[3] -- ,





  • v[0], v[1] -- ,





  • encode -- (true), , (false),





void tea(long* v, long* k, bool encode) {
  unsigned long y = v[0];
  unsigned long z = v[1];
  unsigned long sum = 0;
  unsigned long delta = 0x9e3779b9;
  unsigned long n = 32;
  
  if(encode) {
    
    // encoding
  
    while(n-- > 0) {
      sum += delta;
      y += ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]);
      z += ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]);
    }
  
  } else {
    
    // decoding
  
    sum = delta << 5;
  
    while(n-- > 0) {
      z -= ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]);
      y -= ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]);
      sum -= delta;
    }
  }
  
  v[0] = y;
  v[1] = z;
  
  return;
}
      
      



XTEA

TEA , , XTEA.





XTEA a.k.a. eXtended TEA -- , TEA. David J. Wheeler Roger M. Needham. TEA, 64 . , TEA , . XTEA . ( 4).





. n- n \in [1; 64] , :\left( L_n, R_n \right), \left( L_{n+1}, R_{n+1} \right) :





: L_{n+1} = R_n





: n = 2 \cdot i, ~~~ i \in [1; 32] R_{n+1} = L_n \boxplus \left( \left\{  \left[ R_n \ll 4 \oplus R_n \gg 5 \right] \boxplus R_n \right\} \oplus \left\{ i \cdot \delta \boxplus K_{\left( i \cdot \delta \gg 11 \right) \wedge 3} \right\} \right)





: n = 2 \cdot i - 1, ~~~ i \in [1; 32] R_ {n + 1} = L_n \ boxplus \ left(\ left \ {\ left [R_n \ ll 4 \ oplus R_n \ gg 5 \ right] \ boxplus R_n \ right \} \ oplus \ left \ {\ left(i --1 \ right)\ cdot \ delta \ boxplus K _ {\ left(\ left(i --1 \ right)\ cdot \ delta \ right)\ wedge 3} \ right \} \ right)





:





XTEAブロック図
- XTEA

XTEA

, David J. Wheeler Roger M. Needham . , ( ), .





  • v -- 2





  • k -- 4





  • N -- ( 32)





  • long -- 32





void xtea(long* v, long* k, long N) {
  unsigned long y = v[0];
  unsigned long z = v[1];
  unsigned long delta = 0x9e3779b9;
  
  if(N > 0) {
    
    // encoding
    
    unsigned long limit = delta * N;
    unsigned long sum = 0;
    
    while(sum != limit) {
      y += (z << 4 ^ z >> 5) + z ^ sum + k[sum & 3];
      sum += delta;
      z += (y << 4 ^ y >> 5) + y ^ sum + k[sum >> 11 & 3];
    }
    
  } else {
    
    // decoding
    
    unsigned long sum = delta * (-N);
    
    while (sum) {
      z -= (y << 4 ^ y >> 5) + y ^ sum + k[sum >> 11 & 3];
      sum -= delta;
      y -= (z << 4 ^ z >> 5) + z ^ sum + k[sum & 3];
    }
    
  }
  
  v[0] = y;
  v[1] = z;
  
  return;
}
      
      



XTEA : XTEA-1, XTEA-2, XTEA-3. . .





XXTEA

XXTEA a.k.a. Corrected Block TEA (.. XTEA Block TEA) -- , XTEA. , David J. Wheeler Roger M. Needham, . , , , :





  • ,





  • (, ), ,





  • ,





  • " ", ,





  • , , 60 , , DES





, XXTEA . , , , , . . n- :





LR . \デルタ , . ( ): K _ {\左[\左(\デルタ\ cdot n \ gg 2 \右)\ oplus n \右]〜\テキスト{mod} 〜4}. :





  • \ alpha = \ left(L \ ll 2〜 \ oplus〜R \ gg 5 \ right)\ boxplus \ left(L \ gg 3〜 \ oplus〜R \ ll 4 \ right)





  • \ beta = \ left(\ delta \ cdot n〜 \ oplus〜L \ right)\ boxplus \ left(K _ {\ left [\ left(\ delta \ cdot n \ gg 2 \ right)\ oplus n \ right]〜 \ text {mod} 〜4}〜\ oplus〜R \ right)





: \左(\ alpha〜 \ oplus〜 \ beta \ right)\ boxplus \ left(LR \ right)、~~~ LR- \ text {whole word}





-:





XXTEAブロック図
- XXTEA

XXTEA

, -- David J. Wheeler Roger M. Needham. .





  • v -- 2





  • k -- 4





  • N --





  • long -- 32





#define MX (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z)

long xxtea(long* v, long * k, long N) {
  unsigned long z = v[N - 1];
  unsigned long y = v[0];
  unsigned long sum = 0;
  unsigned long e = 0;
  unsigned long delta = 0x9e3779b9;
  
  long m = 0;
  long p = 0;
  long q = 0;
  
  if(N > 1) {
    
    // encoding
    
    q = 6 + 52 / N;
    
    while(q-- > 0) {
      sum += delta;
      e = sum >> 2 & 3;
      for(p = 0; p < N - 1; p++) {
        y = v[p + 1];
        z = v[p] += MX;
      }
      y = v[0];
      z = v[N - 1] += MX;
    }
    
    return 0;
  } else if(N < -1) {
    
    // decoding
    
    N = -N;
    q = 6 + 52 / N;
    sum = q * delta;
    
    while(sum != 0) {
      e = sum >> 2 & 3;
      for(p = N - 1; p > 0; p--) {
        z = v[p - 1];
        y = v[p] -= MX;
      }
      z = v[N - 1];
      y = v[0] -= MX;
    }
    
    return 0;
  }
  
  return 1;
}
      
      



TEA, XTEA, XXTEA

TEA . 17 2 ^ {123}. " " TEA , ( ). : , .





XTEA, , , TEA. - ( XOR) XTEA , TEA. XTEA -- .





XXTEA . E. Yarrkov 2010 XXTEA . . 212 , 6 , . E. Yarrkov , .





  • Roger M.NeedhamおよびDavidJ。Wheeler:TEA、小さな暗号化アルゴリズム





  • A.ロジャーM.ニーダムとデビッドJ.ウィーラー:TEA拡張





  • David J. Wheeler、Roger M. Needham:XTEAの修正





  • エリアス・ヤルコフ:XXTEAの暗号分析












All Articles