椭圆曲线密码学(Elliptic curve cryptography,缩写为 ECC),是基于椭圆曲线数学理论实现的一种非对称加密算法。git
椭圆曲线算法又细分为多种具体的算法。Go语言内置的椭圆曲线是secp256R1算法,而比特币系统中使用secp256K1算法。以太坊系统虽然也采用secp256K1算法,可是跟比特币系统的secp256K1算法上又有所差别。算法
椭圆曲线公钥系统是代替RSA的强有力的竞争者,与经典的RSA、DSA等公钥密码体制相比,椭圆密码体制有明显的优点。安全
一、ECC与RSA算法的优点对比性能
(1)安全性能更高(ECC可使用更短的密钥),同等安全强度下,二者秘钥长度的对好比下表所示。加密
(2)处理速度快,计算量小,处理速度快 在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。3d
(3)存储空间占用小,ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 因此占用的存储空间小得多。cdn
(4)带宽要求低使得ECC具备普遍的应用前景。blog
ECC的这些特色使它必将取代RSA,成为通用的公钥加密算法。ip
所谓数字签名(Digital Signature)(又称公开密钥数字签名、电子签章)是一种相似写在纸上的普通的物理签名,可是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名一般定义两种互补的运算,一个用于签名,另外一个用于验证。数字签名能够验证数据的来源,能够验证数据传输过程当中是否被修改。数学
数字签名是经过非对称加密算法中的私钥加密、公钥解密过程来实现的。私钥加密就是私钥签名,公钥解密就是公钥验证签名。所以数字签名由两部分组成:第一部分是使用私钥为消息建立签名的算法,第二部分是容许任何人用公钥来验证签名的算法。数字签名的使用流程如图13.12所示。
图7.1 数字签名
数字签名应该知足以下要求。
l 签名不可伪造性;
l 签名不可抵赖的;
l 签名可信性,签名的识别和应用相对容易,任何人均可以验证签名的有效性;
l 签名是不可复制的,签名与原文是不可分割的总体;
l 签名消息不可篡改,由于任意比特数据被篡改,其签名便被随之改变,那么任何人能够验证而拒绝接受此签名。