6 ответов:
вы можете, например, использовать движение мыши в качестве семени для случайных чисел, считывать время и положение мыши всякий раз, когда происходит событие onmousemove, подавать эти данные в функцию отбеливания, и у вас будет какой-то первый класс случайных под рукой. Хотя убедитесь, что пользователь достаточно переместил мышь, прежде чем использовать данные.
Edit: я сам немного поиграл с концепцией, сделав генератор паролей, я бы не гарантировал, что моя функция отбеливания безупречна, но будучи постоянно пересаживается я уверен, что это много для работы: ebusiness.hopto.org/generator.htm
Edit2: теперь он работает со смартфонами, но только путем отключения сенсорной функции во время сбора энтропии. Android не работать любым другим способом.
на WHATWG обсуждалось добавление этого в окно.объект крипто. Вы можете читать обсуждение и проверить предлагаемый API и ошибка webkit (22049).
только что проверил следующий код в Chrome чтобы получить случайный байт:
(function(){ var buf = new Uint8Array(1); window.crypto.getRandomValues(buf); alert(buf[0]); })();
использовать
window.crypto.getRandomValues, например:var random_num = new Uint8Array(2048 / 8); // 2048 = number length in bits window.crypto.getRandomValues(random_num);Это поддерживается во всех современных браузерах и использует генератор случайных чисел операционной системы (например,
/dev/urandom). Если вам нужна совместимость с IE11, вы должны использовать их префиксную реализацию черезvar crypto = window.crypto || window.msCrypto; crypto.getRandomValues(..)хотя.отметим, что
window.cryptoAPI также может генерировать ключи вчистую, который может быть лучшим вариантом.
вы можете попробовать http://sourceforge.net/projects/clipperzlib/ Он имеет реализацию Фортуна который является криптографически безопасным генератором случайных чисел. (Взгляните на src/js/Clipperz/Crypto / PRNG.js). Похоже, что он также использует мышь в качестве источника случайности.
прежде всего, вам нужен источник энтропии. Например, перемещение мыши, пароля или любого другого. Но все эти источники очень далеки от случайных, и гарантируем вам 20 бит энтропии, редко больше. Следующий шаг, который вам нужно сделать,-это использовать механизм, подобный "KdF на основе пароля", который затруднит вычисление для различения данных от случайных.
Comments