Trường hợp sử dụng tiêu chuẩn cho BigInteger.isProbablePrime(int)
là trong mật mã. Cụ thể, các thuật toán mật mã nhất định, chẳng hạn như RSA , yêu cầu các số nguyên tố lớn được chọn ngẫu nhiên. Tuy nhiên, điều quan trọng là các thuật toán này không thực sự yêu cầu những con số này phải được đảm bảo là số nguyên tố - chúng chỉ cần là số nguyên tố với xác suất rất cao.
Cao như thế nào là rất cao? Chà, trong một ứng dụng tiền điện tử, người ta thường gọi .isProbablePrime()
với một đối số nằm trong khoảng từ 128 đến 256. Do đó, xác suất của một số không phải số nguyên tố vượt qua bài kiểm tra như vậy nhỏ hơn một trong 2 128 hoặc 2 256 .
Hãy đặt điều đó trong viễn cảnh: nếu bạn có 10 tỷ máy tính, mỗi máy tính tạo ra 10 tỷ số nguyên tố có thể xảy ra mỗi giây (có nghĩa là ít hơn một chu kỳ xung nhịp cho mỗi số trên bất kỳ CPU hiện đại nào) và tính nguyên thủy của những con số đó đã được kiểm tra .isProbablePrime(128)
, bạn trung bình, sẽ mong đợi một số không phải nguyên tố trượt một lần trong mỗi 100 tỷ năm .
Đó là trường hợp, nếu 10 tỷ máy tính đó bằng cách nào đó có thể chạy hàng trăm tỷ năm mà không gặp bất kỳ lỗi phần cứng nào . Tuy nhiên, trong thực tế, rất nhiều khả năng một tia vũ trụ ngẫu nhiên tấn công máy tính của bạn vào đúng thời điểm và địa điểm để lật giá trị trả về .isProbablePrime(128)
từ false thành true, mà không gây ra bất kỳ hiệu ứng có thể phát hiện nào khác so với trường hợp không - số chuẩn để thực sự vượt qua bài kiểm tra tính nguyên sơ xác suất ở mức độ chắc chắn đó.
Tất nhiên, rủi ro tương tự đối với các tia vũ trụ ngẫu nhiên và các lỗi phần cứng khác cũng áp dụng cho các bài kiểm tra tính nguyên sơ xác định như AKS . Do đó, trên thực tế, ngay cả những thử nghiệm này cũng có tỷ lệ dương tính giả (rất nhỏ) do lỗi phần cứng ngẫu nhiên (chưa kể đến tất cả các nguồn lỗi có thể khác, chẳng hạn như lỗi triển khai).
Vì thật dễ dàng để đẩy tỷ lệ dương tính giả nội tại của xét nghiệm tính nguyên thủy Miller – Rabin được sử dụng .isProbablePrime()
xuống thấp hơn nhiều so với tỷ lệ cơ bản này, chỉ cần lặp lại xét nghiệm đủ nhiều lần và kể cả khi lặp lại nhiều lần, xét nghiệm Miller – Rabin vẫn Trong thực tế nhanh hơn nhiều so với các bài kiểm tra tính nguyên sơ xác định được biết đến nhiều nhất như AKS, nó vẫn là bài kiểm tra tính nguyên sơ tiêu chuẩn cho các ứng dụng mật mã.
(Bên cạnh đó, ngay cả khi bạn vô tình chọn một giả mạo mạnh làm một trong những yếu tố của mô-đun RSA của bạn, nó thường sẽ không dẫn đến thất bại thảm hại. Thông thường, những giả như vậy sẽ là sản phẩm của hai (hoặc hiếm hơn) số nguyên tố xấp xỉ một nửa chiều dài, có nghĩa là bạn sẽ kết thúc với một khóa RSA nhiều nguyên tố . Miễn là không có yếu tố nào quá nhỏ (và nếu có, kiểm tra tính nguyên tố phải bắt được chúng), thuật toán RSA sẽ vẫn hoạt động tốt và khóa, mặc dù hơi yếu hơn khi chống lại một số kiểu tấn công nhất định so với các khóa RSA bình thường có cùng độ dài, nhưng vẫn phải an toàn hợp lý nếu bạn không cần thiết phải tiết kiệm độ dài khóa.)