在上文介绍了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. Processing中PImage类和loadImage()、createImage()函数的相关解析

    聊一聊Processing中PImage类和loadImage().createImage()函数.因为要借P5做多媒体创意展示,图片是一个很重要的媒体.有必要就图片的获取和展放作总结. 首先 有一点 ...

  2. 2020牛客NOIP赛前集训营-普及组(第二场) 题解

    目录 T1 面试 描述 题目描述 输入描述: 输出描述: 题解 代码 T2 纸牌游戏 描述 题目描述 输入描述: 输出描述: 题解 代码 T3 涨薪 描述 题目描述 输入描述: 输出描述: 题解 代码 ...

  3. CentOS-Docker搭建远程监控服务器指标

    注:远程监控服务器指标,可查看.CPU.内存.网络信息等,搭建依赖Docker环境,可参考:yum安装Docker环境 服务端:Grafana(可视化展示) + Prometheus(数据源,配置客户 ...

  4. Python自动化之封装日志模块(一)

    ------------恢复内容开始------------ 简介: 自己也在训练营学习之中,闲来之余,自己写着玩的,主要还是为了学习,希望和前辈和大佬相互学习共进. 日志模块主要有四大组件:日志器, ...

  5. Centos中安装Node.Js

    NodeJs安装有好几种方式: 第一种: 最简单的是用yum命令,可惜我现在用的时候 发现 镜像中没有nodejs:所以这种方式放弃: 第二种:去官网下载源码,然后自己编译:编译过程中可能会出现问题, ...

  6. Linux创建ftp并设置权限以及忘记ftp帐号(密码)修改 (转)

      忘记ftp密码修改方法:1.登录服务器 cd  /etc/vsftpdcat ftpusers找到对应的ftp用户名 (如果用户名也忘记了 那么 cd /etc 然后cat passwd 查看用户 ...

  7. mysql 的基础操作

    1.建表 create table  表名( 字段一 数据类型 [列属性] , 字段二 数据类型 [列属性], ......... )[表类型][表字符集][注释]; 注意:MySQL命令终止符为分号 ...

  8. linux学习之路第七天(时间日期类指令详解)

    时间日期类 1.date指令 date指令 - 显示当前日期 基本语法 1)date (功能描述:显示当前时间): 2) date + %Y (功能描述:显示当前年份) 3)date+%m( 功能描述 ...

  9. HADOOP及SPARK安装步骤及问题解决

    说明:主节点IP:192.168.35.134   主机名:master 从节点slave1 IP: 192.168.35.135   主机名:slave1 从节点slave2 IP: 192.168 ...

  10. 根据使用者反馈,对开源项目 go-gin-api 新增两个功能

    目录 前言 接口返回的错误信息支持中英文 代码位置 使用方式 错误信息自定义 参数验证的错误信息支持中英文 代码位置 使用方式 错误信息语言包 示例 小结 推荐阅读 前言 根据使用者的反馈,对开源项目 ...