Come trattare / hash ECDH segreto condiviso da utilizzare come chiavi per AES?

2

Sto facendo alcuni studi / sviluppo per un sistema di sicurezza che userebbe ECDH con chiavi effimere.

Nel mio codice sto usando un EC a 256 bit, quindi quando le due parti calcolano il segreto condiviso, ottengo un array 32B (256 bit) contenente il segreto condiviso.

Ora, vorrei usare questo segreto condiviso per calcolare una chiave per un algoritmo di crittografia a chiave simmetrica, come AES-128 (con una dimensione della chiave di 128 bit).

Quindi la mia domanda è come ridurre il segreto condiviso a 256 bit su una chiave AES a 128 bit? Ho letto che è meglio hash il segreto condiviso prima di usarlo come chiave per la crittografia simmetrica, ma con quale algoritmo di hashing? Se uso SHA-256 ho ancora una chiave a 256 bit. Esiste un modo standard per procedere alla creazione di una chiave di crittografia simmetrica da un segreto condiviso ECDH?

    
posta samuele.forconi 27.02.2014 - 13:42
fonte

2 risposte

3

In generale, la produzione di chiavi simmetriche da alcuni "segreti" è chiamata derivazione di tasti e utilizza una derivazione della chiave funzione . Ci sono diversi progetti KDF là fuori; molti protocolli definiscono il proprio (ad esempio in SSL / TLS ). In effetti, esplorare i dettagli di SSL / TLS sarebbe una buona idea (in termini pedagogici).

C'è una "spinta" corrente per definire una costruzione standard, supportata da IETF, e si chiama HKDF ; se hai bisogno di un KDF, allora potresti fare peggio di scegliere HKDF (anche se è relativamente recente, beneficia di una solida base crittografica e appare sicuro almeno quanto qualsiasi altro concorrente).

Se è necessaria solo una quantità limitata di materiale chiave (ad esempio 128 bit), è possibile utilizzare semplicemente una delle solite funzioni di hash (ad esempio SHA-256) e troncare l'output. Quel troncamento va bene è non una conseguenza della funzione hash essere, per esempio, resistente alle collisioni; tuttavia, si ritiene ancora che sia adeguatamente sicuro con progetti di funzioni hash non patologiche, in particolare SHA-256.

Per quanto riguarda gli standard , sì, ce n'è uno. Si chiama ANSI X9.63 . Dal momento che non è uno standard libero (legalmente parlando, devi pagare in modo da vederlo), i dilettanti e gli studenti di solito non lo considerano, quindi non percula il software opensource. Il suo KDF è basato su SHA-1; fondamentalmente calcola SHA-1 ( segreto || contatore ) per i valori successivi del contatore, che, per quanto riguarda KDF, non è un design molto attraente, anche se non banalmente debole (ho solo una vecchia bozza; le versioni più recenti di X9.63 potrebbero usare SHA-256).

    
risposta data 02.04.2014 - 13:23
fonte
1

Non c'è niente di sbagliato con il solo troncamento dell'output di SHA-256 a qualsiasi numero di byte di cui hai bisogno.

Inoltre, anche se utilizzi AES-128, potresti trarre vantaggio da ulteriori byte disponibili, ad es. per inizializzare un IV (se stai usando AES in una modalità che utilizza IV) o da usare come un tasto MAC (se stai utilizzando una primitiva separata per autenticare i dati).

    
risposta data 02.04.2014 - 12:58
fonte

Leggi altre domande sui tag