PEM、DER、X509、ASN.1,天哪。从哪儿开始?

jho*_*orn 3 cryptography asn.1 certificate x509

我试图了解日常实际使用的密码学世界。我发现很难起步,我想知道是否有人有一些好的资源来解释假设我一无所知的事情。

例如,我有(我相信,由于理解有限)一个带有 X509 证书和“SignatureValue”属性的文件。我认为这些是用 SHA256 编码的。然而,我想确切地了解我正在查看的内容,因为我需要提供一个“时间戳响应文件”,其中包含一个时间戳权威消息的 DER 表示形式。

到目前为止我有所了解的事情:

  • SHA256 是一种哈希算法。单程?
  • X509 是一个定义证书(无论是什么)外观的文档
  • ASN.1是一组系统间传输数据的方式?
  • DER 是一种以二进制/八进制位表示数据的方式。

我想要鸟瞰这个生态系统,这样我就可以对这个难题如何组合在一起有一些概念,然后我可以更好地深入研究事物如何工作的本质。

Nic*_*sky 5

阅读一大堆书会花费很多时间。恕我直言,更快的方法是浏览维基百科并阅读以下内容:

  • 哈希算法(简而言之,它将长文本/数据转换为固定大小的值,哈希,它(几乎)唯一地表示这个长文本。并且,是的,它是单向的。

  • 签名算法 - 根据哈希值计算某些内容,称为“签名”。主要思想是只有当你拥有密钥时才能计算出正确的签名。并且,这个签名可以用公钥来验证。公钥在人们之间共享,以便他们可以验证您的签名。

因此,有效签名证明文本/数据没有被其他人更改。

  • 证书:这是数据块,它将用户的公钥与有关该密钥的信息绑定:所有者的姓名、电子邮件、地址等。证书通常由权威机构签署(根证书) - 因此,如果您信任权威机构,您应该相信该证书正确地代表了人。

  • 时间戳:这是由人们信任的某些权威机构制作的签名,它将时间标记绑定到在其他文档上制作的签名。因此,这将证明该签名(以及该文档)当时是正确的。这是必要的,因为有时证书可能会被撤销或过时,并且如果没有时间戳,您将不知道这是否是正确的签名,因为您不知道它何时创建。

  • ASN.1 - 抽象语法表示法,它定义了描述某些数据结构格式的文本规则。它被用于大多数密码学标准。

  • DER 编码(杰出编码规则):如何将 ASN.1 对象/记录编码为二进制数据的规则集。还有 BER(基本编码规则),其作用几乎相同,但它允许对同一值进行不同的编码(如 BOOL 可以用任何非零值进行编码),这不能用于密码学,因为同一消息可以用不同的方式编码,产生不同的哈希值。
  • X.509:有关公钥证书格式(ASN.1)的标准。

希望这有助于理解正在发生的事情:)

实际上,市场上有很多密码学库,它们实现了所有这些时间戳/x.509/签名/验证等。