【发布时间】:2019-07-03 17:16:12
【问题描述】:
我正在构建一个 python3 应用程序,它会生成 GPG 密钥、要求输入密码和解密/加密文件。我希望每次启动应用程序时都需要输入正确的密码。
目前看来,gpg-agent 在应用程序关闭后仍保留密码。重新启动应用程序不需要正确的密码来解密数据。
所以我有了将密钥(公共和私有)导出到 ASCII 保护文件中的想法,在启动时将其导入,并在应用程序关闭时再次从密钥环中删除密钥。当我尝试删除密钥(首先是私钥,如documentation 处所述)并显示结果对象的标准错误时,它会显示“No Pinentry”错误。
我写了一个简短的测试程序:
import gnupg
gpg = gnupg.GPG(gnupghome="testhome")
input_data=gpg.gen_key_input(name_email="vault@mydomain.com", key_type="DSA", subkey_type="RSA",passphrase="Test")
key = gpg.gen_key(input_data)
if not gpg.list_keys():
print(key.stderr)
exit()
status=gpg.delete_keys(gpg.list_keys(True)[0]['fingerprint'],secret=True, passphrase="Test")
print(status.stderr)
最后一个打印语句显示:
gpg: Hinweis: Keine voreingestellte Optionendatei '...testhome/gpg.conf' vorhanden
gpg: enabled debug flags: ipc
gpg: DBG: chan_5 <- OK Pleased to meet you, process 2103
gpg: DBG: connection to agent established
gpg: DBG: chan_5 -> RESET
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION ttytype=xterm-256color
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION display=:0
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION xauthority=/run/user/1000/gdm/Xauthority
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=XMODIFIERS=@im=ibus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=GTK_IM_MODULE=ibus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=QT_IM_MODULE=ibus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> GETINFO version
gpg: DBG: chan_5 <- D 2.2.4
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION allow-pinentry-notify
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION agent-awareness=2.1.0
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION pinentry-mode=loopback
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> HAVEKEY A50FB634D9E33FEE1D9B8861A563F4C53BC20CD1
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> HAVEKEY A50FB634D9E33FEE1D9B8861A563F4C53BC20CD1
gpg: DBG: chan_5 <- OK
[GNUPG:] KEY_CONSIDERED 12E6713D592E3FA210EE05E9558B0205D1894962 0
gpg: DBG: chan_5 -> SETKEYDESC Möchten+Sie+den+ausgewählten+geheimen+OpenPGP+Schlüssel+wirklich+dauerhaft+entfernen?+(j/N)%0A%22Autogenerated+Key+<vault@mydomain.com>%22%0A2048-Bit+DSA+Schlüssel,+ID+558B0205D1894962,%0Aerzeugt+2019-07-03.%0A?
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> DELETE_KEY A50FB634D9E33FEE1D9B8861A563F4C53BC20CD1
gpg: DBG: chan_5 <- ERR 67108949 Kein Pinentry <GPG Agent>
gpg: Fehler beim Löschen des privaten Schlüssels: Kein Pinentry
gpg: DBG: chan_5 -> HAVEKEY 489F5816348DA3C7D2540D5748CD0AC1E4ACA459
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> SETKEYDESC Möchten+Sie+den+ausgewählten+geheimen+OpenPGP+Unterschlüssel+wirklich+dauerhaft+entfernen?+(j/N)%0A%22Autogenerated+Key+<vault@mydomain.com>%22%0A3072-Bit+RSA+Schlüssel,+ID+42CA4781026C931E,%0Aerzeugt+2019-07-03+(Hauptschlüssel-ID+558B0205D1894962).%0A?
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> DELETE_KEY 489F5816348DA3C7D2540D5748CD0AC1E4ACA459
gpg: DBG: chan_5 <- ERR 67108949 Kein Pinentry <GPG Agent>
gpg: Fehler beim Löschen des privaten Unterschlüssels: Kein Pinentry
gpg: 12E6713D592E3FA210EE05E9558B0205D1894962: delete key failed: Kein Pinentry
gpg: secmem usage: 224/65536 bytes in 1 blocks
由于错误信息包含德语,我将尝试正确翻译这些段落:
gpg: Notice: No preset options file '...testhome/gpg.conf' found
gpg: enabled debug flags: ipc
gpg: DBG: chan_5 <- OK Pleased to meet you, process 2103
gpg: DBG: connection to agent established
gpg: DBG: chan_5 -> RESET
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION ttytype=xterm-256color
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION display=:0
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION xauthority=/run/user/1000/gdm/Xauthority
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=XMODIFIERS=@im=ibus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=GTK_IM_MODULE=ibus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION putenv=QT_IM_MODULE=ibus
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> GETINFO version
gpg: DBG: chan_5 <- D 2.2.4
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION allow-pinentry-notify
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION agent-awareness=2.1.0
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> OPTION pinentry-mode=loopback
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> HAVEKEY A50FB634D9E33FEE1D9B8861A563F4C53BC20CD1
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> HAVEKEY A50FB634D9E33FEE1D9B8861A563F4C53BC20CD1
gpg: DBG: chan_5 <- OK
[GNUPG:] KEY_CONSIDERED 12E6713D592E3FA210EE05E9558B0205D1894962 0
gpg: DBG: chan_5 -> SETKEYDESC
Do you really want to delete the private OpenPGP subkey permanently? (y/N) Autogenerated+Key+<vault@mydomain.com>%22%0A2048-Bit+DSA+Key,+ID+558B0205D1894962,generated+2019-07-03.%0A?
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> DELETE_KEY A50FB634D9E33FEE1D9B8861A563F4C53BC20CD1
gpg: DBG: chan_5 <- ERR 67108949 No Pinentry <GPG Agent>
gpg: Error during deletion of the private key: No Pinentry
gpg: DBG: chan_5 -> HAVEKEY 489F5816348DA3C7D2540D5748CD0AC1E4ACA459
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> SETKEYDESC
Do you really want to delete the private OpenPGP subkey permanently? (y/N) Autogenerated+Key+<vault@mydomain.com>%22%0A3072-Bit+RSA+Key,+ID+42CA4781026C931E,generated+2019-07-03+(Main Key-ID+558B0205D1894962).%0A?
gpg: DBG: chan_5 <- OK
gpg: DBG: chan_5 -> DELETE_KEY 489F5816348DA3C7D2540D5748CD0AC1E4ACA459
gpg: DBG: chan_5 <- ERR 67108949 No Pinentry <GPG Agent>
gpg: Error during deletion of the private subkey: No Pinentry
gpg: 12E6713D592E3FA210EE05E9558B0205D1894962: delete key failed: No Pinentry
gpg: secmem usage: 224/65536 bytes in 1 blocks
我运行的是 Ubuntu 18.04,python3.6.7,gnupg 版本 2.2.4(如 gpg.version 所示)
【问题讨论】:
标签: python-3.x gnupg