1、实验三 DSA 数字签名算法姓 名: 学 号: 学 院: 信息工程学院 指导老师: 郑明辉 1. DSA 算法原理数字签名是数据在公开行信道中传输的安全保障,能够实现数据的公开、公正、不可抵赖等特点的方法,只能公开的密钥、密码签名算法。国际供认的公开密钥签字算法主要有 RSA 算法、ElGAMAL 算法或者其变形的签名算法。DSA(Digite Signature Arithmotic )是 Schnore 和 ElGamal 算法的变型。美国国家标准技术研究所(NIST)1994 年 5 月 19 日公布了数字签名标准的(DSS),标准采用的算法便是 DSA,密钥长度为 5121024 位。
2、密钥长度愈长,签名速度愈慢,制约运算速度的只要因素是大数的模指数运算。2. DSA 签名中的参数参数描述:Digital Signature Algorithm (DSA)是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS(DigitalSignature Standard)。算法中应用了下述参数: p:L bits 长的素数。L 是 64 的倍数,范围是 512 到 1024; q:p - 1 的 160bits 的素因子; g : g = h(p-1)/q) mod p,h 满足 h 1; x:x #include #include “BigInt.h“
3、#include “sha1.h“#include “time.h“int shas1(const unsigned int x, unsigned char digest20)SHA1_CTX context;unsigned char buffer16384; /,digest20;/ FILE *file; SHA1Init(SHA1Update(SHA1Final(digest, return 0;CBigInt sha(CBigInt y)SHA1_CTX context;CBigInt X;unsigned char buffer16384,digest20;CString str
4、;char *t=“0123456789ABCDEF“;if(y.m_nLength=1)X.Mov(0);return X;str=“;int a;char ch=0;str.Insert(0,ch);X.Mov(y);while(X.m_ulValueX.m_nLength-10)a=X.Mod(16);ch=ta;str.Insert(0,ch);X.Mov(X.Div(16);int i=0;while (stri0) i+;for (a=i,i=0;i=0) y /= 2 ; else p.Mov(p.Mul(q); y -= 1; return p;CBigInt pow3(CBigInt x, CBigInt y, CBigInt m)CBigInt p,t;p.Mov(1);t.Mov(0);while (y.Cmp(t)0)if (y.m_ulValue0 x.Mov(x.Mod(m); x.Mov(x.Div(2); else p.Mov(p.Mul(x); p.Mov(p.Mod(m); y.Mov(y.Sub(1); return p;4. 过程及结果截图描述开始运行选择 512 位密钥长度,点击公开参数,如下图随便选择一个你要签名的文件,然后选择算法点击数字签名然后点击签名验证