²é¿´: 615  |  »Ø¸´: 1
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

[½»Á÷] [תÌù]Twofish¼ÓÃÜËã·¨Ïê½â

CONTENT: Õ⼸Ìì·ÖÎöÒ»Èí¼þ£¬·¢ÏÖÆäÐòÁкÅÓõ½ÁËTwofish ¼ÓÃÜËã·¨£¬ÉÏÍøÕÒÁ˺ܾÃ
         ¶¼Ã»ÓÐÕÒµ½ÏàÓ¦µÄÖÐÎÄ×ÊÁÏ£¬ÓÚÊǾö¶¨µÈÎÒÑо¿Ã÷°×Ö®ºóдһƪÎĵµ£¬ÒÔ±ã
         ¸ø½ñºóÐèҪʹÓÃTwofish µÄÈËÒԲο¼£¬ÏÂÃæ½øÈëÕýÌâ¡£

             Ê×ÏȽéÉÜÒ»ÏÂTwofish µÄÀúÊ·£¬Èç¹ûÄúÖ»ÏëÁ˽âÈçºÎÔËÓôËËã·¨£¬ÇëÖ±
         ½ÓÌøµ½ÏÂÒ»¶Î¡£ÔÚ1972µ½1974ÄêÖУ¬National Bureau of Standards (ÏÖÔÚ
         ¸üÃûΪNational Institute of Standards and Tecnology£¬ËõдΪNIST)Ê×
         ´Î¹«¿ªÕ÷ÇóÒ»ÖÖ±ê×¼µÄÊý¾Ý¼ÓÃÜËã·¨£¬½á¹û²úÉúÁË DES ( Data Encryption
         Standard) ¼ÓÃÜËã·¨¡£µ«DES µÄÃÜÔ¿³¤¶È¶ÔÓÚÏÖÔÚ¼ÆËã»úµÄÔËÐÐËÙ¶ÈÀ´Ëµ£¬
         ÔÚijЩ¸ß»úÃܵij¡ºÏÏÔµÃÓе㲻×㣬ÒѾ­²»ÔÙ°²È«¡£ËùÒÔ1999ÄêNIST¾ö¶¨²É
         ÓÃÒ»ÖÖ¸ü¸ß±ê×¼µÄ¼ÓÃÜËã·¨AES (Advanced Encryption Standard)À´´úÌæÔ­
         À´µÄDES¡£Ê×ÏÈÕâÖÖ¼ÓÃÜËã·¨±ØÐëÊÇ¿é¼ÓÃÜ (block cipher)£¬ÒòΪ¿é¼ÓÃÜ¿É
         ÒÔ±»ÓÃÀ´¶ÔÊý¾ÝÁ÷½øÐмÓÃÜ£¬Ò²¿ÉÒÔ±»ÓÃÀ´ÖÆÔìһЩרÓõÄÊý¾Ý¼ÓÃÜÉ豸¡£
         Æä´Î£¬ÕâÖÖ¼ÓÃÜËã·¨±ØÐëʹÓøü³¤µÄÃÜÔ¿£¬¸ü´óµÄ¼ÓÃܿ飬¸ü¸ßµÄ¼ÓÃÜËÙ¶È£¬
         ¸ü¸ßµÄÁé»îÐÔ¡£Twofish ÔòÊÇcounterpane ¹«Ë¾ÏòNISTÌá½»µÄÒ»ÖÖÂú×ãAES
         ÒªÇóµÄ¼ÓÃÜËã·¨¡£Twofish ²ÉÓÃ128λÊý¾Ý¿é(128 bits block)£¬128- 192-
         256-bit ¿É±ä³¤¶ÈÃÜÔ¿¡£Twofish Ëã·¨ÊǽøÈëNISTµÚ¶þÂÖ 5ÖÖ¼ÓÃÜËã·¨ÖеÄ
         Ò»ÖÖ¡£ÏÂÃæ·Ö²½Ïêϸ½²½âÈçºÎʹÓÃTwofish ¼ÓÃÜËã·¨¡£

             ÏÖÔÚÍøÉÏÄÜÕÒµ½µÄ´ó²¿·ÖTwofish µÄÔ´³ÌÐò¶¼ÊÇÍâ¹úÈËдµÄ£¬»¹¿ÉÒÔÕÒ
         µ½ÓÐһЩ Twofish SDK¡£µ«ËüÃÇÆÕ±é´úÂëÅÓ´ó£¬Ê¹ÓÃÆðÀ´¶¼²»Ì«·½±ã£¬²»Èç
         ¸ù¾Ý×Ô¼ºµÄÐèÒª£¬×Ô¼ºÐ´Ò»¸ö´úÂë¡£ÎÒдÁËÒ»¸ö¿ÉÒÔÓÃTwofish ½øÐмÓÃܽâ
         ÃܵĴúÂ룬²Å²»¹ý 400ÐУ¬ËùÒÔÔÚ¿´ÏÂÃæµÄÎÄÕÂ֮ǰ£¬ÄãÊ×ÏÈÒª¶Ô×Ô¼ºÓÐÐÅ
         ÐÄ£¬ÒòΪÆäÖÐÓõ½ÁËһЩÊýѧ֪ʶ¡£ÄãÒ²¿ÉÒԲο¼Twofish µÄ¹Ù·½Îĵµ£º

         http://www.counterpane.com/twofish.html

         ÆäÖÐ paper-twofish-paper.pdf ÓÐ 68Ò³£¬È«Ó¢ÎÄ£¬»¹²»Èç¿´ÎÒÕâÆªÎÄÕÂÀ´
         µÄ¿ì£¬ºÇºÇ£¬²»¹ýÄã¿ÉÒÔ°ÑËüÓë±¾ÎÄ»¥Ïà²ÎÕÕ×Å¿´¡£

             Twofish ¼ÓÃÜËã·¨µÄÁ÷³ÌͼÈçÏ£º

         ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
         ©¦                          P (128 bits)                        ©¦
         ©¸©Ð©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©Ð©¼
           ©¦      ©¦                                          ©¦      ©¦
           ¡Ñ¡ûK0  ¡Ñ¡ûK1      <- input whitening ->       K2¡ú¡Ñ  K3¡ú¡Ñ
           ©¦      ©¦                                          ©¦      ©¦
           ©¦      ©¦©°©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©´  ©¦      ©¦
           ©¦      ©¦©ªF                                   ©ª  ©¦      ©¦
           ©¦      ©¦©ª©°©¨©¨©¨©¨©¨©¨©¨©¨©¨©´              ©ª  ©¦   <<1©¦
           ©¦      ©¦©ª©ªg                 ©ª       K(2r+8)©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª            ©°©¤©´©ª            ©¦©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª  ©°S-box0->©¦  ©¦©ª©°©¨©¨©¨©´  ©¦©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª  ©ÀS-box1->©¦M ©¦©ª©ª  PHT ©ª  ¡ý©ª  ¡ý      ©¦
           ©À©¤©¤©¤©à©à©à¡ú©¦        ©¦D ©À©à©à¡ú¡Ñ©Ð©à¡ú¡Ñ©à¡ú¡Ñ      ©¦
           ©¦      ©¦©ª©ª  ©ÀS-box2->©¦S ©¦©ª©ª  ¡ü©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª  ©¸S-box3->©¦  ©¦©ª©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª            ©¸©¤©¼©ª©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©¸©¨©¨©¨©¨©¨©¨©¨©¨©¨©¼©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©°©¨©¨©¨©¨©¨©¨©¨©¨©¨©´©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©ªg                 ©ª©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª            ©°©¤©´©ª©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª  ©°S-box0->©¦  ©¦©ª©ª  ©¦©¦©ª    ©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª  ©ÀS-box1->©¦M ©¦©ª©ª  ©¦©¦©ª    ©ª  ©¦      ¡ý
           ©¦   <<8©À©à©à¡ú©¦        ©¦D ©À©à©à©¤©Ø¡Ñ©à¡ú¡Ñ©à©¤©à©¤©¤¡ú¡Ñ
           ©¦      ©¦©ª©ª  ©ÀS-box2->©¦S ©¦©ª©ª      ©ª  ¡ü©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª  ©¸S-box3->©¦  ©¦©ª©¸©¨©¨©¨©¼  ©¦©ª  ©¦      ©¦
           ©¦      ©¦©ª©ª            ©¸©¤©¼©ª            ©¦©ª  ©¦      ©¦
           ©¦      ©¦©ª©¸©¨©¨©¨©¨©¨©¨©¨©¨©¨©¼       K(2r+9)©ª  ©¦      ©¦
           ©¦      ©¦©¸©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¨©¼  ©¦>>1   ©¦
           ©¦      ©¦                                          ©¦      ©¦
           ©¦      ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©´    ©°©¤©¤©¤©¤©¤©¤©¤©¤©¼      ©¦
           ©¦                           ¨v  ¨u                         ©¦
           ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´ ¨w ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼
                                        ¨w  ¨w
           ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼ ¨w ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
           ©¦      ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©´      ©¦

           ...     ...              15 more rounds             ...     ...

           ©¦      ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©´    ©°©¤©¤©¤©¤©¤©¤©¤©¤©¼      ©¦
           ©¦                           ¨v  ¨u                         ©¦
           ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´ ¨w ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼
                                        ¨w  ¨w
           ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼ ¨w ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
           ©¦      ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©´      ©¦
           ¡ý      ¡ý                                          ¡ý      ¡ý
           ¡Ñ¡ûK4  ¡Ñ¡ûK5      <- output whitening ->      K6¡ú¡Ñ  ¡úK7¡Ñ
           ¡ý      ¡ý                                          ¡ý      ¡ý
         ©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
         ©¦                          C (128 bits)                        ©¦
         ©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼

             ÔõôÑù£¿¿´ÍêÖ®ºóÓеãÔÎÁ˰ɣ¿ÀïÃæÓкܶàÓ¢ÎĵÄÊõÓÎÒ²»ÖªµÀ¶ÔÓ¦
         µÄÖÐÎÄÔõô˵£¬ËùÒÔË÷ÐÔÏÂÃæµÄÊõÓï¾ÍÖ±½Ó¶¼ÓÃÓ¢ÎĵĺÃÁË¡£ÔÚ½²½âÿһ²½
         ¾ßÌåÈçºÎ¼ÆËã֮ǰÎÒÃÇÏÈ×öһЩ׼±¸¹¤×÷£¬ËµÃ÷Ò»ÏÂÆäÖÐ×Öĸ¸÷´ú±íʲô¡£
         ÆäÖпªÊ¼´¦ P(plain text)±íʾÐèÒª½øÐмÓÃÜµÄ 128-bitÊý¾Ý£¬Ò²¼´16×Ö½Ú¡£
         È»ºó½«Õâ16×Ö½Ú·ÖΪ 4×飬ÿ×é32-bit£¬¼´ 4×Ö½Ú¡£ÔÚÑ­»·Ö®Ç°Ê×ÏȶÔÕâ 4
         ×éÊý¾Ý·Ö±ðÓÃK0 K1 K2 K3½øÐÐÒì»ò²Ù×÷£¬³ÆÖ®Îªinput whitening£¬È»ºó¶Ô
         Òì»òºóµÄÊý¾Ý·Ö×é½øÐмÆËã¡£¼ÆËãºó½« 1-3 2-4×éµÄÊý¾Ý¶Ô»»£¬Èç´ËÑ­»·15
         ´Î£¬ÔÙ 1-3 2-4¶Ô»»Ò»´Î¡£¶ÔÕâ 4×éÊý¾Ý·Ö±ðÓà K4 K5 K6 K7Òì»ò²Ù×÷£¬³Æ
         Ö®Îª output whitening¡£×îºó½«Õâ 4×éÊý¾Ý×éºÏ³É 16×Ö½ÚµÄÊý¾Ý£¬Ò²¾ÍÊÇ
         ×îºóµÄÃÜÎÄ C(cipher text)£¬³¤¶È¸ú¼ÓÃÜǰµÄ PͬÑùÊÇ128-bit¡£ÏÂÃæÏêϸ
         ËµÃ÷ÿһ¼ÆËã²½Öè¡£

         1.¼ÆËãǰµÄ×¼±¸¹¤×÷

             ¼ÓÃÜǰµÄplain textÊÇ128 bits£¬Ò²¾ÍÊÇ16 bytes¡£¼ÙÉèÕâ16 bytes·Ö
         ±ðÊÇp0, ... ,p15¡£ÓÃlittle-endian conversion (Èç¹ûÄã²»Ã÷°×£¬¿ÉÒÔ²Î
         ¿´ÎÒµÄblogÖеĵÄһƪÏà¹ØÎÄÕÂ)£¬½«p0, ... ,p15·ÖΪ 4×飺

             P(i) = ¡Æp(4i+j)2^(8j)£¬ÆäÖÐi,j = 0, ... ,3

         2.Input whitening

             R(0,i) = P(i) xor K(i)£¬ÆäÖÐi = 0, ... ,3

             ÕâÀïµÄK(i)ÊǸú¾ÝÃÜÔ¿Ëã³öÀ´µÄ32-bitÊý¾Ý£¬¼ÆËã·½·¨ºóÃæ½éÉÜ¡£
         3.16´ÎÑ­»·

             ÔÚ16´ÎÑ­»·µÄÿһ´ÎÖУ¬ 4×éÊý¾ÝµÄǰÁ½×éÓ뵱ǰѭ»·´ÎÊýͨ¹ý F½øÐÐ
         ¼ÆË㣬¼ÆËã³ö 2×éÊý¾Ý¡£µÚ 3×éÊý¾ÝÓë¼ÆËã³öµÄµÚ 1×éÊý¾ÝÒì»ò£¬È»ºóÏòÓÒ
         Ñ­»·Òƶ¯Ò»Î»¡£µÚ 4×éÊý¾ÝÏò×óÑ­»·Òƶ¯Ò»Î»£¬È»ºóÒì»ò¼ÆËã³öµÄµÚ 2×éÊý
         ¾Ý¡£È»ºó½« 1-3 2-4×éÊý¾Ý¶Ô»»£¬×÷ΪÏÂÒ»ÂÖ¼ÆËãµÄÊý¾Ý¡£³ÌÐò±íʾÈçÏ£º

             (F(r,0), F(r,1)) = F(R(r,0), R(r,1), r)
                     R(r+1,0) = ROR(R(r,2) xor F(r,0), 1)
                     R(r+1,1) = ROL(R(r,3), 1) xor F(r,1)
                     R(r+1,2) = R(r,0)
                     R(r+1,3) = R(r,1)

         4.Output whitening

             C(i) = R(16,(i+2) mod 4) xor K(i+4)£¬ÆäÖÐi = 0, ... ,3

             ÕâÀïµÄK(i+4)ͬÑùÊǸù¾ÝÃÜÔ¿¼ÆËã³öÀ´µÄ32-bitÊý¾Ý£¬Ä¿Ç°ÎªÖ¹×ܹ²ÓÐ

             K(i) i = 0, ... ,7

         5.¼ÆËãºó×é³ÉÃÜÎÄ

             c(i) = [C(i/4) / 2^(8(i mod 4))] mod 2^8£¬ÆäÖÐi = 0, ... ,15

             ÕâÑù£¬128-bitµÄC¾Í¼ÆËã³öÀ´ÁË¡£
         Ç°ÃæµÄK(i)ºÍº¯Êý F»¹Ã»ÓÐ˵Ã÷£¬ÏÂÃæÏȽéÉܺ¯Êý F¡£

         1. The Function F

             (F0, F1) = F(R0, R1, r)

             ÆäÖвÎÊýR0, R1ÊÇ32-bit Êý¾Ý£¬r±íʾµ±Ç°Ñ­»·µÄ´ÎÊý£¬T0£¬T1ÊǼÆËã
         ³öµÄ½á¹û£¬Í¬Ñù¶¼ÊÇ32-bit µÄÊý¾Ý¡£

             T0 = g(R0)
             T1 = g(ROL(R1, 8))
             F0 = (T0 +  T1 + K(2r+8)) mod 2^32
             F1 = (T0 + 2T1 + K(2r+9)) mod 2^32

         ÆäÖкóÁ½²½¼ÆËã±»³ÆÎª PHT(Pseudo-Hadamard Transforms)¡£
         ÕâÀïK(i) i = 8, ... 39£¬¼ÓÉÏÇ°ÃæµÄi = 0, ... ,7£¬ËùÒÔ×ܹ²ÓÐ40¸öK

             K(i) i = 0, ... ,39

         ÎÒÃÇÈÔÈ»ÏȲ»½²ÈçºÎ¼ÆËãK£¬¶øÏȽéÉܺ¯Êý g¡£

         2. The Function g

             Z = g(X)

             º¯Êý gÊÇTwofish Ëã·¨µÄºËÐÄ£¬Ò²ÊDZȽÏÄÑÀí½âµÄÒ»²¿·Ö¡£ÆäÖвÎÊý X
         Óë¼ÆËã½á¹û Z¶¼ÊÇ32-bitµÄÊý¾Ý¡£

             x(i) = [X/2^(8i)] mod 2^8£¬ÆäÖÐi = 0, ... ,3
             y(i) = s(i)(x(i))        £¬ÆäÖÐi = 0, ... ,3
             ©°  ©´  ©°   ©´  ©°  ©´
             ©¦z0©¦  ©¦   ©¦  ©¦y0©¦
             ©¦z1©¦= ©¦MDS©¦¡¤©¦y1©¦
             ©¦z2©¦  ©¦   ©¦  ©¦y2©¦
             ©¦z3©¦  ©¦   ©¦  ©¦y3©¦
             ©¸  ©¼  ©¸   ©¼  ©¸  ©¼
             Z = ¡Æz(i)2^(8i)£¬ÆäÖÐi = 0, ... ,3

             Ê×ÏȽ«32-bitµÄ²ÎÊý X·ÖΪ 4¸ö×Ö½Úx0, ... ,x4£¬È»ºóÿһ¸öx(i) ·Ö
         ±ð½øÈë×Ô¼ºµÄS-box£¬ÆäÖÐÿһ¸öS-box ¶¼ÊÇ8-bitÊäÈ룬 8-bitÊä³ö¡£ÕâÑù
         ¼ÆËã³öÀ´µÄ y(i)ÈÔÈ»ÊÇ 8-bit£¬×é³ÉÒ»¸ö4 * 1µÄÁÐÏòÁ¿£¬Õâ¸öÏòÁ¿Ó붨Òå
         ÔÚGF(2^8)ÉϵÄ4*4 MDS¾ØÕóÏà³Ë£¬µÃµ½ 4*1µÄÁÐÏòÁ¿¡£×îºó½«Õâ¸öÁÐÏòÁ¿ÖÐ
         µÄËĸöÔªËØ×é³É32-bitÊý¾Ý Z¡£ÆäÖÐ MDS¾ØÕóΪ£º

                   ©°           ©´
                   ©¦01 EF 5B 5B©¦
             MDS = ©¦5B EF EF 01©¦
                   ©¦EF 5B 01 EF©¦
                   ©¦EF 01 EF 5B©¦
                   ©¸           ©¼

         ÎªÁËÊý¾ÝµÄ¼ÆË㣬»¹±ØÐëÃ÷È·¶¨ÒåGF£¬¶ÔÓÚMDS ¾ØÕó£¬GFµÄ¶¨ÒåÈçÏ£º

             GF(2^8) ¡Ô GF(2)(x)/v(x)£¬ÆäÖÐv(x) = x^8 + x^6 + x^5 + x^3 + 1

         ÓÖ²»Ì«Ã÷°×Á˰ɣ¿ÉÏÃæ²»Ì«ÈÝÒ×Àí½âµÄµØ·½ÓÐÁ½´¦£¬Ò»¸öÊÇ S-boxes£¬Ò»¸ö
         ÊÇÔÚÓÐÏÞÓòGFÉÏÈçºÎ½øÐмÆËã¡£¶ÔÓÚǰһ¸öÎÊÌ⣬ÎÒÃǽ«»áÔÚÏÂÃæ½øÐнéÉÜ£¬
         ¶ÔÓÚºóÒ»¸öÎÊÌ⣬ÎÒ½«»áרÃÅдһƪÔÚÓÐÏÞÓòÉϽøÐмÆËãµÄÎÄÕ£¬Èç¹ûÄã¸Ð
         ÐËȤ¿ÉÒÔÈ¥ÎÒµÄblog¡£

             ÎÒÃÇÔÙ×ܽáһϰɣ¬Ä¿Ç°»¹ÓÐÄÄЩÎÊÌâûÓнâ¾ö£º

             K(i)£¬i = 0, ... ,39

             s(i)()£¬i = 0, ... ,3

         ÒÔÉÏÕâÁ½×éÊý¾Ý¶¼ÊÇͨ¹ýÃÜÔ¿¼ÆËã³öÀ´µÄ (key-dependent)£¬ËùÒÔÏÂÃæÎÒÃÇ
         ¸Ã½éÉÜÒ»ÏÂÃÜÔ¿ÁË¡£

         3. The Key Schedual

             ÔÚÕâÒ»²¿·Ö£¬ÎÒÃÇÐèÒª²úÉú40 ¸öÓëÃÜÔ¿Ïà¹ØµÄK(i)£¬ºÍ4¸öÓëÃÜÔ¿Ïà¹Ø
         µÄ£¬ÔÚº¯Êý gÖÐʹÓõ½µÄ S-box£¬Ò²¾ÍÊÇs(i)()¡£

             ÔÚTwofish Ëã·¨ÖУ¬¹æ¶¨ÃÜÔ¿µÄ³¤¶È N = 128, N = 192, N = 256ÈýÖÖ¡£
         Ò²¾ÍÊÇ˵ÃÜÔ¿µÄ³¤¶È¿ÉÒÔÔÚ128-bit ~ 256-bitÖ®¼ä±ä»¯¡£

             ÎÒÃÇ¼Ç k = N / 64 (Ôòk = 2, 3, 4)£¬ÄÇôÃÜÔ¿ MÒ²¾ÍÓÉ 8k¸ö×Ö½Ú×é
         ³É¡£ÎÒÃǼÇÕâ 8k¸ö×Ö½ÚΪ£º

             m0, ... ,m(8k-1)

         Ê×ÏȽ«Õâ 8k ¸ö×Ö½Úת»»³É 2k ¸ö 32-bit µÄÊý¾Ý£º

             M(i) = ¡Æm(4i+j)2^(8j)£¬ÆäÖÐj = 0, ... ,3£¬i = 0, ... ,2k-1

         È»ºóÓÉÕâ 2k ¸ö32-bit Êý¾Ý¹¹³ÉÁ½¸ö kάµÄÏòÁ¿£º

             Me = (M0, M2, ... ,M(2k-2))
             Mo = (M1, M3, ... ,M(2k-1))

         ÏÂÃæÔÙÀûÓÃm(i)²úÉúÒ»¸ö kάµÄÏòÁ¿£º

             ©°      ©´  ©° ©´  ©°       ©´
             ©¦s(i,0)©¦  ©¦ ©¦  ©¦m(8i)  ©¦
             ©¦s(i,1)©¦= ©¦R©¦¡¤©¦m(8i+1)©¦
             ©¦s(i,2)©¦  ©¦S©¦  ©¦ ......©¦
             ©¦s(i,3)©¦  ©¦ ©¦  ©¦m(8i+7)©¦
             ©¸      ©¼  ©¸ ©¼  ©¸       ©¼

         ÆäÖÐRSÊǶ¨ÒåÔÚGF(2^8)µÄ 4*8½×¾ØÕ󡣼ǣº

             S(i) = ¡Æs(i,j)2^(8j)£¬ÆäÖÐj = 0, ... ,3£¬i = 0, ... ,k-1

         ÕâÑù¾ÍÓвúÉúÁËÒ»¸ö kάÏòÁ¿£º

             S = (S(k-1), S(k-2), ... ,S0)

         ×¢Ò⣬ÕâÀï SÊÇÓÉS(i)·´Ðò×é³ÉµÄ¡£¶ÔÓÚRS¾ØÕó£¬ÎÒÃÇͬÑùÐèÒªÃ÷È·¶¨ÒåÓÐ
         ÏÞÓòGF(2^8)¡£ÔÚÕâÀ

             GF(2^8) ¡Ô GF(2)[x]/w(x)£¬ÆäÖÐw(x) = x^8 + x^6 + x^3 + x^2 + 1

                  ©°                       ©´
                  ©¦01 A4 55 87 5A 58 DB 9E©¦
             RS = ©¦A4 56 82 F3 1E C6 68 E5©¦
                  ©¦02 A1 FC C1 47 AE 3D 19©¦
                  ©¦A4 55 87 5A 58 DB 9E 03©¦
                  ©¸                       ©¼

         ÕâÀﶨÒåµÄMe Mo S¹¹³ÉÁË key schedualµÄ»ù´¡¡£

[ Last edited by sdlj8051 on 2006-10-6 at 12:45 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

3.1 Additional Key Lengths

             ÕâÀï½éÉÜÒ»ÏÂÃÜÔ¿³¤¶ÈµÄÎÊÌâ¡£ÃÜÔ¿³¤¶È±ØÐëÊÇСÓÚ256 bitsµÄ£¬Èç¹û
         ÃÜÔ¿³¤¶È²»×ãÉÏÃæ¸ø¶¡µÄ N£¬ÄÇôÔÚÃÜÔ¿ºóÃæ²¹Á㣬ֱµ½×î½Ó½üµÄ NΪֹ¡£
         ÀýÈçÃÜÔ¿³¤¶ÈÊÇ80-bit£¬ÔòÔÚm0, ... ,m9ºóÃæ¼ÓÉÏ£º

             m(i) = 0£¬i = 10, ... ,15

         ÕâÑù¾Í¹¹³ÉÁËÒ»¸ö128-bitµÄÃÜÔ¿¡£

         3.2 The Function h

             ÄãÒ»¶¨¾õµÃÆæ¹Ö£¬ÔõôͻȻÓгöÀ´¸ö hº¯Êý£¬ÉÏÃæÃ÷Ã÷ûÓÐÓöµ½°¡£¿£¡
         ºÇºÇ£¬ÉÏÃæÊÇûÓÐÓöµ½£¬²»¹ýÏÂÃæ¾Í¿ìÓõ½ÁË£¬¶øÇÒÕâ¸öº¯ÊýºÜÖØÒª¡£

             Z = h(X, L)

         ÆäÖÐX, ZÊÇ32-bitµÄÊý¾Ý£¬L = L(L0, ... ,L(k-1))ÊÇÒ»¸ö kάµÄÏòÁ¿¡£
         Ê×ÏÈÎÒÃÇ»¹Êǽ«X, L·Ö³É×Ö½Ú£º

             l(i,j) = [L(i)/2^(8j)] mod 2^8    i = 0, ... ,k-1
               x(j) = [X/2^(8j)] mod 2^8       j = 0, ... ,3

         ÎÒÃǼǣº

             y(k,j) = x(j)                     j = 0, ... ,3

         Èç¹û£ºk == 4

             y(3,0) = q1[y(4,0)] xor l(3,0)
             y(3,1) = q0[y(4,1)] xor l(3,1)
             y(3,2) = q0[y(4,2)] xor l(3,2)
             y(3,3) = q1[y(4,3)] xor l(3,3)

         Èç¹û£ºk >= 3

             y(2,0) = q1[y(3,0)] xor l(2,0)
             y(2,1) = q1[y(3,1)] xor l(2,1)
             y(2,2) = q0[y(3,2)] xor l(2,2)
             y(2,3) = q0[y(3,3)] xor l(3,3)

         ¶ÔÓÚËùÓÐÇé¿ö£º

             y0 = q1[q0[q0[y(2,0)] xor l(1,0)] xor l(0,0)]
             y1 = q0[q0[q1[y(2,1)] xor l(1,1)] xor l(0,1)]
             y2 = q1[q1[q0[y(2,2)] xor l(1,2)] xor l(0,2)]
             y3 = q0[q1[q1[y(2,3)] xor l(1,3)] xor l(0,3)]

         Ò²¾ÍÊÇ˵£¬Èç¹ûk==4£¬ÄÇôÉÏÃæ 3ÖÖÇé¿ö¶¼Òª×ö£»Èç¹ûk==3£¬ÄÇôֻ×öºóÁ½
         ÖÖÇé¿ö£»Èç¹ûk==2£¬ÔòÖ»¼ÆËã×îºóÕâÖÖÇé¿ö¡£

             ©°  ©´  ©°   ©´  ©°  ©´
             ©¦z0©¦  ©¦   ©¦  ©¦y0©¦
             ©¦z1©¦= ©¦MDS©¦¡¤©¦y1©¦
             ©¦z2©¦  ©¦   ©¦  ©¦y2©¦
             ©¦z3©¦  ©¦   ©¦  ©¦y3©¦
             ©¸  ©¼  ©¸   ©¼  ©¸  ©¼

              Z = ¡Æz(i)2^(8i)£¬ÆäÖÐi = 0, ... ,3

         ×îºóµÄ¾ØÕó³Ë·¨Í¬ÑùÓöµ½ MDS¾ØÕó£¬GF(2^8)µÄ¶¨Òå¸úÇ°ÃæÒ»Ñù¡£
         h º¯Êý½²ÍêÁË£¬µ«ÆäÖÐÓÖ¶à³öÀ´¸öq0 q1£¬ËüÃÇͬÑùÊÇS-boxes£¬¹ýÒ»»áÎÒÃÇ
         ÔÙ½²ÈçºÎ¼ÆËãq0 q1£¬ÏÂÃæ¿ªÊ¼½éÉÜÈçºÎ¼ÆËãS-boxesÓëK(i)¡£

         3.3 The Key-dependent S-boxes

             ÎÒÃÇÓÃÏÂÃæµÄÓ³ÉäÀ´¶¨Òå gÖÐʹÓõ½µÄ 4¸öS-boxes£º

             g(X) = h(X, S)

             ÆäÖÐS ÊÇÉÏÃæ¼ÆËã³öÀ´µÄ kάÏòÁ¿¡£
             ÕâÑùg ÖгöÏÖµÄs(i)()¾Í¿ÉÒÔÓÃh(X, S)À´½â¾öÁË¡£

         3.4 The Expanded Key Words K(i)

             ÏÂÃæ½éÉÜÈçºÎ¼ÆËãK(i)£º

                   p = 2^24 + 2^16 + 2^8 + 2^0
                A(i) = h(2ip, Me)
                B(i) = ROL(h((2i+1)p, Mo), 8)
               K(2i) = (A(i) + B(i)) mod 2^32
             K(2i+1) = ROL((A(i) + 2B(i)) mod 2^32, 9)

             ÕâÀï i = 0, ... ,19

         3.5 The Permutations q0 and q1

             q0 q1ÊÇÓÐ256¸öÔªËØµÄÊý×飬Êý×éÖеÄÔªËØÊÇ 8-bitµÄ¡£ËüÃǵĹ¹³É·½

         ·¨ÈçÏ£º

             a0, b0 = [x/16], x mod 16
                 a1 = a0 xor b0
                 b1 = a0 xor ROR(b0, 1) xor 8a0 mod 16
             a2, b2 = t0[a1], t1[b1]
                 a3 = a2 xor b2
                 b3 = a2 xor ROR(b2, 1) xor 8a2 mod 16
             a4, b4 = t2[a3], t3[b3]
                  y = 16b4 + a4

         ÕâÀïa(i) b(i)¶¼ÊÇ4-bitµÄ£¬ÆäÖеÄRORÔËËãÒ²ÊÇ4-bitµÄ¡£ÕâÑùÀûÓÃÉÏÃæµÄ
         ¹«Ê½£¬¾Í½«Ò»¸ö16-bitµÄx Ó³Éäµ½Ò»¸ö16-bitµÄ y£¬ÎÒÃǰѵ±x = i µÄʱºò
         yµÄÖµ¶¨ÒåΪq£¬ÕâÑùµ±x = 0, ... 255ʱ£¬Ò²¾ÍÇó³öÁËqÖеÄ256¸öÔª
         ËØ¡£¶ÔÓÚq0 q1£¬ÉÏÊö¹«Ê½ÖеÄt0 t1 t2 t3·Ö±ð¶¨ÒåÈçÏ£º

         ¶ÔÓÚq0£º

             t0 = [8 1 7 D 6 F 3 2 0 B 5 9 E C A 4]
             t1 = [E C B 8 1 2 3 5 F 4 A 6 7 0 9 D]
             t2 = [B A 5 E 6 D 9 0 C 8 F 3 2 4 7 1]
             t3 = [D 7 F 4 1 2 6 E 9 B 3 0 8 5 C A]

         ¶ÔÓÚq1£º

             t0 = [2 8 B D F 7 6 E 3 1 9 4 0 A C 5]
             t1 = [1 E 2 B 4 C 3 7 6 D A 5 F 9 0 8]
             t2 = [4 C 7 5 1 6 9 A 0 E D 8 2 B 3 F]
             t3 = [B 9 5 1 C 3 D E 6 4 7 F 2 0 8 A]

         ÕâÑù£¬Twofish Ëã·¨µÄÈ«²¿¼ÆËã¹ý³ÌÎҾͽ²ÍêÁË£¬ÆäÖÐ˵µÄ²»¹»ÏêϸµÄµØ·½
         ´ó¼Ò¿ÉÒԲο´¹Ù·½µÄÎĵµ£¬»òÕßÍøÉÏÏÂÔØµÄÔ´³ÌÐò¡£ÕâÆªÎÄÕÂÖÐÓм¸´¦Ã»ÓÐ

         Ïêϸ˵Ã÷£º

         1.ÈçºÎ¸ù¾Ý¶¨Òåg(X) = h(X, S)Çó³öÏàÓ¦µÄS-boxes
         2.ÈçºÎÔÚÓÐÏÞÓòGF(2^8)ÉϽøÐоØÕóÔËËã

             ÆäʵÉÏÃæÕâÁ½¸öÎÊÌâ¶¼ÊǹØÓÚÓÐÏÞÓò(finite field)µÄ£¬Èç¹ûÖ±½Ó°´ÕÕ
         ¶¨ÒåÈ¥¼ÆË㣬ÔËËã¹ý³ÌÊ®·Ö¸´ÔÓ¡£µ« MDSÓë RS ¾ØÕó¶¼Óи÷×ÔµÄÌØµã£¬ËùÒÔ
         ÔÚд³ÌÐòµÄʱºò¿ÉÒÔ½«ÔËË㻯¼ò¡£
2Â¥2006-08-23 15:46:57
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sdlj8051 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 086003ʳƷ¹¤³ÌÇóµ÷¼Á +4 íµíµ111 2026-03-24 4/200 2026-03-24 11:53 by 544594351
[¿¼ÑÐ] ²ÄÁϵ÷¼Á +5 Æ¥¿Ëi 2026-03-23 5/250 2026-03-24 08:50 by dick_runner
[¿¼ÑÐ] Çóµ÷¼Á +7 Ê®Èý¼ÓÓÍ 2026-03-21 7/350 2026-03-23 23:48 by ÈÈÇéɳĮ
[¿¼ÑÐ] 291Çóµ÷¼Á +8 hhhhxn.. 2026-03-23 8/400 2026-03-23 23:15 by peike
[¿¼ÑÐ] 384Çóµ÷¼Á +3 ×Óϵ²© 2026-03-22 6/300 2026-03-23 21:45 by ×Óϵ²©
[¿¼ÑÐ] 070300»¯Ñ§Çóµ÷¼Á +8 Ô·¶¹¶¹ 2026-03-20 8/400 2026-03-23 20:57 by baobaoye
[¿¼ÑÐ] 280·ÖÇóµ÷¼Á Ò»Ö¾Ô¸085802 +4 PUMPT 2026-03-22 7/350 2026-03-22 22:13 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] ÉúÎïѧ071000 329·ÖÇóµ÷¼Á +5 ÎÒ°®ÉúÎïÉúÎﰮΠ2026-03-17 5/250 2026-03-22 16:42 by tcx007
[¿¼ÑÐ] Ò»Ö¾Ô¸±±¾©»¯¹¤´óѧ070300 ѧ˶336Çóµ÷¼Á +5 vvÃÔ 2026-03-21 8/400 2026-03-22 14:20 by ColorlessPI
[¿¼ÑÐ] 303Çóµ÷¼Á +5 °²ÒäÁé 2026-03-22 6/300 2026-03-22 12:46 by ËØÑÕÇã³Ç1988
[¿¼ÑÐ] Çóµ÷¼Á +4 ÒªºÃºÃÎÞÁÄ 2026-03-21 4/200 2026-03-21 18:57 by ѧԱ8dgXkO
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +4 ÄÝÄÝninicgb 2026-03-21 4/200 2026-03-21 18:39 by ѧԱ8dgXkO
[¿¼ÑÐ] ¶þ±¾¿ç¿¼Ö£´ó²ÄÁÏ306Ó¢Ò»Êý¶þ +3 z1z2z3879 2026-03-17 3/150 2026-03-21 02:29 by JourneyLucky
[¿¼ÑÐ] 321Çóµ÷¼Á +9 ºÎÈó²É123 2026-03-18 11/550 2026-03-20 23:19 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸ËÕÖÝ´óѧ²ÄÁÏÇóµ÷¼Á£¬×Ü·Ö315£¨Ó¢Ò»£© +5 sbdksD 2026-03-19 5/250 2026-03-20 22:10 by luoyongfeng
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷°²½»Í¨´óѧ ѧ˶ 354Çóµ÷¼Á211»òÕß˫һÁ÷ +3 ÎÒÏëÒª¶ÁÑо¿Éú 2026-03-20 3/150 2026-03-20 20:13 by JourneyLucky
[¿¼ÑÐ] Çóµ÷¼Á +3 eation27 2026-03-20 3/150 2026-03-20 19:32 by JourneyLucky
[¿¼ÑÐ] 086500 325 Çóµ÷¼Á +3 Áì´øÐ¡ÐÜ 2026-03-19 3/150 2026-03-20 18:38 by ¾¡Ë´Ò¢1
[¿¼ÑÐ] ±¾¿ÆÖ£ÖÝ´óѧÎïÀíѧԺ£¬Ò»Ö¾Ô¸»ª¿Æ070200ѧ˶£¬346Çóµ÷¼Á +4 ÎÒ²»ÊÇÒ»¸ù´Ð 2026-03-18 4/200 2026-03-19 09:11 by ¸¡ÔÆ166
[¿¼ÑÐ] ²ÄÁϹ¤³Ìר˶µ÷¼Á +5 204818@lcx 2026-03-17 6/300 2026-03-18 22:55 by 204818@lcx
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û