【问题标题】:gpg2 import of gpg1 secret key fails (gpg 2.1.15, Ubuntu 17.10)gpg1 密钥的 gpg2 导入失败(gpg 2.1.15,Ubuntu 17.10)
【发布时间】:2017-06-30 01:53:41
【问题描述】:

当我尝试使用 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 获取它)。

【问题讨论】:

    标签: ubuntu gnupg


    【解决方案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 文件那样直接使用。但是,如果您需要迁移系统或备份密钥或其他任何内容,您仍然可以将您的密钥导出为该格式。这与以前的命令基本相同(包括导出选项)。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题。新版本的 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解密了一些东西,这触发了迁移,迁移成功了。

      【讨论】:

        【解决方案3】:

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

        gpg 选项 --debug-level guru --debug-all --verbose 可能会有所帮助 诊断一下。

        【讨论】:

          猜你喜欢
          • 2019-12-21
          • 2022-08-13
          • 2017-09-16
          • 2022-06-14
          • 1970-01-01
          • 2015-04-03
          • 1970-01-01
          • 2018-11-06
          • 1970-01-01
          相关资源
          最近更新 更多