Wie verschlüssele ich eine Datei schnell mit AES?

81

Ich möchte eine Datei mit AES-256 verschlüsseln. Wie kann ich das schnell und einfach tun und wie kann ich - oder jemand anderes - es wieder entschlüsseln?

Stefano Palazzo
quelle

Antworten:

86

Leider gibt es keine einfache Lösung, um Ihre Sachen zu sichern. Denken Sie an Ihren Anwendungsfall, vielleicht ist etwas anderes als einfaches AES besser geeignet.


Wenn Sie eine sehr einfache plattformunabhängige Verschlüsselung wünschen, können Sie openssl verwenden .

Bitte beachten Sie: Damit können Sie die Datei birthday-gift-ideas.txt vor Ihrem Mitbewohner verbergen. Erwarten Sie jedoch nicht, dass sie vor einem entschlossenen Angreifer sicher ist!

  1. Wie in den Kommentaren erwähnt, verwendet diese Methode eine naive Schlüsselableitungsfunktion. Daher muss Ihr Kennwort überdurchschnittlich gut sein, damit Sie die Chance haben, sicher zu sein.
  2. Darüber hinaus authentifiziert diese Methode den Chiffretext nicht. Dies bedeutet, dass ein Angreifer den Inhalt ändern oder beschädigen kann, ohne dass Sie es bemerken.
  3. Für viele Arten von Sicherheit reicht Verschlüsselung einfach nicht aus (z. B. können Sie nicht einfach Verschlüsselung verwenden, um sicher zu kommunizieren).

Wenn Sie noch openssl verwenden möchten:

  • Verschlüsselung:

    openssl aes-256-cbc -in attack-plan.txt -out message.enc

  • Entschlüsselung:

    openssl aes-256-cbc -d -in message.enc -out plain-text.txt

Sie können mit base64openssl die Nachricht verschlüsseln, indem Sie -asowohl die Verschlüsselung als auch die Entschlüsselung aktivieren . Auf diese Weise können Sie beispielsweise den Chiffretext in eine E-Mail-Nachricht einfügen. Es wird so aussehen:

stefano:~$ openssl aes-256-cbc -in attack-plan.txt -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=

Beachten Sie, dass Sie zwischen verschiedenen Chiffren und Betriebsarten wählen können. Für den normalen Gebrauch empfehle ich aes 256 im CBC-Modus. Dies sind die verfügbaren Verschlüsselungsmodi (nur mit AES):

aes-128-cbc ← this is okay
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc ← this is recommended
aes-256-ecb

Siehe auch:

Bitte beachten Sie:

OpenSSL wird Sie nach einem Passwort fragen. Dies ist kein Verschlüsselungsschlüssel, er ist nicht auf 32 Bytes begrenzt! Wenn Sie Dateien mit einer anderen Person übertragen möchten, sollte Ihr gemeinsames Geheimnis sehr stark sein. Auf dieser Website können Sie sich ein Bild davon machen, wie gut Ihr Passwort ist:

Warnung: Ich habe überprüft, dass diese Sites Ihr Passwort nicht an den Server senden, aber das kann sich jederzeit ändern. Verwenden Sie diese Sites mit dev tools / inspector und überprüfen Sie, ob sie etwas senden, bevor Sie Ihr sicheres Passwort eingeben.

Stefano Palazzo
quelle
9
openssl aes-256-cbcist kürzer als openssl enc -aes-256-cbcund funktioniert auch. Die Handbuchseite dazu ist durch Ausführen verfügbar man enc. Niemals ecbfür Daten verwenden, mit denen nicht gemildert werden soll, immer verwenden cbc. -saltist redundant, da es standardmäßig ist. Wenn Sie nicht angeben, wird -out filenamedie Ausgabe in die Standardausgabe geschrieben. Dies ist hilfreich, wenn Sie nur Daten analysieren, aber nicht auf die Festplatte schreiben müssen. Der nächste Befehl zeigt die Linie cound für Klar-: openssl aes-256-cbc -d -in filename | wc -l. ( eine andere Anwendung, eine Datei zu lesen: openssl aes-256-cbc -d -in filename | less)
Lekensteyn
1
Ich benutze fast genau das in einem Skript: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc mit dem Gegenteil, wie Sie es erwarten würden.
Belacqua
1
Es gibt keinen Grund, AES 256 gegenüber AES 128 vorzuziehen. @Lekensteyn Verwenden Sie die EZB niemals für vertrauliche Daten - grundsätzlich sollte die EZB niemals verwendet werden (nur für Experten: Die EZB sollte nur in bestimmten Fällen verwendet werden). Im Allgemeinen ist das opensslBefehlszeilentool meist ein Proof-of-Concept zum Testen der OpenSSL-Bibliothek. Die richtige Antwort auf diese Frage ist entweder GPG oder ein Archivierungsprogramm wie 7z .
Gilles
1
Ich möchte hinzufügen, dass openssl encdas eigentlich nicht so sicher ist, wenn man ein schwaches Passwort hat. Früher habe ich eine bestimmte Verwendung von empfohlen openssl enc, jetzt empfehle ich die Verwendung, gpgda eine KDF besser verwendet wird. Siehe diese Antwort .
Lekensteyn
2
-1 Für die Empfehlung von OpenSSL auf niedriger Ebene. Es bietet keine HMAC-Funktionalität und es fehlt, wie @Lekensteyn betont, die richtige KDF.
gertvdijk
26

Ich benutze gerne den gpgBefehl:

Verschlüsseln:

gpg --cipher-algo AES256 --symmetric filename.tar.gz

Stenografie:

gpg --cipher-algo AES256 -c filename.tar.gz

Dies wird nach einer Passphrase fragen.

Entschlüsseln:

gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg

Stenografie:

gpg -o filename.tar.gz -d filename.tar.gz.gpg

Sie können auch hinzufügen , cipher-algo AES256um ~/.gnupg/gpg.confdie Standardeinstellung zu machen AES256. (Laut Manpage ist es CAST5 )

scrrr
quelle
Sie können auch AES(dh AES-128) verwenden. AES-128 ist etwas schneller und nicht weniger sicher.
Gilles
2
+1. Beachten Sie auch, dass GnuPG bei Verwendung von AES auch die Nachrichtenauthentifizierung (HMAC) für Sie bereitstellt (wobei OpenSSL zum Zeitpunkt des Schreibens nicht die am besten bewertete Antwort ist). Hintergrundinfo: superuser.com/a/633716/157409
gertvdijk
Wie kann ich verhindern, dass gpgdas Passwort zwischengespeichert wird?
User76284
16

7z (wenn die Kennwortoption verwendet wird) verwendet eine 256-Bit-AES-Verschlüsselung (mit SHA256- Key-Stretching ).

Installieren Sie es ( p7zip-full), klicken Sie mit der rechten Maustaste auf eine Datei oder ein Verzeichnis, das Sie verschlüsseln möchten, und wählen Sie Komprimieren , .7z und Andere Optionen / Kennwort .

Bildbeschreibung hier eingeben

Klicken Sie zum Entschlüsseln mit der rechten Maustaste auf die .7z- Datei und wählen Sie Hier extrahieren .

ordnen
quelle
1
Wie startet man die GUI für 7z?
m0skit0
4

aescrypt

Die verlinkte Website enthält ein Open-Source-256-Bit-AES-Ver- / Entschlüsselungstool und ist plattformübergreifend - MacOs, Windows, Linux und andere über Java.

Verschlüsseln: aescrypt -e <file>

Entschlüsseln: aescrypt -d <file>

Sie können Ihren Basisordner mit der folgenden Syntax sichern und verschlüsseln:

tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes

Ubuntu-Installation

Laden Sie den Quellcode herunter und extrahieren Sie ihn

make
sudo make install

andere Plattformen

Laden Sie die Binärdateien oder den Quellcode von der Website herunter.

fossfreedom
quelle
3

Viele der Vorschläge, die ich gemacht hätte, wurden bereits in diesem Thread veröffentlicht. Grundsätzlich ist openssl der einfachste Weg, um eine Datei oder ein Skript zu verschlüsseln. Ich warne jedoch davor, AES-256 zu verwenden, nur weil es auf einigen Plattformen nicht in allen Versionen von openssl verfügbar ist. Die meisten neueren Betriebssysteme ... zB Linux haben es. Andere wie AIX 5.3 tun dies jedoch nicht (ich denke auch HP-UX). Wenn Sie beabsichtigen, Ihre Datei oder Ihr Skript plattformübergreifend zu verwenden, empfehle ich dringend die Verwendung von AES-128, da dies überall verfügbar ist.

Wie kann eine Datei mit AES-128 "schnell und einfach" verschlüsselt werden?

Eine Site wie www.ShellScrypt.com verwendet sehr intensiv openssl AES-128, um Shell-Skripte zu verschlüsseln, und macht dann die verschlüsselten Kopien der Skripte ausführbar. Alles, was Sie tun müssen, ist das Skript in die Site einzufügen, und eine Zip-Datei wird für Sie generiert. Diese ZIP-Datei enthält die verschlüsselte (und ausführbare) Version Ihrer Datei, wenn es sich um ein Skript handelt. Auf diese Weise können Sie eine Datei / ein Skript " einfach " und " bequem " verschlüsseln, ohne die Paket- oder Modulanforderungen auf jedem System erfüllen zu müssen, auf dem Sie das Skript verwenden möchten, oder mehrere komplexe und verwirrende Beschwörungsformeln von openssl-Befehlen ausführen zu müssen.

Unten ist ein grundlegender Befehl zum Ver- und Entschlüsseln von openssl dargestellt , der AES-128 verwendet:

test@test-VirtualBox:~$ 
test@test-VirtualBox:~$ echo precious-content | openssl aes-128-cbc -a -salt -k mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content
test@test-VirtualBox:~$ 
test@test-VirtualBox:~$
SimplifiedWorkings
quelle
2
Hinterlasse einfach einen Kommentar, um ein Heads-Up zu geben, dass „shellscrypt.com“ nicht erreichbar ist (auch bekannt als: Die Seite ist weg).
E-Sushi
1

Als Ergänzung zu Stefano Palazzos Antwort habe ich eine kleine Bash-Funktion erstellt, die ähnlich wie der Befehl base64 funktioniert.

Es wird eine Datei aes256 verschlüsseln und dann base64 verschlüsseln. Beim umgekehrten Vorgang dekodiert, entschlüsselt und spuckt base64 den ursprünglichen Klartext aus.

aes256() {
  decodeMe=""
  isPipe="$([ ! -t 0 ] && echo "true" || echo "false")"

  if [ "$1" = '-d' ] || [ "$1" = '--decode' ]; then
    decodeMe="-d"
    shift
  fi

  if [ "$isPipe" = "true" ]; then
    read input
    printf '%s\n' "$input" | openssl aes-256-cbc -a $decodeMe
    exitCode="$?"
  else
    openssl aes-256-cbc -a $decodeMe -in "$*"
    exitCode="$?"
  fi

  unset isPipe decodeMe input
  return "$exitCode"
}

Verwendungszweck:

echo "my string" | aes256
# enter aes-256-cbc encryption password
# Returns: U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=

echo "U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=" | aes256 -d
# enter aes-256-cbc decryption password
# Returns: my string

aes256 file.plain > file.crypt
# enter aes-256-cbc encryption password

aes256 -d file.crypt
# enter aes-256-cbc decryption password
# Spits out original unencrypted file.
aggregate1166877
quelle