Schnorr签名算法是由Claus Schnorr提出,是一个椭圆曲线上的签名算法,我们回顾下素数域上一些术语:
- 椭圆曲线的阶:椭圆曲线所有点的个数,包含无穷远点;
- 椭圆曲线上点的阶:若P为椭圆曲线上的点,nP=无穷远点,n取最小整数,即n为P的阶。
- 基点:椭圆曲线参数之一,用G表示,是椭圆曲线上的一点;
- 余因子:椭圆曲线的余因子,用h表示,为椭圆曲线点的个数/基点的阶。
- 椭圆曲线参数:素数域:
,其中p为素数,确定
,a和b确定椭圆曲线的方程,G为基点,n为G的阶,h为余因子。
首先介绍下Schnorr签名算法,假设签名者的公私钥对为$(sk,pk)$,其中$sk\in Z_{n}^{*}$,$pk=sk\cdot G$,G为基点,为消息m进行签名,签名过程如下:
- 随机选取一个整数
;
- 计算