핵심 요약
소수·모듈러 역원을 이용해 작은 RSA 키를 만들고 암호화·복호화를 계산합니다.
본문
나머지 연산과 모듈러 역원
a mod n은 a를 n으로 나눈 나머지다. ed ≡ 1 (mod m)은 곱 ed가 m으로 나누어 나머지 1을 남긴다는 뜻이다. d는 실수 1/e가 아니라 모듈러 곱셈 역원이다.
예를 들어 5 × 77 = 385 = 2 × 192 + 1이므로 77은 192를 법으로 한 5의 역원이다. 역원이 존재하려면 e와 법이 서로소여야 한다.
두 소수를 사용하는 키 생성
| 단계 | 계산 | 의미 |
|---|---|---|
| 1 | 서로 다른 소수 p, q 선택 | 비밀로 보호할 소수 |
| 2 | n = pq | 공개 모듈러스 |
| 3 | φ(n) = (p−1)(q−1) | 서로 다른 두 소수의 곱에 대한 식 |
| 4 | 1 < e < φ(n), gcd(e, φ(n)) = 1 | 공개 지수 선택 |
| 5 | ed ≡ 1 (mod φ(n)) | 개인 지수 계산 |
학습용 표현에서 공개키는 (n,e), 개인키는 (n,d)다. 실제 개인키 형식에는 효율적인 연산을 위한 p·
학습용 키 만들기
p = 13, q = 17
n = 13 × 17 = 221
φ(n) = 12 × 16 = 192
e = 5 (192와 서로소)
d = 77 (5 × 77 mod 192 = 1)
공개키 = (221, 5)
개인키 = (221, 77)
암호화와 복호화 계산
평문을 0 ≤ m < n인 정수로 표현하는 RSA 원시 연산은 다음과 같다.
암호화: c = m^e mod n
복호화: m = c^d mod n
위 키에서 m=42를 암호화한다. 큰 거듭제곱을 한 번에 계산하지 않고 제곱할 때마다 나머지를 구한다.
42^2 mod 221 = 217
42^4 mod 221 = 217^2 mod 221 = 16
42^5 mod 221 = 16 × 42 mod 221 = 9
복호화 지수 77 = 64 + 8 + 4 + 1을 이용한다.
| 거듭제곱 | mod 221 결과 |
|---|---|
| 9^1 | 9 |
| 9^2 | 81 |
| 9^4 | 152 |
| 9^8 | 120 |
| 9^16 | 35 |
| 9^32 | 120 |
| 9^64 | 35 |
9^77 mod 221
= (35 × 120 × 152 × 9) mod 221
= 42
암호문 9에서 원래 값 42가 복원된다. 이 작은 수는 원리 확인용이며 실제 데이터 보호에 사용할 수 없다.
안전성·패딩·서명과의 구분
n을 인수분해해 p·
원문 정수에 위 식만 적용하는 textbook RSA는 동일 입력에 동일 결과가 나오는 등 안전한 암호화 스킴의 요건을 갖추지 못한다. 실제 RSA 암호화에는 OAEP 같은 검증된 인코딩·패딩 방식이 필요하다. 단순히 빈 공간에 0을 채우는 것이 아니다.
RSA 서명은 별도의 서명 스킴이다. OAEP는 암호화, PSS는 서명에 쓰이는 이름으로 구별하고 상세 인코딩 내부는 필기 핵심 밖으로 확장하지 않는다.
복습 문제
답을 생각한 뒤 정답과 근거를 펼쳐 보세요.
p=13, q=17, e=5인 학습용 RSA에서 φ(n)과 개인 지수 d의 한 값은?
정답과 근거
φ(n)=12×16=192, d=77이다. 5×77=385를 192로 나눈 나머지가 1이다.
예를 들어 5 × 77 = 385 = 2 × 192 + 1이므로 77은 192를 법으로 한 5의 역원이다. 역원이 존재하려면 e와 법이 서로소여야 한다.
위 키에서 평문 42를 암호화한 값과 다시 복호화한 값은?
정답과 근거
암호문은 42^5 mod 221=9이고, 복호문은 9^77 mod 221=42다. 이 작은 수는 원리 확인용이며 실제 보안에 사용할 수 없다.