Puncte:28

De ce este controversată conformitatea cu FIPS 140-2?

drapel ng

Citeam comentariile unui articol despre o nouă implementare propusă a /dev/random în Linux astăzi și cineva a remarcat că trebuie să fie deranjant să treci prin 43 de revizuiri și să nu ai încă patch-ul. Câteva comentarii pe rând și cineva aparent sugerează că această nouă implementare ar fi compatibilă cu FIPS 140-2, și că acest lucru este controversat cu „un dezvoltator al unui renumit modul kernel VPN” care „utiliză în mod intenționat doar algoritmi aprobați de NIST” are „o opinie puternică împotriva conformității FIPS necesare pentru cazurile de utilizare guvernamentale”.

De ce asta? Ce este controversat cu privire la conformitatea cu FIPS 140-2?

drapel ke
Un alt lucru care îi face pe practicieni din domeniu să se încruntă în privința FIPS (deși poate nu în contextul `/dev/random`) este acel cod care a fost testat pentru a fi compatibil cu standardele se află în mod constant în spatele celui mai recent cod -- va să lipsească remedieri de erori, inclusiv remedieri pentru erori de securitate; și este foarte costisitor să retestați. Mai mult, setul de suite de criptare specificate de FIPS și suitele de criptare care sunt de fapt considerate cele mai bune practici pentru a fi utilizate în lumea reală ies din aliniament în timp. O implementare auditată pentru a fi conformă cu FIPS -- de orice -- este o implementare _veche_.
drapel pk
O parte din ea se face aluzie la mai jos. Pentru ca un sistem să fie conform, nu trebuie să fie posibil să se utilizeze algoritmi și metode neconforme. Acest lucru nu este dificil la nivelul sistemului de operare al platformei. De exemplu, în Windows, când modul FIPS este activat, nu este posibil să creați sau să utilizați chei de criptare a volumului agentului de recuperare a textului simplu. Pentru dezvoltatorii de aplicații, poate nu la fel de ușor. Și puteți utiliza doar algoritmi mai vechi, care pot omite unii algoritmi criptografici de cadre gestionate (Java/.NET).
Puncte:33
drapel ng

Voi adăuga la alt raspuns: cel Reguli de certificare FIPSÂ 140-2 pentru RNG-uri au fost viciate; și notificarea de modificare a FIPS 140-2 2 (dec. 2002) a eliminat partea despre autotestări. Ele sunt literalmente eliminate din standard, lăsând vid. Astfel, FIPS 140-2 nu prescrie niciun test satisfăcător din punct de vedere tehnic al sursei de entropie, nu a făcut-o niciodată și aceasta este o problemă. Prescrie doar condiționarea criptografică aprobată (cu privire la care nu am rezerve tehnice acum că Dual_EC_DRBG este scos).

Inițial au fost prescrise 4 teste (monobit, poker, runs și long runs) care să fie efectuate la cererea operatorului (la nivelul 3) sau la fiecare pornire (nivel 4), fiind necesară o intervenție manuală dacă un test eșuează. Este greșit din mai multe motive:

  • Nivelurile de acceptare sunt foarte stricte (mai mult decât erau în FIPSÂ 140-1). Chiar și cu un generator perfect, testele vor eșua pe teren cu o probabilitate considerabilă, cu intervenția umană mandatată. Acest lucru este pur și simplu inacceptabil în unele aplicații, inclusiv sisteme de operare, TPM-uri, carduri inteligente. Orice lucru operat nesupravegheat nu poate fi la nivelul 4, iar contorsiunile sunt necesare la nivelul 3 pentru a justifica chestia cu „cererea operatorului”.
  • Nu este specificat că aceste teste ar trebui să fie executate pe sursa de entropie necondiționată. Prin urmare, este tentant să rulați testele pe numere aleatoare ca rezultat al unui bloc de condiționare, ceea ce face testele în mare măsură inutile: dacă sursa de entropie necondiționată eșuează sau devine cu entropie scăzută, un test al ieșirii condiționate nu va înțelege acest lucru, cu excepția cazului în care condiționarea are un imens defect teoretic.
  • Nivelul de acceptare al unor teste (în special testul monobit și, într-o măsură mai mică, testul de poker) este de așa natură încât o ușoară părtinire, care este perfect normală și inofensivă pentru o sursă de entropie necondiționată, urmată de o condiționare criptografică adecvată, va determina o rată de respingere dezastruos de mare. . Astfel, este practic imposibil să se aplice testele pe materialul care necesită testare.

Ultimele două probleme rămân la cele de mai târziu SP 800-22 Rev. 1a Teste statistice NIST pentru RNG-uri pentru aplicații criptografice (care, după înțelegerea mea limitată, sunt acum utilizate în timpul certificării). Matematica testelor este bine. Dar, ca mai sus, testele sunt foarte sensibile, deci inutilizabile pe o sursă de entropie adevărată necondiționată (testele ar eșua adesea), astfel utilizabile numai la ieșirea unei surse condiționate, astfel încât nu pot detecta defectele sursei dacă condiționarea este bună. Și este imposibil să detectezi un generator cu ușă în spate competent doar din ieșirea lui.

Deci aceste teste fie eșuează și dau o bună asigurare că materialul testat se distinge de aleatoriu, fie reușesc și dau o aparentă asigurare de securitate, chiar dacă entropia sursei este foarte limitată sau condiționarea are o ușă în spate, care ambele pot permite un atac. .

Oamenii de la NIST sunt competenți și este rezonabil să ne întrebăm dacă adevăratul scop al acestor teste este să ofere acea iluzie de securitate. Acest lucru ar fi în concordanță cu o istorie lungă a SUA care furnizează activ criptografii slăbite:

  • Elaborat și lung de decenii compromis al Swiss Crypto AG firmă, care vindea mașini de cifrat slăbite în mod deliberat.
  • DES: o publicație NSA, acum declasificată, recunoaște că cheia sa pe 56 de biți este rezultatul unei negocieri între designeri care doresc 64 de biți (cel puțin: Lucifer designul avea o opțiune pentru chei pe 128 de biți); și NSA, încercând să impună 48 de biți pentru a ușura cracarea; vedea acest.
  • Dual_EC_DRBG menționată în celălalt răspuns: o încercare deliberată (și la un moment dat succes) de a difuza pe scară largă un RNG, cu un design și parametri publici, care era sigur, cu excepția autorităților americane (sau a oricui a reușit să schimbe cheia publică, care s-a întâmplat).
Puncte:31
drapel mc

Deoarece a existat anterior un generator de numere aleatoare aprobat de NIST (Dual_EC_DRBG) care a fost susținut de NSA și a avut un defect despre care se presupune în general a fi o ușă din spate intenționată creată de NSA. Acest lucru i-a făcut pe unii oameni să nu aibă încredere în orice algoritm cripto care iese din NIST. O mulțime de articole pe net despre asta, iată unul de Schneier care explică problema într-o cantitate destul de detaliată.

drapel mg
Personal mi s-a părut că aceasta este întotdeauna o reacție exagerată. Da, a avut loc o dezamăgire cu Dual_EC_DRBG. Dar folosim în continuare AES, SHA2 și vom folosi orice câștigă competiția de algoritm post-cuantic. Ideea mea a fost întotdeauna: nu ai încredere în standarde *orb*. Adică, curbele EC brainpool au și niște constante ciudate, tot a generat mult mai puțin zgomot decât orice iese din NIST.
Swashbuckler avatar
drapel mc
@D.Kovács Vă înțeleg punctul de vedere, dar marea și marea majoritate a oamenilor nu au expertiza tehnică pentru a evalua algoritmii cripto pentru defecte (introduse intenționat sau nu) și, prin urmare, trebuie să aibă încredere orbește.
drapel za
@D.Kovács O încercare deliberată de a slăbi cripto nu este o dezamăgire, este un atac. De asemenea, după cum se menționează în răspunsul lui fgrieu, testele FIPS 140-1 și 140-2 sunt defecte. Ca atare, ele pot fi văzute și ca o încercare de a slăbi sistemul dvs. cripto, oferind utilizatorilor un fals sentiment de securitate. Controversa este rezultatul faptului că dezvoltatorii nu au încredere orbește în standarde - așa cum v-ați propus
user avatar
drapel in
@slebetman Aveți fapte care să susțină afirmația că a fost deliberat?
drapel za
Notele @user NSA publicate de Edward Snowden și raportate de New York Times indică faptul că cazul Dual_EC_DRBG a fost o încercare deliberată a NSA de a insera o ușă din spate matematică (făcându-le mai ușor să ghicească numere aleatoare) la standardele de criptare.Desigur, nu avem documentele originale pentru că, spre deosebire de Wikileaks, Snowden nu a dat publicității documentele secrete - doar presei. Depinde de tine vremea dacă vrei să crezi NYT sau NSA, dar banii mei sunt pe NSA fiind mincinoșii - pentru că asta e treaba lor.
Mark avatar
drapel jp
@utilizator, nu *știm* că originalul Dual_EC_DRBG a fost backdoored de către NSA, dar știm că atacatorii încă neidentificați [au modificat valoarea Q a dual EC așa cum a fost implementat de Juniper Networks](https:// www.schneier.com/blog/archives/2016/04/details_about_j.html) pentru a-și obține propria ușă din spate.
fgrieu avatar
drapel ng
@utilizator: ușa din spate a lui Dual_EC_DRBG a fost indiscutabil deliberată: designul are sens doar ca atare. Și există [un brevet](https://worldwide.espacenet.com/textdoc?DB=EPODOC&IDX=US2007189527) care declară clar intenția. Observația mea conform căreia testele RNG din FIPS 140 și SP 800-22 ar putea încerca _deliberat_ să ofere un sentiment fals de securitate este speculativă, pe baza faptului că aceste teste nu sunt o dovadă validă de securitate (de exemplu, dau lui Dual_EC_DRBG o notă curată de sănătate). De altfel, ele sunt folosite ca argument fals pentru securitatea RNG-urilor în zeci, poate sute de publicații substandard.
Joshua avatar
drapel cn
@fgrieu: Rândul meu să mă joc avocatul diavolului. Să presupunem că ați vrut să construiți în mod fiabil un RNG care să nu prezinte scurgeri. Să presupunem că ați făcut acest lucru construind unul dintr-un algoritm de criptare asimetrică care și-a scurs starea cu eficiență maximă, astfel încât să nu existe entropie liberă pentru a scurge altceva, apoi a distrus cheia de decriptare? Asta nu ar dovedi că un RNG nu se scurge?
Puncte:7
drapel mx

Puteți face cea mai bună alegere posibilă în toate cazurile dacă nu trebuie să respectați FIPS 140-2. Dacă trebuie să respectați FIPS 140-2, puteți face numai ce este mai bun aprobat alegere. Astfel, conformitatea cu FIPS 140-2 nu vă permite niciodată să faceți alegeri mai bune și uneori vă obligă să faceți alegeri mai proaste.

Să presupunem că trebuie să alegeți între două opțiuni, dintre care una este aprobată de FIPS 140-2, iar cealaltă este în general considerată alegerea mult mai sigură de către comunitatea criptografică. Pe care ar trebui să alegi?

Răspunsul este că ar trebui să alegeți cu siguranță pe cel care este considerat mult mai sigur dacă nu trebuie să aveți conformitate cu FIPS 140-2. În acest caz, trebuie să utilizați cel conform.

Este perfect bine să folosiți metode aprobate de FIPS 140-2 atunci când au sens.Singura diferență pe care o face conformitatea cu FIPS 140-2 este că vă obligă să faceți alegeri mai proaste în unele cazuri.

fgrieu avatar
drapel ng
Da, FIPS 140-2 restricţionează condiţionarea deterministă care poate fi utilizată. Dar, spre deosebire de Dual_EC_DRBG, cei (încă) aprobati sunt simpli, iar părerea mea (și a multor altora) este că nu sunt mai în spate decât SHA-2 sau AES. Prin urmare, este posibil să dorim să le respingem doar pe principii, nu pe motive tehnice. IMHO, cea mai reală problemă tehnică cu FIPS 140-2 este lipsa testului online (test pe teren că sursa de entropie este bună). Au existat unele astfel de teste, erau defecte din punct de vedere tehnic și sunt literalmente [eliminate] (https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.140-2.pdf#page=65).
drapel mx
@fgrieu Am avut cazuri în care a existat o eroare într-un produs certificat FIPS 140-2 care a compromis în mod clar securitatea, iar alegerile mele au fost să remediez eroarea și să pierd certificarea FIPS 140-2 sau să păstrez atât eroarea, cât și certificarea.
Puncte:1
drapel cn

Gândurile mele sunt prea lungi pentru a comenta, așa că le voi încheia ca răspuns...

Există unele probleme serioase cu celelalte două răspunsuri, în măsura în care unii dintre noi au interpretat greșit ce este un test de aleatorie. Ca puncte: -

1. „Neîncredere în orice algoritm cripto care iese din NIST”. Nu există algoritmi generați de NIST în FIPS. Cu siguranță nimic din complexitatea Dual_EC_DRBG. Runs și teste de poker nu sunt algoritmi proprietari ai Departamentului de Comerț al SUA (NIST). Sunt caracteristici matematice ale unei distribuții uniform aleatoare. Dacă presupun că numărul așteptat de unități ar trebui să fie de ~50%, asta mă face un subversiv? Nici extinderea mediei de 0,5 cu $n$ abateri standard. $\mathcal{N}(\mu, \sigma^2)$ este forma standardizată pentru acea distribuție și nu m-aș aștepta la ceva mai puțin incomplet. Verificarea blocurilor de ieșire repetate (testul generator de numere aleatoare continue) nu este o subversiune, este de bun simț.

2. Pot oferi acest test FIPS ca dovadă:-

$cat /dev/urandom | rngtest
rngtest 5
Copyright (c) 2004 de Henrique de Moraes Holschuh
Acesta este software gratuit; consultați sursa pentru condițiile de copiere. NU există garanție; nici măcar pentru VANTABILITATE sau ADEPTEREA PENTRU UN ANUMIT SCOP.

rngtest: pornește teste FIPS...
rngtest: biți primiți de la intrare: 8310580032
rngtest: FIPS 140-2 succese: 415198
rngtest: Eșecuri FIPS 140-2: 331
Rngtest: FIPS 140-2(2001-10-10) Monobit: 41
Rngtest: FIPS 140-2(2001-10-10) Poker: 53
Rngtest: FIPS 140-2 (2001-10-10) Rulări: 123
rngtest: FIPS 140-2(2001-10-10) Pe termen lung: 115
rngtest: FIPS 140-2(2001-10-10) Executare continuă: 0
rngtest: viteza canalului de intrare: (min=10.703; avg=1976.720; max=19073.486) Mibits/s
rngtest: viteza testelor FIPS: (min=75.092; avg=199.723; max=209.599) Mibits/s
rngtest: Timp de rulare a programului: 43724402 microsecunde

Rata de eșec este p=0,0008. Este foarte comparabil cu pragul p=0,001 din suita de teste SP800 STS și cu cel mai greu:-

NOTĂ BINE: Evaluarea (evaluările) pentru rngs poate fi, de fapt, completă
  incorectă sau înșelătoare. În special, ar trebui să apară valori p „slabe”.
  un test la o sută, iar valorile p „Eșuate” ar trebui să apară la un test în
  o mie -- asta înseamnă p. Folosește-le pe propriul tău risc! Fii avertizat!

Deci nu aparent controversat.

3. „Nu este specificat că aceste teste ar trebui să fie efectuate pe sursa de entropie necondiționată”. Desigur că nu. Este corect. Nimeni nu are caracteristici statistice pentru distribuțiile sursei de entropie necondiționate. Ele vin în toate formele și locațiile. Unele dintre ele nu au nici măcar nume matematice (probă dublă de log normal, cadă MOD $x$ e.t.c.) Putem rula numai teste statistice standardizate pe rezultatul final condiționat.

4. „Este imposibil să detectezi un generator cu ușă în spate competent doar din ieșirea lui”. Din nou, desigur. Nu aceasta este intenția de ex. Testare de pornire FIPS. Ai nevoie de programatori și criptografi pentru asta. FIPS automatizează pur și simplu testarea aleatoriei și stabilește linii directoare pentru programarea de securitate de bază, cum ar fi fără șir de caractere literal pentru control și cod relocabil. Toate foarte normale.

Prin urmare, FIPS 140 nu este chiar atât de controversat. A spune acest lucru este echivalent cu a spune că NIST a făcut ușă în spate distribuția Normală, sau că dieharder este inutil. FIPS nu este grozav la câteva lucruri. Și testarea blocurilor de 20.000 de biți se potrivește perfect la capătul de jos al scalei pentru testarea aleatoriei, chiar mai jos ent (500.000 de biți).

poncho avatar
drapel my
„Nu există algoritmi generați de NIST în FIPS”; de fapt, CTR_DRBG, HASH_DRBG și HMAC_DRBG au fost proiectate de John Kelsey de la NIST...
fgrieu avatar
drapel ng
Unele comentarii au fost [mutate pe chat](https://chat.stackexchange.com/rooms/131745/discussion-on-answer-by-paul-uszak-why-is-fips-140-2-compliance-controversial) pentru a continua acest schimb interesant.
Paul Uszak avatar
drapel cn
@fgrieu Mie mi se întâmplă multe, nu-i așa.

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.