Rinnovo del tasto di sessione tra due dispositivi vincolati

2

Non sono appassionato di crittografia e sicurezza in generale, quindi per favore perdona la mia ignoranza. Assumiamo quanto segue:

Abbiamo due nodi che sono dispositivi vincolati (risorse non sufficienti per la crittografia asimmetrica) e vogliamo stabilire in modo sicuro una chiave condivisa per la crittografia simmetrica.

La mia soluzione è la seguente: salva una chiave K (0) nei dispositivi alla distribuzione programma i dispositivi per generare automaticamente una nuova chiave di una nuova sessione basata su:

  1. il tasto precedente
  2. una funzione di generazione di numeri casuali installata nei due dispositivi, con la stessa epoca

Quindi una sessione k (i + 1) viene generata in base alle informazioni della sessione k (i) che gli unici due hanno.

Per favore, ora dimmi quali sono i punti deboli di questa soluzione.

Grazie in anticipo.

    
posta Abderrahim ben 05.04.2015 - 19:25
fonte

1 risposta

0

Questo approccio funziona, se si ottiene la chiave di sessione in modo sicuro (usando una funzione di hash crittografica o una costruzione costruita su una funzione di hash crittografica).

Poiché solo le due parti conoscono la chiave, solo le due parti conosceranno le chiavi successive.
Potrebbe anche essere possibile omettere il generatore di numeri casuali sincronizzati e utilizzare solo una costante di sessione come parametro di derivazione per la funzione di derivazione della chiave (KDF).



Un altro approccio:

Ma c'è un modo per farlo senza un Random Number Generator (RNG) sincronizzato e nuove chiavi per tutte le connessioni. Questo presuppone che tu abbia un buon generatore di numeri casuali e la chiave pre-condivisa K di lunghezza 64 byte che è altamente casuale. Tutte le variabili non definite di seguito sono casuali e lunghe 32 byte.

  1. Il dispositivo A invia al dispositivo B un numero casuale n_A.
  2. Il dispositivo B risponde con E_K (r_B, n_A, n_B). Se la risposta richiede troppo tempo A rifiuta la risposta o se n_A non è la n_A inviata nel passaggio 1.
  3. Il dispositivo A risponde con E_K (r_A, n_B, n_A). Se la risposta impiega troppo tempo B rifiuta la risposta o se n_B non è la n_B inviata nel passaggio 2.

Ora puoi usare xor di r_A e r_B e usare un KDF per ottenere la chiave di sessione, se non sei sicuro del tuo RNG puoi anche inserire K nella chiamata KDF. Nota che potresti voler utilizzare la modalità GCM per il tuo codice.

    
risposta data 06.04.2015 - 21:26
fonte

Leggi altre domande sui tag