Czy można podpisywać archiwa?

15

Grałem z openssl, aby utworzyć klucz pub / prv, utworzyć podpis pliku i go zweryfikować. Bawiłem się Cryptophane (frontend gnupga dla systemu Windows) i słyszałem o serwerach kluczy + bawiłem się podpisywaniem tekstu.

Jednak nigdy nie podpisałem archiwum plików. Jeśli chcę opublikować archiwum (7z, rar lub zip, to nie ma znaczenia) i chciałbym, aby moi użytkownicy lub oprogramowanie mogli sprawdzić, czy to archiwum zostało podpisane, jak mam to zrobić? Klucz publiczny oczywiście musiałby być dostępny publicznie. Niepokoi mnie jednak dodanie podpisu do archiwum. Czy jakieś oprogramowanie + archiwum pozwala mi podpisać i zweryfikować skompresowany plik archiwum?


źródło
Dlaczego chcesz to podpisać? Możesz po prostu utworzyć skrót SHA1 i udostępnić go swoim klientom / użytkownikom do sprawdzenia. Jest to wystarczające do potwierdzenia, że ​​plik nie został zmieniony. Chociaż użytkownicy muszą mieć możliwość weryfikacji skrótu, ale nie trudniej niż weryfikację podpisu.
BJ292
@ BJ292: A w jaki sposób weryfikujesz, że hash nie został zmieniony?
user1686
@grawity - Nie jestem pewien, czy podążam - jaki jest sens ingerowania w hash? Wysyłam ci plik i skrót - odtworzysz skrót z pliku i potwierdzisz, że pasuje - potwierdza to, że plik nie został zmieniony. W większości przypadków jest to wszystko, czego chce większość ludzi - potwierdzenie, że plik od A do B został niezmieniony. Z pewnością brzmi to tak, jak tego chce OP.
BJ292
3
@ BJ292: Zakładasz, że OP dotyczy tylko przypadkowego uszkodzenia danych. Nie zostało to stwierdzone (lub odrzucone) w pytaniu, ale OP pyta o podpisy cyfrowe, więc założę, że istnieje potrzeba ochrony przed celowymi (prawdopodobnie złośliwymi) modyfikacjami danych.
user1686
1
@ BJ292: Pliki będą dublowane na innych stronach ppls. Chciałbym je podpisać, aby żadne z serwerów lustrzanych nie mogło

Odpowiedzi:

10

Powszechną metodą jest utworzenie odłączonego podpisu w .sigpliku (zwykle podpis PGP przy użyciu gpg -b- X.509 jest bardzo rzadki) i dostarczenie obu plików w tej samej lokalizacji. Na przykład:

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

Można tego użyć z dowolnym rodzajem pliku, ale użytkownik będzie musiał ręcznie zweryfikować podpis przy użyciu gpg --verify.


Niestety spośród obecnie używanych żaden format archiwum (o którym wiem) nie obsługuje wbudowanych podpisów przy użyciu PGP lub X.509. (Wyklucza to CAB, który jest używany przez system Windows wewnętrznie, ale praktycznie nigdzie indziej i jest dość skomplikowany do podpisania). WinRAR 4 był w stanie dodać rekord „weryfikacji autentyczności” przy użyciu zastrzeżonego formatu, ale wykorzystuje twoją licencję WinRAR jako klucz podpisujący, który był wielokrotnie łamany. (Aktualizacja: Ta funkcja została usunięta z WinRAR 5 z powodu braku bezpieczeństwa.)


W systemie Windows (i wkrótce Mac OS X) możliwe jest utworzenie „samorozpakowującego się archiwum” - podpisanego cyfrowo pliku wykonywalnego, który wyodrębnia archiwum z siebie samego - tak działają na przykład instalatorzy oprogramowania w systemie Windows. Jednak SFX są ograniczone do jednego systemu operacyjnego, więc nadają się tylko do dystrybucji programów , a nie dokumentów lub zdjęć. (Programy Java mogą być podpisywane i są wieloplatformowe, ale niewiele systemów nadal ma środowisko wykonawcze Java).

użytkownik1686
źródło
2

Archiwa jar, budowane za pomocą narzędzia jar jar, są efektywnie archiwami zip i istnieje narzędzie, jarsigner, do ich podpisywania.

Oto kilka przydatnych linków:

Najpierw wygląda to trochę skomplikowane („Do czego potrzebuję keeytool? Co jeszcze?”), Ale łatwo jest wykonać kroki, aby rozwiązać go w prosty sposób. To działa. Następnie możesz zanurzyć się głębiej w materię.

nieznany użytkownik
źródło
To prawda (archiwa XPI są również ZIPami podpisanymi w bardzo podobny sposób), ale AFAIK, tylko Java Runtime faktycznie weryfikuje podpisy JAR, a konieczność ręcznej weryfikacji czyni to jeszcze mniej praktycznym niż GnuPG.
user1686
Co masz na myśli manual verification? Jaka jest alternatywa? Autopopup, który weryfikuje się co 10 minut? Czy system operacyjny automatycznie zweryfikuje archiwum podczas uruchamiania? Po otrzymaniu archiwum - czy to z płyty CD, załącznika e-mail, pliku do pobrania ...? Czy powinna to być wtyczka w twoim skanerze wirusów?
użytkownik nieznany
Miałem na myśli weryfikację przeprowadzoną przez narzędzie do rozpakowywania archiwów przed / podczas rozpakowywania lub przez system operacyjny / środowisko wykonawcze podczas wykonywania programu. Na przykład .debpodpisy pakietów są weryfikowane przez dpkgprzed zainstalowaniem pakietu, bez konieczności podejmowania dodatkowych działań przez użytkownika.
user1686
@grawity: podpisane aplety, spakowane do słoika, SĄ weryfikowane przed wykonaniem. Generowanie minimalnego skryptu powłoki, który łączy weryfikację (jarsigner) z ekstrakcją (jar), będzie banalne.
użytkownik nieznany
trzeci link „wiki o podpisywaniu plików jar” jest zepsuty
Jason S
0

Jasne, za każdym razem, gdy instalujesz podpisane oprogramowanie, weryfikujesz podpisane archiwum. Aby je utworzyć, należy użyć tych samych narzędzi do pakowania, z których korzystają programiści. Istnieją pewne kompromisy, łatwość użycia w porównaniu z kompatybilnością między platformami. Nie mogę wymyślić sposobu, aby stworzyć samorozpakowujące się archiwum podpisane na wielu platformach.

W systemie Windows utwórz samorozpakowujące się archiwum za pomocą narzędzia iexpress, a następnie podpisz je za pomocą signtool.exe, jak opisano tutaj . Kiedy użytkownicy klikną dwukrotnie plik, będą mieli znane okna potwierdzające dialog identyfikujący cię jako wydawcę archiwum.

bbsimonbb
źródło
-1

Możesz podpisywać pliki za pomocą jarsignera za pomocą tych dwóch poleceń:

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>

Musisz zainstalować java jdk na swoim komputerze.

-Pierwsze polecenie tworzy magazyn kluczy w bieżącym katalogu (zakładając, że jeszcze nie istnieje). Generuje parę kluczy publiczny / prywatny przy użyciu algorytmu SHA-256.

- Drugi podpisuje plik przy użyciu tego samego algorytmu, magazynu kluczy i aliasu wygenerowanego przez pierwszy.

Aby zweryfikować plik podpisany przy użyciu magazynu kluczy, możesz uruchomić to polecenie:

jarsigner -keystore <keystore> -verify -verbose -certs <file-signed>
afonte
źródło