u8,u8国际,u8国际官方网站,u8国际网站,u8国际网址,u8国际链接,u8体育,u8体育官网,u8体育网址,u8注册,u8体育网址,u8官方网站,u8体育APP,u8体育登录,u8体育入口
中元素的关键键值映射为元素存储位置的函数。哈希函数是哈希表中最重要的部分。一般来说,哈希函数会满足以下几个条件:
哈希函数应该易于计算,并且尽量使计算出来的索引值均匀分布,这能减少哈希冲突
在哈希表的实际应用中,关键字的类型除了数字类型,还有可能是字符串类型、浮点数类型、大整数类型,甚至还有可能是几种类型的组合。一般会将各种类型的关键字先转换为整数类型,再通过哈希函数,将其映射到哈希表中。而关于整数类型的关键字,通常用到的哈希函数方法有:直接定址法、除留余数法、平方取中法、基数转换法、数字分析法、折叠法、随机数法、乘积法、点积法等。
使用单向Hash函数的目的是提供消息指纹,如果不同的消息可以生成相同的哈希值(称为发生了碰撞),那么攻击者就能根据揭示出来的规律攻破这个安全机制。
如果一个哈希算法采取了措施确保两条或多条不同的消息不会生成相同的哈希值,就称其为免碰撞(针对哈希算法的攻击基本上是试图找出碰撞)。
给定一条消息及其哈希值,要找出另一条具有相同哈希值的消息应该是不可能的;
MAC就是消息验证码(Message Authentication Code)。是一种通过将密钥应用到消息上确保消息内容真实性的身份验证方案。
MAC函数的中密钥并不完全是加密消息,这跟对称加密算法的应用有比较大的区别,下面将逐步描述。基本的MAC函数有四种:HMAC、CBC-MAC、CMAC、CCM。
HMAC(基于哈希的消息验证码)和单纯的哈希算法的区别是:消息发送者将一个对称密钥和消息本身拼接在一起输入哈希算法,此时计算出来的哈希值称为MAC值,然后把原始消息和MAC值都发给接收者。接收者收到消息后,同样拼接对称密钥计算MAC值,如果跟收到的相同,那么说明两件事,其一是消息中途没有被篡改,其二是消息是从发送者发来的(身份验证),因为只有接收者和发送者知道对称密钥。所以HMAC提供完整性和数据源验证,但不提供机密性。
CBC-MAC就是使用CBC模式的MAC。一般使用AES算法的CBC分组模式。CBC-MAC提供完整性和数据源验证,也不提供机密性。
①发送方用一个分组密码以CBC工作模式对消息进行加密,密文的最后一个分组作为MAC。发送方把明文消息及附加的MAC而不是加密后的消息发送给接收方。
②接收方收到明文消息,在CBC工作模式下使用相同的分组密码对消息进行加密,计算出的MAC值与跟随消息一起发送的MAC进行比较,即可检测消息是否被篡改。
CBC-MAC并没有使用哈希算法,数据完整性验证来源于加密算法和共享密钥。
CBC-MAC提供最弱的身份验证,CBC-MAC算法绑定的是计算机或设备,称为系统身份验证(也称为数据源验证),如果需要更强的身份验证,需要使用用户身份验证
即基于密码的消息验证码。CMAC提供与CBC-MAC相同类型的完整性验证和数据源身份验证,但CMAC解决了CBC-MAC存在一些安全问题。CMAC、AES和3DES一起使用,理论上比CBC-MAC安全。
HMAC、CBC-MAC、CMAC工作在网络栈的较高层,不仅能识别出传输错误(意外原因),还可识别出恶意的篡改,如攻击者为了自身利益而弄乱消息(即有意的未授权的)。
而CRC(奇偶校验和循环冗余校验)工作于网络栈的较低层,用于当数据报文从一台计算机传送到另一台计算机时检测数据更改(通常用于检测是否发生物理传输故障)。
②每个子密钥用于单独加密一个不同的消息分组。与CBC-MAC对比,CMAC基于更复杂的逻辑和数学函数(称为XCBC)。
设计CCM的目的是用同一个密钥提供数据源验证和加密功能。首先在消息上计算CBC-MAC以获得MAC值,然后使用计数器模式对消息和MAC值进行加密。对称密钥用于CTR工作模式加密,对称密钥和IV值用于生成CBC-MAC。