대표적인 공개키 알고리즘
큰 소수의 소인수 분해가 어려운 부분을 이용
공개키는 n, e
개인키는 n, d로 정의한다
n은 임의의 두 소수 p, q를 이용해 만듬
n = p * q
ϕ(n) = (p-1)(q-1)
ϕ는 오일러 파이함수
오일러 파이 함수는
ϕ(n)이라고 했을 때
1~n중에 n과 서로소인 수의 개수를 반환한다
서로소란 두 수의 공약수가 1이외에 존재하지 않는 수을 의미
4와 12는
4 -> {1, 2, 4}
12 -> {1, 2, 3, 4, 6, 12}
1이외에 2, 4 공약수가 존재함으로 서로소가 아님
3과 8
3 -> {1, 3}
8 -> {1, 2, 4, 8}
1 이외에는 공약수가 존재하지 않음으로 3과 8은 서로소
오일러파이 함수 예시
ex) ϕ(6)
1~6중에 6과 서로소인 자연수의 개수
6 -> {1, 2, 3, 6}
1~6까지 중 1이외에 6의 약수와 겹치 않는, 즉 서로소는 1, 5 이 둘만 존재
ϕ(6) = 2
오일러 파이 함수의 대표적인 항등식
ϕ(mn) = ϕ(m) * ϕ(n)
p가 소수 라면
ϕ(p) = p-1
이 두 가지 성질 때문에
두 소수 p, q로 만들어진 n의
ϕ(n) = (p-1)(q-1)이 성립
공개키에 쓰일 e는
1<e<ϕ(n) 중에 서로소인 수를 사용
ex) p=7, q=2
n = 7*2 = 14
ϕ(14) = (7-1)(2-1) = 6
1<e<6 에 포함되는 소수는 2, 3, 5가있음
개인키에 쓰일 d는
d=e^-1 mod ϕ(n)
/*(e*d) mod ϕ(n) =1을 만족하는 d중 하나*/
ex) 이전에 쓰인 p, q, n을 그대로 사용하고
e로 쓸 수 있는 2, 3, 5중 5를 사용한다면
(5*d) mod 6 =1을 만족하는 d로 11을 사용
이제 공개키 개인키에 쓰일 n, e, d를 모두 구했음
공개키 (n, e) = (14, 5)
개인키 (n, d) = (14, 11)
평문을 M, 암호문을 C라고한다면
암호화를 할 때
C = M^e mod n
으로 암호화를 하고
복호화를 할 때는
페르마의 소정리로인해
/*p가 소수이고 a가 p와 서로소인 정수일 때
a^(p-1)≡1(mod p)*/
C = M^e mod n이 성립한다면
M = C^d mod n 역시 성립한다는 것을 이용하여
복호화를 진행한다
M을 3이라고 한다면
C = 3^5 mod 14 = 5
M = 5^11 mod 14 = 3
여기선 예시로 작은 소수를 사용하였지만 실제로는
매우 큰 소수를 사용 함으로서
n와 e의 값을 알더라도 d를 구하기 쉽지않다
'Crypto' 카테고리의 다른 글
Side Channel Attack(부채널 공격) (0) | 2020.05.04 |
---|---|
블록 암호 운용 모드 (0) | 2020.05.03 |
블록 암호의 원리 (0) | 2020.05.03 |
블록암호 VS 스트림 암호 (0) | 2020.05.02 |
의사 난수 생성의 원리 (0) | 2020.05.02 |