보안 공부/암호학

[암호수학1] 유클리드 알고리즘 + 디오판투스 방정식 (특수해와 일반해 구하기)

sh1256 2022. 9. 21. 20:31
728x90

https://sh1256.tistory.com/90

[암호수학1] 유클리드 알고리즘 이론~코딩

유클리드 알고리즘(Euclidean algorithm)이란? 유클리드 알고리즘(유클리드 호제법)은 자연수 2개의 최대공약수를 구하는 하나의 알고리즘이다. 유클리드 알고리즘을 쓰면, a와 b의 공약수들을 나열하

sh1256.tistory.com


위 게시물(유클리드 알고리즘 (+확장))을 먼저 보고 오셔야 이해가 됩니다.

자 그럼 ax+by=c 중 (x,y)가 무수하게 많아지는 경우가 있습니다.
아래 예재의 10x + 5y=30만 봐도 쉽게 알 수 있죠.


컴퓨터는 이렇게 많은 (x,y)쌍 중 하나를 골라서 사용해야 합니다. 여러개를 혼용해서 사용하면 에러가 뜨로 혼동이 오니까요. 여러개의 (x,y) 중 특수해(Particular solution)를 아래와 같이 정의합니다.

이 때 d = gcd(a,b)

이렇게 수식으로 보니까 헷갈립니다.


예시를 하나 들어서 설명하겠습니다.

[특수해 구하기]

자 그럼 먼저 특수해를 구할 수 있는 식으로 바꿔봅시다.

위 식에서 c는 35입니다.

이 때 3과 2의 최대공약수가 1이 됩니다. gcd(3,2)=1.
그러면 유클리드 확장 알고리즘을 사용할 수 있겠죠?

저는 이전 계시물에서 작성했던 코드를 사용해 s와 t 값을 구했습니다.

코드 실행 결과 s=1, t=-1을 구했습니다.

그러면 결과적으로

21x+14y=35의 특수해는
[x=(c/d)*s=5, y=(c/d)*t=-5]
(5,-5)인 것입니다.


[일반해 구하기]

일반해는 아래와 같이 구할 수 있습니다. 이 때 x0과 y0은 각각 특수해*(c/d)를 나타냅니다.

그럼 21x+14y=35에 맞게 식을 채워볼까요? d는 여기서도 a와 b의 최대공약수입니다.


아래는 특수해와 일반해를 구하는 예시를 정리해 놓은 것