在上文介绍了ECDSA算法流程及模块划分,为了帮助一些小白弄懂啥是ECDSA,特此开一篇科普博文。

一、首先为啥要进行数字签名?

  假设Alice要将一份合同m传输给Bob,合同上附有Alice的电子纸质签名。这份合同关乎着Boss Bob跟打工人Alice谈好的打工加钱。Alice合同上表明我要月薪10个w不溜,而Alice有个黑客仇敌johor要搞Alice,

于是在合同m传输的过程中截获合同,并进行篡改,把10个w不溜改为1k。Boss Bob一看,好家伙,咋回事?请了一个免费的劳动力。

                       

  为啥会造成这样的局面?首先是合同在通过网络传输的过程中,容易遭受到第三方的截获;其次,Alice没有对这份合同做任何防护就签上了自己的电子纸质签名或着说盖上公章,不过这也没办法,Alice和Bob分居两地,

只能这样操作。

  那么数字签名就是要防止这种情况的发生,Alice通过自己的私钥对合同m进行加密,然后把公钥公开,这样可以使用公钥对合同m进行验签,查看合同是否被篡改,如果验签失败,那就说明合同被篡改了。也就是说,

数字签名不保护合同m的隐私性,只保护合同m自身的安全性,其最大的目的就是防篡改。

                

二、ECDSA是如何保护消息m的?

  首先先看我之前讲的ECDSA算法流程:

      

  一大堆东西,不看也罢。反正作为FPGAer,一定要有模块化的思想。就看Alice最后要输出什么东西就行了。

  Alice对合同m签名完,要给出(D,r,s,m,Q),其中D为椭圆曲线参数组,当然随机数种子不用给,不过给了也没事,反正第三方也不知道我用的啥方法产生随机数的(●'◡'●)

(r,s)为消息m的签名,m也合同,Q为公钥且Q=kG。k为私钥,也是Alice在区间0-n之间随便选的一个数,G为椭圆曲线基点。

  看完Alice的输出,再来看看Bob拿到这些信息做了啥。。。

  也是一大堆算法,还是看最后一步吧。Bob那边要计算到v = r才算验签成功,即合同m没有被篡改。

  即要证明v = r,在签名那里知道r = dG的x坐标,而验签那里v=X的x坐标,也就是要证明X = dG即可,

  而X=u1G+u2Q=u1G + u2kG=(u1+u2k)G。

  带入u1与 u2得:X =(ew+rwk)G=(e+rk) *wG。

  而w = s-1 mod n ,带入得:X = (e+rk)* s-1G。

  在签名部分,s=d-1(e+kr)mod n  带入之后,X = dG了。

  也就是一顿操作之后,只要v = r,就证明了X = dG,而消息m对于签名(r,s)及哈希值e特别敏感,只要有一点变动,这三种都随随之变动,那验签自然就失败了。

这样干说太抽象了,举个简单例子。Alice对合同m签名完,要给出(D,r,s,m,Q),johor对消息m篡改为m1,那么Bob得到得信息组为(D,r,s,m1,Q),当然其他参数也可以篡改,但是更容易被识破。

Bob拿着m1进行验签,首先生成的哈希值e1就对不上了签名生成的哈希值e,当然Bob得到的信息组没有提供哈希值,Bob在这一步还不知道消息被篡改。

验签第二步和第三步,计算w,u1,u2 ,这一步(r,s)没有被篡改,生成的w和u2没有问题,而因为消息被篡改,哈希值变为e1了,所以u1也跟着变了。

验签第四步,计算X,由于u1变了,那X自然也变了,也就会导致验签失败。

科普—为什么要用ECDSA加签及其数学上的验签证明的更多相关文章

  1. Java实现RSA密钥对并在加解密、加签验签中应用的实例

    一.项目结构 二.代码具体实现 1.密钥对生成的两种方式:一种生成公钥私文件,一种生成公钥私串 KeyPairGenUtil.java package com.wangjinxiang.genkey. ...

  2. php rsa 加密、解密、签名、验签

    由于对接第三方机构使用的是Java版本的rsa加解密方法,所有刚开始在网上搜到很多PHP版本的rsa加解密,但是对接java大多都不适用. 以下php版本是适用于对接java接口,java适用密钥再p ...

  3. java安全入门篇之接口验签

    文章大纲 一.加密与验签介绍二.接口验签实操三.项目源码下载   一.加密与验签介绍   大多数公共网络是不安全的,一切基于HTTP协议的请求/响应(Request or Response)都是可以被 ...

  4. 证书:数字签名和验签&加密和解密

    用的是湖北省数字证书认证管理中心的签名和加密 1.带私钥的证书,即p12格式证书(后缀为.pfx) 2.不带私钥的证书,有多种格式,通常我们使用的是cer格式证书(后缀为.cer) 一. 1.什么是对 ...

  5. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

  6. JAVA/PHP/C#版RSA验签--转

    本文是上一篇文章的兄弟篇,上篇文章介绍了客户端的sdk中如何基于JAVA/PHP/C#使用RSA私钥签名,然后服务端基于JAVA使用RSA公钥验签,客户端签名/服务端验签的模式只能帮助服务端检查客户端 ...

  7. 微信,支付宝,支付异步通知验签,notify_url

    在支付接口开发中 ,当用户支付完成之后,阿里或者微信会向我们服务器发送一个支付结果的通知,里边带有一系列参数:其中特殊的是签名类型,和签名(他们根据这些参数做出来的签名). 我们的得到这些参数之后要去 ...

  8. php 实现签名验签

    本人php菜鸟,主要使用php实现简单的签名验签功能 以下php代码使用的密钥格式为pem格式,其他证书格式可以使用openssl进行转换(未安装请实现安装): 以下是.p12文件导出pem格式公私钥 ...

  9. RSA体系 c++/java相互进行加签验签--转

    在web开发中,采用RSA公钥密钥体系自制ukey,文件证书登陆时,普遍的做法为:在浏览器端采用c++ activex控件,使用 c++的第三库openssl进行RAS加签操作,在服务器端采用java ...

随机推荐

  1. 通过UnityWebRequest得到的纹理转精灵

    private IEnumerator GetImage(string url, Image fileImage) { UnityWebRequest WebRequest = new UnityWe ...

  2. Docker:Docker部署postgresql数据库

    环境 Centos-7  Postgresql-10 docker-19 yum加载Postgresql yum install https://download.postgresql.org/pub ...

  3. Hadoop:Hadoop的学习路线

    Hadoop生态架构技术   1.语言基础 Java:掌握javase知识,多理解和实践在Java虚拟机的内存管理.以及多线程.线程池.设计模式.并行化就可以,不需要深入掌握. Linux:系统安装( ...

  4. 大数据-Hadoop 本地运行模式

    Grep案例 1. 创建在hadoop-2.7.2文件下面创建一个input文件夹 [atguigu@hadoop101 hadoop-2.7.2]$ mkdir input 2. 将Hadoop的x ...

  5. java封装继承以及多态(含代码)

    封装 该露的露,该藏的藏 我们常需设计要追求,"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成.不允许外部干涉:低耦合:仅暴漏少量的方法给外部使用. 封装(数据的隐藏) ...

  6. 官宣.NET 6 预览版4

    我们很高兴发布 .NET 6 Preview 4.我们现在大约完成了 .NET 6 发布的一半.现在是一个很好的时机,可以再次查看.NET6的完整范围.许多功能都接近最终形式,而其他功能将很快推出,因 ...

  7. WPF教程四:字段、属性、依赖项属性的演变过程

    这个章节主要讲解属性是什么,为什么会演变出依赖项属性,依赖属性的优势是什么.以及如何更好的使用属性和依赖项属性. 一.属性 属性是什么. 翻了好几本C#的书和微软的文档,我觉得对属性讲解比较好理解的就 ...

  8. 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥(转)

    说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA).证书.数字签名.私钥.公钥.对称加密.非对称加密.这些到底有什么用呢,正所谓存在即合理,这篇文章我就 ...

  9. Vue Router的原理及history模式源码实现

    Hash 模式 URL中 # 后面的内容作为路径地址,可以通过location.url直接切换路由地址,如果只改变了#后面的内容,浏览器不会向服务器请求这个地址,会把这个地址 记录到浏览器的访问历史中 ...

  10. P4827「国家集训队」 Crash 的文明世界

    「国家集训队」 Crash 的文明世界 提供一种不需要脑子的方法. 其实是看洛谷讨论版看出来的( (但是全网也就这一篇这个方法的题解了) 首先这是一个关于树上路径的问题,我们可以无脑上点分治. 考虑当 ...