рдПрдИрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ





рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрдерд╛ рдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬреИрд╕реЗ рдПрдИрдПрд╕ рдФрд░ рдПрдордбреА 5, рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди рднреА рд╣рд╛рде рдореЗрдВ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдХреЗрд╡рд▓ рдЗрд╕ рд░рд╛рдп рдХреЛ рдордЬрдмреВрдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЦрд╛рд▓реА рд╕рдордп рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рдХрдо рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдПрдИрдПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рд░рд┐рдЬрдВрдбреЗрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрдпреЛрдВ? рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реА рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдмрд╣реБрдд рдХрдо рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд▓реЗрдЦ рд╕реЗ рд╕рдордп рд╕рдВрдХрд▓рди рдХреЛрдб рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ html рдкреГрд╖реНрда рдФрд░ рдХрдИ js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдИрдПрд╕ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред











рдПрдИрдПрд╕ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ





рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЙрд╕ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ 128-рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд░рд╛рдкреНрдд 128-рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд╕рд░реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:







cipher = encrypt(block, key) //  block   key block = decrypt(cipher, key) //  cipher   key
      
      







рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ 128 рдмрд┐рдЯреНрд╕ рд╣реЛрддрд╛ рд╣реИред рдореБрдЦреНрдп рдЖрдХрд╛рд░ рдХрд╛ рднреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдордирдорд╛рдиреЗ рдкрд╛рда рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:











рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:







 hash = md5(password) // MD5    128  key = keyexpansion(hash) //     blocks = split(text, 16) //      16  for (i = 0; i < blocks.length; i++) cipher[i] = encrypt(blocks[i], key)
      
      







рд╕рд┐рдлрд░ рдмреНрд▓реЙрдХ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:







 hash = md5(password) key = keyexpansion(hash) for (i = 0; i < cipher.length; i++) blocks[i] = decrypt(cipher[i], key) text = merge(blocks) //      
      
      







рдмреЗрд╢рдХ, рдкрд╛рда рдХреА рд▓рдВрдмрд╛рдИ 128 рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЬрд╝реАрд░реЛ рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рд▓рдВрдмрд╛рдИ рддрдХ рдкреИрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЗ рдореВрд▓ рдкрд╛рда рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрдИ рдмрд╛рдЗрдЯреНрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ aes.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ aes.encrypt рдФрд░ anes.decrypt рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред







GF рдлреАрд▓реНрдб (2 8 )





рдПрдИрдПрд╕ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рддрдерд╛рдХрдерд┐рдд рдЬреАрдПрдл рдкрд░рд┐рдорд┐рдд рдХреНрд╖реЗрддреНрд░ (2 8 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдИрдПрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдИрдПрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрдврд╝реЗрдВред







рдлрд╝реАрд▓реНрдб GF (2 8 ) 0..255 рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЧреБрдгрди рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬреЛрдбрд╝ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЖрда рдмрд┐рдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ: a = a 7 a 6 a a a a a a a a a a 0 aред рдЗрд╕реА рддрд░рд╣, рд╕рдВрдЦреНрдпрд╛ рдмреА рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдП рдФрд░ рдмреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рд╕рд┐рджреНрдз рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдПрдХреНрд╕реЛрд░ рд╣реИ:



a + b = a xor b











рдЬреЛрдбрд╝ рдореЗрдВ рд╕рд░рд▓ рдЧреБрдг рд╣реИрдВ:



a + a = 0

-a = 0 - a = a

a - b = a + (-b) = a + b













рдЧреБрдгрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд╣рдо рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдЯреНрд╕ рд╕реЗ рдЧреБрдгрд╛рдВрдХ рд╡рд╛рд▓реЗ рдмрд╣реБрдкрдж рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



p = a 7 x 7 + a 6 x 6 + a 5 x 5 + a 4 x 4 + a 3 x 3 + a 2 x 2 + a 1 x + a 0

q = b 7 x 7 + b 6 x 6 + b 5 x 5 + b 4 x 4 + b 3 x 3 + b 2 x 2 + b 1 x + b 0









рдЕрдм рд╣рдо рдЗрди рджреЛ рдмрд╣реБрдкрджреЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдХреЛ m рджреНрд╡рд╛рд░рд╛ рдкрд╛рддреЗ рд╣реИрдВ:



m = x 8 + x 4 + x 3 + x + 1

r = pq mod (m)













рдЗрд╕ m рдХреЛ рдХреНрдпреЛрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ? рдЗрд╕ рдмрд╣реБрдкрдж рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рднрд╛рдЬрдХ-рдмрд╣реБрдкрдж рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпрд╣ рдмрд┐рдирд╛ рд╢реЗрд╖ рдХреЗ рд╡рд┐рднрд╛рдЬреНрдп рд╣реИ: рдЗрдХрд╛рдИ рдФрд░ рд╡рд╣ рд╕реНрд╡рдпрдВред Primes рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рд╕реЗ, рдмрд╣реБрдкрдж m "рдЕрднрд╛рдЬреНрдп" рд╣реИред рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддрд░рд╣ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдкрдж рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рдШрдЯрд╛рдиреЗ рдФрд░ рдШрдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ GF (2 8 ) рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдмрд╣реБрдкрддреНрдиреА рдХреЗ рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ рдЧреБрдгрд╛рдВрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рдмреАрдЪ xor рд╣реИред рдпрд╣рд╛рдБ рджреЛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:



x 3 + x 2 + 1 mod (x 3 + 1) = x 2 // x 3 +1

x 3 + x 2 + 1 mod (x 2 + 1) = (x 3 + x 2 + 1) - (x + 1)(x 2 + 1) = -x













рд╣рдо рдлрд╛рд░реНрдо рдореЗрдВ рдмрд╣реБрдкрдж рдЖрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ



r = r 7 x 7 + r 6 x 6 + r 5 x 5 + r 4 x 4 + r 3 x 3 + r 2 x 2 + r 1 x + r 0













рдЗрд╕рдХреЗ 8 рдЧреБрдгрд╛рдВрдХ GF рдлрд╝реАрд▓реНрдб ( 8 8 ) рд╕реЗ 8-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЙрддреНрдкрд╛рдж a тАв b рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреБрдгрди рд╕рд░рд▓ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рдВрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреАрдПрдл (2 8 ) рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдмрд╣реБрдкрдж рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХреЛ рдмрд╣реБрдкрдж x рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ x рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдХрдИ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред







GF (2 8 ) рдмрд╣реБрдкрдж рдХрд╛ рдирд┐рд░реВрдкрдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдЕрдВрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП



m = x 8 + x 4 + x 3 + x + 1 = 100011011 = 0x011b = {01}{1b}













рдХреНрд╖реЗрддреНрд░ GF (2 8 ) рдореЗрдВ рдмрд╣реБрдкрдж x = {02} рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЙрддреНрдкрд╛рдж рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



xp = x(a 7 x 7 + a 6 x 6 + a 5 x 5 + a 4 x 4 + a 3 x 3 + a 2 x 2 + a 1 x + a 0 ) =

a 7 x 8 + a 6 x 7 + a 5 x 6 + a 4 x 5 + a 3 x 4 + a 2 x 3 + a 1 x <2 + a 0 x

p = a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0

xp = a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 0 //













рдЕрдм рдЖрдкрдХреЛ m рджреНрд╡рд╛рд░рд╛ рд╢реЗрд╖ рднрд╛рдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдмрд┐рдЯ 7 = 1 рд╣реИ, рддреЛ рдореА рдХреЛ рдПрдХ рдмрд╛рд░ рдШрдЯрд╛рдПрдВред рдпрджрд┐ рдПрдХ 7 = 0 рддреЛ рдХреБрдЫ рднреА рдШрдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ:



r = xp mod (m) = xp - m a 7 = 1

r = xp mod (m) = xp a 7 = 0













рдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:







 gf.xtime = function(b) { var highbit = b & 0x80 var shl = (b << 1) & 0xff return highbit == 0 ? shl : shl ^ 0x1b }
      
      







рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд╣реБрдкрдж рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ a тАв b рдЬрд╣рд╛рдВ a = {3c}, b = {a1}} рдкрд╛рддреЗ рд╣реИрдВ



b = {a1} = 10100001 = {80} + {20} + {01}

aтАвb = aтАв{80} + aтАв{20} + aтАв{01} = aтАвx 7 + aтАвx 5 + a =

aтАв{02}тАв{02}тАв{02}тАв{02}тАв{02}тАв{02}тАв{02} + aтАв{02}тАв{02}тАв{02}тАв{02}тАв{02} + a =

{29} + {c1} + {3c} = {d4}













рдЬреАрдПрдл (2 8 ) рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рд░рд╣рддрд╛ рд╣реИред рд╢реВрдиреНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯ b рдореЗрдВ, рдПрдХ рдмрд╛рдЗрдЯ a = b -1 рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЧреБрдг a тАв b = {01} рд╣реИред рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрдиреЛрдВ рдХрд╛рд░реНрдп - рдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛, рджреЛ рдордирдорд╛рдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА gf рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд░рдЦрд╛ред







SBox рддрд╛рд▓рд┐рдХрд╛





рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ 256-рдмрд╛рдЗрдЯ рд╕рд░рдгреА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрд╛рдЗрдЯ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдХреЛрдб рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ SBox [b] рддрддреНрд╡ рдХрд┐рд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреАрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:







  1. GF рдлрд╝реАрд▓реНрдб (2 8 ) рдореЗрдВ b рдкрд░ рд╡рд╛рдкрд╕реА рдмрд╛рдЗрдЯ рдвреВрдВрдвреЗрдВ (рд╢реВрдиреНрдп рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝реЗрдВ)
  2. 8 рдмрд┐рдЯреНрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ 64 рдмрд┐рдЯреНрд╕ рдХреЗ 8 ├Ч 8 рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░реЗрдВ
  3. {63} рдЬреЛрдбрд╝реЗрдВ




рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпреЗ рддреАрди рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрддреА рд╣реИрдВ:

















рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдмрд┐рдЯреНрд╕ рдХрд╛ рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд┐рдЯ рдХреЗ рдЧреБрдгрди рдХреЗ рд▓рд┐рдП "рдФрд░" рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ - "xor"ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



r 0 = b 0 + b 4 + b 5 + b 6 + b 7 + 1













рдореИрдВрдиреЗ sbox рдлрдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рд╣реИ:







 aes.sbox = function(b) { var m = 0xf8 var r = 0 var q = gf.inv(b) || 0 for (var i = 0; i < 8; i++) { r = (r << 1) | bits.xorbits(q & m) m = (m >> 1) | ((m & 1) << 7) } return r ^ 0x63 }
      
      







рдирд┐рд░реНрдорд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:



63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76

ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0

b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15

04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75

09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84

53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf

d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8

51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2

cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73

60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db

e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79

e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08

ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a

70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e

e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df

8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16













рдЗрд╕реЗ рдХреЗрд╡рд▓ рдХреЛрдб рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╕реЙрдХреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред







InvSBox рддрд╛рд▓рд┐рдХрд╛





рдкрд╛рда рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдИрдПрд╕ рдПрд╕рдмреЙрдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред InvSBox рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЧреБрдг рд╣реИ: InvSBox [SBox [i]] = iред InvSBox рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb

7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb

54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e

08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25

72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92

6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84

90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06

d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b

3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73

96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e

47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b

fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4

1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f

60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef

a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61

17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d













рдПрдИрдПрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░





рдПрдИрдПрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо 128 рдмрд┐рдЯреНрд╕ рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдЙрд╕реА рд▓рдВрдмрд╛рдИ рдХреЗ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдкреНрд░рдореБрдЦ рдЕрдиреБрд╕реВрдЪреА w рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдИрдПрд╕ рдореЗрдВ 128-рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдХреЛ 4 ├Ч рдПрди рдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рдирдХ рдПрди рдмреА = 4 рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХреА рд▓рдВрдмрд╛рдИ рд╣рдореЗрд╢рд╛ 128 рдмрд┐рдЯреНрд╕ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд┐рд╕реА рднреА рдПрди рдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рд▓рдВрдмрд╛рдИ 4N k рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдмреНрд▓реЙрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдПрди рдЖрд░ рд░рд╛рдЙрдВрдб рд╣реЛрддреЗ рд╣реИрдВ - рдПрдХ рд╣реА рдкрд░рд┐рд╡рд░реНрддрди рд╕рдореВрд╣ рдХреЛ 128-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдорд╛рдирдХ рдЗрди рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:







рдПрди рдХреЗ рдПрди рдмреА рдПрди рдЖрд░
рдПрдИрдПрд╕ 128 4 4 10
рдПрдИрдПрд╕ 192 6 4 12
рдПрдИрдПрд╕ 256 8 4 14




KeyExpansion рд░реВрдкрд╛рдВрддрд░рдг





AES рдкрд╛рда рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдВрдЬреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рддрдерд╛рдХрдерд┐рдд "рдХреБрдВрдЬреА рд╢реЗрдбреНрдпреВрд▓"ред рдЗрд╕ рдЕрдиреБрд╕реВрдЪреА рдХреЛ 4 ├Ч N b рдЖрдХрд╛рд░ рдХреЗ N r + 1 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрди r + 1 рдХрджрдо рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрджрдо рдкрд░, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ "рд╢реЗрдбреНрдпреВрд▓" рд╕реЗ рдПрдХ 4 ├Ч N рдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрд▓рд┐рдореЗрдВрдЯ рд╡рд╛рдЗрдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИред







рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди





рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо 128-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдЗрдирдкреБрдЯ рдФрд░ рдХреБрдВрдЬреА рд╢реЗрдбреНрдпреВрд▓ w рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ KeyExpansion рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ 4 ├Ч N b рдореИрдЯреНрд░рд┐рдХреНрд╕ s рдХреЗ рд░реВрдк рдореЗрдВ 16-рдмрд╛рдЗрдЯ рдЗрдирдкреБрдЯ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ AES рд░рд╛рдЬреНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ N r рд╕рдордп рдореЗрдВ 4 рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╡рд╣ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмреНрд▓реЙрдХ рд╣реИред рдЪрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред







  1. AddRoundKey рдореБрдЦреНрдп рд╢реЗрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ 4 ├Ч N b рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреЗрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдПрд▓рд┐рдореЗрдВрдЯ рд╡рд╛рдЗрдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк AddRoundKey рдХреЛ рджреЛ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП AddRoundKey рдХрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдпрдВ рд╣реИред
  2. рд╕рдмрдмрд╛рдЗрдЯреНрд╕ рдПрд╕рдмреАрдПрдХреНрд╕ рдЯреЗрдмрд▓ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдПрд╕рдЬреЗ = рдПрд╕рдмреЙрдХреНрд╕ [рдПрд╕ рдЖрдИрдУрдПрдХреНрд╕ ]ред SubBytes рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рддрд┐рд╡рд░реНрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрд▓рдЯрд╛ InvSBox рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. ShiftRows рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА ith рдкрдВрдХреНрддрд┐ рдХреЛ i рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рд╢реВрдиреНрдп рд╕реЗ рдЧрд┐рдирддрд╛ рд╣реВрдВред рдЙрд▓рдЯрд╛ InvShiftRows рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдмрджрд▓рддрд╛ рд╣реИред
  4. MixColumns рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ 4 ├Ч 4 рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдИрдВ рдУрд░ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ:













    рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП [abcd] = [{режреи} {режрей} {режрез} {режрез}]ред рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг MixColumns [{02} {03} {01} {01}] рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдпрд╣ MixColumns [{0e} {0b} {0d} {09}] рд╣реИред




рдпреЛрдЬрдирд╛рдмрджреНрдз рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:







 AddRoundKey(0) for (var i = 1; i <= Nr - 1; i++) { SubBytes() ShiftRows() MixColumns([0x02, 003, 0x01, 0x01]) AddRoundKey(i) } SubBytes() ShiftRows() AddRoundKey(Nr)
      
      







рдкреНрд░рддрд┐рд▓рд┐рдкрд┐





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдИрдПрд╕ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕рдореЗрдВ рдХрдИ рдкреНрд░рддрд┐рд╡рд░реНрддреА рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдЙрд▓рдЯрд╛ рд░реВрдкрд╛рдВрддрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред







рдереЛрдбрд╝рд╛ рд╕рд╛ рдЕрдиреБрдХреВрд▓рди





Sbox рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреБрд▓ 256 рд╕рдВрднрд╛рд╡рд┐рдд рдЗрдирдкреБрдЯ рдорд╛рди рдФрд░ 256 рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рд╣реИрдВред рдХрдИ рдмрд╛рд░ рдПрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП sbox рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:







 Function.prototype.cached = function() { var old = this var cache = {} return function(x) { if (cache[x] !== undefined) return cache[x] cache[x] = old(x) return cache[x] } } aes.sbox = aes.sbox.cached()
      
      







рдпрд╣ рдХреЛрдб sbox рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ sbox рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдирдмреЙрдХреНрд╕ рдФрд░ рдЖрд░рдУрдПрдиред рдЙрд╕реА рддрдХрдиреАрдХ рдХреЛ gf.mul рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ GF рдлрд╝реАрд▓реНрдб (2 8 ) рдореЗрдВ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╢ рдХрд╛ рдЖрдХрд╛рд░ 256 ├Ч 256 рддрддреНрд╡ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИред







рд╕рдВрджрд░реНрдн





рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ AES рдкреНрд░рд▓реЗрдЦрди рдХреЛ 197 FIPS рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред








All Articles