我曾经在几个地方看过使用过的关键ID,并希望在我的程序中使用它们,但是我一直无法找到它们的描述。他们是如何产生的?什么是RSA“密钥ID”?
回答
以不同的格式(PGP,SSH,X.509证书)密钥ID具有不同的含义。 SSH和X.509都没有“专用”密钥ID的概念,但有些人使用这个术语(包括他们的软件) - 在这种情况下,通常是公钥或证书的散列。
更新:评论提醒我X.509 certifiactes中存在“关键标识符”扩展名,它们有时被称为关键标识。然而,这并不常见 - 通常散列(有时也称为指纹)被称为密钥ID。
用于GPG/PGP中RSA密钥的“密钥ID”是密钥模数的最后8位十六进制数字。
其他方式来一句话:“过去的8个十六进制数字” - >“的'最后4个字节'和'密钥模数' - >'密钥的指纹(MD5或SHA-1散列)'(换行符不能工作的两个空格注释?) – Rondo 2011-10-06 01:45:44
刚走这样做对我自己而言,我会写下来,而它在我的头上所有新鲜...
“官方”键ID(也就是“采用X509v3主题的内容在X509证书中的“密钥标识符”扩展)是DER编码的ASN.1序列的SHA1哈希,其由RSA公钥的模数和指数组成。它需要将三个不同的RFC融合在一起并进行一些实验来提出,但这就是它的工作原理。
一些Ruby代码做编码是这样的 - 给它一个RSA公钥或私钥对标准输入:
require 'openssl'
pkey = OpenSSL::PKey::RSA.new($stdin.read).public_key
seq = OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer.new(pkey.n),
OpenSSL::ASN1::Integer.new(pkey.e)])
puts Digest::SHA1.hexdigest(seq.to_der).upcase.scan(/../).join(':')
在Strongswan一个的情况下,可以显示它是指为keyid
使用它的命令行工具。 keyid
的要点是它可以用来识别证书中包含的实际公钥,以便证书可以改变,但是通过检查keyid可以检查密钥是否已经改变。
的pki
命令将列出的X.509证书的keyids如下(其中subjectPublicKeyInfo hash
是keyid
):
pki --keyid --in cert.pem --type x509
或为RSA私钥:
pki --keyid --in key.pem
的第二个命令是ipsec
哪一个可以用来列出安装在/etc/ipsec.d
子目录中的所有证书(和配置)(该命令将列出证书及其相应的keyid
这是与由pki
命令中列出他们的subjectPublicKeyInfo hash
):
ipsec listall
也可以使用openssl
生成一个keyid
的Strongswan的想法,这基本上是实际的RSA公钥的SHA1(该sed
脚本只是去掉了“----- BEGIN PUBLIC KEY -----”和结束标志)[弥的评论后改正]:
openssl x509 -in cert.pem -noout -pubkey | sed 's/--.*$//g' | base64 --decode | sha1sum
写入的openssl命令不起作用。在调用sha1sum之前,必须先将base64数据解码为二进制,如下所示:'openssl x509 -in cert.pem -noout -pubkey | sed's /--.*$// g'| base64 - 解码| sha1sum' – 2018-02-11 22:11:18
- 1. 为什么我的私人RSA密钥不是亚马逊的有效密钥?
- 2. 为什么在RSA中不支持使用RSA私钥加密RSA密钥格式的数据?
- 3. RSA密钥...(bob_pub,bob_priv)
- 4. RSA加密公钥?
- 5. RSA密钥加密/解密问题
- 6. 无法解密RSA加密密钥
- 7. .NET私钥Rsa加密
- 8. RSA加密基于公钥
- 9. C#RSA加密与私钥
- 10. RSA使用公钥加密
- 11. RSA加密 - 用私钥
- 12. 无法复制RSA密钥
- 13. 带对称密钥的RSA
- 14. 用公钥解密RSA
- 15. RSA算法密钥生成
- 16. RSA密钥库权限
- 17. 什么是空密钥加密?
- 18. c#的RSA公共密钥的公钥#
- 19. 将RSA密钥导入iPhone钥匙串?
- 20. 使用RSA公钥加密DSA私钥
- 21. RSA SSL密钥加密更改
- 22. .NET RSA加密:最小密钥大小?
- 23. Python:Pycrypto RSA公共密钥加密错误
- 24. 使用XML专用密钥解密RSA
- 25. 如何将openssl RSA密钥转换为Android引导程序RSA密钥格式?
- 26. 为什么服务需要应用程序ID,API密钥和API密钥?
- 27. 什么是Facebook会话密钥?
- 28. 究竟是什么“密钥容器”?
- 29. omniauth-provider返回的密钥是什么?
- 30. 什么是C++中的EOF密钥
实际上,X是“关键标识符”的概念。509:它是一个不透明的字节序列,您可以将其包含在证书扩展中(“主题密钥标识符”);您还可以包含来自CA的密钥标识符(“授权密钥标识符”),这一点有助于建立路径。 X.509没有要求任何特定的方法来生成一个密钥标识符,它可能只是随机字节(但它使用通过公钥计算的哈希值来建立_suggests_)。密钥标识符是可选的。 – 2011-04-25 14:51:28
@Thomas优秀的,谢谢你的提醒!确实存在关键标识符扩展。然而在实践中,软件所显示的和人们所引用的通常是密钥的SHA1哈希。 *指纹*是另一个同义词。 – 2011-04-25 15:46:51