RSA 암호
1. 공개키 암호화 시스템
공개키 암호화 시스템은 암/복호화에 공개 키(public key)와 개인 키(private key) 2개 종류 키를 사용하는 방식입니다. 공개 키는 문자를 암호화하는 데 사용되는 키로, 문자를 암호화하려는 모든 사람들에게 공개되는 키입니다. 반대로 개인 키는 공개 키로 암호화된 문자를 복호화하는 데 사용되는 키로, 복호화를 하는 사용자만 아는 비공개 키입니다.
2. RSA 암호
RSA 암호 시스템은 공개키 암호 시스템의 하나로, Rivest, Shamir, Adleman 3명에 의해 개발되었습니다. RSA 암호 시스템은 두 개의 큰 소수를 곱하여 만든 합성수는 소인수분해하기 어렵다는 성질을 이용하였습니다. RSA는 현시대에 인터넷 보안, 디지털 서명 등 영역에서 사용되고 있습니다.
2.1. RSA 암호화 원리
RSA 암호화의 동작 원리는 다음과 같습니다.
- 공개키 생성
① 임의의 서로 다른 큰 소수 p, q를 선택합니다.
② p와 q를 곱하여 합성수 n을 만들고, n의 오일러 함수(∮(n) = (p - 1) * (q - 1))와 서로소인 임의의 정수 e를 만듭니다.
③ 공개키는 (n, e)로 정의합니다. - 개인키 생성
① de ≡ 1 (mod ∮(n))을 만족하는 e의 모듈러 역수 d를 정의합니다.
② 개인키는 (n, d)로 정의합니다. - 문자열 암호화
① 암호화하고자 하는 임의의 문자열을 M이라고 정의하고, 공개키의 n과 e를 사용합니다.
② M의 각 문자를 두 자리 숫자로 변환합니다. (ASCII 코드나 유니코드 사용)
③ 변환된 문자열을 n을 초과하지 않는 가장 큰 블록으로 나누어 준 뒤, 각 블록을 mi로 정의합니다.
④ 각 블록에 대해 mie (mod n)를 적용하여 나온 결과를 ci로 정의합니다.
⑤ 각 블록을 연결하여 M의 암호화를 종료하고, 이 값을 C라고 정의합니다. - 문자열 복호화
① 복호화하고자 하는 임의의 문자열을 C라고 정의하고, 개인키의 n과 d를 사용합니다.
② C를 n을 초과하지 않는 가장 큰 블록으로 나누어 준 뒤, 각 블록을 ci로 정의합니다.
③ d는 e의 모듈로 역수로 정의하였으므로 아래 과정을 통해 간단하게 복호화가 가능합니다.
$$\begin{align}
c_i^d
& \equiv (m_i^e)^d \pmod{n} \\
& \equiv m^{1 + k(p - 1)(q - 1)} \pmod{n} \\
& \equiv m(m^{p - 1})^{(q - 1)k} \pmod{n} \equiv m \pmod{p} (\because 페르마의 작은 정리, m^{p - 1} \equiv 1 \pmod{p} \\
& \equiv m(m^{q - 1})^{(p - 1)k} \pmod{n} \equiv m \pmod{q} (\because 페르마의 작은 정리, m^{q - 1} \equiv 1 \pmod{q} \\
& \equiv m \pmod{pq} (∵ p, q는 서로소) \\
& \equiv m \pmod{n} (∵ n = pq) \\
& \therefore m \equiv c_i^d \pmod{n} \\
\end{align}$$
연관 게시글
[이산수학] 정수론
정수론 1. 정수론 정수론은 암호학, 알고리즘 이론 등에서 사용되는 정수에 관한 수학적인 구조와 성질을 연구합니다. 2. 나눗셈(Division) 2.1. 기본 개념 나눗셈은 앞으로 다룰 소수, 최대공약수,
brightchords.tistory.com
참조
'IT' 카테고리의 다른 글
[자료구조] 자료구조와 알고리즘 (0) | 2024.04.21 |
---|---|
[이산수학] 유클리드 호제법(Euclidean algorithm) (0) | 2024.04.08 |
[이산수학] 베주의 항등식(Bezout's identity) (2) | 2024.04.07 |
[이산수학] 정수론 (0) | 2024.04.06 |
[이산수학] 프림(Prim) 알고리즘 (0) | 2024.04.05 |