2011-04-25 7 views

Respuesta

2

En diferentes formatos (certificados PGP, SSH, X.509) la identificación de la clave tiene un significado diferente. Ni SSH ni X.509 tienen un concepto "dedicado" de identificación de clave, pero algunas personas usan este término (incluido su software); en este caso, generalmente es un hash de la clave pública o del certificado en su totalidad.

Actualización: los comentarios me recordaron que las extensiones de "identificador de clave" existen en certifiactes X.509, ya veces se las denomina identificadores de clave. Sin embargo, esto no es común, generalmente el hash (también llamado a veces la huella dactilar) se denomina ID de clave.

+2

En realidad, existe un concepto de "identificador de clave" para X.509: es una secuencia de bytes opacos que puede incluir en una extensión de certificado ("Identificador de clave de sujeto"); también puede incluir el identificador de clave de la CA ("Identificador de clave de autoridad") y el objetivo es ayudar en la creación de rutas. X.509 no ordena ninguna forma específica de generar un identificador de clave, podría tratarse de bytes aleatorios (pero sugiere _ usando un valor hash calculado sobre la clave pública). Los identificadores clave son opcionales. –

+0

@Thomas Excelente, gracias por el recordatorio! De hecho existen extensiones de identificador de clave. Sin embargo, en la práctica, lo que muestra el software y la gente hace referencia a él suele ser el hash SHA1 de la clave. * Fingerprint * es otro sinónimo. –

1

La "ID de clave" utilizada para la clave RSA en GPG/PGP son los últimos 8 dígitos hexadecimales del módulo de la clave.

+1

Otras formas de palabra: 'últimos 8 dígitos hexadecimales' -> 'del los últimos 4 bytes 'y' módulo de la clave '->' huella digital (MD5 o SHA-1 hash) de la clave '(dos espacios para los saltos de línea que no funcionan) ¿comentarios?) – Rondo

5

Habiendo hecho esto para mis propios fines, voy a escribir esto mientras todo está fresco en mi cabeza ...

El ID de la llave "oficial" (es decir, el contenido de la "X509v3 Asunto La extensión Key Identifier "en un certificado X509) es el hash SHA1 de la secuencia ASN.1 codificada en DER que consiste en el módulo y el exponente de una clave pública RSA. Se necesita unir tres diferentes RFCs y un poco de experimentación para llegar a eso, pero así es como funciona.

Algunos código Ruby para hacer la codificación se parece a esto - e introduzca una RSA pública o clave privada en la entrada estándar:

require 'openssl' 

pkey = OpenSSL::PKey::RSA.new($stdin.read).public_key 

seq = OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer.new(pkey.n), 
           OpenSSL::ASN1::Integer.new(pkey.e)]) 
puts Digest::SHA1.hexdigest(seq.to_der).upcase.scan(/../).join(':') 
2

En el caso de la Strongswan uno puede mostrar lo que se refiere a como el keyid usando sus utilidades de línea de comando. El punto principal de keyid es que se puede usar para identificar la clave pública real contenida en un certificado para que un certificado pueda cambiar, pero al marcar el keyid se puede verificar si la clave ha cambiado o no.

El comando pki mostrará una lista de los keyids de un certificado X.509 de la siguiente manera (en el que el subjectPublicKeyInfo hash es el keyid):

pki --keyid --in cert.pem --type x509 

o para una clave privada RSA:

pki --keyid --in key.pem 

El segundo comando es ipsec que se puede usar para enumerar todos los certs (y config) instalados en los subdirectorios /etc/ipsec.d (este comando listará los certificados y sus correspondientes keyid lo que es lo mismo que su subjectPublicKeyInfo hash enumerado por el comando pki):

ipsec listall 

También se puede utilizar openssl para generar la idea de strongSwan de un keyid, que es básicamente el SHA1 de la clave pública real RSA (el guión sed solo priva a los '----- BEGIN CLAVE PÚBLICA -----' y pancartas End) [corrige después de Miqueas comentario]:

openssl x509 -in cert.pem -noout -pubkey | sed 's/--.*$//g' | base64 --decode | sha1sum 
+0

El comando openssl tal como está escrito no funciona. Antes de llamar a sha1sum, primero debe decodificar los datos de base64 en binario, de la siguiente manera: 'openssl x509 -in cert.pem -noout -pubkey | sed '/--.*$// g' | base64 --decode | sha1sum' –

Cuestiones relacionadas