È 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.