2012-04-21 21 views
5

sto cercando di generare numeri casuali crittograficamente sicuro utilizzando Java e utilizzando il seguente sezione di codice per creare un oggetto SecureRandom per visualizzarne il fornitore e l'algoritmo:BouncyCastle ha un servizio SecureRandom?

Provider prov=new org.spongycastle.jce.provider.BouncyCastleProvider(); 
Security.insertProviderAt(prov, 1); 

SecureRandom sr=new SecureRandom(); 
srProvider=sr.getProvider().toString(); 
srAlgorithm=sr.getAlgorithm(); 

(castello spugnoso è castello gonfiabile equivalente per Android realizzato da Roberto Tyley - https://github.com/rtyley)

Quando visualizzo fornitore e l'algoritmo, si vede: la versione Crypto 1.0 SHA1PRNG

quello che mi sorprende è che il provider non è Spongycastle anche se è installato come il primo fornitore nel codice . Vorrei chiederti a) Non è SecureRandom implementato in Spongy Castle (o Bouncy Castle). b) Quale "Crypto versione 1.0" è esattamente (voglio dire è che fornitore di Sun JCE o cosa?)

Grazie ...

Rubi

risposta

3

Supponendo che si esegue su Android (non l'hai fatto affermalo esplicitamente). Bouncy Castle non fornisce un'implementazione SecureRandom. 'Crypto' è l'Apache Harmony (sulla quale si basa la maggior parte del codice Java di base di Android) provider JCE. Non esiste un codice Sun JCE in Android. BTW, il provider 'Crypto' fornisce solo implementazioni SHA1PRNG (RNG), SHA-1 (hash) e SHA1withDSA (firma). Tutto il resto è fornito da Bouncy Castle o dal provider basato su OpenSSL.

Domanda: Perché pensi di aver bisogno di un'implementazione SecureRandom da Bouncy/Spongy Castle?

+0

Grazie Nikolay. Volevo solo sapere se SHA1PRNG ha un'alternativa o meno. Sarebbe bene controllare SHA1PRNG e altri in strumenti di controllo della casualità. –

+0

Almeno su ICS (azione Galaxy Nexus) che è l'unica implementazione 'SecureRandom'. SHA1PRNG è un PRNG quindi è buono solo come il seme che gli dai. Ed è inizializzato da '/ dev/urandom', quindi potrebbe non essere così eccezionale. Ancora una volta, questo è per ICS, ma dubito che sarebbe diverso sulle altre versioni. '/ dev/random' può essere dolorosamente lento su Android, quindi suppongo sia per questo che non viene usato. Collegalo qui se controlli effettivamente con uno strumento. –

+0

@ Nikolay Elenkov: Grazie per le informazioni.Come posso vedere se dev/random o dev/urandom sono usati sul mio dispositivo Android come seed source e come posso cambiarlo in modo dinamico nel mio codice? –

2

Bouncy Castle fa fornire una serie di Pseudo numeri casuali generatori (PRNG). Ci sono molti nomi per PRNG; Il NIST li chiama Deterministico Generatori casuali di bit (DRBG). Tuttavia, sono disponibili solo nell'API "Leggero" del Castello gonfiabile, nel pacchetto org.bouncycastle.crypto.prng.

Tuttavia, Bouncy Castle è un'implementazione solo software di algoritmi crittografici. Ciò significa che non contiene una fonte per entropia. L'entropia non può essere generata dal solo software poiché gli algoritmi software stessi sono deterministici. Quindi, anche se il fornitore di Bouncy Castle registrasse alcuni dei generatori nel suo provider "BC" (o fornitore Spongy per Android), dovrebbe comunque fare affidamento sulla stessa fonte di entropia della piattaforma di implementazione SecureRandom.

Poiché la fonte di entropia è probabilmente il colpevole per la maggior parte dei problemi di prestazioni, non ci si deve aspettare meraviglie di Bouncy Castle per quanto riguarda l'efficienza di generazione di numeri casuali.

Attualmente (v1,54) il fornitore di Bouncy Castle non registra alcuna implementazione SecureRandom affatto, quindi non c'è.

+1

Sembra che Bouncy Castle 1.57 stia registrando un'implementazione 'SecureRandom'. – martijno

Problemi correlati