ECDSA高性能硬件实现——算法详解与模块划分
ECDSA全称椭圆曲线数字签名算法,它是基于素数域的椭圆曲线对信息进行加签与验签。其核心在于对信息的加签,及对加签的信息进行验签,那么下面介绍该算法流程。
假设Alice希望对消息m进行签名,并将消息传给Bob。首先Alice要选用一条椭圆曲线,其参数组为D = ( p,S,a,b,G,n,h) ,对应的密钥对为( k , Q ) ,其中各参数解释为:
- 域的阶p;
- 种子S,用于参数随机数;
- 两个椭圆曲线系数a,b∈Fp,定义了Fp上椭圆曲线E的等式;
- 定义椭圆曲线上的一个有穷远点 ,一般称其为椭圆曲线基点;
- G的阶n,为素数域的模数;
- 余数因子h。
密钥中记k为私钥,Q为公钥。其中Q=kG;
Alice将按如下步骤进行签名:
1.利用种子S产生一个随机数d,d∈(0,n);
2.计算dG=(x1,y1);
3.计算r=x1 mod n,若r=0,则返回第一步;
4.计算d-1 mod n;
5.计算哈希值e = H(m), //此步骤可在信息到来时便开始进行;
6.计算s=d-1(e+kr)mod n。 若s = 0,则返回步骤1;
7.(r,s)即为对消息m的签名,最后Alice将(D,r,s,m,Q)传输给Bob。
Bob收到(D,r,s,m,Q)后,要对消息进行验签,检验消息m是否被篡改。
Bob将按以下步骤进行验签:
1.计算哈希值e = H(m);
2.计算w = s-1 mod n;
3.计算u1=ew mod n 及u2=rw mod n;
4.计算X=u1G+u2G=(x2,y2);
5.若X = 0,则验签失败,输出invalid_verify;否则计算v = x2 mod n;
6.若v = r,则验签成功,输出valid_verfy。
注:上述计算都是基于整数,因为是基于数字椭圆曲线加密,曲线的点选取也是整数,所有一系列计算都是整数,如果出现小数。
下面来将上述算法模块化,具体化:
注意到我们使用过的模块,
加签步骤1:随机数产生模块,要求输出一个随机数种子S,输出一个(0,n)的随机数d。
加签步骤2:点乘模块,也成为标量乘模块,随机数d为一个标量,G为椭圆曲线上的一个点。标量乘表示多个点相加,比如5G = 2G+2G+G;为啥不能是4G+G或者直接5G,算法不允许呀,因为这不是最简的点运算形式。
2G及2G+G才是最简的点运算形式,其中2G称为倍点,2G+G称为点加(注意2G运算后为一个新的点P,也落在椭圆曲线上)。
加签步骤3:模乘模块,两个标量相乘并取模。
加签步骤4:模逆模块,定义d*d-1=1(mod n),即d*d-1 = kn(k=1,2,3...)。素数域上的取逆元操作。
加签步骤5:哈希模块,输入消息m,输出哈希值H;
加签步骤6:其中kr和d-1(e+kr)都是模乘模块,e+kr 为模加模块。
验签部分也是依靠上述几个算法模块,那么得到下面这张图:

标量乘调用点加和倍点,但是如果标量为1,2这种情况就直接调用点加和倍点模块,而点加和倍点根据椭圆曲线规则,需要调用模运算模块,这个我单独出一篇文章来讲各个模块的具体实现,这里就不详细介绍。
因为要在硬件上实现ECDSA算法,所有博主采用了verilog对各模块进行建模编写,最后综合得到下图:

详细的模块化设计我会在后续模块介绍中放出。
ECDSA高性能硬件实现——算法详解与模块划分的更多相关文章
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- kmp算法详解
转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- [转] KMP算法详解
转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的K ...
- 【转】AC算法详解
原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...
- KMP算法详解(转自中学生OI写的。。ORZ!)
KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...
- EM算法详解
EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...
- Tarjan算法详解
Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...
- 安全体系(二)——RSA算法详解
本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 ...
随机推荐
- ClickHouse学习系列之六【访问权限和账户管理】
背景 在之前写的文章[用户权限管理]里已经介绍了应该如何设置用户密码以及权限控制.但是只是针对修改配置文件的方式来进行用户权限管理,其实ClickHouse也支持基于RBAC(Role-Based A ...
- 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...
- Java 提效神器 Stream 的冷门技巧
Stream 使用这个方法创建一个 Stream 对象. new ArrayList<>().stream() Filter 过滤器,里面传递一个函数,这个函数的返回结果如果为 true ...
- 当VS和Flash builder同时运行时
1, 运行环境: windows 7, VS2010, Flash Builder 4.6 2, 在Flash Builder中运行工作空间和VS2010调试程序是同一个时,也就说在Flash ...
- Pptx的多路径形状转为WPF的Path
本文是将演示如何解析pptx文件的多路径的形状转换到WPF,绘制多个Shape的Path Shape Path 这是Pptx的[标注:弯曲曲线(无边框)]形状的OpenXml定义部分: <cal ...
- AcWing 244. 谜一样的牛
有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高. 现在这n头奶牛站成一列,已知第i头牛前面有a头牛比它低,求每头奶牛的身高. #include<bits/stdc+ ...
- 小程序之app.json not found
起因 最近在部署几款小程序时,发现ext.json文件会被忽略不上传,查了一下资料发现原来是需要升级开发者工具了. 没想到升级以后,再开发项目时,就报错 app.json not found 解决方法 ...
- Neural Approaches to Conversational AI
Neural Approaches to Conversational AI 学姐介绍的一篇综述阅读笔记 SIGIR 2018 主要贡献: 提出一个综合的调查关于最近几年的应用在QA,任务导向和闲聊对 ...
- JUnit5参数化测试的几种方式
参数化测试一直是津津乐道的话题,我们都知道JMeter有四种参数化方式:用户自定义变量.用户参数.CSV文件.函数助手,那么JUnit5有哪些参数化测试的方式呢? 依赖 JUnit5需要添加junit ...
- docker挂载数据卷
1.Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷,简单的理解就是将数据持久化的工具. 2.在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们 ...