热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>软件应用>

用 hashcash 打击垃圾邮件

来源: 作者: 时间:2007-03-24 Tag: 点击:

hashcash(版本 1)格式
只有一个特定的 SHA-1 散列值是不够的。我们还希望戳记特定于被请求的资源 —— 也就是说,用于 mertz@gnosis.cx 的戳记应该与用于 someuser@yahoo.com 的戳记具有不同的适用性。如果不是这样,垃圾邮件制造者就可以只生成一个高比特值的戳记并到处去使用它。

另外,一旦生成戳记,我不希望每一个想给我发送邮件的垃圾邮件制造者都能共享它。所以,hashcash 采用了以下两个额外步骤(或者至少建议它们应该作为协议的一部分):

  • 首先,戳记携带一个日期。用户可能会决定认为比特定期限更早的戳记是非法的。
  • 其次,hashcash 客户机可能(并且多半应该)实现一个 double spend 数据库。

在 double spend 数据库中,每一个戳记都只能使用一次;如果第二次收到它,那么就认为它是非法的(非常类似于邮票在使用后会被做标记)。具体地说,hashcash(版本 1)戳记类似于下面的代码:

1:bits:date:resource:ext:salt:suffix

戳记包括 7 个域。

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

现在让我们来看 bashcash 如何在电子邮件中起作用。

bashcash 如何在电子邮件中起作用
在理想的世界中,所有发送者都应该在他们的消息中包含 bashcash 标记;接收者在接收时都将检查它们的合法性。不过,在实际生活中,hashcash 还没有得到那么广泛的应用。虽然如此,开始使用 bashcash(不管是作为发送者还是作为接收者)并不会对现有电子邮件工具产生任何影响。换句话说,在电子邮件中使用 bashcash,您不会有任何损失。

为了给发出的消息加上戳记,只需要向电子邮件添加头文件即可:用于电子邮件的每一个 To:Cc: 接收者的 X-Hashcash 头。例如,某个想给我发送消息的人可能会在消息中包含一个与示例 rfc2822 头文件类似的头文件:

X-Hashcash: 1:20:040927:mertz@gnosis.cx::odVZhQMP:7ca28

显然,应该由 MUA(邮件用户代理,mail user agents)、过滤器或者 MTA(邮件传输代理,mail transport agents)来做这件事情,而不是要求用户手工完成。不过,手工完成也不太难,至少实验时如此。首先,通过查看戳记的散列来校验它,如下所示:

$ echo -n 1:20:040927:mertz@gnosis.cx::odVZhQMP:7ca28 | sha
00000b50b85a61e7ba8ac4d5fed317c737706ae5

注意前导零(每一个十六进制数是 4 个比特)。当然,还需要校验哪个资源是您识别出来的那个资源(比如您的收件人地址之一),那个戳记还没有被使用过,日期是当前日期。另外,一个合法的戳记拥有的前导零的数目应该与其声明要拥有的数目相同(不过您可以决定强制实行您自己的允许邮件通过的最小代价:20 比特是一个不完全标准(semi-standard),它最终可能会随着 Moore 定律而发生改变)。

为什么这会起作用?
生成一个 20-比特的戳记只需要几秒钟的时间。当您一天中只发送几十封电子邮件时,这个代价并不大。但是,对那些想要发送数百万消息的垃圾邮件制造者来说,不能容忍每条消息使用额外几秒的 CPU 时间。一天之中只有 86,400 秒。即使垃圾邮件制造者利用植入木马(trojans)的僵尸(zombies)的技术,需要使用具体的 hashcash 戳记至少也会减少那些僵尸进程的发出量。当然,校验一个戳记所需的时间只是一秒的一小部分。

另一方面,向您自己的 MUA 添加 hashcash 生成和校验对其他所有人没有任何负面影响(不像其他一些反垃圾邮件方法)。对那些不使用该协议的接收者而言,这些只是一个他们很容易忽略的附加头文件。对那些没有添加 hashcash 戳记的发送者而言,检验 X-Hashcash: 的接收者不用校验任何内容。如果发送者没有添加戳记,那么您的境况不会因为进行检验而变得更糟;也不会因此变得更好。

一个好的 MUA 或者垃圾邮件过滤系统可以将拥有合法 hashcash 戳记的电子邮件列入白名单(whitelist)。SpamAssassin 甚至更巧妙地为更多合法 hashcash 比特提供了更高的 +ve 分数。我认为,将基于 bashcash 的方法应用于白名单是对 TMDA 等交互式质询系统的改进 —— 质询消息在返回时不会丢失,发送者不会忘记响应质询。质询响应就在原始消息之中(作为一个 hashcash 戳记)。




相关文章:
QT之1(PC机上搭建环境及应用)
安装wine
解决安装CentOS5之后,vi不显示颜色的问题
linux控制台下的一个好东西-splitvt
Vmware-server目标主机积极拒绝,无法连接
vmware server 1.0.6 for linux相关命令
逐步设置vim C/C++语法高亮显示和自动缩进
在VM虚拟机器Linux下安裝VMware Tool的方法
玩了一下compiz-fusion
BMP-Beep Media Player
VIM 文件编码识别与乱码处理(一)
VIM 文件编码识别与乱码处理(二
VI技巧
让firefox 支持 amule (ed2k 协议)
为CentOS 5.1中的Firefox 1.5安装Flash插件……
vi 在编辑某文件时,在该文件内查找东西用何命令?
Freebsd + wine1.1.9 + 国元网上证券交易(通达信
emacs 代码补全功能
安装drupal-6.2和简体中文语言包
谈 Linux GNU 实用工具兼容性
Linux 文件压缩工具指南 一些免费和实用工具的评
Emacs 基础知识
介绍 Emacs 的编辑环境
在 Emacs 中编辑文本
生活在Emacs中
生活在emacs中2
生活在Emacs中3
Linux命令行性能检测工具
Linux下Expect配置
生活在Emacs中4