阅读 1475

ECDSA椭圆曲线数字签名算法概要和使用说明


声明: 转载注明本人出处, 请在方便的情况下尽量告知.

尊重原创, 共同进步.


概要

ECDSA(Elliptic Curve Digital Signature Algorithm), 使用椭圆曲线加密算法学进行 数字签名 的一种算法. 参考文档3

安全等级(用bit表示其破解最大可能运算次数). 如: 80bit的公钥, 意味着最大可能需要2^80次运算才能找到私钥.

80bit这个安全等级上, ECDSA的公钥长度为160bit, 而DSA的公钥长度为320bit, 体量上大大缩小.

基本流程

  • 算法的基本思路:

  1. 选择一条曲线
  2. 选择该曲线上的一个点, 作为你的原点
  3. 生成一个随机数, 作为你的私钥
  4. 以原点和随机数, 经过一系列神奇的数学运算, 得到你的公钥
  • 生成公钥后, 你签名的基本逻辑是:

  1. 获取需要签名的数据(或文件)的Hash
  2. 使用私钥对该Hash进行签名, 生成RS 详细说明
  • 完成签名后, 其它人验证签名的基本逻辑是:

  1. 使用S和公钥, 通过一个神奇的数学运算, 生成R'
  2. 对比RR', 两者相同, 则签名合法. 否则, 非法 详细说明

这个公钥, 在现在的计算机算力情况下, 基本上不可能逆推回私钥, 所以在极大程度上是安全的(参考安全等级). 而考虑到便利情况下, 一般ECDSA的公钥长度会设定为160bit, 即20Byte

算法原理简述

  1. Hash是数据的摘要结果, 标准的ECDSA使用的是Hash算法是SHA1. 但这个可以进行替换, 如可使用SHA3的算法进行数据摘要. 这个摘要长度越大, 运算量越多, 理论上安全性也越高.
  2. 椭圆曲线公式y^2 = (x^3 + a * x + b) mod p 和 点加法point addition 是ECDSA的基础. 参考文档2.
  3. 暗门函数trapdoor function, 要求单向运算简单, 逆向运算困难. ECDSA属于离散对数类的暗门函数的一种, 属于目前理论较成熟, 安全系数相对较高的加密算法. 参考文档4
  4. ECDSA算法中需要设置的参数包括: y^2 = (x^3 + a * x + b) mod p 中的 a, b, 指定曲线. p, 是质数. 还有 N, 椭圆曲线上点的个数, 0 < N < p, 而且Nperfect square. 以及 G, 任意曲线上的点, 作为你运算的原点.
  5. 光有公钥, 并无法证明私钥签名是否合法, 还需要使用同样的参数进行运算.

部分细节

创建签名

40字节的签名, 分为2个部分. RS, 各占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%.

参考文档

  1. By snifikino UNDERSTANDING HOW ECDSA PROTECTS YOUR DATA www.instructables.com/id/Understa…
  2. Security level en.wikipedia.org/wiki/Securi…
  3. Elliptic Curve Digital Signature Algorithm en.wikipedia.org/wiki/Ellipt…
  4. Trapdoor function en.wikipedia.org/wiki/Trapdo…
  5. Discrete logarithm en.wikipedia.org/wiki/Discre…
  6. Perfect square(Square number) en.wikipedia.org/wiki/Square…
  7. Secp256k1 en.bitcoin.it/wiki/Secp25…
关注下面的标签,发现更多相似文章
评论