वर्तमान कार्यान्वयन SecureRandomथ्रेड सुरक्षित है, विशेष रूप से दो उत्परिवर्तन विधियों nextBytes(bytes[])और setSeed(byte[])सिंक्रनाइज़ हैं।
खैर, जहाँ तक मैं बताने में सक्षम रहा हूँ, सभी उत्परिवर्तन विधियों को अंततः उन दो विधियों के माध्यम से रूट किया जाता है और यह सुनिश्चित करने के लिए SecureRandomकुछ तरीकों को ओवरराइड करता Randomहै। जो काम करता है लेकिन अगर भविष्य में कार्यान्वयन बदल जाता है तो वह भंगुर हो सकता है।
सबसे अच्छा समाधान SecureRandomपहले उदाहरण पर मैन्युअल रूप से सिंक्रनाइज़ करना है । इसका मतलब है कि प्रत्येक कॉल स्टैक एक ही वस्तु पर दो ताले प्राप्त करेगा, लेकिन यह आमतौर पर आधुनिक जेवीएम पर बहुत सस्ता है। यही है, अपने आप को स्पष्ट रूप से सिंक्रनाइज़ करने में बहुत नुकसान नहीं है। उदाहरण के लिए:
SecureRandom rnd = ...;
byte[] b = new byte[NRANDOM_BYTES];
synchronized (rnd) {
rnd.nextBytes(b);
}