This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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值来证明文档的存在性。 |