Quali sono le differenze tra la funzione rand () e la periferica RNG (generatore di numeri casuali)?


9

Mi chiedo per RNG (generatore di numeri casuali) periferico nelle MCU STM32F4XXXX. consultare questo manuale di riferimento (pagina 748). D'altra parte, abbiamo la funzione rand () nella libreria stdlib che svolge la stessa attività. Ora ho due domande:

  1. Quali sono le differenze (vantaggio e svantaggio) tra la funzione rand () e la periferica RNG (generatore di numeri casuali)?
  2. Guarda questa parte:

Caratteristiche

Spiegare queste due opzioni (in particolare la seconda opzione).

Risposte:


12

La risposta di Dave la riprende abbastanza bene, ma per chiarire un po 'di più la seconda opzione:

un vero generatore di numeri casuali hardware utilizza una fonte di entropia fisica. Una tale fonte di entropia potrebbe essere radiazione cosmica, rumore elettrico, effetto avanlanche da un diodo polarizzato inverso (o transistor BJT), circuito chua, ecc. Meno deterministica è la fonte di entropia, migliore è la qualità dell'uscita casuale. Una fonte di entropia ideale sarebbe quella di utilizzare un effetto di fisica quantistica, o qualcosa che non può essere modellato con equazioni deterministiche.

Un altro fattore importante con generatori di numeri casuali è che la fonte di entropia può generare solo una quantità limitata di entropia per unità di tempo. Un buon esempio è il circuito chua: sebbene sia abbastanza casuale, ha una velocità molto scarsa e non può essere usato per applicazioni nella vita reale.

In molti processori / microcontrollori con RNG integrati, viene utilizzato l'orologio da 2 a 4 orologi che sono deliberatamente erroneamente sincronizzati. Quindi, usano entrambi i filtri analogici e digitali per randomizzare ancora di più lo schema e spostare il risultato in un registro. L'esecuzione di tale filtro richiede alcuni cicli, il che spiega la quantità minima di cicli richiesta su un determinato orologio prima che sia disponibile il valore più recente.

L'orologio alla deriva non è un effetto quantico, quindi potrebbe essere modellato, ma è abbastanza casuale, perché dipende da molti parametri, come temperatura, processo al silicio, frequenza di funzionamento, rumore elettrico, radiazioni di fondo, ecc. .

Nelle applicazioni in cui l'RNG hardware non ha un throughput sufficiente (come nelle applicazioni crittografiche molto impegnative), è abbastanza comune utilizzare l'RNG hardware come seed per un generatore di numeri pseudo casuali come la funzione rand () nello sdtlib. Tuttavia, tale applicazione di solito fornisce una migliore implementazione di rand () che è specificamente progettato per essere eseguito da un seme che può essere scartato molto spesso con valori casuali reali . Nel nuovo processore Intel con RNG hardware integrato, la parte dell'algoritmo pseudo-casuale è direttamente integrata nel silicio, quindi viene eseguita dall'hardware, producendo un throughput casuale molto elevato.

Se ti preoccupi del metodo rand () stesso, è solo un'espressione matematica progettata per generare una quantità abbastanza grande di entropia. Abbastanza grande a seconda dell'applicazione: per le generazioni di chiavi crittografiche, la casualità deve essere di qualità superiore rispetto alla casualità richiesta per un semplice shuffle casuale nel tuo lettore musicale preferito. È ovvio che maggiore è la qualità dell'output casuale, maggiore è il costo computazionale del numero casuale.

Le operazioni coinvolte in un numero casuale sono abbastanza simili a quelle coinvolte nel calcolo dell'hash MD5 di un file: provano a usare una sorta di effetto valanga bit in modo che una singola modifica bit in un valore seed cambi l'intero modello di generazione. Come nota a margine, NON raccomando di usare MD5 come generatore di numeri pseudo-casuali; era solo un esempio. Sarebbe sia inefficiente che non così casuale, ma il punto è lì: se si alimenta lo stesso file a un algoritmo di hashing MD5, si otterrà sempre lo stesso output deterministico, praticamente nello stesso modo in cui si otterrebbe sempre lo stesso output da la funzione rand () se si inserisce lo stesso seed a meno che l'implementazione non dipenda da alcuni elementi arbitrari come l'ora corrente.


7

La differenza fondamentale è che la rand()funzione di libreria è un generatore di numeri pseudocasuale - dato qualsiasi particolare valore iniziale (seed), produrrà sempre la stessa sequenza di numeri.

D'altra parte, la periferica RNG è un vero generatore di numeri casuali e produrrà sequenze di numeri non ripetibili.


Grazie. e quelle entrambe le opzioni ..?
Roh

2
Che cosa significa "e quelle entrambe le opzioni ..?" significare? È una domanda?
John U

2

I due argomenti che descrivi possono essere descritti in modo relativamente semplice:

  • 1: Non è possibile generare numeri casuali più velocemente di una volta ogni 40 cicli di clock, quindi ciò si traduce in 48 MHz / 40 = ~ 1 M Campione / i
  • 2: l'hardware contiene un monitor che controlla ogni numero generato per comportamenti strani. Ad esempio, se si utilizzava la temperatura come sorgente e si disponeva di un ambiente di temperatura estremamente stabile, potrebbe accadere che l'RNG generasse nuovamente le stesse sequenze numeriche (come farebbe un generatore di numeri pseudo-casuale se si inizia con lo stesso valore seed) . Il componente monitorerebbe questo e ti fornirebbe un segnale se l'RNG funziona come dovrebbe. Nel caso in cui tu abbia bisogno che i tuoi numeri siano "realmente" casuali, potresti voler monitorare questo flag per vedere se lo sono davvero. Quanto esattamente viene fatto e come funziona effettivamente l'RNG è probabilmente indicato nel testo rimanente.

1

Supponiamo che uno disegni uno spinner meccanico della ruota della roulette che eccita un motore per un certo periodo di tempo, aspetta che la ruota e la palla si fermino e osserva in quale tasca si trova la palla. Normalmente dopo ogni giro la palla e la ruota finiscono in un posto leggermente diverso, e piccole variazioni nella posizione della palla dopo un giro possono fare una grande differenza nel punto in cui finisce nel giro successivo. Pertanto, anche se il motore viene sempre eccitato per lo stesso periodo di tempo, la tasca in cui una pallina si ferma su un giro sarà indipendente da dove ha fatto il giro precedente.

Supponiamo ora che alcuni numeri abbiano o sviluppino lievi depressioni e che i cuscinetti del motore sviluppino punti piatti. Quindi alcuni giri sarebbero casuali, ma dopo un giro che provoca l'atterraggio della palla in una depressione e il rilevamento in un punto piatto, il giro successivo potrebbe benissimo essere distorto per avere lo stesso risultato dell'ultimo giro in cui si è verificato. Se la maggior parte dei giri non colpiscono contemporaneamente il punto di divisione e il punto piatto, la loro esistenza probabilmente non influenzerà troppo le cose. D'altra parte, se una combinazione di divot / flat viene posizionata nel modo giusto in modo che una palla vi atterrerà ragionevolmente in modo coerente su un secondo, e che uno viene posizionato in modo da rimandare la palla al primo, allora uno finiscono con alcuni comportamenti estremamente distorti.

Se, dopo l'atterraggio su 4 e 23, il giro successivo è un 4, ciò non indica necessariamente un problema. Un 4 dovrebbe apparire circa 1/38 del tempo in quella situazione. Inoltre, l'acquisizione di dati casuali dovrebbe semplicemente acquisire il numero di tasca, poiché non si sa nulla di utile sulla frequenza con cui la palla dovrebbe riposare in varie parti della tasca. Tuttavia, può essere utile per qualunque cosa stia registrando i numeri anche "osservare" dove nella tasca la palla si ferma e fare attenzione a eventuali schemi insoliti. La distribuzione delle posizioni potrebbe essere inclinata verso la parte anteriore o posteriore senza indicare un problema, ma se c'è uno stretto picco nella distribuzione che potrebbe essere motivo di preoccupazione.

Se le letture consecutive da un generatore casuale sono statisticamente indipendenti , compensare la distorsione non è difficile (sebbene il tempo richiesto sia non deterministico). Se, tuttavia, un generatore cade in uno stato in cui le letture non sono indipendenti (ad esempio lo stato ciclico della ruota sopra), la compensazione diventa sostanzialmente impossibile - quindi la necessità di un RNG hardware di includere circuiti per rilevare tali comportamenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.