Come ridurre la dimensione di una chiave stabilita con Diffie-Hellman?

4

Quando genero una chiave con il metodo Diffie Hellman (DH), la chiave condivisa stabilita avrà le stesse dimensioni del primo utilizzato. Per quanto ho letto questo dovrebbe essere almeno 2000 bit per il classico DH, alcuni dicono ancora di più.

Ma normalmente sono necessari 256 o 512 bit per uno schema simmetrico.

Ho sentito che dovrebbe essere sufficiente solo per cancellare la chiave stabilita per ridurre la dimensione, ma alcuni usano una funzione di derivazione della chiave.

Ora mi chiedo qual è il modo standard per farlo? Inoltre è più sicuro utilizzare una funzione di derivazione della chiave?

Sarei grato se potessi nominare i metodi che sono utilizzati e se potessi leggere di più su tali metodi.

    
posta Raphael Ahrens 12.08.2013 - 10:13
fonte

1 risposta

7

Diffie-Hellman consente a due parti di generare un valore segreto che non può essere ricostruito dall'osservazione delle loro comunicazioni. La dimensione del valore segreto risultante dallo scambio di chiavi ( g ab mod p ) è in effetti la stessa dimensione come primo, tuttavia la sua entropia potrebbe essere inferiore se a e b vengono scelti in uno spazio più piccolo. Scegliere a e b come numeri casuali a 256 bit ti dà sicurezza a 128-bit per il valore segreto risultante.

In linea di principio, il valore segreto risultante ha una struttura matematica e non dovresti usarlo così com'è. Invece, dovresti eseguirne l'hash e usare il risultato come chiave simmetrica. Più precisamente, dovresti utilizzare il segreto condiviso come input per una funzione di derivazione della chiave . Non una funzione di derivazione della chiave basata sulla password : il valore segreto ha sufficiente entropia e non ha bisogno di essere rafforzato, solo allungato.

RFC 2631 specifica un modo per ricavare il materiale chiave dal segreto condiviso: SHA-1 (ZZ || tipo || ctr) dove ZZ è una codifica in byte del segreto condiviso, il tipo indica quale tipo di materiale viene derivato e ctr è una codifica in byte di un contatore. Ovviamente è ok usare un'altra funzione di hashing come SHA-256 o SHA-512 invece di SHA-1.

Il modo esatto con cui il materiale chiave è derivato non è realmente importante, purché le due parti siano d'accordo. Ad esempio, se hai solo bisogno di 256 bit, allora SHA-256 (ZZ) sarebbe ok. Il punto di virata su un contatore è quando hai bisogno di più di quello che può fornire una sola corsa della funzione di hash. Nell'interesse del futuro del protocollo, sarebbe consigliabile seguire la RFC. Se hai solo bisogno di ricavare una chiave ora, puoi codificare a mano la corrispondente codifica ASN.1 del tipo e del contatore come stringa letterale nella tua applicazione.

In realtà, risulta che usare direttamente il segreto condiviso DH è " non male ". Ciononostante, dovresti strizzarlo con un KDF (almeno per hash): è facile, veloce, più sicuro, più standard e più a prova di futuro.

    
risposta data 12.08.2013 - 11:20
fonte

Leggi altre domande sui tag