安全与算法

2024-11-04 19:08

源由互联网数据传输过程中会被某些恶意用户盗用。数据传输时的问题👇👇👇

  • 窃听: A向B发送的消息可能会在传输途中被X偷看。👉👉加密技术

  • 假冒: A以为向B发送了消息,然而B有可能是X假冒的;反过来,B以为从A哪里收到了消息,然而A也有可能是X冒充的。👉👉消息认证码或数字签名

  • 篡改: 即便B确实收到了A发送的消息,但有可能消息的内容在传途中就被X更改了。 👉👉消息认证码或数字签名

  • 事后否认: B从A那里收到了消息,但作为消息发送者的A可能对B抱有恶意,并在事后声称“这不是我发送的消息”。这种情况会导致互联网上的商业交易或合同签署无法成立。这种行为便是“事后否认”。 👉👉数字签名

加密的基础知识

密文我们给想要保密的数据加密。加密后的数据被称为“密文”。

解密A把密文发送给B,B收到密文后,需要解除加密才能得到原本的数据。把密文恢复为原本数据的操作就叫作“解密”。像这样对数据进行加密,就不用担心会被人窃听了。

「加密的具体操作」

  • 首先,计算机会用由0和1这两个数字表示的二进制来管理所有数据。数据虽然有文本、音频、图像等不同的形式,但是在计算机中都是用二进制来表示的。

  • 对计算机来说,数据就是一串有意义的数字罗列。密文也是数字罗列,只不过它是计算机无法理解的无规律的数字罗列。

  • 在加密运算上会用到“密钥”。所以加密就是用密钥对数据进行数值运算,把数据变成第三者无法理解的形式的过程。

  • 反过来,解密就是通过密钥进行数值计算,把密文恢复成原本数据的过程。

哈希函数

哈希函数可以把给定的数据转换成固定长度的无规律数值。转换后的无规律数值可以作为数据摘要应用于各种各样的场景。把哈希函数想像成搅拌数据的搅拌机就很容易理解了。输出的无规律数值就是“哈希值”。哈希值虽然是数字,但多用十六进制来表示。

  • 输出的哈希值数据长度不变

  • 如果输入的数据相同,那么输出的哈希值也必定相同。

  • 即使输入的数据相似,但哪怕它们只有一比特的差别,那么输出的哈希值也会有很大的差异。

  • 即使输入的两个数据完全不同,输出的哈希值也有可能是相同的,虽然出现这种情况的概率比较低。这种情况叫作“哈希冲突”。

  • 不可能从哈希值反向推算出原本的数据。输入和输出不可逆这一点和加密有很大不同。

  • 求哈希值的计算相对容易。

解说哈希函数的算法中具有代表性的是MD5、SHA-1和SHA-2等。其中SHA-2是现在应用较为广泛的一个,而MD5和SHA-1存在安全隐患,不推荐使用。

应用将用户输入的密码保存到服务器时需要用到哈希函数。因此需要算出密码的哈希值,并只存储哈希值。当用户输入密码时,先算出该输入密码的哈希值,再把它和服务器中的哈希值进行比对。

共享密钥加密

加密数据方法可以分为两种:加密和解密都使用相同密钥的“共享密钥加密(对称加密)”和分别使用不同密钥的“公开密钥加密”。

流程A使用密钥加密数据,A将密文发送给B,B收到密文后,使用相同的密钥对其进行解密。这样,B就取得了原本的数据。只要是加密好的数据,就算被第三者恶意窃听也无须担心。

存在的问题密钥有被第三者窃听的风险,这样一来,X可使用密钥对密文进行解密。

解决措施需要找到可以把密钥安全送出的方法,这就是“密钥分配问题”。可以使用“密钥交换协议”和“公开密钥加密”两种方法。

算法实现共享密钥加密的算法有凯撒密码、AES、DES、动态口令等,其中AES的应用最为广泛。

公开密钥加密

公开密钥加密是加密和解密使用不同密钥的一种加密方法(非对称加密)。加密用的密钥叫作“公开密钥”,解密用的叫作“私有密钥”。

流程假设A准备通过互联网向B发送数据。首先,需要由接收方B来生成公开密钥和私有密钥,然后把公开密钥发送给A,A使用B发来的公开密钥加密数据.A将密文发送给B, B再使用私有密钥对密文进行解密。

存在的问题公开密钥的可靠性会出现问题,就是因为A无法判断收到的公开密钥是否来自B。要想解决这个问题,就要用到之后会讲到的“数字证书”。公开密钥加密和解密都比较耗时,所以这种方法不适用于持续发送零碎数据的情况。要想解决这个问题,就要用到“混合加密”。

算法实现公开密钥加密的算法有RAS算法、椭圆曲线加密算法等,其中使用最为广泛的是RSA算法。

混合加密

混合加密用处理速度较快的共享密钥加密对数据进行加密,不过,加密时使用的密钥,则需要用没有密钥分配问题的公开密钥加密进行处理。

优势及应用混合加密在安全性和处理速度上都有优势。能够为网络提供通信安全的SSL协议也应用了混合加密方法。SSL是Secure SocketsLayer(安全套接层)的简写,该协议经过版本升级后,现在已正式命名为TLS(Transport Layer Security,传输层安全)。但是,SSL这个名字在人们心中已经根深蒂固,因此该协议现在也常被称为SSL协议或者SSL /TLS协议。

迪菲-赫尔曼密钥交换

迪菲-赫尔曼密钥交换是一种可以在通信双方之间安全交换密钥的方法。这种方法通过将双方共有的秘密数值隐藏在公开数值相关的运算中,来实现双方之间密钥的安全交换。

消息认证码

消息认证码可以实现“认证”和“检测篡改”这两个功能。密文的内容在传输过程中可能会被篡改,这会导致解密后的内容发生变化,从而产生误会。消息认证码就是可以预防这种情况发生的机制。

流程A生成了一个用于制作消息认证码的密钥,然后使用安全的方法将密钥发送给了B。接下来,A使用密文和密钥生成一个值。此处生成的是7f05。这个由密钥和密文生成的值就是消息认证码,以下简称为MAC(Message AuthenticationCode)。A将MAC(7f05)和密文发送给B。和A一样,B也需要使用密文和密钥来生成MAC。经过对比,B可以确认自己计算出来的7f05和A发来的7f05一致。

算法计算MAC的算法有HMAC、OMAC、CMAC等。目前,HMAC的应用最为广泛。

存在的问题在使用消息认证码的过程中,AB双方都可以对消息进行加密并且算出MAC。也就是说,我们无法证明原本的消息是A生成的还是B生成的。这个问题可以用“数字签名”来解决。

数字签名

数字签名不仅可以实现消息认证码的认证和检测篡改功能,还可以预防事后否认问题的发生。由于在消息认证码中使用的是共享密钥加密,所以持有密钥的收信人也有可能是消息的发送者,这样是无法预防事后否认行为的。而数字签名是只有发信人才能生成的,因此使用它就可以确定谁是消息的发送者了。

流程假设A要向B发送消息,在发送前A给消息加上数字签名。数字签名只能由A生成,只要发送的消息上有A的数字签名,就能确定消息的发送者就是A。B可以验证数字签名的正确性,但无法生成数字签名。接下来看一看数字签名具体是怎样生成的吧。数字签名的生成使用的是公开密钥加密。

  • 首先由A准备好需要发送的消息、私有密钥和公开密钥。由消息的发送者来准备这两个密钥,这一点与公开密钥加密有所不同。

  • A将公开密钥发送给B,A使用私有密钥加密消息。加密后的消息就是数字签名,然后A将消息和签名都发送给了B

  • B使用公开密钥对密文(签名)进行解密,B对解密后的消息进行确认,看它是否和收到的消息一致。流程到此结束

说明公开密钥加密的加密和解密都比较耗时。为了节约运算时间,实际上不会对消息直接进行加密,而是先求得消息的哈希值,再对哈希值进行加密,然后将其作为签名来使用。

存在的问题虽然使用数字签名后B会相信消息的发送者就是A,但实际上也有可能是X冒充了A。其根本原因在于使用公开密钥加密无法确定公开密钥的制作者是谁。收到的公开密钥上也没有任何制作者的信息。因此,公开密钥有可能是由某个冒充A的人生成的。

解决措施数字证书

数字证书

回顾“公开密钥加密”和“数字签名”无法保证公开密钥确实来自信息的发送者。因此,就算公开密钥被第三者恶意替换,接收方也不会注意到。

数字证书流程

  • A持有公开密钥PA和私有密钥SA,现在想要将公开密钥PA发送给B。

  • A首先需要向认证中心(Certification Authority, CA)申请发行证书,证明公开密钥PA确实由自己生成。

  • 认证中心里保管着他们自己准备的公开密钥PC和私有密钥SC。

  • A将公开密钥PA和包含邮箱信息的个人资料发送给认证中心,认证中心对收到的资料进行确认,判断其是否为A本人的资料。确认完毕后,认证中心使用自己的私有密钥SC,根据A的资料生成数字签名。

  • 认证中心将生成的数字签名和资料放进同一个文件中,然后,把这个文件发送给A,这个文件就是A的数字证书。

  • A将作为公开密钥的数字证书发送给了B,B收到数字证书后,确认证书里的邮件地址确实是A的地址。接着,B获取了认证中心的公开密钥。

  • B对证书内的签名进行验证,判断它是否为认证中心给出的签名。证书中的签名只能用认证中心的公开密钥PC进行验证。如果验证结果没有异常,就能说明这份证书的确由认证中心发行。

  • 确认了证书是由认证中心发行的,且邮件地址就是A的之后,B从证书中取出A的公开密钥PA。这样,公开密钥便从A传到了B。

补充到目前为止,我们了解的都是个人之间交付公开密钥的例子,其实在网站之间的通信中同样也要用到数字证书。只要能收到来自网站的含有公开密钥的证书,就能确认该网站未被第三者冒充。此处的证书叫作“服务器证书”,同样由认证中心发行。个人的证书会与他的邮箱信息相对应,而服务器证书与域名信息相对应。因此,我们还可以确认网站域名和存储网站本身内容的服务器是由同一个组织来管理的。数字证书就是像这样通过认证中心来担保公开密钥的制作者。这一系列技术规范被统称为“公钥基础设施”(Public Key Infrastructure, PKI)。

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: