在区块链中,我们需要用到公钥和私钥。在之前的自己动手写区块链-发起一笔交易(Java版)中,我们就使用了公钥和私钥。其中公钥是钱包的地址,私钥则类似钱包的密码。
最常用到的公开秘钥算法无疑是RSA。比如ssh连接的公钥和私钥,你总会看到RSA。
然而在区块链中人们都会去使用另一个算法:椭圆曲线算法。
椭圆曲线算法
大约是在历史上的某一天,有人发现数学函数里的椭圆曲线非常适合做成一个非对称加密算法。
这个函数有个特点:由输入算输出很容易,但通过输出反推输入则几乎不可能。
发现没?椭圆曲线就是一个二元方程,并且一个变量为2阶,另一个变量为3阶。
ECDSA
在区块链中,用的最多的就是ECDSA(Elliptic Curve+DSA)。ECDSA是通过椭圆加密算法对DSA(数字签名算法)的模拟。ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。
我们在自己动手写区块链-发起一笔交易(Java版)用的也是ECDSA。
贴代码:
JDK7之后,增加了对ECDSA的实现,你看到上面的代码就是使用的KeypairGenerator来获取的的ECDSA实例,然后生成的公钥和私钥。
对了,比特币中也是使用的椭圆曲线,只不过它用的是SECP256k1。