gpg2导入gpg1密钥失败(gpg 2.1.15,Ubuntu 17.10)

时间:2017-06-30 01:53:42

标签: ubuntu gnupg

当我尝试使用gpg2导入我很好地导出的gpg1键时,公钥导入工作正常:

gpg --import /path/to/publickey.gpg

gpg: directory '/home/me/.gnupg' created
gpg: new configuration file '/home/me/.gnupg/dirmngr.conf' created
gpg: new configuration file '/home/me/.gnupg/gpg.conf' created
gpg: keybox '/home/me/.gnupg/pubring.kbx' created
gpg: /home/me/.gnupg/trustdb.gpg: trustdb created
gpg: key ABCDEF1234567890: public key "Me <me@me.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

但导入密钥失败(注意:使用--allow-secret-key-import时的结果相同):

gpg --import /path/to/secretkey.gpg

gpg: key ABCDEF1234567890: "Me <me@me.com>" not changed
gpg: key ABCDEF1234567890/ABCDEF1234567890: error sending to agent: No such file or directory
gpg: error building skey array: No such file or directory
gpg: Total number processed: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1

我在这(在Ubuntu Zesty 17.04上):

gpg --version

gpg: WARNING: unsafe permissions on homedir '/home/me/.gnupg'
gpg (GnuPG) 2.1.15
libgcrypt 1.7.6-beta
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/me/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cypher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

如果我尝试使用gpg 1.4.21(在同一台机器上,可以使用sudo apt-get install gnupg1获得),完全相同的导入步骤可以正常工作。

3 个答案:

答案 0 :(得分:1)

https://unix.stackexchange.com/questions/318385/no-such-file-or-directory-when-generating-a-gpg-key提到&#34;没有这样的文件或目录&#34;可以来自丢失的目录〜/ .gnupg / private-keys-v1.d

gpg选项--debug-level guru --debug-all --verbose可能有所帮助 对此有所了解。

答案 1 :(得分:1)

GnuPG 1.4 plus 2.0与2.1及更高版本之间的差异为explained in depth here。该页面的第一部分处理对秘密密钥处理方式的更改。

当您从1.4或2.0的现有实例迁移到GPG的现代分支时,您的secring.gpg文件将导入为新格式,并且不能直接用作密钥环文件。首次调用GPG 2.1或2.2时,此操作将自动完成。同时,您的公共密钥环(pubring.gpg)将转换为较新的密钥箱格式(pubring.kbx)。

此转换过程仅执行一次,GnuPG通过将隐藏文件写入$ GNUPGHOMEDIR来跟踪此情况(通常为~/.gnupg,但可以通过运行gpgconf --list-dirs进行确认,homedir应该为最后一行)。隐藏的文件名为.gpg-v21-migrated,如果由于某种原因您需要重新运行导入过程,然后只需删除该文件并重新启动gpg-agent即可完成工作。

要正确地重新加载gpg-agent,请执行以下操作:

bash-4.4$ gpg-connect-agent
> RELOADAGENT
OK
> BYE
OK closing connection
bash-4.4$ 

要正确地重新启动gpg-agent,请执行以下操作:

bash-4.4$ gpg-connect-agent
> KILLAGENT
OK closing connection
bash-4.4$ 

下一个GPG命令将再次启动它。

至于private-keys-v1.d /目录;是的,它确实包含秘密密钥材料,但是它是keygrip格式并已加密,因此不能像以前的secring.gpg文件那样直接使用。但是,如果您需要迁移系统或备份密钥或其他任何内容,仍然可以将密钥导出为该格式。该命令与以前的命令(包括export-options)基本相同。

答案 2 :(得分:0)

我有类似的问题。 GPG seem to fail的新版本正在尝试将旧密钥迁移到新格式的情况,并且您已经在安装新GPG之前将〜/ .gnupg从备份中恢复了下来。对我来说,自动迁移失败,并且〜/ .gnupg目录处于进一步迁移尝试也失败的状态,除非我先清理。

问题的症状如下:

  • 当我尝试使用密钥解密时,收到错误消息gpg: decryption failed: No secret key

  • 当我执行gpg --list-public-keys时,即使有文件~/.gnupg/pubring.gpg~/.gnupg/secring.gpg,也没有输出。

以下过程终于对我有用:

cd ~/.gnupg
gpgconf --kill gpg-agent
rm -Rf .gpg-v21-migrated private-keys-v1.d tofu.db
gpgconf --kill gpg-agent

此后,我使用gpg解密了某些内容,这触发了迁移,迁移成功。