Da dove viene la casualità
Ogni carattere viene da crypto.getRandomValues, il generatore crittografico del browser stesso. Math.random è veloce e va benissimo per mescolare un elenco; non va bene per nulla che qualcuno possa provare a indovinare.
L’estrazione usa il campionamento per rifiuto invece di ripiegare con un resto, così nessun carattere dell’insieme è una frazione più probabile di un altro.