椭圆曲线

支持国密算法的OpenSSL分支

非 Y 不嫁゛ 提交于 2020-03-17 11:50:13
https://www.jianshu.com/p/db55261ed19e 支持国密SM2/SM3/SM4算法的OpenSSL分支 官方网站: http://gmssl.org/ 开源地址: https://github.com/guanzhi/GmSSL GmSSL 是支持国密算法和标准的OpenSSL分支,增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持,实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息安全实验室开发和维护。 GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支,是一个提供了丰富密码学功能和安全功能的开源软件包。在保持OpenSSL原有功能并实现和OpenSSL API兼容的基础上,GmSSL新增多种密码算法、标准和协议,其中包括: 椭圆曲线公钥加密国际标准ECIES 国密SM2椭圆曲线公钥密码标准,包含数字签名算法、公钥加密算法、密钥交换协议及推荐椭圆曲线参数 国密SM3密码杂凑算法、HMAC-SM3消息认证码算法、PBKDF2口令加密算法 国密SM4/SMS4分组密码、ECB/CBC/CFB/OFB/CTR/GCM/FFX加密模式和CBC-MAC/CMAC消息认证码算法 组合公钥(CPK)身份密码,可同时支持椭圆曲线国际标准算法和国密标准算法 国密动态口令密码规范

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

南笙酒味 提交于 2020-02-29 05:37:55
一、椭圆曲线的基本概念 简单的说椭圆曲线并不是椭圆,之所以称为椭圆曲线是因为他们是用三次方程来表示,并且该方程与计算椭圆周长的方程相似。 对密码学比较有意义的是基于素数域GF(p)和基于二进制域(GF(2^m))上的椭圆曲线。 下面重点介绍基于GF(p)上的椭圆曲线: y^2 º x^3 + a*x + b(modp) 其中p是素数,a和b满足:4a^3 + 27b^2 (mod p) ¹ 0 满足上述方程的整数对(x, y), 就叫椭圆曲线上的点。 素数域 : 其实域就是一个集合,在其上面进行加,减,乘,除运算而封闭。比如有理数集合,实数集合,复数集合,这些都是无限域,在密码学中没有什么实际意义,所以考虑与整数有关的域,对密码学有实际意义。 研究最多的就是素数域GF(p)。我的理解就是一个素数p,在集合[0…p-1]上定义一个模加,一个模乘,就构成了一个有限素数域,比如取p = 5,定义如下模加, 模乘: 模加 + 0 1 2 3 4 0 0 1 2 3 4 1 1 2 3 4 0 2 2 3 4 0 1 3 3 4 0 1 2 4 4 0 1 2 3 模乘 + 0 1 2 3 4 0 0 0 0 0 0 1 0 1 2 3 4 2 0 2 4 1 3 3 0 3 1 4 2 4 0 4 3 2 1 下面以连续的椭圆曲线为例介绍一下椭圆曲线上 的点的运算规则

国密算法实现

天大地大妈咪最大 提交于 2020-02-29 04:56:53
国密算法实现 一、国产密码算法介绍 国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,在金融领域目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。 1.SM2算法:SM2 椭圆曲线公钥密码算法 是我国自主设计的 公钥密码算法 ,包括SM2-1椭圆曲线 数字签名 算法,SM2-2椭圆曲线 密钥交换 协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。 椭圆曲线参数并没有给出推荐的曲线,曲线参数的产生需要利用一定的算法产生。但在实际使用中,国密局推荐使用素数域256 位椭圆曲线,其曲线方程为y^2= x^3+ax+b(其中p是大于3的一个大素数,n是基点G的阶,Gx、Gy 分别是基点G的x与y值,a、b是随圆曲线方程y^2= x^3+ax+b的系数)。 2.SM3算法:SM3 杂凑算法 是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA

国密算法

我是研究僧i 提交于 2020-02-29 04:55:51
算法分类 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。 SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。 SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。 SM2算法 SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高 学习sm2算法,首先学习ECC算法 ECC算法描述:   1、用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。   2、用户A选择一个私有密钥k

走进基础数学—一位学霸的心路历程

巧了我就是萌 提交于 2020-02-21 02:54:30
作者 | 何通木 来源 | 知乎 大家好,我是来自清华大学数学系的准大四学生何通木。学了三年现代数学,我想把自己的一些感悟记录下来。回头看这三年,觉得走了很多弯路、做了很多意义不大的事情,想来是跟学长、老师们的深层次沟通少了,所以想用剖析自己的经历、优缺点的方式,向大家展示一个天分普通的学生的本科学习历程,希望后来人能够更好地利用这三年时间。 对于不想从头看到尾的同学,可以根据目录挑选想看的部分,也可以只看第八节:修习顺序建议。以下观点仅为个人观点,欢迎大家讨论! 目录 一、指导思想 二、最基本的语言:数分、线代、抽代、拓扑、流形 三、启发性的直观:黎曼曲面、微分拓扑、微分几何 四、大一统的理论:代数拓扑、代数几何 五、辅助性的工具:同调代数、交换代数 六、数学的皇后:代数数论 七、准备丘赛 八、修习顺序建议 九、附录:课程大纲 一、指导思想:广度优先 为什么我是大三结束的时候来写这篇建议呢,因为到了大四大家已经要开始准备自己那一个小方向的毕业论文了,前三年才是基础数学的基础性学习阶段。老师们都说,在本科时候要多学点东西;丘成桐先生也经常说,数学家至少要精通两个方向,才有可能发现不同方向的联系,才能做出大成就。“发现不同学科的联系”是我逐渐领悟到的努力目标,其本质是更好地理解数学,同时也是把冗余的东西缩并起来,化归到自己原有的知识体系中。 所以这篇建议的(来源于我的)局限性在于

有趣的椭圆曲线加密

六眼飞鱼酱① 提交于 2020-02-14 04:11:06
一、概述 椭圆曲线加密算法依赖于椭圆曲线理论,后者理论涵盖的知识比较深广,而且涉及数论中比较深奥的问题。经过数学家几百年的研究积累,已经有很多重要的成果,一些很棘手的数学难题依赖椭圆曲线理论得以解决(比如费马大定理)。 本文涉及的椭圆曲线知识只是抽取与密码学相关的很小的一个角落,涉及到很浅的理论的知识,同时也是一点比较肤浅的总结和认识,重点是利用椭圆曲线结合数学技巧阐述加密算法的过程和原理。 本文特意构造有比较多的实例方便理解其过程和原理。 二、椭圆曲线 椭圆曲线方程来源于椭圆积分,后者来最初来源于计算椭圆周长的问题,有一段时间的历史了,在欧拉时期就开始研究。椭圆周长没有精确的初等函数的公式表示,只有近似的公式表示,精确的椭圆周长可以用不定积分表示。 现在一般将形如如下形式的积分定义为椭圆积分: $f(x)=\int_{c}^{x}R\left [ t,\sqrt{P(t)} \right ]d_{t}$ 其中$R$是其两个参数的有理函数,$P$是一个无重根的3或4阶多项式,而$c$是一个常数。椭圆曲线方程与$P(t)$表现形式比较相像。 数学上的椭圆曲线一般由如下形式给出: $E:y^{2}=x^{3}+ax^{2}+bx+c$,其中判别式$\Delta (E)=-4a^{3}c+a^{2}b^{2}-4b^{3}-27c^{2}+18abc\neq 0$

有关Bitcoin的椭圆曲线-secp256k1

痞子三分冷 提交于 2020-02-12 00:28:59
简介 椭圆曲线加密法是一种基于离散对数问题的非对称(或公钥) 加密法, 可以用对椭圆曲线上的点进行加法或乘法运算来表达。在Bitcoin中使用的是secp256k1这条椭圆曲线 椭圆曲线 y 2 mod p = x 2 +ax+b mod p a、b满足:4a 3 +27b 2 mod p!=0 这保证了x 3 +ax+b不包含重复的因子,所以该曲线就可用于生成一个群组 在一个有限域Fp,素数阶p的有限域内 p=2 256 -2 32 -2 9 -2 8 -2 7 -2 6 -2 4 -1 椭圆曲线上的加法 P3=P1+P2 计算方法:P1和P2之间画一条线,恰好与椭圆曲线上的一点相交,记此点为:P3’=(x,y),然后再x轴做映射的:P3=(x,-y) 特殊的情况 P1与P2为同一点,P1和P2之间的连线为P1的切线,曲线上有且只有一个新的点与该切线相交 P1和P2具有相同的x值,但不同的y值,则切线会垂直,这种情况下,P3=“无穷远点” 若一点是无穷远点,则与其相加不变,无穷远点类比0处理 secp256k1 y 2 =x 3 +ax+b,其中a=0且b=7,就是曲线secp256k1 G是生成元,n是G的素数阶 则任取k,Q=k*G,则k为私钥,Q为公钥 优点 占用很少的带宽和存储资源,秘钥的长度很短 让所有的用户都可以使用同样的操作完成域运算 小结

2016-2017-1 20155215 20155232 实验二 固件程序设计

China☆狼群 提交于 2020-02-02 00:09:02
实验二 固件程序设计 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 3. 提交破解程序中产生LIC的截图 4. 提交破解成功的截图 固件程序设计-2-LED 0. 注意不经老师允许不准烧写自己修改的代码 1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 3. 实验报告中分析代码 代码分析 主函数代码 : 系统初始化; SystemInit (); 判断按键,确认是否进行程序下载; if(0 == GPIO_GetVal(0)) { BtApiBack(0x55555555, 0xAAAAAAAA); } 设置 GPIO0 状态为上拉输出; GPIO_PuPdSel(0,0); // 设置 GPIO0 为上拉

浅谈区块链密码学

[亡魂溺海] 提交于 2020-01-29 04:00:12
浅谈区块链密码学 密码学起源 众所周知,密码学是数字加密货币实现去中心化信任的基础,目前广为流传的最早密码学的使用,要追溯到公元前58年凯撒大帝所使用的凯撒密码,凯撒在他的军事命令中,将每一个字母都进行了位移,以防止他的敌人在截获凯撒的军事命令之后,直接获取到他的真实情报。 时间来到1949年,既 香农 用比特(bit)量化了信息之后,又重磅发表了《保密系统的通信理论》一文,开辟了用信息论来研究密码学的新思路,这一发现将密码从艺术变成了科学。在 香农 的理论中,信息传输、处理、检测和接收的过程,与密码系统中的加密、解密、分析和破译的过程都可以用信息论的观点进行分析和研究。密码系统本质上也是一种传递信息的系统。 密码学分类 目前主流的密码学分类,主要包含两大块: 传统密码算法和抗量子攻击密码算法QRC(Quantum Resistant Cryptography)。传统密码算法包含经典公钥算法、散列函数、对称密码算法等,这类传统密码算法的共同点都是基于一个数字难题,即大素数因式分解/离散对数。简单来说,给定一个由2个大素数乘积得到的数字,你很难去猜测这个数字的因式分解如何求解,只能通过穷举,相反验证的话在O(1)的时间复杂度内就能得到。 由于这类算法的通病,在1994年,数学家彼得·秀尔发现了秀尔算法(Shor算法),它解决了如下题目: 给定一个整数N,找出他的质因数

信息安全与密码学博士:应该掌握的52个知识--(3)T50-- BLS配对签名方案

孤者浪人 提交于 2020-01-28 19:15:47
BLS配对签名方案 目录 方案概述 背景知识 数学公式 签名属性[2] 方案概述 BLS是Boneh–Lynn–Shacham的简称,他们3个人在2003年提出了一个签名方法,因此以他们的名字命名。该签名基于双线性对,是为了解决多次签名多次验签的低效而提出的多次签名方案。 1. 方案可以将多次签名聚合(Aggregation),只用一次签名验证即可![1] 2. 该签名方案是常用的短签名方案。[2] 方案用于多个成员的组的签名中。 背景知识 这个方案的签名生成用到了椭圆曲线群(Elliptic Curve Group)的概念,验签用到了双线性对(Bilingual Pairing)的内容。 双线性对 e: G X G -> G_T e表示一个非退化的可计算的双线性对。其中G, G_T是以素数r 为阶的群。g是群的生成元。 BLS的签名是椭圆曲线群中的元素。 CDH难题,间隙群(gap group) CDH难题,指 Computational Diffie-Hellman难题。对离散(离散很重要,通过mod实现)对数难题来说,等效于已知g,g^x和g^y计算g^(xy)。对椭圆曲线上的点乘运算,等效于已知aG,bG,G,求abG,其中G为基点. 间隙群,是指一个群,在这个群中,CDH问题是难解的,而DDH难题可以有效解决。(这一群的存在也说明,DDH的难度不超过CDH问题的难度)。