Криптографически безопасная генерация через crypto.getRandomValues(). Пароль не покидает браузер — никаких запросов на сервер.
crypto.getRandomValues()