¿Cómo agregar un número de serie aleatorio mejora la seguridad de un certificado?

12

Este artículo dice:

  

"Encontrar colisiones es un proceso difícil, ya que requiere que te deshagas de él.   con los bits de la clave pública incorporada en el certificado (consulte este   papel para más detalles). Además, Microsoft podría haber evitado esto.   de alguna manera agregando un número de serie al azar al certificado, que   no lo hice ".

Mi pregunta es cómo agregar un valor aleatorio a un certificado mejora la seguridad. ¿No podría el atacante simplemente generar un número de serie para crear una colisión MD5?

Actualizar:

Aquí hay información sobre cómo Microsoft implementa la aleatorización en una clave de CA . No estoy seguro de los beneficios y desventajas de cada uno.

  

Configurar generación de número de serie

     

En una CA de Windows 2000, dos tipos de números de serie de longitud fija son   generado. El registro puede ser modificado para generar uno u otro.   tipo. El número de serie predeterminado es (de alto a bajo): un DWORD de   GetTickCount () + un índice de certificado CA de USHORT (0 para iniciar) + un DWORD   RequestId (10 bytes / 20 dígitos hexadecimales). La forma alternativa es: una   byte derivado del registro + un DWORD RequestId + 8 bytes de   Salida CryptGenRandom + un índice de certificado CA de USHORT + un ID de solicitud DWORD (19   bytes / 38 dígitos hexadecimales).

     

Para habilitar la forma alternativa y establecer el byte derivado de la   registro, utilice el siguiente comando:

    certutil –setreg ca\HighSerial 0x33 
     

El valor de byte especificado se modificará para borrar el bit de signo y para   establecer un poco en el mordisco alto para evitar la codificación del número de serie   errores de ambigüedad en ciertas aplicaciones PKI que no son de Microsoft.

     

En una CA de Windows Server 2003, tres tipos de serie de longitud fija   se generan numeros Las formas por defecto y alternativa son las mismas que   en Windows 2000. El formulario alternativo de Windows 2000 utiliza un nuevo 8 aleatorio   Bytes generados por CryptGenRandom para cada número de serie. El nuevo   La forma alternativa para Windows Server 2003 utiliza un fijo de 8 bytes aleatorios   de CryptGenRandom, generado durante el primer intento de emitir un   certificado, y guardado en el registro como 8 bytes de fijo   Salida CryptGenRandom + un índice de certificado CA de USHORT + un ID de solicitud DWORD (14   bytes / 28 dígitos hexadecimales).

     

Para habilitar el nuevo formulario alternativo en el registro, use lo siguiente   comando:

   certutil –setreg ca\HighSerial 0xffffffff 
     

Dado que los 8 bytes aleatorios fijos de CryptGenRandom están codificados como   y guardado en el registro, puede establecerlos directamente y   hacer que se utilicen para nuevos números de serie. De hecho, cualquier longitud   cadena hexadecimal se podría establecer en el registro (pero debe haber un   número par de dígitos). El número de bytes utilizados desde el registro.   se reducirá si se desbordaría un total de 19 bytes para el   número de serie. El byte alto se manipula como se describe anteriormente para   Evite problemas con ciertas aplicaciones que no sean de Microsoft. El IETF   las normas especifican un máximo de 20 bytes de serie.

    
pregunta random65537 05.06.2012 - 23:15
fuente

1 respuesta

15

Respuesta corta. El beneficio es de un número de serie impredecible , no de ningún número de serie antiguo.

De hecho, un número de serie secuencial no agrega seguridad, ya que es fácilmente predecible. Pero la asignación aleatoria del número de serie (por lo que es difícil de predecir) hace que sea más difícil explotar los ataques de colisión conocidos en MD5 para obtener un certificado falsificado. Déjame explicarte.

Antecedentes. Cuando una CA emite un certificado, incluye una firma en MD5 (P), para cierta carga útil de certificado P que incluye una clave pública, un nombre de dominio y un número de serie. Los ataques de colisión conocidos en MD5 permiten al atacante elegir dos valores P y Q que tienen el mismo hash MD5. Esto se puede usar para atacar a las CA que usan MD5, de la siguiente manera. El atacante usa los ataques de colisión MD5 para encontrar P, Q con la siguiente propiedad: P es una carga útil de certificado benigna que la CA firmaría voluntariamente (por ejemplo, un certificado para algún dominio nuevo que controla el atacante), pero Q es un certificado malvado carga útil que la CA nunca firmaría (por ejemplo, un certificado para microsoft.com). El atacante envía una solicitud de certificado correspondiente a P a la CA; la CA lo firma y devuelve el certificado firmado; y luego la firma en este certificado también será válida en Q.

Tenga en cuenta que este ataque requiere que el atacante prediga el valor del número de serie que se utilizará cuando la CA firme el certificado de P. Si los números de serie se asignan de forma secuencial, esta tarea de predicción es fácil. Pero si los números de serie son (digamos) un número de 128 bits criptográficamente aleatorio, entonces el ataque ya no se aplica. Por lo tanto, algunos han sugerido el uso de números de serie aleatorios como mitigación.

Más detalles. Consulte el siguiente documento de investigación para obtener más detalles:

Recomendación. La mejor defensa es: ¡no uses MD5! Solo deja de usarlo. Las CA deben usar un hash moderno como SHA1 o SHA256 o SHA2. Nunca deben usar MD5 al emitir certificados.

Pero si por alguna razón se ve obligado a usar MD5, la mitigación aleatoria de sus números de serie es una medida razonable. En realidad, usar un número de serie aleatorio puede no ser una mala idea, sin importar qué algoritmo hash uses, como una forma de defensa en profundidad de cinturones y tirantes.

    
respondido por el D.W. 06.06.2012 - 03:43
fuente