E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
《算法笔记》学习日记
OpenSSL密码库
算法笔记
——第5.4.6章 椭圆曲线的无穷远点
前面已经提到无穷远点为椭圆曲线加法群的单位元,记为O。这个无穷远点在仿射坐标系下是无法表示的,在Jacobi射影坐标系下为,。为了实现起来方便,在代码中将无穷远点简化为Z分量为0,而不再去考虑X坐标和Y坐标的关系。───────────────────────────────────────intEC_POINT_set_to_infinity(constEC_GROUP*group,EC_POI
网糸隹
·
2020-06-26 07:29
openssl
OpenSSL密码库
算法笔记
——第5.4.1章 椭圆曲线上点的仿射坐标表示
椭圆曲线上点的表示分成仿射坐标系表示和射影坐标表示形式,首先来看看仿射坐标表示形式。素域Fp上的椭圆曲线E由(仿射)方程y2=x3+ax+b决定,设曲线上的两个点为P1=(x1,y1),P2=(x2,y2),并且记椭圆曲线加法群的单位元为,称为无穷远点或者零点。如果P1≠-P2,则P3=P1+P2=(x3,y3),可以由如下公式计算出来:当P1≠P2时,计算P3需要1次逆运算、2次乘法运算和1次平
网糸隹
·
2020-06-26 07:29
openssl
OpenSSL密码库
算法笔记
——第5.4.14章 椭圆曲线的点与字符串的转化
在处理数据的过程中,不可避免的会碰到数据类型之间的转换。下图给出了各种数据类型之间的转换。大整数和字符串之间的转换比较简单,这里就不多加说明了。下面将重点讨论字符串和点之间的转换。这里提到的字符串默认为十六进制字符串,至于其他进制的字符串和点之间的转换可在代码中查找。要转成点的这个字符串是有一定的格式要求的(设字符串放在unsignedchar*buf中):首先,buf[0]用于表示压缩形式(和y
网糸隹
·
2020-06-26 07:29
openssl
OpenSSL密码库
算法笔记
——第5.4.12章 椭圆曲线的多倍点运算——固定点
如果P点是固定的(比如基点)且存储空间允许的话,则可以事先进行预计算存储一些点以加快多倍点计算。有很多专门针对固定点计算的算法,比如固定点的窗口算法、固定点的梳形算法等,详情请参见[9,§5.2]。这里介绍的是B.Moller提出的wNAF分割法【WindowNAFsplitting】(详情参见[12]、[14])。不太准确地说,wNAF算法是先把系数k分割成许多个宽为w的小块,然后在预计算阶段计
网糸隹
·
2020-06-26 07:29
openssl
OpenSSL密码库
算法笔记
——第6.4.2章 ECDH_METHOD结构体
ECDH_DATA中调用的ECDH_METHOD结构体主要记载了密钥协商中所使用的方法compute_key。structecdh_method{constchar*name;int(*compute_key)(void*key,size_toutlen,constEC_POINT*pub_key,EC_KEY*ecdh,void*(*KDF)(constvoid*in,size_tinlen,v
网糸隹
·
2020-06-26 07:59
openssl
密码
OpenSSL密码库
算法笔记
——第5.4.3章 椭圆曲线点的建立、释放和复制
───────────────────────────────────────EC_POINT*EC_POINT_new(constEC_GROUP*group)功能:在群上新建一个点输入:group输出:-返回:新建的点【正常】orNULL【出错】出处:ec_lib.c调用:▼intec_GFp_simple_point_init(EC_POINT*point)备注:新建的点内信息全为零────
网糸隹
·
2020-06-26 07:58
openssl
openssl
OpenSSL密码库
算法笔记
——第5.4.5章 椭圆曲线点在曲线上的判断
判断一个点在曲线上的理论依据是什么呢?前面已经说了,素域Fp上的椭圆曲线E由(仿射)方程y2=x3+ax+b决定,所以Jacobi射影点P=(X,Y,Z)在不在曲线上就看这个点是不是满足射影方程y2=x3+axz4+bz6。带入P点分别计算方程左右两边再做比较即可。同样地,如果P点的Z分量为1,计算量就可以大大降低,这就是在点的定义中加入参数Z_is_one的好处。下面来解释判断点是否在曲线上的函
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第5.4.8章 椭圆曲线点的仿射系数
设置仿射系数其实和设置射影系数非常类似,只不过需要将Z坐标设置为1,即设置射影坐标EC_POINT_set_Jprojective_coordinates_GFp(group,point,x,y,BN_value_one())。───────────────────────────────────────intEC_POINT_set_affine_coordinates_GFp(constEC_
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第5.4.10章 椭圆曲线的逆点运算
在素域Fp上,仿射点P1=(x1,y1)的逆点很好计算,为,P2=-P1=(x1,p-y1)。如果采用射影坐标,射影点P1=(X1,Y1,Z1)的逆点为P2=-P1=(X1,p-Y1,Z1)。───────────────────────────────────────intEC_POINT_invert(constEC_GROUP*group,EC_POINT*a)功能:逆点运算输入:group
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第5.4.2章 椭圆曲线上点的射影坐标表示
射影坐标又分成好几种——标准射影坐标、Jacobi射影坐标、Chudnovsky射影坐标。在标准射影坐标中,射影点(x,y,z),z≠0,对应仿射点(x/z,y/z),椭圆曲线的射影方程为y2z=x3+axz+bz2。在Jacobi射影坐标中,射影点(x,y,z),z≠0,对应仿射点(x/z2,y/z3),椭圆曲线的射影方程为y2=x3+axz4+bz6。在Chudnovsky射影坐标中,射影点(
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第5.3.3章 椭圆曲线点群信息的基本操作
新的群建好之后,就可以开始对这个群进行一些基本得操作了,如需要把很多必要的信息(如特征p、Weierstrass方程参数a、b、基点和阶等)添加进群里面去,同时在必要时还需要将这些信息读出来。先来看看对特征p和Weierstrass方程参数a、b的写入和读取。设置a、b和p信息的函数如下:───────────────────────────────────────intEC_GROUP_set_
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第5.4.7章 椭圆曲线点的射影系数
设置射影系数就是将分别对射影点point的X、Y、Z分量赋值:point->X←x,point->Y←y,point->Z←z。…………(5.4)如果希望在今后的计算中提高运算效率,可以将各分量(大整数)转化成Montgomery整数后再做对应的赋值:point->X←to_mont(x),point->Y←to_mont(y),point->Z←to_mont(z),…………(5.5)至于采用那
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第5.3.4章 椭圆曲线点群的补充说明
在§5.3.3设置椭圆曲线特征等函数中会遇到编码函数ec_GFp_mont_field_encode和解码函数ec_GFp_mont_field_decode,其实这两个函数是在做大整数和Montgomery整数之间的转换,它们与前面提到的符号to_mont和from_mont是一个意思。ec_GFp_mont_field_encode(group,r,a)BN_to_montgomery(r,a
网糸隹
·
2020-06-26 07:58
openssl
OpenSSL密码库
算法笔记
——第4.1.3章 滑动窗口算法
滑动窗口算法是在修改过的窗口算法的基础上演进而来的。在修改过的窗口算法中每次处理的e的长度都是固定的——k比特,但是在滑动窗口算法中,每次处理的e的长度是不尽相同的——处理长度会小于k比特。现在来看看滑动窗口算法是怎么回事。同样记窗口大小为k,指数e的二进制展开为。预计算这部分和修改过的窗口算法一模一样,就不再多说了。重点来看看后面的迭代。在滑动窗口算法中,对二进制展开的指数e从左到右进行处理,但
网糸隹
·
2020-06-26 07:57
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第5.2章 椭圆曲线算法的函数架构图
椭圆曲线算法中涉及的函数纷繁复杂,比如为了实现“复制点群”功能,就定义了四个函数,有:intEC_GROUP_copy(EC_GROUP*dest,constEC_GROUP*src)、intec_GFp_mont_group_copy(EC_GROUP*dest,constEC_GROUP*src)、intec_GFp_simple_group_copy(EC_GROUP*dest,constE
网糸隹
·
2020-06-26 07:57
openssl
OpenSSL密码库
算法笔记
——第4.1.2章 窗口算法
如果存储空间足够的话,可以事先将一部分计算结果(比如指数很小时的运算结果)存储起来,到后面需要时再直接调用。窗口算法就用到了这种思想,它一次可以处理指数e的多个比特(不妨设为k比特,而k称为窗口的大小)。当窗口大小为k时,可以预先将计算出来并进行存储(不妨记),然后对e进行进制展开,接着按平方和算法的思想进行迭代即可。下面是窗口算法的简单描述。关于窗口算法的更多情况可参见[10,算法14.82]。
网糸隹
·
2020-06-26 07:57
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第4.1.1章 平方和算法
平方和算法是模指数运算的基本。如果指数e的二进制展开为,则利用平方和算法可以这样计算模指数:。…………(4.1)现在给出平方和算法的简单描述。关于平方和算法的更多情况可参见[10,算法14.79]。──────────────────────────────────────────────────────────────────────────────举个简单的例子e=165。比如取,那么按照平方
网糸隹
·
2020-06-26 07:57
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第5.3.2章 椭圆曲线点群的建立,释放和复制
方法集合设定好之后,就可以开始新建一个椭圆曲线点群了。新建点群的函数如下:───────────────────────────────────────EC_GROUP*EC_GROUP_new(constEC_METHOD*meth)功能:利用给定方法集meth新建椭圆曲线点群输入:meth输出:-返回:新建的椭圆曲线点群【正常】orNULL【出错】出处:ec_lib.c调用:▼intec_GF
网糸隹
·
2020-06-26 07:57
openssl
OpenSSL密码库
算法笔记
——第5.3.1章 椭圆曲线点群的算法集
在使用椭圆曲线之前,必需先设定好曲线上的算法集,只有这样在应用中才知道应该使用哪些函数。下面就来看看怎样设定好曲线上的方法集。───────────────────────────────────────constEC_METHOD*EC_GROUP_method_of(constEC_GROUP*group)功能:设定曲线的方法集输入:group输出:-返回:group->meth【用法集】出处
网糸隹
·
2020-06-26 07:57
openssl
OpenSSL密码库
算法笔记
——第4.1.4章 模指数函数介绍
和第三章介绍的模乘法一样,根据使用的模运算的不同,模指数在具体实现时也分成利用经典模运算实现的模指数运算、利用Barrett模运算实现的模指数运算、利用Montgomery模运算实现的模指数运算。首先看看利用经典模运算实现的模指数运算。───────────────────────────────────────intBN_mod_exp_simple(BIGNUM*r,constBIGNUM*a
网糸隹
·
2020-06-26 07:57
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第 3.2.3章 利用Montgomery约化实现
现在我们来看看Montgomery乘法。简单来说,Montgomey乘法就是将经典乘法(见§1.2.1)和Montgomery约化(见§2.3)结合起来(可以参见[10,算法14.36])。下面来简要介绍一下其算法思想。和Montgomery约化一样,首先取一个正整数R>m,满足gcd(R,m)=1,通常取以简化计算。给定要做乘法的两个数x和y,,记,。…………(3.1)的Montgomery约化
网糸隹
·
2020-06-26 07:56
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第 3.3章 模逆
在模运算中,一般没有直接做模除法。模除法a/bmodm都是先计算模逆t=b-1modm,再计算模乘atmodm。因此本节就来讨论模逆运算该怎样实现。求模逆的算法主要是扩展欧几里德算法。该算法的大意如下。假设计算。算法通过反复迭代和(A、C、d、e为某些待定数)而得出,这里的迭代主要是做乘法和减法。算法的步骤大概是这样的。开始的时候先进行初始化——取A=1,d=0,C=0,e=1,得到:…………(3
网糸隹
·
2020-06-26 07:56
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第3.1.3章 模左移
大整数左移函数在前面曾经提到过(见§0.2.3),这里再简单介绍一下:intBN_lshift(BIGNUM*r,constBIGNUM*a,intn)是做大整数左移运算r←a<
网糸隹
·
2020-06-26 07:26
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第 3.2.1章 利用经典模运算实现
本小节用到的模运算是用经典模运算实现的BN_nnmod。模乘就是先做大整数的乘法,然后再用BN_nnmod做模运算。───────────────────────────────────────intBN_mod_mul(BIGNUM*r,constBIGNUM*a,constBIGNUM*b,constBIGNUM*m)功能:模乘法运算输入:a【被乘数】,b【乘数】,m【模数】输出:r←a×bm
网糸隹
·
2020-06-26 07:26
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第5章 椭圆曲线
从这一章开始,将讨论椭圆曲线密码。椭圆曲线密码系统实现之前,有很多东西需要学习研究,包括选择椭圆曲线的域参数(有限域、有限域的表示、椭圆曲线)、域算法、椭圆曲线算法、协议算法等等。在这里我们不准备详解介绍椭圆曲线的理论知识,而是打算将重点放在椭圆曲线算法的实现。本章讨论的主要对象是特征为p的素域,二元域暂不做具体讨论。椭圆曲线算法中涉及的函数纷繁复杂,我们希望能尽量抓出其中具有代表性的,同时把这些
网糸隹
·
2020-06-26 07:26
openssl
OpenSSL密码库
算法笔记
——第5.1.3章 椭圆曲线点的定义
有了椭圆曲线后,自然就得考虑曲线上的点。点的表示有很多种,最简单最常见的是用仿射坐标(x,y)表示,但使用仿射坐标会使得点的运算速度很慢,所以出现了多种射影坐标。在代码中选择使用的是仿射坐标和Jacobi射影坐标。关于仿射坐标和射影坐标的详情请参见§5.4.1和§5.4.2。现在来看看代码中对点的定义。typedefstructec_point_stEC_POINT;structec_point_
网糸隹
·
2020-06-26 07:26
openssl
OpenSSL密码库
算法笔记
——第5.1.1章 椭圆曲线点群的定义
下面定义的椭圆曲线点群不仅包含了域的信息和曲线的信息,甚至还包括了很多别的有利于实现的信息。椭圆曲线点群的定义如下。typedefstructec_group_stEC_GROUP;structec_group_st{constEC_METHOD*meth;EC_POINT*generator;BIGNUMorder,cofactor;intcurve_name;intasn1_flag;poin
网糸隹
·
2020-06-26 07:26
openssl
OpenSSL密码库
算法笔记
——第5.1.2章 椭圆曲线算法集
在定义椭圆曲线点群时出现了描述曲线所用算法的参数constEC_METHOD*meth,这一节就来看看这个参数有什么用处。椭圆曲线算法集的定义如下。typedefstructec_method_stEC_METHOD;structec_method_st{(具体定义略,详情可参见代码文件ec_lcl.h)};//EC_METHOD在结构体ec_method_st中列举了实现过程中用到的各种椭圆曲线
网糸隹
·
2020-06-26 07:26
openssl
OpenSSL密码库
算法笔记
——第 3.2.2章 利用Barrett约化实现
下面来看看利用Barrett约化实现的模乘运算。该运算和前面提到的模乘运算差别不大,都是先做大整数的乘法,只不过现在改用Barrett约化的思想来做模运算,而不是用经典模运算BN_nnmod。───────────────────────────────────────intBN_mod_mul_reciprocal(BIGNUM*r,constBIGNUM*x,constBIGNUM*y,BN_
网糸隹
·
2020-06-26 07:26
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第2.3.3章 Montgomery模数与相关函数
为了便于使用Montgomery约化,专门定义了一个结构体,我们将它称作Montgomery模数,这点与Barrett模数类似。结构体的定义如下:structbn_mont_ctx_st{intri;BIGNUMRR;BIGNUMN;BIGNUMNi;BN_ULONGn0;intflags;};typedefstructbn_mont_ctx_stBN_MONT_CTX;其中:ri模数N的长度,若
网糸隹
·
2020-06-26 07:25
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第3.1.1章 模加
模加法的思想很简单,就是先做大整数的加法,然后再调用BN_nnmod做模运算。───────────────────────────────────────intBN_mod_add(BIGNUM*r,constBIGNUM*a,constBIGNUM*b,constBIGNUM*m)功能:模加运算输入:a,b,m【模数】输出:r←a+bmodm返回:1【正常】or0【出错】出处:bn_mod.c
网糸隹
·
2020-06-26 07:25
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第2.4章 三种模运算的比较
现在来比较一下上面介绍的三中模运算——经典模运算、Barrett约化和Montgomery约化。因为在绝大多数情况下被模数x的字长l为模数m的字长k的2倍,所以以下按照这种常见情况来进行比较。下面提到的乘法次数是指需要做多少次字与字的乘法,类似地,除法次数就是指需要做多少次两个字除以一个字的除法。表中给出的乘除法数没有包括预运算和事后处理运算。经典模运算Barrett约化Montgomery约化乘
网糸隹
·
2020-06-26 07:25
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第3.1.2章 模减
模减的思想与模加类似:先做大整数的减法,然后再调用BN_nnmod做模运算。───────────────────────────────────────intBN_mod_sub(BIGNUM*r,constBIGNUM*a,constBIGNUM*b,constBIGNUM*m)功能:模减运算输入:a,b,m【模数】输出:r←a-bmodm返回:1【正常】or0【出错】出处:bn_mod.c─
网糸隹
·
2020-06-26 07:25
openssl
密码技术与应用
OpenSSL密码库
算法笔记
——第2.2.2章 Barrett约化的优越性
现在简单的将经典运算和Barrett约化做下对比。经典模运算就是做长除法,而Barrett约化与经典模运算不同。经典模运算=除法。Barrett约化=2次特殊的除法+2次较特殊的乘法+1次可预先完成的除法。Barrett约化中的2次特殊的除法(和除以,见(2.3)式)非常特殊——除数是基数B的方幂,这种除法可以用右移来代替,所耗费的时间可忽略不计。而2次乘法(,见(2.3)式和(2.5)式)的特殊
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.2.4章 经典平方
所谓的经典平方就是利用经典乘法的那套思想为基础,再结合ai×aj+aj×ai=2ai×aj来简化运算:。…………(1.7)即用字与字的平方做ai2,用字与字的乘法做ai×aj(i≠j)。经典平方的函数为:───────────────────────────────────────voidbn_sqr_normal(BN_ULONG*r,constBN_ULONG*a,intn,BN_ULONG*
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.3.1章 除法算法思想
首先考虑简单的除法——n+1个字除以n个字得到的商是一个字。给定非负整数和,不妨假设u/v
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
openssl
OpenSSL密码库
算法笔记
——第1.2.2章 comba乘法
comba乘法就是用另外一种顺序来做乘法:…………(1.4)即按照由低到高的顺序计算乘积r的每一个字。其具体算法如下:(参见[3]算法3)───────────────────────────────────────算法:comba算法step1:。step2:对k从0到(m+n-1),执行:2.1)对每一对,执行:2.2.1)(uv)=ai×bj,2.2.2)c0←加法(c0,v),c1←带进位
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第2.2.1章 除法算法函数Barrett约化的思想
记x÷m的商的为q。先来对商q做个小小的变形。…………(2.1)这样一来,就相当于把x和m“分离”了,“分离”出来的B2k/m与x无关。既然B2k/m的值与x无关,那么这部分值就可以预先计算出来。再来看另外一部分x/B2k。x的低t(t为某个不确定的值,需要在后面估算)个字对q的影响应该非常有限。这就好比在计算两个十进制大数(足够大的数)相乘时,把被乘数的足够低的位(比如百位以下)都当成零再来计算
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.2.5章 comba平方
comba平方就是将comba乘法和经典平方的思想结合在一起:…………(1.9)具体算法如下:(参见[3]算法4)───────────────────────────────────────算法:comba平方step1:。step2:对k从0到(2n-1),执行:2.1)对每一对,执行:2.1.1)(uv)=ai×bj,2.1.2)如果(i
网糸隹
·
2020-06-26 07:24
openssl
密码
NIST
SP800
密码技术与应用
openssl
OpenSSL密码库
算法笔记
——第1.2.3章 乘法调用概况
在经典乘法和comba乘法的上面,可以增加了一个外套——intBN_mul(BIGNUM*r,constBIGNUM*a,constBIGNUM*b),这个函数会自动选择合适的算法进行乘法运算。───────────────────────────────────────intBN_mul(BIGNUM*r,constBIGNUM*a,constBIGNUM*b)功能:大数乘法输入:a,b输出:r
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.2.6章 平方调用概况
在经典平方和comba平方的上面加了一个外套——intBN_sqr(BIGNUM*r,constBIGNUM*a),这个函数会自动选择合适的算法进行乘法运算。───────────────────────────────────────intBN_sqr(BIGNUM*r,constBIGNUM*a)功能:平方运算输入:a输出:返回:1【正常】or0【出错】出处:bn_sqr.c─────────
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.2.1章 经典乘法
所谓的经典乘法就是在小学的时候学到的那一套做乘法的方法。如果假设被乘数a和乘数b为:,…………(1.1)则经典乘法是这样做的:。…………(1.2)即分别做a×bi,再累加到r上。算法如下:(参见[1]算法14.12)───────────────────────────────────────算法:经典乘法step1:对i从0到(m+n-1),令ri←0。step2:对j从0到n-1,执行如下运算
网糸隹
·
2020-06-26 07:24
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第2.3章 Montgomery约化
Montgomery约化是通过一次乘法和一个特殊的除法(除数是基数B=232的方幂)来做模运算[9]。M.Brown,D.Hankerson,J.LopezandA.Menezes.SoftwareimplementationoftheNISTellipticcurvesoverprimefields.TopicsinCryptology—CT-RSA2001(LNCS2020)[338],250
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第2章 模运算
在公钥密码系统中用到了大量的模运算。比如RSA中模指数运算需要反复地调用模运算;ECC中有限域上的基本运算(尤其是乘法和平方)需要用到大量的模运算。所以在这一章专门讨论一下模运算。模运算的算法有多种,但是其中最经典最常用的三种方法是经典模运算、Barrett约化、Montgomery约化。模运算为什么会有这么多不同的算法呢,用其中最好的一个不就行了么?然而事实并非如此,Bosselaers等人[7
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL
OpenSSL密码库
算法笔记
——第 2.2.4章 Barrett模数与相关函数
为了便于使用Barrett约化,专门定义了一个结构体,我们将它称作Barrett模数。结构体的定义如下:structbn_recp_ctx_st{BIGNUMN;BIGNUMNr;intnum_bits;intshift;intflags;};typedefstructbn_recp_ctx_stBN_RECP_CTX;其中:N模数;Nr模数的“逆”,即B2k/N;num_bits模数的二进制长度
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.3.2章 除法算法函数
当被除数和除数都是带符号的大整数时,除法函数为:───────────────────────────────────────intBN_div(BIGNUM*dv,BIGNUM*rm,constBIGNUM*num,constBIGNUM*divisor)功能:大数除法输入:num【被除数】,divisor【除数】输出:dv【商】,rm【余数】返回:1【正常】or0【出错】出处:bn_div.c
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第1.1.3章 加减法相关函数
当大数加法中的某个加数退化为字的时候,可以利用更加有效的函数——大数与字的加法实现。───────────────────────────────────────intBN_add_word(BIGNUM*a,BN_ULONGw)功能:大数与字的加法输入:a【大数】,w【字】输出:a=a+w返回:1【正常】or0【出错】出处:bn_word.c───────────────────────────
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第2.2章 除法算法函数
P.Barrett[8]提出了著名的Barrett约化——先对商进行估计,再利用商的估计值估算余数。Barrett约化对被模数x是有限制的,即x
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第2.2.5章 利用Barrett约化做除法
我们还可以利用Barrett约化的思想来做除法运算,算法思想请参见§2.2.1。───────────────────────────────────────intBN_div_recp(BIGNUM*dv,BIGNUM*rem,constBIGNUM*m,BN_RECP_CTX*recp)功能:利用Barrett约化做除法输入:m【被除数】,recp【除数,Barrett模数】输出:dv【商】,
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
OpenSSL密码库
算法笔记
——第2.1章 经典模运算
经典模运算是用除法(见§1.3)计算出商和余数,其中的余数即为所求。该方法对被模数x不加任何限制(Barrett约化和Montgomery约化对被模数x是有限制的)。由§1.3给出的除法算法知,除法运算需要做预运算(将被除数标准化)和事后运算(将余数去标准化)。不过这个标准化和去标准化的过程比较简单——通常标准化就是将被除数左移某个比特,而去标准化就是将余数右移相同的比特。有关经典模运算的思想请参
网糸隹
·
2020-06-26 07:53
openssl
密码
密码技术与应用
上一页
95
96
97
98
99
100
101
102
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他