рдЬрдм рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╕реАрдЦрд╛, рддреЛ рдпрд╣ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд░рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рдерд╛ред рдЕрдм рдореИрдВ рдкрдврд╝рд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЫрд╛рддреНрд░ рдореЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмреЛрд░ рд╣реЛрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ MIT рдпреЛрдЬрдирд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╡рд┐рдзрд┐ RSA [1] рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВред рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЗрдЦ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдирд╛ рдХреЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЦреНрдп рдкреАрдврд╝реА - рдЦреЛрдЬ рдкреНрд░рд╛рдЗрдореНрд╕
RSA рдЕрд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдкрд╣рд▓реА рд╕рдВрдкрддреНрддрд┐ рдХрд┐рд╕реА рдХреЛ рднреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИред рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдХреБрдВрдЬреА рдорд╛рд▓рд┐рдХ рдХреЛ рдирд┐рдЬреА рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рд╣реИрд╢ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрд╢ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХреЗ, рд╕рдВрджреЗрд╢ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрджреЗрд╢ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рджреЛ рдмрдбрд╝реЗ рдкрд░реНрдпрд╛рдкреНрдд primes p рдФрд░ q рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИред рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ x рдХреЛ рдЕрднрд╛рдЬреНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рднрд╛рдЬрдХ рд╣реИрдВ: 1 рдФрд░ xред рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреНрдп рд╕рднреА рднрд╛рдЬрдХ рдЦрдВрдб рдкрд░ 2 рд╕реЗ x рдХреЗ рд╡рд░реНрдЧрдореВрд▓ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрд╕ рдЦрдВрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЗрд╡рд▓ рд╕рд░рд▓ рд╡рд┐рднрд╛рдЬрдХ рдЧреБрдгрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
(рдкрд░рд┐рднрд╛рд╖рд┐рдд) (рдкреНрд░рд╛рдЗрдореНрд╕ рдПрди)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд)
(рдпрд╛ рдЕрд╢рдХреНрдд? рд╡рд┐рднрд╛рдЬрдХ)
(рдЪрд▓реЛ ([рднрд╛рдЬрдХ (рдХрд╛рд░ рднрд╛рдЬрдХ)))
(рдпрд╛ (> (* рднрд╛рдЬрдХ рднрд╛рдЬрдХ) n)
(рдФрд░ (<0 (рд╢реЗрд╖ n (рдХрд╛рд░ рднрд╛рдЬрдХ))) (iter (cdr рднрд╛рдЬрдХ)))))
)
(iter primes)
)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ)
(cond
((= рдореЗрдВ) primes)
((рдкреНрд░рд╛рдЗрдо? рдХреИрдВрдбрд┐рдбреЗрдЯ (рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рд╛рдЗрдореНрд╕)) (iter (рдХрдВрд╕ рдХреИрдВрдбрд┐рдбреЗрдЯ рдкреНрд░рд╛рдЗрдо)) (+ i 1) (+ рдХреИрдВрдбрд┐рдбреЗрдЯ 1))
(рдЕрдиреНрдп (рдкреБрдирд░рд╛рд╡реГрддреНрдд iimes (+ рдЙрдореНрдореАрджрд╡рд╛рд░ 1)))
)
)
(iter ') (0 2)
)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рд╛рдЗрдореНрд╕ (рдкреНрд░рд┐рдореНрд╕ 100))
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреА (рдХрд╛рд░ primes))
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрдпреВ (рдХрд╛рд░ 10 рдбреНрд░реЙрдк))
рдкрд╛рдП рдЧрдП рдкреНрд░рд╛рдЗрдо рдХрд╛ рдЙрддреНрдкрд╛рдж рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЖрдкрдХреЛ рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдорд┐рд▓рд┐рдпрди рдкреНрд░рд╛рдЗрдо рдирдВрдмрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реВрдЪрдирд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд░рдПрд╕рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЕрдзрд┐рдХ рдЕрдВрдХ рд╡рд╛рд▓реЗ рдЕрдкрд░рд╛рдзреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд┐рдореНрд╕ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНтАНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЬреНрдЮрд╛рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдШрд╛рддрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рддрддреНрд╡ [2] рд╕реЗ рдХреБрдЫ рдпреБрдЧреНрдореЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
(рдкрд░рд┐рднрд╛рд╖рд┐рдд n (* pq))
рдкреНрд░рдореБрдЦ рдкреАрдврд╝реА - рдореНрдпреБрдЪреБрдЕрд▓ рдкреНрд░рд╛рдЗрдо рд╕рд░реНрдЪ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рджреВрд╕рд░реЗ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╛рдИ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ n рдкрд░ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдпреВрд▓рд░ рдлрд╝рдВрдХреНрд╢рди [3] рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдПрдХреНрд╕ рдХрд╛ рдпреВрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдЬреЛ рдмрдбрд╝реЗ рдПрдХреНрд╕ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИрдВред рдПрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд╛рддреНрд░рд╛ рдкреА -1 рдФрд░ рдХреНрдпреВ -1 рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╛рдИ (* - (рдкреА рез)) (- рдХреНрдпреВ рез)))
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡ 1 рд╕реЗ рд▓реЗрдХрд░ рдлрд╛рдИ рддрдХ рдХреА рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдИ рд╣реИ, рдЬреЛ рдХрд┐ рдХреЛрдкреНрд░рд╛рдЗрдо рдлрд╝рд╛рдЗрдо рд╣реИред рдпрд╣ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ 1 рд╣реИред
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (CoprimesLess n)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (рдкреБрди: рд╕рдВрдЪрдпрдХрд░реНрддрд╛ рдЙрдореНрдореАрджрд╡рд╛рд░)
(cond
((= 1 рдЙрдореНрдореАрджрд╡рд╛рд░) рд╕рдВрдЪрд╛рдпрдХ)
((= 1 (gcd n рдЙрдореНрдореАрджрд╡рд╛рд░)) (iter (рд╡рд┐рдкрдХреНрд╖ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╕рдВрдЪрд╛рдпрдХ) - (рдЙрдореНрдореАрджрд╡рд╛рд░ 1))
(рдФрд░ (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдВрдЪрдпрдХ - (рдЙрдореНрдореАрджрд╡рд╛рд░ 1)))
)
)
(iter ') (- (рдПрди 1))
)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдИ (рдХрд╛рд░ 5 рдбреНрд░реЙрдк (CoprimesLess рдлрд╛рдИ))))
рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдХ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ [4]ред
рдореБрдЦреНрдп рдкреАрдврд╝реА - рдХрдЯреМрддреА рдХреА рдЕрдВрдЧреВрдареА рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди
рд╕рдВрдЦреНрдпрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рдЕрдзреНрдпрдпрди рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрд╡рд╢реЗрд╖ рдЕрдВрдЧреВрдареА рд╣реИ [5]ред рдЕрд╡рд╢рд┐рд╖реНрдЯ рд╡рд▓рдп modulo k, 0 рд╕реЗ k-1 рддрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдЙрд╕ рдкрд░ рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВред рдЕрд╡рд╢реЗрд╖реЛрдВ рдХреА рдЕрдВрдЧреВрдареА рдореЗрдВ рдЬреЛрдбрд╝ (a + b mod k) рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЬреЛрдбрд╝ рдкрд░рд┐рдгрд╛рдо k рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ k рдЗрд╕реЗ рд╕реЗ рдШрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ рд░рд┐рдВрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдПрдХ рд░рд┐рдВрдЧ рдХреЛ рдЗрд╕рдХреЗ рд╕рд┐рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдЦрдВрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрд╡рд╢реЗрд╖реЛрдВ рдХреА рдЕрдВрдЧреВрдареА рдореЗрдВ рдЧреБрдгрд╛ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рдЧреБрдгрди рджреНрд╡рд╛рд░рд╛ рдШрд╛рддрд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореА рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ рд╣реЛрдЧреА, рдЕрд░реНрдерд╛рдд:
a + (b + c mod k) mod k = (a + b mod k) + c mod k
a * (b * c mod k) mod k = (a * b mod k) * c mod k
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡ рдПрдХ рд╕рдВрдЦреНрдпрд╛ d рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдЕрд╡рд╢рд┐рд╖реНрдЯ рд╡рд▓рдп modulo n рдореЗрдВ e рдХреЗ рд╕рд╛рде рдЙрд╕рдХрд╛ рдЙрддреНрдкрд╛рдж 1 рд╣реИ, рдпрд╛рдиреА рдЧреБрдгрд╛рддреНрдордХ рд╡реНрдпреБрддреНрдХреНрд░рдо рддрддреНрд╡ред рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо [6] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рддрд╛ рд╣реВрдВред
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (MultInverseModN)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (iter-a-prev a r-prev r)
(рдЕрдЧрд░ (> = 1 r) a (let * ([r-next (рд╢реЗрд╖ r-prev r))
[рдХреНрд╖ (рднрд╛рдЧрдлрд▓ r-prev r)]
[a-next-(a-prev (* qa))]
(iter a-next r r-next)))
)
(рджреЛ ([рдкрд░рд┐рдгрд╛рдо 0 1 na)]) (рдпрджрд┐ (<0 рдкрд░рд┐рдгрд╛рдо) рдкрд░рд┐рдгрд╛рдо (+ n рдкрд░рд┐рдгрд╛рдо))
)
(рдбреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (MultInverseModN e Fi))
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди
RSA рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк 0 рд╕реЗ n-1 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ M рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпреЗ рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЗрдВ M рдХреЛ рдкрд╛рд╡рд░ рдИ рдореЗрдВ рд░реЗрдЬрд┐рдВрдЧ рд░рд┐рдВрдЧ рдореЛрдбреБрд▓реЛ n рдореЗрдВ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдЯреВ рдкрд╛рд╡рд░ d рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЧреБрдгрди рд╕рд╛рд╣рдЪрд░реНрдп рд╣реИ, рд╣рдо рд▓реЙрдЧ (x) рд╕рдВрдЪрд╛рд▓рди [7] рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░ x рддрдХ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (PowerModN рдЕрд╕рд╛рдорд╛рдиреНрдп)
(рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдВрдЪрд╛рдпрдХ рдЧреБрдгрдХ рд╢рдХреНрддрд┐)
(рдпрджрд┐
(= рд╢рдХреНрддрд┐ реж)
рдмрд┐рдЬрд▓реА рд╕рдВрдЪрдпрдХ рдпрдВрддреНрд░
(рдЬрд╛рдиреЗ
((new_accumulator (рдпрджрд┐ (рднреА? рд╢рдХреНрддрд┐) рд╕рдВрдЪрд╛рдпрдХ) (рд╢реЗрд╖ (* рд╕рдВрдЪрд╛рдпрдХ рдЧреБрдгрдХ) n)))
(iter new_accumulator (* рдЧреБрдгрдХ рдЧреБрдгрдХ) (рднрд╛рдЧрдлрд▓ рд╢рдХреНрддрд┐ 2))
)
)
)
(iter 1 ab)
)
рдЯреЗрд╕реНрдЯ рдХреЗрд╕
рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдПрдХ рдЬреЛрдбрд╝реА (250483 31) рд╣реИ, рдирд┐рдЬреА рдХреБрдВрдЬреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ (250483 32191)ред рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрджреЗрд╢ 123456 133240 рд╣реИред
рд╕рдВрджрд░реНрдн
- en.wikipedia.org/wiki/RSA
- en.wikipedia.org/wiki/Integer_factorization
- en.wikipedia.org/wiki/Euler%27s_totient_function
- en.wikipedia.org/wiki/Euclidean_algorithm
- en.wikipedia.org/wiki/Modular_arithmetic
- en.wikipedia.org/wiki/Extended_Euclidean_algorithm
- en.wikipedia.org/wiki/Exponentiation_by_squaring