(a+b) mod n = c
(a-b) mod n = c
(axb) mod n = c
Property 1. (a + b) mod n =[(a mod n) + (b mod n)] mod n
Property 2. (a - b) mod n =[(a mod n) - (b mod n)] mod n
Property 3. (a x b) mod n =[(a mod n) x (b mod n)] mod n
Property 4. 10^n mod x = (10 mod x)^n mod x (Property 3을 n번 적용한 결과)
상기 모듈러 연산의 성질을 왜 이해해야 하는가?
- 암호 알고리즘에 모듈러 연산 적용 시 a와 b의 값은 일반적으로 매우 큰 수
- 따라서 계산 시 발생하는 오버헤드 완화할 수 있음
모듈러 연산에서 각각의 정수는 덧셈에 대한 역원을 가짐
어떤 정수 a와 그 정수의 덧셈에 대한 역원 b의 합은 모듈러 n에 대해 0과 합동
Zn에서 두 수 a와 b는 다음과 같이 서로 덧셈에 대한 역원이 됨
a+b ≡ 0 (mod n)
Zn에서 a의 덧셈에 대한 역원은 b = n - a
a+b는 n으로 나눠떨어지면서 최대 크기가 n임(모듈러 연산 결과가 0이기 때문)
예) Z10에서 모든 덧셈에 대한 역원의 쌍들을 구해라
(0, 0), (1,9), (2,8), (3,7), (4,6), (5,5)
a+b가 0이 될 수도 있기 때문에
덧셈에 대한 역원은 역관계임
a x b ≡ 1 (mod n)
역원: 역수가 나오는 것
만약 역원이 존재한다 -> 복호화가 가능하다
예) Z10에서 8의 곱셈에 대한 역원을 계산하시오
gcd(10, 8) = 2 != 1이므로 곱셈에 대한 역원이 존재하지 않음
예) Z10에서 곱셈에 대한 모든 역원을 계산하시오
예) Z26에서 12의 곱셈에 대한 역원을 계산하시오
gcd(26, 12) = 2 != 1 -> 곱셈에 대한 역원이 존재하지 않음
예) Z100에서 23의 곱셈에 대한 역원을 계산하시오
r1 = 100, r2 = 23
1) r = 1 -> 최소공배수 1이므로 11의 곱셈에 대한 역원이 존재함
2) 확장 유클리드 알고리즘 -> t = -13
3) 곱셈에 대한 역원은 (-13) mod 100 = 87 -> 23과 87은 Z100에서 곱셈에 대한 역원
4) (23 x 87) mod 100 = 20001 mod 100 = 1 성립함
덧셈에 대한 역원은 항상 존재함
곱셈에 대한 역원은 존재할 수도 있고 존재 안 할 수도 있음
암호에서 역원이 어떻게 사용되는가?
덧셈에 대한 역원이 필요할 때: Zn
곱셈에 대한 역원이 필요할 때: Zn*