SM2椭圆曲线参数选取
密码学SM2,SM3,SM4加密标准
![密码学SM2,SM3,SM4加密标准](https://img.taocdn.com/s3/m/f7ab8399d5bbfd0a795673c2.png)
课外实践五SM2、SM3及SM4加密标准一、概述1.SM2椭圆曲线公钥密码算法加密标准SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。
SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。
SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
椭圆曲线算法公钥密码所基于的曲线性质:椭圆曲线多倍点运算构成一个单向函数。
在多倍点运算中,已知多倍点与基点,求解倍数的问题称为椭圆曲线离散对数问题。
对于一般椭圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。
与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。
因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的秘钥规模要小得多。
2.SM3哈希算法加密标准SM3是一种密码散列函数标准。
密码散列函数是散列函数的一种。
它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。
这种散列函数的输入数据,通常被称为消息,而它的输出结果,经常被称为消息摘要。
SM3适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
一个理想的密码散列函数应该有这些特性:对于任何一个给定的消息,它都很容易就能运算出散列数值;难以由一个已知的散列数值,去推算出原始的消息;在不更动散列数值的前提下,修改消息内容是不可行的;对于两个不同的消息,它不能给与相同的散列数值。
信息安全技术 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法
![信息安全技术 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法](https://img.taocdn.com/s3/m/cd12542eee06eff9aef807e8.png)
算法参数与辅助函数 综述
1
公钥加密算法规定发送者用接收者的公钥将消息加密成密文, 接收者用自已的私钥对收到的密文进 行解密还原成原始消息。 3.2 椭圆曲线系统参数 椭圆曲线系统参数包括有限域 Fq 的规模 q(当 q = 2m 时,还包括元素表示法的标识和约化多项式); 定义椭圆曲线 E(Fq)的方程的两个元素 a、b ∈Fq;E(Fq)上的基点 G = (xG, yG) (G ≠ O),其中 xG 和 yG 是 Fq 中的两个元素;G 的阶 n 及其它可选项(如 n 的余因子 h 等)。 椭圆曲线系统参数及其验证应符合 SM2 椭圆曲线公钥密码算法第 1 部分第 4 章的规定。 3.3 用户密钥对 用户 B 的密钥对包括其私钥 dB 和公钥 PB=[dB]G。 用户密钥对的生成算法与公钥验证算法应符合 SM2 椭圆曲线公钥密码算法第 1 部分第 5 章的规定。 3.4 辅助函数 3.4.1 概述 本部分规定的椭圆曲线公钥加密算法涉及到三类辅助函数: 密码杂凑算法、 密钥派生函数和随机数 发生器。这三类辅助函数的强弱直接影响加密算法的安全性。 3.4.2 3.4.3 密码杂凑算法 密钥派生函数 本部分规定使用国家密码管理局批准的密码杂凑算法,如 SM3 密码杂凑算法。 密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。 在密钥协商过程中, 密钥派生 函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数 据。 密钥派生函数需要调用密码杂凑算法。 设密码杂凑算法为 Hv( ),其输出是长度恰为 v 比特的杂凑值。 密钥派生函数 KDF(Z, klen): 输入:比特串 Z,整数 klen(表示要获得的密钥数据的比特长度,要求该值小于(232-1)v)。 输出:长度为 klen 的密钥数据比特串 K。 a)初始化一个 32 比特构成的计数器 ct=0x00000001; b)对 i 从 1 到 ⎡klen / v ⎤ 执行: b.1)计算 Hai=Hv (Z || ct); b.2) ct++; c)若 klen/v 是整数,令 Ha!⎡klen / v ⎤ = Ha ⎡klen / v ⎤ , 否则令 Ha!⎡klen / v ⎤ 为 Ha ⎡klen / v ⎤ 最左边的 (klen d)令 K = Ha1 || Ha2 || ! || Ha ⎡klen / v ⎤−1 || Ha!⎡klen / v ⎤ 。 3.4.4 随机数发生器 本部分规定使用国家密码管理局批准的随机数发生器。 4 加密算法及流程
密码学SM2,SM3,SM4加密标准
![密码学SM2,SM3,SM4加密标准](https://img.taocdn.com/s3/m/fa55aa51f121dd36a22d825a.png)
课外实践五SM2、SM3及SM4加密标准一、概述1.SM2椭圆曲线公钥密码算法加密标准SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH 等国际标准,而是采取了更为安全的机制.SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。
SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
椭圆曲线算法公钥密码所基于的曲线性质:椭圆曲线多倍点运算构成一个单向函数.在多倍点运算中,已知多倍点与基点,求解倍数的问题称为椭圆曲线离散对数问题。
对于一般椭圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。
与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。
因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的秘钥规模要小得多。
2.SM3哈希算法加密标准SM3是一种密码散列函数标准.密码散列函数是散列函数的一种。
它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。
这种散列函数的输入数据,通常被称为消息,而它的输出结果,经常被称为消息摘要。
SM3适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA—1算法。
一个理想的密码散列函数应该有这些特性:对于任何一个给定的消息,它都很容易就能运算出散列数值;难以由一个已知的散列数值,去推算出原始的消息;在不更动散列数值的前提下,修改消息内容是不可行的;对于两个不同的消息,它不能给与相同的散列数值。
信息安全技术SM2椭圆曲线公钥密码算法
![信息安全技术SM2椭圆曲线公钥密码算法](https://img.taocdn.com/s3/m/99ec954da55177232f60ddccda38376baf1fe0bd.png)
信息安全技术SM2椭圆曲线公钥密码算法1 范围GB/T XXXXX 的本部分规定了SM2椭圆曲线公钥密码算法涉及的必要数学基础知识与相关密码技术,以帮助实现其它各部分所规定的密码机制。
本部分适用于基域为素域和二元扩域的椭圆曲线公钥密码算法的设计、开发、使用。
2 符号和缩略语B MOV 阈。
正数B ,使得求取B q F 上的离散对数至少与求取q F 上的椭圆曲线离散对数一样困难。
deg ( f ) 多项式f (x )的次数。
E 有限域上由a 和b 定义的一条椭圆曲线。
E (F q ) q F 上椭圆曲线E 的所有有理点(包括无穷远点O )组成的集合。
ECDLP 椭圆曲线离散对数问题。
F p 包含p 个元素的素域。
F q 包含q 个元素的有限域。
F q * 由F q 中所有非零元构成的乘法群。
m 2F 包含m 2个元素的二元扩域。
G 椭圆曲线的一个基点,其阶为素数。
gcd(x , y ) x 和y 的最大公因子。
h 余因子,h=#E (F q )/n ,其中n 是基点G 的阶。
LeftRotate ( ) 循环左移运算。
l max 余因子h 的最大素因子的上界。
m 二元扩域F 2m 关于F 2的扩张次数。
mod f (x ) 模多项式f (x )的运算。
若f (x )是二元域上的多项式,则所有系数执行模2运算。
mod n 模n 运算。
例如,23 mod 7=2。
n 基点G 的阶(n 是#E (F q )的素因子)。
O 椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
P P = (x P , y P ) 是椭圆曲线上除O 之外的一个点,其坐标x P ,y P 满足椭圆曲线方程。
P 1+P 2 椭圆曲线E 上两个点P 1与P 2的和。
p 大于3的素数。
q 有限域F q 中元素的数目。
a, b q F 中的元素,它们定义q F 上的一条椭圆曲线E 。
r min 基点G 的阶n 的下界。
SM2椭圆曲线参数选取
![SM2椭圆曲线参数选取](https://img.taocdn.com/s3/m/57f443c03086bceb19e8b8f67c1cfad6195fe919.png)
关于SM2椭圆曲线参数选取的资料一.安全的椭圆曲线的选取1.椭圆曲线上的公钥密码体制的安全性是建立在椭圆曲线离散对数的基础上, 但并不是所有椭圆曲线都可以应用到公钥密码体制中, 为了保证其安全性, 必须选取安全椭圆曲线,即只有选到合适的有限域GF(p)和椭圆曲线(ECC),能够抵抗攻击ECDLP算法的攻击,才能保证所选ECC的安全性。
若某椭圆曲线存在优于n1/2级(n是基点阶次)计算复杂度的攻击方法,则称此曲线为弱椭圆曲线。
Fp上的超奇异椭圆曲线(有限域Fp的特征整除q+1-#E(Fp))和Fp上的异常曲线(#E(Fp)=p)都是弱椭圆曲线。
(国密局文档p4,p25A.4抗攻击椭圆曲线满足的条件)。
下面是选取曲线时应遵循的原则:(一种椭圆曲线参数生成的快速算法)(1)为了抗击Pollard-ρ攻击,所选取椭圆曲线的阶#E(GF(p))的分解式中应该包含一个大的素数因子,目前应不小于160bit;(2)为了抗击Weil对和Tate对的攻击,对于1≤k≤30,n不能除p k-1(不宜选取超奇异椭圆曲线);(3)为了抗击Semaev-Smart-Satoh-Araki的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(F P)≠p(不宜选取异常椭圆曲线);(4)对于二进制域GF(2m)的度m不宜为合数。
Gaudry,Hess和Smart提出,若m有小约数l(l=4),存在比Pollard's rho算法更快求解ECDLP的方法。
(5)选择GF(p)的子域H,满足它的阶|H| 是#E 的最大素因子n,并在H 上实现ECC。
2.一般来说有4 种寻找安全椭圆曲线的方法:(椭圆曲线密码体制及其参数生成的研究.2006.DR)(1) 有限域GF( p) 上随机生成一椭圆曲线, 直接计算其阶, 判断阶是否为大素数或含大素数因子, 若是即确定,否则继续选取曲线, 直至符合条件。
(2) 取具有一定特殊性椭圆曲线的系数, 计算该椭圆曲线的阶, 对该阶进行判断, 直至找到所需要的安全曲线。
商密算法SM2、SM3、SM4的用途和原理
![商密算法SM2、SM3、SM4的用途和原理](https://img.taocdn.com/s3/m/d97c0d8f70fe910ef12d2af90242a8956becaa73.png)
商密算法SM2、SM3、SM4的⽤途和原理SM1对称密码SM1 算法是分组密码算法,分组长度为128位,密钥长度都为 128 ⽐特,算法安全保密强度及相关软硬件实现性能与 AES 相当,算法不公开,仅以IP核的形式存在于芯⽚中。
采⽤该算法已经研制了系列芯⽚、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,⼴泛应⽤于电⼦政务、电⼦商务及国民经济的各个应⽤领域(包括国家政务通、警务通等重要领域)。
SM2椭圆曲线公钥密码算法SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换⽅⾯不同于ECDSA、ECDH等国际标准,⽽是采取了更为安全的机制。
另外,SM2推荐了⼀条256位的曲线作为标准曲线。
SM2标准包括总则,数字签名算法,密钥交换协议,公钥加密算法四个部分,并在每个部分的附录详细说明了实现的相关细节及⽰例。
SM2算法主要考虑素域Fp和F2m上的椭圆曲线,分别介绍了这两类域的表⽰,运算,以及域上的椭圆曲线的点的表⽰,运算和多倍点计算算法。
然后介绍了编程语⾔中的数据转换,包括整数和字节串,字节串和⽐特串,域元素和⽐特串,域元素和整数,点和字节串之间的数据转换规则。
详细说明了有限域上椭圆曲线的参数⽣成以及验证,椭圆曲线的参数包括有限域的选取、椭圆曲线⽅程参数、椭圆曲线群基点的选取等,并给出了选取的标准以便于验证。
最后给椭圆曲线上密钥对的⽣成以及公钥的验证,⽤户的密钥对为(s,sP),其中s为⽤户的私钥,sP为⽤户的公钥,由于离散对数问题从sP难以得到s,并针对素域和⼆元扩域给出了密钥对⽣成细节和验证⽅式。
总则中的知识也适⽤于SM9算法。
在总则的基础上给出了数字签名算法(包括数字签名⽣成算法和验证算法),密钥交换协议以及公钥加密算法(包括加密算法和解密算法),并在每个部分给出了算法描述,算法流程和相关⽰例。
数字签名算法、密钥交换协议以及公钥加密算法都使⽤了国家密管理局批准的SM3密码杂凑算法和随机数发⽣器。
SM2椭圆曲线公钥密码算法第5部分参数定义
![SM2椭圆曲线公钥密码算法第5部分参数定义](https://img.taocdn.com/s3/m/69ae193fa300a6c30c229fec.png)
SM2椭圆曲线公钥密码算法第5部分:参数定义Public key cryptographic algorithm SM2 based on elliptic curves--Part 5: Parameter definitions目次1 符号缩略语 (1)2 参数定义 (1)附 录 A 数字签名与验证示例 (2)A.1 综述 (2)A.2SM2椭圆曲线数字签名 (2)附 录 B 密钥交换及验证示例 (4)B.1 一般要求 (4)B.2SM2椭圆曲线密钥交换协议 (4)附 录 C 消息加解密示例 (8)C.1 一般要求 (8)C.2SM2椭圆曲线消息加解密 (8)SM2椭圆曲线公钥密码算法第5部分:参数定义1 符号缩略语p大于3的素数。
a, b F q中的元素,它们定义F q上的一条椭圆曲线E。
n基点G的阶(n是#E(F q)的素因子)。
x G 生成元的x坐标y G 生成元的y坐标2 参数定义SM2使用素数域256位椭圆曲线。
椭圆曲线方程:y2 = x3 + ax + b曲线参数:p = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFFa = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFCb = 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93n = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123 x G= 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7 y G= BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0附 录 A数字签名与验证示例A.1 综述本附录选用《SM3密码杂凑算法》给出的密码杂凑算法,其输入是长度小于264的消息比特串,输出是长度为256比特的杂凑值,记为H256( )。
国密SM2中k值选取的研究与改进
![国密SM2中k值选取的研究与改进](https://img.taocdn.com/s3/m/3abe3708e009581b6ad9ebd9.png)
国密SM2中k值选取的研究与改进作者:郇静赵连军来源:《电脑知识与技术》2020年第30期摘要:区块链技术中的安全问题一部分取决于移动设备的能源算例和应用情况,这决定了设备会具有安全隐患,特别是智能卡等嵌入系统,它们特定应用情况下是无法支持随机源的,解决随机源选取问题从而加强密钥对的安全性是非常重要的。
随着我国自主提出的公钥密码算法SM2的地位不断提高,该算法应用到设备和系统中是必然趋势,通过HMAC算法改进SM2签名生成中随机值k的选取方式,最终使SM2转换为确定性方案,提高嵌入式系统中随机源的质量,增加算法安全性,使之普遍适用。
关键词: SM2; HMAC; 随机源; ECDSA; ECC ;交易可锻性中图分类号:TP9309.7 文献标识码:A文章编号:1009-3044(2020)30-0054-03Abstract:Part of the security problems in blockchain technology depend on the energy calculation examples and applications of mobile devices, which determines that devices will have security risks, especially embedded systems such as smart cards, which can not support random sources in specific applications. It is very important to solve the problem of random source selection so as to enhance the security of key pair. With the improvement of the status of public key cryptography algorithm SM2, which is proposed by our country, it is an inevitable trend to apply this algorithm to devices and systems. Through HMAC algorithm, we can improve the selection of random value K in SM2 signature generation, and finally transform SM2 into a deterministic scheme, improve the quality of random sources in embedded systems, increase the security of the algorithm, and make it universally applicable.Key words:SM2; HMAC; random source ; ECDSA; ECC; transaction malleability1 引言自国家大力发展区块链技术以来,区块链技术在金融、政务、医疗等领域发挥着重要的作用。
SM2公钥密码算法
![SM2公钥密码算法](https://img.taocdn.com/s3/m/fa98648948d7c1c709a145e9.png)
曲线的SM2算法进行说明。
2021/8/8
商用密码算法原理与C语言实现
3
3.1.1 算法描述
1.参数产生
素域上SM2选用 2 = 3 + + 作为加密曲线,
令( ) = {(, )| 2 = 3 + + } ∪ , 包含了
椭圆曲线上的所有点,其中O是一个无穷远点,不
能用有序整数对(x,y)即仿射坐标表示,用#E( )表
示E( )上元素的个数,称为椭圆曲线的阶。SM2算
法使用固定的 域,系统参数如下:
域的特征p,p是大素数;
2021/8/8
商用密码算法原理与C语言实现
4
3.1.1 算法描述
中的两个元素a和b,它们定义曲线E的方程:
10
3.1.1 算法描述
3. 椭圆曲线阶的选取
若已给定域 ,要最大限度地抵抗针对ECDLP的
Poh1ig-Hellman攻击和pollardp攻击,应使得#( )为
素数或者接近素数,即#( ) ≠ ℎ,其中n为素数,
一般来说,最小应该满足素数 > 2160 ,h为余因子
,非常小,比如ℎ = 1,2,3,4;另外还要避免对特殊曲
256比特的密码杂凑函数;
(3)置 =
255
=0 ℎ 2 ;
(4)置 = (mod);
2021/8/8
商用密码算法原理与C语言实现
8
3.1.1 算法描述
(5)任意选择 中的元素a和b,使 2 = 3 (mod);
(6)若(43 + 27 2 )mod = 0,则转第一步;
8
有序整数对,也可以看作一个 字节长度的字符串。
国产商用密码算法SM2及其相关标准介绍
![国产商用密码算法SM2及其相关标准介绍](https://img.taocdn.com/s3/m/40c467c25ff7ba0d4a7302768e9951e79b8969d5.png)
国产商用密码算法SM2及其相关标准介绍谢宗晓 李达 马春旺(中国金融认证中心)1 概述公钥密码算法的产生主要是为了解决密钥分发困难的问题1)。
1976年,Whitfield Diffie 和Martin Hellman 提出了公开密钥加密的设计思想,但当时并未能给出实现的算法。
之后,有多种算法被提出,但经得住考验得到大面积应用的主要是Ron Rivest、Adi Shamir 和Leonard Adleman 在1978年提出的RSA 算法。
直到现在,RSA 几乎成了公钥密码领域事实上的标准。
关于公钥密码算法的更多基础知识,请参考文献[1]。
RSA 算法的安全性,主要是基于大整数质因数分解的困难性,这意味着如果这个整数太小,就很容易受到暴力攻击。
所以,RSA 算法的密钥,越来越长。
NIST 2)建议在2010年12月31日前停止使用RSA1024,升级至RSA2048。
当然,到目前,也没有明确的证据表明RSA1024已经被破解了,但是从当前计算能力的升级速度推测,RSA1024确实已经不安全了。
密钥长度的不断增加意味着效率在不停地降低,与一味地增加密钥长度相比,寻求更合适的陷门单向函数是解决这个问题更佳途径。
Neal Koblitz 3)和Victor Miller 4)分别独立地在1985年将椭圆曲线引入密码学领域。
2 椭圆曲线密码学椭圆曲线密码学(Elliptic curve cryptography,ECC)的数学基础远没有RSA 算法那么易于理解。
首先,椭圆曲线和椭圆是两码事,两者之间联系不大。
最常见的椭圆曲线方程,如公式(1)典型的二元三次方程。
但是这个方程的几何表现形式并不是椭圆,或者说,跟椭圆基本没什么关系。
其图形如图1中的示例。
1)在Diffie& Hellman [4]发表于1976年论文中指出,在对称密码中,不仅存在“密钥分发困难”的问题,还存在一个问题是“密文中集成了密钥”。
国密算法简介
![国密算法简介](https://img.taocdn.com/s3/m/8310f615561252d381eb6e7d.png)
版本人员时间升级内容❝课程目的◦了解国密算法的算法原理◦了解SM2、SM3、SM4的算法原理◦了解国密卡片相关API❝目标人员◦移动金融初级开发人员❝前置课程◦RSA密钥体系◦DES密钥体系❝基本知识❝对称加密算法SM2❝非对称加密算法SM4❝摘要算法SM3定义国密即国家密码局认定的国产密码算法,即商用密码,主要完成加密、解密、签名、验签、摘要等操作。
常用国密算法种类算法类型密钥长度输入数据要求输出数据特征SM2非对称加密算法公钥64字节,私钥32字节。
长度小于(2^32-1)*32=137,438,953,440字节(大约1374亿多)。
输出长度是明文长度+96,有随机数参数,每次密文不同。
SM3摘要算法--无要求。
固定长度,32字节。
SM4对称加密算法16字节分组长度16字节,需要填充到16字节整数倍。
有CBC和ECB两种模式,CBC需要设定初始值。
长度为16字节整数倍。
国密算法还有SM1、SM7、SSF33、祖冲之密码对称加密算法,SM9非对称加密算法。
国密算法与其他算法比较非对称加密算法SM2与RSA比较国密算法与其他算法比较SM2与RSA算法的一些统计数据RSA密钥强度(长度)SM2密钥强度(长度)破解时间(年)521比特106比特104(已破解)768比特132比特108(已破解)1024比特160比特10112048比特210比特1020国密算法与其他算法比较SM2与RSA算法的一些统计数据算法签名速度验签速度1024RSA2792次/秒51224次/秒2048RSA455次/秒15122次/秒256SM24095次/秒871次/秒国密算法与其他算法比较SM4与DES较从算法上看,国产SM4算法在计算过程中增加非线性变换,理论上能大大提高其算法的安全性,并且由专业机构进行了密码分析,民间也对21轮SM4进行了差分密码分析,结论均为安全性较高。
国密卡实现API类层次图class ng.Object◦class com.guomi.GMCipher◦class com.guomi.GMKeyBuilder◦class com.guomi.GMKeyPair◦class com.guomi.GMMessageDigest ◦class com.guomi.GMSignature◦class com.guomi.GMCipherExtend◦class com.guomi.GMSM2KeyExchange国密卡实现的API接口interface javacard.security.Key◦interface javacard.security.SecretKeyinterface com.guomi.SM1Keyinterface com.guomi.SM4Keyinterface com.guomi.SM7Keyinterface com.guomi.SSF33Key◦interface javacard.security.PrivateKey interface com.guomi.SM2PrivateKey ◦interface javacard.security.PublicKeyinterface com.guomi.SM2PublicKey国密卡实现的API接口interface com.unionpay.guomi.SM2Key ◦interface com.guomi.SM2PrivateKey◦interface com.guomi.SM2PublicKey目录❝算法原理❝加密❝解密❝签名❝验签算法原理❝国密SM2规定椭圆曲线参数(固定值,256比特)◦p :FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF◦a:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC◦b:28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93◦n:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123◦gx:32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7◦gy:BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0❝各个参数意义如下椭圆曲线方程:y2=x3+ax+b,把它定义在Fp上, 要求a,b满足:4a3+27b2≠0(mod p)那么,p 、a 、b 用来确定一条椭圆曲线(确切来说应该是有限域Fp),G(gx,gy)为基点,n为点G 的阶,另外,还有一个非必要参数h,是椭圆曲线上所有点的个数m与n相除的整数部分;加密SM2公私玥结构、◦SM2公私玥关系P=d*G 或者(x ,y )=d*(gx ,gy ),即公钥P 是基点G 的d 倍点。
[密码学——基础理论与应用][李子臣][电子课件] 第8章---SM2公钥密码算法
![[密码学——基础理论与应用][李子臣][电子课件] 第8章---SM2公钥密码算法](https://img.taocdn.com/s3/m/7748dc53da38376baf1faec2.png)
例子:
参数:
取p=11,Ep(1,6),椭圆曲线为y2≡x3+x+6, Ep(1,6)的一个生成元是G=(2,7),私钥d=7, A的公开钥为P=dG=(7,2)。
假定明文M=(9,1)。
加密:
B选取随机数k=6,由kG=6G=6(2,7)=(7,9), M+kPA=(9,1)+6(7,2)=(6,3),得密文为 {(7,9),(6,3)}。
ECC与RSA/DSA在同等安全条件下 所需密钥长度
RSA/DSA 512 768 1024 2048 21000
ECC
106 132 160 211 600
2020/3/17
密码学---基础理论与应用
5
椭圆曲线密码体制的优点
计算量小,处理速度快。 存储空间小。 ECC已被IEEE公钥密码标准P1363采用。
文献:
N.Koblitz, Elliptic Curve Cryptosystems, Mathematics of Computation,48,203-209,1987.
ler, Use of Elliptic Curve in Cryptography, Advances in Cryptology,CRYPTO’ 85 Proceedings. London, UK: Springer Verlag, 1986:417-426.
根 : 5(p1)/4 53 4,因此两个根为4,7 点(2,4)和(2,7)为椭圆曲线上的两个点。
2020/3/17
密码学---基础理论与应用
12
2020/3/17
密码学---基础理论与应用
13
Z11上椭圆曲线y2 x3 x 6中的点
椭圆曲线参数选取
![椭圆曲线参数选取](https://img.taocdn.com/s3/m/7745dcbcbb68a98270fefa75.png)
椭圆曲线参数选取Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】关于SM2椭圆曲线参数选取一.安全的椭圆曲线的选取1.椭圆曲线上的公钥密码体制的安全性是建立在椭圆曲线离散对数的基础上, 但并不是所有椭圆曲线都可以应用到公钥密码体制中, 为了保证其安全性, 必须选取安全椭圆曲线,即只有选到合适的有限域GF(p)和椭圆曲线(ECC),能够抵抗攻击ECDLP算法的攻击,才能保证所选ECC的安全性。
若某椭圆曲线存在优于n1/2级(n是基点阶次)计算复杂度的攻击方法,则称此曲线为弱椭圆曲线。
Fp上的超奇异椭圆曲线(有限域Fp的特征整除q+1-#E(Fp))和Fp上的异常曲线(#E(Fp)=p)都是弱椭圆曲线。
(国密局文档p4,抗攻击椭圆曲线满足的条件)。
下面是选取曲线时应遵循的原则:(一种椭圆曲线参数生成的快速算法)(1)为了抗击Pollard-ρ攻击,所选取椭圆曲线的阶#E(GF(p))的分解式中应该包含一个大的素数因子,目前应不小于160bit;(2)为了抗击Weil对和Tate对的攻击,对于1≤k≤30,n不能除p k-1(不宜选取超奇异椭圆曲线);(3)为了抗击Semaev-Smart-Satoh-Araki的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(F P)≠p(不宜选取异常椭圆曲线);(4)对于二进制域GF(2m)的度m不宜为合数。
Gaudry,Hess和Smart 提出,若m有小约数l(l=4),存在比Pollard's rho算法更快求解ECDLP的方法。
(5)选择GF(p)的子域H,满足它的阶|H| 是#E 的最大素因子n,并在H 上实现ECC。
2.一般来说有4 种寻找安全椭圆曲线的方法:(椭圆曲线密码体制及其参数生成的研究.)(1) 有限域GF( p) 上随机生成一椭圆曲线, 直接计算其阶, 判断阶是否为大素数或含大素数因子, 若是即确定,否则继续选取曲线, 直至符合条件。
SM 算法原理
![SM 算法原理](https://img.taocdn.com/s3/m/4d1e530233687e21af45a992.png)
SM2算法1、算法原理椭圆曲线算法是通过方程确定的,SM2算法采用的椭圆曲线方程为:y2 = x3 + ax + b在SM2算法标准中,通过指定a、b系数,确定了唯一的标准曲线。
下面通过图示展示算法原理。
请参见下图:图1 椭圆曲线算法原理上图为方程:y2 = x3–x的曲线。
1、P点为基点;2、通过P点做切线,交与点2P点,在2P’点做竖线,交与2P点,2P点即为P点的2倍点;3、进一步,P点和2P点之间做直线,交与3P’点,在3P’点做竖线,交与3P点,3P点即为P点的3倍点;4、同理,可以计算出P点的4、5、6、…倍点;5、如果给定图上Q点是P的一个倍点,请问Q是P的几倍点呢?6、直观上理解,正向计算一个倍点是容易的,反向计算一个点是P的几倍点则困难的多。
在椭圆曲线算法中,将倍数d做为私钥,将Q做为公钥。
2、椭圆曲线系统参数Fp上椭圆曲线系统参数包括:a) 域的规模q = p,p是大于3的素数;b) (选项)一个长度至少为192的比特串SEED;c) Fp中的两个元素a和b,它们定义椭圆曲线E的方程:y2 = x3+ax+b;d) 基点G = (xG;yG) ∈E(Fp),G = O;e) 基点G的阶n(要求:n > 2191且n > 4p1=2);f) (选项)余因子h = #E(Fp)=n。
3、密钥对的生成输入:一个有效的Fq(q = p且p为大于3的素数,或q = 2m)上椭圆曲线系统参数的集合。
输出:与椭圆曲线系统参数相关的一个密钥对(d;P)。
a) 用随机数发生器产生整数d ∈[1;n−2];b) G为基点,计算点P = (xP;yP) = [d]G;c) 密钥对是(d;P),其中d为私钥,P为公钥。
4、加密算法及流程设需要发送的消息为比特串M,klen为M的比特长度。
为了对明文M进行加密,作为加密者的用户A应实现以下运算步骤:A1:用随机数发生器产生随机数k∈[1,n-1];A2:计算椭圆曲线点C1=[k]G=(x1,y1),按本文本第1部分4.2.8和4.2.4给出的细节,将C1的数据类型转换为比特串;A3:计算椭圆曲线点S=[h]PB,若S是无穷远点,则报错并退出;A4:计算椭圆曲线点[k]PB=(x2,y2),按本文本第1部分4.2.5和4.2.4给出的细节,将坐标x2、y2 的数据类型转换为比特串;A5:计算t=KDF(x2 ∥y2, klen),若t为全0比特串,则返回A1;A6:计算C2 = M ⊕t;A7:计算C3 = Hash(x2 ∥M ∥y2);A8:输出密文C = C1 ∥C2 ∥C3。
SM2椭圆曲线公钥密码算法第5部分参数定义
![SM2椭圆曲线公钥密码算法第5部分参数定义](https://img.taocdn.com/s3/m/e622a5ef4128915f804d2b160b4e767f5acf8014.png)
SM2椭圆曲线公钥密码算法第5部分参数定义SM2椭圆曲线公钥密码算法第5部分:参数定义Public key cryptographic algorithm SM2 based on elliptic curves--Part 5: Parameter definitions目次1 符号缩略语 (1)2 参数定义 (1)附录 A 数字签名与验证示例 (2)A.1 综述 (2)A.2SM2椭圆曲线数字签名 (2)附录 B 密钥交换及验证示例 (4)B.1 一般要求 (4)B.2SM2椭圆曲线密钥交换协议 (4)附录 C 消息加解密示例 (8)C.1 一般要求 (8)C.2SM2椭圆曲线消息加解密 (8)SM2椭圆曲线公钥密码算法第5部分:参数定义1 符号缩略语p大于3的素数。
a, b F q中的元素,它们定义F q上的一条椭圆曲线E。
n基点G的阶(n是#E(F q)的素因子)。
x G 生成元的x坐标y G 生成元的y坐标2 参数定义SM2使用素数域256位椭圆曲线。
椭圆曲线方程:y2 = x3 + ax + b曲线参数:p = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFFa = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFCb = 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93n = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123 x G= 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7 y G= BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0附录 A数字签名与验证示例A.1 综述本附录选用《SM3密码杂凑算法》给出的密码杂凑算法,其输入是长度小于264的消息比特串,输出是长度为256比特的杂凑值,记为H256( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于SM2椭圆曲线参数选取
一.安全的椭圆曲线的选取
1.椭圆曲线上的公钥密码体制的安全性是建立在椭圆曲线离散对数的基础上, 但并不是所有椭圆曲线都可以应用到公钥密码体制中, 为了保证其安全性, 必须选取安全椭圆曲线,即只有选到合适的有限域GF(p)和椭圆曲线(ECC),能够抵抗攻击ECDLP算法的攻击,才能保证所选ECC的安全性。
若某椭圆曲线存在优于n1/2级(n是基点阶次)计算复杂度的攻击方法,则称此曲线为弱椭圆曲线。
Fp上的超奇异椭圆曲线(有限域Fp的特征整除q+1-#E(Fp))和Fp上的异常曲线(#E(Fp)=p)都是弱椭圆曲线。
(国密局文档p4,p25A.4抗攻击椭圆曲线满足的条件)。
下面是选取曲线时应遵循的原则:(一种椭圆曲线参数生成的快速算法)
(1)为了抗击Pollard-ρ攻击,所选取椭圆曲线的阶#E(GF(p))的分解式中应该包含一个大的素数因子,目前应不小于160bit;
(2)为了抗击Weil对和Tate对的攻击,对于1≤k≤30,n不能除p k-1(不宜选取超奇异椭圆曲线);
(3)为了抗击Semaev-Smart-Satoh-Araki的攻击所选曲线的阶不能等于该曲线所定义的有限域的阶,即#E(F P)≠p(不宜选取异常椭圆曲线);
(4)对于二进制域GF(2m)的度m不宜为合数。
Gaudry,Hess和Smart提出,若m有小约数l(l=4),存在比Pollard's rho算法更
快求解ECDLP的方法。
(5)选择GF(p)的子域H,满足它的阶|H| 是#E 的最大素因子n,并在H 上实现ECC。
2.一般来说有4 种寻找安全椭圆曲线的方法:(椭圆曲线密码体制及其参数生成的研究.2006.DR)
(1) 有限域GF( p) 上随机生成一椭圆曲线, 直接计算其阶, 判断阶是否为大素数或含大素数因子, 若是即确定,否则继续选取曲线, 直至符合条件。
(2) 取具有一定特殊性椭圆曲线的系数, 计算该椭圆曲线的阶, 对该阶进行判断, 直至找到所需要的安全曲线。
(3) 如果p = 2m , 其中m 能被一个比较小的整数d 整除, 首先在有限域GF( p1 ) ( p1 = 2 d ) 上选择一椭圆曲线E,并计算其阶, 根据此值, 利用Weil 定理[ 2] 计算该曲线在其扩域GF( p) 上的阶, 若此阶符合安全标准, 再找曲线E在域GF( p) 上的嵌入E, 则E 即为所需的安全椭圆曲线。
(4) 首先给出具有安全条件的曲线阶, 然后构造一具有此阶的椭圆曲线。
目前国内外比较流行的计算椭圆曲线阶的算法有complex multiplication 算法、SEA 算法、Satoh 算法。
应用广泛的椭圆曲线公钥密码体制( ECC) 中大多是基于特征2 的有限域上。
3.尽管ECC的参数选取方法有许多种,应用最多的是随机选择方法,它是根据任意给定曲线的系数,计算曲线的阶直到找到素数(或近素数)阶的椭圆曲线。
(1)参数p的选取:p当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
(2)参数a、b的选取:已知素域的规模p,求解比特串SEED 及Fp中的元素a,b(D.1p37参数生成)
a) 任意选择长度至少为192的比特串SEED;
b) 计算H = H256(SEED),并记H = (h255;h254;...;h0);
c) 置R =Σh i2i,其中i取从0到255的整数;
d) 置r = R mod p;
e) 任意选择Fp中的元素a和b,使r2≡a3 (mod p);
f) 若(4a3+27b2) mod p=0,则转步骤a);
g) 所选择的Fp上的椭圆曲线为E:y2 = x3+ax+b;
h) 输出(SEED;a,b)
二.椭圆曲线的阶的选取(北邮博士论文)
在椭圆曲线生成的过程中要考虑的一个重要因素就是确定椭圆曲线点的个数,即椭圆曲线的阶"通常密码体制中使用的椭圆曲线E 的阶#E(Fp)必须满足以下条件:若已给定域Fp,要最大限度地抵抗针对ECDLP的Poh1ig-Hellman攻击和pollardp攻击,应使得#E(Fp)为素数或者接近素数,即#E(Fp)=hn其中n为素数,一般来说,最小应该满足素数n>2160,h非常小,比如h=1,2,3或4;另外还要避免对特殊曲线的攻击,保证#E(Fp≠p),即椭圆曲线E不是畸形曲线;同时还要使得#E(Fp)的素因子n不能整除p t-1,其中t=1,2,…,30,即椭圆曲线E 不是超奇异曲线,MOV攻击法不能实现"
计算椭圆曲线阶的最简单的方法是直接对每个X任F(p)通过WeierstraSS方程查找y任F(p)的解的个数,该方法在密码学域空间很大的情况下是不可取的。
在实际的阶计算中,常采用以下两种方法:复乘法和点计数法。
(l)复乘法(CM)
该方法首先选择一个满足安全性约束的阶N,然后构造阶为N的椭圆曲线。
使用这一方法的时候要先确定构造椭圆曲线的类型,再选用不同的方法确定椭圆曲线的阶。
若选取的曲线是素数域上的椭圆曲线,那么在选定阶N后,验证阶N是否符合安全椭圆曲线的要求。
若满足,则利用复乘法寻找符合参数要求的椭圆曲线。
复乘法是利用具有复数乘法的椭圆曲线素性证明的算法,来求F(p)上的椭圆曲线E。
(2)点计数法
1985年,SChoof首先提出了计算任意椭圆曲线E的阶#E(Fp)的多项式时间算法。
对于实际密码系统应用中的p,该算法的实现效率较低。
随后该算法被Atkin和ElkioS等人改进,他们通过分析F(p)上的同种映射,利用模多项式的性质,得到了改进算法sChoof一ElkieS一Atkin(sEA)算法。
SEA算法是已知最好的求解任意素数域和最优扩域上椭圆曲线阶的算法,在实际密码系统应用中,该算法的运行时间大约只需要几分钟,它可以快速地将阶能被小素数整除的候选曲线淘汰,因此常用于早期中止策略。
1999年,Satoh提出了计算小特征有限域上阶的全新方法Satoh方法,该方法的一些变体如Satoh一Skjemaa一Taguchi(SST)和算术几何中值(AGM)算法,在二
进制域的情况下速度非常快,可以很快地生成适合密码学用途的椭圆曲线。
三.基点的选取及其阶次要求
椭圆曲线密码体制并不是运行在整个EC元素构成的阿贝尔群上,而是运行在由其基点G生成的子群中,为了提高曲线的安全性,选择的基点G的阶就是#E的一个大素因子。
根据前面得到的参数p,a,b 和n,利用下面的算法可以求出具有大素数阶的基点:随着参数a,b,p确定,这条曲线y2=x3+ax+b就定下来了。
先随机产生0到p-1间的整数作为基点x坐标,计算x3+ax+b的结果再开方就得出基点y坐标,必须满足x,y为整数,又知道椭圆曲线上的任意非无穷远点可作为基点,得到基点G(x,y)(国密局文档p33)。
由HASSNE公式和阿贝尔群结构定理的推论可知,在Fp上选取椭圆曲线时, 要求基点G的阶n>4sqrt(p)(贴吧)。