¿Es posible firmar archivos?

15

Jugué con openssl para hacer una clave pub / prv y crear una firma de un archivo y validarlo. Jugué con Cryptophane (frontend de gnupg de windows) y escuché sobre los servidores de teclas + jugué con el texto de firma.

Sin embargo, nunca firmé un archivo. Si quiero publicar un archivo (7z, rar o zip, no importa) y me gustaría que mis usuarios o software puedan verificar si ESE archivo ha sido firmado, ¿cómo lo haría? La clave pública obviamente debería estar disponible públicamente. Pero agregar la firma al archivo es lo que me molesta. ¿Algún software + archivo me permite firmar y verificar un archivo comprimido?


fuente
¿Por qué quieres firmarlo? Simplemente puede crear un hash SHA1 y hacer que el hash esté disponible para que lo verifiquen sus clientes / usuarios. Esto es suficiente para confirmar que el archivo no ha sido alterado. Aunque sus usuarios necesitan tener la capacidad de verificar el hash, pero no más difícil que verificar una firma.
BJ292
@ BJ292: ¿Y cómo verifica que no se haya manipulado el hash ?
usuario1686
@grawity: no estoy seguro de seguirlo, ¿cuál es el punto de alterar el hash? Le envío un archivo y el hash (usted recrea el hash del archivo y confirma que coincide), esto confirma que el archivo no ha sido modificado. En la mayoría de los casos, esto es todo lo que la mayoría de la gente quiere: confirmación de que el archivo pasó de A a B sin cambios. Ciertamente parece que esto es lo que busca el OP.
BJ292
3
@ BJ292: Asume que el OP solo se preocupa por la corrupción accidental de datos. Esto no se ha indicado (o negado) en la pregunta, pero el OP pregunta por las firmas digitales, por lo que voy a asumir que es necesario protegerse contra modificaciones de datos intencionales (posiblemente maliciosas).
user1686
1
@ BJ292: Los archivos se reflejarán en otros sitios de ppls. Me gustaría firmar por lo que ninguno de los espejos puede alterar

Respuestas:

10

Un método común es crear una firma separada en un .sigarchivo (generalmente una firma PGP usando gpg -b- X.509 es muy poco común) y proporcionar ambos archivos en la misma ubicación. Por ejemplo:

ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2.sig

Esto se puede usar con cualquier tipo de archivo, pero el usuario tendrá que verificar la firma manualmente usando gpg --verify.


Desafortunadamente, de los que están actualmente en uso, ningún formato de archivo (que yo sepa) tiene soporte para firmas integradas usando PGP o X.509. (Esto excluye CAB, que Windows usa internamente pero prácticamente en ningún otro lugar, y es bastante complicado de firmar). WinRAR 4 pudo agregar un registro de "verificación de autenticidad" utilizando un formato propietario, pero utiliza su licencia WinRAR como clave de firma, que se ha descifrado repetidamente. (Actualización: esta característica se eliminó de WinRAR 5 debido a la inseguridad).


En Windows (y pronto Mac OS X), es posible crear un "archivo autoextraíble", un archivo ejecutable firmado digitalmente que extrae un archivo de sí mismo, así es como funcionan los instaladores de software en Windows, por ejemplo. Sin embargo, los SFX están limitados a un solo sistema operativo, por lo que solo son adecuados para distribuir programas , no documentos o imágenes. (Los programas Java se pueden firmar y son multiplataforma, pero pocos sistemas aún tienen un tiempo de ejecución Java).

usuario1686
fuente
2

Los archivos jar, construidos con la herramienta jar de Javas, son efectivamente archivos zip, y hay una herramienta, el jarsigner, para firmarlos.

Aquí hay algunos enlaces útiles:

Primero parece un poco complicado ("¿Para qué necesito keeytool? ¿Qué más?") Pero es fácil seguir los pasos para resolverlo de una manera simple. Funciona. Entonces puedes sumergirte más en el asunto.

usuario desconocido
fuente
Esto es cierto (los archivos XPI también son ZIPs firmados de una manera muy similar), pero AFAIK, solo el Java Runtime realmente verifica las firmas JAR, y la necesidad de hacer una verificación manual lo hace aún menos práctico que GnuPG.
user1686
¿Con qué te refieres manual verification? Cual es la alternativa? ¿Un autopopup, que se verifica cada 10 minutos? ¿El sistema operativo verificará automáticamente el archivo al arrancar? Cuando se recibe un archivo, ya sea desde un CD, un archivo adjunto de correo electrónico, una descarga, ... ¿Debería ser un complemento en su escáner de virus?
usuario desconocido
Me refería a la verificación realizada por la herramienta de extracción de archivos antes / durante la extracción, o por el sistema operativo / tiempo de ejecución durante la ejecución del programa. Por ejemplo, .deblas firmas del paquete se verifican dpkgantes de instalar el paquete, sin que el usuario realice ninguna acción adicional.
user1686
@grawity: los applets firmados, comprimidos en un frasco, SON verificados antes de la ejecución. Generar un script de shell mínimo, que combina la verificación (jarsigner) con extracción (jar) será trivial.
usuario desconocido
tercer enlace "wiki sobre la firma de archivos jar" está roto
Jason S
0

Claro, cada vez que instala un software firmado, está verificando un archivo firmado. Para crear uno, debe usar las mismas herramientas de empaque que usan los desarrolladores. Hay algunas compensaciones, facilidad de uso contra la compatibilidad multiplataforma. No se me ocurre una forma de hacer un archivo autoextraíble firmado multiplataforma.

Para Windows, cree un archivo autoextraíble con la herramienta iexpress, luego fírmelo con signtool.exe, como se describe aquí . Cuando sus usuarios hagan doble clic en el archivo, tendrán las ventanas familiares para confirmar el diálogo que lo identifica como el editor del archivo.

bbsimonbb
fuente
-1

Puede firmar archivos usando jarsigner con estos dos comandos:

keytool -genkeypair -alias <key-alias> -keyalg RSA -keystore <keystore> -validity 180

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore <keystore> <file-to-sign> <key-alias>

Necesitas instalar java jdk en tu pc.

-El primer comando crea el almacén de claves en el directorio actual (suponiendo que no exista). Genera un par de claves pública / privada utilizando el algoritmo SHA-256.

-El segundo firma el archivo usando el mismo algoritmo, el almacén de claves y el alias generado por el primero.

Para verificar un archivo firmado con un almacén de claves, puede ejecutar este comando:

jarsigner -keystore <keystore> -verify -verbose -certs <file-signed>
afonte
fuente