Я использовал следующую команду для шифрования:
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), а также итераций и соли)