ʵÏÖÎļþ¼òµ¥µÄ¼ÓÃܺͽâÃܱÏÒµÂÛÎÄ

±±¾©Óʵç´óѧ±ÏÒµÉè¼Æ

1 Ð÷ÂÛ

1.1 ÂÛÎı³¾°

ÐÅÏ¢°²È«ÊÇÒ»¸ö×ÛºÏÐԵĽ»²æÑ§¿ÆÁìÓò£¬¹ã·ºÉæ¼°Êýѧ¡¢ÃÜÂëѧ¡¢¼ÆËã»ú¡¢Í¨ÐÅ¿ØÖÆ¡¢È˹¤ÖÇÄÜ¡¢°²È«¹¤³Ì¡¢ÈËÎÄ¿ÆÑ§µÈÖî¶àѧ¿Æ£¬Êǽü¼¸ÄêѸËÙ·¢Õ¹µÄÒ»¸öÈȵãѧ¿ÆÁìÓò¡£ÐÅÏ¢¶Ô¿¹ºÍÍøÂ簲ȫÊÇÐÅÏ¢°²È«µÄºËÐÄÈȵ㣬ËüµÄÑо¿ºÍ·¢Õ¹ÓÖ½«´Ì¼¤¡¢Íƶ¯ºÍ´Ù½øÏà¹ØÑ§¿ÆµÄÑо¿Óë·¢Õ¹¡£

ÍøÂç¼¼ÊõµÄ¿ìËÙ·¢Õ¹£¬¸øÎÒÃǵÄÉú»î´øÀ´ÁË·½±ã£¬Ìá¸ßÁËÎÒÃǵŤ×÷ЧÂÊ£¬·á¸»ÁËÎÒÃǵÄÉú»î£¬µ«Í¬Ê±£¬°²È«ÎÊÌâҲʱ¿ÌÀ§ÈÅ×ÅÎÒÃÇ¡£Á¬½ÓÔÚÍøÂçÉϵļÆËã»úËæÊ±¶¼Óб»ºÚ¿Í¹¥»÷µÄ¿ÉÄÜ£¬ÔÚÍøÂçÉÏÊÕ·¢µÄÎļþÒ²ÓпÉÄܱ»ºÚ¿Í½Ø»ñ£¬¶øÕâÖÖ²»°²È«µÄÒòËØÊÇTCP/IPЭÒéËù¹ÌÓеģ¬ËùÒÔΪÁ˱£»¤ÖØÒªµÄÎļþ°²È«£¬ÎÒÃDZØÐë¸øÖØÒªµÄÎļþ¼ÓÃÜ¡£

±¾ÂÛÎĽ²ÊöÁ˼ÓÃܼ¼ÊõµÄʵÏÖ¡£Í¨¹ýÊý¾Ý¼ÓÃÜ£¬ÈËÃÇ¿ÉÒÔÓÐЧµØ±£Ö¤¸öÈËÊý¾ÝµÄ°²È«£¬ÒÔ¼°ÔÚͨÐÅÏß·ÉϵÄÄÚÈݲ»±»Ð¹Â¶£¬¶øÇÒ»¹¿ÉÒÔ¼ìÑé´«ËÍÐÅÏ¢µÄÍêÕûÐÔ¡£

1.2 Ö÷Òª¹¤×÷

ʵÏÖÎļþ¼òµ¥µÄ¼ÓÃܺͽâÃÜ£¬±£»¤Êý¾Ý°²È«¡£ÊµÏÖÎļþУÑ鹦ÄÜ£¬ÓÃÓÚÑéÖ¤ÎļþµÄÍêÕûÐÔºÍÕýÈ·ÐÔ¡£Í¨¹ý¸²¸Ç¼¼Êõʹɾ³ýµÄÎļþ²»¿É»Ö¸´£¬ÊµÏÖÎļþ·ÛË鹦ÄÜ¡£Éè¼ÆÒ»Ì×ÍêÕûµÄ¼ÓÃÜÌåϵ£¬ÔÚºËÐÄ´úÂëÔËÐÐǰÓÅÏÈÈ¡µÃ³ÌÐò¿ØÖÆÈ¨×öУÑ鹤×÷£¬±£»¤Èí¼þµÄ°²È«¡£

1.3 ±¾ÎĽṹ

±¾ÎĵÚÒ»²¿·ÖÖ÷ÒªÒÔÐ÷ÂÛΪÖ÷£¬ËµÃ÷ÁËÎÄÕµÄÑо¿±³¾°¡¢Ö÷Òª¹¤×÷£¬¸ÅҪ˵Ã÷ÁËËù×öµÄ¹¤×÷¡£µÚ¶þ²¿·ÖÖ÷ÒªÊÇÎļþ¼ÓÃܽâÃܵÄÏà¹ØÖªÊ¶µÄ½éÉÜ£¬½éÉÜÁËAESËã·¨µÄÔ­Àí¡£µÚÈý²¿·ÖÐðÊöÁËÉè¼ÆµÄ˼·¡¢Öص㡣µÚËIJ¿·ÖΪÉè¼Æ½á¹û¼°·ÖÎö£¬½«ÀͶ¯³É¹ûÕ¹ÏÖ¸ø´ó¼Ò¡£µÚÎ岿·ÖΪ½áÂÛ¡¢ÖÂлºÍ²Î¿¼ÎÄÏ×£¬ÁгöÁËÎÄÕµIJο¼ÎÄÏ׺ÍÒýÓÃÎÄÏ×£¬·´Ó³±¾ÎÄÑо¿¹¤×÷µÄ±³¾°ºÍÒÀ¾Ý¡£

1

±±¾©Óʵç´óѧ±ÏÒµÉè¼Æ

2 AES½éÉÜ

2.1 AES¸ÅÊö

AESÊÇÒ»¸öµü´úµÄ¡¢¶Ô³ÆÃÜÔ¿·Ö×éµÄ¼ÓÃÜËã·¨£¬¼´ËüµÄ¼ÓÃܺͽâÃܹý³Ì¶¼Ê¹ÓÃͬһ¸öÃÜÔ¿¡£AES·Ö×éÃÜÂë½ÓÊÜÒ»¸ö128λµÄÃ÷ÎÄ£¬²¢ÇÒÔÚÒ»¸ö128¡¢192¡¢256Î»ÃØÃÜÃÜÔ¿µÄ¿ØÖÆÏ²úÉúÒ»¸ö128λµÄÃÜÎÄ¡£ËüÊÇÒ»¸öÌæ´ú - Öû»ÍøÂçµÄÉè¼Æ£¬²¢ÇÒ´øÓÐÒ»¸ö³ÆÎªÂֵIJ½ÖèµÄ¼¯ºÏ£¬ÆäÖÐÂÖÊý¿ÉÒÔΪ9¡¢11»òÕß13£¨¶ÔÓ¦ÓÚ128¡¢192»òÕß256λµÄÃÜÔ¿£©£¬ÕâÑù¿ÉÒÔ½«Ã÷ÎÄÓ³ÉäΪÃÜÎÄ¡£

Ò»ÂÖAESÓÉÏÂÃæµÄ4²½×é³É£º

(1)×Ö½ÚÌæ´ú (SubBytes)£ºÓÃÒ»¸öSºÐÍê³É·Ö×éÖеİ´×ֽڵĴú»»¡£ (2)ÐÐÒÆÎ» (ShiftRows)£ºÒ»¸ö¼òµ¥µÄÖû»¡£

(3)ÁлìÏý (MixColumns)£ºÒ»¸öÀûÓÃÔÚÓòGF()ÉϵÄËãÊõÌØÐԵĴú»»¡£

(4)ÂÖÃÜÔ¿¼Ó (AddRoundKey)£ºÀûÓõ±Ç°·Ö×éºÍÀ©Õ¹ÃÜÔ¿µÄÒ»²¿·Ö½øÐа´Î»XOR¡£ ÿһÂÖ·Ö±ðʹÓÃËü×Ô¼ºµÄ128λÂÖÃÜÔ¿ (round key)£¬ËüÊÇÓÉÃØÃÜÃÜԿͨ¹ýÒ»¸ö³ÆÎªÃÜÔ¿µ÷¶È (key schedule) µÄ¹ý³Ì´¦Àí¶ø²úÉúµÄ¡£²»ÒªµÍ¹ÀÒ»¸öÉè¼ÆºÏÀíµÄÃÜÔ¿µ÷¶È·½°¸µÄÖØÒªÐÔ¡£Ëü°ÑÃÜÔ¿µÄìØÉ¢·¢¸øÃ¿Ò»¸öÂÖÃÜÔ¿¡£Èç¹ûìØÃ»Óб»ºÜºÃµØ´«²¥£¬¾Í»á²úÉú¸÷ÖÖÂé·³£¬ÀýÈçµÈ¼ÛÃÜÔ¿¡¢Ïà¹ØÃÜÔ¿ÒÔ¼°ÆäËûÀàËÆµÄ·Ö±ðÕ÷·þ¹¥»÷ (distinguishing attack)¡£

AES°Ñ128λµÄÊäÈë¿´×÷ÊÇÒ»¸öÓÉ16¸ö×Ö½Ú×é³ÉµÄÏòÁ¿£¬²¢ÓÃÒ»¸ö4 x4µÄÁоØÕó(big-endian)µÄÐÎʽÀ´×éÖ¯£¬½Ð×ö״̬(state)¡£¼´µÚ1¸ö×Ö½ÚÓ³ÉäΪA0.0£¬µÚ3¸ö×Ö½ÚÓ³ÉäΪA3.0£¬µÚ4¸ö×Ö½ÚΪA0.1£¬µÚ16¸ö×Ö½ÚÓ³ÉäΪA3.3£¬Èçͼ2-1Ëùʾ¡£

A0.0 A1.0 A2.0 A3.0 A0.1 A1.1 A2.1 A3.1 A0.2 A1.2 A2.2 A3.2 A0.3 A1.3 A2.3 A3.3

ͼ2-1 AESµÄ״̬ʾÒâͼ

Õû¸öAES·Ö×éÃÜÂëÓÉÏÂÃæµÄ²½Öè×é³É£º (1)AddRoundKey(round=0)

(2)for round=1µ½Nr-1 (9¡¢11»òÕß13£¬ÕâÈ¡¾öÓÚÃÜÔ¿µÄ´óС)do SubBytes ShiftRows MixColumns

AddRoundKey(round)

2

±±¾©Óʵç´óѧ±ÏÒµÉè¼Æ

(3)SubBytes (4)ShiftRows

(5)AddRoundKey(Nr)

2.2 ÂÖÃÜÔ¿¼Ó (AddRoundKey)

ÂÖº¯ÊýµÄÕâÒ»²½ÊǰÑÂÖÃÜÔ¿¼Óµ½×´Ì¬ÖÐ(ÔÚGF(2)ÖÐ)¡£ËüÖ´ÐÐÁË16¸ö²¢ÐеİÑÃÜÔ¿¼Óµ½×´Ì¬ÖеÄÔËËã¡£GF(2)µÄ¼Ó·¨ÊÇͨ¹ýÒì»òÔËËãÀ´Íê³ÉµÄ£¬Èçͼ2-2Ëùʾ¡£

ͼ2-2 AES AddRoundKeyº¯Êý

ÆäÖеÄK¾æÕóÊÇÒ»¸öÂÖÃÜÔ¿²¢ÇÒ¶ÔÿһÂÖ¶¼ÓÐÒ»¸öΩһµÄÃÜÔ¿¡£ÒòΪÃÜÔ¿µÄ¼Ó·¨ÊÇÒ»¸ö¼òµ¥µÄÒì»ò£¬ËùÒÔËü³£ÊµÏÖΪÔÚ32λÈí¼þÖдÓÁпªÊ¼µÄÒ»¸ö32λµÄÒì»ò²Ù×÷¡£

2.3 ×Ö½ÚÌæ´ú (SubBytes)

ÂÖº¯ÊýµÄSubBtes²½ÖèÊÇÓÃÀ´Ö´ÐÐSPNÖеķÇÏßÐÔ»ìÇå²½ÖèµÄ¡£Ëü°Ñ16¸ö×Ö½ÚµÄÿһ¸ö¶¼²¢ÐеØÓ³ÉäΪһ¸öеÄ×Ö½Ú£¬ÕâÊÇͨ¹ýÒ»¸öÁ½²½ÖèµÄÌæ´ú²Ù×÷À´Íê³ÉµÄ£¬Èçͼ2-3Ëùʾ¡£

3

±±¾©Óʵç´óѧ±ÏÒµÉè¼Æ

ͼ2-3 AES SubBytesº¯Êý

¸ÃÓ³Éä±ä»¯ÊÇÒ»¸ö¼òµ¥µÄ²é±í²Ù×÷£¬AES¶¨ÒåÁËÒ»¸öSºÐ£¬Èç±í2.1Ëùʾ£¬ËüÊÇÓÉ16*16¸ö×Ö½Ú×é³ÉµÄ¾ØÕ󣬰üº¬ÁË8λֵËùÄܱí´ïµÄ256ÖÖ¿ÉÄܵı任¡£StateÖÐÿ¸ö×Ö½Ú°´ÕÕÈçϵķ½Ê½Ó³ÉäΪһ¸öеÄ×Ö½Ú£º°Ñ¸Ã×ֽڵĸß4λ×÷ΪÐÐÖµ£¬µÍ4λ×÷ΪÁÐÖµ£¬È»ºóÈ¡³öSºÐÖжÔÓ¦ÐÐÁеÄÔªËØ×÷ΪÊä³ö¡£ÀýÈ磬ʮÁù½øÖÆÖµ95Ëù¶ÔÓ¦µÄSºÐµÄÐÐÖµÊÇ9£¬ÁÐÖµÊÇ5£¬SºÐÖÐÔÚ´ËλÖõÄÖµÊÇ2A¡£ÏàÓ¦µØ£¬95±»Ó³ÉäΪ2A¡£

±í2.1 AESµÄSºÐ

0 1 2 0 63 CA B7 04 09 53 D0 y 1 7C 82 FD C7 83 D1 EF 2 77 C9 93 23 2C 00 AA 3 7B 7D 26 C3 1A ED FB 4 F2 FA 36 18 1B 20 43 5 6B 59 3F 96 6E FC 4D 6 6F 47 F7 05 5A B1 33 7 C5 F0 CC 9A A0 5B 85 8 30 AD 34 07 52 6A 45 9 01 D4 A5 12 3B CB F9 A 67 A2 E5 80 D6 BE 02 B 2B AF F1 E2 B3 39 7F C FE 9C 71 EB 29 4A 50 D D7 A4 D8 27 E3 4C 3C E AB 72 31 B2 2F 58 9F F 76 C0 15 75 84 CF A8 x 3 4 5 6

4

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4