Openpgp: использование оболочки python python-gnupg 'error - sign-encrypt 17' - ошибка только при подписании
Для шифрования и подписи сообщения я хочу использовать модуль python-gnupgp. Модуль представляет собой оболочку gnupgp. Шифрование работает нормально, но если я укажу параметр знака, я получаю сообщение об ошибке.
gpg: ВНИМАНИЕ: небезопасные разрешения для homedir '/home // Programming / GnuPGP / pgphome'\ ngpg: Предупреждение: не используется 'xxx' в качестве ключа по умолчанию: нет секретного ключа \ ngpg: все значения передаются в '--default-key' игнорируется \ n [GNUPG:] KEY_CONSIDERED xxx 0\ n [GNUPG:] KEY_CONSIDERED AADFCABF9D6B54C7938195737DC2E276767872B0 0\ ngpg: нет секретного ключа по умолчанию: нет секретного ключа \ n [GNUPG:] INV_SGNRG 9: \ n ngpg: [stdin]: sign+encrypt failed: Нет секретного ключа \ n "
Но я импортировал секретный ключ и хочу зашифровать с помощью
other_public.asc
и подписываюсь моим личным ключом.
Использую модуль python-openpgp. Это мой код:
import gnupg
import os
pgp_home = os.path.join(os.getcwd(), 'pgphome')
gpg = gnupg.GPG(gnupghome=pgp_home)
cwd = os.getcwd()
own_priv_key_path = os.path.join(cwd, 'assets/keys/own_secret.asc')
own_priv_key_data = open(own_priv_key_path).read()
own_priv_key = gpg.import_keys(own_priv_key_data, passphrase="hellomatthias1")
own_public_key_path = os.path.join(cwd, 'assets/keys/own_public.asc')
own_public_key_data = open(own_public_key_path).read()
own_public_key = gpg.import_keys(own_public_key_data)
other_public_key_path = os.path.join(cwd, 'assets/keys/other_pub.asc')
other_public_key_data = open(other_public_key_path).read()
other_public_key = gpg.import_keys(other_public_key_data)
gpg.trust_keys(own_public_key.fingerprints, trustlevel="TRUST_ULTIMATE")
gpg.trust_keys(own_priv_key.fingerprints, trustlevel="TRUST_ULTIMATE")
gpg.trust_keys(other_public_key.fingerprints, trustlevel="TRUST_ULTIMATE")
dummy_file_path = os.path.join(cwd, 'assets/dummyfiles/hello.txt')
output_file_path = os.path.join(cwd, 'assets/dummyfiles/encrypted_hello.txt')
res = gpg.encrypt("hello how are you", recipients=other_public_key.fingerprints[0], sign=own_priv_key.fingerprints[0], passphrase='passphraseofownprivatekey1')
Что я здесь делаю не так?
1 ответ
Я предполагаю, что проблема связана не с кодом, а с тем фактом, что оболочка python-gnupg использует непосредственно исполняемый файл gpg, поэтому связана требованиями исполняемого файла gpg.
Прочитав сообщения об ошибках, вы увидите, что исполняемый файл gpg отказывается от вашего секретного ключа:
gpg: WARNING: unsafe permissions on homedir '/home//Programming/GnuPGP/pgphome'
gpg: Warning: not using 'xxx' as default key: No secret key
gpg: all values passed to '--default-key' ignored
Gpg требует, чтобы секретные ключи хранились в безопасном домашнем каталоге, то есть в домашнем хранилище с доступом только для пользователей. Кажется, вам нужно уменьшить разрешения на домашнем сервере
$ chmod go-rwx /home//Programming/GnuPGP/pgphome
После этого gpg больше не должен игнорировать ваши ключи.
Может потребоваться исключить доступ для записи, я так не думаю, но в случае использования тогда:
$ chmod u-wx,go-rwx /home//Programming/GnuPGP/pgphome