Tecnologie

Dettaglio dell'articolo:

mercoledì 07 febbraio 2007

Dispositivi random e Java

Supponiamo di dover realizzare in ambiente Linux un programma in Java che utilizza funzioni di crittografia. Ad esempio un sistema per la firma digitale oppure un programma di trasferimento di dati sensibili che utilizzi connessioni sicure https.

La generazioni delle chiavi casuali viene effettuato dalla jvm utilizzando il contenuto generato dai dispositivi /dev/random. Tali dispositivi utilizzano segnali associati ai dispositivi hardware (tastiere, mouse etc) per generare i propri dati casuali.
In alcune condizioni essi possono non contenere dati. Un esempio tipico sono i server disconnessi da tastiera.

Di conseguenza un programma del tipo:

try {

URL url = new URL("https://www.tecnes.com");
url.openConnection();

}catch (Exception e) {
}


potrebbe bloccarsi in attesa della lettura del dispositivo /dev/random.

Per avere informazioni di debug in merito a questo comportamento, si può impostare la seguente opzione per la jvm:

-Djavax.net.debug=ssl

Il programma genera il seguente messaggio in corrispondenza della chiamata del dispositivo random, e successivamante si blocca.

"trigger seeding of SecureRandom".

Soluzione:
Per risolvere il problema sopra esposto, è sufficiente impostare la seguente opzione nella jvm:

-Djava.security.egd=file:/dev/urandom

Tale opzione, detta "entropy gathering device", consente di selezionare un dispositivo alternativo, /dev/urandom, per la generazione di numeri casuali. La sua caratteristica pricipale è di non essere mai vuoto, generando sempre nuovi numeri casuali partendo dal pool di quelli esistenti.

Commenti:

Scrivi un commento:

Archivio