是否有密码套件“翻译器”

信息安全 加密 密码
2021-08-17 23:21:43

我有一个这种格式的密码套件列表:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384

有没有一种快速、简单的方法可以将其转换为更易于人类阅读/管理可读的格式?:)

3个回答

不,阿法克。

此外,如果它应该对非技术人员具有可读性和帮助性,那么每个翻译都可能是一本书,以痛苦的细节解释这些字符串的每个部分,它们的正反两面。

以防万一您不知道,rfc 5246目前涵盖了这种格式,并包含一个带有密码套件的表格,可能会为您提供有用的信息。

你的例子

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384

表示“ TLS使用ECDHE_ECDSA和椭圆曲线P384进行密钥交换,GCM中使用AES_256加密连接,同时使用SHA3​​84作为PRF。”

正如您从链接中看到的那样,对使用的首字母缩略词本身没有“简单”的理解。然而一般的语法是

TLS_nameOfKeyExchange_WITH_nameOfBlockCipherAndMode_nameOfPRFForMAC_addinionalExtensions

正如您从我的编辑中看到的那样,推理有时也会严重失败;)

IANA 维护已定义密码套件的官方注册表每个密码套件是一个 16 位标识符;“符号名称”在名义上不是标准的;大多数实现使用注册表中指示的名称,但有时不使用,例如 OpenSSL。OpenSSL 有自己的命名方案

使用 IANA 注册表,您可以查找密码套件名称,这将指向您定义该特定密码套件的 RFC。您仍然可以阅读该 RFC 以获取实际详细信息。

现在令人困惑的是,您给出的字符串不是这些半标准名称之一。它最后有一个额外的“_P384”。如果您了解底层加密,那么您可以推断“P384”后缀可能与FIPS 186-4中定义的 NIST 标准椭圆曲线 P-384相关因此,您的示例“TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384”将是RFC 5289中定义的“TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384” ,与该椭圆曲线一起使用。

推论只能让你到目前为止。“TLS_ECDHE_ECDSA”前缀表示密钥交换将使用 ECDHE(Elliptic-Curve Diffie-Hellman,Ephemeral),服务器将使用其永久私钥(与服务器证书中的公钥对应的那个)签署它的一半 ECDHE ,并且该签名将使用 ECDSA,这是一种在椭圆曲线中运行的签名算法。目前尚不清楚“P384”后缀是否指定了 ECDHE、ECDSA 或两者的椭圆曲线(我怀疑它仅适用于 ECDHE,但这只是一种预感)。这是非标准术语的问题。

因此,了解密码套件名称的信息来源应该是生成或使用这些名称的工具的文档。做不到这一点,你又回到了自己的结论。

没有办法将它翻译成更易于人类阅读/管理可读的格式,但有一个密码套件“翻译器”。

有一种简单的方法可以通过在 ruby​​ 中使用tls-map库将任何 OpenSSL(或 GnuTLS、NSS 等)密码名称转换为 IANA/标准/RFC 密码名称或十六进制代码点或其他方式:

require 'tls_map'

tm = TLSmap::App.new

# OpenSSL -> IANA
tm.search(:openssl, 'AES128-SHA', :iana) #=> {:iana=>"TLS_RSA_WITH_AES_128_CBC_SHA"}
# Hexadecimal codepoint to all (including OpenSSL & IANA)
tm.search(:codepoint, '1303') #=> {:codepoint=>"1303", :iana=>"TLS_CHACHA20_POLY1305_SHA256", :openssl=>"TLS_CHACHA20_POLY1305_SHA256", :gnutls=>"CHACHA20_POLY1305_SHA256", :nss=>"TLS_CHACHA20_POLY1305_SHA256"}

它也可用作 CLI 工具:

$ tls-map search openssl AES128-SHA -o iana
iana: TLS_RSA_WITH_AES_128_CBC_SHA

因此,基本上一种更具人类可读性/管理可读性的格式可能是为人类使用十六进制代码点(更短且易于记忆)并将其转换回 IANA 名称以供编程使用。