GNU/Linux >> Belajar Linux >  >> Linux

Java SecureRandom tidak memblokir? Bagaimana?

Baik OpenJDK dan Sun membaca dari /dev/urandom , bukan /dev/random , setidaknya pada mesin tempat saya menguji (OpenJDK JRE 6b27 dan Sun JRE 6.26 di Debian squeeze amd64). Untuk beberapa alasan, keduanya membuka /dev/random juga tapi tidak pernah membacanya. Jadi artikel blog yang Anda baca salah atau diterapkan ke versi yang berbeda dari saya (dan, tampaknya, milik Anda).

Anda dapat memeriksa apakah milik Anda membaca dari /dev/random atau /dev/urandom dengan menelusurinya:

strace -o a.strace -f -e file java A

dan cari bagian pelacakan yang relevan:

21165 open("/dev/random", O_RDONLY)     = 6
…
21165 open("/dev/urandom", O_RDONLY)    = 7
…
21165 read(7, "\322\223\211\262Zs\300\345\3264l\254\354[\6wS\[email protected]", 20) = 20
…

Jangan khawatir, /dev/urandom sangat baik untuk kriptografi.


SecureRandom Java bisa gunakan /dev/random, tetapi hanya sebentar.

Khususnya hanya menggunakannya saat menghasilkan informasi benih, baik dengan memanggil SecureRandom.generateSeed() secara eksplisit atau dengan panggilan pertama ke nextInt()

Jadi karena itu, untuk mengulangi contoh bash Anda, Anda dapat melakukan hal berikut, dan itu harus diblokir.

import java.security.SecureRandom;

public class A {
    public static void main(String[] args) {
        SecureRandom sr;
        int out = 0;
        for (int i = 0; i < 1<<20 ; i++) {
            sr = new SecureRandom();
            out ^= sr.nextInt();
        }
        System.out.println(out);
    }
}

Bukan hanya untuk menjaga utas lama tetap hidup tetapi beberapa orang mungkin telah melewatkan bagian penting dari cerita panjang di balik ini ... Ini tentang bug yang terkenal dan persisten saat menggunakan /dev/urandom dari Java versi 1.4 ke versi 1.7. Lihat tautan di bawah ini :

http://bugs.java.com/view_bug.do?bug_id=6202721

http://bugs.java.com/view_bug.do?bug_id=4705093

Yang saya tahu, ini akhirnya ditangani di Java 8 seperti yang dinyatakan oleh Oracle :https://docs.Oracle.com/javase/8/docs/technotes/guides/security/enhancements-8.html

SHA1PRNG dan NativePRNG diperbaiki agar sesuai dengan properti sumber seedSecureRandom dengan benar di file java.security. (Solusi yang tidak jelas menggunakan file:///dev/urandom dan file:/dev/./urando tidak lagi diperlukan.)


Linux
  1. Cara menginstal Java di Linux

  2. Cara menginstal Java 17 di Ubuntu 20.04

  3. Cara menginstal Java 17 di Fedora 35

  1. Cara Menginstal Java di Ubuntu

  2. Vimrc – Bagaimana Cara Memblokir Komentar?

  3. Cara Menginstal Java di Ubuntu 22.04

  1. Cara Menginstal Java 11 &12 di CentOS 7

  2. Cara Menginstal Java 8 &11 di Centos 8

  3. Cara Menginstal Java di Ubuntu 18.04