Search
Duplicate

모듈러 연산과 RSA 암호화

Created
2022/05/16 14:16
tags
🧮Math
🖥️CS
모듈러 연산은 나머지를 구하는 연산이다. 16mod3=116 \bmod 3 = 1 (16 나누기 3은 몫이 5이고 나머지가 1이다. 16 = 3 * 5 + 1) 으로 표현한다. 프로그래밍에서는 퍼센트(%)로 표현하기도 한다.
더 예시를 들어보면, 16mod7=216 \bmod 7 = 2, 16mod2=016 \bmod 2 = 0 등이 있다.
계속 연산하다 보면 amodna \bmod n 연산을 했을 때 항상 결과는 0 ~ n - 1 사이의 값을 갖는다. 이 결과값들을 집합 Zn={0,1,2,...,n1}Z_n = \{0, 1, 2, ...,n-1\} 으로 나타내고 이 집합을 잉여류라고 한다.
모듈러 연산 중 합동(Congruence)이라는 특징이 있다.
16mod3=116 \bmod 3 = 1 이고 13mod3=113 \bmod 3 = 1 으로 결과값이 같을 때 1613(mod3)16 \equiv 13 \pmod{3} 으로 표현할 수 있다.
유명한 암호화 알고리즘 중 하나인 RSA 알고리즘에 모듈러 연산이 쓰인다.
n=pqn = p * q 그리고 z=(p1)(q1)z = (p - 1) (q - 1)이 있다고 하자. 그리고 zz와 서로소이고 1<e<z1 < e < z를 만족하는 ee를 선택한다. 그러면 (n,e)(n, e)는 공개키가 된다. (ed)modz=1(e * d )\mod z = 1 를 만족하는 d가 있다면 (n,d)(n, d)는 개인키가 된다.
이를 해킹하려면 z,dz, d 값을 알아야되는데 모듈러의 합동 성질때문에 한번에 예측하기가 어려워진다.