20 votos

GPG - verificación de firmas sin la creación de cadena de confianza?

Es posible pedir gpg (o gpg4win) simplemente para comprobar si un archivo, fue firmado por un determinado archivo de clave pública, sin tener que importar y firme y la confianza que la clave?

es decir, algo como

gpg --using-key pubkey.txt --verify message.txt

en lugar de tener que crear su propia clave privada y, a continuación, hacer

gpg --import pubkey.txt 
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt

15voto

Ben Puntos 552

Usted debe tener la clave pública para verificar una firma con la clave privada correspondiente, pero usted no tiene que firmar o incluso localmente firmar la clave. En este caso, usted recibirá una advertencia de GPG que la clave es la confianza.

Aquí hay una prueba que hice con un archivo firmado por mi propia clave, pero en un sistema donde la clave no habían sido importados:

[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ 

Por desgracia Harry sugerencia no funciona, no extraer un poco más de información, pero no lo suficiente como para ser de utilidad.

Como se puede ver, la mayoría de la información que se obtiene es el ID de la clave de la subclave utiliza para hacer la firma y la firma se realizó. Esto coincide con los datos disponibles para pgpdump (o --lista de paquetes):

bash-3.2$ pgpdump thing.txt.gpg 
Old: Compressed Data Packet(tag 8)
    Comp alg - ZLIB <RFC1950>(comp 2)
Old: One-Pass Signature Packet(tag 4)(13 bytes)
    New version(3)
    Sig type - Signature of a binary document(0x00).
    Hash alg - SHA512(hash 10)
    Pub alg - RSA Encrypt or Sign(pub 1)
    Key ID - 0x7FF2D37135C7553C
    Next packet - other than one pass signature
Old: Literal Data Packet(tag 11)(24 bytes)
    Format - binary
    Filename - thing.txt
    File modified time - Thu Sep 26 06:51:39 EST 2013
    Literal - ...
Old: Signature Packet(tag 2)(412 bytes)
    Ver 4 - new
    Sig type - Signature of a binary document(0x00).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA512(hash 10)
    Hashed Sub: signature creation time(sub 2)(4 bytes)
        Time - Thu Sep 26 06:51:39 EST 2013
    Sub: issuer key ID(sub 16)(8 bytes)
        Key ID - 0x7FF2D37135C7553C
    Hash left 2 bytes - f0 97 
    RSA m^d mod n(3066 bits) - ...
        -> PKCS-1
bash-3.2$ 

Como se puede ver que proporciona el algoritmo de hash, los detalles del tipo de clave (mi clave de firma es una de 3072 bits RSA subclave y el ID de la clave de la subclave, pero no hay nada para identificar la clave maestra. Esa información sólo se revela cuando usted tiene la clave pública y verificar la firma.

Entonces me importan mi clave pública en el sistema y lo intentó de nuevo:

[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E  55C4 321E 4E23 7359 0E5D
     Subkey fingerprint: B7F0 FE75 9387 430D D0C5  8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$ 

Ahora es capaz de identificar la clave y el partido que la clave principal. Es, sin embargo, es posible reducir la naturaleza de esas advertencias como esta:

[ben@seditious tmp]$ gpg -v --verify --trust-model always thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$ 

Todavía hay una advertencia de que se trata de una clave que no son de confianza, pero no de forma masiva tal y extracción de verbosidad sólo se reduce a esto:

[ben@seditious tmp]$ gpg --verify --trust-model always thing.txt.gpg 
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
[ben@seditious tmp]$ 

La clave pública es necesaria para la fase de verificación, ya que se utiliza para que coincida con los datos generados por el que firma con su clave privada. Se puede considerar, en términos simples, como el complemento de cifrado donde la clave privada es necesaria para decypt datos cifrados con la clave pública.

Nota: he ajustado los Uidos en este ejemplo un poco, pero todo el mundo que se que la clave será ver lo que realmente son. De lo contrario, la salida es una escalera de copiar y pegar.

EDIT: Usted puede llamar el archivo de clave pública directamente como un llavero que si tienes en la no-ASCII blindados formato (es decir, una .gpg archivo en lugar de una .archivo asc). Aún así, usted todavía necesita la clave pública. Para ello, el comando es este:

[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E  55C4 321E 4E23 7359 0E5D
     Subkey fingerprint: B7F0 FE75 9387 430D D0C5  8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious ~]$ 

0voto

Louis Puntos 121

Si la palabra "verificar" en la pregunta significa "verifiquen", entonces, por supuesto una clave pública debe ser importado completamente verificar un documento firmado. Sin embargo, si esto significa "identificar", a continuación describo a continuación una heurística que puede decir si un grupo de documentos que fueron todos firmados por la misma firma.

Según las pruebas llevadas a cabo por @Ben para verificar mi comentario, existe la posibilidad de que el comando siguiente podría ser utilizado de forma heurística indicar la clave de firma :

gpg --status-fd 1 --verify thefile.gpg

La prueba de Ben dio el resultado siguiente. De la nota son los valores de ERRSIG y NO_PUBKEY, y también el valor de "RSA key ID" cual es parcialmente contenida en ellos, de la siguiente manera :

[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found

Nota sobre la cuerda, 7FF2D37135C7553C. Esta misma cadena se encuentra dentro de la la huella de la llave que se informa una vez que la clave es importado :

[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E  55C4 321E 4E23 7359 0E5D
     Subkey fingerprint: B7F0 FE75 9387 430D D0C5  8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512

Esta cadena se encuentra en la parte inferior de la huella dactilar (Subclave arriba), por lo que podría se pueden usar para identificar la clave. La "clave Principal de huellas dactilares" probablemente debería ser verificada así, además de la Subclave.

El "RSA key ID" de la cadena es idéntica en ambas salidas y es también la última parte de la huella dactilar, así que podría ser posible que es por sí mismo suficiente para identificar la firma. Si ese es el caso, utilizando sólo la salida de gpg --verify puede ser suficiente para identificar la firma de una manera más sencilla.

[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found

Mi conocimiento de GPG no es suficiente para validar completamente este método, por lo que debe tratar en más archivos de ejemplo. Si funciona, entonces, usted puede ordenar los archivos según su firmas, pero necesitará importar la clave para encontrar la identidad de la signee.

Claramente el estado de nuevo: Este método no se puede identificar plenamente de una firma. Es sólo una manera de forma heurística de ordenación de los documentos firmados.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: