对于RSA这套公私钥加密的思路,我以为我挺明白的,运用的娴熟自如。

当然现在RSA用的不多,而是基于ECC曲线来做签名验签,最大名鼎鼎的莫过于比特币。

可是前两天和别人讲代码,被问了ECC为什么可以用来做验签,发现自己讲不清楚。

所以做了点功课,来把这个问题讲清楚。

首先我们跳过ECC曲线是个啥这个话题,这部分我觉得对理解这个逻辑,帮助并不大,黑盒掉就好了。

因为我们是程序员,有类型这样的表述神器,非常清晰,你一点都不用害怕。

只说原理,非伪代码,比如关于曲线阶数不说不影响理解原理,我就不说了。

ECC曲线加密核心原理

下面我们讲的,都在同一条曲线上,这条曲线上的点支持一种乘法运算

设 Q 为曲线上一点

若点R = Q * Q,也可以记为 R=2.Q

若点R =Q*Q*Q,可以记为 R =3.Q

若点R =Q*Q*……*Q ,一共n个Q,则可以记为R=n.Q

然后原理来了

给定n 和 Q 求 R 很容易,给定R 和 Q,则非常难求出n

就这一条原理,然后其他的都是证明出来的。

公钥和私钥

先复习一下原理

设Q为曲线上一点,k为一个整数

令点K = k.Q,若给定 k 和 Q,很容易求出 K

若给定 K 和 Q ,很难求出k

我换个说法给你看

设G为曲线上一点,k为私钥

令公钥K=k.G, 若给定私钥和G,很容易求出公钥

若给定公钥和G,很难求出私钥

是不是有点意思了,从这里我们也可以看出,ECC的私钥就是一个整数,一个很大很大的整数,Int64 别提了,常用的ECC算法,私钥是一个256bit的整数

而ECC的公钥是一个点,虽然平常看到他们不是字符串就是bytearray,但是私钥是整数,公钥是一个点(二维坐标)

ECC曲线有很多应用,最常用的是加密解密和签名验证

加密原理

加密步骤,先设 K=k.G,(公钥=约定点G阶乘私钥)。

1. 欲传递的数据m,先把他编码为一个坐标点M(怎么编码是你的事,比如一个字符串,你把他先bytes,然后变成大整数,当坐标的x坐标,纯属举例)

2. 整个随机整数r

3. 计算点 C1 = M+r.K看到这里肯定有点晕,这里出现了点的加法,还有r.K,r.K 就是 r 个 K相乘,K是公钥。就是 点C1 等于 r个公钥相乘加上坐标点M

4. 计算点C2 = r.G G是曲线上面约定好的一点,就是k=k.G(公钥=约定点G阶乘私钥)那个G,r是前面的随机整数

加密完成,可以看出加密需要公钥,加密将坐标点M 加密为 C1 C2 两个坐标点

加密者只需发送C1 C2 给对方

解密步骤

1. 由C1=M+r.K 可知 M =C1-r.K

2. 由K=k.G(公钥=私钥)将K代入上式可得 M=C1-r.k.G

3. 由C2=r.G 带入上式,可得 M=C1-k.(r.G)=C1-k.C2

4. 据上面推导的结论 M=C1-k.C2,则解密者根据收到的C1,C2,用自己的私钥,可以计算出加密坐标点M

签名验证原理

签名步骤,先设 K=k.G,(公钥=约定点G阶乘私钥),设欲签名数据为m,签名用私钥

1. 对欲签名数据进行处理 e=hash(m),e是一个巨大整数,Hash 算法不用解释了吧,m是必选,ECSDA实现中还把一个坐标放进去一起算hash,为了便于理解原理,我就不代入那些了,只说e

2. 整个随机整数r

3. 计算s=r-e*k,这个式子纯粹是整数运算,结果s当然也是整数 ,s=随机数减去 hash*私钥,就这个意思。

签名完成

通常说签名(signdata)就是指s和r两个整数。

签名者发送 s、r、公钥K,欲签名数据m,则任何人可以验签。

验签步骤,验签用公钥

1. 对欲签名数据进行处理 e=hash(m)

2. 计算点V1=r.G(就是算公钥那个点G 阶乘随机数 r)

3. 计算点V2=s.G+e.K ( 点G阶乘签名数据s 加上 公钥阶乘 )

4. 若V1=V2 则验签成功,接下来证明

5. 若数据都是对的,则s =r-e*k成立

6. 此时设s=r-e*k,V2=s.G+e.K 将s展开 得 V2=(r-e*k).G+e.K

7. V2 =r.G-e.k.G+e.K

8. 因为K=k.G,代入上式,可得V2 = r.G – e.(k.G)+e.K = r.G -e.K+e.K

9. 上式抵消e.K之后得V2=r.G,可知假设s=r-e*k时,V2=r.G =V1

10. 反之,当V1=V2时,s=r-e*k成立,数据正确

没有什么太深得东西,只是把这个原理表述出来,加深自己的理解,对得起区块链从业者这个身份

最后,2018结束,大家新年快乐

如何给小学生讲清楚ECC椭圆曲线加密的更多相关文章

  1. ECC椭圆曲线详解(有具体实例)

    前言 ECC英文全称"Ellipse Curve Cryptography" 与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥 ECC164位 ...

  2. 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)

    关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商) 来源: https://blog.csdn.net/xueyepiaoling/article/details/6243337 ...

  3. ECC椭圆曲线以及计算出公钥的过程(BTC为例)

    ECC概念 全称 “ Ellipse Curve Cryptography ”  means “ 椭圆 曲线 密码学 ”. 传统加密方法大多基于大质数因子分解困难性来实现,ECC则是通过椭圆曲线方程式 ...

  4. python实现的椭圆曲线加密

    我也看得云里雾里, 但是ECC和RSA并列为非对称加密双雄, 还是很有必要了解一下的. RSA是用质数分解,ECC是用离散的椭圆方程解,安全度更高. 而且,这个ECC的加法乘法规则,和普通都不一样, ...

  5. 椭圆曲线加密和rsa对比

    最近在导师的要求下接手了基于欧洲标准的车联网项目中的安全层,需要学习密码学,以及网络安全的相关内容,这里做一个总结 引用的大部分内容为一个西安的大佬(哈哈我老家也是西安的),大佬主页:https:// ...

  6. 椭圆曲线密码学ECC

      椭圆曲线密码学(Elliptic curve cryptography),简称ECC,是一种建立公开密钥加密的算法,也就是非对称加密.类似的还有RSA,ElGamal算法等.ECC被公认为在给定密 ...

  7. 椭圆曲线密码体制(ECC)简介

    一.椭圆曲线的基本概念 简单的说椭圆曲线并不是椭圆,之所以称为椭圆曲线是因为他们是用三次方程来表示,并且该方程与计算椭圆周长的方程相似. 对密码学比较有意义的是基于素数域GF(p)和基于二进制域(GF ...

  8. ECC(Ellipse Curve Cryptography)+AES(Advanced Encryption Standard)前端通讯加密模拟(使用eccrypto-js)

    前置知识 不了解对称加密与非对称加密的小伙伴可以看看下面的文章,想详细学习与区块链有关的加密算法可以戳这里 对称与非对称加密 https://blog.csdn.net/u013320868/arti ...

  9. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

随机推荐

  1. JGUI源码:实现图标按钮及下拉菜单(16)

    效果如下 代码片段如下 <div class="jgui-btn" id="personalbtn" style="float:right;&q ...

  2. linxu上安装mongodb3.6实战

    根据linux 版本到官网下载对应mongodb版本 查看服务器版本:cat /proc/version 查看linux发行版本:cat /etc/redhat-release 我用的阿里云服务器,对 ...

  3. #0 scrapy爬虫学习中遇到的坑记录

    python 基础学习中对于scrapy的使用遇到了一些问题. 首先进行的是对Amazon.cn的检索结果页进行爬取,很顺利,无碍. 下一个目标是对baidu的搜索结果进行爬取 1,反爬虫 1.1 我 ...

  4. 20155324 实验5 MSF基础应用

    20155324 实验5 MSF基础应用 ms08_067 用search命令,搜索与ms08_067相关的模块,如图: 服务器信息块(SMB)是一个网络文件共享协议,它允许应用程序和终端用户从远端的 ...

  5. python双端队列-collection模块

    双端队列(double-ended queue,或者称deque)在需要按照元素增加的顺序来移除元素时非常有用.其中collection模块,包括deque类型. 使用实例:

  6. 分布式系列十二: Redis高级主题

    持久化 Redis 支持持久化, 其持久化数据有两种方式. 两种可以同时使用. 如果同时使用, Reids 在重启时将使用 AOF 方式来还原数据. RDB 按照一定策略定时同步内存的数据到磁盘.文件 ...

  7. encode与decode

    import torch from torch import nn import numpy as np import matplotlib.pyplot as plt import torch.ut ...

  8. 04mycat数据切分

    自定义切分文件 [root@mycat mycat]# cat conf/customer-hash-int.txt 101=0 102=0 103=0 104=1 105=1 106=1 Rule. ...

  9. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  10. computed计算属性

    在computed中,可以定义一些属性,这些属性 叫做计算属性.计算属性的本质是一个方法,只不过我们在使用的时候,把他们的名称当做属性来使用,并不会吧计算属性当做方法去调用.与methods平级. / ...