Tim saya mendapatkan beberapa kode sisi server (di Jawa) yang menghasilkan token acak dan saya memiliki pertanyaan mengenai hal yang sama -
Tujuan dari token-token ini cukup sensitif - digunakan untuk id sesi, tautan setel ulang kata sandi dll. Jadi mereka memang perlu secara kriptografi acak untuk menghindari seseorang menebaknya atau memaksa mereka dengan layak. Tokennya adalah "panjang" sehingga panjangnya 64 bit.
Kode saat ini menggunakan java.util.Random
kelas untuk menghasilkan token ini. The dokumentasi untuk java.util.Random
dengan jelas menyatakan berikut ini:
Contoh java.util.Random tidak aman secara kriptografis. Sebaiknya gunakan SecureRandom untuk mendapatkan generator nomor pseudo-acak yang aman secara kriptografis untuk digunakan oleh aplikasi yang sensitif terhadap keamanan.
Namun, cara kode saat ini menggunakan java.util.Random
ini - Ini instantiates java.security.SecureRandom
kelas dan kemudian menggunakan SecureRandom.nextLong()
metode untuk mendapatkan seed yang digunakan untuk instantiating java.util.Random
kelas. Kemudian ia menggunakan java.util.Random.nextLong()
metode untuk menghasilkan token.
Jadi pertanyaan saya sekarang - Apakah masih tidak aman mengingat bahwa java.util.Random
sedang diunggulkan menggunakan java.security.SecureRandom
? Apakah saya perlu memodifikasi kode sehingga digunakan java.security.SecureRandom
secara eksklusif untuk menghasilkan token?
Saat ini seed code Random
sekali di startup
Random
sekali pada saat startup, atau apakah seed yang baru untuk setiap token? Mudah-mudahan, ini adalah pertanyaan bodoh, tetapi saya pikir saya akan memeriksanya.
long
atau kemungkinan double
.