[Crypto] RSA 암호 알고리즘

Kioreo·2023년 5월 29일
0

Crypto

목록 보기
1/1
post-thumbnail

이미지 출처 : https://history-computer.com/rsa-encryption/

RSA란?


RSA 암호 시스템은 공개키 암호 방식( PKC, Public-Key Cryptography )체계 중 하나이다.
1978년 Ron Rivest, Adi Shamir, Leonard Adleman 세 사람에 의해 이 체제가 개발되었다. 이 세 사람의 성을 따 RSA라는 이름이 붙게 된 암호 방식이다.

수학적으로 엄청나게 큰 숫자의 소인수 분해가 어렵다는 사실을 기반으로 두고 있다.

보안도가 매우 높은데다 후술할 계산과 간략화 알고리즘 덕분에 (고전적인 방법으로는) 해독할 수 없는 암호문이지만 미국 국가 표준 암호화 알고리즘인 AES 방식보다 계산 집약적이고 훨씬 느리다는 단점이 있다.

간단하게 RSA 암호의 동작을 알아봅시다.

  • A가 B에게 메시지를 전달하려고 한다.
  1. A는 B의 열린 자물쇠를 들고 와서 전달하고자 하는 메시지를 봉인(공개키 암호화 고정)한다.
  2. A는 B에게 봉인한 메시지를 전달한다.
  3. 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\mathbb{Z} : 정수의 집합

gcd(a,b)gcd(a,b) : aa, bb의 최대공약수

aba ∣ b : bbaa로 나누어떨어진다.

aba ∤ b : bbaa로 나누어떨어지지 않는다.

ab(modm)a ≡ b (mod m) : aamm으로 나누었을 때의 나머지가 bb와 같다.

기약잉여계 : 어떤 수 aa에 대하여 1부터 aaaa와 서로소인 수들의 집합


베주 항등식 (Bézout's Identity)


두 정수와 그 최대공약수 사이의 관계를 보여주는 항등식이다.
적어도 둘 중 하나는 0이 아닌 정수 aa, bb 가 있을 때, 두 정수 xx ,yy 에 대하여 다음 명제가 성립된다.

ax+by=gcd(a,b)ax+by = \gcd(a, b)

위의 식을 만족하는 xx, yy 가 반드시 존재하게 된다.

Proof


증명의 순서는 다음과 같다.
1. ax+byax + by꼴로 표현할 수 있는 가장 작은 자연수가 존재함을 밝힌다. 그것을 dd라 하자.
2. ddaabb의 공약수임을 밝힌다.
3. ddaabb의 최대공약수임을 밝힌다.

(i) ax+byax + by꼴로 표현할 수 있는 가장 작은 자연수가 존재함을 밝힌다. 그것을 dd라 하자.
먼저, 둘 중 적어도 하나는 0이 아닌 정수 aa, bb가 있을 때 다음과 같은 집합 SS를 정의할 수 있다.

S={mm=ax+by>0,xZ,yZ}S = \{ m ∣ m =ax + by > 0, x \isin \Z, y \isin \Z\}

S ≠ ∅을 증명해보자.

{a×1+b×0S                if    a>0a×(1)+b×0S    if    a<0b0,bS                            if    a=0\left \{ \begin{array}{cc} a×1+b×0∈S\;\;\;\;\;\;\;\; if\;\; a > 0 \\ a×(-1)+b×0∈S \;\;if\;\; a < 0 \\ b \neq 0, |b| \isin S\;\;\;\;\;\;\;\;\;\;\;\;\;\;if\;\;a= 0 \end{array} \right.

위와 같은 논리로 집합 SS는 둘 중 적어도 하나는 0이 아닌 정수 aa, bb가 있을 때 집합 SS의 정의에 따라 자연수의 부분집합이므로 a|a|, b|b| 중 적어도 하나의 원소를 가지므로 SS ≠ ∅ 임을 알 수 있다.

SS ≠ ∅ 이므로 자연수의 정렬성에 의해 집합 SS는 최소원소, 즉 ax+byax + by 꼴로 나타낼 수 있는 가장 작은 자연수가 존재한다. 그것을 dd라 하자.

(ii) ddaabb의 공약수임을 밝힌다.

SS의 정의로, ddSS의 원소이므로 dd = ak+blak + bl를 만족하는 두 정수 kk, ll이 존재한다고 할 있다.
나머지 정리에 의해 aadd로 나눈 몫 qq와 나머지 rr에 대해 다음과 같이 나타낼 수 있다.

a=dq+r(qZ,0r<d)a = dq + r(q ∈ \Z, 0 \leq r < d) \\

위 식을 나머지 rr에 대해 정리하면 다음과 같이 나타낼 수 있다.

r=adq=a(ak+bl)q=(1kq)a+(lq)bSr = a - dq = a -(ak + bl)q = (1 -kq)a+ (-lq)b ∈ S

이 부분에서 rr > 0 일 때 집합 SS의 정의에 의해 rrSS가 되고, rr < dd 이기 때문에 dd가 집합 SS의 최소원소라는 가정에 모순이 발생한다.

따라서 r=0r = 0이며, a=dqa = dq, 즉, dad | a 임을 알 수 있다. 이와 같은 방식으로 dbd | b 임을 알 수 있다.
dad | a 이고 dbd | b이므로 ddaabb의 공약수이다.

(iii) ddaabb의 최대공약수임을 밝힌다.
aabb의 공약수 ee가 있다고 하면 다음과 같이 나타낼 수 있다.

a=ea,b=eba = ea', b = eb'

이를 d=ak+bld = ak + bl 에 대입하면 다음과 같으므로 eedd의 약수이다.

d=eak+ebl=e(ak+bl)d = ea'k + eb'l = e(a'k + b'l)

결론적으로, ede | d이고 dgcd(a,b)d|gcd(a, b) 이므로 d=gcd(a,b)d=gcd(a,b)이고,
d=gcd(a,b)=ax+byd=gcd(a,b)=ax+by를 만족하는 두 정수 xx, yy가 존재함을 알 수 있다.


유클리드 호제법 (Euclidian Algorithm)


두 정수 aa, bb가 있고, aabb로 나눈 나머지 r(0r<b)r(0 ≤ r < b)에 대하여 다음식이 성립한다.

gcd(a,b)=gcd(b,r)gcd(a, b) = gcd(b, r)

Proof


(i) aa, bb의 최대공약수, 즉, gcd(a,b)gcd(a,b)GG 라고 하고 서로소인 두 정수 aa', bb'에 대해 a=Gaa = Ga', b=Gbb = Gb'와 같이 나타낼 수 있다. 그리고 나머지 정리에 의해 aabb로 나눈 몫 qq, 나머지 rr에 대해 다음과 같이 나타낼 수 있다.

a=bq+r(0r<b)r=abq=GaGbq=G(abq)a = bq + r(0 \leq r < b) \\ r = a - bq = Ga' - Gb'q = G(a' - b'q)

rr에 대하여 정리하면 r=G(abq)r = G(a'- b'q), GrG | r임을 알 수 있다.

(ii) gcd(b,abq)=Ggcd(b', a'- b'q) = G' 라고 하면, 서로소인 두 정수 kk, ll에 대해 다음과 같이 나타낼 수 있다.

b=Gkabq=Gla=Gl+bq=Gl+Gkq=G(l+kq)b' = G'k \\ a'-b'q = G'l \\ a' = G'l + b'q = G'l + G'kq = G'(l+kq)

aa'에 대하여 정리하면, GG'aa', bb'의 공약수인데 aa', bb'은 서로소이므로 gcd(a,b)=1gcd(a',b') = 1이다.
따라서, 항상 G=1G' = 1, 즉, bb'abqa' - b'q는 서로소라는 것을 알 수 있다.

b=Gb,r=G(abq)gcd(b,abq)=1gcd(b,r)=G=gcd(a,b)b=Gb', r=G(a'-b'q) \\ gcd(b', a'-b'q) = 1 \\ gcd(b,r) = G = gcd(a,b)

결론적으로 gcd(a,b)=gcd(b,r)gcd(a, b) = gcd(b, r) 라는 것을 알 수 있다.


확장 유클리드 알고리즘 (Extended Euclidian Algorithm)


두 정수 aa, bb에 대하여 베주 항등식인 ax+by=gcd(a,b)ax + by = gcd(a, b)를 만족하는 정수 xx, yy의 값을 구하는 방법이다.

Proof


증명 순서는 다음과 같다.
1. 점화식을 도출한다.
2. 언제 ax+by=gcd(a,b)ax + by = gcd(a, b)를 만족하는 xx, yy값이 되는지 확인한다.

(i) 유클리드 호제법에 의해, 두 정수 aa, bb의 최대공약수 gcd(a,b)gcd(a, b)에 대해서 다음과 같이 나타낼 수 있다.

gcd(a,b)=gcd(b,r1)=gcd(r1,r2)=...=gcd(ri1,ri)=...gcd(a, b) = gcd(b, r_{1}) = gcd(r_{1}, r_{2}) = ... = gcd(r_{i-1}, r_{i}) = ...

이를 풀어 정리하면 아래와 같이 나타낼 수 있다.

a=bq0+r1(0<r1<b)b=r1q1+r2(0<r2<r1)c=r2q2+r3(0<r3<r2)..ri1=riqi+ri+1(0<ri+1<ri)...a = bq_{0} + r_{1}(0 < r_{1} < b) \\ b = r_{1}q_{1} + r_{2}(0 < r_{2} < r_{1}) \\ c = r_{2}q_{2} + r_{3}(0 < r_{3} < r_{2}) \\ . \\ . \\ r_{i-1}=r_{i}q_{i} + r_{i+1}(0 < r_{i+1} < r_{i}) \\ . \\ . \\ .

이를 통해 다음과 같은 점화식을 도출할 수 있다.

ri+1=ri1riqiri=axi+byir_{i+1}=r_{i-1} - r_{i}q_{i} \\ r_{i} = ax_{i} + by_{i}

두 번째 식을 위 점화식에 대입하여 정리하면 다음과 같이 나타낼 수 있다.

ri1=axi1+byi1ri+1=axi+1+byi+1=axi1+byi1(axi+byi)qi=a(xi1+xiqi)+b(yi1yiqi)r_{i-1} = ax_{i-1} + by_{i-1} \\ r_{i+1} = ax_{i+1} + by_{i+1} \\ =ax_{i-1} + by_{i-1} - (ax_{i} + by_{i})q_{i}\\ =a(x_{i-1} + x_{i}q_{i}) + b(y_{i-1}-y_{i}q_{i})

따라서, axi+1=xi1xiqiax_{i+1} = x_{i-1} - x_{i}q_{i}, byi+1=yi1yiqiby_{i+1} = y_{i-1} - y_{i}q_{i}라는 점화식을 도출할 수 있다.

그러면 이 부분에서 다음과 같이 xx, yy의 초기조건을 이끌어낼 수 있다.

r0=a=ax0+by0(x0=1,y0=0)r1=b=ax1+by1(x1=0,y1=1)r_{0} = a = ax_{0}+by_{0}(x_{0} = 1, y_{0} = 0) \\ r_{1} = b = ax_{1}+by_{1}(x_{1} = 0, y_{1} = 1)

위에서 구한 점화식으로 rir_i가 0이 될 때까지 반복하면, 그때의 xix_i, yiy_i의 값이 각각 ax+by=gcd(a,b)ax + by = gcd(a, b)를 만족하는 xx, yy값이 되는 것이다.


페르마의 소정리 (Fermat's little Theorem)


소수 pppp와 서로소인 정수 aa에 대해 다음과 같은 식이 성립한다.

ap11(mod  p)a^{p-1} \equiv 1(mod\;p)

따름정리 : 소수 pp에 대하여 다음 식이 성립힌다.

apa(mod  p)a^{p} \equiv a(mod\; p)

Proof


페르마의 소정리는 다양한 방법으로 증명을 할 수 있다.
다양한 방법 중 기약잉여계를 사용해 페르마의 소정리를 증명할 것 이다.

먼저, aapp가 서로소라고 하자.
이때, {1a,2a,...,(p1)a}\{1a, 2a, ..., (p-1)a\}mod  pmod\;p에 대해 서로 합동이 아니다.
또한 이중에서 pp의 배수인 것은 없으므로, 이 집합을 p로 나눈 나머지들의 집합은 {1,2,...,p1}\{1,2, ...,p-1\}와 같다. 이때 다음과 같은 식이 성립한다.

1a2a....(p1)a{12...(p1)}ap1                                                                  {12...(p1)}(mod  p)1a\cdot2a\cdot....\cdot(p-1)a \equiv \{1\cdot2\cdot...\cdot(p-1)\}a^{p-1} \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\equiv\{1\cdot2\cdot...(p-1)\}(mod\;p)

위 합동식에서 소수 pp에 대해 역원이 존재하기 때문에 12...(p1)1\cdot2\cdot...\cdot(p-1)을 약분할 수 있다.
결론적으로, ap11(mod  p)a^{p-1} \equiv 1(mod\;p) 라는 것을 증명할 수 있다.


오일러 정리 (Euler's Theorem)


서로소인 두 정수 aann에 대하여 다음 식이 성립한다.

aφ(n)1(mod  n)a^{\varphi(n)} \equiv 1(mod\; n)

Proof


정수 nn의 기약잉여계 SS는 다음과 같다.

S={b1,b2,b3,...,bφ(n)}S = \{b_{1}, b_{2}, b_{3},...,b_{\varphi(n)}\}

SS의 각 원소에 nn과 서로소인 aa를 곱한 집합을 aSaS 하면 다음과 같다.

aS={ab1,ab2,ab3,...,abφ(n)}aS=\{ab_{1}, ab_{2}, ab_{3},...,ab_{\varphi(n)}\}

이때, aSaS의 모든 원소는 nn과 서로소인 수들끼리 곱한 수들이므로 그 원소들 역시 nn과 서로소이다.

또한, aSaS의 모든 원소를 nn로 나눈 나머지는 모두 서로 다르다.

만일, abiabj(mod  n),1i,jφ(n)ab_{i} \equiv ab_{j}(mod\;n), 1\leq i, j \leq \varphi(n)가 존재한다고 가정해보자.

그럼 nabiabj=a(bibj)n|ab_{i} - ab_{j} = a(b_{i}-b_{j}) 이고 nnaa가 서로소이므로 nbibjn|b_{i}-b_{j} 라는 것을 알 수 있다.
nbibjn|b_{i}-b_{j}라는 것은 bibjb_{i}-b_{j}nn의 배수이다.
이때, bib_{i}bjb_{j}는 둘 다 1이상 nn이하의 수들이므로 다음 부등식이 성립해야 한다.

bibj(n1)|b_{i}-b_{j}| \leq (n-1)

하지만, 부등식을 만족하고 nn의 배수인 것은 0뿐이므로 bibj=0b_{i}-b_{j}=0, 즉 bi=bjb_{i}=b_{j}이므로 모순이 발생한다.

결국, 집합 aSaS의 각 원소를 nn으로 나눈 나머지들의 집합은 모두 nn과 서로소이며, 서로 다른 자연수이므로 nn의 기약잉여계인 SS와 같다고 볼 수 있다.

따라서, 다음과 같은 식으로 나타낼 수 있다.

ab1ab2ab3...abφ(n)(b1b2b3bφ(n))aφ(n)                                                                            (b1b2b3bφ(n))(mod  n)ab_{1}\cdot ab_{2}\cdot ab_{3}\cdot...\cdot ab_{\varphi(n)} \equiv (b_{1} b_{2}b_{3}\cdot\cdot\cdot b_{\varphi(n)})a^{\varphi(n)} \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\equiv(b_{1} b_{2}b_{3}\cdot\cdot\cdot b_{\varphi(n)})(mod\;n)

위 합동식에서 nn과 서로소인 (b1b2b3bφ(n))(b_{1} b_{2}b_{3}\cdot\cdot\cdot b_{\varphi(n)})은 역원이 존재하므로 약분할 수 있다.
결론적으로, aφ(n)1(mod  n)a^{\varphi(n)} \equiv 1(mod\; n)라는 것을 증명 할 수 있다.


RSA Mechanism


Key Generation


키 생성 과정
1. 두 소수 pp, qq를 준비한다.
2. N=pqN = pq를 계산한다.
3. φ(n)\varphi(n), 즉, (p1)(q1)(p-1)(q-1)과 각각 서로소인 정수 ee를 준비한다.
4. ed1(mod  φ(N))ed \equiv 1(mod\;\varphi(N))를 만족하는 정수 dd를 찾는다. (확장 유클리드 알고리즘 사용)
5. pp, qq는 더 이상 필요 없으며, 보안상의 문제가 될 수 있으니, 파기한다.

4번에서 확장된 유클리드 호제법을 이용하면 정수 dd를 빠르게 구할 수 있다.
또 이 부분에서 ee를 준비한 이유가 나타난다. ee(p1)(q1)(p-1)(q-1)와 서로소가 아니라면 이를 만족하는 dd는 존재하지 않기 때문에 3번 과정이 필요하다.

Encryption


공개키 NNee, 전달하고자 하는 메시지 m(m<N)m (m<N)에 대하여 다음과 같이 암호화한다.

c=me  mod  Nc=m^{e}\;mod\;N

c는 암호문이다.

Decryption


공개키 NN, 비밀키 dd, 암호화된 메시지 cc에 대하여 다음과 같이 복호화한다.

m=cd  mod  Nm=c^{d}\;mod\;N

m은 복호화된 메시지이다.

Proof


우선, 복호화 식을 정리해보자.

m=cd  mod  N        =(me  mod  N)d  mod  N        =med  mod  Nm = c^{d}\;mod\;N\\ \;\;\;\;=(m^{e}\;mod\;N)^{d}\;mod\;N \\ \;\;\;\;=m^{ed}\;mod\;N

따라서 RSA 암호 시스템을 증명하기 위해선 medm(mod  N)m^{ed}\equiv m(mod\;N)을 증명하면 된다.
N=p×qN=p\times q이므로 위 합동식이 mod  pmod\;p, mod  qmod\;q, mod  Nmod\;N일 때 모두 성립한다.
또, ed1(mod  φ(N))ed\equiv1(mod\;\varphi(N))이므로, 적당한 수 k에 대하여 ed=kφ(N)+1=k(p1)(q1)+1ed=k\varphi(N)+1=k(p-1)(q-1)+1이란 것을 알 수 있다.

먼저, mod  Nmod\;N 대신 mod  pmod\;p을 사용하여 위 합동식에 대입하여 정리하면 다음과 같다.

medm(mod  N)m(mod  p)mk(p1)(q1)+1=mk(p1)(q1)×m                                            =(mp1)k(q1)×m(mp1)k(q1)m(mod  p)m^{ed}\equiv m(mod\;N) \equiv m(mod\;p) \\ m^{k(p-1)(q-1)+1} = m^{k(p-1)(q-1)}\times m\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;=(m^{p-1})^{k(q-1)} \times m\\ (m^{p-1})^{k(q-1)} \equiv m(mod\;p)

여기서 두 가지 경우로 나뉘는데,
첫 번째 경우는 mmpp의 배수 일때이다.
mmpp의 배수이면 위 합동식의 양변이 모두 pp로 나누어떨어져서 0이 되므로, 합동식이 성립한다.

두 번째 경우는 mmpp의 배수가 아닐 때이다.
mmpp의 배수가 아니면 pp가 소수이기 때문에 페르마의 소정리에 의해 mp11(mod  p)m^{p-1} \equiv 1(mod\;p)이고, 이 식을 위 식에 대입해보면 다음과 같이 합동식이 성립하게 된다.

(mp1)k(q1)×mm(mod  p)1k(q1)×mm(mod  p)mm(mod  p)(m^{p-1})^{k(q-1)} \times m \equiv m(mod\;p) \\ 1^{k(q-1)} \times m \equiv m(mod\;p) \\ m \equiv m(mod\;p)

profile
KITRI BoB 12th, Layer7 23rd

0개의 댓글