首页
社区
课程
招聘
密码分析之常规加密技术习题(一)
发表于: 2004-11-19 22:18 5433

密码分析之常规加密技术习题(一)

2004-11-19 22:18
5433
我们以后会有很多的密码分析习题做:D
来一题吧,稍后俺会给出答案,大家一起来做!
Ok,Let's Go!!!

本题的目的是显示一次一密(one-time pad)方式的不可破译性。假定我们正在
使用具有27个字符的维吉尼亚(Vigenère-Algorithm)方案,其中第27个字符是空格符,但是使用与消息
一样长的一次性密钥。

给出密文:
  
     ANKYODKYUREPFJBYOJDSPLREYIUNOFDOIUERFPLUYTS

找出对应下列明文的密钥:
     
     MR MUSTARD WITH THE CANDLESTICK IN THE HALL

并找出对应下列明文的另一个密钥:

     MISS SCARLET WITH THE KNIFE IN THE LIBRARY

对上述结果进行评论。

     此题摘自<<Cryptography and NetWork Security:Principles and Practice>>

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (9)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果轮转规定相同的话,应该不难得到密钥:

第一个密钥的前5位是:OWKMU

第二个密钥的前5位是:OFSGO

不知有没有计算上的错误.
2004-11-20 02:05
0
雪    币: 212
活跃值: (105)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
Evileast 的答案应该是对的,我没有都看完。

公式应该是:
密文-明文+I  (空格) = key    吧?

如第一字母的密文是 A( 在字母表中排1),明文是 M(在字母表中排13)。

key 就是
*  1-13+1 (不可能是负数)
* 1+26-13+1=15

15 就是字母表中的 O( 象 evileast 说的)

不全找了,很难数哎,加上脚趾也不够 26 个  :p

对不对?
2004-11-20 07:44
0
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy
4
“一次一密”之所以不能破译是因为没有验证的标准
一个问题,有无穷多个答案,只有一个正确
却不能知道哪个才是正确的
就等于没有答案
2004-11-20 14:37
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
5
注意是27个字符的维吉尼亚密码方案,第27个字符是空格,请兄弟们再仔细
:D
2004-11-20 19:09
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 cnbragon 发布
注意是27个字符的维吉尼亚密码方案,第27个字符是空格,请兄弟们再仔细
:D


据我所知维吉尼亚密码方案和one-time pad并没有太大关系,
one-time pad只能说算是维吉尼亚密码方案的特例,不知楼
主一会说是one-time pad,一会又说是维吉尼亚密码方案,
不知会不会引起误导.
2004-11-20 23:37
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
如果空格也算入加密单位那可按下面的表格在换算时使用:

a  b  c  d  e  f  g  h  i
0  1  2  3  4  5  6  7  8

j  k  l  m  n  o  p  q  r
9  10 11 12 13 14 15 16 17

s  t  u  v  w  x  y  z  _
18 19 20 21 22 23 24 25 26

其中"_"表示空格.
因为一共有27个字符所以要在取模时模27.

所以加密有Ci= Pi+ Ki mod 27 (i表示第i个字符)
    解密有Pi= Ci- Ki mod 27
从而也有Ki=Ci-Pi mod 27,
密文第一个字母是"a"(0),对应名文"m"(12)
所以有K1=C1-P1=0-12=15 (mod 27),也就是"p",   
依此类推有xlmv.....
所以第一个密钥是pxlmv.....第二个密钥是pfwgp.....以后的和懒得算了.
2004-11-21 00:24
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
8
最初由 evileast 发布



据我所知维吉尼亚密码方案和one-time pad并没有太大关系,
one-time pad只能说算是维吉尼亚密码方案的特例,不知楼
........


Vigenère密码的密钥和明文共享相同的字母频率分布,所以它对于应用统计技术进行密码分析也是脆弱的。对抗此类密码分析的根本方法是选择与明文一样长,并且与之没有统计关系的密钥。若密钥为非周期无限序列,则相应的密码为非周期多表替代密码。此时,每个明文字母都采用不同的替代表进行加密,称作是一次一密钥密码,这是一种在理论上惟一不可破的密码。这种密码对于明文的特征可实现完全隐蔽,但由于需要的密钥量和明文消息长度相同而难以实用。为了减少密钥量,实际中多采用周期多表替代密码。

我想是不会引起误导di...:D
:D此题摘自<<Cryptography and NetWork Security>>
2004-11-21 07:57
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
9
给出我的答案和程序

第一个密钥:PXLMVMSYDOFUYRVZWC TNLEBNECVGDUPAHFZZLMNYIH
第二个密钥:PFTGPMIYDGAXGOUFHKLLLMHSQDQOGTEWBQFGYOVUHWT

程序如下:为了编程的方便,程序中我用数字6带替了空格

#include <iostream.h>
#include <string.h>
//27个字符的维吉尼亚方案,第27个字符是空格

char table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ6";
char VigeTable[28][28]={'0'};
char CipherText[]="ANKYODKYUREPFJBYOJDSPLREYIUNOFDOIUERFPLUYTS";
char PlainText1[]="MR6MUSTARD6WITH6THE6CANDLESTICK6IN6THE6HALL";
char PlainText2[]="MISS6SCARLET6WITH6THE6KNIFE6IN6THE6LIBRARY6";

void InitTable(int linenum, int offset)
{
        for(int k=0;k<27;k++)
                VigeTable[linenum][k]=table[(k+offset)%27];
}

int GetColumnNum(char c)
{
        for(int i=0;i<27;i++)
        {
                if(table[i]==c)
                        return i;
                else continue;
        }
        return -1;
}

int GetKeyLineNum(int ColumnNu,char c)
{
        for(int j=0;j<27;j++)
        {
                if(VigeTable[j][ColumnNu]==c)
                        return j;
                else continue;
        }
        return -1;
}
void GetKey(char PlainTexti[],int L)
{
        int cnum,Lnum;
        for(int p=0;p<L;p++)
        {
                cnum=GetColumnNum(PlainTexti

);
                Lnum=GetKeyLineNum(cnum,CipherText

);
                cout<<table[Lnum];
        }
        cout<<endl;
}

main()
{
        int L1,L2,i;
        L1=strlen(PlainText1);
        L2=strlen(table);
        for(int t=0;t<L2;t++)
        {
                InitTable(t,t);
        }
        GetKey(PlainText1,L1);
        GetKey(PlainText2,L1);
}

2004-11-21 08:12
0
雪    币: 211
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
一次一密虽然保密性强
但是大量随机密钥的产生却是个问题
如何产生出用来生成大量密文的真随机密钥呢?
2004-11-22 10:55
0
游客
登录 | 注册 方可回帖
返回