在前面聊到 HTTPS 时,我们有提到透过加密,可以让你传输的资料不会被「中间人」所窃取。
但这会有一个问题产生,如果加密像是用一把钥匙将装满资料的盒子锁住,再用同一把钥匙解开的话,我们要怎麽把这把钥匙交给对方呢?在传递的过程中不也会有「中间人」可以偷走吗?
回答这个问题之前,我们得先了解两种类型的加密演算法,一种是「对称式」加密,另外一种当然就是「非对称式」加密。
这种用同一把锁「加密」及「解密」的演算法就称做「对称式加密」,例如凯撒密码,就是典型的对称式加密。
我们把要传的资料称做「明文」,被加密过的资料称做「密文」,凯撒密码的原理就是将明文的字母位移某个数目,例如往右位移 3,则 A
会变成 D
、B
会变成 E
,而 Z
会绕回来变成 C
,以此类推。
假如我们要加密一串明文 Hello
,位移量设为 3 的话,输出的密文就会是 Khoor
,一串大家看不懂的文字。
*凯撒密码
其中 3 这个位移量就是我们所谓的钥匙(密钥)。
假如我们两个之间已经先见过面了,互相确认过我们加解密的密钥是 3,这样我只要传出一个加密後的文字 Khoor
,你再用密钥 3 将密文反过来运算(解密),就能得到明文 Hello
了。现实中的对称式加密算法当然不会像凯撒密码这麽简单,但原理是类似的,都是通过同一把钥匙将盒子锁上,以及解锁。
不过,我想你也发现了这种「对称式」加密的最大缺陷,便是我们两个要事先沟通密钥为何,这在网路世界中基本上就不可行了,透过 TCP/IP 体系的沟通没办法做到「私下」,无论如何两者间传递的讯息都需要其它节点帮忙转送封包。
那这可怎麽办?还好有「非对称式」的发明,完美的解决这个难题。
这种聪明的做法是将钥匙分成「公钥」和「私钥」两把,用公钥加密的资料,只能用私钥解密;用私钥加密的资料,只能用公钥解密。
为何要用公与私呢?这是因为公钥便是公开给大家的,用途就是让别人用这把公开的钥匙加密资料,这样只有我自己可以解密,其它人都无法。
*Bob 用 Alice 的公钥加密,只能被 Alice 的私钥解开
有了非对称式加密这种演算法,居然就能在公开的情况下设定个人秘密,那麽我们上网时所使用的 HTTPS 是否都是用非对称式加密来保护我们的资料?更进一步来说,是否就可以抛弃对称式加密了?
事实上,HTTPS 两种都有用!
当初步的连线建立时,会透过非对称式加密来传输资料,至於是什麽资料呢?其实是之後再加密其它资料所用的「对称式加密密钥」。
这是由於相较於「对称式加密」而言,「非对称式」加密需要的运算量更大,也就意味着吃的资源更多,而且速度可能更慢。如果要长期的交换资料,每次都用非对称式加密来处理资料,效能远不如对称式加密来的好。
当您在Excel中直接输入AAAA,依旧是4个A,而喵喵酱我在Excel表格输入则是这个样子滴: 1...
前言 我们花了将近一周的时间来介绍部署深度学习模型背後的概念,我想大家应该很想知道究竟该怎麽实作,所...
在这个系列我们教过很多种函式嘛,但那些都是Python内建的,今天就要来教你怎麽自订函式。首先先带你...
大家昨天设定完Firebase有没有发现一个问题啊,要开启Google登入时,专案必须要有SHA1指...
本文同步更新於blog 情境:原本的生物分类学(界门纲目科属种) <?php namesp...