in een vorig artikel introduceerde ik GnuPG door een ondertekend bestand te verifiëren en een bestand voor een ontvanger te versleutelen met behulp van een publieke sleutel. Ik heb ook gedeeld hoe je een sleutelpaar maakt en een publieke sleutel exporteert, zodat we versleutelde berichten kunnen ontvangen. In dit artikel zal ik laten zien hoe je bestanden kunt ondertekenen voordat je ze deelt via e-mail of publiceert op een website.
met GnuPG zijn er meerdere methoden om een bestand te ondertekenen.
$ gpg --help | grep -i signSign, check, encrypt or decrypt -s, --sign make a signature --clear-sign make a clear text signature -b, --detach-sign make a detached signature --verify verify a signature
naarmate elke optie wordt besproken, zal ik een eenvoudig tekstbestand ondertekenen.
$ cat sample.txt Sample text for gpg signing
Maak een ondertekening
met de optie --sign
wordt het bestand effectief versleuteld met de privésleutel. De publieke sleutel is vereist om de inhoud van het bestand te bekijken. Dit dwingt de ontvanger om de oorsprong te verifiëren en verwijdert alle clear text content van de doorvoer. Het is niet privé omdat iedereen met de publieke sleutel het bestand kan decoderen.
$ gpg -s sample.txt
dit resulteert in een bestand met de naam sample.txt.gpg.
$ file sample*sample.txt: ASCII textsample.txt.gpg: data
gebruik de optie --verify
om alleen de handtekening te verifiëren. Gebruik de optie --decrypt
om de inhoud te bekijken en de verificatie van de ondertekening te tonen.
$ gpg --decrypt sample.txt.gpg Sample text for gpg signinggpg: Signature made Sat 30 May 2020 09:16:24 AM EDTgpg: using DSA key 15AC***********...omitted...
Maak een ontkoppelde ondertekening
de optie ontkoppelde ondertekening is beschikbaar om iedereen de mogelijkheid te bieden het bericht te bekijken zonder de publieke sleutel. Hiermee wordt een afzonderlijk ondertekeningsbestand aangemaakt dat wordt gebruikt om het oorspronkelijke bericht te verifiëren indien gewenst. In zijn eenvoudigste vorm bevat dit bestand een hash van het oorspronkelijke bericht en is versleuteld met de privésleutel. Iedereen met de publieke sleutel kan de handtekening openen en vervolgens hashes vergelijken om de integriteit van het ondertekende bestand te verifiëren.
Maak het ondertekeningsbestand aan met de optie --detach-sign
.
$ gpg -b sample.txt
het resultaat is een afzonderlijk resultaat .sig-gegevensbestand.
$ file sample*sample.txt: ASCII textsample.txt.gpg: datasample.txt.sig: data
Als u geen gegevensbestand wilt delen, posten of e-mailen, kunt u het bestand ondertekenen met de optie --armor
, en het zal een ASCII-tekstbestand met de handtekening maken. Het zal ook gebruik maken van de .asc extensie in plaats van de .Sig-extensie:
$ cat sample.txt.asc -----BEGIN PGP SIGNATURE-----iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJdC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8==IvP/-----END PGP SIGNATURE-----
het originele platte tekstbestand en het aparte handtekeningbestand moeten beide beschikbaar worden gesteld aan de ontvanger.
om de ondertekening te verifiëren, specificeert u het ondertekeningsbestand en vervolgens het oorspronkelijke bestand.
$ gpg --verify sample.txt.sig sample.txt
als de standaardnamen zijn gebruikt, kunt u de naam van het niet-versleutelde bestand laten staan.
$ gpg --verify sample.txt.sig gpg: assuming signed data in 'sample.txt'gpg: Signature made Sat 30 May 2020 09:23:53 AM EDT...omitted...
Maak een clear text signature
de --clear-sign
optie is een nieuwere optie in termen van de lange geschiedenis van GPG en is zeer gebruikelijk voor bestanden gepubliceerd op websites zoals de Fedora download CHECKSUM bestanden. De inhoud is leesbaar voor iedereen. De ondertekeningsinformatie is ook beschikbaar in hetzelfde bestand voor degenen die de oorsprong en integriteit van de inhoud willen controleren.
de --clear-sign
optie zal een nieuw bestand aanmaken met de .asc extensie.
$ gpg --clear-sign sample.txt
$ file sample*sample.txt: ASCII textsample.txt.asc: ASCII textsample.txt.gpg: datasample.txt.sig: data
gebruik de optie --verify
om de ondertekening te verifiëren:
$ gpg --verify sample.txt.asc gpg: Signature made Sat 30 May 2020 09:27:56 AM EDT...omitted...gpg: WARNING: not a detached signature; file 'sample.txt' was NOT verified!
merk op dat er tijdens het verificatieproces een bericht wordt weergegeven waarin wordt gewaarschuwd dat het bijbehorende originele bestand niet is gecontroleerd. U kunt dit bestand hernoemen voordat u het op uw website plaatst. De verificatie zal nog steeds de inhoud van het bestand controleren.
hoewel dit vaak de meest handige methode is voor de consumenten van uw producten, is er een waarschuwing in de GPG man page dat losse handtekeningen de betere optie zijn wanneer volledige verificatie vereist is.
van de GPG man page:
opmerking: bij het verifiëren van een leesteksthandtekst, controleert GPG alleen wat de leestekst ondertekende gegevens bevat en geen extra gegevens buiten de leesteksthandtekst of de kopregels die direct na de streepjesmarkeringslijn volgen. De –output optie kan gebruikt worden om de ondertekende data uit te schrijven, maar er zijn ook andere valkuilen met dit formaat. Er wordt voorgesteld om leesbare handtekeningen te vermijden ten gunste van losse handtekeningen.
gebruikmakend van een specifiek toetsenbord
de bovenstaande voorbeelden zijn allemaal ondertekend met de eerste private sleutel die beschikbaar is in mijn sleutelbos. Ik zou een andere sleutel willen gebruiken wanneer ik een bestand onderteken voor publicatie op een website. Speciaal voor het project of product wordt een toetsenbord gemaakt. Het keypair kan zelfs op een nieuwe gedeelde sleutelbos staan.
$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>
wanneer een bestand is ondertekend of versleuteld, moet u ook de optie --keyring
opgeven.
zelfs als slechts één persoon de sleutel gebruikt om bestanden te ondertekenen, maak dan een apart toetsenbord om te gebruiken voor het ondertekenen. Gebruik niet dezelfde sleutel voor andere dagelijkse taken, zoals persoonlijke e-mail encryptie. U kunt de namen van de privésleutels weergeven die beschikbaar zijn met gpg --list-secret
. De ID, naam of e-mail kan worden gebruikt om de sleutel te identificeren.
als u het bestand wilt ondertekenen met een specifieke sleutel uit een sleutelbos, gebruikt u de optie --local-user
identiteit.
$ gpg --local-user "My Project 2" --clear-sign sample.txt
Wrap up
als uw eenvoudige tekstbestand een lijst is met checksum-hashes voor uw productdownloads, kunnen dat bestand, eventuele handtekeningbestanden en de publieke sleutel die wordt gebruikt om de handtekeningen te verifiëren, allemaal op een website worden geplaatst. Consumenten kunnen vervolgens de downloads controleren voordat ze software op hun systemen installeren.