Dovrebbero essere in esecuzione altri processi mentre un iPhone o Android sta generando un numero casualmente crittografato?

5

Ho bisogno di generare un numero casuale crittograficamente sicuro su iOS e Android. Potrei usare un approccio software o sfruttare l'API del sistema operativo integrata per questo.

In ogni caso, è meglio generare un numero casuale sicuro quando nessun altro processo è in esecuzione?

Chiedo perché sto pensando di visualizzare un'animazione durante la generazione e voglio sapere se l'animazione avrà un impatto positivo o negativo sull'RNG ... soprattutto perché non sono sicuro di come sia il modello di threading interno.

Nel caso in cui sia importante (ad esempio il modello di threading) in iOS sto usando l'Objective C, e con Android sto usando un'alternativa al kernel Dalvik prodotto da Xamarin, che ha le sue opzioni di threading. Indipendentemente da ciò, sono interessato a qualsiasi informazione Dalvik che possiate avere, dato che posso intervenire in questo modo.

    
posta random65537 18.04.2015 - 00:26
fonte

2 risposte

2

Per ottenere casualità, devi ottenere sufficiente entropia iniziale da alcuni eventi "veramente casuali", che provengono da sistemi fisici. Una volta che hai sufficiente entropia iniziale, puoi estenderla a tempo indefinito con un PRNG protetto da crittografia . Poiché il PRNG è un processo deterministico, il suo output non viene influenzato da qualsiasi altro processo possa essere eseguito contemporaneamente sulla macchina.

Il kernel del sistema operativo è in una posizione ideale per raccogliere quel seed iniziale, poiché ha accesso diretto all'hardware. Un buon sistema operativo raccoglierà gli eventi hardware per alimentare il suo pool interno ed eseguirà il PRNG e fornirà un'API per ottenere l'output PRNG. Su iOS, questo è SecRandomCopyBytes() , che legge il file speciale /dev/random (in iOS, come in OS X e FreeBSD, /dev/random è identico a /dev/urandom ). Usandolo si sta già facendo bene; ha già tutta la sicurezza crittografica che puoi ragionevolmente sperare; la sua sicurezza non sarà influenzata dall'esecuzione di animazioni poiché il seed iniziale viene raccolto molto presto nel processo di avvio. Su Android, usa java.security.SecureRandom - stessa discussione (usa% di% di% di Linux).

In tempi molto più antichi, alcune persone stavano parlando di applet Java, che, per definizione, erano in modalità sandbox e non potevano accedere al sistema operativo per ottenere una buona casualità. Queste applet dovevano quindi trovare eventi casuali da altre fonti, e l'unico rimasto era misurare la velocità con cui lo scheduler del SO poteva passare tra due thread (es. Vedi questo codice ). Quel metodo di filatura del filo richiedeva una macchina altrimenti in gran parte inattiva; in caso contrario, i numeri prodotti erano severamente non casuali. Altri metodi hanno sfruttato l'utente: hanno chiesto all'utente di muovere il mouse e l'applet avrebbe utilizzato le posizioni successive del puntatore come fonte di entropia.

Fortunatamente questi espedienti atroci sono cose del passato (o almeno speriamo ... perché a volte alcuni sviluppatori di sistemi bancari diventano "creativi"). Per un'app su uno smartphone, hai accesso ai servizi del sistema operativo, quindi usali e sii felice.

    
risposta data 23.04.2015 - 15:09
fonte
0

I generatori di numeri casuali crittograficamente sicuri sono processi matematici deterministici per gli argomenti dati e non si preoccupano dei fattori che influiscono sull'esecuzione dei programmi, vale a dire sullo stato del kernel e sui dati memorizzati nella RAM. Non c'è ragione per cui altri programmi possano influenzare il funzionamento di questi generatori.

    
risposta data 23.04.2015 - 14:11
fonte

Leggi altre domande sui tag