Wie verschlüsselt man richtig als SHA256 mit dem GPG-Befehl?

Wie verschlüsselt man richtig als SHA256 mit dem GPG-Befehl?

Ich habe den folgenden Befehl zur Verschlüsselung verwendet:

gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data

und Entschlüsselung:

gpg --output un_encrypted.data --decrypt encrypted.data

Ich habe mich gefragt, ob es sicher ist, es auf diese Weise zu tun. Ich sehe im Internet nur 1 Referenz für diesen Befehl.Hier, und andere Websites führen es ohne den --cipher-algo AES256Befehl aus, wodurch die Standardverschlüsselung wie folgt verwendet würde:

gpg --output encrypted.data --symmetric un_encrypted.data

Muss ich dort nicht ein Salt hinzufügen, gibt es keinen Befehl zum Bereitstellen eines Salts wie bei OpenSSL oder wird das automatisch von der Software erledigt?

Was passiert außerdem, wenn ich es so ausführe, ohne --symmetric:

gpg --output encrypted.data --cipher-algo AES256 un_encrypted.data

Meine Frage betrifft die ordnungsgemäße Ausführung dieses Befehls, um eine sichere, mit SHA256 verschlüsselte Datei zu erstellen. Gibt es einen Unterschied zwischen den obigen Befehlen?

Antwort1

Wenn Sie eine stabile Version von GPG mit verwenden, --cipher-algo AES256sollte die Verschlüsselung mit AES256 ordnungsgemäß erfolgen (SHA256 ist ein Hash).

Es wählt seine eigenen Salt- und Schlüsseltransformationsrunden automatisch aus, sodass Sie potenziell schwache Optionen nicht selbst auswählen müssen (und können). OpenSSL bietet viele Optionen, aber die Standardeinstellungen (insbesondere bei enc) sind möglicherweise nicht die stärksten. Ihre verlinkte Frage bezieht sich tatsächlich auf meine andere Antwort zuOpenSSL vs. GPG– grundsätzlich funktioniert gpg, es ist seit Jahrzehnten erprobt, kann große Regierungen vor Rätsel stellen und der OpenSSL- encBefehl verfügt möglicherweise immer noch nicht über eine Option zur Iterationszählung (auf der Manpage 1.1.0f vom 02.11.2017 wird dieser Fehler immer noch aufgeführt).

Fügen Sie einige (mehrere) -vOptionen hinzu, um weitere Details wie das Salt anzuzeigen (772B0F3B94AD86BA unten):

$ gpg -vvvvvvvvv  test.gpg 
gpg: using character set 'utf-8'
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
# off=0 ctb=8c tag=3 hlen=2 plen=13
:symkey enc packet: version 4, cipher 9, s2k 3, hash 2
        salt 772B0F3B94AD86BA, count 9961472 (211)
gpg: AES256 encrypted data
# off=15 ctb=d2 tag=18 hlen=2 plen=0 partial new-ctb
:encrypted data packet:
        length: unknown
        mdc_method: 2
gpg: encrypted with 1 passphrase
# off=36 ctb=a3 tag=8 hlen=1 plen=0 indeterminate
:compressed packet: algo=1
# off=38 ctb=ad tag=11 hlen=3 plen=25420
:literal data packet:
        mode b (62), created 1519523431, name="test",
        raw data: 25405 bytes
gpg: original file name='test'
gpg: decryption okay

Wenn Sie es weglassen --symmetric, versucht GPG zu erraten, was Sie meinen. Wenn die Datei nicht GPG-verschlüsselt ist, wird es aufgeben/fehlschlagen:

$ gpg -vvvvvvvvv --cipher-algo AES256 test 
gpg: using character set 'utf-8'
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: no valid OpenPGP data found.
gpg: processing message failed: Unknown system error

Wenn Sie die Option weglassen, --cipher-algosollte „Der standardmäßig verwendete symmetrische Verschlüsselungstyp ist AES-128“ verwendet werden (wie auf der man gpgSeite zu dieser Option angegeben), aber die Standardeinstellungen können je nach Version unterschiedlich sein oder werden meines Erachtens durch Ihre persönlichen Einstellungen überschrieben. Zu Ihrer Information: Verfügbare Algorithmen können mit der Option aufgelistet werden --version, wie:

Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Sie benötigen diese Option auch nicht wirklich, --outputes sei denn, Sie möchten sie. GPG fügt eine .gpgErweiterung nach Bedarf hinzu und entfernt sie.

  • Zu Ihrer Information, hier ist ein Link zuRFC2440Beschreibung der von OpenPGP verwendeten Datenelemente (zumindest im Jahr 1999, obwohl ich sicher bin, dass es fast vollständig immer noch relevant ist, insbesondere Beschreibungen von Dingen wie String-to-Key (s2k) und Iterationen und Salt)

verwandte Informationen