Datensicherheit und Authentizität durch Kryptografie gewährleisten

CompTIABeginner
Jetzt üben

Einführung

In der digitalen Welt ist es entscheidend sicherzustellen, dass Daten nicht manipuliert wurden (Integrität) und dass sie aus einer vertrauenswürdigen Quelle stammen (Authentizität). Kryptographie bietet die Werkzeuge, um diese Ziele zu erreichen.

Dieses Lab führt Sie in grundlegende kryptographische Praktiken auf einem Linux-System ein. Sie lernen Folgendes:

  • Hashing: Erstellung eines eindeutigen "Fingerabdrucks" einer Datei mit fester Größe. Wenn sich die Datei auch nur um ein einziges Bit ändert, ändert sich der Hash vollständig. Wir werden die Algorithmen MD5 und SHA256 verwenden.
  • Digitale Signaturen: Verwendung eines privaten Schlüssels zum "Signieren" einer Datei, wodurch jeder mit dem entsprechenden öffentlichen Schlüssel überprüfen kann, ob die Datei authentisch ist und nicht verändert wurde.
  • Verschlüsselung: Verschleierung des Inhalts einer Datei, sodass sie nur von jemandem gelesen werden kann, der den richtigen Schlüssel zum Entschlüsseln besitzt, um die Vertraulichkeit zu gewährleisten.

Wir werden Standard-Linux-Befehlszeilentools verwenden, darunter md5sum, sha256sum und GnuPG (gpg), die GNU-Implementierung des Pretty Good Privacy (PGP)-Standards. Am Ende dieses Labs werden Sie in der Lage sein, Dateien sicher zu hashen, zu signieren, zu verifizieren, zu verschlüsseln und zu entschlüsseln.

Dateihashes berechnen (MD5 und SHA256)

In diesem Schritt lernen Sie, wie Sie kryptographische Hashes für eine Datei berechnen. Eine Hash-Funktion nimmt eine Eingabe (wie eine Datei) und gibt eine Zeichenkette von Bytes fester Größe zurück, bekannt als Hash-Wert oder Digest. Dieser Wert fungiert als digitaler Fingerabdruck.

Zuerst verwenden wir den Befehl md5sum, um den MD5-Hash der Datei important_data.txt zu berechnen, die in Ihrem Verzeichnis ~/project vorab erstellt wurde.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

md5sum important_data.txt

Sie sehen eine Ausgabe, die aus dem Hash-Wert gefolgt vom Dateinamen besteht:

d9e21981521545759153147864347199  important_data.txt

Während MD5 schnell ist, gilt es aufgrund von Schwachstellen heute als unsicher für kryptographische Zwecke. Eine sicherere und häufiger verwendete Alternative ist die SHA-2-Familie, insbesondere SHA256.

Berechnen wir nun den SHA256-Hash mit dem Befehl sha256sum:

sha256sum important_data.txt

Die Ausgabe ist ein längerer, sichererer Hash:

a39b2c414f234246a2535321238863141b1a4849443b9992994b4189317e8591  important_data.txt

Wenn Sie etwas in important_data.txt ändern würden, würden sich sowohl der MD5- als auch der SHA256-Hash vollständig ändern, was es Ihnen ermöglicht, unbefugte Änderungen leicht zu erkennen.

GnuPG (GPG) installieren und konfigurieren

In diesem Schritt installieren Sie GnuPG (GPG), das Werkzeug, das wir für digitale Signaturen und Verschlüsselung verwenden werden. Obwohl GPG auf modernen Linux-Distributionen oft vorinstalliert ist, ist es eine gute Praxis, sicherzustellen, dass es vorhanden und aktuell ist.

Aktualisieren Sie zuerst Ihre Paketliste mit apt-get update. Sie müssen sudo verwenden, da die Paketverwaltung administrative Berechtigungen erfordert.

sudo apt-get update

Installieren Sie als Nächstes das Paket gnupg. Das Flag -y beantwortet alle Aufforderungen automatisch mit "ja", wodurch die Installation nicht-interaktiv wird.

sudo apt-get install -y gnupg

Nach Abschluss der Installation können Sie die korrekte Installation von GPG überprüfen, indem Sie seine Version abfragen.

gpg --version

Sie sollten eine Ausgabe ähnlich der folgenden sehen, die die Installation bestätigt. Die Versionsnummern und Details können leicht variieren.

gpg (GnuPG) 2.2.27
libgcrypt 1.9.4
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/labex/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Da GPG nun bereit ist, können wir mit der Erstellung unserer eigenen kryptographischen Schlüssel fortfahren.

GPG-Schlüsselpaar für digitale Signaturen generieren

In diesem Schritt generieren Sie Ihr eigenes GPG-Schlüsselpaar, das aus einem privaten und einem öffentlichen Schlüssel besteht.

  • Privater Schlüssel: Muss geheim gehalten werden. Er wird zum Entschlüsseln von Nachrichten und zum Erstellen digitaler Signaturen verwendet.
  • Öffentlicher Schlüssel: Kann frei geteilt werden. Er wird zum Verschlüsseln von Nachrichten, die für Sie bestimmt sind, und zum Überprüfen Ihrer digitalen Signaturen verwendet.

Normalerweise führt gpg --full-generate-key eine interaktive Einrichtung durch. Um diesen Prozess für das Labor einfacher und nicht-interaktiv zu gestalten, verwenden wir den Batch-Modus von GPG. Erstellen Sie zuerst eine Parameterdatei, die die Details für unseren Schlüssel festlegt.

Verwenden Sie den folgenden cat-Befehl mit einem "Here Document", um die Datei gen-key-params sofort zu erstellen:

cat << EOF > gen-key-params
%echo Generating a basic key
Key-Type: RSA
Key-Length: 2048
Subkey-Type: RSA
Subkey-Length: 2048
Name-Real: LabEx User
Name-Email: user@labex.io
Expire-Date: 0
%no-protection
%commit
%echo done
EOF

Diese Datei weist GPG an, einen 2048-Bit RSA-Schlüssel für einen Benutzer namens "LabEx User" mit der E-Mail-Adresse "user@labex.io" zu erstellen. Der Schlüssel wird niemals ablaufen, und wir verwenden %no-protection, um den Schlüssel zur Vereinfachung ohne Passphrase zu erstellen (in einem realen Szenario sollten Sie immer eine starke Passphrase verwenden).

Generieren Sie nun den Schlüssel mithilfe der Parameterdatei:

gpg --batch --gen-key gen-key-params

GPG verwendet die Parameter, um das Schlüsselpaar zu generieren. Dies kann einige Momente dauern. Sobald dies abgeschlossen ist, können Sie Ihre Schlüssel auflisten, um zu bestätigen, dass das Schlüsselpaar erfolgreich erstellt wurde.

gpg --list-keys

Die Ausgabe sollte Ihren neu erstellten öffentlichen Schlüssel anzeigen, ähnlich wie hier:

/home/labex/.gnupg/pubring.kbx
-------------------------------
pub   rsa2048 2023-10-27 [SC]
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid           [ultimate] LabEx User <user@labex.io>
sub   rsa2048 2023-10-27 [E]

Sie verfügen nun über ein GPG-Schlüsselpaar, das für die Signierung und Verschlüsselung von Dateien bereit ist.

Datei digital mit GPG signieren und verifizieren

In diesem Schritt verwenden Sie Ihren privaten Schlüssel, um eine digitale Signatur für eine Datei zu erstellen. Diese Signatur beweist, dass die Datei von Ihnen stammt und seit Ihrer Signierung nicht verändert wurde.

Wir erstellen eine "abgelöste" Signatur, die in einer separaten Datei gespeichert wird. Dies ist nützlich, da die Originaldatei unverändert bleibt.

Um important_data.txt zu signieren, führen Sie den folgenden Befehl aus. GPG verwendet automatisch den gerade generierten Standard-Privatschlüssel.

gpg --detach-sign important_data.txt

Da wir den Schlüssel ohne Passphrase erstellt haben, werden Sie nicht dazu aufgefordert. Listen Sie nun die Dateien in Ihrem Verzeichnis auf, um die neue Signaturdatei zu sehen.

ls

Sie sehen die Originaldatei und ihre Signatur:

gen-key-params  important_data.txt  important_data.txt.sig

Stellen Sie sich nun vor, Sie sind ein Empfänger, der sowohl important_data.txt als auch important_data.txt.sig zusammen mit Ihrem öffentlichen Schlüssel erhalten hat. Um die Authentizität und Integrität der Datei zu überprüfen, würde er den Befehl gpg --verify ausführen.

Führen wir die Verifizierung selbst durch:

gpg --verify important_data.txt.sig important_data.txt

Die Ausgabe bestätigt, dass die Signatur gültig ist:

gpg: Signature made Mon Aug  4 16:39:30 2025 CST
gpg:                using RSA key 8765265B14E42532B9CBAE6DE2120C9784C69814
gpg: Good signature from "LabEx User <user@labex.io>" [ultimate]

Die Meldung "Good signature" bestätigt, dass die Datei authentisch und unverändert ist.

Datei mit GPG verschlüsseln und entschlüsseln

In diesem Schritt lernen Sie, wie Sie eine Datei zur Vertraulichkeit verschlüsseln. Im Gegensatz zum Signieren (das Ihren privaten Schlüssel verwendet) erfordert die Verschlüsselung einer Datei für jemanden dessen öffentlichen Schlüssel. Der Empfänger verwendet dann seinen privaten Schlüssel, um sie zu entschlüsseln.

Hier verschlüsseln wir important_data.txt für uns selbst, daher verwenden wir unseren eigenen öffentlichen Schlüssel als Schlüssel des Empfängers.

Verwenden Sie den folgenden Befehl, um die Datei zu verschlüsseln. Das Flag --recipient gibt an, wessen öffentlicher Schlüssel zur Verschlüsselung verwendet werden soll, und --output definiert den Namen der verschlüsselten Datei.

gpg --encrypt --recipient "user@labex.io" --output important_data.txt.gpg important_data.txt

Wenn Sie versuchen, den Inhalt der neuen verschlüsselten Datei important_data.txt.gpg anzuzeigen, sehen Sie unlesbare Binärdaten.

cat important_data.txt.gpg

Nun entschlüsseln wir die Datei. Diese Aktion erfordert den entsprechenden privaten Schlüssel. Da Sie den privaten Schlüssel besitzen, können Sie die Nachricht entschlüsseln. Wir speichern den entschlüsselten Inhalt in einer neuen Datei namens decrypted_data.txt.

gpg --decrypt --output decrypted_data.txt important_data.txt.gpg

GPG verwendet Ihren privaten Schlüssel, um die Datei zu entschlüsseln. Sie sehen einige Informationen von GPG auf Ihrem Terminal, einschließlich einer Bestätigung, dass die Datei mit Ihrem Schlüssel verschlüsselt wurde.

Zeigen Sie abschließend den Inhalt der entschlüsselten Datei an, um zu bestätigen, dass der Vorgang erfolgreich war.

cat decrypted_data.txt

Die Ausgabe sollte die ursprüngliche, lesbare Nachricht sein:

This is a secret message that needs to be protected.

Sie haben erfolgreich eine Datei verschlüsselt, um ihren Inhalt zu schützen, und sie dann entschlüsselt, um die ursprünglichen Informationen abzurufen.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit wesentlichen kryptografischen Werkzeugen und Konzepten auf einem Linux-System gesammelt. Sie haben erfolgreich die folgenden Aufgaben ausgeführt:

  • Dateihashes mit md5sum und sha256sum berechnet, um die Datenintegrität sicherzustellen.
  • GnuPG (gpg) installiert und konfiguriert, das Standardwerkzeug für Open-Source-Kryptografie.
  • Ein persönliches GPG-Schlüsselpaar (öffentlicher und privater Schlüssel) generiert.
  • Eine digitale Signatur mit gpg --detach-sign erstellt, um Authentizität und Integrität zu gewährleisten.
  • Eine digitale Signatur mit gpg --verify verifiziert.
  • Eine Datei zur Vertraulichkeit mit gpg --encrypt verschlüsselt.
  • Die Datei mit gpg --decrypt entschlüsselt, um auf ihren ursprünglichen Inhalt zuzugreifen.

Diese Fähigkeiten sind grundlegend für die Sicherung von Daten, die Überprüfung von Software-Downloads und den Schutz der Kommunikation in einer Vielzahl von beruflichen und persönlichen Kontexten.