[암호학] 8. RSA 암호체계
RSA 암호체계는 1978년에 라이베스트(Rivest), 샤미르(Shamir), 애들먼(Adleman)이 고안한 것으로 폴리그-헬만 암호체계를 약간 변형시킨 것이고, 다음의 정리에 기반을 두고 있다.
정리. 서로 다른 두 홀수 소수 p,q에 대하여 m=pq라고 할 때gcd(e,ϕ(m))=1,1<e<ϕ(m)인 정수 e에 대해 d를ed≡1(modϕ(m)),1<d<ϕ(m)인 정수라 하고, 가환환 Zn={0,1,...,n−1}위의 두 함수 E,D를 다음과 같이 정의하자.E:Zn→ZnE(x)=xeD:Zn→ZnD(x)=xd이때 모든 x∈Zn에 대하여 D(E(x))=x이고 따라서 E와 D는 Zn위의 일대일 대응이고 E−1=D이다.
증명: 가정에 의해 gcd(e,ϕ(m))=1이므로ed≡1(modϕ(m))1<d<ϕ(m)인 정수 d는 존재하고 ϕ(m)|(ed−1)이므로 양의 정수 k가 존재해서 d=ϕ(m)k+1이다.
a∈Zn, gcd(a,n)=1이라 하자. 오일러의 정리에 의해 aϕ(m)≡1(modm)이므로aed≡aϕ(m)k+1≡(aϕ(m))ka≡1ka≡a(modm)이고 따라서 D(E(a))=aed=a이다. a=0이면 D(E(0))=0ed=0이다.
다음으로 a∈Zn, a≠0, gcd(a,n)≠1이라 하자. m=pq이므로 다음 중 하나가 성립한다.(i)p|a,gcd(a,q)=1,(ii)gcd(a,p)=1,q|aϕ(m)|(ed−1), ϕ(m)=(p−1)(q−1)이므로 다음이 성립한다.(p−1)|(ed−1),(q−1)|(ed−1)(i)의 경우, a≡0(modp)이므로aed≡0ed≡0≡a(modp)이고 gcd(a,q)=1이므로 페르마 정리에 의해 aq−1≡1(modq)이고 또한 양의 정수 s가 존재해서 ed=(q−1)s+1이므로 다음이 성립한다.aed≡a(q−1)s+1≡(aq−1)sa≡1a≡a(modq)p,q는 서로소이므로 위의 두 결과와 중국인의 나머지 정리에 의해aed≡a(modm)이고 따라서 가환환 Zn에서 D(E(a))=aed=a이다.
마찬가지로 (ii)의 경우에도 가환환 Zn에서 D(E(a))=aed=a이다.
위의 증명에 의해 모든 a∈Zn에 대해 D(E(a))=a이므로 두 함수 E,D는 일대일 대응이고 E−1=D이다.
RSA 암호체계 프로토콜
1단계. 수신자 A는 충분히 큰 서로 다른 두 소수 p,q를 선택하여 m=pq를 계산하고 m은 공개, p,q는 비공개한다. 그리고 A는 m의 오일러-피 함수값 ϕ(m)=(p−1)(q−1)의 값을 구한다.
2단계. 수신자 A는 gcd(e,ϕ(m))=1, 1<e<ϕ(m)인 정수 e를 선택하고ed≡1(modϕ(m))1<d<ϕ(m)인 정수 d를 구해서 e를 공개하고 d는 비공개한다. 즉, A의 공개 키는 m,e이고 비밀 키는 p,q,d이다.
3단계. 송신자 U는 송신하려는 평문을 0≤a<m인 정수 a로 나타낸다. 이때 1의 자리수 앞에 0을 붙인다.
4단계. 송신자 U는 공개된 m,e를 이용하여 평문 a에 대하여b≡ae(modm)0≤b<m인 정수 b를 구해서 암호문 b를 A에게 전송한다.
5단계. 수신자 A는 암호문 b와 자신의 비밀 열쇠 d를 이용하여a≡bd(modm)0≤a<m인 정수 a를 구함으로써 평문 a를 얻는다.
RSA 암호체계의 안전성은 정수의 인수분해가 어렵다는 점에 있다. 앞의 단계 (1), (2)에서 A가 상당히 큰 서로 다른 두 소수 p,q를 택하면 합당한 시간 안에 정수 m의 두 소인수 p,q를 구하는 일은 대단히 어렵고 따라서 ϕ(m)의 값을 계산하는 일은 어렵게 되고, 공개된 e의 값을 이용하여 1<d<ϕ(m)인 d를 구하는 일은 어렵다.
이때 두 소수 p,q는 다음과 같은 조건을 만족해야 한다.
(1) p,q는 서로 다르고 상당히 커야 한다.
(2) p,q는 자리수가 거의 같아야 한다.
(3) p−1과 q−1은 각각 큰 소인수를 가져야 한다.
(4) p−1과 q−1의 최대공약수는 작아야 한다.
보통 RSA 암호체꼐에서는 p,q를 100자리 정도의 소수로 택하여 m=pq를 이용한다.
공격자가 m과 ϕ(m)의 값을 알면 이차방정식x2−(m+1−ϕ(m))x+m=0의 두 근을 구하여 m의 두 소인수 p,q를 구할 수 있다.
앞의 3단계에서 a≥m일 때는 적당한 함수 h를 사용해서0≤h(a)<m인 정수 h(a)를 정하여 a 대신 h(a)를 사용하거나 또는 m이 n자리의 수인 경우, a를a=◯⋯◯⏟a1◯⋯◯⏟a2⋯◯⋯◯⏟ak와 같이 처음부터 차례로 그 길이가 n−1인 블록으로 나누어 이들 블록이 나타내는 양의 정수 a1,a2,...,ak가 모두 m보다 작도록 하고 필요하다면 평문에 적당한 문자를 추가한다.
서로 다른 두 홀수 소수 p=1733, q=2347에 대하여m=pq=4067351ϕ(m)=(p−1)(q−1)=1732⋅2346이다. e=31일 때 gcd(e,ϕ(m))=1이므로 유클리드의 알고리즘을 이용하여ed≡1(modϕ(m)),1<d<ϕ(m)인 정수 d를 구하면 d=3145759이다.
평문 'public key cryptography'를 알파벳-숫자 표에 따라 정수 a로 나타내고 이를 길이가 6인 블록으로 나누면 다음과 같이 나타낼 수 있다.a=152001⏟a1⋮110802⏟a2⋮100424⏟a3⋮021724⏟a4⋮151914⏟a5⋮061700⏟a6⋮150724⏟a7다음으로 각 i(1≤i≤7)에 대하여bi≡a31i(modm)(0≤bi<m)인 정수 bi를 구하여 이들을 차례로 늘어놓은 정수를 b라고 하면 다음과 같다.b=2721372⏟b1⋮3969831⏟b2⋮2416419⏟b3⋮1795753⏟b4⋮2110079⏟b5⋮0242624⏟b6⋮0889174⏟b7수신한 암호문 b=b1b2⋯b7과 비밀 키 d를 이용하여 각 bi에 대하여 다음과 같이 ai를 구하면 평문 a를 얻을 수 있다.ai≡b3145759i(modm)0≤ai<mRSA 암호체계에서 다음에 유의해야 한다.
1. 여러 수신자가 동일한 정수 m을 이용하는 것을 피해야 한다.
2. 암호화 함수에서 지수 e를 택할 때 가장 작은 값을 피해야 한다.
참고자료:
암호학과 부호이론, 박승안, 경문사
'응용수학 > 암호학' 카테고리의 다른 글
[암호학] 10. 영지식 증명(1. 2차잉여, 르장드르 기호) (0) | 2020.10.18 |
---|---|
[암호학] 9. 엘 가말 암호 (0) | 2020.10.17 |
[암호학] 7. 공개 열쇠 암호체계 (0) | 2020.10.15 |
[암호학] 6. 힐 암호, 폴리그-헬만 암호 (0) | 2020.10.14 |
[암호학] 5. 아핀 암호, 치환 암호, 비즈네르 암호 (0) | 2020.10.13 |