![如何防止 gpg 包含 SHA1?](https://linux22.com/image/127357/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%20gpg%20%E5%8C%85%E5%90%AB%20SHA1%EF%BC%9F.png)
apt-get
抱怨签名无效并且InRelease
文件未签名(请参阅使用 Centos 签署 .deb 包为背景)。在服务器上,我已经验证使用gpg
它InRelease
确实已签名。
每Debian 9、APT 和“GPG 错误:...InRelease:以下签名无效:”,需要执行以下操作:
调整 $HOME/.gnupg/gpg.conf 中的 individual-digest-preferences 和 individual-digest-preferences 以从 GPG 首选项中消除 SHA-1。这可以防止新密钥再次出现问题。
在检查我的 reprepro 设置后,我在 Release 文件(和 InRelease clearsign 签名)和单个 Packages 文件下都显示了 SHA1,所以我希望这样做会成功。
~/.gnupg/gpg.conf
似乎表明我将使用 中描述的哈希算法default-preference-list
,然后列出首先使用的算法(如果可用)。
[michael@bigbox ~]$ cat ~/.gnupg/gpg.conf
# Prioritize stronger algorithms for new keys.
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed
# Use a stronger digest than the default SHA1 for certifications.
cert-digest-algo SHA512
man gpg
状态:
--personal-digest-preferences string 将个人摘要首选项列表设置为字符串。使用 gpg --version 获取可用算法的列表,并使用 none 根本不设置首选项。这允许用户安全地覆盖接收者密钥首选项选择的算法,因为 GPG 只会选择所有接收者都可以使用的算法。在不加密的情况下进行签名时也会使用此列表中排名最高的摘要算法(例如 --clear-sign 或 --sign)。
我看到gpg --version
事实上显示 SHA1 已被包含在内。
michael@bigbox ~]$ gpg --version
gpg (GnuPG) 2.0.22
libgcrypt 1.5.3
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://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: ~/.gnupg
Supported algorithms:
Pubkey: RSA, ?, ?, ELG, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
我只有一把钥匙。
[michael@bigbox ~]$ gpg --list-keys
/home/michael/.gnupg/pubring.gpg
--------------------------------
pub 2048R/542342AE 2018-02-08
uid Michael Jones <[email protected]>
sub 2048R/4D73CC3A 2018-02-08
并尝试一下...
[michael@bigbox ~]$ gpg --edit-key 542342AE
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
pub 2048R/542342AE created: 2018-02-08 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/4D73CC3A created: 2018-02-08 expires: never usage: E
[ultimate] (1). Michael Jones <[email protected]>
gpg> setpref SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
Set preference list to:
Cipher: AES256, AES192, AES, CAST5, 3DES
Digest: SHA512, SHA384, SHA256, SHA224, SHA1
Compression: ZLIB, BZIP2, ZIP, Uncompressed
Features: MDC, Keyserver no-modify
Really update the preferences? (y/N)
还在SHA1
吗?
请注意上面引用的帖子Debian 9、APT 和“GPG 错误:...InRelease:以下签名无效:”规定必须调整personal-digest-preferences
两次$HOME/.gnupg/gpg.conf
,所以我担心可能还有其他地方需要改变。
我认为这并不重要,但我运行的是 Centos7。
如何防止 gpg 包含 SHA1?
答案1
当谈到 DEB 包和存储库时,我们讨论的是显式创建签名。这与使用已知收件人密钥对消息进行加密和签名不同。在那种情况, gpg 使用接收者的关键偏好,结合您自己本地的偏好来制定出合适的算法选择
不幸的是,目前没有太多可用于独立签名的选项。即使在 GPG-2 中,也只有一个禁止密码算法的选项,但没有禁止摘要(签名)算法的选项。
因此,您唯一能做的就是在您的偏好中明确定义固定的摘要(签名)算法。因为那是当 debian 工具调用本地 GPG 安装来制作签名时将使用的内容。显然,这有一个缺点,会干扰签名算法的自动选择;这意味着,设置该选项后,仅支持 SHA1 的接收者将无法再验证您的签名。
无论如何,将以下内容设置为您的~/.gnupg/gpg.conf
digest-algo SHA256
也许您还应该在那里放置一个个人偏好列表,这会影响创建新密钥时的默认值(但因此并不能立即解决手头的问题 - 它也不会造成伤害)
personal-digest-preferences SHA512,SHA384,SHA256,SHA224
default-preference-list SHA512,SHA384,SHA256,SHA224,AES256,AES192,AES,CAST5,3DES,BZIP2,ZIP,ZLIB,Uncompressed
关于 SHA1 和 3DES,它们是 PGP 协议的最低公分母,因此硬连线到软件中。它们会自动添加到您的首选项列表的末尾,以确保与协议的其他(弱)实现的互操作性。
由于 SHA1 是必须实现的哈希算法,因此如果它没有显式地出现在列表中,则它默认位于末尾。
此外,SHA1 仍然是仅有的使用/允许生成 V4 指纹的算法(请参阅第12.2节)
好吧,也许是时候继续前进了,但我们(用户)能做的不多,只要标准不升级……
答案2
要回答如何防止 gpg 包含 SHA1,您可以通过设置 来使用弱摘要参数--weak-digest SHA1
,或者在 gpg.conf 中包含一行weak-digest SHA1
。