密码学科普:多个加密算法的详细说明,caeser

密码学的基本原理

所谓加密,就是一个改变数据,使之变得不可辨识、无授权者无法使用的过程;同时,它还要保证解密过程能成功把改变后的数据恢复成原始形式。安全技术一般都把加密的数学方法和用于加密的参数(叫做 “key(密钥)”)区别开来。被选定的密钥(通常是一段随机的字符串)也是加密过程的输入,对加密过程来说也是必不可少的。同一把密钥往往也是解密过程的必要输入。

这个保护过程的原理是,只要密钥(有时候也叫 “口令”,password)没有暴露、只被得到授权的人所知,那么原始数据就不会暴露给其他人。只有知道密钥的人才能解密密文。这个思路,我们叫 “私钥” 密码设计学(译者注:称作 “对称密码学” 可能更恰当一些,因为加解密过程是对称的,都使用同一把密钥),也是最广为人知的加密形式。

那么,加密之所以必要的基本理由如下:

机密性(confidentiality)—— 在传输数据的时候,不希望窃听者能够知道被广播的消息的内容。在保管数据的时候不希望未经授权的人(比如黑客)能够访问,也是同理。

身份认证(Authentication)—— 相当于签名。收信者希望能确证该信息是特定的某个人发出的,其他人不能冒充(甚至初始发信方后面想抵赖也不可能)。

完整性(Integrity)—— 这意味着收信者能够证实自己得到的数据是完完整整、没有经第三方改动过的。

不可抵赖性(Non-repudiation)—— 防止发信方抵赖自己创建过、发送过某条消息。

译者注:作者在这里提到的才算是现代密码学研究的范围。比如身份认证和不可抵赖性,都是很重要的属性,但是在实用中几乎与加解密过程无关,但对数字签名的研究毫无疑问是密码学的内容。加解密的安全性跟机密性有关,只是现代密码学的一部分。

Cipher

密码设计学是(通过加密)隐藏敏感数据的艺术和科学。它包括加密过程(就是在原始的 “原文” 上使用加密算法)和解密过程(就是在密文上使用算法,使之恢复到可读的形式)。

要解释什么是 Cipher,最好还是给你看几个简单的例子:

波利比乌斯密码

波利比乌斯密码(Polibius Cipher)也是一种字符替换型密码。在我这个示例中,我用的是一个 6×6 的二维矩阵,可以把所有的大写字母和数字 0 到 9 都包括进去。然后我们可以得出下表:

有了这个举证,我们就可以开始代换了。比如,字母 “A” 可以表示成 “1 × 1”,或者 “X = 1,Y = 1”,甚至再简化成 11。再举例,字幕 “N” 可以表示成 “2 × 3”,或者 “X = 2,Y = 3”,简化后就是 23。

来试试加密一条简单的信息:

消息(原文):ENCRYPT ME 2 DAY

加密后的数据(密文):51–23–31–63–15–43–24 13–51 55 41–11–15

纳入生僻字符后,这张表可以变得很大很复杂。而且,定期地随机改变字符的位置也会让暴力破解无从下手。这很像我们今天在高级计算型加密方法所用的多态性(polymorphism)。

凯撒密码

历史最悠久的加密算法之一就是以其创造者凯撒而闻名的凯撒密码(Caeser Cipher)。他用这套方法来保证跟罗马将军们的安全通信,这样罗马帝国的敌人们就算拿到信也没有办法读懂。凯撒密码是加密的一种初级形式,很容易被破解,所以今天已经基本不会用在任何安全用途中了。

从原理上来说,凯撒密码就是重排字母表,不同的位移值也会使得编码后的数据完全不同。位移值,顾名思义,就是通过让字母左移或者右移一定位数来生成密文的数值。(译者注:所以,在这里,大家可以把凯撒密码理解成一种根据字母表顺序的位移来加密的算法(cipher),而位移值就是那个 Key,密钥。)

这里我们用右移 3 位的做法来看一个实际的例子:

英文原文:ENCRYPT ME

密文:HQFUBSW PH (解密时候要相应左移 3 位才能解密)

上面这条消息可以通过尝试所有可能的位移值来暴力破解:不断尝试新的位移值,直到解出来的原文看起来像样子。更加复杂的密码比如 Vigenere 密码和 Gronsfeld 密码也是用同样的原理设计出来的。但是解密起来就很麻烦,因此每个字母都代表一个位移值。

维吉尼亚密码表

在理解密码设计学之前,我们先要了解加密算法的工作原理,因为它们是所有加密过程的基础。速记是一种记录隐藏信息的方法,实际上可以归为古典密码设计学一类,因为现代密码设计学已经成了 “计算机安全” 的代名词。

多态性

多态性是密码设计学中较为高级的部分,在计算机加密技术中最为常见。多态性指的是,一种加密方法在每次使用时都会产生不同的结果,而且在每次使用过后都会发生改变。多态性常见于计算机加密算法。也就是说,如果我们将相同的数据加密两次,每次都会得到一个不同的加密结果。

我们用汽车钥匙来打个比方。现在,我们只需要在一个小巧的电子遥控设备上轻轻一按,就可以解锁汽车了。当你解锁车门时,你或许从来没思考过其中的原理 —— 你按下按钮的那一刻,会有一段特定的数据发送到你的车上,一旦匹配成功,车门就解锁了。要实现这点,最简单的方法是为每个遥控设备设定不同的频率。但是,这样管理起来会很麻烦。因此,所有遥控设备都采用了同样的波长,但是使用不同的算法(滚动码)来生成发送给汽车的数据。这些就是多态性算法。

由于这些算法每次使用过后都会发生改变,很难对其进行逆向工程。即使有黑客破解了算法(首先,破解多态性算法本身难度就很大),他还得找到与该算法匹配的汽车/钥匙(这又是一项复杂的任务)。

相关推荐

最新

相关文章