디피-헬만 키 교환.
Alice와 Bob은 디피-헬만 키 교환으로 비밀을 공유해요. 두 사람은 소수로 시작해서 개인 키를 고르고, 공개 키를 만들어 공유한 다음, 공유 비밀 키를 만들어요.
테스트 프로그램이 소수 p와 g를 제공해요.
Alice는 1보다 크고 p보다 작은 개인 키 a를 골라요. Bob도 같은 방식으로 개인 키 b를 골라요.
Alice는 공개 키 A를 계산해요.
A = gᵃ mod p
같은 p와 g를 사용해서 Bob도 자신의 개인 키 b로 공개 키 B를 계산해요.
Alice와 Bob은 공개 키를 교환해요. Alice는 비밀 키 s를 계산해요.
s = Bᵃ mod p
Bob은 다음을 계산해요.
s = Aᵇ mod p
두 계산은 같은 결과를 내요! 이제 Alice와 Bob은 비밀 s를 공유해요.
이 연습 문제를 푸는 한 가지 방법은 모듈러 거듭제곱 함수를 직접 구현하는 거예요. 이에 대해 더 알아보려면 다음 문서를 참고해요.
많은 구현이 모든 입력 범위에서 제대로 동작하지는 않아요. 모든 유효한 입력이 유효한 결과를 내는지 확인하는 데 도움이 되는 추가 선택 테스트가 정의되어 있어요.
보너스 테스트를 실행하려면 #[ignore] 플래그를 지우고, 다음과 같이 big-primes 기능을 켜서 테스트를 실행해요:
$ cargo test --features big-primes