openssl哈希_如何使用OpenSSL:哈希,数字签名等

openssl哈希

本系列第一篇文章通过OpenSSL库和命令行实用程序介绍了哈希,加密/解密,数字签名和数字证书。 第二篇文章深入探讨了细节。 让我们从在计算中无处不在的散列开始,并考虑使散列函数成为加密的原因

加密哈希

OpenSSL源代码( https://www.openssl.org/source/ )的下载页面包含一个带有最新版本的表。 每个版本都带有两个哈希值:160位SHA1和256位SHA256。 这些值可用于验证下载的文件是否与存储库中的原始文件相匹配:下载器会在本地重新计算下载文件上的哈希值,然后将结果与原始文件进行比较。 现代系统具有用于计算此类哈希的实用程序。 例如,Linux具有md5sumsha256sum 。 OpenSSL本身提供了类似的命令行实用程序。

哈希用于计算的许多领域。 例如,比特币区块链使用SHA256哈希值作为块标识符。 要挖掘比特币,就是要生成一个低于指定阈值的SHA256哈希值,这意味着哈希值至少具有N个前导零。 (N的值可以上升或下降,具体取决于在特定时间的开采效率。)有趣的是,当今的矿工是旨在并行生成SHA256哈希的硬件集群。 在2018年的高峰时段,全球比特币矿工每秒产生约7500万太赫兹,但这个数字还令人难以理解。

网络协议也使用哈希值(通常以校验和命名)来支持消息完整性。 即,确保接收到的消息与发送的消息相同。 邮件发送者计算邮件的校验和,并将结果与​​邮件一起发送。 消息到达时,接收方将重新计算校验和。 如果发送的校验和与重新计算的校验和不匹配,则说明正在传输的邮件或发送的校验和或两者均发生了问题。 在这种情况下,应再次发送消息及其校验和,或者至少应提出错误条件。 (诸如UDP之类的低级网络协议不会影响校验和。)

哈希的其他示例是熟悉的。 考虑一个要求用户使用密码进行身份验证的网站,该密码是用户在浏览器中输入的。 然后,通过与服务器的HTTPS连接,将其密码从浏览器发送到服务器并进行加密。 密码到达服务器后,将对其解密以进行数据库表查找。

该查询表应存储什么? 自己存储密码是有风险的。 存储从密码生成的散列的风险要小得多,在计算散列值之前,可能还添加了一些 (多余的位)来品尝。 您的密码可能会发送到Web服务器,但是该站点可以向您保证密码不会存储在该服务器上。

散列值也出现在各个安全领域。 例如,基于散列的消息认证代码( HMAC )使用散列值和秘密密钥来认证通过网络发送的消息。 HMAC代码轻巧且易于在程序中使用,在Web服务中很受欢迎。 X509数字证书包含称为指纹的哈希值,可以帮助进行证书验证。 内存中的信任库可以实现为以这种指纹为键的查找表,也可以作为哈希图实现 ,该哈希表支持恒定时间的查找。 可以将传入证书中的指纹与信任库密钥进行比较以进行匹配。

密码哈希函数应具有什么特殊属性? 它应该是单向的 ,这意味着很难反转。 加密散列函数应该相对简单地进行计算,但是计算其反函数(将散列值映射回输入位串的函数)应具有计算上的难点。 这是一个描述,其中chf为加密哈希函数,而我的密码foob​​ar为示例输入:


   
   
   
        +---+
foobar—>|chf|—>hash value ## straightforward
        +--–+

相比之下,逆运算是不可行的:


   
   
   
            +-----------+
hash value—>|chf inverse|—>foobar ## intractable
            +-----------+

例如,调用SHA256哈希函数。 对于任何长度为N> 0的输入位串,此函数将生成256位固定长度的哈希值;否则,该值将变为256位。 因此,该哈希值甚至不显示输入位串的长度N,更不用说字符串中每个位的值了。 顺便说一下,SHA256不受长度扩展攻击的影响 。 将计算得出的SHA256哈希值反向工程回输入位串的唯一有效方法是通过蛮力搜索,这意味着尝试所有可能的输入位串,直到找到与目标哈希值匹配的地方。 在诸如SHA256之类的加密密码哈希函数上,这种搜索是不可行的。

现在,最后的审查点已经准备就绪。 密码哈希值在统计上是唯一的,而不是无条件地唯一的,这意味着两个不同的输入位字符串产生相同的哈希值(即冲突 )的可能性很小,但并非不可能。 生日问题提供了一个很好的违反直觉的碰撞示例。 对各种哈希算法的抗冲突性进行

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值