8. RSA 암호화 (RSA Encryption Algorithm)
RSA 암호화는 대표적인 공개키 방식 암호화 알고리즘으로, 개발자 세 명의 이름을 따서 만들어졌다. (즉, Really Secure Algorithm 따위의 멋있는 약자가 아니라, 김이박 암호화 같은 이름이다.)
RSA 암호화는 공개 키 e,n과, 비공개 키 d을 사용한다.
e는 암호화Encryption, d는 복호화Decryption의 약자이다. 복호화하고자 하는 이만 비공개 키를 알고 있어도 되는 특성 때문에, d는 개인 키라고도 불린다.
키 만들기
- 먼저, 두 개의 큰 소수 p,q를 준비한다. 이때, 암호화할 메시지 m보다 p가 커야 한다.
(보통 큰 홀수를 하나 만들어서, 2씩 더해가면서 소수를 찾는다.) - (p−1),(q−1)과 각각 서로소인 정수 e를 얻는다. (보통 소수인 3(0x11)이나 65537(0x10001)을 사용한다.)
- ed \mod (p-1)(q-1) = 1인 d를 찾는다. 즉, d는 e (\mod (p-1)(q-1))의 곱의 역원이다.
- n=p\cdot q를 구한다. 보통 RSA 암호화에서 키의 크기를 논하면 n의 크기를 말한다.
- 이제 e,n은 공개하고, p,q는 파기한다.
e는 암호화 d는 복호화에 사용되며, 두 과정 모두 n역시 필요로 한다. p,q는 키 생성 과정에서만 사용되고 이후에는 쓸모가 없으므로 키 생성 후 파기한다.
암호화/복호화
m' = \text{rem}(m^e, n)
m = \text{rem}((m')^d, n)
증명
암호화한 메세지 m'과 원래 메세지 m이 어떻게 똑같은지 증명해보자.
페르마의 소정리에 의해, 어떤 소수 p의 오일러 피 함수 \phi(p)는 p-1이다. 즉, n = pq이므로, \phi(n) = (p-1)(q-1)이다.
ed=r(p-1)(q-1)+1 = r\phi(n)+1이다. (r은 어떤 정수)
mr \mod n = (m\mod n)(r\mod n) \mod n, m^r \mod n = (m \mod n)^r mod n이다.
그러므로,
\begin{align*}m' &= m^d \mod n = (m^e \mod n)^d \mod n \\ &= (m^e)^d \mod n = m^{ed} \mod n\\ &= m^{r\phi(n)+1} \mod n = (m^{\phi(n)} \mod n)^r \cdot m \mod n\\ &= 1^r\cdot m \mod n = m\end{align*}
예제
m = 11을 RSA 암호화 해보자.
p = 7, q = 13, e = 5으로 정하자. n = pq = 91이 된다.
5\cdot d \mod (6\cdot 12) = 1인 d를 확장된 유클리드 호제법으로 구해보자.
5, 72의 최대공약수를 구하면 된다.
i | x | y | r | q |
0 | 1 | 0 | 72 | |
1 | 0 | 1 | 5 | 14 |
2 | 1 | -14 | 2 | 2 |
3 | -2 | 29 | 1 | 2 |
0 |
5,72의 최대 공약수는 -2\cdot 72 + 29\cdot 5 = 1이다.
즉, d=29이다.
이제 e, n을 활용한 암호화다.
\begin{align*}m' &= m^e \mod n\\ &=11^5 \mod 91\\ &=161051 \mod 91 = 72 \end{align*}
이제 p,q는 파기하고, e=5, n=91을 공개한다. 그리고 복호화를 할 사람에게만 개인키인 d=29를 제공한다.
복호화를 해보자.
\begin{align*} m &= (m')^d \mod n\\ &= 72^29 \mod 91\end{align*}
72^29는 컴퓨터로 계산하기엔 엄청나게 큰 수다. 이를 간단히 계산하는 방법이 있으나 본 글에서는 다루지 않겠다.
알아보고 싶다면, 이 글의 2문단 아래쪽을 참고하면 된다.
계산 결과는 11이 된다.
'학부 수업 > 이산수학' 카테고리의 다른 글
10. 매칭 알고리즘 (Matching Algorithm) (1) | 2020.10.18 |
---|---|
9. 그래프 이론과 P-NP 문제 (Graph Theory and P-NP Problem) (2) | 2020.10.18 |
7. 정수론: 오일러의 피 함수과 페르마의 소정리 (Number Theory: Euler's Phi Function and Fermat's Little Theorem) (2) | 2020.10.17 |
6. 정수론: 암호화, 복호화 (Number Theory: Encryption and Decryption) (2) | 2020.10.17 |
5. 정수론: 서로소와 합동식 (Number Theory: Congruent and Relatively Prime) (2) | 2020.10.17 |
댓글
이 글 공유하기
다른 글
-
10. 매칭 알고리즘 (Matching Algorithm)
10. 매칭 알고리즘 (Matching Algorithm)
2020.10.18 -
9. 그래프 이론과 P-NP 문제 (Graph Theory and P-NP Problem)
9. 그래프 이론과 P-NP 문제 (Graph Theory and P-NP Problem)
2020.10.18 -
7. 정수론: 오일러의 피 함수과 페르마의 소정리 (Number Theory: Euler's Phi Function and Fermat's Little Theorem)
7. 정수론: 오일러의 피 함수과 페르마의 소정리 (Number Theory: Euler's Phi Function and Fermat's Little Theorem)
2020.10.17 -
6. 정수론: 암호화, 복호화 (Number Theory: Encryption and Decryption)
6. 정수론: 암호화, 복호화 (Number Theory: Encryption and Decryption)
2020.10.17
댓글을 사용할 수 없습니다.