请回答下面几个问题1、试述消息认证码和消息检测码的区别与联系? 2、安全散列函数有哪些特性? 什么是碰撞? 3、生日问题与散列函数的碰撞性有什么关系?找到一个碰撞意味着什么?代价是多大? 4、假设有一消息长度为448比特,使用MD5杂凑算法,请问是否需要填充,填充多少比特,填充后消息长度为多少? 5、设有一消息长度为20898比特,使用SHA-1杂凑算法,请问是否需要填充?填充多少个0?
时间: 2024-04-26 13:22:07 浏览: 100
好的,我已经记录下来了,请依次回答您的问题:
1、消息认证码和消息检测码的区别在于:消息认证码(MAC)是一种带有密钥的算法,用于对消息进行加密和验证,以保证消息的完整性和真实性;而消息检测码(CRC)是一种不带密钥的算法,用于检测消息的传输错误,并纠正错误,以保证消息的准确性。两者的联系在于都是用于保证消息在传输过程中的完整性和正确性。
2、安全散列函数具有以下特性:
- 输入长度任意,输出长度固定;
- 输出值是不可预测的,即对于不同的输入值,输出值应该是不同的;
- 输出值是唯一的,即对于同一个输入值,输出值应该是唯一的;
- 不可逆,即无法从输出值推算出输入值;
- 对于输入值的微小变化,输出值也应该有较大的变化。
碰撞是指不同的输入值经过散列函数处理后,得到相同的输出值。这种情况是不应该出现的,因为一旦发生碰撞,就会导致数据的完整性和真实性无法保证。
3、生日问题与散列函数的碰撞性有关系:生日问题是指在一群人中,两个人生日相同的概率有多大。同样地,在散列函数中,也存在碰撞的概率。如果散列函数的输出位数是n位,那么在输入2^(n/2)个不同的值时,就会出现碰撞的概率达到50%。找到一个碰撞意味着散列函数存在缺陷,代价可能会非常高,因为攻击者可以通过构造相同散列值的两个输入值来进行攻击。
4、MD5算法要求对输入的消息进行填充,填充的方式是在消息末尾添加一个1和若干个0,使得填充后的消息长度满足对512取模后等于448。如果消息长度已经是448比特的倍数,还需要再添加一个块,这个块的长度为512比特,并且第一个比特为1,其余为0。因此,在这个例子中,需要填充64比特(即一个1和63个0),填充后消息长度为512比特 + 448比特 = 960比特。
5、SHA-1算法也要求对输入的消息进行填充,填充的方式是在消息末尾添加一个1和若干个0,使得填充后的消息长度满足对512取模后等于448。如果消息长度已经是448比特的倍数,还需要再添加一个块,这个块的长度为512比特,并且第一个比特为1,其余为0。在这个例子中,需要填充10个0,填充后消息长度为20928比特。
阅读全文