이미지 출처 : https://history-computer.com/rsa-encryption/
RSA란?
RSA 암호 시스템은 공개키 암호 방식( PKC, Public-Key Cryptography )체계 중 하나이다.
1978년 Ron Rivest, Adi Shamir, Leonard Adleman 세 사람에 의해 이 체제가 개발되었다. 이 세 사람의 성을 따 RSA라는 이름이 붙게 된 암호 방식이다.
수학적으로 엄청나게 큰 숫자의 소인수 분해가 어렵다는 사실을 기반으로 두고 있다.
보안도가 매우 높은데다 후술할 계산과 간략화 알고리즘 덕분에 (고전적인 방법으로는) 해독할 수 없는 암호문이지만 미국 국가 표준 암호화 알고리즘인 AES 방식보다 계산 집약적이고 훨씬 느리다는 단점이 있다.
간단하게 RSA 암호의 동작을 알아봅시다.
- A는 B의 열린 자물쇠를 들고 와서 전달하고자 하는 메시지를 봉인(공개키 암호화 고정)한다.
- A는 B에게 봉인한 메시지를 전달한다.
- B는 해당 자물쇠의 열쇠(개인 키)로 A에게 받은 봉인된 메시지를 열어 확인한다.
참고 : https://ko.wikipedia.org/wiki/RSA_%EC%95%94%ED%98%B8
PKC란?
PKC(Public-Key Cryptography, 공개 키 암호 방식)이란, 암호화( Public Key, 공개키 )와 복호화( Private Key, 비밀 키 )에 사용하는 키가 서로 다른 암호화 방식을 의미한다.
암호화와 복호화에 같은 키를 사용하는 대칭 키 암호화 방식( Symmetric-Key Algorithm )과 달리 키가 다른 비대칭 암호 방식( Asymmetric Cryptography )이라고도 불린다.
Mathematics
RSA 암호 시스템을 이해하기 위해, 수학을 베이스로 작동하기 때문에 몇 가지 수학적 이론들을 알고 있어야 한다. 정수론, 대수학을 공부하였다면 쉽게 이해할 수 있을 것이다.
기본적인 수학 기호 및 용어
Z : 정수의 집합
gcd(a,b) : a, b의 최대공약수
a∣b : b는 a로 나누어떨어진다.
a∤b : b는 a로 나누어떨어지지 않는다.
a≡b(modm) : a를 m으로 나누었을 때의 나머지가 b와 같다.
기약잉여계 : 어떤 수 a에 대하여 1부터 a중 a와 서로소인 수들의 집합
베주 항등식 (Bézout's Identity)
두 정수와 그 최대공약수 사이의 관계를 보여주는 항등식이다.
적어도 둘 중 하나는 0이 아닌 정수 a, b 가 있을 때, 두 정수 x ,y 에 대하여 다음 명제가 성립된다.
ax+by=gcd(a,b)
위의 식을 만족하는 x, y 가 반드시 존재하게 된다.
Proof
증명의 순서는 다음과 같다.
1. ax+by꼴로 표현할 수 있는 가장 작은 자연수가 존재함을 밝힌다. 그것을 d라 하자.
2. d는 a와 b의 공약수임을 밝힌다.
3. d가 a와 b의 최대공약수임을 밝힌다.
(i) ax+by꼴로 표현할 수 있는 가장 작은 자연수가 존재함을 밝힌다. 그것을 d라 하자.
먼저, 둘 중 적어도 하나는 0이 아닌 정수 a, b가 있을 때 다음과 같은 집합 S를 정의할 수 있다.
S={m∣m=ax+by>0,x∈Z,y∈Z}
S ≠ ∅을 증명해보자.
⎩⎪⎨⎪⎧a×1+b×0∈Sifa>0a×(−1)+b×0∈Sifa<0b=0,∣b∣∈Sifa=0
위와 같은 논리로 집합 S는 둘 중 적어도 하나는 0이 아닌 정수 a, b가 있을 때 집합 S의 정의에 따라 자연수의 부분집합이므로 ∣a∣, ∣b∣ 중 적어도 하나의 원소를 가지므로 S ≠ ∅ 임을 알 수 있다.
S ≠ ∅ 이므로 자연수의 정렬성에 의해 집합 S는 최소원소, 즉 ax+by 꼴로 나타낼 수 있는 가장 작은 자연수가 존재한다. 그것을 d라 하자.
(ii) d는 a와 b의 공약수임을 밝힌다.
S의 정의로, d는 S의 원소이므로 d = ak+bl를 만족하는 두 정수 k, l이 존재한다고 할 있다.
나머지 정리에 의해 a를 d로 나눈 몫 q와 나머지 r에 대해 다음과 같이 나타낼 수 있다.
a=dq+r(q∈Z,0≤r<d)
위 식을 나머지 r에 대해 정리하면 다음과 같이 나타낼 수 있다.
r=a−dq=a−(ak+bl)q=(1−kq)a+(−lq)b∈S
이 부분에서 r > 0 일 때 집합 S의 정의에 의해 r ∈ S가 되고, r < d 이기 때문에 d가 집합 S의 최소원소라는 가정에 모순이 발생한다.
따라서 r=0이며, a=dq, 즉, d∣a 임을 알 수 있다. 이와 같은 방식으로 d∣b 임을 알 수 있다.
d∣a 이고 d∣b이므로 d는 a와 b의 공약수이다.
(iii) d가 a와 b의 최대공약수임을 밝힌다.
a와 b의 공약수 e가 있다고 하면 다음과 같이 나타낼 수 있다.
a=ea′,b=eb′
이를 d=ak+bl 에 대입하면 다음과 같으므로 e는 d의 약수이다.
d=ea′k+eb′l=e(a′k+b′l)
결론적으로, e∣d이고 d∣gcd(a,b) 이므로 d=gcd(a,b)이고,
d=gcd(a,b)=ax+by를 만족하는 두 정수 x, y가 존재함을 알 수 있다.
유클리드 호제법 (Euclidian Algorithm)
두 정수 a, b가 있고, a를 b로 나눈 나머지 r(0≤r<b)에 대하여 다음식이 성립한다.
gcd(a,b)=gcd(b,r)
Proof
(i) a, b의 최대공약수, 즉, gcd(a,b) 를 G 라고 하고 서로소인 두 정수 a′, b′에 대해 a=Ga′, b=Gb′와 같이 나타낼 수 있다. 그리고 나머지 정리에 의해 a 를 b로 나눈 몫 q, 나머지 r에 대해 다음과 같이 나타낼 수 있다.
a=bq+r(0≤r<b)r=a−bq=Ga′−Gb′q=G(a′−b′q)
r에 대하여 정리하면 r=G(a′−b′q), G∣r임을 알 수 있다.
(ii) gcd(b′,a′−b′q)=G′ 라고 하면, 서로소인 두 정수 k, l에 대해 다음과 같이 나타낼 수 있다.
b′=G′ka′−b′q=G′la′=G′l+b′q=G′l+G′kq=G′(l+kq)
a′에 대하여 정리하면, G′은 a′, b′의 공약수인데 a′, b′은 서로소이므로 gcd(a′,b′)=1이다.
따라서, 항상 G′=1, 즉, b′와 a′−b′q는 서로소라는 것을 알 수 있다.
b=Gb′,r=G(a′−b′q)gcd(b′,a′−b′q)=1gcd(b,r)=G=gcd(a,b)
결론적으로 gcd(a,b)=gcd(b,r) 라는 것을 알 수 있다.
확장 유클리드 알고리즘 (Extended Euclidian Algorithm)
두 정수 a, b에 대하여 베주 항등식인 ax+by=gcd(a,b)를 만족하는 정수 x, y의 값을 구하는 방법이다.
Proof
증명 순서는 다음과 같다.
1. 점화식을 도출한다.
2. 언제 ax+by=gcd(a,b)를 만족하는 x, y값이 되는지 확인한다.
(i) 유클리드 호제법에 의해, 두 정수 a, b의 최대공약수 gcd(a,b)에 대해서 다음과 같이 나타낼 수 있다.
gcd(a,b)=gcd(b,r1)=gcd(r1,r2)=...=gcd(ri−1,ri)=...
이를 풀어 정리하면 아래와 같이 나타낼 수 있다.
a=bq0+r1(0<r1<b)b=r1q1+r2(0<r2<r1)c=r2q2+r3(0<r3<r2)..ri−1=riqi+ri+1(0<ri+1<ri)...
이를 통해 다음과 같은 점화식을 도출할 수 있다.
ri+1=ri−1−riqiri=axi+byi
두 번째 식을 위 점화식에 대입하여 정리하면 다음과 같이 나타낼 수 있다.
ri−1=axi−1+byi−1ri+1=axi+1+byi+1=axi−1+byi−1−(axi+byi)qi=a(xi−1+xiqi)+b(yi−1−yiqi)
따라서, axi+1=xi−1−xiqi, byi+1=yi−1−yiqi라는 점화식을 도출할 수 있다.
그러면 이 부분에서 다음과 같이 x, y의 초기조건을 이끌어낼 수 있다.
r0=a=ax0+by0(x0=1,y0=0)r1=b=ax1+by1(x1=0,y1=1)
위에서 구한 점화식으로 ri가 0이 될 때까지 반복하면, 그때의 xi, yi의 값이 각각 ax+by=gcd(a,b)를 만족하는 x, y값이 되는 것이다.
페르마의 소정리 (Fermat's little Theorem)
소수 p와 p와 서로소인 정수 a에 대해 다음과 같은 식이 성립한다.
ap−1≡1(modp)
따름정리 : 소수 p에 대하여 다음 식이 성립힌다.
ap≡a(modp)
Proof
페르마의 소정리는 다양한 방법으로 증명을 할 수 있다.
다양한 방법 중 기약잉여계를 사용해 페르마의 소정리를 증명할 것 이다.
먼저, a와 p가 서로소라고 하자.
이때, {1a,2a,...,(p−1)a}는 modp에 대해 서로 합동이 아니다.
또한 이중에서 p의 배수인 것은 없으므로, 이 집합을 p로 나눈 나머지들의 집합은 {1,2,...,p−1}와 같다. 이때 다음과 같은 식이 성립한다.
1a⋅2a⋅....⋅(p−1)a≡{1⋅2⋅...⋅(p−1)}ap−1≡{1⋅2⋅...(p−1)}(modp)
위 합동식에서 소수 p에 대해 역원이 존재하기 때문에 1⋅2⋅...⋅(p−1)을 약분할 수 있다.
결론적으로, ap−1≡1(modp) 라는 것을 증명할 수 있다.
오일러 정리 (Euler's Theorem)
서로소인 두 정수 a와 n에 대하여 다음 식이 성립한다.
aφ(n)≡1(modn)
Proof
정수 n의 기약잉여계 S는 다음과 같다.
S={b1,b2,b3,...,bφ(n)}
S의 각 원소에 n과 서로소인 a를 곱한 집합을 aS 하면 다음과 같다.
aS={ab1,ab2,ab3,...,abφ(n)}
이때, aS의 모든 원소는 n과 서로소인 수들끼리 곱한 수들이므로 그 원소들 역시 n과 서로소이다.
또한, aS의 모든 원소를 n로 나눈 나머지는 모두 서로 다르다.
만일, abi≡abj(modn),1≤i,j≤φ(n)가 존재한다고 가정해보자.
그럼 n∣abi−abj=a(bi−bj) 이고 n와 a가 서로소이므로 n∣bi−bj 라는 것을 알 수 있다.
n∣bi−bj라는 것은 bi−bj가 n의 배수이다.
이때, bi와 bj는 둘 다 1이상 n이하의 수들이므로 다음 부등식이 성립해야 한다.
∣bi−bj∣≤(n−1)
하지만, 부등식을 만족하고 n의 배수인 것은 0뿐이므로 bi−bj=0, 즉 bi=bj이므로 모순이 발생한다.
결국, 집합 aS의 각 원소를 n으로 나눈 나머지들의 집합은 모두 n과 서로소이며, 서로 다른 자연수이므로 n의 기약잉여계인 S와 같다고 볼 수 있다.
따라서, 다음과 같은 식으로 나타낼 수 있다.
ab1⋅ab2⋅ab3⋅...⋅abφ(n)≡(b1b2b3⋅⋅⋅bφ(n))aφ(n)≡(b1b2b3⋅⋅⋅bφ(n))(modn)
위 합동식에서 n과 서로소인 (b1b2b3⋅⋅⋅bφ(n))은 역원이 존재하므로 약분할 수 있다.
결론적으로, aφ(n)≡1(modn)라는 것을 증명 할 수 있다.
RSA Mechanism
Key Generation
키 생성 과정
1. 두 소수 p, q를 준비한다.
2. N=pq를 계산한다.
3. φ(n), 즉, (p−1)(q−1)과 각각 서로소인 정수 e를 준비한다.
4. ed≡1(modφ(N))를 만족하는 정수 d를 찾는다. (확장 유클리드 알고리즘 사용)
5. p, q는 더 이상 필요 없으며, 보안상의 문제가 될 수 있으니, 파기한다.
4번에서 확장된 유클리드 호제법을 이용하면 정수 d를 빠르게 구할 수 있다.
또 이 부분에서 e를 준비한 이유가 나타난다. e가 (p−1)(q−1)와 서로소가 아니라면 이를 만족하는 d는 존재하지 않기 때문에 3번 과정이 필요하다.
Encryption
공개키 N과 e, 전달하고자 하는 메시지 m(m<N)에 대하여 다음과 같이 암호화한다.
c=memodN
c는 암호문이다.
Decryption
공개키 N, 비밀키 d, 암호화된 메시지 c에 대하여 다음과 같이 복호화한다.
m=cdmodN
m은 복호화된 메시지이다.
Proof
우선, 복호화 식을 정리해보자.
m=cdmodN=(memodN)dmodN=medmodN
따라서 RSA 암호 시스템을 증명하기 위해선 med≡m(modN)을 증명하면 된다.
N=p×q이므로 위 합동식이 modp, modq, modN일 때 모두 성립한다.
또, ed≡1(modφ(N))이므로, 적당한 수 k에 대하여 ed=kφ(N)+1=k(p−1)(q−1)+1이란 것을 알 수 있다.
먼저, modN 대신 modp을 사용하여 위 합동식에 대입하여 정리하면 다음과 같다.
med≡m(modN)≡m(modp)mk(p−1)(q−1)+1=mk(p−1)(q−1)×m=(mp−1)k(q−1)×m(mp−1)k(q−1)≡m(modp)
여기서 두 가지 경우로 나뉘는데,
첫 번째 경우는 m이 p의 배수 일때이다.
m이 p의 배수이면 위 합동식의 양변이 모두 p로 나누어떨어져서 0이 되므로, 합동식이 성립한다.
두 번째 경우는 m이 p의 배수가 아닐 때이다.
m이 p의 배수가 아니면 p가 소수이기 때문에 페르마의 소정리에 의해 mp−1≡1(modp)이고, 이 식을 위 식에 대입해보면 다음과 같이 합동식이 성립하게 된다.
(mp−1)k(q−1)×m≡m(modp)1k(q−1)×m≡m(modp)m≡m(modp)