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 AES256
Befehl 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 AES256
sollte 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- enc
Befehl 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) -v
Optionen 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-algo
sollte „Der standardmäßig verwendete symmetrische Verschlüsselungstyp ist AES-128“ verwendet werden (wie auf der man gpg
Seite 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, --output
es sei denn, Sie möchten sie. GPG fügt eine .gpg
Erweiterung 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)