RSA

2019년 4월 19일

RSA는 어떤 수의 소인수분해는 아주 어렵지만, 반대로 소인수를 곱해서 원래 수를 만드는 것은 쉽다는 성질을 이용한 암호 체계이다. 암호명은 이 암호를 개발한 세 암호학자 Rivest-Shamir-Adelman에서 유래한다.

키 형성

암호화

평문 mm을 암호화 하는 함수는 다음과 같다:

E(m)me mod n E(m ) \equiv m^e \text{ mod }n

암호화 함수의 일대일 대응을 유지하기 위해 m<nm<n을 가정한다.

복호화

암호문 cc를 복호화 하는 함수는 다음과 같다:

D(c)cd mod n D(c) \equiv c^d \text{ mod } n

실제로 평문을 암호화했다가 복호화하면 복구 가능하다는 것을 보일 수 있다.

D(E(m))E(m)d mod nmed mod nmkϕ(n)+1 mod n \begin{aligned} D(E(m)) &\equiv E(m) ^d\text{ mod } n \\ &\equiv m^{ed} \text{ mod } n\\ &\equiv m ^{k \phi(n)+1} \text{ mod } n \\ \end{aligned}

gcd(m,n)=1\gcd(m,n) = 1 일 경우, 오일러의 toitient 정리에 의해 mϕ(n)1 mod nm^{\phi(n)} \equiv 1 \text{ mod } n이므로 $D(E(m)) \equiv m \text{ mod } n $이다.

gcd(m,n)1\gcd(m,n) \ne 1일 경우, n=pqn = pq이므로, gcd(m,n)\gcd(m,n)pp 또는 qq이다. 일반성을 잃지 않고 gcd(m,n)=p\gcd(m,n) = p로 놓자.

일단 med mod p0m^{ed}\text{ mod } p \equiv 0이고, m mod p0m \text{ mod } p \equiv 0이므로 mD(E(m)) mod pm \equiv D(E(m)) \text{ mod } p이다.

(m,q)=1(m,q) = 1이므로 페르마의 소정리에 의해 mq11 mod qm^{q-1} \equiv 1 \text{ mod } q이다. 따라서

D(E(m))mkϕ(pq)+1mk(p1)(q1)+1(mq1)k(p1)mm mod q \begin{aligned} D(E(m)) \equiv m^{k\phi(pq) +1} \equiv m^{k(p-1)(q-1) +1} \equiv (m^{q-1})^{k(p-1)} m \equiv m \text{ mod } q \end{aligned}

이다. 따라서 중국인의 나머지 정리에 의해 D(E(m))m mod nD(E(m)) \equiv m \text{ mod } n이다.

사용

n,e,cn,e,c는 공개되어도 상관 없지만, nn의 소인수인 p,qp,q와 복호화에서 사용하는 dd는 절대 공개해서는 안되고, 추측으로 쉽게 풀릴 수 있는 형태가 되어서도 안된다. 보통 그래서 p,qp,q를 아주 큰 소수로 잡으면서 공격에 대비한다.