scambio di chiavi Diffie-Hellman: protezione di primo e base

2

Come sappiamo l'algoritmo DH basato su 2 numeri primi grandi, che sono usati per essere chiamati come primo e Base

Sto scrivendo un'app che implementa l'algoritmo di scambio di chiavi DH. Dal punto di vista della sicurezza, dovrei occuparmi della sicurezza dei numeri primi e di base? E quali sono le implicazioni se non lo farei?

    
posta barmaley 12.09.2012 - 06:38
fonte

2 risposte

6

In Diffie-Hellman c'è un intero grande che è primo, ma l'altro non ha bisogno di essere grande, e non ha bisogno di essere primo neanche.

Con DH, i calcoli sono fatti modulo un grande primo p . Viene utilizzato anche un generatore chiamato g : g "genera" i valori g i mod p . Se calcoli (virtualmente) il g i modulo p , tornerai a 1 ad un certo punto; il più piccolo valore non zero i tale che g i = 1 mod p è chiamato l'ordine di g (scriviamolo r ). Necessariamente, r divide p-1 .

Ciò di cui DH ha bisogno è:

  • p è abbastanza grande da rendere difficile discreto logaritmo ; diciamo, almeno 1024 bit (la moda attuale è 2048 bit, perché 1024 bit sono ora considerati "un po 'troppo deboli" come in "unbreakable per ora, ma forse tra 20 anni ...").
  • r deve avere almeno un fattore primo q che sia abbastanza grande da scoraggiare il logaritmo discreto; in questo contesto, questo significa almeno 170 bit (ancora una volta, le mode dettano 256 bit - i crittografi amano semplicemente i poteri di due).

q e r non devono essere conosciuti dalle persone che fanno il DH. Se selezioni un p casuale di dimensioni appropriate, e un g casuale (come valore tra 2 e p-2 , incluso), quindi g andrà bene con una probabilità schiacciante (non si conoscerà r , figuriamoci q , ma sarebbe estremamente improbabile che tutti i fattori primi di r siano brevi).

Tuttavia, potresti provare un po 'più difficile nella scelta di p ; per esempio, puoi selezionare p tale che p = 2t + 1 dove t è anche primo. A questo punto, qualsiasi g (tra 2 e p-2 ) è garantito per avere un ordine uguale a t o 2t , quindi puoi scegliere g come meglio credi. In particolare, puoi scegliere g = 2 , il che rende i calcoli un po 'più veloci.

Nessuno dei valori sopra indicati deve essere segreto. In effetti, si presume che entrambe le parti DH le conoscano in anticipo, quindi non possono essere segrete (se fossero segrete, sarebbe un segreto condiviso e non avresti assolutamente bisogno di fare Diffie-Hellman, potresti semplicemente usare quel segreto condiviso come è). Per risparmiare, puoi riutilizzare i valori esistenti e pubblicati per p e g , ad esempio questi valori .

    
risposta data 12.09.2012 - 13:23
fonte
5

Nessuno dei due è segreto. Solo la chiave privata degli utenti deve essere segreta, i parametri del gruppo sono pubblici. Raccomando di usare una coppia standardizzata per loro e l'hardcodice nel tuo protocollo. Permettere ai partecipanti di un protocollo di scegliere i parametri stessi porta spesso a attacchi sottili.

In alternativa puoi usare una curva ellittica standard. Quelli offrono prestazioni più elevate e chiavi più piccole. Ad esempio, è possibile utilizzare NIST P-256 o Curve25519.

    
risposta data 12.09.2012 - 09:37
fonte

Leggi altre domande sui tag