Українська

Інструменти розробника · UUID генератор

Math.random проти crypto.getRandomValues: Як працює кожен генератор

· Як працює

Опубліковано ToolAcre · Редакція журналу

Увійти криптографія веб-сайт

Два випадкових генераторів бокові: Math.random як детерміналістичний державний машинний універсальний crypto.getRandomValues fed by ентропія операційної системи
Головна ToolAcre векторна ілюстрація

Обидва номери повернення, які виглядають випадковими, але є невеликою детерміналістичною державною машиною та іншими, які подаються операційною системою. Ось що кожен під капюшоном і чому UUIDs повинен використовувати другий.

Форум хіппе, який будує UUID з Math.random — чому він виглядає дрібно і проходить кожен випадковий тест

Відповісти на форум UUID завод восьмих лініях: валові значення від Math.random і форматувати їх у 8-4-4-4-12 макет. Код виглядає відмінно і проходить кожен випадковий тест. Кожен ідентифікатор з'являється різним, а короткий зразок показує неявний візуальний візерунок. Це не властивість нечутливим ідентифікатором. JavaScript сорти Math.random як джерело псевдоміну, але не вимагає криптографічної стійкості до прогнозування. Його відповідні роботи включають моделювання, ігри та шматлінг. Після того, як ідентифікатор може впливати на доступ, відкриття об'єкта або інше рішення, зовнішній вигляд більше не свідчить. Задокументований контракт генератора має більш ніж сторiнку позитивно-розвантажувального виходу.

Головна Math.random — засіяний псевдо-рандом алгоритм з фіксованим внутрішнім станом, призначений для швидкості та статистичного поширення, а не секретності

Бо Math.random не вказується як криптографічний генератор, його виходи не повинні розглядатися як докази, що майбутні значення приховані від спостерігача. crypto.getRandomValues має різний контракт платформи: він заповнює ціле число з криптографічно міцними значеннями. Специфікація Web Crypto залишає точний генератор до агента користувача, тому код програми не повинен вимагати певного алгоритму, розміру насіння або ентропії пристрою. ToolAcre потребує тільки підтримувані межі: браузер забезпечує безпечні випадкові байти, JavaScript отримує заповнений Uint8Array, і UUID код встановлює параметри та параметри поля. Ця заява є як корисною, так і портативною через веб-переглядачі, які відрізняються внутрішнім виконанням.

Чому спостереження виводів може розкривати стан — як невеликий стан означає виконання значень може дозволити хто-небудь передбачити наступні

Код заявки отримує криптографічно сильні значення від getRandomValues, а не реалізація або розширення JavaScript PRNG стан. Відмінність безпеки показує реальні системи. Ідентифікатор побудований з Math.random не підходить для того, що атакуючий з можливістю читання мережі (або будь-якої системи, де попередні UUIDs видно) може прогнозувати наступний. В4 UUID з crypto.getRandomValues не по собі автентифікаційний токен (наскільки вам все ще потрібно витривати, хешування, швидкість-лімітування), але генератор призначений для протипоказання. ToolAcre відмовляється генерувати ідентифікатор, якщо його захищене джерело відсутні, а не мовчазно знижувати до передбачуваної формули. Math.random подається з тонкими розподільними помилками в великих двигунах. Послідовність виходу може виглядати різноманітно без забезпечення непередбачуваності, необхідної для таємної дії.

Головна crypto.getRandomValues — браузер просить операційну систему CSPRNG, яка змішує апаратні та системні ентропії і призначений для непередбачуваних

Модульні алгоритми та їх статистична поведінка не можуть змінюватися; ані візуальна перевірка, ні оновлення випадкових розподільчих тестів Math.random в криптографічне джерело. Розрахунок Collision також передбачає самостійні виходи з зазначеного простору. Якщо генератор повторює стан, засіяний неправильно або замінюється детерміністичною фіксацією, що припущення не вдалося і формула більше не описує виконання. Обидва API можуть виробляти рядки, які виглядають однаково нерегулярними. Модель загрози відокремлює їх: значення, які повинні протидіяти використанню прогнозування crypto.getRandomValues, в той час як імітаційні та неадвераріальні шлафи можуть використовуватися Math.random. Вибір випливає з наслідок прогнозування, не від пунктуації або видимого сорту в зразках.

Створений приклад — генерувати однакову кількість ідентифікаторів з кожним методом і порівняти те, що спостерігач може запліднити

Про нас ToolAcre UUID генератор використовує crypto.getRandomValues виключно; він ніколи не використовує Math.random бо вартість передбачуваного UUID завжди вище вартості трохи повільного генератора. Криптографічна відмінність є застрахованою через загрозу модель. Атакувальник, який хоче загнати UUIDs, повинен вгадати ідентифікатор безпосередньо або розбити генератор випадкових чисел. Пряме здогадування не порівняння цієї статті кількісно; підтримуваний висновок полягає в тому, що Web Crypto призначений для криптографічної випадковості при цьому Math.random немає. Р CSPRNG і Math.random викладати різні контракти: колишня призначена для забезпечення безчутливої випадковості, тоді як останній не несе такої обіцянки. Система, яка використовує Math.random для ідентифікаторів втратили криптографічну властивість; безпека зараз залежить від дотримання послідовності генерованого секрету UUIDs. Якщо ще один UUID витоки, все майбутнє покоління є компромісом.

Історичний розподіл помилок — нагадка, що двигуни відправлення Math.random виконання з в'язкістю нерівномірного виходу, описаного якісно

Якщо додаток зберігає UUIDs в журналі, базу даних або історії керування версіями, витік майже неминучий. Мистецтво ToolAcre бібліотека виконує використання crypto.getRandomValues і відмовляється від створення UUID якщо захищений контекст (збереження)HTTPS або локальний привид не доступний. Цей проектний рішення запобігає безшумному знеціненням Math.random що скаже багато ручних реалізацій. Вступ Node.jsБібліотека використовує криптомодуль; в браузерах, він використовує Web Crypto API. Обидва підтримані шляхи запиту криптографічно сильної випадковості з платформи. Реалізація не передбачає позову про виконання, оскільки двигун, пристрій та завантаження робочого навантаження визначають терміни; договір безпеки є децизатором майна для ідентифікаторів. Чому галузевий стандарт опинився на crypto.getRandomValues - коротка історія UUID неправильне використання. Ранні системи, що використовуються системний час, мережеві інтерфейси та апаратні годинники для створення ідентифікаторів.

Що це не криється — статистична якість або генератор для симуляцій, що є різним питанням від непередбачуваності

На основі часу, на основі вузлів та випадкових випадків UUID варіанти розв’язання різних задач виділення; не варто пред’явити як лінійний ремонт для кожного раніше дизайну. Для версії 4, RFC 9562 визначає випадкові поля та окремо обговорює нечутливість. Переміщення від Math.random отже, зміни якості новогенерованих значень без зміни тексту UUID форма. Виконуючи ідентифікатори залишаються ключовими базами бази даних; регенерувати їх буде посилання на посилання. Нові значення можуть використовувати Web Crypto відразу, коли авторизація повинна продовжувати лікувати кожен старий або новий UUID як ідентифікатор, а не підтвердження дозволу. Здійснити відключення, так що відповідачі, знають, які генератори видобувають кожного населення.

Обрати генератор за загрозою, не появі — ToolAcre UUID генератор використовує CSPRNG виключно, ніколи Math.random()

Дійсність повинна відрізняти спадкоємність (не підходить для секреції) і нові (CSPRNG-backed) IDs. Документація повинна відмітити перехід. Про нас ToolAcre генератор тільки виробляє crypto.getRandomValues UUIDs; не намагатися вводити або регенерувати ідентифікатори з інших джерел. Про нас ToolAcre генератор демонструє кращу практику шляхом рефлексування на слабке випадкове джерело. Якщо crypto.getRandomValues не доступний, інструмент повідомляє про помилку замість безшумного використання Math.random. Цей принцип дизайну відноситься до будь-якої системи безпеки: не втрачаючи гучно, ніж вдається спокійно з слабкою гарантією безпеки. Розробник, який бачить "UUID не вдалося: крипто API не доступний" необхідно звернутися до основного номера (додатково до HTTPS, зафіксувати безпечний контекст, або забезпечити належний недолік. Розробник, який безшумно отримує UUIDs побудовані з Math.random не вказує на те, що система порушується. Про нас ToolAcre бібліотека присвячує чесність над зручністю.