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.概述 ...
随机推荐
- 快速串讲——JVM内存的区域划分
目的 快速定位JVM内存泄漏或者溢出等问题. 面试基础题,加分项. 文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍. 程序计数器(Progra ...
- linux 下安装 docker 环境
一分钟了解 Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...
- Redis i/o timeout
1.背景 公司项目使用国外ucloud云,发现公司业务服务器时常连接redis服务,发生i/o timeout的问题.研发以及服务器侧查看没有异常,反馈给ucolud解决问题.所以这里做一个记录. 2 ...
- 探索颜色渐变绘制算法(基于Processing语言) 第一部分
突然间意识到连续变化的颜色在程序中是如何实现的这一问题.没错,就想有事找事,我会分好几部分慢慢探寻,其实笔者也不会,咱一起研究.ok,我们开始! 第一部分 初始部分就从官方案例来入手学习.官方给了三个 ...
- 16 自动发布PHP项目
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin PHP_NAME=$1 DATE ...
- 1.3.4、通过Host匹配
server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system4 uri: ...
- Laravel + Swoole 打造IM简易聊天室
最近在学习Swoole,利用Swoole扩展让PHP生动了不少,本篇就来Swoole开发一款简易的IM聊天室 应用场景:实现简单的即时消息聊天室. (一)扩展安装 pecl install swool ...
- buu crypto 幂数加密
一.这和二进制幂数加密有些不同,可以从数字大小判断出来,超过4了,一般4以上已经可以表达出31以内了,所以是云影密码,以0为分隔符,01248组成的密码 二.python代码解密下 code=&quo ...
- docker起不来报错:Failed to start Docker Application Container Engine.
报错信息如下: [root@localhost localdisk]# systemctl restart docker Job for docker.service failed because t ...
- NAT444技术简介
嘛,最近老师布置了一道题目与NAT444技术相关,遂收集一波相关资料. 首先来一波名词解释: ICP:网络内容服务商(Internet Content Provider) BRAS:宽带远程接入服务( ...