Skip to content

Instantly share code, notes, and snippets.

View cafedood's full-sized avatar
💻
Focusing

James cafedood

💻
Focusing
  • San Francisco
View GitHub Profile
# If you failed to install `ree-1.8.7-*`, check below:
$ brew install openssl
$ cp -r /usr/local/opt/openssl/include/* /usr/local/opt/openssl@1.1/include/
$ rvm install ree-1.8.7-2011.12
# or
$ LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" rvm install ree-1.8.7-2011.12
@cafedood
cafedood / gist:165db191692e4dce3a57a5a17b43bf44
Created September 2, 2016 15:23
[forward] 生日攻击 Alice & Bob
hash碰撞,数字签名,生日攻击——Alice怎样才能被Bob骗去签巨额的合同
作者 : 余昊男
这里有一个合同交易的故事。
假设Bob和Alice在谈一桩生意。最后两人把价格谈好了,100万美元。Bob为Alice起草了一份合同,合同的内容就是Alice从Bob那里以100万美元的价格买下一件产品。
按照通常的程序,如果双方都同意一份合同有效,这份合同就会先用一个安全系数很高的hash函数映射到一串长度为n的二进制值(也就是说hash值的理论个数为2^n)。然后Alice和Bob对这个hash值进行数字签名(digital signature)。
一个hash函数的特点就是可以把任意长度的文档(或二进制串,以下直接称文档)映射到长度为n的二进制值,这种映射是多对一和单向的。安全性好的hash函数H应当具备以下三个特点:
1. 给定任意一个二进制串b,找到hash之前的文档t(也就是说使得H(t)=b)非常困难。这里的困难指的是如果用计算机枚举,将会花费大把时间,基本上在允许的时间范围内不可行。
2. 给定任意一个文档 t1,找到另外一个文档 t2,使得用hash函数之后得到的两个二进制值相同(H(t1)=H(t2))非常困难。
3. 找到t1和t2,使得H(t1)=H(t2)非常困难。这个条件也称为hash碰撞。
由于密码学中的hash函数具有以上特点,人们经常对文档应用hash函数,用hash值来证明文档的存在性。