digitale handtekeningen met GnuPG

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
afbeelding
grafisch weergeven van twee bestanden verzonden van A naar B waar een is platte tekst en een is versleuteld

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

afbeelding
grafisch weergeven van twee bestanden verzonden van A naar B waar een is platte tekst en een is versleuteld

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.

afbeelding
inhoud van CHECKSUM-bestand met zowel de platte tekst van SHA256SUM als PGP-Handtekeningblok

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.



+