PEM,DER,X509,ASN.1,哦我的。从哪儿开始?

时间:2012-11-28 10:56:12

标签: cryptography certificate x509 asn.1

我正在努力了解密码学的世界,因为它实际上是日常使用的。我发现很难站起来,我想知道是否有人有一些好的资源可以解释我认为什么都不知道的事情。

例如,我(我相信,由于理解有限)具有X509证书和“SignatureValue”属性的文件。我认为这些是用SHA256编码的。我想知道我正在看什么,因为我需要提供一个“时间戳响应文件”,其中包含一个时间戳授权消息的DER表示。

到目前为止我有点掌握的事情:

  • SHA256是一种散列算法。一种方式?
  • X509是一个文档,用于定义证书(无论是什么)应该如何显示
  • ASN.1是一组在系统之间传输数据的方法吗?
  • DER是一种用二进制/八进制位表示数据的方法。

我想要了解这个生态系统的鸟瞰图,这样我就有了这个拼图如何融合在一起的概念,然后我可以更深入地研究如何工作的细节。

2 个答案:

答案 0 :(得分:3)

阅读一大堆书需要花费很多时间。 Imho,更快捷的方式是浏览维基百科并阅读以下内容:

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

  • 签名算法 - 从哈希值计算一些东西,称为“签名”。主要思想是只有拥有密钥才能计算出正确的签名。并且,可以使用公钥验证此签名。公钥在人们之间共享,因此他们可以验证您的签名。

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

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

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

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

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

希望这有助于理解发生了什么:)

实际上,市场上有许多加密库,它们实现所有时间戳/ x.509 /签名/验证等。

答案 1 :(得分:2)

每次开发人员必须做一些“更深入”的加密时,我都很难过。我知道他们正在考虑“他可以编写代码,加密只是一个能使某些东西变得安全的代码,他可以做到这一点”而且他认为这是错误的。没有坚实或几乎可靠的安全背景,加密黑客(编写自己的代码)将失败。

我建议你去学习它,非常努力,因为如果你做得对,它会没问题,但是如果这个失败并且引入了一些漏洞你就不会那么好聊天。所以我建议初学者:

在那些之后你会得到相当坚定的草,加密是一件值得避免的东西,并且只有在极端谨慎的情况下才使用,并且只有当它没有引入它解决的更多问题时才会使用。

关于你的问题:

  • SHA25 - 是一种加密安全的单向散列函数,可产生256位输出
  • X509 - 描述数字证书的格式
  • DER和PEM是证书编码的形式

我的最后一个要求是你不应该停留在某个高层“我认为我得到了这个”的观点并深入挖掘并试图真正理解什么是什么,什么不安全。