{{{#!vorlage Wissen [:GnuPG/Technischer_Hintergrund: Erklärung der Techniken, die hinter GnuPG stehen] [:Terminal: Ein Terminal öffnen] [:Editor: Datei erstellen und bearbeiten] [:Rechte: Dateirechte ändern] }}} [[Inhaltsverzeichnis(2)]] In Ergänzung zu der im [:GnuPG:]-Artikel beschriebenen Methode der [wikipedia:Asymmetrisches_Kryptosystem:asymmetrischen Verschlüsselung][1] mit Hilfe von Schlüsselpaaren (bestehend aus einem öffentlichen und einem privaten Schlüssel), unterstützt GnuPG auch das [wikipedia:Symmetrisches_Kryptosystem:symmetrische Verschlüsseln]. Bei dieser Variante braucht man vorher nicht die öffentlichen Schlüssel auszutauschen, sondern einigt sich einzig und allein auf ein Schlüsselwort (auch Passwort oder Passphrase oder mehrdeutig Key [Schlüssel] genannt). Diese Methode hat jedoch den Nachteil, dass sie in vielen Situationen nicht so sicher ist wie die asymmetrische Verschlüsselung. Folgende zwei Punkte sind dabei zu bedenken: * Das Schlüsselwort muss beiden Parteien bekannt sein. Dabei muss strengstens darauf geachtet werden, dass niemand sonst das Passwort erfahren kann, denn sonst kann er ebenfalls die Nachricht entschlüsseln. Bei der asymmetrischen Verschlüsselung hingegen brauchen nur die öffentlichen Schlüssel ausgetauscht zu werden. Fängt diese ein Fremder ab, kann er damit jedoch nicht die Nachricht entschlüsseln. * Während bei der asymmetrischen Verschlüsselung das Wichtigste ist, den privaten Schlüssel sicher und geheim aufzubewahren, ist es bei der symmetrischen Verschlüsselung einen guten Schlüssel zu verwenden. Die Sicherheit der verwendeten Algorithmen hängt zum größten Teil von der Verwendung eines starken Passwortes ab. Dies bedeutet, dass das Passwort möglichst lang und aus einer Mischung von Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen bestehen sollte. Im Gegensatz zur derzeitigen Public-Key-Kryptographie bietet die symmetrische Verschlüsselung auch in Zukunft Schutz vor Angriffen durch Quantencomputer. = Algorithmen = Man kann bei GnuPG zwischen verschiedenen Algorithmen wählen, einmal für die Verschlüsselung an sich und einmal für die Hashfunktion. Eine Prüfsumme (Englisch "hash") sorgt dabei für die Integrität (Unverändertheit) der Daten. Welche Algorithmen zur Verfügung stehen, zeigt folgender Befehl im Terminal [2] an: {{{#!vorlage Befehl gpg2 --version }}} Als Ausgabe erscheint z.B.: {{{ gpg (GnuPG) 2.2.4 libgcrypt 1.8.1 Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. Home: ~/.gnupg Unterstützte Verfahren: Öff.Schlüssel: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Verschlü.: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Komprimierung: nicht komprimiert, ZIP, ZLIB, BZIP2 }}} == Verschlüsselung == In der Zeile ``Verschlü.:`` werden nun die symmetrischen Verschlüsselungsalgorithmen aufgeführt. Diese sind standardmäßig: ||<-4 cellstyle="text-align: center;" rowclass="titel">Von GnuPG unterstützte symmetrische Verschlüsselungsverfahren || ||<- rowclass="kopf">'''Name''' ||'''Blockgröße/Bit''' ||'''Schlüssellänge/Bit''' ||'''Beschreibung''' || ||[wikipedia:Data_Encryption_Standard:IDEA] ||64 ||128 ||Alternative zum unsicheren DES-Algorithmus || ||[wikipedia:Data_Encryption_Standard:3DES] ||64 ||56, 112, 168 ||Nachfolgeversion des DES-Algorithmus (auch Triple-DES genannt) || ||[wikipedia:CAST_%28Algorithmus%29:CAST5] ||64 ||128 ||In der Praxis wenig verbreitet || ||[wikipedia:Blowfish:BLOWFISH] ||64 ||128 ||Von Sicherheitsguru Bruce Schneier entworfen || ||[wikipedia:Advanced_Encryption_Standard:AES] ||<|3>128 ||128 ||<|3>Derzeit am weitesten verbreitet || ||[wikipedia:Advanced_Encryption_Standard:AES192] ||192 || ||[wikipedia:Advanced_Encryption_Standard:AES256] ||256 || ||[wikipedia:Twofish:TWOFISH] ||128 ||256 ||Nachfolgeversion von Blowfish || ||[wikipedia_en:Camellia_(cipher):CAMELLIA128] ||<|3>128 ||128 ||<|3>Vergleichbar mit AES || ||[wikipedia_en:Camellia_(cipher):CAMELLIA192] ||192 || ||[wikipedia_en:Camellia_(cipher):CAMELLIA256] ||256 || (Je größer Blockgröße und Schlüssellänge, desto sicherer.) {{{#!vorlage Warnung [https://sweet32.info/ 3DES und Blowfish gelten als unsicher] {en} und sollten bei sicherheitsrelevanten Anwendungen nicht mehr verwendet werden. (Dasselbe gilt wahrscheinlich auch für IDEA und CAST5, da sie als Blockgröße ebenfalls 64-Bit verwenden. Wegen ihrer geringen Verbreitung gibt es dazu aber kaum zuverlässige Angaben.) }}} Der Unterschied für den Benutzer ergibt sich meist in der Geschwindigkeit, mit der die Algorithmen verschlüsseln. Wer auf der sicheren Seite sein will, wird sich vermutlich für AES256 oder Twofish entscheiden. IDEA und CAST5 spielen heutzutage in der Praxis kaum eine Rolle. == Prüfsummen (Hashfunktionen) == In der Zeile `Hash:` werden die verschiedenen [:Hashfunktionen:Prüfsummenalgorithmen] aufgelistet: * [wikipedia:Md5:MD5], weit verbreiteter Prüfsummen-Algorithmus, der von vielen Webapps verwendet wird. Es existieren zahlreiche Rainbowtables, die es ermöglichen, eine MD5-Prüfsumme in seinen Plaintext umzuwandeln. * [wikipedia:Secure_Hash_Algorithm:SHA1], wurde bereits mehrfach durch einen Kollisionsangriff gebrochen, bei dem verschiedene Daten den gleichen SHA1-Hashwert haben. * [wikipedia:RIPEMD:RIPEMD160] * SHA256, eine Variante von SHA2. * SHA384, eine Variante von SHA2. * SHA512, eine Variante von SHA2. * SHA224, eine Variante von SHA2. {{{#!vorlage Warnung [:Hashfunktionen#Angriffe-gegen-MD5-und-SHA-1:MD5 und SHA-1 gelten als nicht mehr sicher] und sollten bei sicherheitsrelevanten Anwendungen nicht mehr verwendet werden. Wer auf der sicheren Seite sein möchte, sollte sich für eine SHA2-Variante entscheiden. }}} = Benutzung = Passwörter werden in der Regel von GnuPG über ein Hintergrundprogramm ([:GPG-Agent:]) eingegeben und gecacht. Dieses Hintergrundprogramm wird von GnuPG automatisch gestartet, man muss sich erstmal nicht weiter darum kümmern. Damit aber das Passwort über unterschiedliche Eingabemöglichkeiten abgefragt werden kann ([:Terminal/#Virtuelle-Konsole:Konsole], [:SSH:]-Verbindung, graphische Oberfläche, etc.), sollte vor dem Ver- und Entschlüsseln generell immer das aktuell verwendete [:Terminal:] bekannt gemacht werden: {{{#!vorlage Befehl export GPG_TTY=$(tty) }}} Will man nun eine Datei '''geheim.txt''' mit Twofish verschlüsseln und mit SHA512 hashen, gibt man im Terminal dies ein: {{{#!vorlage Befehl gpg2 -c --cipher-algo TWOFISH --digest-algo SHA512 geheim.txt }}} Nach diesem Befehl wird man nun nach dem Passwort gefragt. Dieses muss man zur Bestätigung nochmal wiederholen, und dann wird die Datei verschlüsselt. Als Ausgabe erhält man dann die Datei '''geheim.txt.gpg'''. Will man sie wieder entschlüsseln, gibt man im Terminal: {{{#!vorlage Befehl gpg2 -d -o geheim.txt geheim.txt.gpg }}} ein. Danach wird man nun wieder nach dem Passwort gefragt, womit die Datei verschlüsselt wurde (es sei denn der [:GPG-Agent:] läuft im Hintergrund und hat das Passwort bereits gecacht), und nach dessen Eingabe wird die Datei entschlüsselt. = Weitere Optionen = ||<-2 cellstyle="text-align: center;" rowclass="titel"> Optionale Kommandozeilenparameter für die symmetrische GnuPG-Verschlüsselung|| ||``--s2k-mode N``|| Gibt an wie oft ein [wikipedia:Salt_(Kryptologie):Salt] an das Passwort angehängt wird, um es noch weiter zu verschleiern. ``N`` kann dabei die Werte ``0``, ``1`` und ``3`` annehmen: * ``0`` bedeutet, das Passwort wird im Klartext verwendet, was nicht empfehlenswert ist. * ``1`` bedeutet, dass der Salt einmal zum Passwort hinzugefügt wird. * ``3`` ist die Voreinstellung und das Sicherste, und wiederholt den Prozess von ``1`` mehrmals. Die genaue Anzahl wird vom [:GPG-Agent:GPG-Agenten] abgefragt und ist von der Performance des Rechners abhängig. Alternativ kann die Anzahl auch über den Parameter "``--s2k-count N``" fest vorgegeben werden, was ggf. bei leistungsschwachen älteren Rechnern sinnvoll sein kann. || ||``--s2k-digest-algo``||Dieser Parameter erwartet einen Prüfsummenalgorithmus, mit dem das Passwort (nicht der zu verschlüsselnde Text) gehashed werden soll. Die Voreinstellung ist SHA-1.|| ||``--armor`` ||[wikipedia:American_Standard_Code_for_Information_Interchange:ASCII]- bzw. [wikipedia:Base64:]-Ausgabedatei; damit lässt sich die verschlüsselte Datei auch über Kanäle übertragen, die keine Binärdaten erlauben || Beispiel für eine sehr sichere Verschlüsselung (natürlich nur, wenn auch ein sicheres Passwort verwendet wird): {{{#!vorlage Befehl gpg2 -c --cipher-algo TWOFISH --digest-algo SHA512 --s2k-digest-algo SHA512 geheim.txt }}} Um die Paramter dauerhaft zu verwenden, können diese auch in die Konfigurationsdatei '''~/.gnupg/gpg.conf''' eingetragen werden. So müssen sie dann nicht ständig als Option auf der Kommandozeile mit angegeben werden. Das Verzeichnis '''~/.gnupg/''' wird beim ersten Aufruf von "gpg2" automatisch angelegt. Die Konfigurationsdatei '''gpg.conf''' muss darin ggf. manuell erzeugt werden [3]. Die Dateirechte für '''gpg.conf''' sollten anschließend auf ``rw-------`` geändert werden [4]. = Problembehebung = == Problem mit dem Agenten == Probleme und Lösungen rund um den [:GPG-Agent:GPG-Agenten] (meist im Zusammenhang mit der Passworteingabe) sind im dortigen Artikel beschrieben. = Links = == Intern == * [:GnuPG:] - Hauptartikel zu GnuPG (asymmetrische Verschlüsselung) * [:Hashfunktionen:] - Wiki-Artikel über Prüfsummenalgorithmen * [:GPG-Agent:] - Hintergrundprogramm für gecachte Passwörter == Extern == * [wikipedia_en:Cipher_security_summary:] - Übersicht über bekannte Angriffe auf symmetrische Verschlüsselungsalgorithmen * [https://sweet32.info] {en} - Angriff auf symmetrische Verschlüsselungsalgorithmen mit einer Blockgröße von 64-Bit # tag: Sicherheit, Kommunikation, Verschlüsselung