椭圆曲线数字签名算法(ECDSA)
首先,我们给出ECDSA处理过程的简要概述。本质上,包括四个基本要素:
- 参与数字签名的所有通信方都使用相同的全局域参数,用定义椭圆曲线以及曲线上的基点。
- 签名者首先需要生成一对公钥、私钥。对于私钥,签名者选择一个随机数或者伪随机数作为签名者的私钥。使用随机数和基点,签名者计算出椭圆曲线上的另一解点,作为签名者的公钥
- 对于待签名的消息计算其hash值。使用私钥、全局域参数、hash值来产生签名、签名包括两个整数,r和s
- 如果要对签名进行验证,验证者使用签名者的公钥、全局域参数、整数s作为输入,并将计算得到的输出值v与收到的r进行比较。如果v=r,则签名通过
接下来,我们依次介绍这四个基本元素
全局域参数
可用于密码应用的椭圆曲线有两类:上的素数域椭圆曲线和
上的二次域椭圆曲线。对于ECDSA使用素数域椭圆曲线。ECDSA的全局域参数入戏:
q 一个素数
a,b 上的整数,通过等式
来定义椭圆曲线
G 满足椭圆曲线等式的基点,表示为
n 点G的阶,即n是满足nG=0 的最小正整数。这也等于曲线上点的个数
密钥产生
每个签名者需要产生一个密钥对,包括一个私钥和一个公钥。签名者,假设是Bob,通过以下步骤产生上述两个密钥:
- 选择随机整数d,
- 计算Q=dG。得到一个曲线
上的解点
- Bob的公钥是Q,私钥是d
数字签名的产生与认证
通过使用公开的全局域参数和手中的私钥,Bob对于消息m产生320字节数字签名的步骤如下:
- 选择一个随机整数或伪随机整数k,
- 计算曲线的解点p=(x,y)=kG,以及r =x mod n 。如果r=0,则跳到步骤1
- 计算
- 计算e=H(m)。这里的H是hash函数SHA-2或SHA-3
- 计算
如果s=0,则跳到步骤1
- 消息m的签名是(r,s)对
Alice拥有公开的全局域参数以及Bob的公钥,Alice收到Bob发送的消息以及数字签名后,对于签名的验证步骤如下:
- 检查r和s是否为1到n-1之内的整数
- 使用SHA,计算160位的hash值e=H(m)
- 计算
- 计算
和
- 计算解点
- 当且晋档v=r时,接受Bob的签名