의 표준 사용 사례 BigInteger.isProbablePrime(int)
는 암호화입니다. 특히 RSA 와 같은 특정 암호화 알고리즘 에는 무작위로 선택된 큰 소수가 필요합니다. 그러나 중요하게도 이러한 알고리즘은이 숫자 가 소수 가되도록 보장 할 필요가 없습니다 . 매우 높은 확률 로 소수 여야 합니다.
얼마나 높습니까? 음, 암호화 응용 프로그램에서 일반적으로 .isProbablePrime()
128에서 256 사이의 인수를 사용하여 호출합니다. 따라서 비 프라임 번호가 이러한 테스트를 통과 할 확률은 2 128 또는 2 256 중 1 미만 입니다.
이를 관점에서 살펴 보겠습니다. 컴퓨터가 100 억 대이고 각 컴퓨터가 초당 100 억 개의 가능한 소수 (최신 CPU에서 숫자 당 1 클럭주기 미만을 의미 함)를 생성하고 해당 숫자의 소수를으로 테스트 한 .isProbablePrime(128)
경우 평균적으로 1 천억 년 에 한 번씩 소수가 아닌 숫자가 한 번씩 빠져 나갈 것으로 예상 합니다.
즉, 즉, 사건이 될 것입니다 경우 그 100 억 컴퓨터 수 어떻게 든 경험이없는 수십억 년의 수백에 대한 모든 실행 어떤 하드웨어 오류를. 그러나 실제로 는 임의의 우주선이 적절한 시간과 장소에 컴퓨터를 공격하여.isProbablePrime(128)
다른 감지 가능한 효과를 유발하지 않고 반환 값 을 거짓에서 참 으로 뒤집을 가능성이 훨씬 더 높습니다. 그 확실성 수준에서 확률 적 소수성 테스트를 실제로 통과하는 소수.
물론 무작위 우주선 및 기타 하드웨어 결함의 동일한 위험이 AKS 와 같은 결정 론적 소수성 테스트에도 적용됩니다 . 따라서 실제로 이러한 테스트조차도 임의의 하드웨어 오류로 인해 (매우 작은) 기준 오 탐률이 있습니다 (구현 버그와 같은 다른 모든 가능한 오류 원인은 말할 것도 없음).
테스트를 충분히 여러 번 반복하여 사용 된 Miller-Rabin 소수성 테스트 의 본질적인 위양성 비율을 .isProbablePrime()
이 기준 비율보다 훨씬 아래로 내리는 것이 쉽기 때문에, 여러 번 반복해도 Miller-Rabin 테스트는 여전히 AKS와 같이 가장 잘 알려진 결정 론적 소수성 테스트보다 실제로 훨씬 빠르며 암호화 응용 프로그램의 표준 소수성 테스트로 남아 있습니다.
(게다가 실수로 RSA 계수의 요소 중 하나로 강력한 유사 프라임을 우연히 선택한 경우에도 일반적으로 치명적인 오류가 발생하지는 않습니다. 일반적으로 이러한 유사 프라임은 약 길이의 절반, 즉 멀티 프라임 RSA 키로 끝날 것임을 의미합니다 . 인자가 너무 작지 않은 한 ( 프라임 테스트가이를 포착 했어야 함) RSA 알고리즘은 여전히 잘 작동하며, 같은 길이의 일반 RSA 키보다 특정 유형의 공격에 대해 다소 약하지만 키 길이를 불필요하게 줄이지 않으면 키는 여전히 상당히 안전해야합니다.)