真有这种操作,比特币、暴雪和下载盗版电影都应用了同一种算法

在ICO泡沫迅速涌起和迅速破灭后,比特币仍然一路高歌,在最近突破了9600美金的大关。作为一种独立于货币体系的数字加密币,比特币成功的本质还是要归功于技术——区块链的安全和隐私支撑起了比特币最核心的价值。

提到区块链,非对称加密算法和哈希算法是两个不能避开的技术名词。尤其是哈希算法,在区块链相关的技术文章中总能看到这个名字,却很难真正理解它的奥秘。今天,我们就来看看哈希算法是如何保护比特币和其他数据的?

学好哈希算法,用脑子储存比特币

如果你准备购买比特币,你就会拥有一个“比特币钱包”。通常来讲,比特币钱包会是一个移动/本地客户端,用户可以通过客户端进行交易。但是还有一种更高端的玩法:脑钱包。

我们知道,比特币实际上是一种“资源”,它并不是像文档一样躺在谁的U盘里,而想要确立这种资源的所有权,则需要由用户自己生成一串数字密钥并储存到某个地方。交易时,先生成一套只能由交易中某一方用来解密的私有密钥,再根据私有密钥单向加密生成双方都能看到的共有密钥。

由于密钥的生成是独立于比特币协议和区块链的,所以如何保护好自己的密钥成了一个大问题,以前甚至发生过黑客破解比特币钱包客户端获取比特币的事件。

为了避免这种问题,就有人想出了一个新方法:自己生成一段比特币密钥,然后记在自己脑子里。

生成比特币密钥的方式并不难,最初始的密钥只是一串256位的二进制数字,抛二百多次硬币即可得到。但想记住二百多个0和1实在是太复杂了,脑钱包概念的关键在于,用哈希算法SHA-256对密钥进行校验,让256位二进制数字变成更短的编码,就可以保证让这串字符适合人脑记忆。

来自国家安全局,怪不得哈希算法很安全!

不管是抛二百次硬币用脑子记忆的脑钱包,还是在移动端、PC端作为客户端的电子钱包,基本都绕不开用SHA-256算法校验这一步骤。

其实SHA-256算法发明的最初目的和比特币毫无关系,1993年,美国国家安全局设计了一套用于安全加密的密码散列函数——Secure Hash Algorithm,翻译过来就是安全散列算法。人们更愿意把它叫做SHA,1993年推出的版本名为SHA-0,后来随着算法不断的被破解又不断自我修正,最终推出了数个SHA算法的变体,其中就包括SHA-256。

SHA最主要的特性就是,接收到二进制数字消息时会形成一串“数字摘要”,而这一摘要还可以用来验证数字消息的完整性。如上文所示,SHA-256就意味着算法可以把256位的二进制数字进行压缩。

很多人会感到疑惑的是,哈希算法对数字进行压缩、摘要,那么为什么不可以根据这些摘要反向“破解”呢?

哈希算法与其说是“加密”,其实更接近于“压缩”。这其中涉及到一个“映射”的概念。所谓映射,我们可以理解为“代表”。举个例子,可以用ABC这样的字符去代表10001101这样的数字,字符A可以代表1、001、0001等等,但只得到字符A时,我们无法得知加密前的数字究竟是1还是001还是0001还是……

用更简单的案例解释一下:在比特币交易中,交易双方都能得知的共有密钥是“100”,但只有其中一方知道加密前的私有密钥是2+78+5+5+10。

得到100这个共有密钥的人,想要破解私有密钥只能去挨个去排列“1+0+0+0+99”、“1+1+0+0+98”……如果变成256位的密钥,几乎是一个不可能完成的任务。而想要验证公有密钥也很简单,既然加密前的私有密钥是2+78+5+5+10,那么99、98这些公有密钥就都是错误的。

忘记比特币,下载过盗版电影的你早就认识了哈希算法

所以,目前看来哈希算法的压缩功能最大的用处是在比特币交易加密上?

实际上哈希算法最大的用处还是压缩数据,之所以被用在比特币上,是因为其中包含的大量运算贴合了以“消耗资源来获取比特币”的规则。在其他领域中,哈希算法也能发挥很大作用。

一个比较典型的例子是游戏公司暴雪推出的“One Way Hash”算法。

作为手握魔兽争霸、星际等等数款大型游戏的企业,暴雪和其他企业一样,拥有一个巨大的数据库。而当数据库太大时,从中检索就成了一个巨大的麻烦。

通常情况下在数据库中寻找数据就像在KTV点歌,数据库是曲库,想要找到自己要点的歌,只能把曲库从头到尾翻个遍。但也有一种更简单的方法,那就是建立一种代表关系,把歌曲名字《小星星》简写成XXX,并把这种对应关系储存在数据库中。寻找歌曲时,如果连XXX都找不到,说明曲库中不可能存在《小星星》这首歌。

同理,《小星星》=XXX、《爱我中华》=AWZH,这种文字转化成拼音、拼音取首字母的对应方式在现实应用时可能会涉及到函数、坐标等等数学问题,总之这种对应方式被称作“哈希表”。

但我们在KTV点歌时,搜索XXX得出的结果不光有《小星星》、还有《笑哈哈》,面对这种同一字符串在哈希表上位置相同的问题,暴雪的程序猿们想出了一种绝妙的解决办法——在哈希表中用三个哈希值来校验位置。

也就是说在暴雪KTV的曲库中,《小星星》(xiaoxingxing)的哈希值可以分别是XXX、OGG和III,这时再搜索歌曲,就几乎不会遇到《小星星》和《笑哈哈》同时出现的情况了。

同样的作用也体现在P2P(点对点)传播上。如果是上古时代的互联网用户,可以对emule(电驴)这款下载软件有印象,在eMule上可以从全球所有eMule用户手中接收某一件文件的数据上行和下载。

其原理就是,当你想下载电影《战狼2》时,系统会提取《战狼2》的哈希值,通过对这一哈希值的搜索,可以发现所有拥有《战狼2》的用户,大家一起进行点对点的数据传送,eMule本身也不用建立数据库,只搭建平台就可以了。因为哈希算法的压缩特性,使得“全球搜索”这件事变的低成本并可行。

虽然那个具备共享精神的好时代一去不复返,但即使是今天哈希算法也依然活跃在我们的视野中,即使有很多人声称自己破解了哈希算法,却也没有发生过因为算法被破解而造成损失的情况。

目前来看,哈希算法如果被抛弃,无非是出现以下两种情况:第一,量子计算开始应用,哈希算法和已知的所有密码、加密方式都被强大的计算能力和速度打败。第二,出现了更好用的压缩算法,比如美剧《硅谷》中的魔笛手成真,哈希算法由于不好用而被开发者抛弃。

评估一下以上这两种情况出现的可能性,相信大家就能知道哈希算法还会陪伴我们多久了。

时间: 2024-10-09 08:24:54

真有这种操作,比特币、暴雪和下载盗版电影都应用了同一种算法的相关文章

C++ TinyXml操作(含源码下载)

前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系. TinyXML介绍 在TinyXML中,根据XML的各种元素来定义了一些类:TiXmlBase

C++ md5操作(含源码下载)

虽然一些C++第三库已经继承了MD5操作,但是有时我们更需要一个轻量的md5库函数,这里提供了一个MD5类,可以传入一个字符串生成md5结果. md5库下载 下载解压后,有md5.h md5.cpp main.cpp三个文件,其中md5.h和md5.cpp是MD5类的头文件和实现文件,main.cpp是测试文件. 编译和运行 g++ md5.cpp main.cpp -o main./main 输出结果: abc md5 is 900150983cd24fb0d6963f7d28e17f72 其

系统架构师设计师2009-2016真题与模拟题汇总免费下载

场景 系统架构设计师考试,属于全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个高级考试. 系统架构设计师考试,考试不设学历与资历条件,不论年龄和专业,考生可根据自己的技术水平,选择合适的级别合适的资格,但一次考试只能报考一种资格. 实现 高级系统架构设计师2009年下半年上午试题 高级系统架构设计师2009年下半年下午试题Ⅰ 高级系统架构设计师2009年下半年下午试题Ⅱ 高级系统架构设计师2010年下半年上午试题 高级系统架构设计师2010年下半年下午试题Ⅰ 高级系统架构设

分享软件设计师教程第二三四版本+真题详解+其他考试资料下载

软件设计师教程+真题详解+其他考试资料,教程有第二版第三版第四版,带完整目录. 下载地址:网盘下载 原文地址:https://www.cnblogs.com/milugogo/p/12243121.html

Java学习之道:Java操作Excel之导出下载

页面放置一个button进行点击导出事件 <h:commandLink target="_parent" value="导出" action="#{eveluatesubject.doSaveExcel}" styleClass="cssButtonBG"> </h:commandLink> 后台的导出方法 /** * 导出EXCEL * * @param request * @return */ pu

企业域名更换操作系列4:下载旧域域信息配置

1. 单击"开始"/ "运行",输入CMD,如下图所示: 2. 在命令行中执行Rendom.exe /list ,如下图所示: 3. 在"C:\Windows\System32"目录下找到"DomainList.XML"文件: 4. 右键以记事本方式打开,替换所有旧域名信息sayms相关内容为新域名Contoso对应的内容,如下图所示: 5. 替换后结果如下图所示:

谈谈Delphi中的类和对象:五、类是一种对数据和操作高度的封装机制;六、类是一种代码重用机制

五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; public Constructor Create; function GetName: String; procedure SetName(AName: String); end; implementation constructor TEmployee.Create; begin FName:= 'Xu

数据结构算法评价四个标准

学习知识,有的人学的快.学的轻松.应用的好:有的人学的慢.学的吃力,应用差. 这是为什么? 传统的观 点认为,前者脑子好使,聪明,是学习的料儿,后者就是不行. 我本人不赞同这种观点,我觉得学习好或者不好是 和方法有关系的,学习方法得当了,就能达到前者的水平.只要是有正常能力的人都可以做到. 方法的好坏怎么衡 量,怎么评定呢? 看看效果心里就有数了. 在计算机里,需要处理数据,处理数据过程中需要用到一些算法来运算.整理数据. 计算机的脑子是很好使 的,不用怀疑.计算机处理同样的数据,可以使用多个算

算法相关概述

算法概述 从字面意义上理解,算法(Algorithm)就是用于计算的方法,并通过这种方法可以达到预期的计算结果.算法的专业解释:算法是解决实际问题的一种精确描述的方法,算法是对特定问题的求解步骤的一种精确描述方法.但更广泛认可的算法专业定义:算法是模型分析的一组可行的.精确的和有穷的规则. 通俗的讲,算法可以理解为一个完整的解题步骤,由一些基本运算和规定的运算顺序而构成.通过这样的解题步骤可以解决特定的问题.从计算机程序设计的角度看,算法由一系列求解问题的指令构成,能够根据规范的输入,在有限的时