To Matematyka.random ()
Jak dobre są algorytmy używane w Javascript Math.random()
w różnych przeglądarkach? Czy można go używać do generowania haseł jednorazowych?
Ile bitów z jednego random
mogę użyć?
5 answers
Nie; Funkcja JavaScript Math.random()
nie jest bezpiecznym kryptograficznie generatorem liczb losowych. Lepiej skorzystać z JavaScript Crypto Library implementacji Fortuna, która jest silnym generatorem liczb pseudolosowych (spójrz na src/js/Clipperz/Crypto/PRNG.js
) lub Web Crypto API dla getRandomValues
- Oto szczegółowe wyjaśnienie: Jak godna zaufania jest losowa implementacja javascript w różnych przeglądarkach?
- Oto jak wygenerować dobrą klasę krypto losowa liczba: bezpieczne liczby losowe w javascript?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:15
Nie jest w ogóle bezpieczny, a w niektórych przypadkach był tak przewidywalny, że można było odbudować wewnętrzny stan PRNG, odjąć ziarno i tym samym wykorzystać go do śledzenia ludzi na stronach internetowych, nawet jeśli nie używali plików cookie, ukryli się za routingiem cebuli itp...
-
Http://landing2.trusteer.com/sites/default/files/Temporary_User_Tracking_in_Major_Browsers.pdf artykuł z 2008 roku ukazujący możliwości śledzenia użytkowników przeglądarki PRNG
-
Http://dl.packetstormsecurity.net/papers/general/Google_Chrome_3.0_Beta_Math.random_vulnerability.pdf później (2009) luka w Chrome, ponieważ problem był już dobrze znany
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-25 10:13:02
Od marca 2013, okno.krypto.getRandomValues jest "technologią eksperymentalną" dostępną od Chrome 11 i Firefox 21, która pozwala uzyskać kryptograficznie losowe wartości. Ponadto, Zobacz getRandomValues z ostatniego szkicu W3C Web Cryptography API.
Opis:
Jeśli podasz liczbę całkowitą TypedArray (tj.
Int8Array
,Uint8Array
,Int16Array
,Uint16Array
,Int32Array
, lubUint32Array
), funkcja będzie wypełniać tablicę za pomocą kryptograficznie losowe liczby. Przeglądarka powinna używać silnego (pseudo) generatora liczb losowych. Metoda rzuca QuotaExceededError, jeśli żądana długość jest większa niż 65536 bajtów.
Przykład:
var array = new Uint32Array(10);
window.crypto.getRandomValues(array);
console.log("Your lucky numbers:");
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
Również odpowiedź na Jak losowa jest matematyka JavaScript.przypadkowy? odnosi się do tymczasowego śledzenia użytkowników w głównych przeglądarkach i wycieku informacji między domenami i ataków z 2008 roku, który omawia jak JavaScript Matematyka.funkcja random() wycieka informacje.
Aktualizacja: aby sprawdzić aktualny stan obsługi przeglądarki, sprawdź Modern.IE sekcja Web Crypto API , która również łączy się z Chrome, Firefox i Safari zgłaszanie błędów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:50
Ponieważ nie możesz znać dokładnej implementacji przeglądarki (poza zamkniętymi grupami użytkowników, jak dla Twojego intranetu biznesowego) ogólnie uznałbym RNG za słaby.
Nawet jeśli możesz zidentyfikować przeglądarkę, nie wiesz, czy sama przeglądarka lub identyfikator agenta innej przeglądarki jest manipulowany. Jeśli możesz, powinieneś wygenerować numer na serwerze.
Nawet jeśli umieścisz dobry PRNG w swoim JavaScript, Twój serwer nie może wiedzieć, czy żądanie klienta pochodzi z niezmodyfikowanego skryptu. Jeśli numer trafi do twojej bazy danych i / lub zostanie użyty jako narzędzie kryptograficzne, nie warto w ogóle ufać danym od klienta. To prawda nie tylko dla ważności ( sprawdzasz wszystkie dane pochodzące od klienta, prawda?), ale także dla ogólnych właściwości, takich jak losowość.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-30 10:07:21
Math.random()
nie jest zabezpieczony kryptograficznie. Również Veracode wskaże to wystąpienie za pomocą
CWE - 331 (niewystarczająca Entropia)
Moglibyśmy wykorzystać SecureRandom do zaimplementowania podobnej funkcjonalności.
new SecureRandom().nextDouble();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 11:53:16