Y Enokida
January 23, 2020
810

# RSA 最速理解チャレンジ / Introduction to RSA

January 23, 2020

## Transcript

2. ### ࠓ೔΍Δ͜ͱ Introduction to Algorithm 31 ষͷͭ·Έ৯͍ ެ։ݤ҉߸ͷख๏ͷͻͱͭͰ͋ΔɼRSA ҉߸ʹ͍ͭͯղઆ RSA ҉߸ͱ͸Ͳ͏͍͏΋ͷ͔

RSA ҉߸͸ͳͥಈ͘ͷ͔ ্هΛ࿩͢ͷʹඞཁͳ਺ֶͷ࿩ʢ࠷௿ݶʣ ຊʹ͸܈࿦ͷ࿩͕ॻ͍ͯ͋Γ·͕͢ɼࠓ೔ͷ࿩ʹ͸Ұ੾ग़͠·ͤΜ εϥΠυ͸ߴߍ਺ֶͷൣғͰॻ͖·ͨ͠ େֶ਺ֶ͕ग़͖ͯͨΒ໦ͷԼʹຒΊͯ΋ΒͬͯߏΘͳ͍Αʂ
3. ### ެ։ݤ҉߸ํࣜ ϞνϕɿϝοηʔδΛ҆શʹ҉߸Խͯ͠ૹͬͨΓ͍ͨ͠ ҎԼͰ͸ϝοηʔδ͸શ෦੔਺ͩͱͯ͠औΓѻ͏ ܭࢉػ্Ͱ͸ϝοηʔδ͸શͯ 0 ͔ 1 ͷϏοτྻʢ2 ਐ਺ʣ ɽ2

ਐ਺Λ 10 ਐ਺ʹ໭ͯ͠ߟ͑Ε͹࣮࣭ͨͩͷ੔਺ Dɿϝοηʔδʢ੔਺ʣશମͷू߹ ͦΕͧΕͷਓʢྫɿAliceʣެ։ݤ PA ͱൿີݤ SA Λ͍࣋ͬͯΔ ͖΋ͪɿެ։ݤ͸ଞͷਓͱڞ༗͢Δɽൿີݤ͸ઈରʹൿີɽ PA ΋ SA ΋ɼD ͷཁૉΛೖྗ͢Δͱ D ͷཁૉΛग़ྗ͢Δؔ਺ ͔ͭɼPA ͱ SA ʹ͸࣍ͷؔ܎͕͋ΔΑ͏ʹ͢Δ ೚ҙͷ M 2 D ʹରͯ͠ PA(SA(M)) = M ೚ҙͷ M 2 D ʹରͯ͠ SA(PA(M)) = M ཁ੥ Alice Ҏ֎͸ SA Λ؆୯ʹܭࢉͰ͖ͳ͍
4. ### ެ։ݤ҉߸ͰͰ͖Δ͜ͱɿػີ௨৴ Bob ͸ Alice ʹൿີͷϝοηʔδΛૹΓ͍ͨ Bob ͸ެ։ݤ PA Λ࢖ͬͯ҉߸ PA("޷͖Ͱ͢")

= 790397321 Λͭ͘Δ Alice ͸ൿີݤ SA Λ࢖͑͹ϝοηʔδ SA(790397321) = "޷͖Ͱ͢" ΛಡΊΔ ൿີݤ͸ Alice Ҏ֎஌Βͳ͍ͷͰɼଞͷਓ͸಺༰͕ಡΊͳ͍
5. ### ެ։ݤ҉߸ͰͰ͖Δ͜ͱɿॺ໊ Alice ͸ Bob ʹϝοηʔδΛ఻͑Δࡍɼ ʮ͜Ε͸ࣗ෼͕ૹͬͨ΋ͷ ͩʯͱ͍͏อূΛ͍ͨ͠ Alice ͸ൿີݤ SA

Λ࢖ͬͯॺ໊ SA("͝ΊΜͳ͍͞ ΞϦεΑΓ") = 6796876912 Λͭ͘Γɼϝο ηʔδͱηοτʹͯ͠ૹΔʀ ("͝ΊΜͳ͍͞ ΞϦεΑΓ"; 6796876912) ϝοηʔδͷ಺༰͕ຊ౰ʹ Alice ͔Βͷ΋ͷ͔νΣοΫ͢Δʹ͸ɼॺ ໊෦෼Λެ։ݤʹ௨ͤ͹ྑ͍ʀ PA(6796876912) = "͝ΊΜͳ͍͞ ΞϦεΑΓ" SA ͕࢖͑Δͷ͸ Alice ͚ͩͳͷͰɼຊ౰ʹ͜ͷϝοηʔδ͸ Alice ͕ૹ͖ͬͯͨͱΘ͔Δ
6. ### mod ܭࢉͷ෮श a mod p ͱॻ͍ͨΒʮa Λ p Ͱׂͬͨ͋·Γʯͷ͜ͱ ͚ͩ͜͜ͷه๏ɽଞͰஅΓͳ͘࢖Θͳ͍΄͏͕͍͍Ͱ͢ɽ

a ͸ෛͷ਺΋͋ΓಘΔ͕ɼͦͷ৔߹͸ʮ͍͍ײ͡ʹ΍Δʯ ྫɿ5 mod 3 = 2ɼ`1 mod 3 = 2 ʮ5 Λ 3 Ͱׂͬͨ͋·Γʯͱ͸ɼ ʮ5 ͔Β͸͡Ίͯ 3 ͣͭҾ͍͍͖ͯɼ 0 Ҏ্ 3 ະຬʹͳͬͨΒࢭ·Εʯ ʮ`1 Λ 3 Ͱׂͬͨ͋·Γʯͱ͸ɼ ʮ`1 ͔Β͸͡Ίͯ 3 ͣͭ଍͍ͯ͠ ͖ɼ0 Ҏ্ 3 ະຬʹͳͬͨΒࢭ·Εʯ a ” b mod p ͱॻ͍ͨΒʮa Λ p Ͱׂͬͨ͋·Γͱɼb Λ p Ͱ ׂͬͨ͋·Γ͕౳͍͠ʯͱ͍͏͜ͱ (a mod p) + (b mod p) ” a + b mod p (a mod p) ` (b mod p) ” a ` b mod p (a mod p) ´ (b mod p) ” a ´ b mod p ҆қʹׂΓࢉΛ͠Α͏ͱ͢Δͱ΍͚Ͳ͢Δ
7. ### ࠓ೔͔ΒͰ͖Δ RSA ҉߸ͷ࡞Γํ p; q Λ૬ҟͳΔɼͰ͖Δ͚ͩେ͖͍ૉ਺ͱ͢Δɽ ͦΜͳ౎߹ͷྑ͍ૉ਺͸;͗͠ͳ͔ͪΒ 1 ͰΈ͚ͭΔɽ n

= pqɼz = (p ` 1)(q ` 1) Λܭࢉ͢Δɽ e Λɼz ͱޓ͍ʹૉͳɼখ͍͞ح਺ͱ͢Δɽ de ” 1 mod z Λॆͨ͢Α͏ͳ d Λܭࢉ͢Δɽୠ͠ɼ0 » d < z ͱͳΔΑ͏ʹ͢Δ͜ͱɽ ;͗͠ͳ͔ͪΒ 2 ʹΑΓɼ͜ͷΑ͏ͳ d ͸ͨͩͻͱͭʹܾ·Δɽ P Λ P (M) = Me mod n ͱఆΊΔɽ S Λ S(C) = Cd mod n ͱఆΊΔɽ ओு P Λެ։ݤɼS Λൿີݤͱͯ͠ެ։ݤ҉߸ํࣜʹΑΔ௨৴͕Ͱ͖Δ
8. ### ఆཧ ೚ҙͷ M 2 D ʹରͯ͠ɼM = S(P (M)) =

P (S(M))ɽ ূ໌ ·ͣɼS(P (M)) = P (S(M)) ” Med mod n Ͱ͋ΔɽͳͷͰ ͋ͱ͸ Med ” M mod n Λࣔͤ͹ྑ͍ɽ ҎԼɼMed ” M mod p Λࣔ͢ɽM ” 0 mod p ͳΒࣗ໌ͳͷ Ͱͦ͏Ͱͳ͍ͱ͢Δɽ de ” 1 mod z ͳͷͰɼ͋Δ੔਺ k ͕ଘࡏͯ͠ɼde = 1 + kz ͕ ੒Γཱͭɽ Mde ” M1+kz ” M(Mkz) ” M((Mp`1)k(q`1)) mod ͱ͔ͬͯΒֻ͚ࢉͯ͠΋ɼֻ͚ࢉ͔ͯ͠Β mod ͱͬͯ΋݁Ռ͸ มΘΒͳ͍ͷͰɼM((Mp`1)k(q`1)) ” M((Mp`1 mod p)k(q`1)) mod pɽ ;͗͠ͳ͔ͪΒ 3 Ͱ Mp`1 ” 1 mod p ʹͳΔͷͰɼ্ͷࣜ͸݁ہ M((1)k(q`1)) ” M mod p ʹͻͱ͍͠ɽ ಉ༷ʹɼMed ” M mod q Ͱ͋Δɽ ͜ͷ 2 ͭͱ;͗͠ͳ͔ͪΒ 4 ͔ΒɼMed ” M mod n ͕ग़Δɽ
9. ### ࠓ೔͔ΒͰ͖Δ RSA ҉߸ͷഁΓํ ެ։ݤͷ৘ใ (e; n) ͸ެ։͞Ε͍ͯΔ ൿີݤͷ৘ใ (d; n)

Λ౪Ί͹ѱ͞͠์୊ ҉߸ͷ࡞Γํ͔Βɼn ΛҼ਺෼ղͯ͠ p ͱ q ͕Θ͔Ε͹ൿີݤΛ෮ ݩͰ͖ΔͷͰѱ͞͠์୊ RSA ҉߸͕҆શͱ͞ΕΔॴҎ ڊେͳ਺ࣈͷҼ਺෼ղ͸ͱͯ΋೉͍͠ n ͸ڊେʹͳΔΑ͏ʹઃܭ͢Δ n ΛҼ਺෼ղ͢ΔҎ֎ʹ RSA ҉߸Λղ͚ͦ͏ͳํ๏͸ݱࡏͰ΋ݟ౰ ͍ͨͬͯͳ͍
10. ### ͜Ε͔Βɿ;͗͠ͳ͔ͪΒͷղઆΛ͠·͢ ;͗͠ͳ͔ͪΒ 1ɿେ͖͍ૉ਺Λݟ͚ͭΔํ๏ ;͗͠ͳ͔ͪΒ 2ɿe ͱ z ͕ޓ͍ʹૉͳࣗવ਺ͷͱ͖ɼde ” 1

mod z ͱͳΔΑ͏ͳ d(0 » d < z) ͕ͨͩͻͱͭʹܾ·Δ͜ͱ ;͗͠ͳ͔ͪΒ 3ɿૉ਺ p ʹର͠ɼM ͕ p ͷഒ਺Ͱͳ͍ͳΒ Mp`1 ” 1 mod p ͱͳΔ͜ͱ ;͗͠ͳ͔ͪΒ 4ɿૉ਺ p ͱૉ਺ q ͕͋Δͱ͖ʹɼx ” y mod p ͔ͭ x ” y mod q ͳΒ x ” y mod pq ͱͳΔ͜ͱ
11. ### ;͗͠ͳ͔ͪΒ 2 e ͕ z ͱޓ͍ʹૉͳࣗવ਺ͷͱ͖ɼde ” 1 mod z

ͱͳΔΑ͏ͳ d(0 » d < z) ͕ͨͩͻͱͭʹܾ·Δɽ ʢ൓ʣྫɿe = 2ɼz = 4 ͳΒɼ͜ͷΑ͏ͳ d ͸ଘࡏ͠ͳ͍ɽ ݴ͍׵͑Δ de ” 1 mod z ͱ͸ɼ͋Δࣗવ਺ ‘ ͕͋ͬͯɼed + z‘ = 1 ͱ͍ ͏͜ͱɽ ;͗͠ͳ͔ͪΒͷݴ͍׵͑ɿe ͕ z ͱޓ͍ʹૉͷͱ͖ɼ͋Δࣗવ਺ ‘ ͱ d ͕͋ͬͯɼed + z‘ = 1 ͔ͭ 0 » d < z ͱͳΔɽ গ͠Ұൠతͳ໰୊Λߟ͑Δ eɼz Λޓ͍ʹૉͳࣗવ਺ɼ‘ɼd Λม਺ͱ͢Δɽed + z‘ = 1 ͱͳ ΔΑ͏ͳ੔਺ ‘ɼd ͷ૊ΛશͯٻΊΑɽ
12. ### ه߸͕͖͍ͭͷͰ۩ମతʹͯ͠ΈΔ 7d + 5‘ = 1 ͷ੔਺ղΛશͯٻΊΑɽ ղ͖ํͷํ਑ʀEuclid ͷޓআ๏ΛٯʹͨͲΔ 7

ͱ 5 ͷ࠷େެ໿਺͕ 1 Ͱ͋Δ͜ͱΛ Euclid ͷޓআ๏Ͱ͔֬ΊΔ 7 = 5 ˜ 1 + 2 5 = 2 ˜ 2 + 1 ͜ΕΛʮٯʹͨͲΔʯ 5 = 2 ˜ 2 + 1 ͳͷͰ 1 = 5 ` 2 ˜ 2 7 = 5 ˜ 1 + 2 ͳͷͰ 2 = 7 ` 5 ˜ 1 ͔ͩΒɼ1 = 5 ` 2 ˜ 2 = 5 ` 2 ˜ (7 ` 5 ˜ 1) = 5 ˜ 3 ` 7 ˜ 2 ͕ͨͬͯ͠ɼ౴͑ͷͻͱͭ͸ x = `2; y = 3ɽ ౴͑Λશͯྻڍͯ͠ΈΔͱɼd ͸ 5 ͣͭɼ‘ ͸ 7 ͣͭมΘΔ ... d = `7; ‘ = 10 d = `2; ‘ = 3 d = 3; ‘ = `4 ...
13. ### ۩ମతͳ਺ࣈΛͦͷ··ه߸ʹͯ͠ΈΔ ed + z‘ = 1 ͷ੔਺ղΛશͯٻΊΑɽ ղ͖ํͷํ਑ʀEuclid ͷޓআ๏ΛٯʹͨͲΔ e

ͱ z ͷ࠷େެ໿਺͕ 1 Ͱ͋Δ͜ͱΛ Euclid ͷޓআ๏Ͱ͔֬ΊΔ ... ͜ΕΛʮٯʹͨͲΔʯ ... ͳͷͰ ... ... ͳͷͰ ... ͔ͩΒɼ... ͕ͨͬͯ͠ɼ౴͑ͷͻͱͭ͸ d =??; ‘ =???ɽ ౴͑Λશͯྻڍͯ͠ΈΔͱɼd ͸ z ͣͭɼ‘ ͸ e ͣͭมΘΔ ... d =?? ` z; ‘ =??? + e d =??; ‘ =??? d =?? + z; ‘ =??? ` e ... ͱ͍͏͜ͱ͸ɼ0 » d < z ͱͳΔղ͕ͨͩͻͱͭ͋Δʂ
14. ### ;͗͠ͳ͔ͪΒ 3ʢϑΣϧϚʔͷখఆཧʣ ૉ਺ p ʹର͠ɼM ͕ p ͷഒ਺Ͱͳ͍ͳΒ Mp`1 ”

1 mod p ূ໌ M; 2M; 3M; ´ ´ ´ ; (p ` 1)M Λ p Ͱׂͬͨ͋·Γ͸શͯޓ͍ʹ૬ ҟͳΔɽ aM ” bM ͩͱ͢Δͱɼ(a ` b)M ͕ p ͰׂΓ੾ΕΔɽ ja ` bj < p ` 2 ͔ͭ p ͸ૉ਺ͳͷͰɼp = M ͱͳΔ͔͠ͳ͍͕ɼ ͜Ε͸ M ͕ p ͷഒ਺Ͱͳ͍͜ͱʹ൓͢Δɽ ͭ·ΓɼM; 2M; 3M; ´ ´ ´ ; (p ` 1)M Λ p ͰׂΔͱɼ͋·Γͱ͠ ͯ 1; 2; ´ ´ ´ ; p ` 1 ͕ͪΐ͏Ͳ 1 ճͣͭݱΕΔɽ ͳͷͰɼ (p ` 1)!Mp`1 = M ´ 2M ´ 3M ´ ´ ´ (p ` 1)M ” (p ` 1)! mod pɽ (p ` 1)! ͱ p ͸ޓ͍ʹૉͳͷͰɼ;͗͠ͳ͔ͪΒ 2 ʹΑͬͯ d((p ` 1)!) ” 1 mod p ͱͳΔΑ͏ͳ d ͕͋Δɽ (p ` 1)!Mp`1 ” (p ` 1)! mod p ͷ྆ล͔Β d Λ͔͚Ε͹ Mp`1 ” 1 mod p ΛಘΔɽ
15. ### ;͗͠ͳ͔ͪΒ 4ʢதࠃ৒༨ఆཧͷಛผͳܗʣ p; q Λૉ਺ͱ͢Δɽx ” y mod p ͔ͭ

x ” y mod q ͳΒ x ” y mod pqɽ આ໌ ঃΖʹɼ ʮmod p Λͱͬͨ਺ʯͱʮmod q Λͱͬͨ਺ʯΛฒ΂ͨɼ (a mod p; b mod q) ͱ͍͏ܗͷλϓϧΛߟ͑ΔɽҎԼࠨଆ͸ mod pɼӈଆ͸ mod q Λͱͬͯߟ͑Δɽ λϓϧಉ࢜ͷ଍͠ࢉΛ (a; x) + (b; y) = (a + b; x + y) ͱ΍Δ͜ ͱʹ͢Δɽ (1; 1) ͱ͍͏λϓϧΛͻͨ͢Β଍͠ଓ͚Δૢ࡞Λߟ͑Δɽ͢Δͱɼpq ݸ଍ͨ͠ͱ͜ΖͰ (0; 0) ʹͳΔɽ ྫɿp = 3,q = 5 ͱ͢Δɽ(1; 1)ɼ(2; 2)ɼ(0; 3)ɼ(1; 4)ɼ (2; 0)ɼʜɼ(2; 4)ɼ(0; 0) ͱɼ15 ճ໨Ͱ 0 ʹͳΔɽ ͜ͷ؍࡯͔Β (x; x) ͷ͜ͱΛ x mod pq ͷผͷ࢟ͱࢥ͑ͦ͏ɽ ٯʹɼx mod pq ͸ (x mod p; x mod q) ͱ຋༁Ͱ͖ͦ͏ɽ ͜ͷ૬ޓ຋༁͔Β;͗͠ͳ͔ͪΒ 4 ͕ग़Δɽ
16. ### ;͗͠ͳ͔ͪΒ 1ʢૉ਺൑ఆʣ 2n`1 ” 1 mod n ͳΒ n Λૉ਺ͱ൑ఆ

2n`1 6” 1 mod n ͳΒ n ͸߹੒਺ͱ൑ఆ ;͗͠ͳ͔ͪΒ 3ʮૉ਺ p ʹର͠ɼM ͕ p ͷഒ਺Ͱͳ͍ͳΒ Mp`1 ” 1 mod pʯΛࢥ͍ग़͢ ͍·ɼn ͸େ͖ͳૉ਺ͳͷͰɼಛʹ 2 ͸ n ͷഒ਺Ͱͳ͍ ͳͷͰɼn ͕ૉ਺ͳΒ͹ 2n`1 ” 1 mod n 2n`1 6” 1 mod n ͳΒ͹ n ͸߹੒਺ ஫ҙ ߹੒਺Λૉ਺ͩͱ൑ఆ͢ΔՄೳੑ͕͋Δ ૉ਺Λ߹੒਺ͩͱ൑ఆ͢Δ͜ͱ͸ͳ͍ ͔͠͠ɼؒҧ͑Δ֬཰͸ܦݧ্ඇৗʹ௿͍ ·ͨɼMiller-Rabin test ͱ͍͏վྑ൛΋͋Δ