关于hashcash

关于hashcash来源 这个概念最早来自 Adam Back 的一篇论文 Hashcash A Denial of Service Counter Measure hashcash 是一个基于 hash 算法的系统 用途 邮件过滤 邮件过滤是 hashcash 最广泛的应用 比特币 比特币的上的应用是为了防止双重支付

大家好,我是讯享网,很高兴认识大家。

来源

这个概念最早来自Adam Back的一篇论文

Hashcash - A Denial of Service Counter-Measure

hashcash是一个基于hash算法的系统

用途

邮件过滤

邮件过滤是hashcash最广泛的应用。

比特币

比特币的上的应用是为了防止双重支付(double-spending),这个是比特币得以运行的根本,可以防止伪造交易。

这部分的细节会单独写一篇文章

技术原理

原理概述

下面就从技术角度分析下为什么hashcash可以用于以上领域。了解密码学算法的人都知道rsa算法,它是基于数学中的大数分解困难设计的。也就是说,给你一个很大的数字,你要得到它的乘数因子很困难,但是反过来给你你个数(因子),你可以很容易得到它们的积。

hashcash就是希望基于类似这样的数学难题,希望你做大量的工作,也就是付出CPU的计算代价(这个概念很重要,比特币中这个也是关键),得到正确的结果,才能获取某些资源(比方说往你的邮箱发送垃圾邮件)。

在计算机的世界里相对还是公平很多的,多劳多得,少劳少得。而人类自己制定的规则里有太多的人可以不劳而获。

邮件过滤正是基于这样的原理,我们设定一个规则:所有想给我发送电子邮件的人,我都要求他满足一个计算结果才会接受。要满足这个计算结果必须付出CPU的计算代价。即使一次计算只需要几秒钟,对于垃圾邮件的系统来说都是致命的,因为这些系统每天要发送数以万计的垃圾邮件,多出的CPU时间对它们来说代价是非常大的

原理详解

什么是sha1碰撞

先看一个概念,sha1碰撞。


讯享网

hashcash使用的不是RSA,而是一种叫hash的散列过程。用到的算法叫SHA(Secure Hash Algorithm)。

简单来讲,一串输入数据无论多长,hash之后可以得到一个固定长度(hash版本不同,这个长度也不同,比如SHA1结果是160比特,SHA-256结果是256比特位)的数据,这个数据我们把它称为散列值

SHA有个特点是,只有输入数据完全相同才能得到相同的散列值,否则即使输入数据只相差一个标点符号,都会导致戳记千差万别。

Data SHA1
this is test data, 6b5a04fdbb8b98db76db1ffdec6936f8d7c46a6d
this is test data。 333eafd2f5784cefd42a65cb3aa7c773d

上面的示例中,两个数据只差了一个标点,散列值却大不相同。

sha1无论如何只是随机生成的一个字符串而已,有没有可能连个不同的输入数据,得到相同的散列值呢?答案是肯定的。当出现这种情况时,我们说发生了一次SHA1碰撞。

不过根据查到的资料显示,sha1碰撞的几率是 260 ,也就是说每 260 个样本中能找到两个sha1相同的值。

如何在电子邮件中起作用

比如有个人要给我发送邮件,我要求它的邮件头部加上一个字符串(我们把这个字符串叫做戳记,hashcash stamp)。我要求用这个戳记生成的散列值必须满足前面20个比特位都是0

同时戳记必须包括7个域:

 1. 版本号(版本 0 更简单,但是有一些局限性)。 2. 声明的比特值。如果戳记没有真正地使用声明的前导零比特进行散列,那么它就是非法的。 3. 生成戳记的日期(和时间)。可以认为当前时间之后的戳记以及那些在很久以前的戳记是非法的。 4. 戳记为哪个资源而生成。可能是一个电子邮件地址,但是也可能是一个 URI 或者其他命名的资源。 5. 特定应用程序可能需要的扩展。任何附加的数据都可以放置在这里,但是,在到目前为止的使用中, 这个域通常是空的。 6. 将该戳记与其他所有人为相同的资源在同一日期生成的戳记区别开来的随机因子(salt)。例如,两个不同的人 可以合情合理地在同一天向我的同一个地址发送电子邮件。他们不应该由于我使用了 double spend 数据库而无法 发送成功。但是,如果他们每个人都使用一个随机因子,那么完整戳记将是不同的。 7. 后缀是算法真正起作用的部分。假定给出了前 6 个域,为了生成一个通过期望数目的前导零 进行散列的的戳记,minter 必须尝试很多连续的后缀值。

讯享网

这些域不一定都要有,比如5域就可以不要。

前面6个域基本都要填固定的或者有意义的数据,不能随便写,所以要得到满足规则的散列值,邮件发送者只能不断的尝试7域的数据,这就是所谓的付出CPU的代价,这个时间是

=220
小讯
上一篇 2025-03-01 23:54
下一篇 2025-01-25 20:29

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/30390.html