ECDSA全称Elliptic Curve Digital Signature Algorithm,中文全称叫椭圆曲线数字签名算法,是目前比特币使用的非对称加密算法。它的作用在于对数据/文件创建数字签名,而这个数字签名是不可能被伪造的。类似作用的还有非对称加密算RSA算法。
椭圆曲线其实是一个数学方程,通常用下面的方程式来表示:
如果方程丽a和b取的值不同,那么对应的曲线形状也会不一样。
因为具体的工作原理涉及很多数学和密码学的基础知识,因此这里不展开说明。对工作原理感兴趣的可以去看这份科普:
有一个椭圆曲线图和该图形的数学方程
1.在这个曲线图上你随机选取一个点作为你的原点
2.这个原点放到数学方程会产生一个随机数-----你的私钥
3.然后用这个原点和随机数(你的私钥)放到另外一个数学方程能得到曲线上面第二个点-----你的公钥
4.当你要对一个文件进行签名的时候,需要用到你的私钥(随机数)和该文件的哈希(不了解哈希的看我的关于哈希的笔记)组成一个方程,这样将得到一个数字签名
生成的数字签名分为两部分R和S
1.为了验证数字签名的准确性,将公钥和签名的一部分S放入另外一个数学方程
2.如果得到的结果是R,那么证明该签名是有效的;反之得出的结果不是R,那么该签名无效
椭圆曲线的两种运算:点加法(Point Addition)和点乘法(Point Multiplication)
点加法:假设现在有这样一条椭圆曲线(下图1)。画一条直线,与曲线相交于 3 个点,分别是 P,Q,R ,根据点加法运算的定义,可以得到 P+Q+R=0 ,那么 P+Q=−R , −R 的定义是关于 x 轴对称所得到的一个点,如上图所示,这就是点加法的定义。
点乘法:如果我们移动这条直线,让 P,Q 两点重合。根据上面的点加法规则,可以得到 2P 点,以此类推,不断去连接 P 点和 nP 点,就可以得到 3P,4P... (n+1)P 点。点乘就定义为 k×P ,表示 P 点的 k 次相加。
单向陷门函数:在上面我们得到了点乘的定义,任意一点 R 可以通过这个点乘公式 R=k×P 计算得到。这里的关键在于即使知道了 P 和 R 点,我们也无法计算得到 k 。这是椭圆曲线算法安全性的基础,这个特性也称之为单向陷门函数。这个整数 k 通常就是算法中的私钥,而 R 对应的就是公钥。