DSA算法

DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。

DSA加密算法主要依赖于整数有限域离散对数难题,素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &Hellman算法的攻击。M一般都应采用信息的HASH值。DSA加密算法的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。其安全性与RSA相比差不多。

DSA 一般用于数字签名和认证。在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.

1. DSA签名及验证

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;

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,则认为签名有效。

举例:B 发消息给A,使用DSA算法进行签名

1.生成素数p=59、素数q=29、h=11、私钥x=7,临时密钥k=10,消息摘要H(M)=26

2.生成g:

g=h^(p-1)/qmod p → g=11^2 mod 59 → g=3

3.计算公钥y

y=g^xmod p → y=3^7 mod 59 →y=2187 mod 59 →y=4

4.进行签名计算

r = (g^k mod p) mod q → r=(59049 mod 59) mod 29 →r=20

s = [k^-1 (H(M) + xr) ] mod q → s=3·(26+140)mod 29 → s=5

5.A收到消息后进行签名验证

w=(s’)^-1mod q → w=6 mod 29 =6

u1=[H(M’)w] mod q → u1=156 mod 29 = 11

u2=(r’)wmod q → u2=120 mod 29=4

v=[(g^u1 · y^u2) mod p] mod q → v= (45349632 mod 59) mod 29 =20

v=r=20

6.验证成功;

2.DSA使用过程

过程:

3. Java实现DSA生成公私钥并加解密

3.1代码如下

java dsa 私钥_DSA算法——本质上和RSA是一样的 有公钥和私钥相关推荐

  1. 神经网络和反向传播算法——反向传播算法本质上是随机梯度下降,链式求导法则而来的...

    原文:https://www.zybuluo.com/hanbingtao/note/476663 写得非常好,适合入门! 神经元 神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数 ...

  2. 公钥和私钥怎么生成_有趣图文帮你通俗易懂地理解公钥和私钥的区别以及与CA证书等概念...

    导读:Linux系统上非对称性加密需要用到公钥.私钥.也常涉及到数字签名.数字证书.CA证书等概念.本文通过有趣的海绵宝宝和它小伙伴故事搭配有趣的图片形式来阐述这些概念,希望能帮助读者更简单易懂地理解 ...

  3. 摘要提取算法——本质上就是pagerank,选择rank最高的句子作为摘要,如果结合word2vec应该有非常好的效果...

    最近需要做一些文本摘要的东西,选取了TextRank(论文参见<TextRank: Bringing Order into Texts>)作为对比方案,该方案可以很方便的使用Python相 ...

  4. varint算法——本质上是牺牲最高位作为标识数据结束位,达到变长编码,说白了就是贪心的分割位...

    varint算法,摘自:http://blog.csdn.net/liaoquesg/article/details/50897327 最近在看<大规模WEB服务开发技术>这本书中.书中提 ...

  5. 【图论】用一道题从本质上讲清楚Floyd算法

    P1119 [灾后重建] 4 5 1 2 3 4 0 2 1 2 3 1 3 1 2 2 1 4 0 3 5 4 2 0 2 0 1 2 0 1 3 0 1 4 -1 -1 5 4 一道非常好的Flo ...

  6. RSA公钥加密与私钥解密算法

    首先是随机生成一个密钥对(一个公钥和一个私钥) package com.zy.demo1.secretTest;import lombok.extern.slf4j.Slf4j; import org ...

  7. 2D与3D人脸识别有什么本质上的区别?

    https://www.zhihu.com/question/324123433/answer/681365180 https://www.zhihu.com/question/324123433/a ...

  8. JAVA产生加密公钥私钥_Java生成非对称型加密的公钥和私钥

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.*; import java.security.*; imp ...

  9. java 公匙私匙_Java生成非对称型加密公钥和私钥的方法

    本文实例讲述了Java生成非对称型加密公钥和私钥的方法.分享给大家供大家参考.具体如下: 非对称型加密非常适合多个客户端和服务器之间的秘密通讯,客户端使用同一个公钥将明文加密,而这个公钥不能逆向的解密 ...

最新文章

  1. 【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )
  2. 04 | 负载均衡:Ribbon 如何保证微服务的高可用
  3. 【Linux】Linux中正则表达式
  4. 打印modal框中在线生成的二维码
  5. python调用random失败_python怎么调用random
  6. java中使用lua操作redis
  7. jQuery向动态生成的内容添加事件响应(jquery live方法简介)
  8. 2台电脑一根网线传文件_用1根网线直连2台电脑,能干嘛?
  9. regexp_like 方法
  10. laydate报Uncaught TypeError: Cannot read property 'appendChild' of undefined
  11. 并查集(许多东西的基本哦)
  12. 【网络安全】最全渗透学习攻略
  13. echarts堆叠柱状图上显示数字_echarts堆叠柱状图在柱子上方显示总数
  14. 如何爬取ajax网页之爬取雪球网文章
  15. DayDayUp:平均每篇文章1毛! 本博主自2020年6月1日起,如有任何问题可在博客贴吧留言或者私信博主(包括并不限于GUI软件编写、安装及编程语言中的bug、AI算法设计等),非诚勿扰!
  16. TableView下拉刷新崩溃
  17. 火山PC(火山视窗)图形按钮制作器教程
  18. 从零开始学习大数据系列之Linux-02Vim与Shell script
  19. Linux中top命令参数说明
  20. [ 常用工具篇 ] 还在嫌截图麻烦?快来使用 Win10 原生的截图工具 Snipping Tool 吧

热门文章

  1. 【java】1000问2SpringBoot项目打成war和jar有什么区别
  2. 电脑版微信发不出去文字和文件
  3. 在html中显示本地图片
  4. 自动化生产线中的生产节拍主要由工艺操作时间和辅助作业时间所组成
  5. numpy中的clip()函数
  6. java项目第8期-在线游戏商城系统【毕业设计】
  7. su: failed to execute /bin/bash: Permission denied问题解决
  8. ERP与电子商务融合破冰
  9. AirFlow调度执行Talend ETL任务
  10. 【python实例6.5】一篇文章让你弄懂政府工作报告词云~总结笔记