Optimal Asymmetric Encryption Padding: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m eccesso di a capo |
amplio voce minimale |
||
Riga 1:
In [[crittografia]], '''Optimal Asymmetric Encryption Padding''' ('''OAEP''') è uno schema di [[padding (crittografia)|padding]] spesso utilizzato assieme a [[RSA]]. OAEP è stato introdotto da [[Mihir Bellare|Bellare]] e [[Phillip Rogaway|Rogaway]],<ref>[[Mihir Bellare|M. Bellare]], [[Phillip Rogaway|P. Rogaway]]. ''Optimal Asymmetric Encryption -- How to encrypt with RSA''. L'abstract completo può essere trovato in: Advances in Cryptology - [[Eurocrypt]] '94 Proceedings, Lecture Notes in Computer Science Vol. 950, A. De Santis ed, [[Springer-Verlag]], 1995. [http://www-cse.ucsd.edu/users/mihir/papers/oae.pdf Versione integrale (pdf)]</ref> e successivamente standardizzato in [[PKCS1|PKCS #1v2]] and RFC 2437.
L'algoritmo OAEP è una sorta di [[rete di Feistel]] che utilizza coppie di [[Oracolo random|oracoli random]] <math>G</math> e <math>H</math> per effettuare un preprocessing su un messaggio da [[Crittografia asimmetrica|cifrare asimmetricamente]]. Se usato in combinazione con una [[funzione botola]] sicura, questo metodo è considerato [[Sicurezza semantica|semanticamente sicuro]] all'interno del modello a [[oracolo random]] contro attacchi di tipo ''[[Attacco con testo in chiaro scelto|chosen plaintext]]''. In casi particolari (ad esempio, con [[RSA]]), OAEP è stato provato essere sicuro anche contro attacchi di tipo ''[[Attacco con testo cifrato scelto|chosen ciphertext]]''. OAEP può essere utilizzato per costruire una trasformazione ''all-or-nothing'' ("tutto o niente"), come spiegato [[#Funzionamento|in seguito]].
OAEP soddisfa i due obiettivi seguenti:
#Aggiunge una componente di casualità che può essere usata per convertire uno schema di crittazione deterministico (come [[RSA]]) in uno probabilistico.
#Fa in modo che un possibile avversario non possa recuperare alcuna porzione del testo in chiaro pur non essendo in grado di invertire la [[funzione botola]] su cui si basa l'algoritmo di crittazione.
== Funzionamento ==
[[File:Oaep-diagram-20080305.png|thumb|250px|right|Diagramma dell'algoritmo OAEP]]
Nel diagramma a destra:
* <math>n</math> è il numero di bit nel modulo [[RSA]].
* <math>k_0</math> e <math>k_1</math> sono costanti intere fissate nel protocollo.
* <math>m</math> è il messaggio in chiaro, una stringa lunga <math>n-k_0-k_1</math> bit
* <math>G</math> e <math>H</math> sono due [[Funzione crittografica di hash|funzioni crittografiche di hash]] fissate nel protocollo.
* ⊕ è l'operatore [[XOR]].
Per cifrare:
# al messaggio va applicato un [[padding]] di <math>k_1</math> zeri per arrivare ad una lunghezza di <math>n-k_0</math> bit.
# <math>r</math> è una stringa casualmente generata lunga <math>k_0</math> bit.
# <math>G</math> espande i <math>k_0</math> bit di <math>r</math> a <math>n-k_0</math> bit.
# <math>X = m00..0 \oplus G(r)</math>
# <math>H</math> riduce i <math>n-k_0</math> bit di <math>X</math> a <math>k_0</math> bit.
# <math>Y = r \oplus H(X)</math>
# L'output è <math>X \| Y</math>, ovvero la concatenazione di <math>X</math> e <math>Y</math>.
Per decifrare:
# recuperare <math>r</math> calcolando <math>Y \oplus H(X)</math>;
# recuperare il messaggio <math>m</math> tramite <math>m00..0 = X \oplus G(r)</math>.
La proprietà ''all-or-nothing'' deriva dal fatto che per recuperare il messaggio <math>m</math> si ha bisogno delle intere stringhe <math>X</math> e <math>Y</math>. <math>X</math> è richiesto per ottenere <math>r</math> da <math>Y</math>, e <math>r</math> è richiesta per ottenere <math>m</math> da <math>X</math>. Dato anche una piccolissima modifica all'input di una funziona crittografica di hash cambia completamente il risultato, <math>X</math> e <math>Y</math> devono essere interamente ottenute. Questo garantisce l'[[Integrità dei dati|integrità]] del messaggio.
== Note ==
<references/>
== Voci correlate ==
* [[RSA]]
* [[Key encapsulation]]
{{portale|crittografia|sicurezza informatica}}
|