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.Randomkelas untuk menghasilkan token ini. The dokumentasi untuk java.util.Randomdengan 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.Randomini - Ini instantiates java.security.SecureRandomkelas dan kemudian menggunakan SecureRandom.nextLong()metode untuk mendapatkan seed yang digunakan untuk instantiating java.util.Randomkelas. Kemudian ia menggunakan java.util.Random.nextLong()metode untuk menghasilkan token.
Jadi pertanyaan saya sekarang - Apakah masih tidak aman mengingat bahwa java.util.Randomsedang diunggulkan menggunakan java.security.SecureRandom? Apakah saya perlu memodifikasi kode sehingga digunakan java.security.SecureRandomsecara eksklusif untuk menghasilkan token?
Saat ini seed code Randomsekali di startup
Randomsekali pada saat startup, atau apakah seed yang baru untuk setiap token? Mudah-mudahan, ini adalah pertanyaan bodoh, tetapi saya pikir saya akan memeriksanya.
longatau kemungkinan double.