0

我试图了解密码学的世界,因为它每天都在实际使用。我发现很难开始立足,而且我想知道是否有人有一些很好的资源来解释假设我一无所知的事情。

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

到目前为止我有点掌握的东西:

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

我想要这个生态系统的鸟瞰图,以便我对这个谜题如何组合在一起有一些概念,然后我可以更好地深入研究 How-Things-Work 的本质。

4

2 回答 2

3

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

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

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

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

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

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

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

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

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

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

于 2012-11-28T11:29:01.787 回答
2

每次开发人员必须做一些“更深”的加密工作时,我都很难过。我知道他们在想“他可以编写代码,加密只是一种使某些东西安全的代码,他可以做到”,男孩,这是错误的。如果没有可靠或几乎可靠的安全背景,加密黑客(编写自己的代码)将会失败。

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

在这些之后,你会很坚定地认为加密是要避免的,只有在极其谨慎的情况下才能使用,并且只有在它不会引入更多可以解决的问题时才使用。

关于您的问题:

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

我的最后一个要求是,你不应该仅仅停留在“我想我明白了”的高层次观点上,深入挖掘并尝试真正理解什么是安全的,什么是不安全的。

于 2012-11-28T11:08:13.147 回答