กรณีการใช้งานมาตรฐานสำหรับBigInteger.isProbablePrime(int)
อยู่ในการเข้ารหัส โดยเฉพาะอย่างยิ่งอัลกอริทึมการเข้ารหัสบางอย่างเช่นRSAต้องการช่วงเวลาขนาดใหญ่ที่สุ่ม อย่างไรก็ตามที่สำคัญอัลกอริทึมเหล่านี้ไม่ต้องการให้ตัวเลขเหล่านี้ได้รับการรับรองว่าเป็นไพรม์ - เพียงแค่ต้องเป็นไพรม์ที่มีโอกาสสูงมาก
สูงมากแค่ไหน? ดีในการประยุกต์ใช้การเข้ารหัสลับหนึ่งจะเรียกโดยทั่วไป.isProbablePrime()
ที่มีอยู่ที่ไหนสักแห่งโต้เถียงระหว่าง 128 และ 256 ดังนั้นความน่าจะเป็นของจำนวนที่ไม่สำคัญผ่านการทดสอบดังกล่าวจะน้อยกว่าหนึ่งใน 2 128หรือ 2 256
ลองมองในมุมมอง: ถ้าคุณมีคอมพิวเตอร์ 10 พันล้านเครื่องแต่ละเครื่องจะสร้างจำนวนเฉพาะที่น่าจะเป็น 10 พันล้านต่อวินาที (ซึ่งหมายความว่าน้อยกว่าหนึ่งรอบสัญญาณนาฬิกาต่อหนึ่งหมายเลขในซีพียูสมัยใหม่ใด ๆ ) และความเป็นอันดับแรกของตัวเลขเหล่านั้นได้รับการทดสอบด้วย.isProbablePrime(128)
คุณ ก็จะเฉลี่ยคาดว่าจำนวนหนึ่งที่ไม่สำคัญในการลื่นในหนึ่งครั้งในทุก ๆ 100 พันล้านปี
นั่นคือการที่จะเป็นกรณีที่ถ้าผู้ที่ 10 พันล้านเครื่องคอมพิวเตอร์สามารถทำได้อย่างใดวิ่งทั้งหมดสำหรับหลายร้อยหลายพันล้านปีโดยไม่ต้องประสบใดล้มเหลวของฮาร์ดแวร์ ในทางปฏิบัติ แต่มันมากมีโอกาสมากขึ้นสำหรับรังสีคอสมิกสุ่มการนัดหยุดงานคอมพิวเตอร์ของคุณในเพียงเวลาที่เหมาะสมและสถานที่ที่จะพลิกค่าตอบแทนของ.isProbablePrime(128)
จาก false เป็นจริงโดยไม่ก่อให้เกิดผลการตรวจพบอื่น ๆ กว่านั้นสำหรับที่ไม่ใช่ - จำนวนไพรม์เพื่อผ่านการทดสอบความเป็นไปได้ในระดับแรกที่ระดับความแน่นอนนั้น
แน่นอนความเสี่ยงแบบเดียวกันของรังสีคอสมิกแบบสุ่มและความผิดพลาดของฮาร์ดแวร์อื่น ๆ ยังนำไปใช้กับการทดสอบเบื้องต้นที่กำหนดเช่นAKS ดังนั้นในทางปฏิบัติแม้การทดสอบเหล่านี้จะมีอัตราผลบวกเท็จพื้นฐาน (เล็กมาก) เนื่องจากความล้มเหลวของฮาร์ดแวร์แบบสุ่ม (ไม่ต้องพูดถึงแหล่งที่มาของข้อผิดพลาดอื่น ๆ ทั้งหมดเช่นข้อบกพร่องในการใช้งาน)
เนื่องจากเป็นเรื่องง่ายที่จะผลักดันอัตราผลบวกเท็จที่แท้จริงของการทดสอบ.isProbablePrime()
เบื้องต้นของมิลเลอร์ - ราบินที่ใช้โดยต่ำกว่าอัตราพื้นฐานนี้เพียงแค่ทำซ้ำการทดสอบหลาย ๆ ครั้งอย่างเพียงพอและตั้งแต่นั้นเป็นต้นมาแม้จะทำซ้ำหลายครั้งการทดสอบมิลเลอร์ - ราบินก็ยังคงอยู่ ในทางปฏิบัติเร็วกว่าการทดสอบพื้นฐานเชิงกำหนดที่รู้จักกันดีอย่าง AKS แต่ยังคงเป็นการทดสอบพื้นฐานมาตรฐานสำหรับแอปพลิเคชันการเข้ารหัส
(นอกจากนี้แม้ว่าคุณบังเอิญเลือก pseudoprime ที่แข็งแกร่งเป็นหนึ่งในปัจจัยของโมดูลัส RSA ของคุณโดยทั่วไปแล้วจะไม่นำไปสู่ความล้มเหลวอย่างร้ายแรงโดยทั่วไปแล้ว pseudoprimes จะเป็นผลคูณสองครั้ง (หรือน้อยกว่านั้น) โดยประมาณ ความยาวครึ่งหนึ่งซึ่งหมายความว่าคุณจะได้รับคีย์ RSA แบบหลายไพรม์ตราบเท่าที่ไม่มีปัจจัยใดน้อยเกินไป (และถ้าเป็นเช่นนั้นการทดสอบลำดับความสำคัญควรจะจับได้) อัลกอริทึม RSA จะ ยังคงใช้งานได้ดีและคีย์แม้ว่าจะค่อนข้างอ่อนแอต่อการโจมตีบางประเภทกว่าคีย์ RSA ปกติที่มีความยาวเท่ากัน แต่ก็ยังคงมีความปลอดภัยพอสมควรหากคุณไม่จำเป็นต้องใช้ความยาวคีย์โดยไม่จำเป็น)