zoukankan      html  css  js  c++  java
  • 作业五

    1.给出散列函数的具体应用。

    A)消息验证

    Hash码能够通过如下不同方法用于提供消息认证

    a) 使用对称密码E加密消息和Hash码,由于只有AB共享密钥K,所以消息必然发自A处,且可通过验证Hash码证明数据在传输过程中未被更改。

     b) 使用对称密码只对Hash码加密。由于明文无需加密性的应用,这种方案大大减少了加密操作的负担。

    c) 不使用加密算法,仅使用Hash函数实现消息验证。该方案中,通信双方共享相同的秘密值S,发送方A将消息M和秘密值S串联后计算其Hash值,并将得到的Hash值附在消息M后发送。因为接收方B同时掌握S值,所以能够重新计算该Hash值进行验证。

    d) 在方案c的基础上将整个消息和Hash值加密,以提供保密性。

    B)数字签名

    数字签名的应用比消息认证更加广泛。主要有如下两种方案:

    a) 使用发送方的私钥利用公钥密码算法对Hash码进行加密。这种方法也可提供认证;由于只有发送方可以产生加密后的Hash码,所以这种方法也提供了数字签名。

    b) 若既希望保证保密性又希望有数字签名,则先用发送方的私钥对Hash码加密,再用对称密码中的密钥对象消息和公钥算法加密结果进行加密,这种技术比较常用。

    D)其他应用

    对于Hash函数,通常还被用于产生单向口令文件。在操作系统中,存储口令的Hash值而不是口令本身,当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值来进行用户验证。

    Hash函数还能用于入侵检测和病毒检测。将每个文件的HashH(F)存储在安全系统中(CD-R),随后就能通过重新计算H(F)来判断文件是否被修改过。入侵者只能够改变F,而不能改变H(F)

    密码学Hash函数能够用于构建随机函数PRF或用作伪随机数发生器。基于Hash函数的PRF可用于对称密码中的密钥产生。

    1. 结合生日攻击、以及20042005年王晓云教授有关MD5安全性和2017google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以结合下面给出的第一个链接。

    生日攻击

    生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。

    场景说明

    A要对一个合同文件进行签名,然后把合同文件和签名一起发送给接收者。

    签名的方法:计算文件的Hash值(m位),然后使用A的私钥对这个Hash值进行 加密。

    接收者使用A的公钥进行解密,然后比较Hash值,这样他就能确认:

    接收到的合同文件是A发送的,并且合同文件未被修改过。

    攻击者B想要伪造一份假合同文件,然后发送给接收者,并使接收者仍然相信:

    接收到的合同文件是A发送的,并且合同文件未被修改过。

    攻击方法

    B先准备 2^m/2 个有效合同文件(集合X),每个文件包含与原合同文件相同的意思。

    B再准备 2^m/2 个伪造合同文件(集合Y),每个文件也都是希望的伪造合同的意思。

    然后比较集合X和集合Y,找到Hash值相同的两个文件,分别是有效合同和伪造合同。

    B成功的概率会大于0.5,如果没有找到匹配的文件,就准备更多的有效文件和伪造文件,直到找到一对匹配的文件。

    B把找到的有效合同文件提供AA看了一下,没什么问题,就做了签名,然后发送给接收者。

    在接收者收到消息之前,B截获了这个消息,然后使用伪造合同替换有效合同,再把伪造合同和原签名一起发送给接收者。

    因为伪造合同与有效合同的Hash值相同,所以它们产生相同的签名。

    这样,即使B不知道A的私钥,他也能成功!

    MD5

    是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4MD5却是面向32位的电脑。

    初始化处理后,MD5512位分组来处理输入文本,每一分组又划分为1632位子分组。算法的输出由四个32位分组组成,将它们级联形成一个128位散列值。

    首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息长度(填充前)。这两步的作用是使消息长度恰好是512位的整数倍(算法的其余部分要求如此),同时确保不同的消息在填充后不相同。

    四个32位变量初始化为:

    A=0x01234567

    B=0x89abcdef

    C=0xfedcba98

    D=0x76543210

    它们称为链接变量(chaining variable

    接着进行算法的主循环,循环的次数是消息中512位消息分组的数目。

    将上面四个变量复制到另外的变量中:AaBbCcDd

    主循环有四轮(MD4只有三轮),每轮很相似。第一轮进行16次操作。每次操作对abcd中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上abcd中之一。最后用该结果取代abcd中之一。

    SHA1

    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)

     安全性

      

      

             

    发展前景:

      MD5 和 SHA1 是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32位操作数的位操作来实现的。

    3.结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exegoodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。

      传输过程中可能出现中断或者传输错误

      文件可能被恶意篡改

    引用资料:

      https://www.cnblogs.com/block2016/p/5623902.html

      https://blog.csdn.net/ddk3001/article/details/52647990

  • 相关阅读:
    Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存
    Hudi on Flink在顺丰的实践应用
    Kafka监控必备——Kafka-Eagle 2.0.2正式发布
    如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能
    突发!美商务部宣布封禁微信,TikTok——面对科技封锁,如何应对
    离线安装Superset 0.37
    Windows系统快速安装Superset 0.37
    Superset 0.37 发布——颜值最高的数据可视化平台
    Hive查看,删除分区
    超详细,Windows系统搭建Flink官方练习环境
  • 原文地址:https://www.cnblogs.com/lvgx/p/9032776.html
Copyright © 2011-2022 走看看