प्रलेखन के अनुसार , सिक्योर रैंडम द्वारा उपयोग किए जाने वाले विभिन्न एल्गोरिदम वरीयता के क्रम में हैं:
- अधिकांश * NIX सिस्टम पर
- NativePRNG
- SHA1PRNG
- NativePRNGBlocking
- NativePRNGNonBlocking
- विंडोज सिस्टम पर
- SHA1PRNG
- विंडोज PRNG
चूंकि आपने लिनक्स के बारे में पूछा था, इसलिए मैं विंडोज के कार्यान्वयन को नजरअंदाज कर रहा हूं, साथ ही SunPKCS11 जो केवल सोलारिस पर उपलब्ध है, जब तक कि आप इसे स्वयं स्थापित नहीं करते - और तब आप यह नहीं पूछ रहे होंगे।
उन्हीं प्रलेखन के अनुसार, इन एल्गोरिदम का उपयोग क्या है
SHA1PRNG
प्रारंभिक बीजारोपण वर्तमान में सिस्टम विशेषताओं और java.security एंट्रोपी सभा उपकरण के संयोजन के माध्यम से किया जाता है।
NativePRNG
nextBytes() उपयोग /dev/urandom
generateSeed()करता है/dev/random
NativePRNGBlocking
nextBytes() और generateSeed()उपयोग/dev/random
NativePRNGNonBlocking
nextBytes() और generateSeed()उपयोग/dev/urandom
इसका मतलब है कि यदि आप उपयोग करते हैं SecureRandom random = new SecureRandom(), तो यह उस सूची तक नीचे चला जाता है जब तक कि यह एक काम नहीं करता है, जो आमतौर पर मूल निवासी होगा। और इसका मतलब है कि यह खुद से बीज /dev/random(या उपयोग करता है कि यदि आप स्पष्ट रूप से एक बीज उत्पन्न करते हैं), तो उपयोग करता है/dev/urandom अगले बाइट्स, इन्ट्स, डबल, बूलियन, व्हाट्स-हैव्स प्राप्त करने के लिए ।
चूंकि /dev/randomअवरुद्ध है (यह एंट्रॉपी पूल में पर्याप्त एन्ट्रापी होने तक ब्लॉक करता है), जो प्रदर्शन को बाधित कर सकता है।
इसका एक समाधान पर्याप्त एन्ट्रापी उत्पन्न करने के लिए जाली की तरह कुछ का उपयोग कर रहा है, दूसरा समाधान /dev/urandomइसके बजाय उपयोग कर रहा है । जबकि आप यह निर्धारित कर सकते हैं कि पूरे jvm के लिए, एक बेहतर समाधान इसका SecureRandomउपयोग करके, इस विशिष्ट उदाहरण के लिए कर रहा है SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking")। ध्यान दें कि यदि NativePRNGNonBlocking है, तो विधि NoSuchAl एल्गोरिदम को फेंक सकती है, इसलिए डिफ़ॉल्ट पर वापस आने के लिए तैयार रहें।
SecureRandom random;
try {
random = SecureRandom.getInstance("NativePRNGNonBlocking");
} catch (NoSuchAlgorithmException nsae) {
random = new SecureRandom();
}
यह भी ध्यान दें कि अन्य * निक्स सिस्टम पर, /dev/urandomअलग तरह से व्यवहार कर सकते हैं ।
क्या /dev/urandomयादृच्छिक पर्याप्त है?
पारंपरिक ज्ञान यह है कि केवल /dev/randomयादृच्छिक यादृच्छिक है। हालाँकि, कुछ आवाज़ें अलग हैं। में "उपयोग SecureRandom के लिए सही रास्ता" और "/ dev / urandom के बारे में मिथक" , यह तर्क दिया जाता है कि /dev/urandom/है सिर्फ अच्छे के रूप में।
सूचना सुरक्षा ढेर पर उपयोगकर्ता इससे सहमत हैं । मूल रूप से, यदि आपको पूछना है, तो /dev/urandomअपने उद्देश्य के लिए ठीक है।