Un Generatore casuale è uno strumento o un algoritmo che produce risultati imprevedibili e non deterministici. Questi generatori sono essenziali in molti settori, dalla crittografia alla simulazione informatica.
- Risultati imprevedibili: I generatori casuali forniscono risultati che non possono essere previsti.
- Utilizzo in crittografia: Sono fondamentali per una comunicazione sicura.
- Simulazioni al computer: Spesso utilizzato nella modellazione e nell'analisi di sistemi complessi.
Generatore di numeri casuali
Come funziona un generatore di numeri casuali? ?
I generatori casuali funzionano con processi fisici o algoritmi matematici. I tipi più importanti sono i generatori di numeri casuali veri (TRNG) e i generatori di numeri pseudocasuali (PRNG).
Dove si gioca a blackjack online?
Abbiamo avuto le migliori esperienze al Black Jack nella Playamo Casinò dal vivo fatto. A mio parere, è proprio questo il punto di partenza, MIGLIORE SELEZIONE ai tavoli con croupier dal vivo e puoi allenarti molto bene per il casinò reale! Rispetto ad altri casinò online, le vincite su Playamo sono davvero pagate e per questo motivo consiglio vivamente il casinò online Playamo!
Il Casinò Playamo dispone di numerosi tavoli dal vivo per il blackjack e di una Pagamento rapido di Vinci.
Le varie applicazioni della casualità hanno portato allo sviluppo di diversi metodi per generare dati casuali. Alcuni di questi esistono fin dall'antichità e comprendono esempi ben noti come il lancio dei dadi, il lancio delle monete, il mescolamento delle carte da gioco, l'uso dei gambi di achillea (per la divinazione) nell'I Ching e innumerevoli altre tecniche. A causa della natura meccanica di queste tecniche, la generazione di grandi quantità di numeri sufficientemente casuali (importanti in statistica) richiedeva molto lavoro e tempo. Pertanto, i risultati venivano talvolta raccolti e distribuiti sotto forma di tabelle di numeri casuali.
Esistono diversi metodi computazionali per generare numeri pseudorandom. Tutti non riescono a raggiungere l'obiettivo di una vera casualità, anche se soddisfano, con diversi gradi di successo, alcuni dei criteri statistici che caratterizzano i numeri pseudocasuali. Test per la casualità, che sono progettati per misurare quanto siano imprevedibili i loro risultati (cioè fino a che punto i loro schemi sono riconoscibili). Questo li rende generalmente inutilizzabili per applicazioni come la crittografia. Tuttavia, esistono anche generatori di numeri pseudorandom sicuri dal punto di vista crittografico (CSPRNGS) con caratteristiche speciali studiate appositamente per la crittografia. Inserire sono stati sviluppati nella crittografia.
Applicazioni dei generatori casuali
- Giochi e intrattenimento:
- I generatori casuali sono utilizzati nei giochi per creare elementi imprevedibili come i lanci di dadi, le estrazioni di carte o la generazione di livelli.
- Crittografia:
- Nella sicurezza delle informazioni, i generatori di numeri casuali sono fondamentali per la generazione di chiavi, sali e nonci, necessari per la crittografia e l'autenticazione.
- Statistiche e campioni:
- Quando si creano campioni per sondaggi e studi, i generatori casuali aiutano ad estrarre campioni rappresentativi e imparziali.
- Modelli di simulazione:
- Nella scienza e nella tecnologia, i generatori di numeri casuali sono utilizzati per eseguire simulazioni Monte Carlo che utilizzano variabili casuali per modellare e analizzare sistemi complessi.
- Lotterie e concorsi:
- Assicurano una selezione equa e casuale dei vincitori di lotterie, concorsi a premi e altre competizioni.
- Algoritmi di ottimizzazione:
- I metodi casuali, come gli algoritmi genetici e la ricottura simulata, utilizzano generatori casuali per cercare in modo efficiente gli spazi di soluzione e trovare soluzioni ottimali.
- Intelligenza artificiale e apprendimento automatico Apprendimento:
- I generatori casuali vengono utilizzati per mescolare i set di dati e selezionare in modo casuale i dati di addestramento e di prova per convalidare e addestrare i modelli.
I generatori di numeri casuali trovano applicazione in Gioco d'azzardonel campionamento statistico, nella simulazione informatica, nella crittografia, nella progettazione completamente randomizzata e in altre aree in cui è auspicabile la generazione di un risultato imprevedibile. In generale, nelle applicazioni in cui l'imprevedibilità è la caratteristica principale, come ad esempio le applicazioni di sicurezza, i generatori hardware sono preferiti, ove possibile.
I generatori di numeri pseudorandom sono molto utili nello sviluppo di metodi di simulazione Monte Carlo, in quanto il debugging è facilitato dalla possibilità di ripetere la stessa sequenza di numeri casuali partendo dallo stesso seme casuale. Sono utilizzati anche in crittografia, a patto che il seme rimanga segreto. Il mittente e il destinatario possono generare automaticamente lo stesso insieme di numeri da utilizzare come chiave.
Die Erzeugung von Pseudorandom-Zahlen ist eine wichtige und häufige Aufgabe in der Computerprogrammierung. Während Kryptografie und bestimmte numerische Algorithmen einen sehr hohen Grad an scheinbarer Zufälligkeit erfordern, benötigen viele andere Operationen nur ein bescheidenes Maß an Unvorhersehbarkeit. Einige einfache Beispiele könnten sein, einem Benutzer ein „zufälliges Zitat des Tages“ zu präsentieren oder zu bestimmen, in welche Richtung sich ein computergesteuerter Gegner in einem Computerspiel bewegen könnte. Schwächere Formen der Zufälligkeit werden in Hash-Algorithmen und bei der Erstellung amortisierter Such- und Sortieralgorithmen verwendet.
Einige Anwendungen, die auf den ersten Blick für Randomisierung geeignet erscheinen, sind in Wirklichkeit nicht so einfach. Zum Beispiel muss ein System, das „zufällig“ Musikstücke für ein Hintergrundmusiksystem auswählt, nur zufällig erscheinen und kann sogar Möglichkeiten haben, die Musikauswahl zu steuern: Ein wirklich zufälliges System hätte keine Einschränkung, dass derselbe Titel zwei- oder dreimal hintereinander erscheinen könnte.
Numeri casuali reali e numeri pseudo-casuali ?
La differenza tra numeri reali e pseudocasuali sta nella prevedibilità e nella fonte della casualità.
- Numeri casuali reali: Imprevedibile, basato su processi fisici.
- Numeri pseudocasuali: Generati da algoritmi, prevedibili se il seme è noto.
Esistono due metodi principali per generare numeri casuali. Il primo metodo misura un fenomeno fisico considerato casuale e poi compensa le possibili distorsioni nel processo di misurazione. Esempi di sorgenti sono la misurazione del rumore atmosferico, del rumore termico e di altri fenomeni esterni elettromagnetici e quantomeccanici. Ad esempio, la radiazione cosmica di fondo o il decadimento radioattivo misurato su brevi periodi di tempo sono fonti di entropia naturale (come misura dell'imprevedibilità o della sorpresa del processo di generazione dei numeri).
Die Geschwindigkeit, mit der Entropie aus natürlichen Quellen gewonnen werden kann, hängt von den zugrunde liegenden physikalischen Phänomenen ab, die gemessen werden. Daher wird gesagt, dass Quellen natürlicherweise vorkommender „wahrer“ Entropie blockierend sind – sie sind ratenbegrenzt, bis genügend Entropie gesammelt wird, um die Nachfrage zu decken. Auf einigen Unix-ähnlichen Systemen, einschließlich der meisten Linux-Distributionen, blockiert die Pseudogerätedatei /dev/random, bis ausreichend Entropie aus der Umgebung gesammelt wurde. Aufgrund dieses blockierenden Verhaltens können große Massendatenlesevorgänge von /dev/random, wie das Befüllen einer Festplatte mit Zufallsbits, auf Systemen, die diese Art von Entropiequelle verwenden, oft langsam sein.
Il secondo metodo utilizza algoritmi di calcolo in grado di generare lunghe sequenze di risultati apparentemente casuali che in realtà sono completamente determinati da un valore iniziale più breve, noto come valore seme o chiave. Ciò consente di riprodurre l'intera sequenza apparentemente casuale se il valore seme è noto. Questo tipo di generatore di numeri casuali viene spesso definito generatore di numeri pseudorandom. Questo tipo di generatore di solito non è bloccante, quindi non è limitato da un evento esterno, consentendo la lettura di grandi quantità di dati.
Alcuni sistemi utilizzano un approccio ibrido che raccoglie casualità da fonti naturali, quando disponibili, e si affida a generatori di numeri pseudorandom crittograficamente sicuri (CSPRNG) che vengono periodicamente riseminati quando il tasso di lettura desiderato supera la capacità dell'approccio di raccolta naturale di soddisfare la domanda. Questo approccio evita il comportamento di blocco a velocità limitata dei generatori di numeri casuali basati su metodi più lenti e puramente ambientali.
Während ein Pseudorandom-Zahlengenerator, der ausschließlich auf deterministischer Logik basiert, niemals als „wahre“ Zufallsquelle im reinsten Sinne des Wortes angesehen werden kann, sind sie in der Praxis im Allgemeinen ausreichend, selbst für anspruchsvolle sicherheitskritische Anwendungen. Sorgfältig entwickelte und implementierte Pseudorandom-Zahlengeneratoren können für sicherheitskritische kryptografische Zwecke zertifiziert werden, wie dies bei den Algorithmen Yarrow und Fortuna der Fall ist. Ersterer ist die Grundlage der /dev/random-Entropiequelle auf FreeBSD, AIX, macOS, NetBSD und anderen. OpenBSD verwendet einen Pseudorandom-Zahlenalgorithmus, der als arc4random bekannt ist.
Metodi di generazione
Metodi fisici
I primi metodi di generazione di numeri casuali, come i lanci di dadi, di monete e le ruote della roulette, sono utilizzati ancora oggi, soprattutto nei giochi e nelle scommesse, poiché sono troppo lenti per la maggior parte delle applicazioni in statistica e crittografia.
Un generatore di numeri casuali fisico può essere basato su un fenomeno fisico atomico o subatomico essenzialmente casuale, la cui imprevedibilità può essere attribuita alle leggi della meccanica quantistica. Le fonti di entropia includono il decadimento radioattivo, il rumore termico, il rumore degli spari, il rumore a valanga nei diodi Zener, le deviazioni dell'orologio, i movimenti temporali della testina di lettura di un disco rigido e il rumore radio. Tuttavia, i fenomeni fisici e gli strumenti utilizzati per misurarli presentano generalmente asimmetrie e distorsioni sistematiche che rendono i loro risultati non uniformemente casuali. Un estrattore casuale, come una funzione hash crittografica, può essere utilizzato per ottenere una distribuzione uniforme di bit da una sorgente non uniformemente casuale, ma a una velocità di bit inferiore.
Nel 2013 è stato sviluppato un prototipo di generatore di numeri casuali in tempo reale ad alta velocità basato su un laser caotico.
Sono stati sviluppati vari metodi ingegnosi per raccogliere queste informazioni entropiche. Una tecnica consiste nell'applicare una funzione hash a un fotogramma di un flusso video proveniente da una fonte imprevedibile. Lavarand ha utilizzato questa tecnica con immagini provenienti da più lampade di lava. HotBits ha misurato il decadimento radioattivo con tubi Geiger-Müller, mentre Random.org ha registrato le fluttuazioni dell'ampiezza del rumore atmosferico con una normale radio.
Metodi assistiti dal computer
La maggior parte dei numeri casuali generati dai computer utilizza i PRNG, algoritmi in grado di generare automaticamente lunghe sequenze di numeri con buone proprietà di casualità, ma alla fine le sequenze si ripetono (o l'utilizzo della memoria cresce indefinitamente). Questi numeri casuali sono sufficienti in molte situazioni, ma non sono casuali come i numeri generati dal rumore elettromagnetico atmosferico usato come fonte di entropia. L'insieme dei valori generati da questi algoritmi è generalmente determinato da un numero fisso chiamato seme. Uno dei PRNG più comuni è il generatore di congruenze lineari, che utilizza la relazione di ricorrenza
Xn+1=(aXn+b)mod mX_{n+1} = (aX_n + b) \mod mXn+1=(aXn+b)modm
verwendet, um Zahlen zu erzeugen, wobei aaa, bbb und mmm große ganze Zahlen sind, und Xn+1X_{n+1}Xn+1 die nächste Zahl in einer Reihe von pseudorandom Zahlen ist. Die maximale Anzahl von Zahlen, die die Formel erzeugen kann, ist das Modul mmm. Die Rekurrenzbeziehung kann auf Matrizen erweitert werden, um viel längere Perioden und bessere statistische Eigenschaften zu haben. Um bestimmte nicht-zufällige Eigenschaften eines einzelnen linearen Kongruenzgenerators zu vermeiden, können mehrere solcher Zufallszahlengeneratoren mit leicht unterschiedlichen Werten des Multiplikatorkoeffizienten aaa parallel verwendet werden, wobei ein „Master“-Zufallszahlengenerator zwischen den verschiedenen Generatoren auswählt.
Un metodo semplice per generare manualmente numeri casuali è il cosiddetto metodo dei quadrati medi, proposto da John von Neumann. Sebbene sia facile da implementare, il suo risultato è di scarsa qualità. Ha un periodo molto breve e gravi punti deboli, come il fatto che la sequenza in uscita converge quasi sempre a zero. Una recente innovazione consiste nel combinare il metodo dei quadrati medi con una sequenza di Weyl. Questo metodo produce risultati di alta qualità per un lungo periodo.
La maggior parte dei linguaggi di programmazione contiene funzioni o routine di libreria che forniscono generatori di numeri casuali. Spesso sono progettati per fornire un byte o una parola casuali o un numero in virgola mobile uniformemente distribuito tra 0 e 1.
La qualità, cioè la casualità, di tali funzioni di libreria varia notevolmente, da un risultato completamente prevedibile a uno crittograficamente sicuro. Il generatore di numeri casuali standard di molti linguaggi, tra cui Python, Ruby, R, IDL e PHP, si basa sull'algoritmo di Mersenne Twister e non è sufficiente per scopi crittografici, come esplicitamente indicato nella documentazione del linguaggio. Tali funzioni di libreria hanno spesso scarse proprietà statistiche e alcuni schemi si ripetono dopo solo decine di migliaia di tentativi. Spesso sono inizializzate con l'orologio in tempo reale di un computer come seme, poiché tale orologio è a 64 bit e misura in nanosecondi, ben oltre la precisione di una persona. Queste funzioni possono fornire una casualità sufficiente per alcuni compiti (ad esempio i videogiochi), ma sono inadatte quando è richiesta una casualità di alta qualità, come nelle applicazioni crittografiche o statistiche.
Generatori di numeri casuali di qualità superiore sono disponibili sulla maggior parte dei sistemi operativi; ad esempio, /dev/random su vari derivati di BSD, Linux, Mac OS X, IRIX e Solaris, o CryptGenRandom per Microsoft Windows. La maggior parte dei linguaggi di programmazione, compresi quelli menzionati in precedenza, forniscono un modo per accedere a queste fonti di livello superiore.
Generato dalle persone
La generazione di numeri casuali può essere eseguita anche dall'uomo, raccogliendo vari input dagli utenti finali e utilizzandoli come fonte di casualità. Tuttavia, la maggior parte degli studi ha riscontrato che i soggetti umani presentano un certo grado di non casualità quando cercano di generare una sequenza casuale, ad esempio di cifre o lettere. Potrebbero passare da una scelta all'altra troppo spesso rispetto a un buon randomizzatore; di conseguenza, questo approccio non è molto utilizzato. Per lo stesso motivo per cui gli esseri umani si comportano male in questo compito, la generazione umana di numeri casuali può essere utilizzata come strumento per ottenere approfondimenti sulle funzioni cerebrali non accessibili con altri mezzi.
Postelaborazione e controlli statistici
Anche con una fonte di numeri casuali plausibile (magari da un generatore hardware basato sulla meccanica quantistica), è necessario prestare attenzione per ottenere numeri completamente imparziali. Il comportamento di questi generatori cambia spesso con la temperatura, la tensione di alimentazione, l'età del dispositivo o altre influenze esterne.
I numeri casuali generati sono talvolta sottoposti a test statistici prima di essere utilizzati, per garantire che la fonte sottostante funzioni ancora, e vengono poi post-elaborati per migliorare le loro proprietà statistiche. Un esempio è il generatore di numeri casuali hardware TRNG9803, che utilizza una misurazione dell'entropia come test hardware e poi postelabora la sequenza casuale con un cifratore di flusso a registro a scorrimento. In genere è difficile utilizzare test statistici per convalidare i numeri casuali generati. Wang e Nicol hanno proposto una tecnica di verifica statistica basata sulla distanza, utilizzata per identificare i punti deboli di più generatori di numeri casuali. Li e Wang hanno proposto un metodo per testare i numeri casuali basato su sorgenti di entropia caotica laser che utilizzano le proprietà del moto browniano.
I test statistici sono utilizzati anche per garantire che l'output finale post-elaborato di un generatore di numeri casuali sia veramente imparziale; sono stati sviluppati numerosi pacchetti di test di casualità.
Ulteriori considerazioni
Personalizzare la distribuzione
Distribuzioni uniformi
Die meisten Zufallszahlengeneratoren arbeiten nativ mit ganzen Zahlen oder einzelnen Bits, daher ist ein zusätzlicher Schritt erforderlich, um die „kanonische“ Gleichverteilung zwischen 0 und 1 zu erreichen. Die Implementierung ist nicht so trivial wie die Division der Ganzzahl durch ihren maximalen möglichen Wert. Konkret:
- Il numero intero utilizzato nella trasformazione deve fornire un numero di bit sufficiente per la precisione desiderata.
- La natura stessa dell'aritmetica in virgola mobile implica una maggiore precisione quanto più il numero è vicino allo zero. Questa precisione extra non viene normalmente utilizzata a causa dell'elevato numero di bit necessari.
- Gli errori di arrotondamento durante la divisione possono falsare il risultato. Nel peggiore dei casi, un'area presumibilmente esclusa può essere disegnata con numeri reali, contrariamente alle aspettative della matematica.
Der Mainstream-Algorithmus, der von OpenJDK, Rust und NumPy verwendet wird, wird in einem Vorschlag für die STL von C++ beschrieben. Er nutzt nicht die zusätzliche Präzision und leidet nur im letzten Bit an Verzerrungen aufgrund des Rundens auf die nächste gerade Zahl. Andere numerische Bedenken sind berechtigt, wenn diese „kanonische“ Gleichverteilung auf einen anderen Bereich verschoben wird. Eine vorgeschlagene Methode für die Swift-Programmiersprache behauptet, überall die volle Präzision zu nutzen.
Gleichmäßig verteilte ganze Zahlen werden häufig in Algorithmen wie dem Fisher-Yates-Shuffle verwendet. Auch hier kann eine naive Implementierung eine Modulo-Verzerrung in das Ergebnis einführen, daher müssen aufwendigere Algorithmen verwendet werden. Eine Methode, die fast nie eine Division durchführt, wurde 2018 von Daniel Lemire beschrieben, wobei der aktuelle Stand der Technik der arithmetischen Kodierungs-inspirierte „optimale Algorithmus“ von Stephen Canon von Apple Inc. im Jahr 2021 ist.
La maggior parte dei RNG da 0 a 1 include lo 0 ma esclude l'1, mentre altri includono o escludono entrambi.
Altre distribuzioni
Data una fonte di numeri casuali uniformemente distribuiti, esistono alcuni metodi per creare una nuova fonte casuale che corrisponda a una funzione di densità di probabilità. Un metodo chiamato metodo dell'inversione prevede l'integrazione in un intervallo maggiore o uguale al numero casuale (che dovrebbe essere generato tra 0 e 1 per distribuzioni corrette). Un secondo metodo, detto di accettazione-rifiuto, prevede la scelta di un valore di x e di y e la verifica se la funzione di x è maggiore del valore di y. In caso affermativo, la funzione di x è maggiore del valore di y. In caso affermativo, il valore x viene accettato. Altrimenti, il valore x-w