0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

区块哈希竞猜游戏系统开发加密哈希算法概述

搭建punk2558 来源:搭建punk2558 作者:搭建punk2558 2022-06-24 09:51 次阅读

哈希算法(Hash function)又称散列算法,是一种从任何数据(文件、字符等)中创建小的数字“指纹”的方法。哈希算法只需满足把一个散列对象映射到另一个区间的需求,因此根据使用场景的不同,可将哈希算法分为加密哈希与非加密哈希。

概述

加密哈希被认为是单向函数,也就是说极难由散列函数输出的结果,回推输入的数据是什么。加密哈希函数的输入数据,通常被称为消息(message),而它的输出结果通常被称为摘要(digest)。一个理想的密码散列函数通常具有以下三个特性:

单向性:极难由一个已知的散列数值,推算出原始的消息;

唯一性:在不改动散列数值的前提下,修改消息内容是不可行的;

抗碰撞性:对于两个不同的消息,它不能给与相同的散列数值。

pYYBAGK1GGuAXaZfAAVNvkilwyM442.png

其中不可碰撞性是指以当前的算法与算力水平,哈希碰撞的开销超出人类可以接受的水平。以SHA-256为例,其哈希数值可能性约有1077种,而目前人类估计的宇宙原子总数约1080。虽然有概率论生日悖论问题存在,N位长度的哈希表可能发生碰撞测试次数不是2N次而是只有2N/2次,但仍然是一个巨大的数字。

常见的加密哈希函数有MD5、SHA-1、SHA-2(包含SHA-224、SHA-256、SHA-512等),虽然种类繁多,但除了生成摘要的长度、循环体内容等有一些差异外,算法的基本结构是一致的。下面以SHA-256为例,详细介绍加密哈希算法的执行步骤。

SHA-256实现原理

常量初始化

SHA-256算法中用到了8个哈希初值以及64个哈希常量,其中,8个哈希初值是对自然数前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32 bit:

64个哈希常量是对自然数中前64个质数的立方根的小数部分取前32 bit,标记为k[t]:

附加长度值

SHA-256用一个64位的数据来表示原始消息的长度,而在信息处理的过程中给需要将消息分解成512bit大小的块,因此补位后的消息长度应该是512的整数倍。附加长度值分为两个步骤:

第一个bit位补1,然后都补0,直到长度满足对512取模后余数是448,如果长度已经满足对512取模后余数是448,需要填充512个bit;

附加长度为64bit的长度值。

为什么不可碰撞性对加密哈希算法如此重要?从SHA-256算法的实现步骤可以看出,加密哈希的逆向计算几乎是不可能的,暴力破解法的成本也太高,因此对加密哈希算法所谓的攻击实际是利用哈希碰撞为突破口进行数据伪造。以常见的保存用户密码为例,如果是明文存储,一旦发生数据泄露,那么所有的账户都会被盗用,因此常用下面一些方法进行Hash加密:

Hash加密:单纯对密码进行Hash加密无法保证密码的安全性,因为用户密码通常是短字符,无论采用哪种加密算法,都可以利用暴力破解或彩虹表攻击破解。

Hash加盐:在原消息上添加随机盐再进行哈希加密,并将盐与密码保存起来,以便下次登陆验证,添加随机盐增加了彩虹表破解的难度,促使攻击者放弃破解。但是如果对密码进行不安全的散列函数(MD5)计算,数据库泄露后,攻击者可以根据散列值找出碰撞的消息,不管这个消息是否与密码相同,都可以通过验证。

专用哈希函数加密:使用bcrypt等专门用来密码加密的哈希函数进行加密,这类函数通常运算时间较长,大大增加了攻击成本。

密码加密不单单是一个技术问题,对于攻击者来说,如果破解成本大于收益成本,即使攻破了加密的密码也是无意义的。而那些被证明可以产生散列碰撞的Hash函数,攻击它们的成本较低,随着算法的改进与硬件水平的提升,破解的成本也不断降低。从安全的角度考虑,应该及时更换不安全的哈希算法。

加密哈希的应用比较广泛,笔者详细地学习哈希算法的实现原理,也是为了更好地理解它们使用与被攻击的方式,而不仅仅是在编程中调一个函数库。在这之前以为密码学的知识比较晦涩难懂,实际上抛开中间的数学运算,整体的逻辑十分清晰,基本结构很容易理解。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6559

    浏览量

    87938
  • 哈希算法
    +关注

    关注

    1

    文章

    56

    浏览量

    10702
收藏 人收藏

    评论

    相关推荐

    如何使用Rust从零开发区块

    区块的Body部分是一个普通的字符串向量,而头部看起来更有趣。在所有的字段中,prev_hash 是最有趣的,它存储了前一个区块哈希字段值,我们将在这篇文章后面的链部分讨论它。
    的头像 发表于 01-22 13:58 702次阅读
    如何使用Rust从零<b class='flag-5'>开发区块</b>链

    php加密方式有哪些

    的管理和传递困难。 非对称加密 非对称加密算法使用一对密钥,即公钥和私钥。公钥用于加密,私钥用于解密。常见的非对称加密算法有RSA、DSA、ECC。非对称
    的头像 发表于 12-04 15:32 358次阅读

    golang语言的加密解密算法实现

    HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写, 它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。
    发表于 10-12 15:11 987次阅读

    STM32H7怎么实现一个哈希的数据运算处理?

    STM32H7怎么实现一个哈希的数据运算处理
    发表于 10-10 06:34

    哈希加密有什么区别?

    哈希加密有什么区别
    发表于 10-09 06:29

    Crypto加密算发库资料

    Crypto模块提供通用的加密哈希算法,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。用于连接物联
    发表于 09-18 07:11

    STM32助力新产品设计提升安全性

    对称加密算法、AES-ECB模式缺陷与解决办法、Hash哈希函数、Hash哈希算法等。
    发表于 09-05 07:40

    ARM Cortex-A715核心加密扩展技术参考手册

    了说明以实现安全哈希算法(SHA)功能SHA-1、SHA-224和SHA-256。 Arm®v8.2-A扩展、Armv8.2-A-SHA和Armv8.2-SM添加了A64指令以加速 SHA2-512
    发表于 08-09 07:15

    Arm®Cortex-X4核心加密扩展技术参考手册

    Cortex-X4内核支持可选的Arm®加密扩展。 Arm®加密扩展将A64指令添加到高级SIMD中,以: •加速高级加密标准(AES)加密和解密•实现安全
    发表于 08-08 07:15

    Arm Cortex-A55核心加密扩展技术参考手册

    Core技术参考手册中的AArch64指令集属性寄存器0,EL1寄存器(ID_AA64ISAR_EL1)。 加密扩展将新的A64、A32和T32指令添加到高级SIMD中,以加速高级加密标准(AES)加密和解密。它还添加了实现安
    发表于 08-08 06:29

    Arm Cortex‑A76核心加密扩展技术参考手册

    核心技术参考手册中的AArch64指令集属性寄存器0,EL1寄存器(ID_AA64ISAR0_EL1)。 加密扩展将新的A64、A32和T32指令添加到高级SIMD中,以加速高级加密标准(AES)加密和解密。它还添加了实现安全
    发表于 08-08 06:25

    Arm Cortex-A73 MPCore处理器加密扩展技术参考手册

    Cortex-A73 MPCore处理器加密扩展支持Armv8加密扩展。 加密扩展将新的A64、A32和T32指令添加到高级SIMD,以加速高级加密标准(AES)
    发表于 08-02 15:36

    Arm®Cortex®-A75核心加密扩展技术参考手册

    Cortex‑A75核心加密扩展支持Armv8‑A加密扩展。 加密扩展将新的A64、A32和T32指令添加到高级SIMD中,以加速高级加密标准(AES)
    发表于 08-02 06:39

    Linux内核分析 端口哈希

    端口哈希桶 在inet_csk_get_port函数中的变量声名中有如下几个结构体: struct inet_hashinfo * hinfo = sk- >sk_prot- >h.hashinfo
    的头像 发表于 07-31 11:03 503次阅读
    Linux内核分析 端口<b class='flag-5'>哈希</b>桶

    设计大规模并行哈希图时的几个重要考虑事项

    在 GPU 上使用大规模并行哈希图实现性能最大化
    的头像 发表于 07-05 16:30 823次阅读
    设计大规模并行<b class='flag-5'>哈希</b>图时的几个重要考虑事项