Apakah SecureRandom
benang aman? Artinya, setelah menginisialisasi, dapatkah akses ke nomor acak berikutnya diandalkan agar thread safe? Memeriksa kode sumber tampaknya menunjukkan bahwa memang benar, dan laporan bug ini tampaknya menunjukkan bahwa kurangnya dokumentasinya sebagai thread safe adalah masalah javadoc. Adakah yang mengonfirmasi bahwa ini memang thread safe?
sumber
SecureRandom
tidak hanya bisa lambat, tetapi juga berpotensi hang karena entropi hilangImplementasi saat ini
SecureRandom
adalah thread safe, khususnya dua metode mutasinextBytes(bytes[])
dansetSeed(byte[])
disinkronkan.Sejauh yang saya tahu, semua metode mutasi pada akhirnya diarahkan melalui kedua metode tersebut, dan
SecureRandom
menimpa beberapa metodeRandom
untuk memastikannya. Yang berfungsi tetapi bisa rapuh jika penerapannya diubah di masa mendatang.Solusi terbaik adalah menyinkronkan
SecureRandom
instans secara manual terlebih dahulu. Ini berarti setiap tumpukan panggilan akan memperoleh dua kunci pada objek yang sama, tetapi biasanya sangat murah pada JVM modern. Artinya, tidak banyak salahnya menyinkronkan diri Anda secara eksplisit. Sebagai contoh:sumber
java.security.SecureRandom#nextBytes
di Java 8 tidak disinkronkan. Bisakah Anda menjelaskan dalam versi Java apakah Anda menemukan sinkronisasi#nextBytes
?.