Откуда берётся случайность
Каждый символ берётся из crypto.getRandomValues, криптографического генератора самого браузера. Math.random быстрый и вполне годится, чтобы перемешать список; он не годится ни для чего, что кто-то может попытаться угадать.
Выборка идёт методом отбрасывания, а не свёрткой по остатку, так что ни один символ из набора не оказывается даже на долю вероятнее другого.