Strumenti di testo e di uso quotidiano · Generatore di password
Spiegazione del bias del modulo: scegliere una parola casuale da un elenco senza distorsione
· Come funziona
password casualità crittografia
Mostra perché la "lunghezza dell'elenco modulo numeri casuali" favorisce alcune parole rispetto ad altre quando l'intervallo non si divide equamente, quanto è grande l'inclinazione e come il campionamento del rifiuto lo rimuove.
Un dado giusto e una scorciatoia scorretta: perché prendere un numero casuale modulo 7,776 non è la stessa cosa che lanciare un dado
Una fonte equa può comunque alimentare una routine di selezione ingiusta. Se un programma legge un numero intero e prende immediatamente il resto dopo la divisione per la lunghezza di una lista, alcuni indici ricevono più valori di origine ogni volta che l'intervallo di origine non è esattamente divisibile per quella lunghezza. Il difetto sta nella fase di riduzione, non necessariamente nei byte. ToolAcre evita quella scorciatoia prima di scegliere qualsiasi parola EFF.
I dadi fisici forniscono un confronto intuitivo solo quando i gruppi di risultati completi vengono mappati in modo uniforme. L'implementazione del browser ha un intervallo grezzo diverso, quindi calcola una finestra di accettazione per il limite richiesto. Questo articolo discute il meccanismo fornito anziché affermare che i byte del browser riproducono letteralmente cinque dadi. Entrambi possono selezionare gli indici, ma le loro procedure e gli elementi probativi sono distinti.
Da dove proviene il bias: un valore 32 bit non si divide equamente in intervalli 7,776, quindi le prime parole hanno una possibilità in più
Per un byte e un limite di 100, l'intervallo grezzo ha 256 valori possibili. Due gruppi completi di 100 si adattano, lasciando valori 56. Riducendo ogni byte del modulo 100 si ottengono gli indici da zero a 55 tre preimmagini ciascuno, mentre gli indici da 56 a 99 ne ricevono solo due. I byte di input potrebbero essere uniformi, ma la distribuzione dei bucket selezionata non lo è.
Il commento sull'implementazione deriva anche il corrispondente problema di intervallo finito per un elenco di voci 7,776 quando due byte vengono ridotti direttamente. Tali cifre provengono dagli intervalli effettivi indicati nella fonte, non da un presunto tasso di attacco. La questione importante della revisione è se vengono utilizzati i valori rimanenti, non se l'inclinazione appare piccola in una manciata di frasi generate.
Quanto è grande l'effetto: piccolo per un ampio intervallo casuale, ma diverso da zero, e perché il codice crittografico rifiuta di accettarlo
I test deterministici rendono osservabile la coda irregolare. I limiti 3, 5, 7, 100 e 7,776 sono deliberatamente scomodi, mentre un limite potenza di due dimostra il caso di non rifiuto. Un altro controllo statistico utilizza la stessa fonte Web Crypto per la funzione corretta e un ingenuo modulo di supporto, quindi il test isola la strategia di riduzione anziché incolpare la fonte di entropia.
ToolAcre non converte questi controlli di distribuzione in una previsione del crack-time. Il bias riduce l’uniformità, ma tradurre tale riduzione in un particolare costo per l’aggressore richiede un modello di minaccia completo. I requisiti tecnici sono più chiari: ogni indice idoneo dovrebbe avere lo stesso numero di valori grezzi accettati e il codice può applicarlo esattamente.
Gli esempi di distorsione verificati nei commenti di implementazione e nei test deterministici
`secureRandomInt` trova il conteggio intero di byte più piccolo in grado di rappresentare l'indice valido più alto. Calcola l'intervallo di byte, sottrae il resto dopo la divisione per il limite e chiama il risultato `limit`. I valori inferiori a tale limite appartengono a gruppi completi; i valori pari o superiori vengono scartati prima che sia consentita l'esecuzione dell'operazione modulo.
Ad ogni rifiuto segue una nuova estrazione. Il circuito ha un soffitto fisso alto, quindi una fonte iniettata rotta non può appendere la linguetta per sempre; dopo ripetuti valori fuori intervallo genera invece di restituire una risposta distorta. Questo percorso di fallimento fa parte della correttezza: rifiutare una fonte sospetta preserva la promessa che un indice restituito provenga dalla finestra di accettazione uniforme.
Alternative: disegnare esattamente un numero sufficiente di bit e scartare i valori fuori intervallo o utilizzare la funzione intera uniforme di una libreria
Sono possibili altri progetti con numeri interi uniformi, ma non rappresentano il comportamento di questo pacchetto e pertanto non sono presentati come opzioni ToolAcre intercambiabili. Il motore espone un percorso controllato. `secureRandomChoice` convalida che il suo input è un array non vuoto e delega a `secureRandomInt(items.length)`, rendendo la selezione delle parole un consumatore diretto del contratto intero limitato.
Il generatore di password casuali utilizza lo stesso percorso per i personaggi, quindi invoca uno shuffle Fisher-Yates guidato da scambi delimitati sicuri. Non utilizza `sort` con un comparatore casuale. Mantenere una primitiva sotto diverse funzionalità rende trattabile la revisione della sorgente: correggere o testare la riduzione uniforme una volta, quindi seguire i chiamanti.
I progetti alternativi non rientrano in questo modulo; il percorso spedito utilizza il campionamento del rifiuto
Il test di regressione bound-100 fornisce ogni byte di coda da 200 a 255 e quindi un finale 42. Il codice corretto consuma tutti i 56 byte rifiutati e le risposte da 42. Un secondo caso focalizzato fornisce 200 e 7; poiché 200 modulo 100 sarebbe zero, la restituzione di 7 dimostra che il primo byte è stato rifiutato anziché ridotto silenziosamente.
Questo esempio pratico è deterministico per natura e non contiene credenziali. I byte di produzione rimangono privati per la chiamata del browser e non vengono registrati. L'origine del test è iniettabile solo in modo che il comportamento possa essere forzato al confine; il pacchetto pubblico non offre alcuna modalità seed di produzione che possa riprodurre una passphrase generata.
Esempio elaborato: il limite 100 rifiuta il byte 200 e accetta il seguente 7
La riduzione casuale in virgola mobile, le API uniformi specifiche della libreria e gli algoritmi di mescolamento non correlati non rientrano in questa implementazione. Valutarli richiederebbe la loro fonte e i contratti. Il codice di ToolAcre è basato su numeri interi ed è esplicitamente limitato, quindi aggiungere un sondaggio di alternative offuscherebbe l'affermazione ristretta che i test effettivamente dimostrano.
L'articolo inoltre non implica che una password generata in modo uniforme sia adatta a ogni policy o dispositivo. La selezione dell'indice uniforme affronta un meccanismo. Archiviazione, riutilizzo, gestione degli appunti, malware e vincoli di destinazione rimangono questioni separate anche quando ogni elemento dell'elenco ha la stessa possibilità di selezione.
Il punto è che un generatore di passphrase deve scegliere le parole in modo uniforme; controlla le note tecniche dello strumento per sapere come funziona il generatore di password
Un generatore di passphrase non deve favorire le prime voci semplicemente perché il suo intervallo grezzo lascia un resto. ToolAcre prende byte da Web Crypto, rifiuta la coda incompleta e riduce solo i valori all'interno di gruppi completi di uguali dimensioni. I test forzano sia i limiti di rifiuto che quelli di accettazione, quindi la dichiarazione non si basa sull'ispezione visiva degli output.
Durante la revisione di codice simile, calcola l'intervallo grezzo per la larghezza in byte scelta, dividilo per il limite richiesto e cerca un resto scartato. Se nessuna coda viene rifiutata, richiedere un'altra prova di uniformità. L'elenco di parole può essere pubblico e la fonte crittografica, mentre una riduzione imprudente introduce comunque una distorsione evitabile.