it-swarm.com.de

So verschlüsseln Sie eine große Datei in openssl mit dem öffentlichen Schlüssel

Wie kann ich eine große Datei mit einem öffentlichen Schlüssel verschlüsseln, damit niemand außer demjenigen, der über den privaten Schlüssel verfügt, sie entschlüsseln kann?

Ich kann öffentliche und private RSA-Schlüssel festlegen, aber wenn es um das Verschlüsseln einer großen Datei mit dem folgenden Befehl geht:

openssl rsautl -encrypt -pubin -inkey public.pem -in myLargeFile.xml -out myLargeFile_encrypted.xml

und wie kann ich die entschlüsselung auch durchführen ....

ich erstelle meinen privaten und öffentlichen Schlüssel mit den folgenden Befehlen

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

Ich erhalte diesen Fehler:

RSA operation error
3020:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:.\crypto\rsa\rsa_pk1.c:151:

Ich habe versucht, Schlüssel mit einer Größe von 1024 bis 1200 Bit zu erstellen. Kein Glück, derselbe Fehler

68
yamuna mathew

Public-Key-Krypto dient nicht zum Verschlüsseln beliebig langer Dateien. Man verwendet eine symmetrische Verschlüsselung (sagen wir AES), um die normale Verschlüsselung durchzuführen. Jedes Mal, wenn ein neuer zufälliger symmetrischer Schlüssel generiert, verwendet und dann mit der RSA-Verschlüsselung (öffentlicher Schlüssel) verschlüsselt wird. Der Chiffretext wird zusammen mit dem verschlüsselten symmetrischen Schlüssel an den Empfänger übertragen. Der Empfänger entschlüsselt den symmetrischen Schlüssel mit seinem privaten Schlüssel und entschlüsselt die Nachricht anschließend mit dem symmetrischen Schlüssel.

Der private Schlüssel wird niemals gemeinsam genutzt, nur der öffentliche Schlüssel wird zum Verschlüsseln der zufälligen symmetrischen Verschlüsselung verwendet.

74
n.m.

Lösung für die sichere und hochsichere Verschlüsselung beliebiger Dateien in OpenSSL und über die Befehlszeile:

Sie sollten ein X.509-Zertifikat zum Verschlüsseln von Dateien im PEM-Format bereithalten.

Datei verschlüsseln:

openssl smime -encrypt -binary -aes-256-cbc -in plainfile.Zip -out encrypted.Zip.enc -outform DER yourSslCertificate.pem

Was ist was:

  • smime - ssl-Befehl für das S/MIME-Dienstprogramm ( smime (1) )
  • - verschlüsseln - gewählte Methode für die Dateiverarbeitung
  • - binär - sichere Dateiverarbeitung verwenden. Normalerweise wird die Eingabenachricht gemäß der S/MIME-Spezifikation in das "kanonische" Format konvertiert. Diese Option deaktiviert sie. Es ist für alle Binärdateien (wie Bilder, Sounds, Zip-Archive) erforderlich.
  • - aes-256-cbc - ausgewählte Verschlüsselung AES in 256 Bit für die Verschlüsselung (stark). Wenn nicht angegeben, wird 40-Bit-RC2 verwendet (sehr schwach). ( nterstützte Chiffren )
  • - in plainfile.Zip - Name der Eingabedatei
  • - out encrypted.Zip.enc - Ausgabedateiname
  • - outform DER - Ausgabedatei als Binärdatei kodieren. Wenn nicht angegeben, wird die Datei von base64 codiert und die Dateigröße um 30% erhöht.
  • yourSslCertificate.pem - Dateiname Ihres Zertifikats. Das sollte im PEM-Format sein.

Dieser Befehl kann sehr effektiv große Dateien unabhängig von ihrem Format stark verschlüsseln.
Bekanntes Problem: Beim Versuch, große Dateien (> 600 MB) zu verschlüsseln, tritt ein Fehler auf. Es wird kein Fehler ausgegeben, aber die verschlüsselte Datei wird beschädigt. Überprüfen Sie immer jede Datei! (oder verwenden Sie PGP - das die Verschlüsselung von Dateien mit öffentlichen Schlüsseln besser unterstützt)

Datei entschlüsseln:

openssl smime -decrypt -binary -in encrypted.Zip.enc -inform DER -out decrypted.Zip -inkey private.key -passin pass:your_password

Was ist was:

  • - informieren Sie DER - wie -outform oben
  • - inkey private.key - Dateiname Ihres privaten Schlüssels. Das sollte im PEM-Format sein und kann per Passwort verschlüsselt werden.
  • - passin pass: your_password - Ihr Passwort für die Verschlüsselung des privaten Schlüssels. ( Argumente für Passphrasen )
70
JakubBoucek

Sie können eine große Datei nicht direkt mit rsautl verschlüsseln. Führen Sie stattdessen Folgendes aus:

  1. Erzeugen Sie einen Schlüssel mit openssl Rand, z.B. openssl Rand 32 -out keyfile
  2. Verschlüsseln Sie die Schlüsseldatei mit openssl rsautl
  3. Verschlüsseln Sie die Daten mit openssl enc mit dem generierten Schlüssel aus Schritt 1.
  4. Packen Sie die verschlüsselte Schlüsseldatei mit den verschlüsselten Daten. Der Empfänger muss den Schlüssel mit seinem privaten Schlüssel entschlüsseln und anschließend die Daten mit dem resultierenden Schlüssel entschlüsseln.
30
Hasturkun

Das Verschlüsseln einer sehr großen Datei mit smime wird nicht empfohlen, da Sie möglicherweise große Dateien mit der Option -stream verschlüsseln können, die resultierende Datei jedoch aufgrund von Hardwareeinschränkungen nicht entschlüsseln können siehe: Problem beim Entschlüsseln großer Dateien

Wie oben erwähnt, dient Public-Key-Krypto nicht zum Verschlüsseln beliebig langer Dateien. Daher erzeugen die folgenden Befehle eine Passphrase, verschlüsseln die Datei mit symmetrischer Verschlüsselung und verschlüsseln die Passphrase dann mit dem asymmetrischen (öffentlichen Schlüssel). Hinweis: Der Smime umfasst die Verwendung eines öffentlichen Primärschlüssels und eines Sicherungsschlüssels zum Verschlüsseln der Passphrase. Ein Backup-Paar aus öffentlichem und privatem Schlüssel wäre umsichtig.

Zufällige Passwortgenerierung

Richten Sie den Wert RANDFILE in einer Datei ein, auf die der aktuelle Benutzer zugreifen kann, generieren Sie die Datei passwd.txt und bereinigen Sie die Einstellungen

export OLD_RANDFILE=$RANDFILE
RANDFILE=~/Rand1
openssl Rand -base64 2048 > passwd.txt
rm ~/Rand1
export RANDFILE=$OLD_RANDFILE

Verschlüsselung

Verwenden Sie die folgenden Befehle, um die Datei mit dem Inhalt von passwd.txt als Kennwort und AES256 als base64-Datei (Option -a) zu verschlüsseln. Verschlüsseln Sie die Datei passwd.txt mit asymetrischer Verschlüsselung in die Datei XXLarge.crypt.pass. Verwenden Sie dazu einen öffentlichen Primärschlüssel und einen Sicherungsschlüssel.

openssl enc -aes-256-cbc -a -salt -in XXLarge.data -out XXLarge.crypt -pass file:passwd.txt
openssl smime -encrypt -binary -in passwd.txt -out XXLarge.crypt.pass -aes256 PublicKey1.pem PublicBackupKey.pem
rm passwd.txt

Entschlüsselung

Die Entschlüsselung entschlüsselt einfach die Datei XXLarge.crypt.pass zu passwd.tmp, entschlüsselt die Datei XXLarge.crypt zu XXLarge2.data und löscht die Datei passwd.tmp.

openssl smime -decrypt -binary -in XXLarge.crypt.pass -out passwd.tmp -aes256 -recip PublicKey1.pem -inkey PublicKey1.key
openssl enc -d -aes-256-cbc -a -in XXLarge.crypt -out XXLarge2.data -pass file:passwd.tmp
rm passwd.tmp

Dies wurde mit> 5 GB Dateien getestet.

5365295400 Nov 17 10:07 XXLarge.data
7265504220 Nov 17 10:03 XXLarge.crypt
      5673 Nov 17 10:03 XXLarge.crypt.pass
5365295400 Nov 17 10:07 XXLarge2.data
22
Ipswitch

Ich fand die Anweisungen unter http://www.czeskis.com/random/openssl-encrypt-file.html nützlich.

So umschreiben Sie die verknüpfte Site mit Dateinamen aus Ihrem Beispiel:

Generieren Sie einen symmetrischen Schlüssel, da Sie damit große Dateien verschlüsseln können

openssl Rand -base64 32 > key.bin

Verschlüsseln Sie die große Datei mit dem symmetrischen Schlüssel

openssl enc -aes-256-cbc -salt -in myLargeFile.xml \
  -out myLargeFile.xml.enc -pass file:./key.bin

Verschlüsseln Sie den symmetrischen Schlüssel, damit Sie ihn sicher an die andere Person senden können

openssl rsautl -encrypt -inkey public.pem -pubin -in key.bin -out key.bin.enc

Zerstöre den unverschlüsselten symmetrischen Schlüssel, damit niemand ihn findet

shred -u key.bin

An dieser Stelle senden Sie den verschlüsselten symmetrischen Schlüssel (key.bin.enc) und die verschlüsselte große Datei (myLargeFile.xml.enc) an die andere Person

Die andere Person kann dann den symmetrischen Schlüssel mit ihrem privaten Schlüssel entschlüsseln

openssl rsautl -decrypt -inkey private.pem -in key.bin.enc -out key.bin

Jetzt können sie den symmetrischen Schlüssel verwenden, um die Datei zu entschlüsseln

openssl enc -d -aes-256-cbc -in myLargeFile.xml.enc \
  -out myLargeFile.xml -pass file:./key.bin

Und du bist fertig. Die andere Person hat die entschlüsselte Datei und sie wurde sicher gesendet.

16
Tom Saleeba

So verschlüsseln Sie große Dateien (> 600 MB) sicher mit openssl smime Sie müssen jede Datei in kleine Stücke aufteilen:

# Splits large file into 500MB pieces
split -b 500M -d -a 4 INPUT_FILE_NAME input.part.

# Encrypts each piece
find -maxdepth 1 -type f -name 'input.part.*' | sort | xargs -I % openssl smime -encrypt -binary -aes-256-cbc -in % -out %.enc -outform DER PUBLIC_PEM_FILE

Zur Information, hier ist, wie man alle Teile entschlüsselt und zusammensetzt:

# Decrypts each piece
find -maxdepth 1 -type f -name 'input.part.*.enc' | sort | xargs -I % openssl smime -decrypt -in % -binary -inform DEM -inkey PRIVATE_PEM_FILE -out %.dec

# Puts all together again
find -maxdepth 1 -type f -name 'input.part.*.dec' | sort | xargs cat > RESTORED_FILE_NAME
3

Vielleicht sollten Sie sich die akzeptierte Antwort auf diese Frage ansehen ( Wie verschlüsselt man Daten in PHP mit öffentlichen/privaten Schlüsseln? ).

Anstatt die Beschränkung der Nachrichtengröße (oder vielleicht ein Merkmal) von RSA manuell zu umgehen, wird gezeigt, wie Sie mit der S/mime-Funktion von OpenSSL dasselbe tun und nicht manuell mit dem symmetrischen Schlüssel jonglieren müssen.

2
Cray