PKCS # 1-1.5 encoding - c'è un motivo per usare 00 nel tipo di blocco?

2

Per il blocco di crittografia simile al seguente: EB = 00 || BT || PS || 00 || Dati dove BT - tipo di blocco e PS - stringa di riempimento, Ho letto che usiamo tre tipi di BT-00, 01, 02. Ora, dato che 00 e 01 sono per le operazioni di chiave privata (dove 01 è raccomandato - perché?), Come la firma, e 02 è per le operazioni di chiave pubblica, come la crittografia, mi chiedo perché non si consiglia di usare il tipo di blocco '00' . Inoltre, se non è raccomandato, perché è anche possibile?

Scusati ancora una volta per essere un principiante.

    
posta James Pond 30.05.2015 - 20:25
fonte

2 risposte

4

PKCS # 1 definisce solo due paddati "vecchio stile" (detti anche "v1.5" perché questi erano i due paddings definiti in PKCS # 1 v1.5, mentre versioni più moderne aggiungono altre opzioni, note come "OAEP" e "PSS"). Questi due paddings sono "tipo 1" e "tipo 2". Non esiste una padding definita di "tipo 0"; naturalmente, ogni byte può concettualmente avere un valore nell'intervallo da 0 a 255, ma PKCS # 1 definisce solo due paddings, non tre o più.

I due paddings non differiscono solo dal "tipo byte" (del valore 0x01 o 0x02). I byte successivi (la stringa "PS") sono molto importanti per la sicurezza. Nella spaziatura "tipo 1", la stringa "PS" consiste solo di byte di valore 0xFF; è completamente deterministico. Nel padding "tipo 2", la stringa "PS" è composta da byte casuali (i byte non devono avere valore 0x00, ma altrimenti devono essere generati casualmente nell'intervallo 0x01..0xFF). non possono essere usati in modo intercambiabile. Il padding di tipo 1 è per la firma, il tipo 2 è per la crittografia asimmetrica. Se si utilizza un riempimento di tipo 2 per le firme, si ottiene uno schema di firma molto debole (a causa della malleabilità inerente agli esponenziamenti modulari). Se si utilizza un padding di tipo 1 per la crittografia asimmetrica, si ottiene uno schema di crittografia debole (a causa del determinismo del padding di tipo 1, che consente un attacco di forza bruta sul testo in chiaro).

Il byte "BT" che identifica il tipo di padding è principalmente (e principalmente) per rendere i due paddings distinti in modo univoco. Altrimenti, ci si dovrebbe preoccupare degli aggressori che usano una firma come messaggio crittografato o viceversa. Pertanto, i due paddings dovrebbero avere un valore "BT" distinto; gli autori PKCS # 1 potevano scegliere i due valori per essere 0 e 1, o 1 e 2, o 17 e 42, o qualsiasi altra coppia di valori distinti; hanno scelto 1 e 2. Questo è arbitrario.

In ogni caso, l'importanza del padding non è nel byte "BT", ma nei byte che seguono (la stringa "PS"). Non è consigliabile utilizzare un riempimento "tipo 0" perché non esiste un padding di tipo 0 .

    
risposta data 30.05.2015 - 20:59
fonte
0

Prima di tutto, il tipo di blocco (BT) "00" e "01" è il padding per l'operazione di chiave privata, vale a dire la firma. Gli standard definiscono che i "dati" per la firma devono essere hash (struttura DER DigestInfo) dei dati firmati.

Il padding "01" a blocchi (BT) aggiunge dati di padding fissi fino alla lunghezza del modulo:

00 | 01 | FF .. FF | data

Tipo di blocco (BT) Il padding "00" significa che BT è impostato su 00 e il riempimento della stringa su zeri, il che significa che non è applicato alcun padding:

00 | 00 | 00 .. 00 | data

Nessun software conforme agli standard accetta la firma digitale in questo modulo. Il pad pad di tipo "00" è utile solo se si desidera eseguire operazioni di elevazione a vuoto con la chiave privata o implementare un riempimento più avanzato di quello fornito dalla libreria (ad es. RSA-PSS).

    
risposta data 25.04.2016 - 16:05
fonte

Leggi altre domande sui tag