Ich möchte eine Datei mit einem Passwort verschlüsseln und entschlüsseln.
Wie kann ich dazu OpenSSL verwenden?
Ich möchte eine Datei mit einem Passwort verschlüsseln und entschlüsseln.
Wie kann ich dazu OpenSSL verwenden?
Antworten:
Sicherheitswarnung : AES-256-CBC bietet keine authentifizierte Verschlüsselung und ist anfällig für Padding-Orakelangriffe . Sie sollten stattdessen so etwas wie Alter verwenden.
Verschlüsseln:
openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc
Entschlüsseln:
openssl aes-256-cbc -d -a -in secrets.txt.enc -out secrets.txt.new
-md sha256
zu Ihrem Befehl zum Codieren und Decodieren hinzufügen , wenn Sie diese Datei auf einem anderen Computer verwenden möchten . Das sollte Sie gegen Inkompatibilitäten / Unterschiede in der OpenSSL-Version
Sie möchten wahrscheinlich gpg
stattdessen verwenden openssl
, siehe "Zusätzliche Hinweise" am Ende dieser Antwort. Aber um die Frage zu beantworten mit openssl
:
So verschlüsseln Sie:
openssl enc -aes-256-cbc -in un_encrypted.data -out encrypted.data
So entschlüsseln Sie:
openssl enc -d -aes-256-cbc -in encrypted.data -out un_encrypted.data
Hinweis: Beim Ver- oder Entschlüsseln werden Sie zur Eingabe eines Kennworts aufgefordert.
Ihre beste Informationsquelle openssl enc
wäre wahrscheinlich: https://www.openssl.org/docs/man1.1.1/man1/enc.html
Befehlszeile:
openssl enc
hat folgende Form:
openssl enc -ciphername [-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] [-p] [-P]
[-bufsize number] [-nopad] [-debug] [-none] [-engine id]
Erklärung der nützlichsten Parameter in Bezug auf Ihre Frage:
-e
Encrypt the input data: this is the default.
-d
Decrypt the input data.
-k <password>
Only use this if you want to pass the password as an argument.
Usually you can leave this out and you will be prompted for a
password. The password is used to derive the actual key which
is used to encrypt your data. Using this parameter is typically
not considered secure because your password appears in
plain-text on the command line and will likely be recorded in
bash history.
-kfile <filename>
Read the password from the first line of <filename> instead of
from the command line as above.
-a
base64 process the data. This means that if encryption is taking
place the data is base64 encoded after encryption. If decryption
is set then the input data is base64 decoded before being
decrypted.
You likely DON'T need to use this. This will likely increase the
file size for non-text data. Only use this if you need to send
data in the form of text format via email etc.
-salt
To use a salt (randomly generated) when encrypting. You always
want to use a salt while encrypting. This parameter is actually
redundant because a salt is used whether you use this or not
which is why it was not used in the "Short Answer" above!
-K key
The actual key to use: this must be represented as a string
comprised only of hex digits. If only the key is specified, the
IV must additionally be specified using the -iv option. When
both a key and a password are specified, the key given with the
-K option will be used and the IV generated from the password
will be taken. It probably does not make much sense to specify
both key and password.
-iv IV
The actual IV to use: this must be represented as a string
comprised only of hex digits. When only the key is specified
using the -K option, the IV must explicitly be defined. When a
password is being specified using one of the other options, the
IV is generated from this password.
-md digest
Use the specified digest to create the key from the passphrase.
The default algorithm as of this writing is sha-256. But this
has changed over time. It was md5 in the past. So you might want
to specify this parameter every time to alleviate problems when
moving your encrypted data from one system to another or when
updating openssl to a newer version.
Obwohl Sie speziell nach OpenSSL gefragt haben, möchten Sie möglicherweise GPG zum Zwecke der Verschlüsselung verwenden, die auf diesem Artikel basiert. OpenSSL vs GPG zum Verschlüsseln von externen Backups?
Um GPG zu verwenden, verwenden Sie die folgenden Befehle:
So verschlüsseln Sie:
gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data
So entschlüsseln Sie:
gpg --output un_encrypted.data --decrypt encrypted.data
Hinweis: Beim Ver- oder Entschlüsseln werden Sie zur Eingabe eines Kennworts aufgefordert.
gpg
lässt mich eine Datei entschlüsseln, ohne zur Eingabe eines Passworts aufgefordert zu werden. Es sieht so aus, als ob das Passwort für einen bestimmten Zeitraum gespeichert ist, was ich nicht möchte.
--no-symkey-cache
das Caching deaktiviert, wenn gpg mit verwendet wird --symmetric
, selbst wenn der Agent ausgeführt wird.
Verschlüsseln:
openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k symmetrickey
Entschlüsseln:
openssl enc -in encrypted.dat -out outfile.txt -d -aes256 -k symmetrickey
Einzelheiten finden Sie in den openssl(1)
Dokumenten.
-k symmetrickey
durch -pass stdin
oder-pass 'pass:PASSWORD'
-k symmetrickey
irreführend ist. Die -k
Option wird zur Angabe eines Kennworts verwendet, von dem OpenSSL den symmetrischen Schlüssel ableitet. Wenn Sie den symmetrischen Schlüssel angeben möchten, müssen Sie die -K
Option verwenden.
VERWENDEN SIE KEINE OPENSSL DEFAULT KEY-ABLEITUNG.
Derzeit wird die akzeptierte Antwort verwendet und sie wird nicht mehr empfohlen und ist nicht mehr sicher.
Es ist sehr gut möglich, dass ein Angreifer den Schlüssel einfach brutal erzwingt.
https://www.ietf.org/rfc/rfc2898.txt
PBKDF1 wendet eine Hash-Funktion an, die MD2 [6], MD5 [19] oder SHA-1 [18] sein soll, um Schlüssel abzuleiten. Die Länge des abgeleiteten Schlüssels wird durch die Länge der Hash-Funktionsausgabe begrenzt, die 16 Oktette für MD2 und MD5 und 20 Oktette für SHA-1 beträgt. PBKDF1 ist mit dem Schlüsselableitungsprozess in PKCS # 5 v1.5 kompatibel. PBKDF1 wird nur aus Gründen der Kompatibilität mit vorhandenen Anwendungen empfohlen, da die von ihm erzeugten Schlüssel für einige Anwendungen möglicherweise nicht groß genug sind.
PBKDF2 wendet eine Pseudozufallsfunktion an (ein Beispiel finden Sie in Anhang B.1), um Schlüssel abzuleiten. Die Länge des abgeleiteten Schlüssels ist im Wesentlichen unbegrenzt. (Der maximal effektive Suchraum für den abgeleiteten Schlüssel kann jedoch durch die Struktur der zugrunde liegenden Pseudozufallsfunktion begrenzt sein. Weitere Informationen finden Sie in Anhang B.1.) PBKDF2 wird für neue Anwendungen empfohlen.
Mach das:
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in hello -out hello.enc -k meow
openssl enc -d -aes-256-cbc -pbkdf2 -iter 20000 -in hello.enc -out hello.out
Hinweis : Iterationen bei der Entschlüsselung müssen mit Iterationen bei der Verschlüsselung identisch sein.
Iterationen müssen mindestens 10000 sein. Hier ist eine gute Antwort auf die Anzahl der Iterationen: https://security.stackexchange.com/a/3993
Außerdem ... haben wir hier genug Leute, die GPG empfehlen. Lies die verdammte Frage.
So verschlüsseln Sie:
$ openssl bf < arquivo.txt > arquivo.txt.bf
So entschlüsseln Sie:
$ openssl bf -d < arquivo.txt.bf > arquivo.txt
bf === Blowfish im CBC-Modus
Aktualisieren Sie mit einem zufällig generierten öffentlichen Schlüssel.
Encypt:
openssl enc -aes-256-cbc -a -salt -in {raw data} -out {encrypted data} -pass file:{random key}
Entschlüsseln:
openssl enc -d -aes-256-cbc -in {ciphered data} -out {raw data}
Ich habe ein vollständiges Tutorial dazu unter http://bigthinkingapplied.com/key-based-encryption-using-openssl/
Beachten Sie, dass die OpenSSL-CLI einen schwachen, nicht standardmäßigen Algorithmus verwendet, um die Passphrase in einen Schlüssel zu konvertieren. Die Installation von GPG führt dazu, dass verschiedene Dateien zu Ihrem Home-Verzeichnis hinzugefügt werden und ein Hintergrundprozess für einen GPG-Agenten ausgeführt wird. Wenn Sie maximale Portabilität und Kontrolle mit vorhandenen Tools wünschen, können Sie mit PHP oder Python auf die untergeordneten APIs zugreifen und direkt einen vollständigen AES-Schlüssel und IV übergeben.
Beispiel für einen PHP-Aufruf über Bash:
IV='c2FtcGxlLWFlcy1pdjEyMw=='
KEY='Twsn8eh2w2HbVCF5zKArlY+Mv5ZwVyaGlk5QkeoSlmc='
INPUT=123456789023456
ENCRYPTED=$(php -r "print(openssl_encrypt('$INPUT','aes-256-ctr',base64_decode('$KEY'),OPENSSL_ZERO_PADDING,base64_decode('$IV')));")
echo '$ENCRYPTED='$ENCRYPTED
DECRYPTED=$(php -r "print(openssl_decrypt('$ENCRYPTED','aes-256-ctr',base64_decode('$KEY'),OPENSSL_ZERO_PADDING,base64_decode('$IV')));")
echo '$DECRYPTED='$DECRYPTED
Dies gibt aus:
$ENCRYPTED=nzRi252dayEsGXZOTPXW
$DECRYPTED=123456789023456
Sie können auch die PHP- openssl_pbkdf2
Funktion verwenden, um eine Passphrase sicher in einen Schlüssel umzuwandeln.
Es gibt ein Open-Source-Programm, das ich online finde und das openssl zum Ver- und Entschlüsseln von Dateien verwendet. Dies geschieht mit einem einzigen Passwort. Das Tolle an diesem Open Source-Skript ist, dass es die ursprüngliche unverschlüsselte Datei löscht, indem es die Datei vernichtet. Das Gefährliche ist jedoch, dass Sie, sobald die ursprüngliche unverschlüsselte Datei verschwunden ist, sicherstellen müssen, dass Sie sich an Ihr Passwort erinnern, da dies sonst keine andere Möglichkeit ist, Ihre Datei zu entschlüsseln.
Hier ist der Link auf Github
https://github.com/EgbieAnderson1/linux_file_encryptor/blob/master/file_encrypt.py
Wie in den anderen Antworten erwähnt, verwendeten frühere Versionen von openssl eine Ableitungsfunktion für schwache Schlüssel, um einen AES-Verschlüsselungsschlüssel aus dem Kennwort abzuleiten. OpenSL v1.1.1 unterstützt jedoch eine stärkere Funktion zur Schlüsselableitung, bei der der Schlüssel aus dem Kennwort pbkdf2
mit einem zufällig generierten Salt und mehreren Iterationen von sha256-Hashing (standardmäßig 10.000) abgeleitet wird.
So verschlüsseln Sie eine Datei:
openssl aes-256-cbc -e -salt -pbkdf2 -iter 10000 -in plaintextfilename -out encryptedfilename
So entschlüsseln Sie eine Datei:
openssl aes-256-cbc -d -salt -pbkdf2 -iter 10000 -in encryptedfilename -out plaintextfilename
Zusätzliche Kommentare zu mti2935 gute Antwort.
Je höher die Iteration, desto besser der Schutz vor roher Gewalt. Sie sollten eine hohe Iteration verwenden, da Sie sich Leistung / Ressourcen leisten können.
Auf meinem alten Intel i3-7100 verschlüsselt eine ziemlich große Datei 1,5 GB:
time openssl enc -aes256 -e -pbkdf2 -iter 10000 -pass pass:"mypassword" -in "InputFile" -out "OutputFile"
Seconds: 2,564s
time openssl enc -aes256 -e -pbkdf2 -iter 262144 -pass pass:"mypassword" -in "InputFile" -out "OutputFile"
Seconds: 2,775s
Kein wirklicher Unterschied, habe aber die Speichernutzung nicht überprüft (?)
Mit den heutigen GPUs und den noch schnelleren von morgen scheint jede Sekunde eine Brute-Force-Iteration in Milliardenhöhe möglich zu sein.
Vor 12 Jahren NVIDIA GeForce 8800 Ultra
konnte a über 200.000 Millionen / Sek. Iterationen iterieren (MD5-Hashing allerdings)
PKCS5_PBKDF2_HMAC
. Sie sollten dieEVP_*
Funktionen zum Ver- und Entschlüsseln verwenden. Siehe EVP Symmetric Encryption and Decryption im OpenSSL-Wiki. In der Tat sollten Sie wahrscheinlich eine authentifizierte Verschlüsselung verwenden, da diese sowohl Vertraulichkeit als auch Authentizität bietet . Siehe EVP-authentifizierte Verschlüsselung und Entschlüsselung im OpenSSL-Wiki.