什么是RSA"密钥ID"?

8 cryptography rsa

我已经看过在几个地方使用的密钥ID,并希望在我的程序中使用它们,但我无法找到它们的描述.它们是如何产生的?

wom*_*ble 7

刚刚为了我自己的目的而做了这件事,我会把它写下来,而这一切都在我头脑中......

"官方"密钥ID(即X509证书中"X509v3主题密钥标识符"扩展名的内容)是DER编码的ASN.1序列的SHA1哈希,由RSA公钥的模数和指数组成. .它需要拼凑三个不同的RFC和一些实验来提出它,但这就是它的工作原理.

一些用于编码的Ruby代码如下所示 - 在stdin上提供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(':')
Run Code Online (Sandbox Code Playgroud)


Eug*_*its 4

在不同的格式(PGP、SSH、X.509 证书)中,密钥 ID 具有不同的含义。SSH 和 X.509 都没有密钥 ID 的“专用”概念,但有些人使用这个术语(包括他们的软件)——在这种情况下,它通常是公钥或整个证书的哈希值。

更新:评论提醒我 X.509 证书中存在“密钥标识符”扩展,它们有时被称为密钥 ID。然而,这种情况并不常见 - 通常哈希(有时也称为指纹)被引用为密钥 ID。

  • 实际上,X.509 有一个“密钥标识符”的概念:它是一个不透明字节序列,您可以将其包含在证书扩展中(“主题密钥标识符”);您还可以包含来自 CA 的密钥标识符(“权威密钥标识符”),其目的是帮助构建路径。X.509 不强制要求以任何特定方式生成密钥标识符,它可能只是随机字节(但它_建议_使用通过公钥计算的哈希值)。键标识符是可选的。 (2认同)