λ°μν
νλ₯ μ κ΄μ μμμ μμ νλ³
Q. μμ°μ nμ μ λ ₯λ°μμ, nμ΄ μμμΈμ§ μλμ§ νλ¨νλ νλ‘κ·Έλ¨μμ,
- κ²°μ λ‘ μ μκ³ λ¦¬μ¦μ λμλλ, 무μμ μκ³ λ¦¬μ¦μ κ°λ
- Deterministric Algorithm
- λμΌν μ λ ₯μ λνμ¬, λ§€λ² λμΌν κ²°κ³Όλ₯Ό μΆλ ₯νλ ννμ μκ³ λ¦¬μ¦μΌλ‘, νλ₯ κ³Ό 무μμμ±μ΄ κ°μ νμ§ μμ
- ex. μμ°μ Nμ΄ μμμΈμ§ νλ³νκΈ° μν΄, 2,3,4, - - - 루νΈNκΉμ§μ μλ‘ λλ λ΄
- Randomized Algorithm
- νλ₯ κ³Ό 무μμμ±μ΄ κ°μ ν¨μΌλ‘μ¨ λμΌν μ λ ₯μ λν΄μλ λ€λ₯Έ κ²°κ³Όκ° λνλ μλ μλ ννμ μκ³ λ¦¬μ¦
- ex. Miller-Rabin μμ νλ³λ², Pollard-Rho μκ³ λ¦¬μ¦μ μ΄μ©ν μμΈμλΆν΄
- Deterministric Algorithm
μ€μΌλ‘ μ λ¦¬λ‘ μ»μ μ μλ μμμ νΉμ±
→ Miller-Rabin μμ νλ³λ²
Miller-Rabin μμ νλ³λ²
κ²°λ‘ μ λ°λμ μ±λ¦½ν¨!
++ μ‘°κ±΄μ΄ μ±λ¦½νμ§ μμ → λ°λμ ν©μ±μ, 쑰건μ λ§μ‘±νλ©΄ μμμΌ κ°λ₯μ±μ΄ μλ κ²
- Nμ 1μ λΊλ€.
- μνλ λ°μ μ κ³±μΌλ‘ νννλ€. → sμ dλ₯Ό ꡬν μ μμ
- μ κ²°λ‘ μ 1,2 쑰건μ νμΈνλ€.
def MR_prime(N, a):
if N <= 1: return 'DEFINITELY NOT PRIME'
if N == 2: return 'Maybe Prime'
if N % 2 == 0: return 'DEFINITELY NOT PRIME'
# N-1μ d * 2^sλ‘ νν
s = 0
d = N - 1
while d % 2 == 0:
s += 1
d //= 2
# a^d ≡ 1 (mod N)μΈμ§ νμΈ
if pow(a, d, N) == 1:
return 'Maybe Prime'
# a^(d*2^r) ≡ -1 (mod N)μΈμ§ νμΈ (0 ≤ r < s)
for r in range(s):
if pow(a, 2**r * d, N) == N - 1:
return 'Maybe Prime'
return 'DEFINITELY NOT PRIME'
μ½μ νμκ³Ό μμΈμλΆν΄ λ¬Έμ
- RSA Cryptosystem - μμΈμλΆν΄ λ¬Έμ μ λν΄ν¨μ κΈ°λ°
- Diffie Hellman Protocol - μ΄μ°λ‘κ·Έ λ¬Έμ μ λν΄ν¨μ κΈ°λ°
Pollard-Rho Algorithm
- λλ¨Έμ§ μ°μ°μ μ΄μ©ν΄ μ»μ Nμ λν μν κ·Έλνμμ μΆλ°
- μν κ·Έλνμ λμ μ¬μ΄ μ°¨λ₯Ό DλΌκ³ ν λ GCD(D,N)μ κ³μ°
- μ΅λ곡μ½μκ° 1λ³΄λ€ ν΄ κ²½μ° κ·Έκ²μ μ½μλ‘ μ·¨ν¨
def GCD(a,b):
if (a == 0) :
return b
if (b == 0) :
return a
if (a >= b) :
return GCD(a%b, b)
else:
return GCD(a, b%a)
def g(x):
return (x**2 + 1)
def PR(N, x1, x2):
while (1):
x1 = g(x1) % N
x2 = g(g(x2)) % N
if (x1 == x2):
return 'FAIL'
check_gcd = GCD(abs(x1-x2), N)
if (check_gcd >1):
return check_gcd
μμΌ λ¬Έμ μ 무μμμ±
Q. κ΅μ€μ Nλͺ μ νμμ΄ μμ λ, μμΌμ΄ κ°μ κ²½μ°κ° μ‘΄μ¬ν νλ₯ μ?
- μ§λ¨ λ΄ μμ μκ° μ λλΌλ, μμΌμ΄ κ°μ μΆ©λ μμ μ½κ² μ°Ύμ μ μμ
- ν΄μ± λ± μνΈ μ²΄κ³μμμ μμΌ κ³΅κ²© κ°λ₯μ±
- 1μ κ°κΉμ΄ νλ₯ μ λ°λ³΅μ μΌλ‘ κ³±νλ κ³Όμ μμ κΈκ²©ν 0μ κ°κΉμμ§λ νλ₯
- ν릴 κ°λ₯μ±μ΄ λμ μκ³ λ¦¬μ¦λ λ°λ³΅μ μΌλ‘ μλνλ€λ©΄? → λ§μ νλ₯ μ λμΌ μ μμ
무μμνλ₯Ό μ΄μ©ν λ¬Έμ ν΄κ²°
κ²½μ°λ₯Ό μ°ΎκΈ° μν΄ λ무 λ§μ κ²½μ°μ μ νμμ΄ νμν κ²½μ°,
→ ν릴 κ°λ₯μ±μ΄ λμ μκ³ λ¦¬μ¦λ, λ°λ³΅μ μΌλ‘ μλνλ©΄ λμ νλ₯ λ‘ μ λ΅μ λμΆν΄λΌ μ μμ
- 무μμλ‘ μ‘°κ±΄μ μΌλΆλ₯Ό λ§μ‘±νλ κ²½μ°λ₯Ό μ°Ύκ³
- ν΄λΉ κ²½μ°κ° μ 체 쑰건μ λ§μ‘±μν€λμ§ νμΈ
λ°μν