Intercambio de claves Diffie-Hellman: aseguramiento de cebado y base

2

Como sabemos, el algoritmo DH se basa en 2 números primos grandes, que se utilizan como prime y base

Estoy escribiendo una aplicación que implementa el algoritmo de intercambio de claves DH. Desde el punto de vista de la seguridad, ¿debo cuidar los números primos y básicos? ¿Y cuáles son las implicaciones si no haría eso?

    
pregunta barmaley 12.09.2012 - 06:38
fuente

2 respuestas

6

En Diffie-Hellman hay un entero grande que es primo, pero el otro no necesita ser grande, y tampoco necesita ser primo.

Con DH, los cálculos se realizan en forma de gran primo p . También se utiliza un generador llamado g : g "genera" los valores g i mod p . Si (virtualmente) calcula el gi módulo p , volverá a 1 en algún momento; el valor distinto de cero i tal que g i = 1 mod p se denomina orden de g (escribámoslo r ). Necesariamente, r divide p-1 .

Lo que DH necesita es que:

  • p es lo suficientemente grande para dificultar el logaritmo discreto ; digamos, al menos 1024 bits (la moda actual es 2048 bits, porque ahora se considera que 1024 bits son "un poco demasiado débiles" como en "irrompible por ahora, pero quizás en 20 años ...").
  • r debe tener al menos un factor primo q que sea lo suficientemente grande como para disuadir un logaritmo discreto; en este contexto, esto significa al menos 170 bits (de nuevo, las modas dictan 256 bits: a los criptógrafos les encantan los poderes de dos).

q y r no deben ser conocidos por las personas que realizan el DH. Si selecciona un p aleatorio del tamaño apropiado y un g aleatorio (como un valor entre 2 y p-2 , inclusive), entonces g estará bien con una probabilidad abrumadora (no sabrá r , y mucho menos q , pero sería extremadamente improbable que todos los factores primos de r sean cortos).

Sin embargo, podría intentar un poco más la elección de p ; por ejemplo, puede seleccionar p para que p = 2t + 1 donde t también sea primo. En este punto, cualquier g (entre 2 y p-2 ) tiene la garantía de tener un orden igual a cualquiera de t o 2t , para que pueda elegir g como mejor le parezca. En particular, puede elegir g = 2 , lo que hace que los cálculos sean un poco más rápidos.

Ninguno de los valores anteriores debe ser secreto. De hecho, se supone que ambas partes DH las conocen de antemano, por lo que no pueden ser secretas (si fueran secretas, sería un secreto compartido y no tendría que hacer Diffie-Hellman en absoluto, simplemente podría usar ese secreto compartido como es). Para ahorrar esfuerzo, puede reutilizar los valores publicados existentes para p y g , por ejemplo estos valores .

    
respondido por el Tom Leek 12.09.2012 - 13:23
fuente
5

Ninguno de ellos es secreto. Solo la clave privada del usuario debe ser secreta, los parámetros del grupo son públicos. Recomiendo usar un par estandarizado para ellos, y codificarlo en su protocolo. Permitir que los participantes en un protocolo elijan los parámetros mismos a menudo conduce a ataques sutiles.

Alternativamente, podrías usar una curva elíptica estándar. Los que ofrecen un mayor rendimiento y llaves más pequeñas. Por ejemplo, podría usar NIST P-256 o Curve25519.

    
respondido por el CodesInChaos 12.09.2012 - 09:37
fuente

Lea otras preguntas en las etiquetas