PKI概述
PKI(Public Key Infrastructure,公钥基础设施)证书系统是一种用于保护网络通信安全的技术。它基于非对称加密算法,使用一对密钥:公钥和私钥。
想象一下,你有一个保险柜,里面有两把钥匙:一把是公钥,可以给别人,另一把是私钥,只有你知道。当别人想给你发送私密信息时,他们可以使用你的公钥对信息进行加密,然后将加密后的信息发送给你。而你收到信息后,可以使用你的私钥解密,因为只有你拥有私钥。
PKI证书系统就是管理和分发这些公钥和私钥的系统。它通过数字证书来验证公钥的真实性,并确保通信双方的身份。这些数字证书是由受信任的第三方机构,称为证书颁发机构(Certificate Authority,CA),签发的。当你使用一个网站时,浏览器会检查该网站的数字证书,以确保你正在与正确的网站通信,而不是一个假冒的网站。
简而言之,PKI证书系统帮助确保网络通信的安全性和可靠性,通过加密和验证来保护数据的传输过程。
散列
散列函数就像是一个魔法盒子,它能够把任何东西都变成一串看起来很复杂的乱码。你可以往这个盒子里放任何东西,比如一段文字、一张图片,甚至是一部电影,然后盒子就会把它们变成一串乱码,这串乱码就是这个东西的“指纹”。
散列函数也叫做HASH函数,主流的散列算法有MD5与SHA ( SHA-1 , SHA-2 【主流】)。散列函数的主要任务是验证数据的完整性。通过散列函数计算得到的结果叫做散列值,这个散列值也常常被称为数据的指纹(Fingerprint)
MD5、SHA-1和SHA-2都是密码学中常见的哈希函数,用于计算数据的哈希值。它们的作用都是为了验证数据的完整性、实现数字签名等安全目的。下面是它们的简要介绍:
- MD5(Message Digest Algorithm 5):
- MD5是一种哈希函数,设计于1991年。
- 它生成128位(16字节)的哈希值。
- 虽然在过去被广泛使用,但是由于存在碰撞漏洞(即不同的输入可能产生相同的哈希值),已经被认为不再安全,不建议用于加密应用。
- SHA-1(Secure Hash Algorithm 1):
- SHA-1是SHA系列中的一员,设计于1995年。
- 它生成160位(20字节)的哈希值。
- 类似于MD5,由于存在碰撞漏洞,SHA-1也被认为不再安全,已经被弃用。
- SHA-2(Secure Hash Algorithm 2):
- SHA-2是SHA系列的后续版本,包括了一系列的哈希函数,如SHA-224、SHA-256、SHA-384、SHA-512等。
- SHA-2通过使用不同的位数来产生不同长度的哈希值,例如SHA-256生成256位(32字节)的哈希值,SHA-512生成512位(64字节)的哈希值。
- SHA-2被广泛认为是安全可靠的,目前仍然是主流的哈希函数之一,被广泛应用于数字签名、数据校验等领域。
总的来说,MD5和SHA-1由于存在严重的碰撞漏洞,已经不再安全,不建议在安全性要求较高的场景中使用。而SHA-2则被认为是安全可靠的,是目前广泛采用的哈希函数。
日产生活中的指纹的工作原理
散列函数的工作原理
比如网站提供的MD5和 SHA值
这个指纹有几个神奇的特点:
- 相同的东西一定会有相同的指纹,就像每个人的指纹都是独一无二的一样。所以,如果两个人的指纹一样,那么他们的东西肯定也是一样的。
- 哪怕是一点点的变化,也会导致指纹完全不同。就像你稍微移动一下手指,你的指纹就会变化一样。所以,只要有一点点的变化,指纹就会完全不一样。
- 无法通过指纹反推出原来的东西。就像看到一个人的指纹,也不可能准确地知道他是谁一样,从指纹也无法知道原来的东西是什么。
所以,散列函数就像是一种变魔术的工具,它能够把任何东西变成一串独一无二的乱码,用来做很多安全的事情,比如密码存储、数字签名等。
散列函数的四大特点
固定大小(Fixed Size)
雪崩效应 (Avalanche Effect)
单向性 (One-Way)
冲突避免 (Collision Resistance)
散列函数时,有四个重要的特点需要了解:
- 固定大小:散列函数生成的哈希值(也就是乱码)是固定长度的,无论输入数据的大小如何,输出的哈希值都是一样的长度。就像是一个魔法机器,无论你放进去多少东西,它都会生成同样长度的乱码。
- 雪崩效应:这个特点类似于雪崩一样,即微小的变化会引起巨大的影响。当输入数据发生一点小小的变化时,散列函数生成的哈希值会完全不同。就像是一颗小雪球滚动下山,最终会变成巨大的雪崩一样,微小的变化会扩大到整个哈希值中。
- 单向:散列函数是单向的,意味着它们可以轻松地从输入数据生成哈希值,但几乎不可能从哈希值还原出原始数据。就像是把一本书放入碎纸机,无法通过碎片重新拼凑出完整的书籍一样,从哈希值还原出原始数据几乎是不可能的。
- 冲突避免:散列函数的目标是尽可能避免不同的输入数据生成相同的哈希值,这种情况称为“冲突”。虽然绝对避免冲突是不可能的,但好的散列函数会尽量减少冲突的发生概率。就像是人口普查办公室尽力避免给两个不同的人分配相同的身份证号码一样,散列函数也会尽量避免生成相同的哈希值。
王小云并非直接破解了MD5,而是利用了MD5算法本身存在的漏洞,成功实施了一种称为碰撞攻击(Collision Attack)的方法。这种攻击是一种密码学攻击方式,目的是在合理的时间内找到两个不同的输入,它们产生相同的MD5哈希值。
在2004年,王小云与他的团队发布了一篇论文,详细描述了他们是如何实现MD5碰撞攻击的。他们使用了巧妙的算法和计算机技术,在比较短的时间内找到了两个不同的文件,它们的MD5哈希值是相同的。这一成就引起了广泛的关注,并且暴露了MD5算法的严重弱点。
MD5碰撞攻击的成功意味着MD5已经不再是一个安全可靠的哈希算法,因为它无法保证数据的唯一性和完整性。因此,现在通常建议不再使用MD5作为密码哈希或数据完整性校验的算法。
MD5的碰撞漏洞使得攻击者可以伪造数据,而哈希值却保持不变,这对数据的完整性和安全性造成了严重威胁。因此,建议不再使用MD5作为加密应用的安全手段,而是转向更安全可靠的哈希函数,如SHA-256等。
举个例子,黑客可以通过破解MD5来伪造一个数据,但使用者通过MD5值却识别不到这是一个已经被篡改的数据,从而带来一定的安全隐患。