最近做以太坊钱包,涉及到很多算法,因此有此文。
非对称加密算法
非对称加密算法最根本的原理:利用信息的不对称性
比如小明只会加法,所以大强就问了。7+7=?
10个呢?
……、99个、999个
当这个数字很大很大的时候,比如9999个。小明基本就搞不定了。
而此时大强微微一笑10000x7-7 =69993
公钥密码算法安全的必要条件(非充分)是“由公钥不能反推出私钥”。
例子:
下面我们举个例子,当整个世界只会乘法和加减法,而不会除法时,我们便可以有如下的推导
小红(服务器)选择一个公式3x5=15
.将数字5
作为私钥。
将3x?=15
作为公钥发出去。
小明(客户端)想告诉小红一个数字(加密信息)9
.
他随手想到一个私钥7
,并根据公钥3x?=15
想到两个等式:
3x7=21
15x7+9=114
(15也就是3*?)
将私钥7
和加密信息9
隐藏,得到3x??=21
和 15x??+x=114
作为公钥发给小红(服务器)。
小红拿到公钥后,根据结合律可以方便的将15x??
替换为21x5
此处能理解么?理解不了也没关系。下面我会讲。
根据乘法结合律
15x??=(3x5)x??=(3x??)x5=21x5
(因为小红知道15就是3x5)
代入公钥15x??+x=114
此时就是21x5+x=114了。小红(服务器)拿到了加密信息9
.
如果此时有一个黑客小黑,他即得到了公钥。他也可以推到3*??=21
但是只要他不知道小红的私钥5
就无法获取到加密信息9
。
现在我们会除法了。所以不能用上面来处理公钥。于是一帮科学家找啊找啊。终于找到了一个完美的类似场景。ECC(椭圆曲线加密)。这个有点高深,反正我看了半天没看懂。但是基本原理无非是找到了会乘法不会除法的场景。也就是正向求值比较简单,但是逆向却是几乎不能完成的任务。
在这个的基础上,科学家选取了一条曲线,并命名为secp256k1。长的如下:
secp256k1是一条用于密码学的椭圆曲线。也就是从众多的ECC曲线中,根据加密速度以及密码强度等等各方面考虑选取的一条特殊曲线。它总共包含以下6个参数:(p,a,b,G,n,h)
想研究的可以看一下:Secp256k1的wiki
下一篇文章我会讲关于以太坊(Ethereum)钱包的创建原理以及实现
Git地址:https://github.com/snailflying/ETHWallet