Puncte:0

Unde este specificația pentru SHA1PRNG?

drapel in

Am căutat algoritmul SHA1PRNG, care este implementat în clasa SecureRandom Java. Știe cineva cum funcționează exact acest algoritm? Nu am găsit o sursă în care algoritmul să fie descris în detaliu.

Scopul meu este să-l folosesc în JavaScript, dar nu am găsit nicio implementare, astfel încât trebuie să o fac pe cont propriu (doar scop educațional și fără utilizare în producție). Dacă cineva l-a implementat deja, ar fi bine să-l obțineți ca implementare de referință.

drapel us
Aceasta este o întrebare mai potrivită pentru forumul SO implicit. Când vine vorba de asta - de ce vrei să-l folosești exact pe acesta? Puteți găsi [codul sursă](https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java), dar diferiți furnizori JVM/JCE poate avea implementare diferită. JS are deja câteva biblioteci care oferă un număr aleator securizat folosind sistemul de bază.
Cryptomathician avatar
drapel in
@gusto2 vă mulțumesc pentru acest cod sursă. Lucrez la un proiect pentru universitate, în care serverul folosește această clasă cu SHA1PRNG cu o anumită sămânță pentru a genera o pereche de chei specifică (ECC, curba secp256r1). Pentru a lucra cu acel server am nevoie de implementarea corespunzătoare pentru JavaScript.
Cryptomathician avatar
drapel in
@gusto2 În plus, la problema mea, vreau să știu cum funcționează exact acest PRNG, dar nu am găsit nicio resursă bună pentru acest algoritm.
Cryptomathician avatar
drapel in
@gusto2 Știți unde pot găsi aceste implementări specifice ale furnizorului JVM/JCE? Lucrez în acest moment pe Linux și cu actualizarea 241 Oracle JDK 1.8.0.
drapel st
În JavaScript, ar trebui să utilizați `Crypto.getRandomValues()` https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues] în loc să încercați să rulați propriul dvs. CSRNG
Cryptomathician avatar
drapel in
@rmalayter este doar pentru scop educațional. Cum poți învăța despre astfel de lucruri dacă nu ai voie să le încerci pe cont propriu într-un mediu de laborator? Dacă toată lumea nu va arunca o privire în el, nimeni nu va afla ceva despre el.Da, nu vă construiți niciodată propriul sistem criptografic, dar și criptografii trebuie să înceapă de undeva și să învețe despre astfel de lucruri.
drapel st
@Cryptomathician Scuzele mele, întrebarea dvs. nu a inclus nicio indicație „acesta a fost în scop de învățare”.Există o mulțime de provocări în ceea ce privește scrierea unui CSRNG într-un mediu JavaScript (browser). Mai întâi obțineți în siguranță entropia aleatoare pentru însămânțare și apoi împiedicați, de asemenea, scriptul terță parte sau utilizatorul final să „vadă” materialul de semințe sau numerele aleatoare reale pe care le generați. `Crypto.getRandomValues()` încorporat în browser rezolvă aceste probleme utilizând CSRNG al sistemului de operare direct printr-un apel de sistem.
Cryptomathician avatar
drapel in
@rmalayter mulțumesc pentru explicație. Poate o întrebare mai generală. Este chiar posibil să scrieți un CSPRNG în JavaScript (browser), astfel încât să puteți depăși aceste provocări pe care le-ați menționat, fără a utiliza un CSPRNG în afara browserului?
drapel st
@Cryptomathician depinde de nevoile de securitate ale aplicației; dacă nu vă pasă de utilizatorul final să vadă starea sau să poată modifica ieșirile, ați putea, teoretic, să colectați entropia de la mișcările mouse-ului și de la tastatură ale utilizatorului, orice folosiți o funcție hash criptografică pentru a le hash într-o sămânță. Toate acestea se pot face într-un browser, dar utilizatorul final poate vedea sau modifica cu ușurință oricare dintre acestea apăsând F12 și deschizând instrumentele pentru dezvoltatori. Chiar dacă ați folosit în schimb `window.crypto.getRandomValues`, utilizatorul final ar putea alege pur și simplu să nu folosească acele valori și să le înlocuiască pe ale lor atunci când face apeluri POST sau API.
Puncte:2
drapel us

Scopul meu este să-l folosesc în JavaScript, dar nu am găsit nicio implementare

Puteți găsi codul sursă, dar diferiți furnizori JVM/JCE pot avea implementări diferite.

vedea: https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java

În plus, la problema mea, vreau să știu cum funcționează exact acest PRNG

Pe Oracol doc site-ul SHA1PRNG este descris ca:

Numele algoritmului de generare a numerelor pseudoaleatoare (PRNG) furnizat de furnizorul SUN. Acest algoritm folosește SHA-1 ca bază a PRNG. Acesta calculează hash-ul SHA-1 pe o valoare semi-aleatorie adevărată concatenată cu un contor de 64 de biți care este incrementat cu 1 pentru fiecare operație. De la ieșirea SHA-1 pe 160 de biți, sunt utilizați doar 64 de biți.

Știți unde pot găsi aceste implementări specifice ale furnizorului JVM/JCE?

SHA1PRNG pare să fie moștenit pentru versiunile anterioare de Java, așa că ar trebui să fie cel mai compatibil pe care îl puteți obține.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.