密码学应用与实践 课程报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Harbin Institute of Technology at Weihai 密码学应用与实践 课程报告 专 业: 计算机科学与技术 班 级: 1004102 学 号: 100410203 姓 名: 浦东 ELGamal密码算法 1.密码算法原理 ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。 密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。 ElGamal用于数字签名。被签信息为M,首先选择一个随机数k, k与 p - 1互质,计算 a = g^k ( mod p ) 再用扩展 Euclidean 算法对下面方程求解b: M = xa + kb ( mod p - 1 ) 签名就是( a, b )。随机数k须丢弃。 验证时要验证下式: y^a * a^b ( mod p ) = g^M ( mod p ) 同时一定要检验是否满足1= a p。否则签名容易伪造。 ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p - 1互质,计算 a = g^k ( mod p ) b = y^k M ( mod p ) ( a, b )为密文,是明文的两倍长。解密时计算 M = b / a^x ( mod p ) ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。D.Bleichenbache“GeneratingElGamal Signatures Without Knowing the Secret Key”中提到了一些攻击方法和对策。ElGamal的一个不足之处是它的密文成倍扩张。 美国的DSS(Digital Signature Standard)的DSA(Digital Signature Algorithm)算法是经ElGamal算法演变而来。 p ? 选择 Zp的一个生成元g ? 选择一个随机数 a, 0 ≤ a ≤ p-1 ? 计算β= g^a mod p ? 公钥是 (p, g, β) ? 私钥是 a ElGamal 加密 解密 ? 加密消息 m: – 选择随机数k, 0 ≤ k ≤ p-1 – eK(m, k)=(c1,c2) – c1= gk(mod p); c2=m·(β)k(mod p) ? 解密: – 收到 (c1,c2), 计算 – m=c2·(c1^a)-1(mod p) c2·(c1^a)-1= m ·gak·g-ka= m mod p: 3.设计流程图 总流程图 大素数p的生成 β)对和私钥a的方法: 公钥生成流程图 加密过程流程图 解密过程流程图 5.总结 字符串和数字转换问题: 在edit control中的变量类型是CString,而是用ELGamal算法中需要的大素数、公钥和密钥均为数字,加密时也需要使用数字运算,所以CString和Long int之间的类型转换时一个难点。Long int类型转成CString 比较容易,是用format函数即可,但是CString类型转换成Long int类型较难,尤其是需要将一个字符串转换成数字。因此本课程设计中的明文仅限数字,还没有办法设计出为一个字符串加密的方法。 平方乘算法的实现: 计算g^k mod p类型的计算式时,由于k通常是一个大数,因此用for循环计算非常浪费时间,并且指数乘法会导致数据溢出,没有办法存储中间结果。因此我根据书本上提到的平方乘算法设计了Index()函数来解决计算问题。 寻找C1^a关于p的逆: 计算需要使用扩展的欧几里得算法;因此在设计的contray函数中我用递归的方法解决了求最大公因数的问题。 6.源代码 // ELGamalDlg.cpp : 实现文件 // #include stdafx.h #include ELGamal.h #include ELGamalDlg.h #include afxdialogex.h #include stdio.h #include stdlib.h #include time.h #include io

文档评论(0)

chqs52 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档