Інструмент паролів Назад до генератора

Посібник з безпеки

Чому Math.random небезпечний для паролів

Дізнайтеся, чому Math.random підходить для ефектів інтерфейсу, але не для паролів, кодів скидання, токенів та інших секретів, чутливих до безпеки.

Підсумок

Math.random() — це загальна псевдовипадкова функція JavaScript. Вона корисна для анімацій, рандомізованої поведінки інтерфейсу, прикладів, ігор та симуляцій. Вона не призначена для криптографічної безпеки і не повинна використовуватися для генерації паролів, кодів скидання, секретів API, ключів підпису або токенів відновлення.

Проблема

Генератор паролів потребує непередбачуваності перед атакуючим, а не просто значень, які виглядають різноманітними для користувача. Math.random() не надає гарантії криптографічної безпеки за стандартом браузера, і реалізації можуть відрізнятися між рушіями.

Безпечніший варіант у браузері

Сучасні браузери надають crypto.getRandomValues() через Web Crypto API. PwdGen використовує цей інтерфейс та метод відхилення вибірки, що уникає зміщеного вибору символів. Якщо це API недоступне, безпечна поведінка — зупинити генерацію та пояснити вимогу сумісності.

Як перевірити генератор

Пошукайте у вихідному коді Math.random. Серйозний генератор паролів не повинен використовувати його для символів пароля. Він може з’являтися в документації, що пояснює, чому він небезпечний, але не в шляху генерації.

Детальні вказівки

Цей посібник зосереджений на тому, чому Math.random непридатний для паролів і секретів. Він написаний для розробників, студентів і користувачів інструментів, які перевіряють, чи використовує генератор безпечну випадковість, тому практична мета — не створити драматичне твердження про безпеку. Мета — вибрати звичку щодо паролів, яка витримає повсякденне використання: форми входу, менеджери паролів, мобільні клавіатури, відновлення облікового запису, спільні пристрої та іноді сервіси з дивними правилами валідації. Безпечна рекомендація корисна лише тоді, коли реальна людина може її послідовно дотримуватися.

Найбезпечніша відправна точка — випадковість плюс унікальність. Випадковість означає, що значення вибране з великого простору криптографічно придатним випадковим джерелом, а не вигадане з дня народження, імені домашнього улюбленця, шаблону клавіатури або улюбленої цитати. Унікальність означає, що той самий пароль не використовується більше ніде. Пароль, який є довгим, але повторно використовується, може швидко вийти з ладу після одного не пов’язаного витоку, тоді як унікальний випадковий пароль обмежує шкоду лише одним обліковим записом, де він використовувався.

Для цієї теми практичним пресетом є crypto.getRandomValues з відхиленням вибірки замість Math.random. Ви можете застосувати цей пресет за допомогою посібника з Web Crypto API, а потім зберегти кінцеве значення в надійному менеджері паролів. PwdGen генерує значення локально в браузері за допомогою Web Crypto; згенерований пароль не надсилається на сервер PwdGen. Така локальна конструкція зменшує вплив на сервер, але не захищає від усіх загроз. Зловмисне розширення браузера, скомпрометований пристрій, фішингова сторінка або небезпечна обробка буфера обміну все ще можуть розкрити секрет після його генерації.

Найпоширеніші проблеми, яких слід уникати: передбачувані псевдовипадкові послідовності, зміщення за модулем, власні випадкові функції та демонстраційний код, скопійований у продакшн. Ці проблеми важливі, оскільки атакуючі рідко потребують перебору всіх можливих паролів, коли людські звички дають їм короткий шлях. Зловживання обліковими даними, фішинг, витік списків паролів і зловживання відновленням облікового запису часто більш реалістичні, ніж чистий математичний пошук. Ось чому найкраща порада поєднує якість пароля з контролем на рівні облікового запису, таким як MFA, ключі доступу, зберігання кодів відновлення та регулярний перегляд налаштувань електронної пошти або телефону для відновлення.

Використовуйте цей контрольний список, застосовуючи рекомендацію:

Якщо веб-сайт відхиляє ідеальне налаштування, не примушуйте пароль до слабшого шаблону вручну. Змінюйте одну змінну за раз. Якщо символи відхиляються, залиште великі літери, малі літери та цифри увімкненими та збільште довжину. Якщо максимальна довжина мала, використовуйте найбільшу прийнятну довжину та переконайтеся, що значення унікальне. Якщо пароль потрібно читати вголос, друкувати або вводити на екрані телевізора чи маршрутизатора, розгляньте можливість виключення заплутаних символів і збільшення довжини, щоб компенсувати менший алфавіт.

Нарешті, пам’ятайте про межі порад щодо паролів. Сильний пароль — це один рівень захисту, а не гарантія. Він не може зробити фішингову сторінку безпечною, виправити шкідливе програмне забезпечення або компенсувати сервіс, який погано зберігає облікові дані. Корисна звичка нудна, але довговічна: генеруйте унікальне значення, зберігайте його безпечно, захищайте шлях відновлення та швидко замінюйте його, якщо підозрюєте витік.

Безпечний наступний крок

Після прочитання цього посібника виконайте один невеликий аудит облікового запису замість того, щоб намагатися виправити все одразу. Виберіть обліковий запис, який спричинив би найбільше проблем, якби його захопили, підтвердьте, що його пароль унікальний, і перевірте електронну пошту для відновлення, телефон для відновлення, метод MFA та зберігання резервних кодів. Якщо будь-яка частина цього ланцюга слабка, покращте цю частину, перш ніж переходити до облікових записів з нижчим ризиком. Такий порядок робить роботу керованою та захищає облікові записи, які атакуючі найімовірніше використовують як трамплін. Щодо того, чому math.random небезпечний для паролів, найкращий результат — повторювана звичка: генерувати локально, зберігати обережно та уникати повторного використання.

Часті запитання

Чи можна іноді використовувати Math.random?

Так, для візуальних ефектів, симуляцій та звичайної випадковості інтерфейсу, але не для облікових даних або токенів безпеки.

Що замість цього повинні використовувати генератори паролів?

Вони повинні використовувати криптографічне випадкове джерело, таке як crypto.getRandomValues() у браузері.

Чи використовує PwdGen Math.random як резервний варіант?

Ні. Якщо Web Crypto недоступний, PwdGen показує попередження про сумісність і не генерує паролі за допомогою Math.random().

Джерела