рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрдерд╛ рдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬреИрд╕реЗ рдПрдИрдПрд╕ рдФрд░ рдПрдордбреА 5, рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди рднреА рд╣рд╛рде рдореЗрдВ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдХреЗрд╡рд▓ рдЗрд╕ рд░рд╛рдп рдХреЛ рдордЬрдмреВрдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЦрд╛рд▓реА рд╕рдордп рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рдХрдо рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдПрдИрдПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рд░рд┐рдЬрдВрдбреЗрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрдпреЛрдВ? рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реА рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдмрд╣реБрдд рдХрдо рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд▓реЗрдЦ рд╕реЗ рд╕рдордп рд╕рдВрдХрд▓рди рдХреЛрдб рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ html рдкреГрд╖реНрда рдФрд░ рдХрдИ js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдИрдПрд╕ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдПрдИрдПрд╕ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЙрд╕ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ 128-рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд░рд╛рдкреНрдд 128-рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд╕рд░реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
cipher = encrypt(block, key) // block key block = decrypt(cipher, key) // cipher key
рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ 128 рдмрд┐рдЯреНрд╕ рд╣реЛрддрд╛ рд╣реИред рдореБрдЦреНрдп рдЖрдХрд╛рд░ рдХрд╛ рднреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдордирдорд╛рдиреЗ рдкрд╛рда рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- рдПрдИрдПрд╕ рдорд╛рдирдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╣реИрд╢ рдХреЛ рдПрдХ рдХреБрдВрдЬреА рдореЗрдВ рдмрджрд▓реЗрдВ
- рдкрд╛рда рдХреЛ 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] рддрддреНрд╡ рдХрд┐рд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреАрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- GF рдлрд╝реАрд▓реНрдб (2 8 ) рдореЗрдВ b рдкрд░ рд╡рд╛рдкрд╕реА рдмрд╛рдЗрдЯ рдвреВрдВрдвреЗрдВ (рд╢реВрдиреНрдп рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝реЗрдВ)
- 8 рдмрд┐рдЯреНрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ 64 рдмрд┐рдЯреНрд╕ рдХреЗ 8 ├Ч 8 рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░реЗрдВ
- {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 рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╡рд╣ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмреНрд▓реЙрдХ рд╣реИред рдЪрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
- AddRoundKey рдореБрдЦреНрдп рд╢реЗрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ 4 ├Ч N b рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреЗрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдПрд▓рд┐рдореЗрдВрдЯ рд╡рд╛рдЗрдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк AddRoundKey рдХреЛ рджреЛ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП AddRoundKey рдХрд╛ рд╡реНрдпреБрддреНрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдпрдВ рд╣реИред
- рд╕рдмрдмрд╛рдЗрдЯреНрд╕ рдПрд╕рдмреАрдПрдХреНрд╕ рдЯреЗрдмрд▓ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдПрд╕рдЬреЗ = рдПрд╕рдмреЙрдХреНрд╕ [рдПрд╕ рдЖрдИрдУрдПрдХреНрд╕ ]ред SubBytes рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рддрд┐рд╡рд░реНрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрд▓рдЯрд╛ InvSBox рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- ShiftRows рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА ith рдкрдВрдХреНрддрд┐ рдХреЛ i рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рд╢реВрдиреНрдп рд╕реЗ рдЧрд┐рдирддрд╛ рд╣реВрдВред рдЙрд▓рдЯрд╛ InvShiftRows рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдмрджрд▓рддрд╛ рд╣реИред
- 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 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред