网站首页 > 技术文章 正文
安全性是实现区块链系统功能的基础,也是目前阻碍区块链应用推广的因素之一。
密码学是信息安全的基石,以很小的代价给信息提供一种强有力的安全保护,广泛应用于政治、经济、军事、外交和情报等重要领域。
1 定义
哈希算法(Hash Algorithms)也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的消息压缩为一个固定长度的消息的算法。
哈希算法是区块链技术体系的重要组成部分,也是现代密码学领域的重要分支,在身份认证、数字签名等诸多领域有着广泛的应用。
深刻理解哈希算法原理,对于区块链系统的设计与实现有着至关重要的作用。
哈希算法可以在极短的时间内,将任意长度的二进制字符串映射为固定长度的二进制字符串,输出值称为哈希值(Hash Value)或者数字摘要(Digital Digest)。
一般而言,哈希函数的数学表达形式如下:
h=Hash(m)
式中,h为固定长度的输出值;m为任意长度的输入值。任意输入值(Message)的二进制编码经过哈希函数计算后,可以得出n比特的一个0、1字符串的哈希值,在不同算法中n的取值可能不同,例如128、160、192、256、384或512等。
哈希算法在区块链技术中得到了广泛的应用,各个区块之间通过哈希指针连接形成区块链,每个区块的完整性检验将以哈希运算的方式进行。
密码学哈希算法的主要特性就是单向性,即在算法上,只能从输入值计算得到输出值,而从输出值计算得到输入值是不可行的。
因为哈希算法的输出值是固定长度的,所以哈希算法存在一个碰撞的问题,即哈希算法的输出值的长度为n比特,那么,任取2n+1个不同的输入值,就一定存在两个不同的输入值会得到相同的输出值。因此,在一定数量的输入值情况下,输出值越长的哈希算法,其碰撞的概率会越小。
2 常用的哈希算法
常用的哈希算法包括MD系列算法和SHA系列算法,其中MD系列算法有MD2、MD4、MD5、RIPEMD算法等,SHA系列算法有SHA0、SHA1、SHA2、SHA3算法等。
在哈希算法中,MD5算法和SHA1算法是应用最广泛的,两者的原理相差不大,但MD5算法加密后的输出值的长度为128比特,SHA1算法加密后的输出值的长度为160比特。
在2004年的国际密码学大会上,王小云教授介绍了对一系列哈希算法寻找实际碰撞的方法,并当场破解了包括MD4、MD5、HAVAL128算法在内的多种哈希算法。2005年,王小云教授进一步优化了方案,对SHA0、SHA1算法也成功地给出了碰撞攻击。
这些攻击技术对当时哈希算法的安全性造成了很大威胁,但同时也促进了新的哈希算法的设计与研究。
1. MD系列算法
MD系列算法是一个应用非常广泛的算法集,最出名的MD5算法由RSA公司的罗纳德·林·李维斯特(Ronald L. Rivest)在1992年提出,目前被广泛应用于数据完整性校验、消息摘要、消息认证等。MD2算法的运算速度较慢但相对安全,MD4算法的运算速度很快,但安全性下降,MD5算法比MD4算法更安全、运算速度更快。
虽然这些算法的安全性逐渐提高,但均被王小云教授证明是不够安全的。MD5算法被破解后,Ronald L. Rivest在2008年提出了更完善的MD6算法,但MD6算法并未得到广泛使用。
MD5算法的设计采用了密码学领域的Merkle-Damgard构造法,这是一类采用抗碰撞的单向压缩函数来构造哈希函数的通用方法。
MD5算法的基本原理是将数据信息压缩成128比特来作为信息摘要,首先将数据填充至512比特的整数倍,并将填充后的数据进行分组,然后将每一分组划分为16个32比特的子分组,该子分组经过特定算法计算后,输出结果是4个32比特的分组数据,最后将这4个32比特的分组数据级联,生成一个128比特的散列值,即最终计算的结果。
2. SHA系列算法
SHA(Secure Hash Algorithm,安全哈希算法)是美国国家标准技术研究所发布的国家标准,规定了SHA1、SHA224、SHA256、SHA384和SHA512单向哈希算法。
SHA1、SHA224和SHA256算法适用于长度不超过264比特的消息。SHA384和SHA512算法适用于长度不超过2128比特的消息。SHA系列算法主要适用于数字签名标准(Digital Signature Standard,DSS)里面定义的数字签名算法(Digital Signature Algorithm,DSA)。
对于长度小于264比特的消息,SHA1算法会产生一个160比特的消息摘要。然而,SHA1算法已被证明不具备“强抗碰撞性”。
2005年,王小云教授破解了SHA1算法,证明了160比特的SHA1算法只需要大约269次计算就可以找到碰撞。
为了提高安全性,美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)陆续发布了SHA256、SHA384、SHA512以及SHA224算法,统称为SHA2算法。
这些算法都是按照输出哈希值的长度命名的,例如SHA256算法可将数据转换成长度为256比特的哈希值。虽然这些算法的设计原理与SHA1算法相似,但是至今尚未出现针对SHA2算法的有效攻击。
因此,比特币在设计之初即选择采用了当时被公认为最安全和最先进的SHA256算法,除了在生成比特币地址的流程中有一个环节采用了RIPEMD160算法,其他需要做哈希运算的地方均采用了SHA256算法或双重SHA256算法,例如计算区块ID、计算交易ID、创建地址、PoW共识过程等。
3 .SHA256算法
在比特币和以太坊的区块链系统中,SHA256算法是工作量证明算法的基础,具体的工作量证明算法在后面的章节中详细阐述。在比特币系统中,工作量证明算法只计算一次SHA256算法,而在以太坊系统中,工作量证明算法则嵌套计算两次SHA256算法。
常用的哈希算法的过程参数见下表:
内部状态值的长度直接影响最终的输出值的长度,随着哈希算法不断演进,内部状态值的长度不断增加,对应的输出值的长度也在不断增加。只有不断增加输出值的长度,才能在算法上增加破解的难度。
随着对哈希算法不断深入地研究,慢慢会找到一些更加低廉的破解方案,这也促使我们不断改进哈希算法的内部细节。
我们已经发现了降低破解MD5、SHA1算法难度的方案,所以目前MD5算法与SHA1算法的安全性大大降低了,已经不再推荐使用,现在更多的是用在文件的校验方面。
目前,SHA256算法还是比较安全的,但是也不排除在不远的将来,我们会发现新的破解方案。
猜你喜欢
- 2024-10-12 百度 面试题——Redis的对象类型与内部编码
- 2024-10-12 五分钟带你了解哈希算法究竟是什么!
- 2024-10-12 Redis哈希类型的使用场景 redis哈希槽的概念
- 2024-10-12 Redis哈希类型使用命令 redis 哈希操作
- 2024-10-12 对象存储服务器Minio(超详细) 对象存储服务适于哪些场景
- 2024-10-12 基于Vision Transformer的视频哈希检索识别虚假视频
- 2024-10-12 Java高级面试之哈希表 哈希表java实现
- 2024-10-12 Redis 选择hash还是string 存储数据?
- 2024-10-12 特征工程:基于梯度提升模型的特征编码效果测试
- 2024-10-12 Redis 讲解系列之 Redis的五大数据类型和配置文件解读
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)