Как правильно зашифровать с помощью SHA256 с помощью команды GPG?

Как правильно зашифровать с помощью SHA256 с помощью команды GPG?

Я использовал следующую команду для шифрования:

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

и расшифровка:

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

Мне было интересно, безопасно ли это делать таким образом, я вижу только одну ссылку в интернете на эту команду,здесь, а другие веб-сайты запускают его без --cipher-algo AES256команды, которая будет использовать шифр по умолчанию, например:

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

Разве мне не нужно добавлять туда соль, нет ли команды для добавления соли, как в OpenSSL, или это делается автоматически программой?

А что произойдет, если я запущу его вот так, без --symmetric:

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

Мой вопрос о том, как правильно запустить эту команду, чтобы создать безопасный файл, зашифрованный SHA256. Есть ли разница между командами выше?

решение1

Если вы используете стабильную версию gpg с --cipher-algo AES256, то она должна правильно шифровать с помощью AES256 (SHA256 — это хэш).

Он автоматически выбирает свои собственные раунды преобразования соли и ключа, так что вам не нужно (и не можете) выбирать потенциально слабые варианты самостоятельно. OpenSSL имеет множество вариантов, но его значения по умолчанию (особенно с его enc) могут быть не самыми сильными. Ваш связанный вопрос на самом деле ссылается на мой другой ответ оOpenSSL против GPG- в принципе gpg работает, он тестировался десятилетиями, может поставить в тупик крупные правительства, а encкоманда OpenSSL может по-прежнему не иметь опции для подсчета итераций (страница руководства 1.1.0f от 2017-11-02 все еще содержит эту ошибку).

Добавьте несколько (нескольких) -vопций, чтобы увидеть больше деталей, например соль (772B0F3B94AD86BA ниже):

$ 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

Если вы его пропустите, --symmetricто gpg попытается угадать, что вы имеете в виду, если файл не зашифрован gpg, то он прекратит попытки/завершит операцию с ошибкой:

$ 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

Если пропустить эту --cipher-algoопцию, то следует использовать "Используемый по умолчанию симметричный шифр - AES-128" (как man gpgуказано на странице об этой опции), но значения по умолчанию могут различаться в зависимости от версии или, как я полагаю, переопределяться вашими личными настройками. К вашему сведению, доступные алгоритмы могут быть перечислены с помощью этой --versionопции, например:

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

Вам также не нужна эта --outputопция, если она вам не нравится, gpg добавит и удалит .gpgрасширение по мере необходимости.

  • К вашему сведению, вот ссылка наRFC2440описание элементов данных, используемых OpenPGP (по крайней мере, в 1999 году, хотя я уверен, что это почти полностью все еще актуально, особенно описания таких вещей, как String-to-key (s2k), а также итераций и соли)

Связанный контент