SSH密钥与用于其他目的的非对称密钥有何不同?


13

SSH密钥与用于其他目的(例如,电子邮件签名)的非对称密钥有何不同?

提示我这样做的部分原因是,在OS X上,有一些可用于管理SSH密钥的应用程序(ssh-agent,SSHKeychain等)以及旨在管理GPG密钥的应用程序(GPG钥匙串访问等),显然不是在二人见面的时候 但是,我不认为这是OS X特有的问题。

是因为密钥的种类完全不同,还是因为密钥存储在不同的位置,或者是出于某些其他原因或多种原因(例如历史原因)而将关注点分离?

Answers:


14
  • SSH密钥只是普通的RSA,DSA或ECDSA非对称密钥对。由OpenSSH生成的这种密钥对已经可以被OpenSSL和大多数其他程序使用。

    .pub输出的文件ssh-keygen是OpenSSH特定的格式,但这无关紧要,因为“私有”文件已经包含私有密钥和公共密钥。)

    其他SSH软件可能具有自己的存储格式,例如RFC 4716或PuTTY的PPK,但是它们存储相同的RSA / DSA / ECDSA信息。

  • X.509(由SSL,S / MIME使用)稍微复杂一些:“私钥”仍然是相同的,但是没有裸露的公钥文件,而是有一个“证书” –包含A.1结构的ASN.1结构。公钥,主题和颁发者名称,有效日期。在X.509 v3证书中,将出现扩展名,例如“密钥用法”和“备用主题名称”。整个证书由颁发者的密钥签名(如果没有单独的颁发者,则为自签名)。

    您可以轻松地将X.509“私钥”文件用于SSH – OpenSSH甚至使用相同的格式。

    您可以从简单的密钥对创建X.509证书,然后对其进行自我签名,也可以创建“证书请求”,并将其提交以由CA(证书颁发机构)签名。

    要在X.509证书中显示信息,请使用:

    certtool -i < foo.pem
    certtool -i --inder < foo.crt
    
    openssl x509 -noout -text < foo.pem
    openssl x509 -noout -text -inform der < foo.crt
    

    certtool是GnuTLS的一部分。)

  • OpenPGP(由GPG使用)键是最复杂的。您所谓的“ PGP密钥”或“ PGP密钥对”是一个称为“ OpenPGP证书”的复杂结构,其中包含:

    • 一个“主密钥” –非对称密钥对,通常用于签名
    • 一个或多个“用户ID” –文本标签,通常为“名称<email @ address>”的形式
      • 其中至少一个标记为“主要用户ID”
      • 对于每个用户ID,一个“自我签名”-用您自己的主键签名
      • 对于每个用户ID,其他用户零个或多个“签名”
      • 自签名数据包还包含您首选的算法(SHA-1,AES等)
    • 一个或多个“子密钥” –其他密钥对,第一个通常用于加密
      • 对于每个子键,由主键签名
    • 零个或多个“照片ID” –包含您的脸部的JPEG或PNG附件
      • 与用户ID签名的方式相同
    • 零个或多个X.509证书

    所有密钥对都有失效日期和使用位:签名数据,认证(签名)密钥,加密,对服务进行身份验证。默认情况下,主密钥具有“签名”和“认证”位,第一个子密钥是“加密”。如果添加“身份验证”子项,则可以将其gpg-agent用于SSH身份验证。

    要查看您的证书包含什么:

    gpg --export joe@example.com | gpg -vv
    
    gpg --export joe@example.com | certtool --pgp-certificate-info
    

    certtool是GnuTLS的一部分。)


X.509证书及其关联的私钥有几种格式:

  • DER是证书的ASN.1结构的二进制编码。此类文件通常具有.crt.cer文件扩展名(.der不常见,但不可见)。

  • “ PEM”格式文件包含相同的DER编码数据,但还使用Base64在“ BEGIN THIS”和“ END THAT”头之间进行了编码。一个常见的文件扩展名是.pem,虽然两者.crt.cer有时也在这里(但从未使用.der)。

  • 对于属于证书的私钥,通常使用“ PEM”格式–由标头“ BEGIN PRIVATE KEY”(PKCS#7结构中的密钥)或“ BEGIN RSA (或DSA) PRIVATE KEY”(裸露的密钥,OpenSSL 包围的Base64 格式)。有时,密钥在单独的.key文件中,有时与证书捆绑在一起。

  • PKCS#12和较旧的PFX是加密的容器,既存储证书又存储私钥(通常也是发行者的证书)。大多数软件在使用私钥导出或“备份”证书时都会使用此格式。

在OpenPGP中,情况不太混乱:所有数据都遵循相同的二进制格式,并且可以选择“装甲”(用Radix64编码,并在类似PEM的标头之间编码)。


2

以不同的位置和不同的格式存储(PGP,GnuPG ssh和PGP所使用的格式以及几种不同的X.509格式都存在很大差异)。有可能在它们之间转码在一定程度上通过混合和匹配的权利选项ssh-keygenpgpgpg/ gpg2openssl等; 但总的来说,这是不值得的。此外,不同的密钥格式支持不同数量的信息,ssh携带最少的额外信息,而X.509 PEM和DER格式携带最多的信息。此外,OSX钥匙串只是加密的钥匙/值存储,因此每个应用程序通常需要不同的机制来在程序的本机钥匙+元数据格式与可以存储在钥匙串中的东西之间进行转换。(类似的担忧也适用于KDE钱包和GNOME钥匙串。)


重要的是要注意基础加密标准也有所不同。gpg主要使用DSA,而SSH主要使用RSA。标准非对称标准数量有限,大多数应用程序支持多种标准,但是不同应用程序的“正常”标准有所不同。
jcrawfordor 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.