假设sender想发送消息给receiver,他想安全地发送消息并且不被任何人知道。我们假设Bob是sender,Alice是receiver
消息称为明文,加密后的消息称为密文,密文经过解密后又会恢复到明文。
一般情况下,明文用符号 MM 表示,密文用符号 CC 表示。加密函数为 E()E(),解密函数为 D()D(),因此有如下公式:
E(M)=CE(M)=C
D(C)=MD(C)=M
密码学除了提供机密外还应有以下作用:
鉴别
Alice 可以鉴别消息确实是 Bob 发送的
完整性
Alice 可以确认消息没有被修改
抗抵赖
Bob 不能抵赖自己给 Alice 发送了消息
密码算法也叫做密码,是用来加密解密的数学函数。如果密码的安全性是靠保护密码算法来决定的,那么这种密码是受限制的。因为一旦算法泄露,那么保密性就无从可谈了。
现代密码学用密钥解决了这个问题,密钥用 KK 表示,密钥的取值空间叫做密钥空间,有了密钥,加密可解密就变成如下:
Ek(M)=CEk(M)=C
Dk(C)=MDk(C)=M
所以,基于密钥的密码算法的安全就由密钥决定,这样你的加密算法和解密算法就可以大胆地公开,只要窃听者不知道密钥,他也无法知道你的明文。
一般情况下,对称加密算法指的是加密密钥和解密密钥相同。使用这种算法,sender 和 receiver 需要提前商定一个密钥并且不能对外公开。所以密钥的安全性是密码安全的关键
Bob 和 Alice 商定好一个密钥
K
并通过某种方式沟通好,然后 Bob 用K
加密消息后发送给 Alice,Alice 用密钥K
解密。整个过程需要保证密钥不被泄露,安全性较差。
非对称加密算法中,加密密钥和解密密钥不同。加密密钥叫做公钥,解密密钥叫做私钥。公钥可以不保密,但是私钥一定要保密。
Bob 用 Alice 的公钥加密一段文字并发送给她,Alice 用自己的私钥解密,在这个过程中,密钥不会被传输,安全性很高。
总有人尝试用各种方式破解密文,常见的密码攻击方式有以下几种:
唯密文攻击
攻击者有一些明文和密文,他通过分析密文尽可能地推出明文或找到密钥
已知明文攻击
攻击者不仅知道密文还知道明文,从而尽可能地推出密钥或者加密算法,从而破解密码
选择明文攻击(略)
选择密钥攻击(略)
选择密文攻击(略)
软磨硬泡攻击
不断地一个一个试
在计算机出现之前,密码学是基于字符的密码算法的。计算机出现之后,密码学是基于位的密码算法。例如:
如果我有如下明文:
“you are beautiful”
在计算机之前,加密是针对每个字符的,例如,我可以吧明文中的e
都替换成a
那么加密后的密文就是:
“you ara baautiful”
上面只是单纯地修改了某个字符,但是在计算机中,一个字符占一个字节,每个字节由8位二进制数组成,加密是对这些二进制数操作的。