互联网中不可或缺的安全技术

通过互联网交换数据时,数据要经过各种各样的网络和设备才能传到对方那里。数据在传输过程中有可能会经过某些恶意用户的设备,从而导致内容被盗取。

因此,要想安全地使用互联网,安全技术是不可或缺的,学习保障安全的各种算法和如何实际利用了这些算法的机制是非常重要的。

传输数据时的四个问题

以下以A向B传输数据举例,这些问题不光发生在用户之间交流的时候,也有可能发生在用户浏览网页的时候。

窃听

A 向 B 发送的消息可能会在传输途中被 X 偷看。这就是“窃听”。

假冒

A 以为向 B 发送了消息,然而 B 有可能是 X 冒充的;反过来,B 以为从 A 那里收到了消息,然而 A 也有可能是 X 冒充的。这种问题就叫作“假冒”。

篡改

即便 B 确实收到了 A 发送的消息,但也有可能像右图这样,该消息的内容在途中就被 X 更改了。
这种行为就叫作“篡改”。除了被第三者篡改外,通信故障导致的数据损坏也可能会使消息内容发生变化。

事后否认

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

解决这些问题的安全技术

安全问题         解决方案
“窃听” “加密”技术
“假冒” “消息认证码”或“数字签名”技术
“篡改” “消息认证码”或“数字签名”技术
“事后否认” “数字签名”技术

“加密”技术的介绍

在现代互联网社会中,加密技术是不可或缺的。以下以A向B传输数据举例

假设 A 想通过互联网向 B 发送消息。数据要经过互联网上各种各样的网络和设备才能到达 B 那里,如果直接发送数据的话,数据可能会被第三者恶意窃听。因此,我们需要给想要保密的数据加密。加密后的数据被称为“密文”

A在发送数据给B前会对数据进行加密,B 收到密文后,需要解除加密才能得到原本的数据。把密文恢复为原本数据的操作就叫作“解密”

这样就算被第三者窃听到数据,也是加密后的,不会导致数据泄密。

加密的具体操作

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

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

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

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

像这样,将数据变成第三者的计算机无法理解的形式,然后再将其恢复成原本数据的一系列操作就是加密技术。

在介绍加密技术时不可不提哈希函数。

哈希函数

哈希函数可以把给定的数据转换成固定长度的无规律数值。转换后的无规律数值可以作为数据摘要应用于各种各样的场景。

将数据输入到哈希函数后,输出固定长度的无规律数值。输出的无规律数值就是“哈希值”。哈希值虽然是数字,但多用十六进制来表示。

哈希函数的特征

特征 介绍
输出的哈希值数据长度不变

即使输入了相当大的数据,输出的哈希值的长度也保持不变。即使输入了相当大的数据,输出的哈希值的长度也保持不变。同样地,不管输入的数据多小,哈希值的长度仍然相同。

数据相同则哈希值相同 如果输入的数据相同,那么输出的哈希值也必定相同
不同的数据哈希值差异大 是即使输入的数据相似,但哪怕它们只有一比特的差别,那么输出的哈希值也会有很大的差异。输入相似的数据并不会导致输出的哈希值也相似。
“哈希冲突” 即使输入的两个数据完全不同,输出的哈希值也有可能是相同的,虽然出现这种情况的概率比较低。
不可逆 不可能从哈希值反向推算出原本的数据。输入和输出不可逆这一点和加密有很大不同。

哈希函数的常见算法

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

两种常见的加密算法

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

共享密钥加密

共享密钥加密是加密和解密都使用相同密钥的一种加密方式。由于使用的密钥相同,所以这种算法也被称为“对称加密”

以下以A向B传输数据举例
                        
       假设 A 准备通过互联网向 B 发送数据。由于有被窃听的风险,所以需要把想要保密的数据加密后再发送。A 使用密钥加密数据,并 将密文发送给 B。

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

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

共享密钥加密的安全问题

A 需要通过某种手段将密钥交给 B。和密文一样,A 又在互联网上向 B 发送了密钥,B 使用收到的密钥对密文进行解密,但是,该密钥也有可能会被第三者窃听。这样一来,第三者也可以使用密钥对密文进行解密了。

安全问题解决方案

要想解决这个问题,可以使用“密钥交换协议”和“公开密钥加密”两种方法。

公开密钥加密

公开密钥加密是加密和解密使用不同密钥的一种加密方法。由于使用的密钥不同,所以这种算法也被称为“非对称加密”。加密用的密钥叫作“公开密钥”,解密用的叫作“私有密钥”。

以下以A向B传输数据举例:

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

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

公开密钥和密文都是通过互联网传输的,因此可能会被 X 窃听。但是,使用公开密钥无法解密密文,因此 X 也无法得到原本的数据。此外,在和多人传输数据时,使用公开密钥加密十分方便。     

公开密钥加密的安全问题

公开密钥加密存在公开密钥可靠性的问题,因为第三者可以生成自己的公开密钥和私有密钥,然后用公开密钥替换B的公开密钥,由于公开密钥无法显示自己是由谁生成的,所以 A 不会发现自己收到的公开密钥已经被人替换。

于是当A用公开密钥对数据进行加密时,当 A 把想要给 B 的密文发送出去后,第三者接收了这个密文,然后第三者用自己的私有密钥对密文进行解密,于是数据就泄露呢。

然后第三者还可以用B的公开密钥对数据加密,再把密文发送给B,这个密文由B发出的公开密钥来解密,从收到密文到解密密文都没发生任何问题,因此 B 也意识不到数据已经被窃听。

这种通过中途替换公开密钥来窃听数据的攻击方法叫作“中间人攻击”(man-in-the-middle attack)。

公开密钥加密还有一个问题,那就是加密和解密都比较耗时,所以这种方法不适用于持续发送零碎数据的情况。要想解决这个问题,就要用到“混合加密”

混合加密

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

以下以A向B传输数据举例:

假设 A 准备通过互联网向 B 发送数据。使用处理速度较快的共享密钥加密对数据进行加密,加密时所用的密钥在解密时也要用到,因此 A 需要把密钥发送给 B。将密钥通过公开密钥加密进行加密后,A 就可以将其安全地发送给 B 了,因此,作为接收方,B 需要事先生成公开密钥和私有密钥。

B 将公开密钥发送给 A,A 使用收到的公开密钥,对共享密钥加密中需要使用的密钥进行加密。

A 将加密后的密钥发送给 B,B 使用私有密钥对密钥进行解密。

这样,A 就把共享密钥加密中使用的密钥安全地发送给了 B

接下来,A 只要将使用这个密钥加密好的数据发送给 B 即可。加密数据时使用的是处理速度较快的共享密钥加密。

迪菲-赫尔曼密钥交换

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

该算法有用到合成方法,可以合成两个密钥。

这种合成算法有三个特征

当密钥A和密钥B合成密钥A-B,即使你有密钥A,也无法单独取出密钥B
不管是怎样合成而来的密钥,都可以把它作为新的元素,继续与别的密钥进行合成
密钥的合成结果与合成顺序无关,只与用了哪些密钥有关。

具体的实现过程,可以去网上找图解,然后结合的图解进行理解。

消息认证码

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

假设 A 发送给 B 的密文在通信过程中被 X 恶意篡改了,而 B 收到密文后没有意识到这个问题。这里用消息认证码解决这个问题,我们再一次回到 A 正要向 B 发送密文的时候,A 生成了一个用于制作消息认证码的密钥,然后使用安全的方法将密钥发送给了 B。

接下来,A 使用密文和密钥生成一个值。这个由密钥和密文生成的值就是消息认证码,A将消息认证码和密文发送给B,和 A 一样,B 也需要使用密文和密钥来生成 消息认证码。

经过对比,B 可以确认自己计算出来的是否和A发过来的消息认证码一致,一致则没有被篡改过,当不一致时则可能遭到了篡改,于是 B 废弃了收到的密文和消息认证码,向 A 提出再次发送的请求。

计算消息认证码的算法有HMAC、OMAC、CMAC等。目前,HMAC 的应用最为广泛。

数字签名

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

假设 A 要向 B 发送消息,在发送前 A 给消息加上数字签名。数字签名只能由 A 生成,只要发送的消息上有 A 的数字签名,就能确定消息的发送者就是 A,B 可以验证数字签名的正确性,但无法生成数字签名。

数字证书

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

A 持有公开密钥发送给 B,A 首先需要向认证中心(Certification Authority,CA)申请发行证书,证明公开密钥确实由自己生成。认证中心里保管着他们自己准备的公开密钥。

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

A将作为公开密钥的数字证书发送给了 B,B 收到数字证书后,确认证书里的邮件地址确实是 A 的地址,接着,B 获取了认证中心的公开密钥,B 对证书内的签名进行验证,判断它是否为认证中心给出的签名。证书中的签名只能用认证中心的公开密钥进行验证。如果验证结果没有异常,就能说明这份证书的确由认证中心发行。

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

其实在网站之间的通信中同样也要用到数字证书。只要能收到来自网站的含有公开密钥的证书,就能确认该网站未被第三者冒充。此处的证书叫作“服务器证书”,同样由认证中心发行。

常见的安全问题及其相应解决方法相关推荐

  1. mysql 死锁原因_Mysql并发时经典常见的死锁原因及解决方法

    1.mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒 ...

  2. 松下a6伺服驱动连接光栅尺_FANUC常见伺服报警及故障解决方法

    FANUC常见伺服报警及故障解决方法 FANUC常见伺服报警及故障解决方法 偶尔SV0435:逆变器DC链路电压低报警 1.确认DCLINK母线接线端子螺丝是否锁紧; 2.如果发生全轴或多轴报警时,请 ...

  3. 常见的 OOM 原因及其解决方法(OutOfMemoryError)

    当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误.本文总结了常见的 OOM 原因及其解决方法,如下图所示.如有遗漏或错误,欢迎补充指正. 1.Java ...

  4. 开机启动失败_电脑常见开机引导错误的解决方法

    电脑在开机启动过程中,经常会出现开机失败的故障,开机失败比较常出现在开机引导项错误的问题上,比如引导文件没了,硬盘有问题等等,有些小问题重启几遍可以解决,有些问题就只能修复.这边小编跟大家整理分享几个 ...

  5. 计算机错误符号,解析Excel中常见的错误符号以及解决方法

    解析Excel中常见的错误符号以及解决方法分享给大家, Excel 电子表格是很多人都要使用的软件,也相信很多人都会用,但是用得好不好就差别很大了,用得好的话可以让工作效率大大提高,但关于Excel的 ...

  6. 计算机出现黑屏问题方法派出,电脑重装系统开机常见黑屏问题的解决方法

    电脑出现黑屏问题怎么办?电脑在开机的时候黑屏了,无法进入系统怎么办?最近有不少小伙伴反映,电脑开机出现黑屏问题,这是怎么回事?要怎么解决?相信小伙伴们都很心急.不过别担心,虽然说出现黑屏的原因有很多, ...

  7. MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法

    MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法 参考文章: (1)MySQL学习笔记(五)并发时经典常见的死锁原因及解决方法 (2)https://www.cnblogs.com/tiny ...

  8. 软件是用计算机解决问题,电脑常见的软件问题及解决方法

    电脑常见的软件问题及解决方法 日常使用电脑的过程中,总会遇到各种各样的难题.那么这些问题是怎么出现的?又该怎么去解决?下面是小编分享的电脑常见的软件问题及解决方法,欢迎阅读参考. 1.开机后找不到D盘 ...

  9. 一些常见warning的原因和解决方法

    一些常见warning的原因和解决方法 参考文章: (1)一些常见warning的原因和解决方法 (2)https://www.cnblogs.com/SoulKai/p/5865175.html 备 ...

最新文章

  1. 第十四周项目二-两个成员的类模版(2)
  2. Linux学习笔记(一):常用命令(2)
  3. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事
  4. ubuntu上开启SSH服务
  5. 基于pygame的射击小游戏制作(二)射击子弹
  6. Java后端WebSocket的Tomcat实现(转载)
  7. MySQL主从复制(二)
  8. 机器学习的简单逻辑回归的Advanced Optimization
  9. .NET 6新特性试用 | 最小Web API
  10. java 网页通讯_Vue+Java 通过websocket实现服务器与客户端双向通信操作
  11. 华为Mate 40 Pro钢化膜上手:6.6寸大曲率瀑布屏 黑边加速消失
  12. Ubuntu gitweb 安装配置
  13. 刚接触mybatis,很容易分不清#{id}和#{param1}的使用情况,本篇文章详解了两者的作用以及使用情况
  14. vue数组转对象、JSON数据处理
  15. 基于 InVEST 模型的水涵养功能评估数据获取
  16. photoshop中如何给图片加水印和去水印
  17. 移动端网页字体过多时,字体被自动放大问题
  18. 现代软件工程-构建之法---第一章 练习与讨论
  19. Spring retry重试框架
  20. 【Shotcut】开源免费视频编辑软件 - 微信视频编辑利器

热门文章

  1. php 命格算法,具有“一夜暴富”天赋的命格
  2. 微软应用商店的服务器,微软也玩起「快应用」,首批 PWA 应用登陆微软商店
  3. android3d编程,Android编程实现3D立体旋转效果的实例代码
  4. 【平差软件学习---科傻】四、科傻二等水准平差(参数设置和in1文件讲解)
  5. 神仙级Python入门教程,从入门到精通,看这一篇就够了!!!
  6. 获取年、季度、月份的开始时间和结束时间,到时分秒
  7. 2016全国大学生计算机设计大赛,我校获2016年(第九届)中国大学生计算机设计大赛全国二等奖...
  8. MacBook通过MacBook安装Windows系统出现“下载windows支持软件时未能储存到所选驱动器” 折中方案
  9. 智能交通的深度学习综述-基于图卷积神网络
  10. STEP文件格式(*.step, *.stp)是什么软件。怎样打开