尊重原创, 共同进步.
概要
ECDSA
(Elliptic Curve Digital Signature Algorithm), 使用椭圆曲线加密算法学进行 数字签名 的一种算法. 参考文档3
安全等级(用bit表示其破解最大可能运算次数). 如: 80bit
的公钥, 意味着最大可能需要2^80
次运算才能找到私钥.
在80bit
这个安全等级上, ECDSA的公钥长度为160bit
, 而DSA的公钥长度为320bit
, 体量上大大缩小.
基本流程
-
算法的基本思路:
- 选择一条曲线
- 选择该曲线上的一个点, 作为你的原点
- 生成一个随机数, 作为你的私钥
- 以原点和随机数, 经过一系列神奇的数学运算, 得到你的公钥
-
生成公钥后, 你签名的基本逻辑是:
-
完成签名后, 其它人验证签名的基本逻辑是:
- 使用
S
和公钥, 通过一个神奇的数学运算, 生成R'
- 对比
R
和R'
, 两者相同, 则签名合法. 否则, 非法 详细说明
这个公钥, 在现在的计算机算力情况下, 基本上不可能逆推回私钥, 所以在极大程度上是安全的(参考安全等级). 而考虑到便利情况下, 一般ECDSA的公钥长度会设定为160bit
, 即20Byte
算法原理简述
Hash
是数据的摘要结果, 标准的ECDSA
使用的是Hash算法是SHA1
. 但这个可以进行替换, 如可使用SHA3
的算法进行数据摘要. 这个摘要长度越大, 运算量越多, 理论上安全性也越高.- 椭圆曲线公式
y^2 = (x^3 + a * x + b) mod p
和 点加法point addition
是ECDSA的基础. 参考文档2. - 暗门函数
trapdoor function
, 要求单向运算简单, 逆向运算困难.ECDSA
属于离散对数类的暗门函数的一种, 属于目前理论较成熟, 安全系数相对较高的加密算法. 参考文档4 ECDSA
算法中需要设置的参数包括:y^2 = (x^3 + a * x + b) mod p
中的a
,b
, 指定曲线.p
, 是质数. 还有N
, 椭圆曲线上点的个数,0 < N < p
, 而且N
是perfect square. 以及G
, 任意曲线上的点, 作为你运算的原点.- 光有公钥, 并无法证明私钥签名是否合法, 还需要使用同样的参数进行运算.
部分细节
创建签名
40字节的签名, 分为2个部分. R
和S
, 各占20个字节
R的生成:
- 生成时, 需要先使用随机算法生成一个20字节的
k
- 再使用点乘法运算得到点P,
P=k*G
- 该P点的x坐标值, 则为
R
S的生成:
- 获取数据的Hash值, 计为z
S = k^-1 (z + dA * R) mod p
,dA
私钥
验证签名
P = S^-1*z*G + S^-1 * R * Qa
,Qa
公钥- 如果P的x坐标值等于R, 则该签名合法, 否则非法.
算法风险点
k
随机值, 要求为加密强度随机数. 如果其伪随机值可以被猜测/复现, 将意味着被攻击破解. 目前已有的案例为索尼PS3被黑客破解的事件
具体实现
拓展实现
- secp256k1 Bitcoin实现的
Standards for Efficient Cryptography(SEC)
. 这个算法实现, 是在Bitcoin流行后才被业界逐渐关注和采纳的. 其根本原因是比其它实现优化了速度, 提升了约30%.
参考文档
- By snifikino UNDERSTANDING HOW ECDSA PROTECTS YOUR DATA www.instructables.com/id/Understa…
- Security level en.wikipedia.org/wiki/Securi…
- Elliptic Curve Digital Signature Algorithm en.wikipedia.org/wiki/Ellipt…
- Trapdoor function en.wikipedia.org/wiki/Trapdo…
- Discrete logarithm en.wikipedia.org/wiki/Discre…
- Perfect square(Square number) en.wikipedia.org/wiki/Square…
- Secp256k1 en.bitcoin.it/wiki/Secp25…