array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 椭圆曲线密码算术(ECC)原理 - 爱码网

引言
大多数使用公钥密码进行加密和数字签名的产品都使用的是RSA算法。为了保证RSA的安全性,**的位数一定会增加,这对使用RSA的应用有着很重的负担。
而椭圆曲线密码(elliptic curve cryptography)的出现代表:可以使用比RSA短的多的**得到相同的安全性,因此可以减少处理负荷。
但是ECC真的很难阐述,下面我简单整理一下基本原理,以求读者看后能有一个大概的了解就ok。

椭圆曲线方程
我们多多少少都学过一些椭圆的数学知识,但是其实椭圆曲线并不是椭圆,称为椭圆曲线知识因为它们与计算椭圆周长的方程相似,也是用3次方程2个变量来表示的,可以简单表示为
椭圆曲线密码算术(ECC)原理
椭圆曲线的定义中还包含一个称为无穷远点或者零点的元素,极为O,我们先不讨论这个。
从这个方程中我们可以知道一点:椭圆曲线关于x轴对称,这很重要。
这条曲线大概是这样子的:
椭圆曲线密码算术(ECC)原理
椭圆曲线密码算术(ECC)原理
同时,在上图中还要说明的很重要的一点是P+Q= -R,可以这么理解:这条曲线上的所有点构成了一个Abel群,群的性质中有一条,任意两点之和还在这个这个群里面,在曲线图形上的体现就是,任意两点的连线与曲线的另一个交点的镜像是这两个点的和。(先记住,后面都是围绕这一点推导的)
此时可以利用斜率和某些代数运算计算出r的坐标
椭圆曲线密码算术(ECC)原理
λ是P和Q的斜率
举一个例子:
椭圆曲线密码算术(ECC)原理
这样来看是不是就很容易理解了呢?
ok,那么继续,我们从椭圆曲线开始向密码延伸,密码应用中我们只简单将一个素曲线
素曲线的形式可以简单理解为在椭圆方程的两边同时取模mod p,然后再找符合条件的点
例如这是一个取模11例子
椭圆曲线密码算术(ECC)原理
那么根据上面Abel群的性质,取模后同样是一个群,所以符合椭圆曲线密码算术(ECC)原理
的k个点的和同样也满足这个方程,这是椭圆密码的前提。
例如,这个方程上的点两个(2,7)相加
椭圆曲线密码算术(ECC)原理
得到的点是(5,2),同样满足方程。
进一步,我们一直累加这个点,就可以逐渐得到所有满足方程的点
椭圆曲线密码算术(ECC)原理
那么最后我们就进入到椭圆曲线密码学了
我们将ECC中的加法运算与RSA中的模乘运算对应,将ECC中的乘法运算与RSA的模幂运算对应,要建立基于椭圆曲线的密码体制,需要类似因子分解两个素数之积或求离散对数这样的难题。
考虑方程Q=kP,其中Q,P给给定曲线上的点,对给定的k,P计算Q比较容易,而对给定的Q和P计算k则比较困难,这就是椭圆密码的形成机制。实际应用中k的值非常大,从而使穷举攻击方法不可行
下面举例与椭圆曲线形成的私钥和公钥

用椭圆曲线面貌实现Diffie-Hellman的交换
两个用户A和B
(1)选择Eq(a,b)(素曲线方程)和一个基点G(x,y)(阶为n),这两个是全局公开量
(2)用户A闲杂一个小于n的整数n1作为私钥,然后产生公钥p1=n1G;改公钥是E中的一个点
(3)用户B可累死的选择私钥n2并计算公钥p2
(4)A产生秘**K=n1
p2,B产生秘密要K=n2*p1
容易证明,两个人的K是相同的
要破译这种体制,攻击者必须由G和kG计算k,这被认为是非常难的

椭圆曲线加解密
(1)将要发送的明文信息编码为形式(x,y)的点Pm,具体编码过程这里不讲了。。。
(2)每个用户A选择一个私钥n1,产生公钥p1=n1*G
(3)若A要将消息Pm加密后发送给B,则A随机选择1个正整数k,并产生密文Cm,该密文是一个点对
Cm={kG,Pm+kp2}
p2是B的公钥,B要对密文进行解密,则需要用第二个点减去第一个点与B的私钥之积
Pm+kp2-n2(kG)=Pm
例:
椭圆曲线密码算术(ECC)原理
椭圆曲线密码算术(ECC)原理
这一段 我知道很难理解,所以需要多看几遍还能慢慢有所体会。

相关文章: