È possibile firmare gli archivi?


15

Ho giocato con openssl per creare una chiave pub / prv e creare una firma di un file e convalidarlo. Ho giocato con Cryptophane (windows gnupg frontend) e sentito parlare di server di chiavi + giocato con il testo della firma.

Tuttavia non ho mai firmato un archivio di file. Se voglio pubblicare un archivio (7z, rar o zip, non importa) e vorrei che i miei utenti o software potessero controllare se quell'archivio è stato firmato come lo farei? La chiave pubblica dovrebbe ovviamente essere disponibile pubblicamente. Ma l'aggiunta della firma all'archivio è ciò che mi disturba. Qualsiasi software + archivio mi consente di firmare e verificare un file di archivio compresso?


Perché vuoi firmarlo? Puoi semplicemente creare un hash SHA1 e renderlo disponibile per i tuoi clienti / utenti. Questo è sufficiente per confermare che il file non è stato manomesso. Sebbene i tuoi utenti debbano avere la possibilità di verificare l'hash ma non più difficile della verifica di una firma.
BJ292,

@ BJ292: E come si verifica che l' hash non sia stato manomesso?
user1686

@grawity - Non sono sicuro di seguirlo - che senso ha manomettere l'hash? Ti invio un file e l'hash - ricreare l'hash dal file e confermi che corrisponde - questo conferma che il file non è stato modificato. Nella maggior parte dei casi, questo è tutto ciò che la maggior parte delle persone desidera: la conferma che il file sia stato modificato da A a B. Certamente sembra che questo sia ciò che l'OP sta cercando.
BJ292,

3
@ BJ292: Stai supponendo che l'OP si occupi solo di corruzione accidentale dei dati. Questo non è stato dichiarato (o negato) nella domanda, ma l'OP sta chiedendo delle firme digitali, quindi suppongo che sia necessario proteggere dalle modifiche intenzionali (forse dannose) dei dati.
user1686

1
@ BJ292: i file verranno sottoposti a mirroring su altri siti ppls. Vorrei firmarli in modo che nessuno dei mirror possa manomettere

Risposte:


10

Un metodo comune è quello di creare una firma separata in un .sigfile (di solito una firma PGP usando gpg -b- X.509 è molto rara) e fornire entrambi i file nella stessa posizione. Per esempio:

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

Questo può essere utilizzato con qualsiasi tipo di file, ma l'utente dovrà verificare manualmente la firma utilizzando gpg --verify.


Sfortunatamente, tra quelli attualmente in uso, nessun formato di archivio (che io conosca) ha il supporto per le firme integrate usando PGP o X.509. (Questo esclude CAB, che viene utilizzato da Windows internamente ma praticamente da nessun'altra parte, ed è piuttosto complicato da firmare). WinRAR 4 è stato in grado di aggiungere un record di "verifica dell'autenticità" utilizzando un formato proprietario, ma utilizza la licenza WinRAR come chiave di firma, che è stata decifrata ripetutamente. (Aggiornamento: questa funzione è stata rimossa da WinRAR 5 a causa dell'insicurezza.)


Su Windows (e presto su Mac OS X), è possibile creare un "archivio autoestraente" - un eseguibile con firma digitale che estrae un archivio dall'interno stesso - è così che funzionano gli installatori di software su Windows. Tuttavia, gli SFX sono limitati a un singolo sistema operativo, quindi sono adatti solo per la distribuzione di programmi , non documenti o immagini. (I programmi Java possono essere firmati e sono multipiattaforma, ma pochi sistemi hanno ancora un runtime Java.)


2

Jar-archives, compilati con Javas jar-tool, sono effettivamente archivi zip e c'è uno strumento, il jarsigner, per firmarli.

Ecco alcuni link utili:

Per prima cosa sembra un po 'complicato ("Cosa, ho bisogno di Keeytool per? Cos'altro?") Ma è facile seguire i passaggi per risolverlo in modo semplice. Funziona. Quindi puoi approfondire la questione.


Questo è vero (anche gli archivi XPI sono ZIP firmati in un modo molto simile), ma AFAIK, solo Java Runtime verifica effettivamente le firme JAR e la necessità di effettuare la verifica manuale lo rende ancora meno pratico di GnuPG.
user1686

Con cosa intendi manual verification? Qual è l'alternativa? Un autopopup, che si verifica ogni 10 minuti? Il sistema operativo verificherà automaticamente l'archivio all'avvio? Quando viene ricevuto un archivio, sia esso da CD, allegato e-mail, download, ...? Dovrebbe essere un plugin nel tuo antivirus?
utente sconosciuto

Intendevo la verifica eseguita dallo strumento di estrazione dell'archivio prima / durante l'estrazione o dal sistema operativo / runtime durante l'esecuzione del programma. Ad esempio, le .debfirme dei pacchetti vengono verificate dpkgprima dell'installazione del pacchetto, senza che l'utente esegua alcuna azione aggiuntiva.
user1686

@grawity: applet firmate, zippate in un barattolo, vengono verificate prima dell'esecuzione. Generare uno script shell minimo, che combina la verifica (jarsigner) con l'estrazione (jar) sarà banale.
utente sconosciuto

il terzo link "wiki sulla firma dei file jar" è interrotto
Jason S

0

Certo, ogni volta che installi un software firmato, verifichi un archivio firmato. Per crearne uno, è necessario utilizzare gli stessi strumenti di packaging utilizzati dagli sviluppatori. Ci sono alcuni compromessi, facilità d'uso contro la compatibilità multipiattaforma. Non riesco a pensare a un modo per creare un archivio autoestraente firmato multipiattaforma.

Per Windows, crea un archivio autoestraente con lo strumento iexpress, quindi firmalo utilizzando signtool.exe, come descritto qui . Quando i tuoi utenti fanno doppio clic sul file, avranno le finestre familiari che confermano il dialogo che ti identifica come l'editore dell'archivio.


-1

Puoi firmare i file usando jarsigner con questi due comandi:

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>

Devi installare java jdk sul tuo pc.

-Il primo comando crea l'archivio chiavi nella directory corrente (supponendo che non esista già). Genera una coppia di chiavi pubblica / privata usando l'algoritmo SHA-256.

-Il secondo firma il file usando lo stesso algoritmo, il keystore e l'alias generato dal primo.

Per verificare un file firmato utilizzando un keystore, è possibile eseguire questo comando:

jarsigner -keystore <keystore> -verify -verbose -certs <file-signed>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.