Standart kullanım durumu BigInteger.isProbablePrime(int)
kriptografidir. Spesifik olarak, RSA gibi belirli şifreleme algoritmaları, rastgele seçilmiş büyük asal sayıları gerektirir. Daha da önemlisi, bu algoritmalar bu sayıların asal olmalarının garanti edilmesini gerçekten gerektirmez - sadece çok yüksek bir olasılıkla asal olmaları gerekir .
Ne kadar yüksek çok yüksek? Bir kripto uygulamasında, tipik olarak .isProbablePrime()
128 ile 256 arasında bir yerde bir argümanla çağrılır. Dolayısıyla, asal olmayan bir sayının böyle bir testi geçme olasılığı 2 128 veya 2 256'da birden azdır .
Eğer 10 milyar bilgisayarları, (herhangi bir modern CPU üzerindeki sayısı başına daha az bir saat döngüsü anlamına geleceğini) Her üreten saniyede 10 milyar muhtemel asal sayılar ve bu sayıların asallık olsaydı ile test edilmiştir: perspektifle o edelim koymak .isProbablePrime(128)
sizin, ortalama olarak, asal olmayan bir sayının her 100 milyar yılda bir düşmesini bekler .
Yani, eğer bu 10 milyar bilgisayar, herhangi bir donanım arızası yaşamadan yüz milyarlarca yıl boyunca bir şekilde çalışabilseydi, durum bu olurdu . Uygulamada, olsa da, bu çok doğru zamanda ve dönüş değeri çevirmek için yerde bilgisayarınızı grev rastgele kozmik ışın için daha muhtemel ait .isProbablePrime(128)
bir olmayan için olandan başka saptanabilir etkilere neden olmadan, yanlıştan true -Asal sayı, olasılıksal asallık testini o kesinlik düzeyinde gerçekten geçmek için.
Tabii ki, rastgele kozmik ışınlar ve diğer donanım hataları için aynı risk, AKS gibi deterministik asallık testleri için de geçerlidir . Bu nedenle, pratikte, bu testler bile rastgele donanım arızalarından kaynaklanan (çok küçük) bir temel yanlış pozitif oranına sahiptir (uygulama hataları gibi diğer tüm olası hata kaynaklarından bahsetmiyorum bile).
Kullanılan Miller-Rabin asallık testinin içsel yanlış pozitif oranını, .isProbablePrime()
bu temel oranın çok altına itmek kolay olduğundan , sadece testi yeterince tekrarlayarak ve birçok kez tekrarlanmasına rağmen Miller-Rabin testi hala AKS gibi en iyi bilinen deterministik asallık testlerinden çok daha hızlı pratikte, kriptografik uygulamalar için standart asallık testi olmaya devam ediyor.
(Ayrıca, RSA modülünüzün faktörlerinden biri olarak yanlışlıkla güçlü bir sahte suç seçmiş olsanız bile, bu genellikle yıkıcı bir başarısızlığa yol açmaz. Tipik olarak, bu tür sahte suçlar, yaklaşık olarak iki (veya nadiren daha fazla) asalın ürünleri olacaktır. uzunluğun yarısı, yani birden çok üssü RSA anahtarına sahip olacağınız anlamına gelir . Faktörlerden hiçbiri çok küçük olmadığı sürece (ve eğer öyleyse, asallık testi onları yakalamalıydı), RSA algoritması yine de gayet iyi çalışıyor ve anahtar, belirli saldırı türlerine karşı aynı uzunluktaki normal RSA anahtarlarından biraz daha zayıf olsa da, anahtar uzunluğunda gereksiz yere eksik kalmadıysanız, yine de makul derecede güvenli olmalıdır.)