来源:哔哩哔哩
2023-01-31 13:05:23
我们先来看看第1篇文章的例子,前面的凯撒密码,它的明文、密文、密钥、加密算法和解密算法分别是什么呢?明文和密文我们一眼就能看出,密钥我们可以看成3。加密算法是每个字母用它后面的第K个字母来替代,解密算法是每个字母用它前面的第K个字母来替代。我们可以用下面的形式来比较数量化的描述:
can define transformation as:
a b c d e f g h i j k l m n o p q r s t u v w x y z
(资料图)
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
mathematically give each letter a number
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
then have Caesar cipher as:
C=E(p)=(p+k)mod(26)
p=D(C)=(C-K)mod(26)
ps,在这里要复习一下求模运算,其中
(-1)mod(26)=(-1*26+25)mod(26)=0+25=25,
(-2)mod(26)=(-1*26+24)mod(26)=0+24=24,
(-3)mod(26)=(-1*26+23)mod(26)=0+23=23.
这样,我们就数量化的表示出了加解密算法,我们看到是符合对称密钥密码模型的。
我们再来思考一下这个对称密钥密码模型。模型由5个要素组成,在这个系统里有一个攻击者,那么我们要考虑几个基础性的问题。
密钥的问题
我们知道密钥是只有双方才能知道的东西,在通信开始之前就需要协商好,而密钥不能用不安全的信道传递,我们需要带外传输。
5个要素中,哪些要素是需要保密起来的?哪些要素是没办法保密的?
(1)明文是需要保密的,
(2)密文是没办法保密的,因为密文是要通过信道传递的,攻击者可以拿到密文,
(3)密钥是通信双方需要保存的一个秘密,根据定义我们知道密钥是不能公开的,
(4)加密算法和解密算法需要保密吗?荷兰有一个密码学家说——“秘密应该全部寓于密钥”,意思是即便在算法公开的情况下,这个系统还是足够安全。这个也是密码学一个最最基础的假设,或者说相当于一个公理性的东西。为什么要做这个假设呢,我们可以想象一个场景。假设我设计了一个密码系统,我认为这个密码系统是固若金汤的,然后我和我的合作伙伴通信,密码算法要找开发人员实现出来。那么合作伙伴和开发人员也是知道密码算法的,就是说有一个小圈子的人是知道密码算法的。如果小圈子里的人出现了“坏人”,那么这个算法就是有危险的。那么如果算法公开的话又有什么好处呢,那就是全世界琢磨这个算法的聪明人会帮助你找出算法漏洞,你可以及时的不再使用这个算法。所以算法可以公开可以不公开,但是不能把希望寄托在算法的保密上,我们只需要保证密钥是保密的即可。目前民用的算法是公开的,军方的算法是不公开的。
现在我们再来学几个分类方法,根据明文被变换成密文的方法,我们来做以下的分类:
替代密码:一个符号被另一个符号来替代,如凯撒密码;
置换密码:符号不变,只不过明文里符号的顺序被打乱了,如羊皮传书;
乘积密码:很多轮的使用替代置换,替代一次之后再替代,置换一次后再置换,更加复杂些。
根据加密和解密的密钥key是否一致来分类:
对称密钥密码:发送和接收方使用的同一种密钥;
非对称密钥密码:加密和解密所使用的密钥是不同的密钥。
根据明文被处理的方式来分类:
分组密码:明文在被处理之前,先对其分组,先分组再加密。分组密码主要用在民用的密码系统里面,处理速度会慢一些;
流密码:明文里来了一个符号就处理一个符号,在计算机参与加密计算后,这个单位还可以是bit,来一个bit处理一个bit。流密码主要用在军方的密码系统里面,处理速度会快一些。
以上就是密码学的基础假设,我们了解了最基本的假设——秘密应该全部寓于密钥。也了解了密码相关的分类定义,接下来,我们如何设计好的密码算法。