
рдЕрдЪреНрдЫреЗ рджрд┐рди, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВред
рдЖрдкрдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ NIST рдиреЗ рдирдП SHA-3 рдорд╛рдирдХ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЖрдпреЛрдЬрд┐рдд рдХреА рд╣реИред рдФрд░ рдЗрд╕ рд╡рд░реНрд╖ рдЗрд╕ рдкреБрд░рд╕реНрдХрд╛рд░ рдХреЛ рдЗрд╕рдХрд╛ рдирд╛рдпрдХ рдорд┐рд▓рд╛ред рдирдП рдорд╛рдирдХ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЦреИрд░, рдЪреВрдВрдХрд┐ рдорд╛рдирдХ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред
рдФрд░ рдПрдХ рд╢рд╛рдВрдд рд╢рдирд┐рд╡рд╛рд░ рдХреА рд░рд╛рдд рдХреЛ, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ google google.com рдореЗрдВ рдЦреЛрд▓реЗ рдЧрдП
рдореИрдиреБрдЕрд▓ рдХреЗ рд╕рд╛рде
рдХрд╡рд░ рдХрд░ рд▓рд┐рдпрд╛, рдЕрдкрдирд╛ рдереЛрдбрд╝рд╛ рд╢реЛрдз рд╢реБрд░реВ рдХрд┐рдпрд╛ред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
224,256,384 рдХреА рдПрдХ рдЪрд░ рдЙрддреНрдкрд╛рджрди рд▓рдВрдмрд╛рдИ рдФрд░ 512 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреЗрдХреЗрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирдП рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдХреЗрдХреЗрдХ рдХреЗ рджрд┐рд▓ рдореЗрдВ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдкрдВрдЬ (рд╕реНрдкрдВрдЬ, рд╢реАрд░реНрд╖ рдЫрд╡рд┐ рд╕реЗ рд╕рдорд╛рди) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ рджреЛ рдЪрд░рдг рд╣реИрдВ:
- рдЕрд╡рд╢реЛрд╖рд┐рдд (рдЕрд╡рд╢реЛрд╖рдг)ред рдореВрд▓ рд╕рдВрджреЗрд╢ M рдмрд╣реБ-рджреМрд░ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди f рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред
- рдирд┐рдЪреЛрдбрд╝рдирд╛ (рдЬрд╛рд░реА рдХрд░рдирд╛)ред рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рдгрд╛рдореА Z рдорд╛рдиреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯред
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рдЖрд░ рдФрд░ рд╕реА рдЕрдХреНрд╖рд░ рджреЗрдЦреЗ рд╣реЛрдВрдЧреЗред рд╣рдо рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдЬрд╝рд┐рд╢ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдмрд╕ рдЗрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрддрд╛рдПрдВ, рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рддреЛ SHA-512 рдХреЗ рд▓рд┐рдП, r = 576, c = 1024 рдХреЛ рдЗрди рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ?
рддреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдХреЗрдХреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрдкрдВрдЬ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдореВрд▓ рд╕рдВрджреЗрд╢ M рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ r рдХреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЬреЛрдбрд╝ рдирд┐рдпрдо рдЙрдирдХреА рд╕рд╛рджрдЧреА рдХреЗ рд╕рд╛рде рд▓реБрднрд╛рддреЗ рд╣реИрдВред рд╕реВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: M = M || 0x01 || 0x00 || 0x00 || 0x80 || рдпрд╛ рд░реВрд╕реА рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдПрдХ рдПрдХрд▓ рдмрд╛рдЗрдЯ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢реВрдиреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдпрд╣ рдкреВрд░рд╛ рдкрд╣рдирд╛рд╡рд╛ 0x80 рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
UPD: рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рддрднреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ 0x81 рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рдореНрдорд╛рдирд┐рдд рдУрд╡рд░рдХреНрд╡рд╛рдВрдЯрдо рдХреА рд╕рддрд░реНрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЧрд▓рддреА рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рдерд╛ред рдФрд░ рдкрд╣рд▓реЗ рднреА, рд╣реИрдмреНрд░реАрдЬрд╝рд░ fdsc рдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рдЬрд┐рд╕рдХреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдкреЛрд╕реНрдЯ рдкрд░ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдиреНрдпрд╛рдп рдХреА рдЬреАрдд рд╣реЛ рдЧрдИ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП! - рдлрд┐рд░, рд▓рдВрдмрд╛рдИ рдЖрд░ рдмрд┐рдЯреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдПрдо i рдХреЗ рд▓рд┐рдП , рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ:
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рдЖрд░-рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдореЛрдбреБрд▓реЛ 2 рдПрд╕ред рдлрд╝рдВрдХреНрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрд╕ рдХреЗ рд╕рднреА рддрддреНрд╡ рд╢реВрдиреНрдп рд╣реЛрдВрдЧреЗред
- рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рдПрди рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ M i + 1 рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ S рдХрд╛ рд╕реЗрдЯ рдмреНрд▓реЙрдХ M i рдХреЗ рдЕрдВрддрд┐рдо рджреМрд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред
- рд╕рднреА рдмреНрд▓реЙрдХ рдПрдо рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣реИрд╢ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
рд╡реИрд╕реЗ рднреА, рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ!
рдЦреИрд░, рдЕрдм
рдмреНрд▓реИрдХрдЬреИрдХ рдФрд░ рд╡реНрд╣рд╛рдЯреНрд╕ рдХреЛрдб рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкреВрд░рд╛ рдЗрдиреНрд╕ рдФрд░ рдмрд╣рд┐рд╖реНрдХрд╛рд░ред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рдкрд░реНрджрд╛ рдлрд╛рдбрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЖрд░ рдФрд░ рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЗрдХреЗрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ M
i рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рдВрд╕ b = {f-25, f-50, f-100, f рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░рдордЪрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ -200, рдПрдл -400, рдПрдл -800, рдПрдл -1600}ред
рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдПрдл -800 рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдРрд╕реЗ рдЖрд░ рдФрд░ рд╕реА рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╕рдорд╛рдирддрд╛ r + c = 800 рд╕рдВрддреБрд╖реНрдЯ рд╣реЛред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд░ рдФрд░ рд╕реА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдХрд░, рдЖрдк рдЕрдкрдиреЗ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд╛рдЙрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реВрддреНрд░ n = 12 + 2l рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдВ 2
l = (b / 25)ред рддреЛ рдмреА = 1600 рдХреЗ рд▓рд┐рдП, рд░рд╛рдЙрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ 24 рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЪреБрдирдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рдХреЗрдХреЗрдХ -600 рдлрд╝рдВрдХреНрд╢рди рдХреЛ SHA-3 рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЗрдЦрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд▓рдВрдмрд╛рдИ рдХреА рд░рд╛рдЦ рдХреЗ рдореБрдЦреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛:
SHA-224: r = 1156, c = 448 (рдкрд╣рд▓реЗ 28 рдмрд╛рдЗрдЯреНрд╕ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ)
SHA-256: r = 1088, c = 512 (рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкрд╣рд▓реЗ 32 рдмрд╛рдЗрдЯреНрд╕ рд▓реМрдЯрд╛рдПрдВ)
SHA-384: r = 832, c = 768 (рдкрд╣рд▓реЗ 48 рдмрд╛рдЗрдЯреНрд╕ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ)
SHA-512: r = 576, c = 1024 (рдкрд╣рд▓реЗ 64 рдмрд╛рдЗрдЯреНрд╕ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВ)
рдХреЛрдб рдХрд╣рд╛рдВ рд╣реИ?
рдФрд░ рдЗрди рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЫрджреНрдо рдХреЛрдб рдкрд░ рд╕реАрдзреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрд╡рд╢реЛрд╖рд┐рдд рдЪрд░рдг рдХреЛ рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Keccak-f[b](A) { forall i in 0тАжnr-1 A = Round[b](A, RC[i]) return A }
рдпрд╣рд╛рдБ b рдЪрдпрдирд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдорд╛рди рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1600 рд╣реИ)ред рдФрд░ рд░рд╛рдЙрдВрдб () рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рджреМрд░ рдкрд░ рд▓рд╛рдЧреВ рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдорд╛рдВрдХрди рд╣реИред рд░рд╛рдЙрдВрдб рдПрдирдЖрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрд░ рдФрд░ рд╕реА рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЙрдВрдб рдкрд░ рдХрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рди рдирд┐рдореНрди рдХрд╛рд░реНрдп рд╣реИрдВ:
Round[b](A,RC) { ╬╕ step for(int x=0; x<5; x++) C[x] = A[x,0] xor A[x,1] xor A[x,2] xor A[x,3] xor A[x,4]; for(int x=0; x<5; x++) D[x] = C[x-1] xor rot(C[x+1],1); for(int x=0; x<5; x++) A[x,y] = A[x,y] xor D[x]; ╧Б and ╧А steps for(int x=0; x<5; x++) for(int y=0; y<5; y++) B[y,2*x+3*y] = rot(A[x,y], r[x,y]); ╧З step for(int x=0; x<5; x++) for(int y=0; y<5; y++) A[x,y] = B[x,y] xor ((not B[x+1,y]) and B[x+2,y]); ╬╣ step A[0,0] = A[0,0] xor RC return A }
рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ 4 рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкрд░ рдХрдИ рддрд╛рд░реНрдХрд┐рдХ рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдлрд╝рдВрдХреНрд╢рди рд░реЛрдЯ (X, n) n рдкрджреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡ X рдХреЗ рдЪрдХреНрд░реАрдп рдмрджрд▓рд╛рд╡ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдРрд░реЗ рдЖрд░ [] рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреМрд░ рдореЗрдВ рдХрд┐рддрдирд╛ рдмрд╛рдЗрдЯреНрд╕ рд╢рд┐рдлреНрдЯ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рд╕рд╛рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдорд╛рди рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

RC рд╕рд░рдгреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рднреА рд╣реИ:

рдХреЗрдХреЗрдХ рд╕рдорд╛рд░реЛрд╣ рд╕реНрд╡рдпрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
Keccak[r,c](M) { Initialization and padding for(int x=0; x<5; x++) for(int y=0; y<5; y++) S[x,y] = 0; P = M || 0x01 || 0x00 || тАж || 0x00; P = P xor (0x00 || тАж || 0x00 || 0x80);
Absorbig рд╕реНрдЯреЗрдк рдореЗрдВ, рд╡реИрд▓реНрдпреВ рдХреЗ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдФрд░ рд╕реНрдХреНрд╡реАрдЬрд╝рд┐рдВрдЧ рд╕реНрдЯреЗрдЬ рдкрд░, рдЖрд╡рд╢реНрдпрдХ рд╣реИрд╢ рдХреА рд▓рдВрдмрд╛рдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рддрдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВред
рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд C # рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рдЬреЛ рдЗрди рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЪрд┐рддреНрд░
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреЗрдХреЗрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдП рдЧрдП рд╣реИрдВ
редUPD:
fshp рдиреЗ рдирдП рдорд╛рдирдХ
рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ред
UPD2: рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдбрдорд┐рд░рд▓ рдЙрдкрдирд╛рдо рд╡рд╛рд▓реЗ рдПрдХ рдкрд╛рдардХ рдиреЗ рдореБрдЭреЗ рдореЗрд▓ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдПрдбрдорд┐рд░рд▓ рд░реАрдбрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди using System; using System.Linq; using System.Collections.Generic; class Program { static private Byte InstanceNumber = 6; static private UInt16[] b_array = { 25, 50, 100, 200, 400, 800, 1600 };