异或运算      

        在介绍序列密码之前,我们将介绍一种运算法则,即异或运算(xor),其符号是⊕,当我们输入同时为真或者同时为假时,输出为假;否则,输出为真。异或运算符合如下的运算法则

1、交换率。a ⊕ b = b ⊕ a;
2、如果输入相同,输出0。a ⊕ a = 0;   0 ⊕ 0 = 0,1 ⊕ 1 = 0;
3、和0做异或运算时,输出为它本身。 a ⊕ 0 = a; 0 ⊕ 0 = 0, 1 ⊕ 0 = 1。

        以上仅仅是我们对于单个bit运算的定义,在实际的运算过程中我们如果要处理多个bit,此时我们需要把它们转码成二进制序列的形式,最后依次对每一对二进制字符进行运算,如图所示

   

 

序列密码        

        序列密码又被称之为流密码,是一种对称加密算法,其加密和解密双方使用一串与明文相同的密钥流,与明文流组合来进行加密或解密。

       例如当Bob与Alice通信时采用流密码并且已提前预设好了密钥Key的序列,如何对字母A所对应的编码进行加密呢?

       对于字母A所对应的ASCII码65而言,其二进制为1000001;假设密钥所对应的编码为0011100,则进行加密后得出字母A所对应的编码为1011101:在以上加密过程中,字母A编码的讯息由Bob发出,途径加密系统中的密钥转变为加密后的编码,最后发送给Alice,并由Alice的密钥解密为字母A原本的编码。

       在以上过程中,由于Bob和Alice持有的密钥相同,故称之为对称型密码;该种密钥体现为一种密钥流,是一种由伪随机数生成器所生成的一串随机数。这种密钥流的安全性决定了序列密码的安全性;因此这种伪随机数生成器必须保证种子的长度和周期足够大以此抵抗统计学上的暴力枚举并且具有雪崩效应等等重要特性。

OTP密码

       一次性密码本(One-Time Pad)就是一种序列密码但不同于上述过程的是其密码流的产生依赖于真随机数生成器(TRNG)并且这种密码的使用过程是一次性的。其安全性已由香农所证明。下面我们将使用一个例子展现在使用这种序列密码加密的过程产生的问题。

      假设攻击者截获了两份用同一份密钥k来进行OTP加密的文件,攻击者可以对此二者进行xor运算,这就相当于对这两份密文所蕴含的明文进行了xor运算;

对于任何一份密文而言

         

对密文间进行xor运算,由于相同的密钥发生了xor运算相互抵消,于是有:

         

      最终,攻击者并不能有效地得到明文,而是两份明文xor的结果。在这种情况下,我们又如何去破解密文呢?假设我们有一些用同一个密钥K生成的密文。如果我们能正确的猜出其中一个Cj密文对应的明文,就可以求出共享密钥K

由于

          

因此

         

此时我们知道了密钥K,接下来就可以势如破竹的解出其他的密文。

       然而我们往往不能猜出密文的全部内容,只能猜出部分有效内容,对于英文而言,这是相对容易的,我们可以轻易的验证我们的猜测是否正确,即使我们只能猜出部分内容,这也足够了因为凭借这一部分就可以管中窥豹,推理出其他的部分。

      关于OTP密码就先更到这里,我们下期再见。

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐