初探网路安全(四):加密演算法,何谓对称及非对称式加密?

在前面聊到 HTTPS 时,我们有提到透过加密,可以让你传输的资料不会被「中间人」所窃取。

但这会有一个问题产生,如果加密像是用一把钥匙将装满资料的盒子锁住,再用同一把钥匙解开的话,我们要怎麽把这把钥匙交给对方呢?在传递的过程中不也会有「中间人」可以偷走吗?

回答这个问题之前,我们得先了解两种类型的加密演算法,一种是「对称式」加密,另外一种当然就是「非对称式」加密。

对称式加密

这种用同一把锁「加密」及「解密」的演算法就称做「对称式加密」,例如凯撒密码,就是典型的对称式加密。

我们把要传的资料称做「明文」,被加密过的资料称做「密文」,凯撒密码的原理就是将明文的字母位移某个数目,例如往右位移 3,则 A 会变成 DB 会变成 E,而 Z 会绕回来变成 C,以此类推。

假如我们要加密一串明文 Hello,位移量设为 3 的话,输出的密文就会是 Khoor,一串大家看不懂的文字。

凯撒密码
*凯撒密码

其中 3 这个位移量就是我们所谓的钥匙(密钥)。

假如我们两个之间已经先见过面了,互相确认过我们加解密的密钥是 3,这样我只要传出一个加密後的文字 Khoor,你再用密钥 3 将密文反过来运算(解密),就能得到明文 Hello 了。现实中的对称式加密算法当然不会像凯撒密码这麽简单,但原理是类似的,都是通过同一把钥匙将盒子锁上,以及解锁。

不过,我想你也发现了这种「对称式」加密的最大缺陷,便是我们两个要事先沟通密钥为何,这在网路世界中基本上就不可行了,透过 TCP/IP 体系的沟通没办法做到「私下」,无论如何两者间传递的讯息都需要其它节点帮忙转送封包。

那这可怎麽办?还好有「非对称式」的发明,完美的解决这个难题。

非对称式加密

这种聪明的做法是将钥匙分成「公钥」和「私钥」两把,用公钥加密的资料,只能用私钥解密;用私钥加密的资料,只能用公钥解密。

为何要用公与私呢?这是因为公钥便是公开给大家的,用途就是让别人用这把公开的钥匙加密资料,这样只有我自己可以解密,其它人都无法。

Bob 用 Alice 的公钥加密,只能被 Alice 的私钥解开
*Bob 用 Alice 的公钥加密,只能被 Alice 的私钥解开

HTTPS 是透过哪种加密演算法呢?两种演算法的优缺点

有了非对称式加密这种演算法,居然就能在公开的情况下设定个人秘密,那麽我们上网时所使用的 HTTPS 是否都是用非对称式加密来保护我们的资料?更进一步来说,是否就可以抛弃对称式加密了?

事实上,HTTPS 两种都有用!

当初步的连线建立时,会透过非对称式加密来传输资料,至於是什麽资料呢?其实是之後再加密其它资料所用的「对称式加密密钥」。

这是由於相较於「对称式加密」而言,「非对称式」加密需要的运算量更大,也就意味着吃的资源更多,而且速度可能更慢。如果要长期的交换资料,每次都用非对称式加密来处理资料,效能远不如对称式加密来的好。

参考资料

  1. Wiki - 凯撒密码
  2. 改变世界的九大演算法

<<:  【第二十四天 - XSS Lab(2)-2】

>>:  30天学会C语言: Day 22-阵列处理

在Excel中输入 AAAA……

当您在Excel中直接输入AAAA,依旧是4个A,而喵喵酱我在Excel表格输入则是这个样子滴: 1...

[Day 07] 使用 fastAPI 部署 YOLOv4 (1/2) — 以内建 Client 进行互动

前言 我们花了将近一周的时间来介绍部署深度学习模型背後的概念,我想大家应该很想知道究竟该怎麽实作,所...

每个人都该学的30个Python技巧|技巧 22:想怎麽设就怎麽设的自订函式(字幕、衬乐、练习)

在这个系列我们教过很多种函式嘛,但那些都是Python内建的,今天就要来教你怎麽自订函式。首先先带你...

Flutter基础介绍与实作-Day19 FireBase-设定问题

大家昨天设定完Firebase有没有发现一个问题啊,要开启Google登入时,专案必须要有SHA1指...

Day48. 范例:生物分类学(组合模式)

本文同步更新於blog 情境:原本的生物分类学(界门纲目科属种) <?php namesp...