当前位置:文档之家› 椭圆曲线加密分析:FLEXLM ECC问答

椭圆曲线加密分析:FLEXLM ECC问答

椭圆曲线加密分析:FLEXLM ECC问答
椭圆曲线加密分析:FLEXLM ECC问答

标题:【原创】椭圆曲线加密分析:FLEXLM ECC问答[7月16日更新到第7部分]

作者:readyu

时间: 2012-06-25,19:00:18

链接: https://www.doczj.com/doc/4d9734692.html,/showthread.php?t=152615

说明:

我曾经写过ECCTool用于学习和研究椭圆曲线加密在软件上的应用。

椭圆曲线密码学工具 ECCTooL v1.04

原帖年代久远不再更新。v1.05版本我放在本帖3#。

FLexLM ECC是椭圆曲线签名的一个典型应用,不可不察。

我整理了一下FLEXLM ECC方面的研究心得,准备把它完全写出来。

后面会有算法描述的例子代码。

FLEXLM ECC问答 (1)

readyu 2012.6

1. FLEXLM是个虾米东西?

FLEXlm是应用广泛的License管理工具。宣称数千家EDA工具采用它管理授权。

FLEXlm对厂商来说,它的优点是证书管理功能强大,支持平台众多。

对最终用户来说,它的缺点是不够友好,比如Windows下,经常由于某些原因,flexlm服务启动错误。对于破解者来说,它有着为数众多的教本。维基百科上的条目为:https://www.doczj.com/doc/4d9734692.html,/wiki/FLEXlm

FLEXLM本来属于GLOBEtrotter。Macrovision曾经收购GLOBEtrotter。

2006年的时候,FLEXLM原来的开发组跑路,另起灶头,产品叫RLM。

https://www.doczj.com/doc/4d9734692.html,/index.php

2008年Macrovision把FLEXLM卖了。现在叫FlexNet Publisher。

https://www.doczj.com/doc/4d9734692.html,/products/flexnet-publisher.htm

2. FLexLM 的ECC(椭圆曲线加密)怎么来的?

早期的flexlm采用的常规加密,不安全,能被做出lic。这样的教程是很多的。

flexlm的安全性完全得不到保障,所以,自 v8(大约2001-2002)版本引入了公钥加密算法:椭圆曲线加密。从此,它一直是flexlm的金钟罩。包括v9(2003-) , v10(2004-) , v11(2007-), 到最新的版

本 v11.10 (2012) 。

FlexLm的ECC没有它自己的东西,完全采购自椭圆曲线加密系统的专利拥有者:Certicom公司。

换而言之, flexlm ecc是购买自certicom的一套代码,相当于在腐朽的木门上套一层黄金甲。

OK,从此它是不破金身了。

3. Certicom公司是何方神圣?

RSA和ECC是两大主流的公钥密码算法体系。相比RSA,ECC晚出生10多年,推广不如前者。

Certicom公司是ECC的主要商业支持者,它拥有多项专利。其地位可与RSA公司匹敌(RSA于2006年被

EMC公司收购)。

有一则消息说,2003年美国国家安全局(NSA)以2500万美元支付了Certicom的26项技术许可。

另外有一则消息, Certicom 2007年起诉索尼公司,要求其支付PS3,DVD播放器等涉及加密技术侵权的专利费用。

Certicom的创办人Scott Vanstone,是加拿大滑铁卢大学的数学系教授和皇家科学院院士。

以前是研究椭圆曲线加密的,后来创办Certicom公司,努力把ECC从数学界推广到工业界。

Scott写过一本《椭圆曲线密码学导论》,颇有名气。

4. FLEXLM 如何用的ECC?

说来话长。一句话说:FLexLM 在license验证上,主要用的ECDSA(椭圆曲线数字签名算法)。

具体的讲: flexlm针对ECDSA有一些自己定义的东西以抵抗破解。后面我会说到,这些自定义的

东西也不是那么牢固。

5. FLEXLM ECC的通用破解方法?

FLEXLM ECC的通用破解方法就是:

完全按照它的ECDSA算法签名,只替换公钥和checksum,写一个keygen生成license。

从逻辑上讲,生成license的方法和原厂的完全一致。

具体该怎么做呢:

首先,实现标准的ECDSA签名算法。椭圆曲线的具体算法,可以用现成的miracl,cryptopp等加密库代码。只需要搞清楚ECDSA的使用方法就可以。

从早期版本 v9.2 (2004) , 到最新版本v11.10 (2012) 。它的ecc公钥都是有checksum的。

替换公钥,首先得搞清楚checksum。它只有一个函数,不算复杂,后面我会给出代码。

计算这个checksum,对所有版本都是适合的。

其次,公钥在文件里是加密打散的,有大量垃圾代码。这些干扰使得flexlm可读性很差。获取公钥需要调试。在我写SlickEdit的patch keygen,我曾经采用调试的方法,非常不方便。

那么,有没有更方便的方法获取公钥呢?

ECC验证代码在它执行过程中有其自身的特点。正如游戏辅助工具可以搜索血量,我们也可以写一个辅助工具从内存中获取公钥。

在很多次研究之后,我找出一个通用的方法。不需要再拘泥于具体的代码,可以dump出公钥,然后用ecctool生成自己的公私钥对,替换公钥,然后可以就写keygen。

由此写了一个工具,对windows平台可直接操作。对其它平台,把内存镜像出来操作即可。

对于非Windows平台,可以在VMware里面操作,制作一份snapshot,得到内存镜像。

算法上经过多次优化和排除错误数据,从2GB的内存镜像里找出正确的公钥,平均只需要6秒钟。

我对它的性能非常满意了。总算是磨刀不误砍柴工。

所以,对于纯粹采用flexlm ecc sign的license,是可以做出通用的patch_keygen的,

不需要去考虑它有没有反调试,也不用管具体的细节。

只要dump 公钥,替换公钥和checksum,写patch_keygen就可以了。

6. 研究flexlm主要需要哪些资料?

flexlm相对来说资源丰富,基本上每个版本的sdk都有泄漏。

如果想深入研究flexlm的加密算法,flexlm sdk是必需的。

写kg是必须要读sdk的,值得注意的是v9.2 sdk sourcecode泄漏。这个网上可搜索到。

sdk有一部分是c代码,里面最有用的是l_prikey.c,这里有ECDSA验证的函数。

这个文件的尾部有300行comments,其中有一封email很值得一读。

ECC核心库没有源文件,只有lib文件。

在certicom目录下的lib里面,主要为libsb.lib等(Certicom 的加密库:Security Builder)。

lib是混淆过了的,但是不影响ida反编译,只是不便于做sig文件。

主要依靠人脑识别函数,需要经验和时间。

7. flexlm的key加密强度有哪些?

以flexlm sdk v9为例,用宏定义表示LM_SIGN_LEVEL。

#define LM_SIGN2 2 /* SIGN2= */

#define LM_SIGN 1 /* SIGN= the default */

#define LM_NO_SIGN 0 /* license key */

v9以后,默认就采用ECC PUBKEY加密。SIGN支持ECC,所以大部分情况下用SIGN比较多,有些用SIGN2。LM_NO_SIGN 是传统的license key,强度最弱,不建议使用。

ECC PUBKEY 只有3种类别, 113, 163, 239 bits。

对应的sign长度(字符数) , 字节为( bits + 7 )/8 字节数 , 打印出来,

用hex digits表示,ECC的SIGN长度分别是一对 30,42,60 [0-9,A-F]。

采用ECC的,pubkey_strength 必须定义为下面的一个类别,否则l_pubkey_verify会出错:LM_STRENGTH_113BIT,LM_STRENGTH_163BIT,LM_STRENGTH_239BIT。

#define LM_STRENGTH_LICENSE_KEY 0

#define LM_STRENGTH_DEFAULT 1

#define LM_STRENGTH_113BIT 2

#define LM_STRENGTH_163BIT 3

#define LM_STRENGTH_239BIT 4

#define LM_STRENGTH_PUBKEY LM_STRENGTH_113BIT

#define LM_STRENGTH_VERYHIGH LM_STRENGTH_239BIT

在l_pubkey_verify 有这么一段初始化代码,判断pubkey_strength。

代码:

下面,演示 113, 163, 239 bits的ECDSA签名一段最简单的文本,msg: "123"

sha hash:40BD001563085FC35165329EA1FF5C5ECBDBBEEF

#define LM_SEED1 0x47d381a0

#define LM_SEED2 0x4fadf97c

#define LM_SEED3 0xc4ae244c

l_genkeys: seed[3]=A081D3477CF9AD4F4C24AEC4

LM_PUBKEY_CURVE113BIT

prvlen=15, prv=00CFDF0247BF6EC0C8D1AA16DD505F

publen=16, pub=0301523DD4646BB65FE4238B8AB44D01

>> l_prikey_sign_dbg start >>

signing "123"

hash=40BD001563085FC35165329EA1FF5C5ECBDBBEEF

>> l_prikey_sign_dbg done >>

siglen=30

sig.r=0048D5DD2A57B1A1B357E98C193E63

sig.s=000A6FFDF76899F05ABFD2EDD9E065

LM_PUBKEY_CURVE163BIT

prvlen=21, prv=03DC603CB1683D43FF5631BBEEC5396D7BD4067300

publen=22, pub=0300368FE93082E1ACDD35222AD76782DBA8237B66EC

>> l_prikey_sign_dbg start >>

signing "123"

hash=40BD001563085FC35165329EA1FF5C5ECBDBBEEF

>> l_prikey_sign_dbg done >>

siglen=42

sig.r=039283F2FEA664BE7628F89BBA9D014E89E3868D2C

sig.s=017DA34A68C3FC64CB6EBE2B13676B04BE97EB5C20

LM_PUBKEY_CURVE239BIT

prvlen=30, prv=13C0E251A5130072A8D2D953EB2C94FAD487C0141B3197863BCC115D7B7E publen=31, pub=035875A53B693A2861837E08FC6A7C58529DF52B565111C3DF55F18E34C9FA >> l_prikey_sign_dbg start >>

signing "123"

hash=40BD001563085FC35165329EA1FF5C5ECBDBBEEF

>> l_prikey_sign_dbg done >>

inputlen=3, input=123

siglen=60

sig.r=1589FCFE91F988D28F7072DBF129424F0D71FA5E7AAC39258F3C408A656A

sig.s=0B50642E8ED77FC6A1E6F805CFA0299F44BC7B8035FE17142812B79EA576

sig.r sig.s组成一个完整的SIGN,输出lic的时候,为了可读性,一般切分为16 bit的分组(4个h ex char)。

比如:

sig.r=038B9BE995B887B2665C02940C00155DD557C278AC95EADC1BD668DF185B

sig.s=1C50F25E81044E4DD9AD072699AAB4A63F4C99249AC8C091F476A6C73682

转化为:

SIGN=“ 038B9BE995B887B2665C02940C00155DD557C278AC95EADC1BD668DF185B

1C50F25E81044E4DD9AD072699AAB4A63F4C99249AC8C091F476A6C73682”

或者:

SIGN="038B 9BE9 95B8 87B2 665C 0294 0C00 155D D557 C278 AC95 EADC 1BD6 68DF 185B 1C50 F25E 8 104 4E4D D9AD 0726 99AA B4A6 3F4C 9924 9AC8 C091 F476 A6C7 3682"

对flexlm的程序来说,是没有差别的。都能处理。

8. flexlm用到的椭圆曲线有哪些?

flexlm用到三条椭圆曲线,都是有来历的,名字分别为sect113r1, sect163k1, sect239k1。

具体参数可以参看:

https://www.doczj.com/doc/4d9734692.html,/wiki/SECG

SEC 2: Recommended Elliptic Curve Domain Parameters (Version 2.0)

在flexlm lib里面,它是写死的静态变量。位置在

certicom\libcrvs.lib

保存为3个结构体:

struct ellipticCurveParameters sect113r1 struct ellipticCurveParameters ec163a02 struct ellipticCurveParameters ec239a03

头文件在

erticom\i86_n3\include\curves.h

代码:

9. flexlm ecc ellipticCurveParameters 结构体中 checksum的怎么计算的?

ellipticCurveParameters 带有4字节checksum,

每次初始化ECC计算时,都会校验checksum。一方面为了避错,另一方面为了反对篡改。修改其中的公钥,必须重新计算checksum。

从libsb.lib里面分析反汇编代码,逆向为c代码,经测试无误的代码:

代码:

10. flexlm ecc三条椭圆曲线的参数?

flexlm 采用GF(2^m)椭圆曲线。这三条椭圆曲线,在openssl也有描述的。在certicom\libcrvs.lib是纯数据保存。

openssl描述:

代码:

flexlm sdk

\certicom\libcrvs.lib 内存dump, checksum只需要签名378 bytes的结构体。

为了调试和区分的方便,我在尾部增加了标志:

'E' 'C' '1' '1' , 'E' 'C' '1' '6' , 'E' 'C' '2 '3' ,分别表示ecc 113, 163, 239 bits。代码:

椭圆曲线密码总结大全

椭圆曲线密码 概述: 椭圆曲线密码学(ECC, Elliptic curve cryptography )是基于椭圆曲线数学的一种公钥密码的方法。1985年,Neal Koblitz 和Victor Miller 分别独立提出了椭圆曲线密码体制(ECC),其依据就是定义在椭圆曲线点群上的离散对数问题的难解性。 引言: ECC 被广泛认为是在给定密钥长度的情况下,最强大的非对称算法,因此在对带宽要求十分紧的连接中会十分有用。 ECC 的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA ——提供相当的或更高等级的安全。ECC 的另一个优势是可以定义群之间的双线性映射,基于Weil 对或是Tate 对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。 国家标准与技术局和ANSI X9已经设定了最小密钥长度的要求,RSA 和DSA 是1024位,ECC 是160位,相应的对称分组密码的密钥长度是80位。NIST 已经公布了一列推荐的椭圆曲线用来保护5个不同的对称密钥大小(80, 112, 128, 192, 256)。一般而言,二进制域上的ECC 需要的非对称密钥的大小是相应的对称密钥大小的两倍。 椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的困难性上,对应有限域上椭圆曲线的群。 引理及有关概念: (1) 无穷远元素(无穷远点,无穷远直线)平面上任意两相异直线的位置关系 有相交和平行两种。引入无穷远点,是两种不同关系统一。AB ⊥L1, L2∥L1,直线AP 由AB 起绕A 点依逆时针方向转动,P 为AP 与L1的交点,如图1。Q=∠BAP →π /2则AP → L2,可设想L1上有一点P ∞,它为L2和L1的交点,称之为无穷远点。直线L1上的无穷远点只能有一个(因为过A 点只能有一条平行于L1的直线L2,而两直线的交点只能有一个)。 图1 结论: 1. 平面上一组相互平行的直线,有公共的无穷远点(为与无穷远点相区别,把

文件加密与解密—Java课程设计报告

JAVA课程设计题目:文件的加密与解密 姓名: 学号: 班级: 日期:

目录 一、设计思路 (3) 二、具体实现 (3) 三、运行调试与分析讨论 (8) 四、设计体会与小结 (11) 五、参考文献 (12) 六、附录 (12)

一、设计思路 自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。 本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。 二、具体实现 本系统通过用户界面接收三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示: 文件加密与解密设计流程图

本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。包和类结构图如下所示: 本课程设计,包和类结构图: 以下为包中的类的方法实现说明 Package Shares类结构图

椭圆曲线加密算法

椭圆曲线加密算法 椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。 ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA 加密算法——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长 1.椭圆曲线 在数学上,椭圆曲线(英语:Elliptic curve,缩写为EC)为一代数曲线,被下列式子所定义 y2=x3+ax+b 其是无奇点的;亦即,其图形没有尖点或自相交。 满足此条件的a b满足:4a3+27b2≠0 图1 在基础上需要定义一个无穷远的点,将此点作为零点:此时椭圆曲线定义为:{(x,y)∈?2|y2=x3+ax+b,4a3+27b2≠0}∪{0} 在椭圆曲线中的群的运算律: 1. 所有的点都在椭圆曲线上 2. 0点作为群上的单元点即 P+0=P 3. P点关于X轴的对称点为P点的逆即 P+(?P)=0

4.对于位于同一条直线上的三个点P,Q,R.则有 P+Q+R=0 图2 P+Q+R=0(无限远点 P Q R三个点的位置是任意的,他们满足加法的结合律,因为这个群是一个阿贝尔群。 2.椭圆曲线加法 当P和Q不相等时(x P≠x Q) 由于是在阿贝尔群上可以将P+Q+R=0改写为P+Q=?R所以在椭圆曲线上的加法定义为P Q 两点加法为P,Q两点连线与曲线的交点R的关于X轴对称点?R 图2-3 P+Q=-R P Q两点的直线的斜率为: m=y P?y Q x P?x Q 这条线与曲线的交点为:R=(x R,y R) x R=m2?x P?x Q y R=y P+m(x R?x P) 因此(x P,y P)+(x Q,y Q)=(x R,?y R)如果在图上表示即为上述的P+Q=?R

RSA加密算法加密与解密过程解析

RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密。 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。 解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。 非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。 此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA 算法是1977年发明的,全称是RSA Public Key System,这个Public Key 就是指的公共密钥。 2.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q。 令k=?(n)=(p?1)(q?1),原理见4的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程 同样以一个字符串来进行举例,例如要对字符串the art of programming 进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。 1. 首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。 2. 对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。 3. 解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。 4. 根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。 4.RSA加密算法原理解析 下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。 欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。 首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。?(n)=总数(从1到n?1,与n互质整数) 比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2

AES算法加解密原理及安全性分析

AES算法加解密原理及安全性分析 刘帅卿 一、AES算法简介 AES算法是高级加密标准算法的简称,其英文名称为Advanced Encryption Standard。该加密标准的出现是因为随着对称密码的发展,以前使用的DES(Data Encryption Standard数据加密标准)算法由于密钥长度较小(56位),已经不适应当今数据加密安全性的要求,因此后来由Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。加之算法本身复杂的加密过程使得该算法成为数据加密领域的主流。 二、AES算法的基本概念 1、有限域(GF) 由于AES算法中的所有运算都是在有限域当中进行的,所以在理解和实现该算法之前先得打好有限域这一基石才行。通常的数学运算都是在实数域中进行,而AES算法则是在有限域中进行,我们可以将有限域看成是有确定边界范围的正整数集合,在该集合当中,任意两个元素之间的运算结果都仍然落在该集合当中,也即满足运算封闭性。 那么如何才能保证这样的“有限性”(也即封闭性)呢? GF(2w)被称之为伽罗华域,是有限域的典型代表。随着w(=4,8,16,…)的取值不同所形成的有限域范围也不同。AES算法中引入了GF域当中对数学运算的基本定义:将两数的加减法定义为两者的异或运算;将两数的乘法定义为多

椭圆曲线密码的C语言设计与实现

计算机研究生开放研究 《椭圆曲线密码的C语言设计与实现》 美国GeneChiu基金资助 基于TOM算法库的ECC加密算法的C语言设计与实现 研究生徐立均 内容: 一、源代码下载 二、ECC算法的设计思想 三、椭圆曲线参数的选取和基点的确定 四、椭圆曲线的点加和纯量乘法 五、加密文件的读入与输出 六、密文的存取和读入 七、ECC加密的实现

八、ECC解密的实现 九、测试结果及分析 一、源代码下载 本文使用了TOM算法库实现了椭圆曲线公钥密码体制,能对各类不同的磁盘文件进行加密和解密。 1 请下载可执行程序MY_ECC.exe,此程序无需任何额外的LIB或DLL,可在Windows下独立运行,运行情况如下:

2 请下载源代码source.rar: 编译此源代码需要使用TOM的高精度算法库 MathLib.lib 和相关的头文件 tommath.h tommath_class.h tommath_superclass.h 一并打包在source.rar中,请下载

3 对于TOM的高精度算法库的详细说明,请看本站C语言: 二、 ECC算法的设计思想 根据椭圆曲线进行加密通信的过程,首先选定一个适合加密的椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。选择一个私有密钥k,并生成公开密钥K=kG。加密时,将明文编码到Ep(a,b)上一点M,并产生一个随机整数r(r < n)。计算点C1=M+rK;C2=rG。将C1、C2存入密文。解密时,从密文中读出C1、C2,计算C1-kC2,根据:C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M, 解得的结果就是点M,即明文。 三、椭圆曲线参数的选取和基点的确定 并不是所有的椭圆曲线都适合加密,y^2=x^3+ax+b是一类可以用来加密的椭圆曲线,也是最为简单的一类。下面我们就选用 y^2=x^3+ax+b作为我们的加密曲线。这条曲线定义在Fp上:两个满足下列条件的小于p(p为素数)的非负整数a、b:4a3+27b2≠0 (mod p) 则满足下列方程的所有点(x,y),再加上无穷远点∞ ,构成一条椭圆曲线。y^2=x^3+ax+b(mod p) 其中 x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。

实验10 加密与解密算法的实现

加密与解密算法的实现 数据加密标准(DES)算法是一个分组加密算法。它以64位(8字节)为分组对数据加密,其中有8位(第8、16、24、32、40、48、56和64位)用作奇偶校验位,另外的56位为真正的密钥,保密性依赖于密钥,加密和解密过程使用同一个密钥。本实验通过编写一个DES算法加密/解密程序,介绍数据加密/解密原理和技术。 【实验目的】 1)理解加密与解密的基本思想。 2)掌握DES算法的程序设计流程。 3)编写DES加密与解密程序,加深对数据加密与解密的理解,提高网络安全的编程能力。 【实验设备及环境】 1)Windows XP操作系统。 2)VC++ 6.0 编译环境。 【实验任务及内容】 1.DES算法流程 (1)加密程序设计 DES算法的加密过程如图9-10-1所示。 图9-10-1 DES加密算法流程图 设初始置换为IP,运算函数为f,16个子密钥为K i ,则DES加密过程表示如下: L 0R =IP(明文)L R R i R i-1 K i L i =R i-1 ,R i =L i-1 ⊕f(R i-1 ,K i ),其中,i =1,2,…,16 密文=IP-1(R 16L 16) (2)解密程序设计 DES解密和加密使用相同的算法,唯一不同的是密钥次序相反,即只需要把16个密钥的顺序倒过来。DES解密过程可用符号表示如下: R 16L 16 =IP(密文) R i-1=L i ,L i-1 = R i ⊕f(R i-1 ,K i ),其中,i =1,2,…,64 明文=IP-1(R0L0) 2.DES类设计 定义一个名为SDES的类,用以实现标准的DES加解密算法。SDES类定义位于SDES.h 文件中,代码如下: enum {ENCRYPT,DECRYPT};

文件的加密与解密算法

using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace BS.Utility { public class MySecurity { #region 构造函数 public MySecurity() { } #endregion #region ( 0 )Rijndael算法 private SymmetricAlgorithm mobjCryptoService= new RijndaelManaged(); private static string Key= "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ $lhj!y6&(*jkP87jH7 "; ///

/// 获得密钥 /// /// 密钥 private byte[] GetLegalKey() { string sTemp = Key; mobjCryptoService.GenerateKey(); byte[] bytTemp = mobjCryptoService.Key; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) sTemp = sTemp.Substring(0, KeyLength); else if (sTemp.Length < KeyLength) sTemp = sTemp.PadRight(KeyLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// /// 获得初始向量IV /// /// 初试向量IV

椭圆曲线密码ECC

旺旺:旺我旺:能我过能软过软考考

主要内容
? ??公钥密码使用的几个单向性很好的函数 ? ??ElGamal密码回顾 ? ??椭圆曲线概述 ? ??椭圆曲线及解点 ? ??椭圆曲线的几何意义 ? ??椭圆曲线的解点等计算 ? ??椭圆曲线密码体制 ? ??利用椭圆曲线密码加解密实例
旺旺:我能过软考

公钥密码使用的几个单向性很好的函数
版权所有:我能过软考
1)大合数的因子分解问题: 大素数的乘积容易计算,如(p*q=n),而大合数 的因子分解困难(n推出p和q) 代表:RSA密码
2)有限域上的离散对数问题: 有限域上大素数的幂乘容易计算(ab
对数计算困难(logac b) 乘法群: ElGamal密码
加法群:ECC密码
c),而
3 旺旺:我能过软考

ElGamal密码回顾
版权所有:我能过软考
ElGamal密码是建立在有限域GF(p)之上,其中p是一个大素数, 选取有限域GF(p)的一个本原元α ,并将GF(p)和α公开。
注意:p是大素数,且p-1有大素数因子。
1、密钥生成 用户随机选取一个整数d: 1≤d ≤p-2,并计算出 y= αd mod p
将y作为公开的加密密钥,将d作为保密的解密密钥。
由公钥y求出私钥d,必须求解离散对数,非常困难
4 旺旺:我能过软考

椭圆曲线概述
版权所有:我能过软考
? 受ELGamall密码启发,在其它离散对数问题难解的群中,同样可以构成ELGamal 密码
? 有限域GF(p)上的椭圆曲线的解点构成交换群,而且离散对数问题是难解的,于是 可在此群上建立ELGamal密码,并称为椭圆曲线密码
? 它密钥短、签名短、软件实现规模小、硬件实现电路省电。
? 应用:基于智能卡的多种应用,如电子商务中的数字签名与认证,移动通讯中的安 全保密等方面
? 普遍认为160位长的椭圆曲线密码的安全性相当于1024位的RSA密码,而且运算速 度也较快。
6 旺旺:我能过软考

凯撒密码的加密和解密

关于凯撒密码的实现原理 班级:姓名:学号:指导老师: 一、设计要求说明 1、设计一个凯撒密码的加密和解密的程序,要求输入一段字符和密码,输出相应的密文,完成加密过程; 若输入被加密的密文及解密密钥,能还原出原文,完成解密。 2、语言不限,工具不限,独立完成,参加答辩。 3、严格按照格式的要求完成文档,在第六部分的运行结果分析中,要求抓图说明。 二、基础知识介绍 凯撒密码的历史 凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种“密表”给他的朋友写信。这里所说的密表,在密码学上称为“凯撒密表”。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那26个拉丁字母。因此,凯撒密表就是用d代a,用e代b,……,用z代w。这些代替规则也可用一张表格来表示,所以叫“密表”。 基本原理 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。 凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:c≡m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为: m≡c+k mod n (其中n为基本字符个数) 对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。 加密解密算法 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3): 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC 使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ 恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为: E (x)= (x+n) mod 2 解密就是: D (x)= (x-n) mod 2

国产密码算法及应用

国产密码算法及应用 商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。 商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如各种安全认证、网上银行、数字签名等。 为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法等等。其中SSF33、SM1、SM4、SM7、祖冲之密码 是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。 目前已经公布算法文本的包括SM2椭圆曲线公钥密码算法、SM3密码杂凑算法、SM4分组密码算法等。 一、国密算法简介 1.SM1对称密码 国密SM1算法是由国家密码管理局编制的一种商用密码分组标准对称算法,分组长度为128位,密钥长度都为128比特,算法安全

保密强度及相关软硬件实现性能与AES相当,算法不公开,仅以IP 核的形式存在于芯片中。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。 2.SM2椭圆曲线公钥密码算法 SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。国密SM2算法标准包括4个部分,第1部分为总则,主要介绍了ECC基本的算法描述,包括素数域和二元扩域两种算法描述,第2部分为数字签名算法,这个算法不同于ECDSA算法,其计算量大,也比ECDSA复杂些,也许这样会更安全吧,第3部分为密钥交换协议,与ECDH功能相同,但复杂性高,计算量加大,第4部分为公钥加密算法,使用ECC公钥进行加密和ECC私钥进行加密算法,其实现上是在ECDH上分散出流密钥,之后与明文或者是密文进行异或运算,并没有采用第3部分的密钥交换协议产生的密钥。对于SM2算法的总体感觉,应该是国家发明,其计算上比国际上公布的ECC算法复杂,相对来说算法速度可能慢,但可能是更安全一点。 设需要发送的消息为比特串M,len为M的比特长度。为了对明文M进行加密,作为加密者的用户应实现以下运算步骤: 步骤1:用随机数发生器产生随机数k∈[1,n -1];

加密解密算法的C++实现

网络与信息安全Introduction to Network and Security ——DES 加密解密算法的C++实现 2011年10月

目录 一、DES算法的概述 (2) 1、DES简介 (2) 2、DES算法原理 (2) 3、DES算法简述 (3) 3.1算法过程的具体分析 (4) 3.2 具体示例分析 (7) 二、DES算法的C++实现 (8) 1、运行环境 (8) 2、功能说明 (8) 3、程序函数说明 (8) 4、程序运行效果图 (19) 三、小结 (21)

一、DES算法的概述 1、DES简介 DES是Data Encryption Standard(数据加密标准)的缩写。1974年,IBM 向NBS提交了由Tuchman博士领导的小组设计并经改造的Luciffer算法。NSA (美国国家安全局)组织专家对该算法进行了鉴定,使其成为DES的基础。 1975年NBS公布了这个算法,并说明要以它作为联邦信息加密标准,征求各方意见。1976年,DES被采纳作为联邦标准,并授权在非机密的政府通信中使用。DES在银行,金融界崭露头角,随后得到广泛应用。 几十年过去了,虽然DES已不再作为数据加密标准,但它仍然值得研究和学习。首先三重算法仍在Internet中广泛使用,如PGP和S/MIME中都使用了三重DES作为加密算法。其次,DES是历史上最为成功的一种分组密码算法,它的使用时间之长,范围之大,是其它分组密码算法不能企及的,而DES的成功则归因于其精巧的设计和结构。 2、DES算法原理 DES是一个对称分组密码,它使用56位密钥操作64位分组。DES以64位分组形式加密数据。算法的输入是64位分组的明文,算法的输出是64位分组的密文,明文到密文经过了16轮一致的运算。通过剔除8个奇偶校验位,即忽略给定64位密钥中的每一个第8位,从而得到密钥长度为56位。 与其他分组加密方案一样,加密函数使用了两个输入:要被加密的64位明文和56位密钥。DES的基本构建是对明文分组的进行置换和替换的适宜组合(16次)。通过S-盒查表完成替换。除了以相反次序处理密钥次序表之外,加密和解密使用了相同的算法。 明文分组X组首先按初始置换IP表进行置换,得到Xo=IP(X)=(Lo,Ro)。经过16轮的置换、XOR和替换之后,反向置换IP^-1生成密文分组。如果使用Xi=(Li,Ri)表示第i轮加密结果,那么有: DES2-1所示。从加密公式中能够导出如下的解密过程: ⊕f(Li,Ki)

加密及解密算法(利用C语言)

利用VC++6.0 C语言进行设计加密: #include "stdio.h" #include"string.h" void main() { int i,k,h; char g[26]; printf("请输入字符窜\n"); gets(g); k=strlen(g); do{ for(i=0;i='a'&&g[i]<='z') g[i]-=32; for(i=0;i='A') g[i]+=3; else if(g[i]>'W'&&g[i]<='Z') g[i]-=23; } printf("%s\n",g); printf("0-退出任意键继续\n"); scanf("%d",&h); } while(h); } 2.进行解密算法 #include "stdio.h" #include"string.h" void main() { int i,k,h; char g[26]; printf("请输入字符窜\n");

gets(g); k=strlen(g); do{ for(i=0;i='d'&&g[i]<='z') g[i]-=3; else if(g[i]>'d'&&g[i]<='a') g[i]+=23; for(i=0;i='D'&&g[i]<='Z') g[i]-=3; else if(g[i]>'D'&&g[i]<='A') g[i]+=23; printf("%s\n",g); printf("0-退出任意键继续\n"); scanf("%d",&h); } while(h); }

(完整版)教科版高一信息技术必修1第三单元3.4加密和解密教学设计

3.4 加密与解密 本节内容按2课时设计。 第一课时 教学重难点 【教学重点】会分析生活中由密码引起的数据安全问题,理解对数据进行保护的意义。 【教学难点】用穷举法破解密码。 【教学过程】 一、引入 1.学生预习,阅读第77页“任务一解开网站账号被盗之谜”之“活动1 防范‘盗窃’行为”,填写第78页的表3.4.1。 2.教师检查,并评讲填写情况,引出数据安全、密码的话题。 表3.4.1 密码盗窃与防盗分析表 二、密码 密码是指用来核对用户ID以验证用户就是本人的一组字符。 活动2设置安全密码 打开教科书配套资源中的“数据安全性测试.py”,运行并测试穷举搜索一个5位、7位和9位的数字密码,分别需要多长时间,填写表3.4.2。(详见配套资源“数据安全性测试(有界面).fld”和“数据安全性测试(有界面).py”) 表3.4.2 穷举搜索密码需要的时间

实现穷举搜索的自定义函数jiemi()的程序代码如下: def jiemi(): d1=datetime.datetime.now() #获取当前系统时间d1 p=int(varin.get()) #获取输入文本框的数字密码 for i in range(0,p+1): #从0循环到正确密码数值 if i==p: #如果密码相同 d2=datetime.datetime.now() #获取当前系统时间d2 d=d2-d1 #取得时间差 #在输出文本框中显示解密用时 varout.set(str(d.seconds)+"秒"+str(d.microseconds/1000)+"毫秒") 程序运行效果如下: 【比一比】当然,我们也可以编写无可视化界面的程序,程序更简单。(详见配套资源“数据安全性测试(无界面).py”) 程序运行效果如下: 请比较有可视化界面与无可视化界面两个程序运算的快慢,将最快的结果填入表3.4.2。 【算一算】 你的电脑1秒最多能试探大约多少个整数密码? 【做一做】 1.有可视化界面程序中的jiemi()函数中的for循环改为while条件循环:

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 FFFFFFFF a = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC b = 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93 n = 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

椭圆曲线加密算法代码

椭圆曲线加密算法代码及解析

在椭圆曲线加密中,利用了某种特殊形式的椭圆曲线,即定义在有限域上的椭圆曲线。其方程如下: y2=x3+ax+b(mod p) 这里p是素数,a和b为两个小于p的非负整数,它们满足: 4a3+27b2(mod p)≠0 其中,x,y,a,b ∈Fp,则满足式(2)的点(x,y)和一个无穷点O就组成了椭圆曲线E。 椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对 Q=kP,在已知P,Q的情况下求出小于p的正整数k。 现在我们描述一个利用椭圆曲线进行加密通信的过程: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 2、用户A选择一个私有密钥k,并生成公开密钥K=kG。 3、用户A将Ep(a,b)和点K,G传给用户B。 4、用户B接到信息后,将待传输的明文编码到Ep(a,b)上一点M(将M转化为十进制整数m,然后令椭圆曲线中点的横坐标为m,根据曲线方程计算出纵坐标,便得到了一个点。),并产生一个随机整数r(r using namespace std; //求两数的最小公倍数 int f1(int a, int b) { int c=a; while( c%a!=0 || c%b!=0) c++;

(完整版)教科版高一信息技术必修1第三单元3.4加密和解密教学设计

3.4 加密与解密 本节内容按2 课时设计。 第一课时 教学重难点 【教学重点】会分析生活中由密码引起的数据安全问题,理解对数据进行保护的意义。 【教学难点】用穷举法破解密码。 【教学过程】 一、引入 1. 学生预习,阅读第77 页“任务一解开网站账号被盗之谜”之“活动1 防范‘盗窃'行为”,填写第78 页的表3.4.1 。 2. 教师检查,并评讲填写情况,引出数据安全、密码的话题。 3.4.1 二、密码 密码是指用来核对用户ID以验证用户就是本人的一组字符。 活动2设置安全密码 打开教科书配套资源中的“数据安全性测试.py ”,运行并测试穷举搜索一个5 位、7位和9位的数字密码,分别需要多长时间,填写表3.4.2 。(详见配套资源“数据安全性测试(有界面).fld ”和“数据安全性测试(有界面).py ”) 表3.4.2 穷举搜索密码需要的时间

# 在输出文本框中显示解密用时 varout.set(str(d.seconds)+" 秒"+str(d.microseconds/1000)+" 毫秒") 程序运行效果如下: 【比一比】当然,我们也可以编写无可视化界面的程序,程序更简单 配套资源“数据安全性测试(无界面).py ”) 程序运行效果如下: 请比较有可视化界面与无可视化界面两个程序运算的快慢,将最快的结果填入表3.4.2 。 你的电脑1秒最多能试探大约多少个整数密码? 【做一做】 1. 有可视化界面程序中的jiemi() 函数中的for 循环改为while 条件循环: 实现穷举搜索的自定义函数 jiemi() def jiemi(): d1=datetime.datetime.now() # p=int(varin.get()) # for i in range(0,p+1): # if i==p: # d2=datetime.datetime.no w() d=d2-d1 # 的程序代码如下: 获取当前系统时间d1 获取输 入文本框的数字密码从0循环 到正确密码数值如果密码相同 # 获取当前系统时间d2 取得时间差 详见

椭圆曲线加密算法

ECC算法的应用 1 数据加密/解密 ECC(Elliptic Curves Cryptography)加密算法是一种公钥加密算法,与主流的RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度。ECC 加密算法允许用户选择具有唯一性的身份标识(如Email地址或网络帐号)作为公钥,并通过可信的中央服务器接受到自己的私钥,在安全通信过程不采用数字证书的概念,而直接将安全方案与加密或验证方法联系起来。

图1 加解密过程 ECC加密算法的计算量小并且处理速度快。在一定的相同的计算资源条件下,虽然在RSA中可以通过选取较小的公钥(可以小到3)的方法提高公钥处理速度,即提高加密和签名验证的速度,使其在加密和签名验证速度上与ECC有可比性,但在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多。同时ECC系统的密钥生成速度比RSA快百倍以上,以163位的ECC加密算法与1024位的RSA加密算法比较,ECC加密算法的签名时间为3.0ms,密钥对生成时间为3.8ms,但RSA加密算法却分别高达228.4ms和4708.3ms,因此在相同条件下,ECC加密算法则有更高的加密性能。 2数字签名 由于ECC加密算法是建立在公钥加密体系基础上的,所以它不但可以应用于通信加密,而且还可以应用于数字签名领域。 ECC加密算法的带宽要求低,当对长消息进行加解密时,两类密码系统有相同的带宽要求,但应用于短消息时ECC加密算法带宽要求却低得多,而数字签名正是基于短消息的通讯传输,因此基于ECC加密算法的数字签名系统带宽要求比RSA低很多,易于在各种网络环境下推广应用。 3ECC在银行系统中的应用 ECC在我国的产业化正处于起步阶段,我国的商用密码管理政策规定商用核心密码算法和技术必须采用国内自主研究的成果而不得采用国外的,我国应当开发和应用属于自己的商用ECC技术和产品。 ECC加密算法在银行系统可应用于数据加密传输及身份认证。

椭圆曲线密码(ECC)加解密算法的实现

毕业论文 论文题目椭圆曲线密码(ECC)加解密算法的实现学生姓名 学号 院别数学与信息科学学院 专业信息与计算科学 班级 指导教师 完成时间2011 年04 月

椭圆曲线密码(ECC )加解密算法的实现 摘 要 本文首先介绍椭圆曲线密码体制(ECC);并简明地给出了椭圆曲线的定义;接 着以ElGamal 公钥体制的ECC 加解密的实现为例具体说明了其实现流程;最后分析了实 现结果,安全性能和概述了ECC 的发展现状,并对其未来的发展作了展望. 关键词 椭圆曲线密码;公钥密码,数字签名 1引言 随着政府部门和行业对网络环境和网络资源依赖程度的增强,涉及国家安全和社会公共安全的所有重大问题都在网络上表现出来. 为了确保信息的保密性,完整性,可用性,可控性,避免国家或个人的信息受到非法获取,破坏,篡改等形式的威胁,人们便提出了用密码技术来保障以电子形式保存或传送的数据. 1985年,N. Koblitz 和V . Miller 分别独立提出了椭圆曲线密码体制 (ECC),这是一种高安全性,高效率的公钥密码体系,它在密钥强度,加解密的处理速度和存储开销上都有着明显的优势. 采用椭圆曲线密码技术使密钥协商协议可充分利用椭圆曲线密码的优势,在更小密钥量下提供了更大的安全性,所需带宽明显减少,而且还大大降低了用户端的计算负担和存储要求. 2椭圆曲线密码体制 2.1密码体制的含义 密码体制分为对称密码体制和非对称密码体制.非对称密码体制是指在加密过程中,密钥被分为一对.这对密钥中的任何一个密钥都可以作为公开密钥通过非保密方式向他人公开, 而另一把作为私有密钥加以保存. 这对密钥具有这样一个特点: 当知道密钥对中的一个密钥时, 要检测出另一个密钥, 在计算上是不可能的. 公开密钥用来对信息进行加密, 则私有密钥用来对信息进行解密, 反之亦然. 在这个系统中, 每个通信实体都有一个加密密钥和一个紧密相关的解密密钥.通信的双方只要知道对方的公钥,就可以进行安全的通信. 2.2 椭圆曲线密码体制 椭圆曲线密码体制,即基于椭圆曲线离散对数问题的各种公钥密码体制. 最早由Miller 和Koblitz [1] 于1985年分别独立地提出. 它是利用有限域上椭圆曲线的有限点群代替基于离散对数问题密码体制中的有限循环群所得到的一类密码体制. 对于椭圆曲线密码系统(ECC )的安全性,其数学基础是计算椭圆曲线离散对数问题(ECDLP )的难解性[2] . 一般来说,ECC 没有亚指数攻击,所以它的密钥长度大大地减少,256bit 的ECC 密码体制成为目前已知公钥密码体制中每位提供加密强度最高的一种体制. 3.椭圆曲线的定义 所谓椭圆曲线指的是由韦尔斯特拉斯 (Weierstrass)方程: 23213246y a xy a y x a x a x a ++=+++ 所确定的平面曲线[1].

相关主题
文本预览
相关文档 最新文档