algorithm

RSA

CRT

CRT란?

  • CRT == The Chinese Remainder Theorem [중국인의 나머지 정리]
  • 어떤 쌍마다 서로소 자연수들에 대한 연립 합동식의 해의 유일한 존재에 대한 정리

왜 중국인의 나머지 정리인가?

5세기 중국 수학에서 손자산경에 연립합동식이 문제가 처음 등장했기 때문에

” 개수를 알지 못하는 것들이 있다. 셋씩 센다면 두 개가 남고, 다섯씩 센다면 세 개가 남고, 일곱씩 센다면 두 개가 남는다. 질문: 총 몇 개인가? “

과정

  • x ≡ 1 (mod 3)
  • x ≡ 3 (mod 5)
  • x ≡ 2 (mod 7) 위를 만족하는 x를 구해보자

x ≡ 1 (mod 3)

x = 3n +1

x ≡ 3 (mod 5)

3n+1 ≡ 3 (mod 5)
3n+1 -1 ≡ 3 -1 (mod 5) 3n ≡ 2 (mod 5)

덧셈, 뺄셈, 곱셈은 modular 연산에서 닫혀있기 때문에 양변에 -1을 취해도 성립한다.

3n을 n으로 만들기 위해서는 3으로 나눠야 하지만 모듈러 연산에서는 나눗셈을 할 수없다. 그래서 3의 역원을 곱해줘야 한다.

역원

역원을 구하기 전에 모듈러 연산에 대해 알아야 한다.

  • 덧셈 : (a + b) % M = (( a % M ) + ( b % M )) % M
  • 뺄셈 : (a - b) % M = (( a % M ) -( b % M ) + M ) % M
  • 곱셈 : (a * b) % M = (( a % M ) * ( b % M)) % M
  • 나눗셈 : (a / b) % M = (( a % M ) / ( b % M)) % M ..?

나눗셈은 이렇게 모듈러 연산을 하지 않는다! 그럼 어떻게 해야할까?

( a / b) % M = ( a * b-1 ) % M
= (( a % M) * (b-1 % M)) % M

여기서 b-1은 b와 역원관계에 있다. 하지만 b-1은 모듈러 영역에서 알맞은 값이 아니다.
b * b-1 ≡ 1 (mode M)    0 <=b-1 < M 일때 b-1의 값은 얼마인가?

### 페르마의 소정리 역원은 모듈러를 취했을 때 1이 나오는 값을 찾으면 된다

ap-1 ≡ 1 (mod p)
단, p는 소수이고 a가 p의 배수가 아닌 경우
ap-1 = a * ap-2 ≡ 1 (mod p)

결론 : a * a-1 ≡ 1 (mod p)일 때 a-1은 ap-2가 된다.

(( a % M) * (b-1 % M)) % M = (( a % M) * (bM-2 % M)) % M

곱셈은 모듈러 연산의 분배법칙이 가능하기 때문에 오버플로우가 나지 않도록 M으로 나눠주면서 bM-2를 계산하면 된다.

과정 이어서

3n ≡ 2 (mod 5)

n ≡ 3-1 * 2 (mod 5)
n ≡ 33 (mod 5) * 2 (mod 5)
n ≡ 2 * 2 (mod 5)
n ≡ 4 (mod 5)
n = 5m +4

이 식을 아까 구한 x = 3n +1 에 대입한다

x = 3 ( 5m + 4) +1 = 15m + 13

x ≡ 2 (mod 7)

15m + 13 ≡ 2 (mod 7)
15m ≡ -11 (mod 7)
15m ≡ 3 (mod 7)
m ≡ 15-1 * 3 (mod 7)
m ≡ 1 * 3 (mod 7)
m ≡ 3 (mod 7)
m = 7k +3

이식을 x = 15m +13에 대입

x = 15(7k + 3) + 13 = 105k + 58
x = 105k + 58    ( k = 0,1,2 …)

정리

x ≡ ∑ni=1 Mi(M−1i mod mi)ai (mod M)

  • M = m1m2m3…mn
  • Mi = M / mi