Puncte:3

În ce mod sunt diferite instanțele RSAES-OAEP și SHA*WithRSAEncryption în practică?

drapel vu

Pentru proiectul de timp liber la care lucrasem, evaluez schemele RSA PKCS#1 pentru implementare.

Pentru PKCS#1 v1.5, criptarea nu pare să necesite o funcție hash, iar semnătura nu are nevoie de funcție suplimentară de generare a măștilor (MGF) dincolo de un algoritm de digest pentru hashing a mesajului.

Pentru PKCS#1 v2.x, atât criptarea, cât și semnătura sunt instanțiate cu un MGF, o funcție hash și o etichetă opțională (care nu are o utilizare specificată în prezent). MGF care, la rândul său, este instanțiat cu o altă funcție hash folosind construcția (ad-hoc) MGF1.

În opinia mea, un criptosistem compozit ar trebui să aibă cât mai puțini parametri de instanțiere posibil, astfel încât să ușureze sarcina implementării și să promoveze interoperabilitatea; numai parametrii necesari pentru agilitatea criptografică ar trebui introduși în design.

De aceea, mi se pare o surpriză, că hash-ul care instanțiază MGF poate fi diferit de cel utilizat pentru hash-ul de intrare.

Întrebările mele aici sunt:

  • există recomandări existente (de exemplu, CMS, PKIX) cu privire la utilizarea și instanțierea PKCS#1 v2.x RSAES-OAEP și RSASSA-PSS, unde este specificată selecția funcțiilor hash?
  • Există ID-uri atribuite (de la IANA sau organizații similare)?
  • Puncte suplimentare se referă la tratarea NIST Draft FIPS 186-5, unde SHAKE-{128,256} urmează să fie aprobat pentru utilizare ca MGF.
Gilles 'SO- stop being evil' avatar
drapel cn
PKCS#1 recomandă utilizarea acelorași funcții hash (și mandate să folosească aceeași funcție hash pentru a distribui mesajul și a hash-ului, doar MGF-ul este permis să fie diferit), iar din experiența mea, acest lucru este urmat în mare parte în practică, dar am văzut sisteme care s-au blocat pe SHA-1 pentru MGF, în ciuda faptului că s-au mutat la SHA-2 pentru hashingul mesajelor. Nu am văzut niciodată altceva decât MGF1 pentru MGF (în afară de SHAKE, dar dacă există primitori, nu i-am văzut încă: tot ce am văzut folosind SHAKE îl asociază cu ECC).
Puncte:1
drapel ng

Voi începe cu o comparație funcțională a RSAES-PKCS1-v1_5 cu RSAES-OAEP.

Ultimul este aproape substitutul modern al primului.

În primul rând, este practic imposibil să faci o bibliotecă care să implementeze decriptarea RSAES-PKCS1-v1_5 care să asigure securitatea împotriva atacurilor pe canalele laterale. Multe încercări de a obține securitate la nivel de aplicație au eșuat: un adversar capabil să facă un număr modest de interogări către un dispozitiv care efectuează decriptarea și să observe comportamentul acestuia (cod de eroare, dimensiunea pachetului, sincronizare, accesări pe disc, cache, sunet de alimentare...) adesea reușește [adică reușește să decripteze un mesaj pe care l-au interceptat sau să semneze un mesaj dacă cheia este cu dublă utilizare]. Atacul CCA al lui Bleichenbacher are atât de multe variante încât este greu de urmărit. Contrast cu RSAES-OAEP: o cantitate limitată de îngrijire în implementarea unei biblioteci previne atacul echivalent.

De asemenea, RSAES-PKCS1-v1_5 este definit pentru a permite aleatorie până la 64 de biți, ceea ce nu este suficient pentru standardele moderne pentru a preveni în mod robust testarea unei presupuneri exacte a textului simplu. Singura modalitate de a remedia acest lucru este de a preveni criptarea mesajelor prea aproape de dimensiunea maximă permisă.

RSAES-OAEP are o dovadă de securitate (în ipoteza că problema RSA este grea, iar hash-ul poate fi modelat ca o funcție pseudo-aleatorie, iar implementarea nu are un canal lateral). RSAES-PKCS1-v1_5 nu.

Un dezavantaj al RSAES-OAEP este că permite mesaje mai mici pentru același modul, dar aceasta este rareori o problemă în practică, deoarece atunci când dimensiunea mesajului crește, folosim criptare hibridă.


recomandări existente (de exemplu, CMS, PKIX) privind utilizarea și instanțierea RSAES-OAEP și RSASSA-PSS

După cum s-a arătat în cometariu la întrebarea, la cele mai bune practici actuale este să folosiți MGF1 cu același hash ca și pentru restul construcției. SHA-256 este comun, SHA-512 ar fi cel mai bine. Cea mai frecventă abatere de la aceasta este utilizarea SHA-1 în MGF1 pentru RSAES-OAEP, deoarece API-ul Java face o greșeală ușoară (vezi acest). Asta e încă sigur din câte știm.

Pentru RSASSA-PSS, o practică comună (dar nu cea mai bună) este să lăsați câmpul de sare gol, adică folosirea $sLen=0$ în EMSA-PSS.

Folosirea SHAKE-{128,256} ca MGF ar fi bună în teorie, dar nu a ajuns să se practice în aplicațiile pe care le cunosc și s-ar putea să nu o fac niciodată.

Există ID-uri atribuite (de la IANA sau organizații similare)?

Sunt OIDs pentru RSAES-OAEP, RSASSA-PSS, MGF1, SHA-256 și SHA-512. Acum, cum ar trebui utilizate aceste OID-uri în combinație, de ex. un certificat X.509 și există ceva care va continua să funcționeze dacă se încearcă asta? Trec.

dave_thompson_085 avatar
drapel cn
Pentru majoritatea oamenilor, PKIX este la fel de bun ca X.509 și **parametrii PKIX** pentru OAEP și PSS sunt în **RFC 4055**. TLS1.3 (RFC 8446 4.2.3) utilizează semnături PSS, specificând MGF-hash = message-hash și saltlen = digestlen, iar certificatul trebuie să conțină fie OID-ul original (rsaEncryption din motive istorice, chiar dacă semnătura nu este criptare) sau OID-ul PSS. TLS1.3 este implementat destul de pe scară largă, deși nu știu câte site-uri folosesc RSA-PSS față de ECDSA sau EdDSA -- poate e timpul ca EFF să facă un alt sondaj?
Puncte:1
drapel vu
  • există recomandări existente (de exemplu, CMS, PKIX) cu privire la utilizarea și instanțierea PKCS#1 v2.x RSAES-OAEP și RSASSA-PSS, unde este specificată selecția funcțiilor hash?

Atât CMS, cât și PKIX au recomandare în acest sens. Ambele CMS-uri RFC-4056 și PKIX-uri RFC-4055 recomandă utilizarea aceluiași hash pentru mesaj și MGF.

Notă secundară: S/MIME și PKIX sunt grupuri de lucru încheiate la IETF, succesorul lor LĂMPĂRI face treburile de întreținere.

  • Există ID-uri atribuite (de la IANA sau organizații similare)?

De obicei, OID-urile ASN.1 nu trebuie să treacă prin IANA.

RFC-3560 mergeți până la a enumera valorile octetului pentru parametrul algoritmului ASN.1 Codificare DER, text.

  • Puncte suplimentare se referă la tratarea NIST Draft FIPS 186-5, unde SHAKE-{128,256} urmează să fie aprobat pentru utilizare ca MGF.

NIST, ca orice alte organe oficiale ale guvernului, a menținut întotdeauna poziția de neutralitate a vânzătorilor și a respins orice aprobare a produselor comerciale menționate în publicațiile lor oficiale.

RFC-urile IETF-{8692,8702} specificând SHAKE pentru utilizare cu RSA (și CMS și PKIX în general), a enumerat Cisco Systems ca co-editori. Deci, aceasta este doar o presupunere, poate Cisco introduce produse care ar putea câștiga din eficiența hardware a permutării Keccak și a parametrilor buretei SHAKE, atunci când sunt folosite ca oracol aleatoriu în algoritmul RSA.

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.