论文部分内容阅读
最近谷歌公布了一个攻破SHA-1算法的实例,谷歌可以制作出两个SHA完全相同的文件,这让目前很多仍在使用SHA-1算法的网站感到威胁。那么什么是SHA-1算法?它是怎么对我们的文件进行保护?谷歌又是怎样进行破解?本文将一一解析,并对使用什么更好的算法来保护而给出一些建议。
知识扫盲 了解算法到底是个什么鬼
说到加密,几乎每个网虫都要接触到,无论是访问网站、论坛,还是下载、发送邮件、QQ信息,这些常见的网络活动都在使用各种各样的加密来进行保护。举个简单的例子,当我们在网站下载一些类似Windows 10安装系统这些大型文件的时候,下载网站经常会在下载地址后方列出一些类似MD5:D09F6E80E9F681084991990C4EE62A1C、SHA1:261FA93907D2A987C268646618C1E2C158CBF307这样的数值代码,这些其实就是MD5、SHA1算法的数值,用它来表明下载文件的“身份”(图1)。
安全护身符 加密算法是怎么保护文件的安全
因为文件在网络传输的时候可能会被其他人篡改,或者由于网络原因造成损坏,为了保证文件的唯一性,确保用户下载或者接收到的是同一文件,文件发送者会根据文件特征生成一个哈希值,这个哈希值就类似我们的指纹数据。文件常见的哈希值有MD5、SHA1、CRC等。SHA-1值是通过哈希算法生成的,该算法是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程,而且只要文件经过任意更改(比如更改某篇文章任意一个字母),那么文件的SHA-1值就会发生变化,因此可以很好地保护文件的完整性(图2)。
比如在上述下载例子中,如果一些不怀好意的人在Windows 10安装文件中添加木马文件,那么用户再将这个文件重新上传到网站后,安装文件的SHA-1值就发生变化。这样为了确保我们下载到的是正确的官方文件,一般先要到官网(或者原始发布网站)获取文件的初始SHA-1值,下载后再对下载的文件进行SHA-1值校验,确保SHA-1值是一致的。SHA-1值校验可以借助Hash校验工具来完成,通过生成的SHA-1值来和网站提供的原始SHA-1值比对,如果完全一样则表明下载的文件没有被更改过(图3)。
当然SHA-1值的保护并不仅仅用在文件校验上,对于常见的网站访问,为了确保用户安全访问,现在很多采用SSL加密的“https://”安全网站(购物、在线支付网站)也是使用SHA-1算法来防止自己的身份被冒充。比如我们常用的12306购票网站,在浏览器输入https://kyfw.12306.cn/otn/后可以在地址栏后面看到一个小锁加密标记(图4)。
大家知道由于网络钓鱼网站层出不穷,那么网站是怎么确保用户浏览器访问的就是真正的官网?以上述12036网站为例,首先12036网站会设计一个证书,证书由SRCA颁发(SRCA即Sinorail CertificationAuthority,中文名叫中铁数字证书认证中心,默认不被IE信任,所以要安全访问12036就需要安装其提供的证书,并放置在受信任根证书下)。这些证书通过哈希算法生成一个SHA-1值。网站证书的具体算法,可以在lE地址栏点击小锁标记后,在弹出的菜单选择“查看证书”,切换到“详细信息”,可以看到12036使用的签名算法正是“sha1”哈希算法(图5)。
這样当证书安装在我们的系统后,12036网站生成的证书SHA-1值就会保存在本地电脑上。以后当我们在浏览器地址栏输入https://kyfw.12306.cn/otn/时,由于该网站存在证书,因此IE会计算12036网站服务器证书信息的SHA-1值,然后与被证书用作身份证明的原始SHA-1值(即安装证书后在本地保存的原始SHA-1值)作比较。如果两个值是相同的,浏览器就确认当前获取证书的SHA-1值和本地保存的SHA-1值是一致的,从而在浏览器打开12306的网站(图6)。
对于仿冒的钓鱼网站,即使仿冒者也在网站服务器生成证书的SHA-1值,由于这个证书文件和用户本地安装的不同,因此它们的SHA-1值是不同的,IE浏览器校验出不同后就无法打开12306的网站,从而可以保护用户访问网站的正确性。这个校验过程其实和上述下载文件类似,下载文件是官网直接提供SHA-1值,用户下载后自行比对,网站校验则是浏览器自动完成比对,但是原理是一样的。
并非万无一失 SHA-1值校验有漏洞
通过上面的介绍大家知道了SHA-1值校验的原理,因为SHA-1值是通过哈希函数算法生成的,理论上我们可以通过特定的运算生成同样的SHA-1值(专业术语叫做碰撞)。比如最近谷歌就构造出两个SHA-1值完全相同的PDF文件(但是实际内容却是不同的文件),这样在进行SHA-1值校验的时候,计算机就会认为这是相同的同一个文件,从而实现SHA-1值算法的“破解”。这样对于使用SHA-1值校验的网站(如上述的12306网站),伪造者如果为一个钓鱼网站伪造出和12036网站证书一样的SHA-1值,那么浏览器访问时就会自动认为钓鱼网站就是12306官网,从而造成访问者的损失。
不过哈希算法仍然要涉及到大量的运算,如最新哈希碰撞仍要多达2^57.5步,100个GPU大约需要计算一年时间才能完成计算,并且花费要在几十万美元。因此对于个人用户文件的校验,目前SHA-1值算法仍然有很高的安全性,但是对于在线支付、银行网站这些高安全性的网站,他们就需要使用强度更高的SHA256,甚至SHA512算法,只有这样才能更好地保护访问者的安全。
知识扫盲 了解算法到底是个什么鬼
说到加密,几乎每个网虫都要接触到,无论是访问网站、论坛,还是下载、发送邮件、QQ信息,这些常见的网络活动都在使用各种各样的加密来进行保护。举个简单的例子,当我们在网站下载一些类似Windows 10安装系统这些大型文件的时候,下载网站经常会在下载地址后方列出一些类似MD5:D09F6E80E9F681084991990C4EE62A1C、SHA1:261FA93907D2A987C268646618C1E2C158CBF307这样的数值代码,这些其实就是MD5、SHA1算法的数值,用它来表明下载文件的“身份”(图1)。
安全护身符 加密算法是怎么保护文件的安全
因为文件在网络传输的时候可能会被其他人篡改,或者由于网络原因造成损坏,为了保证文件的唯一性,确保用户下载或者接收到的是同一文件,文件发送者会根据文件特征生成一个哈希值,这个哈希值就类似我们的指纹数据。文件常见的哈希值有MD5、SHA1、CRC等。SHA-1值是通过哈希算法生成的,该算法是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程,而且只要文件经过任意更改(比如更改某篇文章任意一个字母),那么文件的SHA-1值就会发生变化,因此可以很好地保护文件的完整性(图2)。
比如在上述下载例子中,如果一些不怀好意的人在Windows 10安装文件中添加木马文件,那么用户再将这个文件重新上传到网站后,安装文件的SHA-1值就发生变化。这样为了确保我们下载到的是正确的官方文件,一般先要到官网(或者原始发布网站)获取文件的初始SHA-1值,下载后再对下载的文件进行SHA-1值校验,确保SHA-1值是一致的。SHA-1值校验可以借助Hash校验工具来完成,通过生成的SHA-1值来和网站提供的原始SHA-1值比对,如果完全一样则表明下载的文件没有被更改过(图3)。
当然SHA-1值的保护并不仅仅用在文件校验上,对于常见的网站访问,为了确保用户安全访问,现在很多采用SSL加密的“https://”安全网站(购物、在线支付网站)也是使用SHA-1算法来防止自己的身份被冒充。比如我们常用的12306购票网站,在浏览器输入https://kyfw.12306.cn/otn/后可以在地址栏后面看到一个小锁加密标记(图4)。
大家知道由于网络钓鱼网站层出不穷,那么网站是怎么确保用户浏览器访问的就是真正的官网?以上述12036网站为例,首先12036网站会设计一个证书,证书由SRCA颁发(SRCA即Sinorail CertificationAuthority,中文名叫中铁数字证书认证中心,默认不被IE信任,所以要安全访问12036就需要安装其提供的证书,并放置在受信任根证书下)。这些证书通过哈希算法生成一个SHA-1值。网站证书的具体算法,可以在lE地址栏点击小锁标记后,在弹出的菜单选择“查看证书”,切换到“详细信息”,可以看到12036使用的签名算法正是“sha1”哈希算法(图5)。
這样当证书安装在我们的系统后,12036网站生成的证书SHA-1值就会保存在本地电脑上。以后当我们在浏览器地址栏输入https://kyfw.12306.cn/otn/时,由于该网站存在证书,因此IE会计算12036网站服务器证书信息的SHA-1值,然后与被证书用作身份证明的原始SHA-1值(即安装证书后在本地保存的原始SHA-1值)作比较。如果两个值是相同的,浏览器就确认当前获取证书的SHA-1值和本地保存的SHA-1值是一致的,从而在浏览器打开12306的网站(图6)。
对于仿冒的钓鱼网站,即使仿冒者也在网站服务器生成证书的SHA-1值,由于这个证书文件和用户本地安装的不同,因此它们的SHA-1值是不同的,IE浏览器校验出不同后就无法打开12306的网站,从而可以保护用户访问网站的正确性。这个校验过程其实和上述下载文件类似,下载文件是官网直接提供SHA-1值,用户下载后自行比对,网站校验则是浏览器自动完成比对,但是原理是一样的。
并非万无一失 SHA-1值校验有漏洞
通过上面的介绍大家知道了SHA-1值校验的原理,因为SHA-1值是通过哈希函数算法生成的,理论上我们可以通过特定的运算生成同样的SHA-1值(专业术语叫做碰撞)。比如最近谷歌就构造出两个SHA-1值完全相同的PDF文件(但是实际内容却是不同的文件),这样在进行SHA-1值校验的时候,计算机就会认为这是相同的同一个文件,从而实现SHA-1值算法的“破解”。这样对于使用SHA-1值校验的网站(如上述的12306网站),伪造者如果为一个钓鱼网站伪造出和12036网站证书一样的SHA-1值,那么浏览器访问时就会自动认为钓鱼网站就是12306官网,从而造成访问者的损失。
不过哈希算法仍然要涉及到大量的运算,如最新哈希碰撞仍要多达2^57.5步,100个GPU大约需要计算一年时间才能完成计算,并且花费要在几十万美元。因此对于个人用户文件的校验,目前SHA-1值算法仍然有很高的安全性,但是对于在线支付、银行网站这些高安全性的网站,他们就需要使用强度更高的SHA256,甚至SHA512算法,只有这样才能更好地保护访问者的安全。