PEM,DER,X509,ASN.1,哦,天哪.从哪里开始



我正在努力了解密码学的世界,因为它每天都在实际使用。我发现很难站稳脚跟,我想知道是否有人能在我一无所知的情况下解释事情。

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

到目前为止,我有些把握:

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

我想对这个生态系统有一个鸟瞰图,这样我就可以对这个谜题如何结合在一起有一些概念,然后我就可以更好地深入了解事物是如何运作的。

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

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

  • 签名算法-根据哈希值计算一些东西,称为"签名"。其主要思想是,只有当您拥有密钥时,才能计算出正确的签名。并且,此签名可以使用公钥进行验证。公钥在人员之间共享,以便他们可以验证您的签名。

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

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

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

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

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

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

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

每当开发人员不得不做一些"更深层次"的加密工作时,我都很难过。我知道他们认为"他可以写代码,加密货币只是一种让事情安全的代码,他可以做到",天哪,这是错误的。如果没有可靠或几乎可靠的安全后台,加密货币黑客攻击(编写自己的代码)将失败。

我建议你好好研究一下,因为如果你做对了,一切都会好起来的,但如果失败了,出现了一些漏洞,你的聊天就不那么愉快了。因此,我建议初学者:

  • 开始加密Java-即使你不是Java人一些第一章
  • 应用密码学手册
  • 应用密码学
  • 安全工程

在这些之后,你会得到相当坚定的结论,即加密货币是需要避免的,只有在极其谨慎的情况下使用,并且只有在它不会带来更多需要解决的问题时才使用。

关于您的问题:

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

我的最后一个要求是,你不应该停留在某种高水平的"我想我明白了"的观点上,深入挖掘,试图真正理解什么是安全的,什么是不安全的。

最新更新