Puncte:4

Java: SecureRandom.getInstanceStrong() vs noul SecureRandom()

drapel ht

Dat SecureRandom clasa este considerată potrivită pentru utilizarea în criptografie, consider nou SecureRandom() pentru a fi sigur (termen amuzant, nu-i așa?).

Dacă nou SecureRandom() deja este sigur, care ar fi beneficiul utilizării SecureRandom.getInstanceStrong() in schimb?

Este același tip de diferență ca între /dev/urandom și /dev/random?

Dezbat acest lucru în următorul scenariu, în care sunt mai ales preocupat de a face IV aleatoriu (pentru utilizarea cu AES-GCM):

privat final SecureRandom secureRandom = nou SecureRandom();

[...]

octet privat[] getIv() {
    int ivLength = 12;
    byte[] iv = octet nou[ivLength];
    secureRandom.nextBytes(iv);
    întoarcere iv;
}
kelalaka avatar
drapel in
[Vezi nota de subsol: Depinde de sistemul de operare, în IOS sunt aceleași](https://crypto.stackexchange.com/a/85545/18298)
kelalaka avatar
drapel in
Acesta este un apel de bibliotecă pentru a obține instanța... [SecureRandom.getInstanceStrong()](https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html) Vezi [Răspunsul Maarten pe deci ](https://stackoverflow.com/a/37256739/1820553)
Paul Uszak avatar
drapel cn
Re. random: Nu (pentru vechile versiuni de kernel ex.NSA.) `\dev\random` era un TRNG în timp ce `dev\urandom` era un PRNG.
Gilles 'SO- stop being evil' avatar
drapel cn
Un GCM IV nu trebuie să fie aleatoriu. Trebuie doar să fie unic. Deci, pentru acest caz specific, nu contează. Singurul motiv pentru a utiliza un IV aleatoriu pentru GCM este dacă nu vă amintiți toate IV-urile care au fost utilizate anterior, așa că vă bazați în schimb pe unicitatea statistică. Pentru asta, este suficient să ai o valoare aleatoare statistic, nici măcar nu trebuie să fie aleatoare criptografic (care este o proprietate mai puternică, inclusiv impredictibilitatea și independența față de toate celelalte valori aleatoare).
Paul Uszak avatar
drapel cn
@kelalaka Aceasta este de fapt o mizerie Java. `securerandom.source=file:/dev/random` care blochează(ed) desigur.Deci, dacă ați activat un server de aplicații, a durat aproximativ cinci minute pentru a returna o solicitare http. Chiar și unul non https, ca site-ul meu, care este destul de surprinzător (probabil generarea de cookie-uri).
kelalaka avatar
drapel in
Ce a spus @Gilles este adevărat, dacă este posibil, utilizați [AES-GCM-SIV](https://crypto.stackexchange.com/q/82105/18298) pentru a atenua această problemă...
Puncte:2
drapel in

SecureRandom.getInstanceStrong() se va asigura că va fi utilizat un algoritm puternic (securerandom.strongAlgorithms).

  • Este disponibil de atunci Java versiunea 8. Verificați versiunea dvs. înainte de a începe să utilizați.

  • Dacă nu este disponibil un astfel de algoritm în rularea VM, va arunca NoSuchAlgorithmException.

  • Acest eșec este o practică mai bună, în loc de a trece implicit la securitatea slabă.

kelalaka avatar
drapel in
Bun venit la Criptografie. Un link către această afirmație sau linie de cod din sursă va face acest răspuns mult mai bun. În caz contrar, aceasta este o revendicare proprie. De exemplu, s-ar putea spune, de asemenea, dacă nu există un algoritm puternic (care este sensul unui algoritm puternic), atunci îl va folosi pe cel implicit; java.util.Random. Este nevoie de referință și, în cazul Java, chiar și versiuni.
drapel in
Vă mulțumesc pentru feedback, kelalaka, am adăugat câteva clarificări, așa cum ați sugerat.
kelalaka avatar
drapel in
Există o listă de algoritmi puternici?
Paul Uszak avatar
drapel cn
@kelalaka „Puternic” este un termen comun folosit de criptografi, agenții și guvernele totalitare pentru a eticheta că o criptare nu poate fi învinsă în timp real. Există o listă [aici](https://crypto.stackexchange.com/a/62515/23115). Nu știu dacă ar trebui adăugat AES, deoarece nu există dovezi matematice că este încă sigur.
kelalaka avatar
drapel in
@PaulUszak vorbesc în contextul securității Java și în special pe generarea numerelor aleatorii.

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.