欢迎来到天天文库
浏览记录
ID:22419432
大小:301.99 KB
页数:14页
时间:2018-10-29
《密码学应用与实践 课程报告100410203浦东new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、HarbinInstituteofTechnologyatWeihai密码学应用与实践课程报告专业:计算机科学与技术班级:1004102学号:100410203姓名:浦东I哈尔滨工业大学(威海)课程设计报告ELGamal密码算法1.密码算法原理ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。密钥对产生办法。首先选择一个素数p,两个随机数,g和x,g,x
2、,首先选择一个随机数k,k与p-1互质,计算a=g^k(modp),再用扩展Euclidean算法对下面方程求解b:M=xa+kb(modp-1)签名就是(a,b)。随机数k须丢弃。验证时要验证下式:y^a*a^b(modp)=g^M(modp)同时一定要检验是否满足1<=a
3、法群(IFp)*上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig&Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。D.Bleichenbache“GeneratingElGamalSignaturesWithoutKnowingtheSecretKey”中提到了一些攻击方法和对策。ElGamal的一个不足之处是它的密文成倍扩张。美国的DSS(DigitalSign
4、atureStandard)的DSA(DigitalSignatureAlgorithm)算法是经ElGamal算法演变而来。2.设计思想1.密钥(公钥和私钥)的生成:产生一个大的随机素数p•选择Zp的一个生成元g•选择一个随机数a,0≤a≤p-1•计算β=g^amodp•公钥是(p,g,β)12哈尔滨工业大学(威海)课程设计报告•私钥是a1.ElGamal加密&解密•加密消息m:–选择随机数k,0≤k≤p-1–eK(m,k)=(c1,c2)–c1=gk(modp);c2=m·(β)k(modp)•解密:–收到(c1,c2),
5、计算–m=c2·(c1^a)-1(modp)c2·(c1^a)-1=m·gak·g-ka=mmodp:3.设计流程图开始随机生成一个大随机素数p生成公钥对(p,g,β)和私钥a输入需要加密的明文M用公钥对(p,g,β)对M加密生成密文(C1,C2)结束输入需要加密的明文M用密钥a对密文(C1,C2)解密得到明文M总流程图12哈尔滨工业大学(威海)课程设计报告生成大素数p的方法:运用Miller_Rabin算法检验p是否为大素数随机生成一个大素数q(100006、生成公钥(p,g,β)对和私钥a的方法:找到一个Zp的生成元g选择一个随机数a(17、型是CString,而是用ELGamal算法中需要的大素数、公钥和密钥均为数字,加密时也需要使用数字运算,所以CString和Longint之间的类型转换时一个难点。Longint类型转成CString比较容易,是用format函数即可,但是CString类型转换成Longint类型较难,尤其是需要将一个字符串转换成数字。因此本课程设计中的明文仅限数字,还没有办法设计出为一个字符串加密的方法。2.平方乘算法的实现:计算g^kmodp类型的计算式时,由于k通常是一个大数,因此用for循环计算非常浪费时间,并且指数乘法会导致数据溢8、出,没有办法存储中间结果。因此我根据书本上提到的平方乘算法设计了Index()函数来解决计算问题。3.寻找C1^a关于p的逆:计算需要使用扩展的欧几里得算法;因此在设计的contray函数中我用递归的方法解决了求最大公因数的问题。12哈尔滨工业大学(威海)课程设计报告6.源代
6、生成公钥(p,g,β)对和私钥a的方法:找到一个Zp的生成元g选择一个随机数a(17、型是CString,而是用ELGamal算法中需要的大素数、公钥和密钥均为数字,加密时也需要使用数字运算,所以CString和Longint之间的类型转换时一个难点。Longint类型转成CString比较容易,是用format函数即可,但是CString类型转换成Longint类型较难,尤其是需要将一个字符串转换成数字。因此本课程设计中的明文仅限数字,还没有办法设计出为一个字符串加密的方法。2.平方乘算法的实现:计算g^kmodp类型的计算式时,由于k通常是一个大数,因此用for循环计算非常浪费时间,并且指数乘法会导致数据溢8、出,没有办法存储中间结果。因此我根据书本上提到的平方乘算法设计了Index()函数来解决计算问题。3.寻找C1^a关于p的逆:计算需要使用扩展的欧几里得算法;因此在设计的contray函数中我用递归的方法解决了求最大公因数的问题。12哈尔滨工业大学(威海)课程设计报告6.源代
7、型是CString,而是用ELGamal算法中需要的大素数、公钥和密钥均为数字,加密时也需要使用数字运算,所以CString和Longint之间的类型转换时一个难点。Longint类型转成CString比较容易,是用format函数即可,但是CString类型转换成Longint类型较难,尤其是需要将一个字符串转换成数字。因此本课程设计中的明文仅限数字,还没有办法设计出为一个字符串加密的方法。2.平方乘算法的实现:计算g^kmodp类型的计算式时,由于k通常是一个大数,因此用for循环计算非常浪费时间,并且指数乘法会导致数据溢
8、出,没有办法存储中间结果。因此我根据书本上提到的平方乘算法设计了Index()函数来解决计算问题。3.寻找C1^a关于p的逆:计算需要使用扩展的欧几里得算法;因此在设计的contray函数中我用递归的方法解决了求最大公因数的问题。12哈尔滨工业大学(威海)课程设计报告6.源代
此文档下载收益归作者所有