DAY 4- 对称式、非对称式加密概要

你的心脏不是对称的,就跟你的脸一样。

Alice and Bob

首先要隆重介绍,密码学永远的男主角跟女主角,Alice 和 Bob。
他们两个是青梅竹马、是情侣、是老师跟学生、是小王子跟他的玫瑰、是我跟你。

他们代表着互相通讯的两人。

Alice 永远想要传讯息给 Bob,而 Bob 永远想要知道 Alice 传了什麽给他
(绝对没有不读不回这种事,那是讨厌的人才会做的事)

於是Alice 和 Bob 会用各式各样的加密方式,传送他们的讯息。
Eve 是个小变态,他会在中途偷听他们传了什麽,但是他不会窜改讯息。
但是 Oscar 就没那麽简单了,Oscar是坏人,他不仅会偷听他们的讯息,还会窜改讯息(坏吧)。
除此之外,还有Charlie、Issac、Ivan、Justin、Mallory、Matilda、Peggy、Steve、Walter 等等等等等。
每个人都有不同的能力(好像在玩游戏),代表着不同的角色。

名词解释

  • 明文(plaintext) :加密前的讯息。
  • 密文(ciphertext):加密後的讯息。
  • 密钥(key) :用来加密的钥匙,通常用k表示

对称式加密

所谓对称式加密(Symmetric Encryption),就是加密跟解密用的密钥是同一个。

对称式加密相对於非对称式加密( 又称公钥加密 )。

白话文来说,假设Alice 要寄信给 Bob,那麽Alice要将她的信投到Bob的信箱之前,会用一把钥匙把信箱打开,然後把信投进去(假设他的信箱没有投递的孔)。接着Bob要拿信的时候,就用一把一模一样的钥匙把信箱打开,得到他的信。

这样一个用同样密码加密跟解密的过程,就叫对称式加密。

对称式加密的底下,又分成串流密码(stream cipher)和区块密码(block cipher)。
差别在於,加密是以位元为单位、区块加密是以区块为单位。
而串流加密的速度通常比较快、区块密码速度较慢。

详细原理我们留待明後天介绍。

非对称式加密

非对称式加密(Asymmetric Encryption),又称公钥加密。
相对於对称式加密,是一种加密和解密使用不同密钥的加密方式。

非对称式加密稍微复杂一些,我举个例子好帮助理解。

假设Alice要寄信给Bob。
於是Bob就拿出一个盒子和锁,这个锁就是公钥(public key)。
接着Alice把信放到盒子里锁起来,寄给Bob。
只有Bob才打得开这个盒子,因为只有他拥有锁的钥匙,也就是私钥(private key)

要注意:这个私钥需要保藏的非常好。
而私钥可以推导出公钥,但是私钥不能推导出公钥。

於是在真实情况底下,做为一个收件人,你得先产生一个私钥、并用这个私钥推导出公钥。

接着,公开你的公钥给所有人。
当有人想要传讯息给你的时候,他使用你的公钥加密他要传的讯息,这个讯息一经加密,就只有你解的开。

你收到讯息後,就可以使用私钥将密文转换回明文。

比较

密钥管理

由於对称式加密在不同对象之间就需要不同的密钥(并且要储存),
而公钥加密只需要产生一对公私钥,只需记住自己的私钥即可,
所以公钥加密在密钥管理上较为方便。

速度

对称式密较为简单,因此速度较快。

安全性

对称式加密的密钥长度较短、非对称式加密的密钥较长,
除此之外,运算的复杂度也让非对称式加密更为安全。
对称式加密的特性是,速度快,安全度较低。
非对称式加密的特性是,速度慢,安全度较高。
而运算的速度跟安全性同等重要,毕竟一个极度安全,但要算到天荒地老的演算法也没有人要使用吧。
因此在实务上,会将两者交替使用,之後会再做详细介绍。

图片来源:
https://www.reddit.com/r/ProgrammerHumor/comments/8v3mqy/is_this_cryptography_meme_relatable_to_programmers/
https://sectigostore.com/blog/5-differences-between-symmetric-vs-asymmetric-encryption/
https://sectigostore.com/blog/types-of-encryption-what-to-know-about-symmetric-vs-asymmetric-encryption/

参考资料:
https://sectigostore.com/blog/types-of-encryption-what-to-know-about-symmetric-vs-asymmetric-encryption/
https://www.digicert.com/faq/ssl-cryptography.htm


<<:  关於计算机,你必须知道的事: CPU 快取

>>:  EP 8: Build a MockData and Register Page Route to Shell

[Day 8] -『 GO语言学习笔记』- 列举(enums) & 变数作用范围(Scope)

以下笔记摘录自『 The Go Workshop 』。 列举 列举是一种定义一系列常数的方式,常数是...

JavaScript入门 Day15阵列

今天终於没有要讲数字的语法了,要讲的是阵列 那J个是什麽呢,他是方便存放资料的资料型态 今天若是有多...

Python 练习

今天我们一样要来练习,今天要来练习的也是在数学中常常用到的。那我们就开始吧。 题目1 让使用者输入数...

【课程推荐】2021/3/13~3/14 软件需求塑模与需求规格文件撰写实务班

课程目标 了解系统分析实务、系统分析工具之应用、逻辑资料库设计技巧、系统分析产出文件、同仁审查等,以...

Gulp 一键部属到 Github Pages DAY93

在介绍 gulp-gh-pages 之前 我们必须先在 GitHub 上新增一个远端数据库 点选 N...