移动商务智能安全(下篇):消息摘要与密码破解防范
时间:2023-03-22 02:56:01 | 来源:电子商务
时间:2023-03-22 02:56:01 来源:电子商务
点击链接阅读:移动商务智能安全(上篇):加密算法之对称与非对称
在加密安全领域中,如果不需要保证消息可以被完整的读取出来,只需要验证消息本身,则有消息摘要这类算法。摘要算法多用于信息的比对和验证,使得在不暴露原始信息,以及缩小比对量的情况下保证结果的正确性,这里涉及的算法包括:MAC、MD5、SHA1、SHA256等。
消息摘要算法散列函数 Hash Function 又可称为散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数具有一个基本特性:如果两个散列值是不相同的,那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,而相应的散列函数即被称为单向散列函数。但是如果散列值相同,两个输入值可能相同也可能不同,这种情况成为散列碰撞。
密码散列函数 Cryptographic Hash Function 又可称为加密散列函数、密码散列函数,属于散列函数的一种,是一种单向函数,它将一个不定长的输入数据转换成固定大小的结果,并且以这个结果很难回推输入的数据。这种散列函数的输入数据,通常被称为消息Message,而输出的结果,经常被称为消息摘要Message Digest或摘要Digest。总的来说,密码散列函数具有如下的重要特征:
- 具有确定性,即同样的消息输入具有同样的散列结果
- 对于任何一个给定的消息,能够快速运算出散列数值
- 难以由一个已知的散列数值,去推算原始的消息
- 对于消息的任何微小的改动,都会导致散列结果的巨大改变
- 两个不同的消息输入,一定会产生不同的散列数值
除了被用作传统的哈希函数,而在数据索引、指纹等方面应用外,密码散列函数在信息安全方面有很多的应用,包括数字签名、消息认证码、以及各种形式的认证。
MD5消息摘要算法 MD5 Message Digest Algorithm 是一种密码散列函数,可以产生出一个128位,即16字节的散列值,用于确保信息的完整性。MD5由MD4、MD3、MD2改进而来,主要是增强了算法的复杂度和不可逆性。MD5目前已被证实无法防止碰撞攻击,所以不适用于安全性认证,即不可用于SSL公开密钥认证、数字签名等方面。但是MD5具有简单、稳定、快速的特征,所以在一些普通数据的错误检查应用中依然被广泛应用,比如文件下载的MD5校验和。
MD5以512位分组处理输入的信息,每一组又被划分为16个32位子分组,经过特定的程序流程,生成四个32位分组数据,最终这四组数据结合成128位的散列值作为最终的结果。
SHA安全散列算法 SHA Secure Hash Algorithms 包括一个密码散列函数家族,是FIPS所认证的安全散列算法。
SHA-0:1993年发布,160位散列函数,存着严重缺陷被很快撤回,为SHA-1的前身。
SHA-1:1995年发布,160位散列函数,类似于MD5的算法,在很多安全协议中广为使用,比如TLS、SSL、SSH等,被视为MD5的后继者,2015年被Google正式宣布攻破。
SHA-2:2001年发布,拥有两组散列函数,包括32位字的SHA-256以及64位字的SHA-512,它还包括各种变种SHA-224、SHA-384、SHA-512/224、SHA-512/256(后缀数字即散列位数),尚未被有效攻破,但算法与SHA-1类似。
SHA-3:2005年发布,支持SHA-2的相同散列长度,但内部结构得到很大的更新,作为一个未来可替换的加密散列算法存在。
目前主流使用SHA-2,比如SHA-256,其算法过程与MD5类似:
- 首先SHA-256对于输入报文有最大不超过2^64位的限制,输入依然按照512位分组,产生的是256位的报文摘要。
- 填充比特位以1开始顺位0,直至模512至448位,最后64位为原始报文的长度。
- 初始状态变量为256位,为8个32位
A=0x6A09E667, B=0xBB67AE85, C=0x3C6EF372, D=0xA54FF53A, E=0x510E527F, F=0x9B05688C, G=0x1F83D9AB, H=0x5BE0CD19 - 循环计算处理512位输入报文分组,每组迭代64次计算
与MD5类似,简单地说,SHA256算法的核心就是用512位的信息块来改变256位链接变量的状态,最终的状态即是256输出散列值。
MAC消息认证码 MAC Message Authentication Code,又称为消息鉴别码、文件消息认证码、讯息鉴别码、信息认证码等,是指经过特定算法后产生的一小段信息,通过验证消息传递过程中是否遭到更改以检查某段消息的完整性,以及作为消息来源的身份验证的一种方式,确认消息的来源。
MAC不会对信息保密,若要同时实现保密认证,需要同时对信息进行加密。在实际应用中,通常会使用带密钥的散列函数HMAC,或者块密码的带认证工作模式CBC-MAC。
HMAC密钥散列消息认证码 HMAC Keyed Hash Message Authentication Code 使用密码散列函数,结合一个加密密钥,计算生成消息认证码。HMAC既可以用来保证数据的完整性,也可以用作某个消息的身份验证。
MD5、SHA都可以作为HMAC的散列算法被使用,相应的HMAC算法就可以被称为 HMAC-MD5, HMAC-SHA。
编码Base64Base64 是一种基于64个可打印字符来表示二进制数据的表示方法,2的6次方为64,即以6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即三个字节可表示4个可打印字符。
Base64严格意义不能算是一种加密方式,只是将文本变得不那么可以直接看出来而已。
在Base64中可打印字符包括A-Z、a-z、0-9,总计62,再加上可能因系统而不同的两个可打印字符。Base64常用于处理文本数据的场合,处理一些二进制数据,比如MIME的email、在XML中存储数据等。
MIME在MIME格式的电子邮件中,Base64可以将二进制的字节序列数据编码成ASCII字符序列构成的文本,使用时除了字母和数字外,加上加号"+"和斜杠"/",共计64个字符,等号"="用作后缀。另外,在电子邮件中,每76个字符后需要加一个回车换行,另外使用"="补足尾部不足3字节的部分。
破解防范密码只要存在一天,就会有被攻击破解的可能,而我们之前介绍了不同的加密算法,也需要根据不同的使用环境进行选择。下面举一些例子已经防范的措施:
暴力破解防范暴力破解法 Brute-force attack 又可称为穷举法,即攻击者会系统性的尝试所有可能的密码,直到找到真正的密码为止。
破解防范:暴力破解的有效性取决于密码的长度、复杂度等,如果暴力破解的耗时过长,就会导致破解没有意义。与此相对应,为避免受到暴力破解的攻击,我们可以添加一些防护手段,比如:增加密码的长度与复杂度、在系统中限制密码试错的次数、定时修改密码等。
字典攻击防范比暴力破解优化点的一种方式叫做字典攻击Dictionary Attack,这种方法就是给密码锁定某个范围,比如英文单词、生日的数字组合等,所有的英文单词大约10万个左右,这样就可以大大缩小密码的查找范围,相比暴力破解可以缩短破译时间。
破解防范:字典攻击是根据现有或常用的组合测试破解密码,这就要求我们在设置相应的密码时要避免使用固定的单词和组合,应尽量使用无意思的字母数字符号组合在设置密码。
中间人攻击防范中间人攻击 MITM Middle in the Middle Attack 是指攻击者秘密地传递并可能改变两方的通信,而通信双方仍然相信他们是直接通信的。
破解防范:为了抵御在不安全的通道的通信需求,我们需要一些抵御中间人攻击的一些认证技术方案:公钥基础建设PKI使用公认的数字证书认证机构CA认证通信端;延迟测试的预估时间的超出等。
碰撞攻击防范碰撞攻击 Collision Attack 是指找出两个不同的输入值却导致同样的散列值的一种方式,目前已经可以有效地攻击MD5和SHA-1。
有效地利用碰撞,可以使得所有数据全部碰撞,人为的将哈希表变成一个退化的单链表,使得各种操作的时间均提升了一个数量级,因此大量消耗CPU资源,导致系统无法快速响应请求,从而达到拒绝服务供给Dos的目的。
破解防范:避免使用已被证明可以被有效攻击的算法,使用更高安全性的散列算法,比如SHA-2。
彩虹表防范彩虹表 Rainbow Table 是一个用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列。这种方式常用于包含有限字符固定长度纯文本密码的加密,是一种典型的以空间换时间的方式,相比暴力破解使用较少的计算能力而更多的存储空间。它可以针对各种散列算法,已被确认有效的包括MD5和SHA-1,一般主流的彩虹表都在100G以上。
破解防范:彩虹表是针对特定的算法,尤其是不对称算法,比如MD5,进行有效破解的一种方法。所以同样的,避免使用已被证明可以被有效攻击的算法,使用更高安全性的散列算法,比如SHA-2。
重放攻击防范重放攻击 Replay Attack 是一种通过欺骗性的重复发送或者延迟有效消息的网络攻击手段。
破解防范:防止重放攻击的一个手段是在加密信息片段上附上会话ID和编号,使用这种唯一且随机的标签,使得攻击者不能简单的重放信息。其他的方法包括一次性密码、时间戳等。
数据来源:
Wikipedia MD5:
https://en.wikipedia.org/wiki/MD5Wikipedia SHA-2:
https://en.wikipedia.org/wiki/SHA-2Wikipedia MAC:
https://en.wikipedia.org/wiki/Message_authentication_codeWikipedia HMAC:
https://en.wikipedia.org/wiki/Hash-based_message_authentication_codeWikipedia Base64:
https://en.wikipedia.org/wiki/Base64 我们会每周推送商业智能、数据分析资讯、技术干货和程序员日常生活,欢迎关注我们的本站公众号“微策略中国”或微信公众号“微策略 商业智能"。