使用消息摘要算法提升密码安全性

2020/12/30 11:22
阅读数 30

前言

密码安全往往与账户安全息息相关。密码技术是保护信息安全最基础、最核心的手段之一。它不仅具有信息加密功能,而且具有数字签名、身份验证、秘密分存、系统安全等功能。所以使用密码技术不仅可以保证信息的机密性,而且可以保证信息的完整性和可用性,防止信息被篡改、伪造和假冒。这样也就保证了信息的安全。(来源于百度知道。)
用户在注册时输入的密码,若以“明文”的方式存储在数据库中,对用户来讲十分危险。我们需要采取的做法是:用户在注册时将输入的密码“密文”处理操作,即加密,意思是更换表示密码的字符串进行数据库存储。将密文存入数据库的做法,用户的账号安全相对更有保障,不容易被他人盗用。
而处理密码字符串更换进行加密时,不可以使用加密算法,加密算法一般来讲保证的是传输过程中数据的安全性,加密算法的特点为可逆向推导运算,对于密码来说,逆向运算得到“加密”前的密码的做法,失去了密码加密的意义。所以需要存储的数据不应该使用加密算法。
在实际开发运用中,我们需要使用消息摘要算法(Message Digest Algorithm)处理密码加密。


消息摘要算法

关于消息算法的主要特点如下:

  • 使用的算法固定时,无论消息长度是多少,得到的摘要的长度固定不变;
  • 使用相同的算法时,对同样的消息进行运算,得到的摘要一定相同;
  • 使用相同的算法时,对不同的消息进行运算,极低概率得到相同的摘要。

消息摘要算法有很多,主要有MD(Message Digest)算法,例如:MD2、MD4、MD5,现主要简介MD算法中的MD5算法,MD5算法为128位算法,显示为32位长度的十六进制数,对应实际项目开发中跟密码相关的数据表中设置password字段长度为32位。另外还有SHA(Secure Hash Algorithm)算法,例如SHA-1、SHA-256、SHA-384、SHA-512,尝试解释说明:SHA-256即256位的算法,其运算结果是长达256位的二进制数,通常会转换为十六进制来显示,所以显示的十六进制值是64个。

摘要碰撞概率

即使是使用算法的位数很高,比如使用了128位的运算方法,不同的消息对应了相同的摘要即碰撞的概率也是极低的。若在实际开发中应用在密码加密过程,消息的种类也是有限制的,这是由程序员来决定的,因为程序员在开发时会限制密码长度格式等因素。这导致了碰撞概率更低甚至概率为零。

综上所述,在进行密码的加密处理时,一般采用的方法为消息摘要算法。

消息摘要算法的破解

有关于消息的摘要算法的破解工作,其主要工作是对消息算法的碰撞的研究。以128位的算法举例说明:128位算法理论上的碰撞概率为1/2128,当然这是理想状态,实际运用中也不会达到这个理论上的概率。说明消息摘要算法的不可逆运算,主要验证在研究是否可以在运算次数达不到理论次数时发生碰撞。
需要我们注意的是,很多网站称可“在线破解”摘要数据获取消息原文。“破解”一词其实是表述错误的。这些破解网站的工作原理实际上是在其数据库中记录了大量的消息原文与摘要数据的对应关系,当用户希望破解时,是从数据库中“查”出来的,并不是“算”出来的,其“查”方式相当于:

select 消息原文 from 数据表 where 摘要数据=?  

解决方案

正是因为这些网站的存在,会导致使用消息摘要算法处理密码时,部分内容不能够百分之百安全。所以,作为开发者,应该采取一些措施,来保障密码安全,通常,可用的解决方案有:

  • 在软件中,强制要求用户使用安全级别更高的原始密码;
  • 多重加密;
  • 在处理加密过程中,对密码加盐(salt)
  • 使用更高位数的消息摘要算法;
  • 综合运用以上各方案
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部