2016-01-25 5 views
1

В соответствии с документацией gpgme_op_encrypt метод GPGME способен выполнять симметричные задачи шифрования:Симметричное шифрование с GMGME

gpgme_op_encrypt (gpgme_ctx_t ctx, gpgme_key_t recp[], gpgme_encrypt_flags_t flags, gpgme_data_t plain, gpgme_data_t cipher) 

Если RECP является NULL, симметричное, а не шифрование с открытым ключом является выполняется. Симметрично зашифрованный шифрованный текст может быть расшифрован с помощью gpgme_op_decrypt. Обратите внимание, что в этом случае криптовальная база должна извлекать кодовую фразу от пользователя. В настоящее время симметричное шифрование поддерживается только для криптозащиты OpenPGP.

Но откуда взялся ключ, используемый для симметричного шифрования? Как-то можно извлечь этот ключ и перенести его на другое устройство (где я хотел бы расшифровать текст)?

ответ

1

session key for symmetric encryption is derived from a passphrase, который будет запрашиваться у пользователя через один из методов pinentry. В частности, выделение части текста, который вы уже цитировали:

Если recp имеет значение NULL, выполняется симметричное, а не шифрование с открытым ключом. Симметрично зашифрованный шифрованный текст может быть расшифрован с помощью gpgme_op_decrypt. Обратите внимание, что в этом случае криптовальное бэкэнд должно получить парольную фразу от пользователя. Симметричное шифрование в настоящее время поддерживается только для криптовальной базы OpenPGP.

Я не знаю, Вы можете извлечь ключ сеанса через GPGME, но на самом деле не нужно: все, что вам нужно знать, на другом конце ключевая фраза используется, и ключ сеанса может быть получена еще раз. Разумеется, вы также можете переопределить string-to-key-function used for OpenPGP.