Woher der Zufall kommt
Jedes Zeichen stammt aus crypto.getRandomValues, dem kryptografischen Generator des Browsers. Math.random ist schnell und völlig in Ordnung, um eine Liste zu mischen; für etwas, das jemand erraten könnte, ist es das nicht.
Gezogen wird per Verwerfungsmethode statt per Restwert-Faltung, damit kein Zeichen aus der Menge auch nur einen Bruchteil wahrscheinlicher ist als ein anderes.