Mi rendo conto che è molto difficile generare numeri primi e generatori adatti per lo scambio di chiavi Diffie-Hellman.
Qual è il modo migliore per generarli? E se ne ho uno, posso usarlo due volte? Secondo Wikipedia, sono considerati "pubblici".
Mi rendo conto che è molto difficile generare numeri primi e generatori adatti per lo scambio di chiavi Diffie-Hellman.
Qual è il modo migliore per generarli? E se ne ho uno, posso usarlo due volte? Secondo Wikipedia, sono considerati "pubblici".
In realtà non è quello difficile. Potrebbe essere leggermente costoso, dal punto di vista computazionale.
Un buon modulo e generatore di DH è ciò che ottieni quando generi parametri chiave DSA; consulta la specifica DSA . Puoi scegliere l'ordine del sottogruppo ( q , un numero primo), il modulo ( p , tale che p-1 è un multiplo di q ) e un generatore per il sottogruppo di dimensioni q . OpenSSL può farlo per te. Non è molto difficile implementare te stesso, a condizione che il linguaggio e l'ambiente di programmazione forniscano supporto per interi di lunghezza arbitraria (Python e Java do, C no, a meno che tu non usi una libreria extra come GMP ).
In alternativa, è stato fatto qualche sforzo per generare i cosiddetti "primi sicuri": primi interi p tali che (p-1) / 2 è anche un numero primo. Un primo sicuro si chiama così perché non soffre di alcuni attacchi che possono rendere il logaritmo discreto facile (o almeno più facile) su un modulo "debole" - ma un modulo generato casualmente non sarà debole, con una schiacciante probabilità, quindi non c'è una vera preoccupazione qui. Inoltre, i "primati sicuri" hanno il vantaggio di consentire g = 2 come generatore, che promuove l'efficienza computazionale (non di molto, ma ancora). Generare un primo sicuro comporta la ricerca di numeri interi casuali della giusta dimensione fino a raggiungere un sicuro primo: niente di complesso o persino difficile da implementare, ma possono essere necessari alcuni minuti per completare (circa un intero dispari di 1024 bit in 400000 è sicuro Prime). Oppure puoi utilizzare uno di quelli di RFC 3526 .
Non ci sono problemi nell'usare gli stessi parametri di gruppo (modulo, generatore) per milioni di coppie di chiavi distinte. Sono davvero "dati pubblici".
Leggi altre domande sui tag cryptography key-exchange key-generation