So per esperienza che sto leggendo da / dev / random blocks quando il pool entropy del kernel Linux finisce con l'entropia. Inoltre, ho visto molti articoli e post di blog che affermavano che quando si eseguiva su Linux, java.security.SecureRandom utilizza / dev / random come origine di entropia e quindi blocca quando il pool entropico del kernel si esaurisce nell'entropia.
Tuttavia, non sono in grado di produrre un esperimento che blocchi SecureRandom. Viceversa, sembra facile ottenere un semplice bash one-liner che legge da / dev / random per bloccare.
Ecco il codice java che sto usando per questi esperimenti:
import java.security.SecureRandom;
public class A {
public static void main(String[] args) {
SecureRandom sr = new SecureRandom();
int out = 0;
for (int i = 0; i < 1<<20 ; i++) {
out ^= sr.nextInt();
}
System.out.println(out);
}
}
Genera poco più di 1.000.000 di numeri casuali interi a 32 bit. Dovrebbe essere 2 ^ (20 + log2 (32)) = 2 ^ 25 bit o 2 ^ 22 (poco più di 4 milioni) byte di entropia, giusto? Tuttavia, non blocca mai. Finisce sempre in circa 1,2 secondi, indipendentemente dal fatto che io possa muovere il mouse o no.
Il one-liner bash che ho usato è:
head -c 100 /dev/random | xxd
Questo blocca facilmente. Fintanto che tengo la mia mano lontana dal mouse e dalla tastiera, rimarrà lì seduta senza fare nulla per diversi minuti. E sto solo chiedendo 100 byte di entropia.
Sicuramente mi manca qualcosa qui. Qualcuno potrebbe spiegare cosa sta succedendo?
Grazie!