1.运用场景
首先题目的描述是这个样子的:
用DES算法加密一个64位的明文,其中秘钥的长度是56位。攻击者是知道明文和密文的,但是不知道秘钥是什么。假设攻击者每一秒中能做10的10次方个加密或者解密算法,现在给了攻击者一个密文,要找出其配对的明文平均需要花费的时间是多少?
这道题目我在批改的过程中发现基本上没有学生能够答对的,能写出正确的解题过程的学生我到现在还没有发现。
没有把这道提做出来的主要原因,第一是真的不会做,第二没有理解题目的意思,概念不清楚。
我们要花费的时间其实就是我们需要找出秘钥的时间。
现在知道的就是一秒钟可以计算的可能性是10的10次方,现在我们要破解秘钥,总共是56位的二进制数,要找到这个秘钥我们平均需要尝试的次数是多少是解决这个问题的关键。
下面我们就来详细的描述一下这道题目要怎么来解决。
说明:如果你不幸也要做这道题,请你先自行尝试,不能得到正确答案再来参看解析,谢谢合作~
2.解题思路
这题要求解的是平均需要花费的时间。我们要算的是要找到这个秘钥平均需要花费的时间。现在秘钥总共是56位,那么破解这56位平均需要花费的时间是多少。就是这道题我们需要求解的问题。因为我们找到这个秘钥之后是可以很快的通过密文得到我们的明文的。
我们先从简单的例子分析,然后来得到我们这道题的答案。
假设我们秘钥就只有两位,那么我们需要猜几次。
由于有两位那么这个秘钥的可能就有四种可能。
分别是 0 0,0 1,1 0,11 这四种可能。那么我们可能一次就猜中了,这个是最好的情况,或者第一次没有猜中,第二次猜中;或者前两次都没有猜中,第三次猜中,或者是前三次都没有猜中,那么我们也知道秘钥是什么,就是剩余的那个。也就是最坏的情况下我们需要猜测3次,最坏的情况我们需要尝试3次,注意注意是三次。不是四次。
我们需要猜测的次数:
1
2
3
那么平均数就是 (1+2+3)/3
后面的个数表示有3个数,所以说如果秘钥的长度2那么我们平均猜测的次数就是6/3=2 就是两次就可以
假设我们的秘钥是三个,那么秘钥的可能就有8种:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
假设我们就按照这个顺序来猜测,假设秘钥就是 0 0 0, 那么我们猜 0 0 0, 只用一次,这个是最好的情况。假设秘钥是 1 1 1, 我们按照我们刚才排列出来的顺序来猜测,发现猜了7次,你也没有猜中,那么我们也知道这个秘钥就是1 1 1,最后第8次是不需要尝试的,前7次尝试过后你也知道了秘钥的1 1 1.
所以我们猜测的次数可能是:
1
2
3
4
5
6
7
那么我们平均需要猜测的次数就是(1+2+3+4+5+6+7)/7=4
上面这个不就是个等差数列么,下面是需要猜测的次数的个数
总共的个数有 2n−1
等差数列前 n 项和公式 :