RSA는 어떤 수의 소인수분해는 아주 어렵지만, 반대로 소인수를 곱해서 원래 수를 만드는 것은 쉽다는 성질을 이용한 암호 체계이다. 암호명은 이 암호를 개발한 세 암호학자 Rivest-Shamir-Adelman에서 유래한다.
키 형성
- 두 소수 p,q를 골라서 n=pq로 놓는다.
- e를 gcd(ϕ(n),e)=1이 되도록 뽑는다. ϕ는 오일러 totient 함수이다.
- d=e−1 mod ϕ(n) 을 계산한다. modular inverse는 e의 선택에 의해 언제나 존재하고, 확장된 유클리도 호제법을 이용해서 아주 빠른 시간 안에 계산 가능하다.
암호화
평문 m을 암호화 하는 함수는 다음과 같다:
E(m)≡me mod n
암호화 함수의 일대일 대응을 유지하기 위해 m<n을 가정한다.
복호화
암호문 c를 복호화 하는 함수는 다음과 같다:
D(c)≡cd mod n
실제로 평문을 암호화했다가 복호화하면 복구 가능하다는 것을 보일 수 있다.
D(E(m))≡E(m)d mod n≡med mod n≡mkϕ(n)+1 mod n
gcd(m,n)=1 일 경우, 오일러의 toitient 정리에 의해 mϕ(n)≡1 mod n이므로 $D(E(m)) \equiv m \text{ mod } n $이다.
gcd(m,n)=1일 경우, n=pq이므로, gcd(m,n)은 p 또는 q이다. 일반성을 잃지 않고 gcd(m,n)=p로 놓자.
일단 med mod p≡0이고, m mod p≡0이므로 m≡D(E(m)) mod p이다.
(m,q)=1이므로 페르마의 소정리에 의해 mq−1≡1 mod q이다. 따라서
D(E(m))≡mkϕ(pq)+1≡mk(p−1)(q−1)+1≡(mq−1)k(p−1)m≡m mod q
이다. 따라서 중국인의 나머지 정리에 의해 D(E(m))≡m mod n이다.
사용
n,e,c는 공개되어도 상관 없지만, n의 소인수인 p,q와 복호화에서 사용하는 d는 절대 공개해서는 안되고, 추측으로 쉽게 풀릴 수 있는 형태가 되어서도 안된다. 보통 그래서 p,q를 아주 큰 소수로 잡으면서 공격에 대비한다.