精华内容
下载资源
问答
  • 理解DSA算法原理

    2020-05-22 00:45:37
    数字签名的实现原理简单地说,就是发送方利用hash算法对要传送的信息计算得到一个固定长度的消息摘要值,用发送方的私钥加密此消息的hash值所生成的密文即数字签名;然后将数字签名和消息一同发送给接收方。接收方...

    数字签名是一种以电子形式给消息签名的方法,是只有信息发送方才能进行的签名、信息发送方进行签名后将产生一段任何人都无法伪造的字符串,这段特殊的字符串同时也是对签名真实性的一种证明。电子信息在传输过程中,通过数字签名达到与传统手写签名相同的效果。
    数字签名的实现原理简单地说,就是发送方利用hash算法对要传送的信息计算得到一个固定长度的消息摘要值,用发送方的私钥加密此消息的hash值所生成的密文即数字签名;然后将数字签名和消息一同发送给接收方。接收方收到消息和数字签名后,用同样的hash算法对消息进行计算,得到新的hash值,再用发送方的公钥对数字签名解密,将解密后的结果与新的hash值比较,如果相等则说明消息确实来自发送方。
    一,简述
    DSA(Digital Signature Algorithm)源于ElGamal和Schnorr签名算法,1991年被美国NIST采纳为数字签名标准

    DSA算法中应用了下述参数:
    p:L bits长的素数。L是64的倍数,范围是512到1024;
    q:p – 1的160bits的素因子;
    g:g = h^((p-1)/q) mod p,h满足h < p – 1, h^((p-1)/q) mod p > 1;
    p, q,g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。
    x:x < q,x为私钥 ;
    y:y = g^x mod p ,(p, q, g, y )为公钥;
    H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm)

    1.密钥生成算法
    1)选取160比特长的素数q和比特长的素数,满足,其中且;
    2)随机选取正整数h,1<h<(p-1),令>1;q,p和g作为系统公开参数;
    3)每个用户,随机选取正整数,,计算;用户的公钥为y,私钥为x。
    2.签名算法
    对于消息M,首先随机选取整数k,,计算

    则M的签名为,其中H为Hash函数SHA。
    3.验证算法
    接收方收到消息M和签名后,计算

    验证等式

    如果成立,则说明消息确实来自发送方。
    DSA算法实验步骤和调试过程

    DSA算法实验步骤和调试过程
    
    /***
     * wulara
     * 豆瓣:尧白
     * 交个盆友吧~
     * 
     */
    
    
    import java.security.KeyFactory;
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.Signature;
    import java.security.interfaces.DSAPrivateKey;
    import java.security.interfaces.DSAPublicKey;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    import javax.xml.bind.DatatypeConverter;
    public class DSAUtil {
    	private static String src = "I LOVE CHINA!";
    
    	public static void main(String[] args) {
    	    jdkDSA();
    	}
    
    	public static void jdkDSA() {
    	    // 1. 初始化 秘钥
    	    try {
    	        KeyPairGenerator generator = KeyPairGenerator.getInstance("DSA");
    	        generator.initialize(512);
    
    	        KeyPair keyPair = generator.generateKeyPair();
    	        DSAPublicKey dsaPublicKey = (DSAPublicKey) keyPair.getPublic();
    	        DSAPrivateKey dsaPrivateKey = (DSAPrivateKey) keyPair.getPrivate();
    	        System.out.println("public="+dsaPublicKey);
    	     
    	        System.out.println("x="+dsaPrivateKey.getX());
    	   
    
    	        // 2。 执行签名
    	        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(dsaPrivateKey.getEncoded());
    	        KeyFactory factory = KeyFactory.getInstance("DSA");
    	        PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);
    
    	        Signature signature = Signature.getInstance("SHA1withDSA");
    	        signature.initSign(privateKey);
    	        signature.update(src.getBytes());
    	        byte[] sign = signature.sign();
    	System.out.println("sign=\n"+DatatypeConverter.printHexBinary(sign));
    	        // 验证签名
    	        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(dsaPublicKey.getEncoded());
    
    	        factory = KeyFactory.getInstance("DSA");
    	        PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);
    
    	        signature = Signature.getInstance("SHA1withDSA");
    	        signature.initVerify(publicKey);
    	        signature.update(src.getBytes());
    
    	        boolean verify = signature.verify(sign);
    
    	        System.out.println(verify);
    
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }
    
    	}
    }
    


    DSAPublicKey
    DSA 公用密钥的接口
    3、DSAPublicKey
    DSA 专用密钥的接口
    4、PKCS8EncodedKeySpec
    PKCS8EncodedKeySpec类继承EncodedKeySpec类,以编码格式来表示私钥。
    PKCS8EncodedKeySpec类使用PKCS#8标准作为密钥规范管理的编码格式
    5、Signature
    Signature 类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。
    在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法指定为 SHA1withDSA。

    展开全文
  • DSA算法原理

    千次阅读 2011-11-16 15:21:57
    Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。算法中应用了下述参数: p:L bits长的素数。L是64的倍数,范围是512到1024; q:p - ...
    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 < p - 1, h^((p-1)/q) mod p > 1;
    x:x < q,x为私钥 ;
    y:y = g^x mod p ,( p, q, g, y )为公钥;
    H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。
    p, q, g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下:

    1. P产生随机数k,k < q;
    2. P计算 r = ( g^k mod p ) mod q
    s = ( k^(-1) (H(m) + xr)) mod q
    签名结果是( m, r, s )。
    3. 验证时计算 w = s^(-1)mod q
    u1 = ( H( m ) * w ) mod q
    u2 = ( r * w ) mod q
    v = (( g^u1 * y^u2 ) mod p ) mod q
    若v = r,则认为签名有效。

      DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这
    样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到。

    展开全文
  • DSA数字签名原理及python实现

    万次阅读 2017-12-08 15:19:11
    python的加密算法一般在PyCrypto库中,这个库包含了常见的对称加密算法(DES、AES、IDEA、等)、公钥加密算法(RSA、DSA、等)、散列算法(MD5、SHA1、RIPEMD、等)...此标准采用的算法称为数字签名算法(Digital Signa

    python的加密算法一般在PyCrypto库中,这个库包含了常见的对称加密算法(DES、AES、IDEA、等)、公钥加密算法(RSA、DSA、等)、散列算法(MD5、SHA1、RIPEMD、等)。

    DSA数字签名原理

    1991年8月美国国家标准局(NIST)公布了数字签名标准(Digital Signature Standard, DSS)。

    此标准采用的算法称为数字签名算法(Digital Signature Algorithm, DSA),它作为ElGamal和Schnorr签名算法的变种,其安全性基于离散对数难题;并且采用了Schnorr系统中,g为非本原元的做法,以降低其签名文件的长度。

    方案包括初始过程、签名过程和验证过程。

    1. 初始过程

    (1) 系统参数:全局公钥KUG:p,q,g。p,q,g 作为系统参数,供所有用户使用,在系统内公开。
    q: 选择素数q,位长为160,即2159<q<2160
    p: 随机生成L位的素数p=kq+1,这里L在512到1024之间,且为64的倍数
    g: 随机选择整数h,计算g=h(p1)/qmod p,其中1<h<(p1)g>1,gq1(mod p)

    (2) 用户私钥:用户选取一个私钥x,x 随机或伪随机整数, 其中1xq1
    (3) 用户公钥:用户的公钥y,y=gxmod(p),公开。
    与用户每条消息相关的秘密值k
    k: 随机或伪随机整数, 其中0

    2. 签名过程

    对待签消息M
    输入:((g,p,q,x),M) , M为要签名的消息
    (1) 生成一随机整数 k,0<k<q
    (2) 计算r=(gk mod p)mod q
    (3) 计算 s=k1(H(m)+xr)mod q
    则输出(r,s)为签名人对M的签名。
    注:
    H(M)使用SHA-1生成的M的散列码
    r不依赖消息,是k和全局公钥的函数。故对一个消息存在许多签名
    离散对数的困难:从r恢复k是很困难的,从s恢复x是不可行的

    这里写图片描述

    3. 验证过程

    (1) 输入:((g,p,q,y),M,(r ′,s ′ ))
    (2)计算w=(s')1mod q
    (3) 计算u1=[H(M')w]mod q,u2=(r')wmod q
    (4)计算v=[(gu1yu2)mod p]mod q
    正确性证明:
    验证:如 v=r ′则签名有效

    其中M ′,r ′,s ′ 为接收端得到的M,r,s版本
    这里写图片描述

    DSA签名特点

    • DSS的签名比验证快得多
    • DSS不能用于加密或者密钥分配
    • s1mod q要存在s ≠ 0 mod q,如果发生,接收者可拒绝该签名. 要求重新构造该签名,实际上, s ≡ 0 mod q的概率非常小
    • 签名产生的计算任务有:
      1)计算gkmod p求r
      2)确定逆元 k1 求s

    DSA签名实例

    python实现DSA签名

    下面是一个DSA加密的实例:

    #encoding utf-8
    from Crypto.Random import random
    from Crypto.PublicKey import DSA
    from Crypto.Hash import SHA
    
    message = "Hello World"
    key = DSA.generate(1024)
    h = SHA.new(message).digest()
    k = random.StrongRandom().randint(1,key.q-1)
    sig = key.sign(h,k)
    
    print "Message is ",message
    print "signature is ",sig
    
    #签名的验证
    if key.verify(h,sig):
        print "Signature verification is true"
    else:
        print "Sorry,signature verification is false"

    手动DSA签名

    1. 密匙生成:
      p=67=6×11+1,q=11
      g=3p1/11mod p=36mod 67=59
      x=5y=gx mod p=62
      KU=59671162
      KR=5967115

    2. 签名:
      H(M)=4,k=3
      R=(gkmod p)mod q=(593mod67)mod11=2
      S=k1(H(M)+rx)mod q=31(4+2×5)mod11=1
      (r,s)=(2,1)

    3. 验证
      验证r´s´=21
      w=s´1mod q=11mod 11=1
      U1=HM×wmodq=4×1mod 11=4
      U2=r´×wmod q=2×1mod 11=2
      V=gu1×yu2mod p mod q=594×622mod67mod11=2
      因为v=r´21HM的签名

    展开全文
  • DSA签名

    2021-06-19 21:30:26
    DSA签名【实验目的】【实验环境】【实验预备知识点】【实验内容】【实验步骤】【实验思考题】 【实验目的】 1、了解DSS标准; 2、了解DSA数字签名的原理; 3、验证DSA的签名及签名验证过程。 【实验环境】 假定有...

    【实验目的】

    1、了解DSS标准;
    2、了解DSA数字签名的原理;
    3、验证DSA的签名及签名验证过程。

    【实验环境】

    假定有用户A需要将一段信息进行DSA签名后发送给B。先定义DSA算法的运行参数,生成DSA算法所需的公私钥对,用户A先对消息进行签名,然后消息与签名均发送给用户B,用户B再利用A的公钥加以验证。
    完成本实验需要使用密码学教学软件,在D:\Release\bin目录下打开Crypto软件。

    【实验预备知识点】

    DSA(Digital Signature Algorithm)签名算法是由美国国家标准与技术研究院(NIST, National Institute of Standards and Technology)提出的一个关于数字签名的美国联邦信息处理标准(FIPS, Federal Information Processing Standard)。该标准在1991年8月提出,1993以FIPS 186被采用,作为数字签名(DSS, Digital Signature Standard)的一部分。
    公钥、私钥生成:
    分为两部分,首先约定算法的一些参数,然后为各个用户生成公私钥。

    算法参数:
    1、选定一个哈希函数H,最初为SHA-1,现在SHA-2也可以使用。函数输出有可能需要截短到密钥对的长度。
    2、选定密钥的长度L、N。密钥长度决定了加密可靠度。最近的标准FIPS 186-3指定长度应该为:(1024,160), (2048,224), (2048,256), and (3072,256)
    3、选取N位长度的一个质数q。N长度必须小于或等于哈希函数H输出长度。
    4、选取L位长度的一个质数p,并满足(p-1)%q=0。
    5、选取一个整数g,g是满足等式q^g%p=1的最小整数。g可以用公式g = h^((p–1)/q)%p得到,h为任意整数,只要1 < h < p−1,h通常选为2,但如果g的结果为1时,需要再选一个其它数。
    (p, q, g)构成公用的算法参数。
    公、私钥生成:
    1、选取任意整数x, 0 < x < q
    2、计算 y = g^x%p
    3、公钥为(p, q, g, y),私钥为x
    生成签名:
    1、生成随机数k,0 < k < q
    2、计算r = g^k%p%q,如果r=0,重新选取k
    3、计算s=(H(m)-xr)(k^(-1))%q,H为哈希函数,m为待签名数据,如果s=0,重新选取k
    4、(r, s)构成签名

    验证签名:
    1、验证:0<r<q,0<s<q
    2、计算w = (s^(-1))%q
    3、计算u1 = H(m)w%q
    4、计算u2 = r
    w%q
    5、计算v = (((gu1)*(yu2))%p)%q
    6、如果v=r则签名有效。
    随机数k的选取很重要,如果不够随机,或者即使其中几位为泄露,也足够使DSA被攻破。

    【实验内容】

    数字签名标准(DSS)由NIST公布,该标准能够使接收者能够验证数据的完整性和数据发送者的身份而制定,所采用的算法称为DSA算法,也称为DSA签名。

    【实验步骤】

    (1). 自选DSA算法的运行参数,确定公私钥对;
    (2). 输入待签名的明文信息m;
    (3). 点击签名按钮,观察签名信息r,s;
    (4). 验证签名过程中随机数的作用;
    (5). 点击签名验证按钮,观察签名验证结果;
    (6). 修改m’以及签名r’,s’;
    (7). 点击签名验证按钮,验证签名正确性。
    操作说明
    为便于手工验证DSA签名,本演示程序的素数p不超过1000的小素数,同时待签名的明文也为不超过1000的十进制整数,直接对明文进行签名。
    系统包含两个按钮:签名和验证。分别完成对输入信息的签名和验证。

    (1)进入DSA演示程序
    点击教学软件中的非对称密码算法的DSA 签名,系统随机选择符合要求的素数p,屏幕显示类似下图。
    在这里插入图片描述

    图 1DSA签名实验演示界面

    (2) 选择参数
    分别点击第二个(素数q)和私钥x下拉框。
    完成DSA的基本参数的确定
    在这里插入图片描述
    图 2完成DSA的基本参数的确定

    (3)签名
    输入十进制整数形式的消息m后,按下签名按钮,生成签名r和s。
    在这里插入图片描述
    图 3生成签名r和s
    再次点击签名按钮,可以发现随着随机数的变化,签名值也发生变化。
    在这里插入图片描述
    图 4签名值随着随机数变化而变化
    (4) 验证签名
    签名正确性的验证取决于r’’是否与r’相等。点击验证按钮,显示验证成功的信息。

    在这里插入图片描述
    图 5验证签名
    (5)修改
    修改m’后,点击验证,出现验证失败信息。
    在这里插入图片描述
    图 6修改m’,验证失败
    修改r’后,点击验证,出现验证失败信息。
    在这里插入图片描述
    图 7修改r’,验证失败
    修改s’后,点击验证,出现验证失败信息。 在这里插入图片描述
    图 8修改s’,验证失败

    【实验思考题】

    1、 DSA签名的数学背景是什么?
    答:数字签名算法(DSA)是使数字签名依赖于数学概念的联邦信息处理标准之一,或者可以说模幂运算的公式和离散对数问题,用于在该算法中对数字进行数字加密。数字签名是根据数据和仅由签名者或签名者知道的秘密密钥计算出的密码值。
    DSA(Digital Signature Algorithm,数字签名算法,用作数字签名标准的一部分)是公开密钥算法,它不能用作加密,只用作数字签名。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份。它也可用于由第三方去确定签名和所签数据的真实性。DSA算法的安全性基于解离散对数的困难性,这类签字标准具有较大的兼容性和适用性。

    2、 DSA签名为什么可使用Hash函数?
    答:Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行DSA数字签名是等效的。
    DSA结合使用了非对称加密技术与哈希算法来实现,它包含两种互补的运算:一个用于数字签名的签署,另一个用于数字签名的验证。签名和验签的过程一般由启用 PKI 的应用程序完成,首先由数据的发送方用哈希算法生成数据的哈希值,然后用自己的私钥将这个哈希值加密形成数字签名,将它与数据一起加密发送给接收方;接收方进行解密获得数据和数字签名后,用发送方的公钥对数字签名进行解密,如果成功解密,即证明了发送方的身份;对数字签名解密得到数据的哈希值之后,数据的接收方对数据用相同的哈希算法生成另一个哈希值,然后将这两个哈希值进行比较,如果两者相同,则证明这块数据极有可能在传输期间没有被篡改。因此,DSA签名可使用Hash函数。

    展开全文
  • DSA 算法

    2016-03-08 23:41:00
    一、简介 DSA算法是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。它是一种公开密钥算法,用作数字签名。 http://blog.csdn.net/kotonohaparty/article/details/6977180 ...
  • 在 IBM Bluemix 云平台上开发并部署您的下一个应用。 开始您的试用 ...单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密。...通常 , 使用的加密算法比较
  • SHA算法原理

    千次阅读 2018-03-03 10:31:35
    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的...
  • ECDSA签名算法

    千次阅读 2019-03-29 09:28:43
    本人学习这一部分的时候,花费了不少精力。相关的知识太零碎,学习难度很大。...关于ECC算法基本原理的介绍,请参考《ECC加密算法入门介绍》(http://www.8btc.com/eccmath),本文重点介绍Bitcoin...
  • SHA1算法原理

    2019-09-13 16:45:43
    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SH...
  • 证明推导了公钥加密算法RSA和签名算法DSA,RSA和DSA是SSL/TLS的基础,理解算法的数学原理,有助于加深对网络安全的理解
  • 盲签名在数字现金、电子投票...通过对DSA数字签名机制进行改进,提出了一种新的DSA变体签名算法,改进算法中签名过程不再有求逆运算。然后,在DSA变体签名机制基础之上,提出一种安全、高效的基于DSA变体的盲签名方案。
  • SHA1(安全哈希)算法原理

    千次阅读 2012-06-28 14:05:58
     安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位...
  • SHA1算法原理(转载)

    千次阅读 2018-04-17 14:56:27
    1 SHA1算法简介 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。 对于长度小于2^64位的消息,SHA1...
  • 数字签名RSA简要原理

    千次阅读 2013-11-21 08:54:02
    数字签名基于非对称密钥加密算法,如DSA/RSA算法。从公钥系统可以立即取得的一个好处是解决了密钥的管理问题,公钥系统中的一个新成员仅需要一张公开密钥表的拷贝,并把他选择的加密密钥公布给大家就可以了。而在...
  • 非对称加密算法:RSA,DSA/DSS 对称加密算法:AES,RC4,3DES HASH算法(不可逆):MD5,SHA1,SHA256,HMAC 二、接口加密技术 参考:第三方接口签名加密 在调用第三方接口时,需要用签名去验证安全性,对数据加密等 ...
  • 关键词:eos 签名 验签 ecc dsa 加密 解密 eosjs aes 本文主要探讨两方面 1.eosjs中用密钥对进行加解密功能 2.eos中密钥对生成,签名和验签过程(私钥签名 公钥验签) 常用的加密算法 对称性加密算法 对称式加密就是...
  • 加密算法

    2019-08-15 13:51:22
    椭圆曲线算法原理很复杂,但是具有很好的公开密钥算法特性,通过公钥无法逆向获得私钥。 二、GM国密算法 GM国密算法实现方式与PKCS11一致。中间层提供SM2进行签名与验签,SM3进行哈希,SM4实现加密。...
  • SHA加密算法

    2012-07-17 14:55:58
     SHA1算法原理  1 SHA1算法简介  安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。...
  • DSA是使用最广泛的数字签名方案之一。 在之前的工作的基础上,本文介绍了指令高速缓存定时攻击的原理,并介绍了指令高速缓存监控和高级监控中的一些关键技术精确计时。 然后提出了对DSA的攻击,并提出了一种恢复...
  • Sha256 算法

    千次阅读 2009-08-27 09:19:00
    SHA1算法原理1 SHA1算法简介 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的...

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

dsa签名算法原理