암호/기본정리

중국인의 나머지 정리

mathjs 2024. 10. 26. 20:49

중국인의 나머지 정리(CRT)

정리.1
r개의 정수 p1, p2, ..., pr 이 주어졌을 때,
임의의 두 정수에 대해서 서로 소의 관계에 있다면, i ≠ j 에 대해서 gcd( pi , pj ) = 1 이면,
연립 합동식 x ≡ xi (mod pi) i = 1, 2, ..., r에는 법 n = p1·p2· ... ·pr에 유일한 해가 존재한다.

        x = [ ∑ (n/pi)·qi·xi ] mod n (범위: i = 1부터 r 까지)


이때 qi는 법 pi에 대한 (n/pi)의 곱셈상의 역원이 된다.

Figure.1 중국인의 나머지 정리

 

예제 1. x ≡ 3 (mod 11), x ≡ 7 (mod 17)의 연립합동식?

→ p1 = 11, p2 = 17, 서로소의 관계 법 n = p1*p2 = 11*17 = 187

→ 곱셈상의 역원을 각각 구한다.

식① (n/p1)·q1 mod p1 = 1

        (187/11)·q1 mod 11 = 1, 

        17·q1 ≡  1 (mod 11), 곱셈상 역원 q1 = 2.

② (n/p2)·q2 mod p2 = 1,

        (187/17)·q2 mod 17 =1,

       11·q2 ≡ 1 (mod 17), 곱셈상 역원 q2 = 14.

 

∴ X = (n/p1)q1x1 + (n/p2)q2x2 = 17*2*3 +11*14*7 mod 187 58.

   1) x ≡ 3 (mod 11)에 대한 계산검증: 58 mod 11 = 3

   2) x ≡ 7 (mod 17)에 대한 계산검증: 58 mod 17 = 7

 

예제 2. x ≡ 3 (mod 11), x ≡ 7 (mod 17), x ≡ 18 (mod 23)의 연립합동식?

→ p1 = 11, p2 = 17, p3 = 23  서로소의 관계 법 n = p1*p2*p3 = 11*17*23 = 4301

→ 곱셈상의 역원을 각각 구한다.

식① (n/p1)·q1 mod p1 = 1

        (4301/11)·q1 mod 11 = 1, 

        391·q1 ≡  1 (mod 11), 곱셈상 역원 q1 = 2.

② (n/p2)·q2 mod p2 = 1,

        (4301/17)·q2 mod 17 =1,

       253·q2 ≡ 1 (mod 17), 곱셈상 역원 q2 = 8.

식③ (n/p3)·q3 mod p3 = 1,

        (4301/23)·q3 mod 23 =1,

       187·q3 ≡ 1 (mod 23), 곱셈상 역원 q3 = 8.

 

X = (n/p1)q1x1 + (n/p2)q2x2 + (n/p3)q3x3  = 391*2*3 + 253*8*7 + 187*8*18  mod 4301 = 432.

   1) x ≡ 3 (mod 11)에 대한 계산검증: 432 mod 11 = 3

   2) x ≡ 7 (mod 17)에 대한 계산검증: 432 mod 17 = 7

   3) x ≡ 18 (mod 23)에 대한 계산검증: 432 mod 23 = 18

 

※ 곱셈상의 역원
/* 곱셈상이 역원은 주어진 수와 곱했을 때 곱의 결과가 1이 되는 수.
   정수 a가 법 m에 대해 역원을 갖는 식  a* (1/a) ≡ 1 (mod m)
   - a와 m이 서로소가 아니면, 역원은 존재하지 않는다.
   - a와 m가 서로소 gcd (a, m) =1이면, 유클리드 확장알고리즘으로 역원을 구할 수 있다.
Parameter: a, m 
return: 역원
*/

function modInverse (a, m) {
    var ext = extend_Euclid(a, m); // 유클리드 확장 알고리즘 참고
    if (ext.gcd != 1) {
        return -1;
    }    
    return (ext.x % m + m) % m; // x값이 음의 수이면, 양의 수로 변환
}

.