PHP의 gmp_invert() 함수란?
gmp_invert() 함수는 GMP(GNU Multiple Precision) 숫자에 대한 모듈러 역원(modular inverse)을 계산하는 PHP 내장 함수입니다. 두 개의 GMP 숫자를 인자로 받아, 첫 번째 숫자의 모듈러 역원을 반환합니다.
모듈러 역원이란, 어떤 수 a를 m으로 나눌 때 곱한 결과가 나머지 1이 되는 값을 의미합니다. 즉, 다음 조건을 만족하는 x를 찾는 것입니다.
(a * x) mod m = 1
동작 원리 예시
예를 들어 5와 14라는 두 숫자가 있다고 가정해 보겠습니다. 이때 5의 모듈러 역원은 3입니다. 그 이유는 다음과 같습니다.
(3 * 5) mod 14 = 15 mod 14 = 1
3과 5를 곱한 결과를 14로 나눈 나머지가 1이 되므로, 3이 바로 5의 모듈러 역원입니다.
문법
gmp_invert(num1, num2)
매개변수 설명
num1: 역원을 구할 대상이 되는 첫 번째 GMP 숫자입니다.
num2: 모듈러 연산의 기준이 되는 두 번째 GMP 숫자(모듈러 값)입니다.
반환값
gmp_invert() 함수는 전달된 두 숫자에 대해 계산된 모듈러 역원을 GMP 숫자 형태로 반환합니다.
참고: 만약 역원이 존재하지 않는 경우(두 숫자가 서로소가 아닌 경우), 이 함수는 false를 반환하며 PHP 8.0부터는 ValueError 예외가 발생합니다.
실전 코드 예제
다음은 gmp_invert() 함수를 사용하는 간단한 예제입니다.
<?php $n1 = "5"; $n2 = "14"; $res = gmp_invert($n1, $n2); echo $res; ?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
3
활용 분야
모듈러 역원은 특히 암호학 분야에서 중요하게 활용됩니다. RSA 공개키 암호화 알고리즘에서 개인키를 생성할 때 모듈러 역원 계산이 핵심 단계로 사용되며, 디지털 서명 및 기타 수학적 알고리즘에서도 널리 응용됩니다.