it-swarm.dev

Quale specifica debolezza dell'imbottitura viene affrontata da OAEP in RSA?

È stato raccomandato di utilizzare OAEP quando si riempiono i messaggi per essere crittografati tramite RSA, per prevenire attacchi di testo normale noti.

Qualcuno può elaborarlo in modo più dettagliato? Mi piacerebbe in particolare conoscere la debolezza dello schema precedente, sia dal punto di vista teorico che pratico/reale.

38
DeepSpace101

L'operazione alla base di RSA è un'esponenziazione modulare: dato input m, compute me modulo n. Sebbene in generale questa è una permutazione unidirezionale di numeri interi modulo n, non soddisfa tutte le caratteristiche necessarie per la crittografia asimmetrica generica:

  • Se e è piccolo e m è piccolo, allora me potrebbe essere inferiore a n, a quel punto l'esponente modulare non è più modulare e può essere ripristinato in modo efficiente.

  • L'operazione è deterministica, il che consente una ricerca esaustiva sul messaggio: l'attaccante crittografa i possibili messaggi fino a quando non viene trovata una corrispondenza con il messaggio crittografato effettivo.

  • L'esponenziazione modulare è malleabile: data la "crittografia" di m1 e m2, una semplice moltiplicazione produce la crittografia di m1m2. È simile a crittografia omomorfa , che può essere una buona proprietà o no, a seconda del contesto.

Per questo motivo, l'intero m che è soggetto a RSA non deve essere i dati da crittografare da solo, ma dovrebbe essere il risultato di una trasformazione che assicura che m = è "non piccolo", contiene alcuni byte casuali e scoraggia la malleabilità.

L'imbottitura "v1.5" in PKCS # 1 fa il lavoro ragionevolmente bene, soggetto a due avvertenze (conosciute):

  • Un motore di decrittazione può essere trasformato in padding Oracle se l'attaccante può inviare messaggi dannosi per decrittografare e osservare se il motore di decrittografia ha trovato o meno una struttura di riempimento corretta. Questo è l'attacco di Bleichenbacher, che potrebbe funzionare contro il server SSL, che richiede circa un milione di handshake interrotti per recuperare la chiave simmetrica SSL. Da allora i server SSL sono stati patchati (se la decrittazione non riesce a trovare un riempimento, il motore continua comunque con un BLOB casuale invece del "segreto pre-master"), ma questo evidenzia un potenziale problema con PKCS # 1 v1.5.

  • Questo schema di imbottitura non è mai stato "provato". Le prove di sicurezza sono una cosa ordinata da avere. A mio avviso, questa imbottitura ha ottenuto qualcosa di meglio, ovvero è stata implementata sul campo e ampiamente utilizzata per quasi 20 anni; ma molte persone lo preferiscono quando ci sono alcuni tipi di matematica che confermano l'esperienza.

OAEP mira a migliorare le cose su questi due punti. Si è scoperto che per gli oracoli di imbottitura, le cose non sono così chiare ; e la prima prova è stata dimostrata in qualche modo sbagliata da Shoup. La prova è stata "riparata" da Fujisaki, Okamoto, Pointcheval e Stern nel caso di RSA (OAEP è stato progettato come uno schema di imbottitura generico, ma ora abbiamo una prova di sicurezza solo se utilizzato con RSA).

Per riassumere , OAEP cerca di migliorare la precedente imbottitura per resistere a attacchi di testo cifrato scelti (non scelto attacco di testo in chiaro: poiché la chiave pubblica è pubblica, chiunque può crittografare qualsiasi cosa a piacimento), ma il riempimento v1.5 era già euristicamente buono, fino a un circa un milione di decrittazione, che è abbastanza buona per molti scopi e può essere patchata per altri (come è stato fatto per SSL). OAEP fa meglio se implementato correttamente, che non è facile come si crede normalmente.

30
Thomas Pornin

Volevo scavare più a fondo, quindi ho finito per leggere Attacchi di testo cifrato scelti contro i protocolli basati sullo standard di crittografia RSA PKCS # 1 di Daniel Bleichenbacher.

Il principale punto debole esiste perché l'imbottitura PKCS n. 1 ha consentito di formulare alcune ipotesi. Tali ipotesi possono quindi essere sfruttate per progettare un attacco. Controlla il foglio, è un attacco intelligente! L'attacco si sviluppa in 4 fasi, ciascuna delle quali estrae progressivamente più informazioni della precedente. È altamente iterativo ma nell'ambito della praticità (1 giorno per la tipica chiave di sessione SSL).

  • Fase 1: prova ciecamente del testo cifrato che passa semplicemente il controllo di riempimento sul lato remoto dopo la decodifica
  • Fase 2-4: aggrappati ai risultati di cui sopra e restringi progressivamente lo spazio di ricerca.

Il blocco/restringimento per la fase 2-4 è possibile per due motivi:

  1. L'esponenziazione può essere manipolata molto comodamente, specialmente con inversioni di numeri interi in un campo finito. Questa è una proprietà di RSA/esponenziale modulare stesso, non imbottitura in sé. Ad esempio, una citazione nel documento:

    Un utente malintenzionato che desidera trovare la decrittazione m = c ^ d (mod n) di un testo cifrato c può scegliere un numero intero casuale s e chiedere la decrittazione del messaggio dall'aspetto innocente c '= (s ^ e) * c mod n . Dalla risposta m '= (c') ^ d, è facile recuperare il messaggio originale, perché m = m è ^ −1 (mod n).

  2. È possibile mappare le relazioni matematiche dirette tra il testo cifrato scelto e il risultato della decodifica sul lato remoto. Questo è omomorfismo in cui un'operazione sull'input produce la stessa operazione sull'output. Non conosci il risultato esatto ma puoi dedurre che "Non so quale sia il valore ma ora è 2 volte il suo valore precedente". Il valore effettivo stesso si trova disegnando un intervallo e quindi restringendolo in modo iterativo.

OAEP cambia un po 'le cose perché aggiunge un po' di hashing (hash di feistel sbilanciato) tra la decrittazione RSA (esponenziale modulare) e il controllo del riempimento. Questo in sostanza interrompe il punto 2 sopra e l'attacco non può passare allo stadio 2-4 perché la conoscenza dallo stadio 1 non può essere passata - l'hashing tra l'OAEP distorce selvaggiamente la capacità di capire cosa vede la parte remota Decodifica OAEP . L'unico modo possibile sarebbe se è possibile invertire in modo deterministico la funzione hash per procedere con le fasi di raccolta informativa. Ma allora questo significa che l'hash è rotto.

11
DeepSpace101

Quindi RSA è vulnerabile, nel senso che un utente malintenzionato può modificare i messaggi in modo controllato, ovvero moltiplicandoli per costanti note. Di conseguenza, abbiamo bisogno di una sorta di imbottitura per evitare questo: speriamo che l'attaccante non ci chieda "Cos'è questo messaggio?" e dargli le informazioni di cui ha bisogno per decifrare un altro messaggio. (Ci sono altri attacchi: un sondaggio è http://crypto.stanford.edu/~dabo/papers/RSA-survey.pdf )

È richiesta l'imbottitura Ergo. Il primo schema di padding inseriva prima un byte costante, quindi byte non zero casuali, quindi un byte zero e il resto del numero era il messaggio. Sembrava buono.

Purtroppo questo implica che un attaccante può imparare se il primo byte di rM, M qualsiasi messaggio, r qualsiasi numero è una data costante. Questo risulta essere sufficiente per fattorizzare la chiave, come dimostrano la fine degli anni '90. www.bell-labs.com/user/bleichen/papers/pkcs.ps è il documento.

SSL v3.0 era insicuro, così come lo erano molti altri protocolli distribuiti, rendendo questo un problema piuttosto serio.

1
Watson Ladd