it-swarm.com.de

OpenSSL 1.1.1b-Warnung: Die Verwendung von -iter oder -pbkdf2 ist besser, wenn eine mit OpenSSL 1.1.0g verschlüsselte Datei entschlüsselt wird

Heute habe ich diese Warnung erhalten, die von OpenSSL in Cygwin nach dem Aktualisieren einiger Pakete ausgegeben wurde. Ich glaube, openssl war enthalten:

*** WARNUNG: Veraltete Schlüsselableitung verwendet.
Verwenden von -iter oder -pbkdf2 wäre besser.


Die OpenSSL-Version, die in Cygwin verwendet wird war:

OpenSSL 1.1.1b  26 Feb 2019

Dies geschah beim Entschlüsseln meines Backups auf BluRay, das ich unter Linux Mint 19.1 erstellt habe, wobei die OpenSSL-Version deutlich älter ist:

OpenSSL 1.1.0g  2 Nov 2017

Der Befehl zum Ver- und Entschlüsseln (fügen Sie einfach -d bis zum Ende) war:

$ openssl enc -aes-256-cbc -md sha256 -salt -in "${InputFilePath}" -out "${OutputFilePath}"

Was bedeutet diese Warnung und kann ich irgendetwas tun, um sie in zukünftigen Backups zu vermeiden?

5

Lassen Sie mich beim Vergleich der Synopsys der beiden Hauptversionen und der neuesten Versionen von OpenSSL die Manpages zitieren.

OpenSSL 1.1.0

openssl enc -ciphername [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

OpenSSL 1.1.1

openssl enc -cipher [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-Rand file...] [-writerand file] [-engine id]

Es gibt offensichtlich einige größere Unterschiede, nämlich wenn man diese Frage berücksichtigt, fehlen diese beiden Schalter in 1.1.0:

  • pbkdf2

  • iter


Sie haben jetzt grundsätzlich zwei Möglichkeiten. Ignorieren Sie entweder die Warnung oder passen Sie Ihren Verschlüsselungsbefehl an Folgendes an:

openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in InputFilePath -out OutputFilePath

Wo diese Schalter:

  • -aes-256-cbc ist das, was Sie sollten für maximalen Schutz verwenden oder die 128-Bit-Version, das 3DES (Triple DES) wurde vor einiger Zeit aufgegeben, siehe Triple DES wurde 2017 von NIST veraltet , während AES von allen modernen CPUs um ein Vielfaches beschleunigt wird. Sie können einfach überprüfen, ob Ihre CPU beispielsweise über den AES-NI-Befehlssatz verfügt mit grep aes /proc/cpuinfo; win, win

  • -md sha512ist die schnellere Variante der SHA-2-Funktionsfamilie im Vergleich zu SHA-256 , obwohl sie möglicherweise etwas sicherer ist; win, win

  • -pbkdf2: Verwenden Sie den Algorithmus PBKDF2 (Passwortbasierte Schlüsselableitungsfunktion 2)

  • -iter 100000 überschreibt die Standardanzahl von Iterationen für das Kennwort und zitiert die Manpage:

    Verwenden Sie beim Ableiten des Verschlüsselungsschlüssels eine bestimmte Anzahl von Iterationen für das Kennwort. Hohe Werte erhöhen die Zeit, die erforderlich ist, um die resultierende Datei brutal zu erzwingen. Diese Option ermöglicht die Verwendung des PBKDF2-Algorithmus zum Ableiten des Schlüssels.

2

Kürzlich habe ich die neueste Version von Cygwin installiert. "openssl" gab eine Warnung aus:

*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.

Jetzt verwende ich Folgendes zum Verschlüsseln:

openssl aes-256-cbc -salt -pbkdf2 -in name -out name.aes

und Folgendes zum Entschlüsseln:

openssl aes-256-cbc -d -salt -pbkdf2 -in name.aes -out name
3
K.Karamazen

Es hört sich so an, als würde OpenSSL nach mindestens 6 Jahren endlich anerkennen, dass der Befehl enc einige ziemlich schwerwiegende Fehler aufweist (ihre eigene Manpage nennt sie "Bugs"). Vielleicht werden sie jetzt repariert, aber wenn Ihre Daten überhaupt wichtig sind, warum nicht stattdessen ein (relativ) viel sichereres Tool wie GnuPG verwenden? Sie müssen auch nicht unbedingt die Verschlüsselung mit öffentlichem Schlüssel verwenden, gpg führt auch die konventionelle Verschlüsselung (nur Kennwort/Schlüsseldatei) durch.

Hier ist ein Auszug aus meine andere Antwort , der die Grundlagen hervorhebt:

OpenSSL sollte in der Lage sein, die gleichen Dinge zu tun wie gpg (OpenSSL gibt es seit 1998, aber wenn Versionsnummern etwas bedeuten, hat es 2010 Version 1 erreicht), aber es ist sehr einfach zu machen Ein Fehler, der die Sicherheit drastisch verringern könnte. Und von dieser Beitrag auf security.stackexchange.com (von Jan 2013) nd einem anderen von einem 287K-Reputationsbenutzer kann der Befehl openssl enc Etwas hinterlassen gewünscht:

Das von OpenSSL verwendete Verschlüsselungsformat ist kein Standard: Es ist "das, was OpenSSL tut", und wenn alle Versionen von OpenSSL miteinander übereinstimmen, gibt es außer OpenSSL-Quellcode noch kein Referenzdokument, das dieses Format beschreibt. Das Header-Format ist ziemlich einfach:

magic value (8 bytes): the bytes 53 61 6c 74 65 64 5f 5f
salt value (8 bytes)

Daher ein fester 16-Byte-Header, beginnend mit der ASCII-Codierung der Zeichenfolge "Salted__", gefolgt vom Salt selbst. Das ist alles! Kein Hinweis auf den Verschlüsselungsalgorithmus, den Sie beibehalten sollten Verfolge das selbst.

Der Prozess, durch den das Kennwort und das Salt in den Schlüssel und IV umgewandelt werden, ist nicht dokumentiert. Ein Blick auf den Quellcode zeigt jedoch, dass die OpenSSL-spezifische Funktion EVP_BytesToKey () aufgerufen wird, die eine benutzerdefinierte Funktion verwendet Schlüsselableitungsfunktion mit wiederholtem Hashing. Dies ist ein nicht standardmäßiges und nicht gut geprüftes Konstrukt (!), Das auf der MD5-Hash-Funktion von zweifelhaftem Ruf (!!) beruht. Diese Funktion kann in der Befehlszeile mit dem Flag undokumentiert-md (!!!) geändert werden. Die "Iterationszahl" wird mit dem Befehl enc auf 1 gesetzt und kann nicht geändert werden (!!!!). Dies bedeutet, dass die ersten 16 Bytes des Schlüssels gleich MD5 (Passwort || Salt) sind, und das war's.

Das ist ziemlich schwach! Jeder, der weiß, wie man Code auf einem PC schreibt, kann versuchen, ein solches Schema zu knacken, und kann mehrere Dutzend "versuchen" von Millionen potenzieller Passwörter pro Sekunde (Hunderte von Millionen sind mit einer GPU erreichbar). Wenn Sie "openssl enc" verwenden, stellen Sie sicher, dass Ihr Passwort eine sehr hohe Entropie aufweist! (dh höher als normalerweise empfohlen; mindestens 80 Bit anstreben) . Oder verwenden Sie es vorzugsweise überhaupt nicht. Entscheiden Sie sich stattdessen für etwas Robusteres ( GnuPG Wenn Sie eine symmetrische Verschlüsselung für ein Kennwort durchführen, wird ein stärkeres KDF mit vielen Iterationen der zugrunde liegenden Hash-Funktion verwendet).

man enc Hatte dies sogar unter "BUGS":

Es sollte eine Option geben, mit der eine Iterationszahl aufgenommen werden kann.

In einem der Kommentare zu dem ersten Beitrag wird sogar erwähnt, dass diese Probleme seit fast 10 Jahren bestehen ...

Dieses Problem mit der Anzahl der Iterationen ist ein echtes Problem. Vor fast 10 Jahren habe ich ein "verschlüsseltes" Perl-Skript erstellt, das im Wesentlichen dasselbe tut wie "openssl enc", aber iteratives PBKDF2-Hashing verwendet. ict.griffith.edu.au/anthony/software#encrypt Entschlüsselt gesalzene "openssl enc" -Dateien, verschlüsselt sie jedoch stattdessen mit PBKDF2 neu. Ich hätte allerdings gedacht, dass sich die OpenSSL-Dateiverschlüsselung inzwischen verbessert hätte! - Anthony 7. Februar um 5:05 Uhr

3
Xen2050