Las identificaciones de claves cortas de OpenPGP son inseguras, ¿cómo configurar GnuPG para usar las identificaciones de claves largas en su lugar?

25

Las identificaciones de claves OpenPGP cortas (con 32 bits / 8 caracteres hexadecimales) están sujetas a ataques de colisión . Se recomienda encarecidamente dejar de usar ID de 32 bits :

  

Deja de usar las ID de clave de 32 bits

     

Se requieren 4 segundos para generar una ID de clave de 32 bits en una GPU (utilizando scallion ). Los servidores de claves realizan poca verificación de las claves cargadas y permiten claves con identificadores de 32 bits en colisión. Además, GPG utiliza identificadores de clave de 32 bits en su interfaz y no le avisa cuando una operación podría aplicarse a varias claves.

¿Pero cómo le digo a GnuPG que use IDs largas (con 64 bits o 16 caracteres hexadecimales)?

    
pregunta Jens Erat 21.03.2015 - 13:33
fuente

1 respuesta

37

Cómo se relacionan la huella digital y las identificaciones de clave larga y corta

Cada clave OpenPGP tiene una huella digital adjunta, calculada principalmente a partir de su paquete de claves públicas que también contiene el tiempo de creación. El cálculo se define en RFC 4880, OpenPGP, 12.2. Identificación de claves y huellas digitales .

Hay identificadores de clave cortos y largos, que se parecen a los 32 bits respectivos de la huella digital. Por ejemplo, mirando los ID de mi clave OpenPGP:

fingerprint: 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279
long id:                                    4E1F 799A A4FF 2279
short id:                                             A4FF 2279

Se utilizan las huellas dactilares y las ID de clave, ya que compartir y comparar una clave completa con, por lo general, 1024 a 8096 bits (agregando algunos más para los encabezados como la fecha de creación) es muy impráctico.

Uso de ID de clave larga

Siempre que especifique claves OpenPGP, no solo puede pasar identificadores de clave cortos, sino también identificadores de clave largos e incluso huellas dactilares completas. En lugar de pasar el ID de clave corta

gpg --recv-keys A4FF2279

siempre puedes escribir la ID de clave larga

gpg --recv-keys 4E1F799AA4FF2279

o incluso la huella digital completa (recomendada para scripts y propósitos similares)

gpg --recv-keys 0D69E11F12BDBA077B3726AB4E1F799AA4FF2279

Imprimir ID de clave larga

¿Pero desde dónde tomar la ID de clave larga? Si alguien pasó su ID corta, no puede hacer nada más que intentar obtener todas las claves para esa ID y ver si hay una colisión (y esperar que nadie le esté ocultando la clave real, y solo pasar la falsa).

Entonces, cada vez que entregue su ID de clave OpenPGP, ¡anuncie la ID larga! Puede hacer que GnuPG imprima este fácilmente agregando la opción --keyid-format long :

gpg --keyid-format long --list-keys [email protected]

Esta opción toma los valores short o 0xshort para las ID de clave corta (sin o con 0x prefijado para indicar que es un número hexadecimal) y long o 0xlong para las ID de clave larga.

Configuración de ID de clave larga como predeterminadas

Para asegurarse de que GnuPG siempre esté imprimiendo la ID de clave larga, agregue la opción a su archivo ~/.gnupg/gpg.conf eliminando el -- . Por ejemplo, he configurado GnuPG para que siempre imprima el ID de clave larga prefijada 0x -prefigurado agregando una línea

keyid-format 0xlong

Imprimiendo la huella digital

Lamentablemente, no puede configurar GnuPG para que imprima toda la huella digital de esta manera, probablemente porque rompería el formato de salida de GnuPG para casi todos los tamaños de pantalla. En su lugar, solicítelo ejecutando

gpg --fingerprint 4E1F799AA4FF2279

que volcará algo como

pub   8192R/0x4E1F799AA4FF2279 2012-12-25
      Key fingerprint = 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279

Como esto tiene la desventaja de contener espacios (cosa mala para usarlos en las secuencias de comandos), podría usar la salida legible por máquina delimitada por dos puntos:

gpg --with-colons --fingerprint 4E1F799AA4FF2279

Para filtrar todo menos la huella dactilar, también usa grep y cut :

gpg --with-colons --fingerprint 4E1F799AA4FF2279 | grep fpr | cut -d ':' -f 10
    
respondido por el Jens Erat 21.03.2015 - 13:33
fuente

Lea otras preguntas en las etiquetas