Chapter 1.1 Classical Cryptography

 

1. Caesar's Cipher

  (1)Encryption Method

      把文本中的每个字符循环向后移动3位,即A->D,B->E,.....,Z->C。该方法的key是固定的3(也可以说不存在key),因此,只要了解过Caesar cipher的就能够对该方法加密的文本进行解密。

  (2)Decryption Method

      把ciphertext中的每个字符循环向前移动3位,即可得到plaintext

    补充:还有一种移动13位的加密方法,称为ROT-13(这仍然被广泛使用在一些在线网络论坛中)。

 

2. The Shift Cipher

  (1)Encryption Method

      把文本中的每个字符循环向后移动K(Κ∈{0,25})位,该方法的key是一个变量,相当于是Caesar Cipher的改进方法。

  (2)Decryption Method

      可以通过brute-froce方法寻找key,因为key的取值范围只有26个,因此可以通过brute-froce方法在线性时间内求出K。

      另外一种改进的攻击方法是:定义pi表示Standard English Text中第i个字符出现的频率,可以得到如下公式:

  定义qi表示ciphertext中每个字符出现的频率,假设key表示为k,由于第i个字符可以被mapping为第(i+k)个字符,所以qi+kpi,因此可以统计计算如下公式求出k:

  找到一个j满足Ij≈0.065,则该j即为key

 

3.  The Mono-Alphabetic Substitution Cipher

  (1)Encryption Method

      在shift cipher中,map method是从0-25中寻到一个固定的key值进行mapping。而本方法中,key的选取原则是对字母进行一对一的mapping,这样的话key的选取方法就有26!=26*25*...*1种,近似等于288

  (2)Decryption Method

      对于该加密方法使用brute-force是不适合的(以当前计算机的算力,brute-force是能够跑出来的),由于Standard English Text中每个字符出现的频率可以统计出来,因此通过分析其ciphertext中每个字符出现的频率进而判断出和plaintext中每个字符的映射关系。(具体实现方法参考4部分)

     

4. The Poly-alphabetic Shift Cipher(Vigen`ere Cipher)

   (1)Encryption Method

      选择一个字符串作为key,并将字符串重复若干次直到和plaintext的长度一样。例如假设key为“cafe”,其相对于字符‘A’的偏离量分别为2054,则其plaintext中字符移动的位数也就确定下来了。使用字符串“cafe”对“tellhimaboutme”进行加密,则其key为“cafecafecafeca”,得到的相应ciphertext为“VEQPJIREDOZXOE”。

  (2)Decryption Method

      若已知key的长度,假设为 t,则key=k1...ktciphertext 设为c=c1c2......,把ciphertextt取模同余分为t部分(即把偏移量相同的字符分在一组,称为stream),对于任意的j∈{1,...,t},定义一个stream如下: 

对于每一个stream,都有26种移位的可能性,也就是一个stream相当于一个shift cipher。因此,可以采用attack shift cipher的方法,对每一个stream中出现的字符进行频率统计,和Standard English Text中的频率分布相比较,进而求解出字符的偏移量,该方法的时间复杂度为26*t,比brute-force的时间复杂度26t要小很多。

      以上方法的前提是知道key的长度,但若是不知道key的长度呢?又该如何求出key的长度?下面我们介绍一种方法:kasiski's method。其求解key的长度方法如下:从ciphertext中找到重复出现的字符串,计算其间隔,然后取所有间隔的最大公约数,即为key的长度。

      另一种求key的长度的方法是:index of coincidence method,定义如下:求在某段密文中随机的无放回的抽取两个字母相同的概率。

      其求解方法如下:假设key的长度为t,则ciphertext中第一个stream如下:

qi表示stream中第i个字符出现的频率,pi表示Standard English Text中第i个字符出现的频率,假设第一个stream中每个字符移动j位,我们希望对于所有的字符:qi+jpi,又知字符频率分布平方和如下:

因此对于一个stream,我们可以假设τ=1,2,.....,而后对下式进行求解(是对一个stream求解,通过赋予不同的τ值):

找到一个τ=t,使得Sτ≈0.065

 

在一串无规律的字母中,我们随意无放回的抽取两个字母,由于每个字母被抽到的概率都相等,即为1/26,即qi均为1/26,因此抽取两个字母相同的概率为:26*(1/26)^2=0.0385。可得如下计算公式:

如果从一篇文章或者一句话中选取字符,则Sτ≈0.065。这种特性是破译密码的一大关键点,对于正常的单表替换(Mono-alphabetic substitution cipher),其index of coincidence 更接近0.065,而对于多表替换(poly-alphabetic shift cipher),其index of coincidence更接近0.038。

 

转载于:https://www.cnblogs.com/toosimple/p/11057727.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值