WAF越来越让人失望?
|
这个例子生成了一个 CSR 文档,并将该文档存储在文件
尽管可以使用现有的密钥对,但这个命令也会生成一个新的密钥对。请注意,在诸如
然而,无论数字证书如何使用,同样使用这个命令都会创建一个 CSR。它还会启动一个问题/回答的交互式会话,提示有关域名的相关信息,以便与请求者的数字证书相连接。这个交互式会话可以通过在命令中提供基本的信息,用反斜杠来续行一步完成。
为了了解验证失败时的情况,一个简短但有用的练习是将最后一个 OpenSSL 命令中的可执行的 数字证书
数字证书汇集了到目前为止所分析的各个部分:哈希值、密钥对、数字签名和加密/解密。生产级证书的第一步是创建一个证书签名请求(CSR),然后将其发送给证书颁发机构(CA)。在 OpenSSL 的例子中,要做到这一点,请运行: 这种对密码学哈希函数的研究,为我们仔细研究数字签名及其与密钥对的关系奠定了基础。 数字签名顾名思义,数字签字可以附在文件或其他一些电子工件(如程序)上,以证明其真实性。因此,这种签名类似于纸质文件上的手写签名。验证数字签名就是要确认两件事:第一,被担保的工件在签名被附上后没有改变,因为它部分是基于文件的加密学哈希值。第二,签名属于一个人(例如 Alice),只有她才能获得一对密钥中的私钥。顺便说一下,对代码(源码或编译后的代码)进行数字签名已经成为程序员的普遍做法。 让我们来了解一下数字签名是如何创建的。如前所述,没有公钥和私钥对就没有数字签名。当使用 OpenSSL 创建这些密钥时,有两个独立的命令:一个是创建私钥,另一个是从私钥中提取匹配的公钥。这些密钥对用 base64 编码,在这个过程中可以指定它们的大小。 私钥由数值组成,其中两个数值(一个模数和一个指数)组成了公钥。虽然私钥文件包含了公钥,但提取出来的公钥并不会透露相应私钥的值。 因此,生成的带有私钥的文件包含了完整的密钥对。将公钥提取到自己的文件中是很实用的,因为这两把钥匙有不同的用途,而这种提取方式也将私钥可能被意外公开的危险降到最低。 接下来,这对密钥的私钥被用来生成目标工件(如电子邮件)的哈希值,从而创建签名。在另一端,接收者的系统使用这对密钥的公钥来验证附在工件上的签名。
现在举个例子。首先,用 OpenSSL 生成一个 2048 位的 RSA 密钥对: 例如,回忆一下 SHA256 哈希函数。对于一个任意长度为 N > 0 的输入位串,这个函数会生成一个 256 位的固定长度的哈希值;因此,这个哈希值甚至不会反映出输入位串的长度 N,更不用说字符串中每个位的值了。顺便说一下,SHA256 不容易受到长度扩展攻击。唯一有效的逆向工程方法是通过蛮力搜索将计算出的 SHA256 哈希值逆向返回到输入位串,这意味着需要尝试所有可能的输入位串,直到找到与目标哈希值匹配的位串。这样的搜索在 SHA256 这样一个完善的加密哈希函数上是不可行的。 现在,最后一个回顾的知识点是有序。加密哈希值是统计学上的唯一,而不是无条件的唯一,这意味着两个不同的输入位串产生相同的哈希值是不太可能的,但也不是不可能的 —— 这称之为碰撞。生日问题提供了一个很好的反直觉的碰撞例子。对各种哈希算法的抗碰撞性有着广泛的研究。例如,MD5(128 位哈希值)在大约 221 次哈希之后,抗碰撞能力就会崩溃。对于 SHA1(160 位哈希值),大约在 261 次哈希后开始崩溃。 对于 SHA256 的抗碰撞能力的剖析,目前还没有一个很好的估计。这个事实并不奇怪。SHA256 有 2256 个不同的哈希值范围,这个数字的十进制表示法有 78 位之多!那么,SHA256 哈希会不会发生碰撞呢?当然可能,但可能性极小。
在下面的命令行示例中,有两个输入文件被用作位串源: 为了便于阅读,这些文件包含的是文本,但也可以使用二进制文件代替。
在命令行(百分号 (编辑:阜阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


