рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдЖрд░рдПрд╕рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди

рдЬрдм рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╕реАрдЦрд╛, рддреЛ рдпрд╣ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд░рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рдерд╛ред рдЕрдм рдореИрдВ рдкрдврд╝рд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЫрд╛рддреНрд░ рдореЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмреЛрд░ рд╣реЛрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ 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 рд╣реИред

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


  1. en.wikipedia.org/wiki/RSA
  2. en.wikipedia.org/wiki/Integer_factorization
  3. en.wikipedia.org/wiki/Euler%27s_totient_function
  4. en.wikipedia.org/wiki/Euclidean_algorithm
  5. en.wikipedia.org/wiki/Modular_arithmetic
  6. en.wikipedia.org/wiki/Extended_Euclidean_algorithm
  7. en.wikipedia.org/wiki/Exponentiation_by_squaring

Source: https://habr.com/ru/post/In119637/


All Articles