ethereum原理--关于keccak256
关于 keccak256
看以太坊代码,发现很多地方使用的加密函数是:keccak256
,了解了一下做个输出。
Keccak算法(读作为“ket-chak”)是Guido Bertoni, Joan Daemen, Michael Peters, and Giles Van Assche的工作。 SHA-3的候选人在2008年10月提交。
Keccak采用了创新的的“海绵引擎”散列消息文本。它是快速的,在英特尔酷睿2处理器下的平均速度为12.5周期每字节。它设计简单,方便硬件实现。
Keccak已可以抵御最小的复杂度为2n的攻击,其中N为散列的大小。它具有广泛的安全边际。至目前为止,第三方密码分析已经显示出Keccak没有严重的弱点。尽管如此,Keccak的创建者已经启动Crunchy加密比赛,挑起人们发现和报告成功且可核查的攻击Keccak的兴趣。
Keccak-256被设计为于2007年举行的SHA-3
密码哈希函数竞赛的候选者。
Keccak是获胜的算法,在2015年被标准化为 FIPS
(联邦信息处理标准)。
不过NIST接受原始的Keccak256设计后,更改了Padding的格式,以太坊坚持使用了原始的方案,因为这一更改存在争议,导致了正式的SHA3实现和原始的Keccak不兼容。NIST
一般指美国国家标准与技术研究院。
作用
keccak256
算法则可以将任意长度的输入压缩成64位
,16进制的数,且哈希碰撞的概率近乎为0.
keccak256 代码结构
sha3加密接口: crypto.go
加密接口在:crypto.go
源码文件中。KeccakState
: 是对 sha3.state
的封装,下面的注释也有说明。还特意提到Read
比Sum
快。
1 | // KeccakState wraps sha3.state. In addition to the usual hash methods, it also supports |
主要方法 Keccak256Hash
作用:Keccak256Hash
计算并返回输入数据的Keccak256
哈希值,将其转换为一个内部哈希数据结构。
1 | // Keccak256Hash calculates and returns the Keccak256 hash of the input data, |
验证
拿了一下官方测试举例:crypto_test.go
。
1 | // These tests are sanity checks. |
以太坊哪些地方使用到了
几乎只要用的数据相关的,都需要进行转换。
将key进行转换
1 | func (t *odrTrie) TryGet(key []byte) ([]byte, error) { |
更多调用,所有的也看不完,找到重要的部分阅读。
结论
区块链依赖于加密算法,对加密算法的了解是非常有必要的。全看调用是看不完的,至少需要知道怎么用。
以太坊使用 keccak256 的目的:keccak256
算法则可以将任意长度的输入压缩成64位
,16进制的数,且哈希碰撞的概率近乎为0.