发明名称 基于椭圆曲线对电子文档数字签名的安全保护方法
摘要 本发明公开了一种基于椭圆曲线对电子文档数字签名的安全保护方法,该方法按照以下步骤实施,生成系统参数:设置椭圆曲线等公共参数、映射函数及多个可有效计算的函数;用户密钥建立:对每个签名者随机选择私钥,计算相应的公钥,由签名者保密私钥,用来签名,公开公钥供验证签名使用;签名过程:利用私钥,生成消息的签名,并发送消息签名对给文档的接收者;验证过程:收到消息及签名,利用方案中的验证式检验,如果验证式成立,那么签名就得到验证,验证者可以确信收到的消息是持有与公钥相应的私钥的发送者发送的。本发明的数字签名方法,能产生多个基于椭圆曲线数字签名算法,用于提供文档传输中的完整性、真实性和不可否认性的安全保护。
申请公布号 CN101441693B 申请公布日期 2010.09.01
申请号 CN200810232405.2 申请日期 2008.11.25
申请人 西安理工大学 发明人 王尚平;张亚玲;王晓峰
分类号 G06F21/00(2006.01)I;H04L9/32(2006.01)I 主分类号 G06F21/00(2006.01)I
代理机构 西安弘理专利事务所 61214 代理人 罗笛
主权项 一种基于椭圆曲线对电子文档数字签名的安全保护方法,其特征在于,该方法按照以下步骤实施,步骤1,生成系统参数:进行如下设置,设置一个素数p和一个正整数m,其中m≥1,如果m>1,选取有限域GF(p)上的一个首项系数为1的m次不可约多项式f(x),定义一个有限域GF(pm),系数a,b,其中,a∈GF(pm),b∈GF(pm),定义GF(pm)上的椭圆曲线E=E(GF(pm)), <mrow> <mi>E</mi> <mo>=</mo> <msub> <mi>E</mi> <mrow> <mi>a</mi> <mo>,</mo> <mi>b</mi> </mrow> </msub> <mo>:</mo> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <msup> <mi>y</mi> <mn>2</mn> </msup> <mo>+</mo> <mi>xy</mi> <mo>=</mo> <msup> <mi>x</mi> <mn>3</mn> </msup> <mo>+</mo> <msup> <mi>ax</mi> <mn>2</mn> </msup> <mo>+</mo> <mi>b</mi> <mo>,</mo> <mrow> <mo>(</mo> <mi>b</mi> <mo>&NotEqual;</mo> <mn>0</mn> <mo>)</mo> </mrow> </mtd> <mtd> <mi>ifp</mi> <mo>=</mo> <mn>2</mn> </mtd> </mtr> <mtr> <mtd> <msup> <mi>y</mi> <mn>2</mn> </msup> <mo>=</mo> <msup> <mi>x</mi> <mn>3</mn> </msup> <mo>+</mo> <mi>ax</mi> <mo>+</mo> <mi>b</mi> <mo>,</mo> <mrow> <mo>(</mo> <msup> <mrow> <mn>4</mn> <mi>a</mi> </mrow> <mn>3</mn> </msup> <mo>+</mo> <mn>27</mn> <msup> <mi>b</mi> <mn>2</mn> </msup> <mo>)</mo> </mrow> <mo>&NotEqual;</mo> <mn>0</mn> <mrow> <mo>(</mo> <mi>mod</mi> <mi>p</mi> <mo>)</mo> </mrow> <mo>,</mo> </mtd> <mtd> <mi>ifp</mi> <mo>></mo> <mn>3</mn> </mtd> </mtr> </mtable> </mfenced> <mo>.</mo> </mrow>一个素数q整除#E(GF(pm)),#E(GF(pm))表示椭圆曲线E的阶数,即E(GF(pm)上点的总数,一个E上的点G=(gx;gY)生成一个阶为素数q的循环子群<G>,公共参数是(p,m,a,b,G,q,h),h=#(GF(pm))/q,其中q是基点G=(gx;gY)的阶,h称为余因子,一个映射函数π:<G>→Zq,一个安全Hash函数H:{0,1}*→Zq,以及7个可有效计算的函数η0,η1,η2,η3,η4,η5,η6,映射Zq×Zq到Zq,即ηi:(T,U)→zq,其中i=0,1,…,6,且使得η0(T,U)≠0,并将所有的设置安装到签名双方的计算机系统中;步骤2,用户密钥建立:对每个签名者随机选择私钥x∈Zq,计算相应的公钥是Y=xG,由签名者保密私钥x,用来签名;公开公钥Y供验证签名时使用;步骤3,签名过程:签名者执行下列操作,生成消息M的签名(T,S),在区间[1,q-1]中随机选择整数k,计算椭圆曲线上的点R=(x1,Y1)=kG,并计算T=π(R),U=H(M), <mrow> <mi>S</mi> <mover> <mo>=</mo> <mo>^</mo> </mover> <msub> <mi>F</mi> <mn>1</mn> </msub> <mrow> <mo>(</mo> <mi>k</mi> <mo>,</mo> <mi>x</mi> <mo>,</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> <mrow> <mo>=</mo> <msup> <mrow> <mo>[</mo> <mfrac> <mrow> <msub> <mi>k&eta;</mi> <mn>4</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>x&eta;</mi> <mn>5</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>&eta;</mi> <mn>6</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <mi>k&eta;</mi> <mn>1</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>x&eta;</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>&eta;</mi> <mn>3</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>]</mo> </mrow> <mfrac> <mn>1</mn> <mrow> <msub> <mi>&eta;</mi> <mn>0</mn> </msub> <mrow> <mo>(</mo> <mi>T</mi> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> </mfrac> </msup> <mi>mod</mi> <mi>q</mi> </mrow>则得到消息M的签名是(T,S),发送消息签名对(M,T,S)给文档的接收者;步骤4,验证过程:验证者执行如下计算,验证一个声称的公钥是Y的用户对消息M的签名(T,S):1)、收到消息M′,表示为一个二进制位串;2)、收到消息M′的签名,表示为两个整数T′和S′;计算hash值U′=H(M′),U′表示为一个长度为160bits的整数;3)、计算 <mrow> <msub> <mi>F</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>S</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>=</mo> <mo>-</mo> <mfrac> <mrow> <msub> <mi>&eta;</mi> <mn>3</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <msup> <mi>S</mi> <mrow> <mo>&prime;</mo> <msub> <mi>&eta;</mi> <mn>0</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> </msup> <mo>-</mo> <msub> <mi>&eta;</mi> <mn>6</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <mi>&eta;</mi> <mn>1</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <msup> <mi>S</mi> <mrow> <mo>&prime;</mo> <msub> <mi>&eta;</mi> <mn>0</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> </msup> <mo>-</mo> <msub> <mi>&eta;</mi> <mn>4</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> </mfrac> <mi>mod</mi> <mi>q</mi> </mrow> <mrow> <msub> <mi>F</mi> <mn>3</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>S</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <mo>=</mo> <mo>-</mo> <mfrac> <mrow> <msub> <mi>&eta;</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <msup> <mi>S</mi> <mrow> <mo></mo> <msub> <mi>&eta;</mi> <mn>0</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> </msup> <mo>-</mo> <msub> <mi>&eta;</mi> <mn>5</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <mi>&eta;</mi> <mn>1</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> <msup> <mi>S</mi> <mrow> <mo>&prime;</mo> <msub> <mi>&eta;</mi> <mn>0</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <mi>U</mi> <mo>)</mo> </mrow> </mrow> </msup> <mo>-</mo> <msub> <mi>&eta;</mi> <mn>4</mn> </msub> <mrow> <mo>(</mo> <msup> <mi>T</mi> <mo>&prime;</mo> </msup> <mo>,</mo> <msup> <mi>U</mi> <mo>&prime;</mo> </msup> <mo>)</mo> </mrow> </mrow> </mfrac> <mi>mod</mi> <mi>q</mi> <mo>;</mo> </mrow>4)、计算椭圆曲线点R′=F2(S′,T′,U′)G+F3(S′,T′,U′)Y;5)、如果验证式T′=π(R′)成立,那么签名就得到验证,验证者可以确信收到的消息是持有与Y相应的私钥x的持有者发送的;如果验证式T′=π(R′)不能成立,则签名验证失败。
地址 710048 陕西省西安市金花南路5号