两种基本古典密码设计与实现
chap2-古典密码

25个可能的密钥k,适用Brute-Force Cryptanalysis
明文的语言是已知的且易于识别
恺撒密码的特点
单字母密码(简单替换技术) 简单,便于记忆 缺点:结构过于简单,密码分析员只使用很
Cryptography” 提出了不对称密钥密
▪ 1977年Rivest,Shamir & Adleman提出了RSA公钥算法 ▪ 90年代逐步出现椭圆曲线等其他公钥算法 ▪ 主要特点:公钥密码使得发送端和接收端无密钥传输的保密
通信成为可能
第3阶段 1976~
▪ 1977年DES正式成为标准 ▪ 80年代出现“过渡性”的“Post DES”算法,如
Chap2 古典密码
密码学的发展历史
三个阶段:古代加密方法、古典密码和近代密码。
1.古代加密方法(手工阶段)
从某种意义上说,战争是科学技术进步的催化剂。人类自从有了战 争,就面临着通信安全的需求,密码技术源远流长。 古代加密方法大约起源于公元前440年出现在古希腊战争中的隐写术 。当时为了安全传送军事情报,奴隶主剃光奴隶的头发,将情报写 在奴隶的光头上,待头发长长后将奴隶送到另一个部落,再次剃光 头发,原有的信息复现出来,从而实现这两个部落之间的秘密通信 。
➢ 1967年David Kahn的《The Codebreakers》 ➢ 1971-73年IBM Watson实验室的Horst Feistel等几篇技术报告
▪ 主要特点:数据的安全基于密钥而不是算法的保密
第3阶段 1976~
▪ 1976年:Diffie & Hellman 的 “New Directions in
密码学-第2章古典密码

问题:
置换和换位的定义、区别?
作业:
习题2.1、2.2、2.3、2.4、2.6
抽象代数
群:由一个非空集合和一个二元运算组成,并满 足封闭性、结合性、单位元、逆元的代数系统。
乘法群
环:一个集合,可以在其上进行加法和乘法运算 而封闭。
交换环:对于乘法运算可交换
域:非零元都有乘法逆的交换环。
设明文m = (m1, m2, …, mn) ∈Z26n,密文c= (c1, c2, …, cn) ∈ Z26n ,密钥为Z26上的的n×n阶可逆 方阵K = (kij) n×n ,则 c = mK mod 26, m = cK-1 mod 26。
例2.4 设n=2,密钥为 11 8 7 18 -1 K= ,容易计算 K = 3 7 23 11 设明文为Hill, 则相应的明文向量为(7,8)和( 11,11)。于是,相应的密文向量 分别为 11 (7,8) 3 11 ( 11,11) 3 8 77 24, 56 56 )=(23,8), =( 7 8 121 33, 88 77 )=(24, 9 ), =( 7
表2.4称为Vigenere方阵(书P12)。当用密钥字 母ki对明文字母mi进行加密时,Vigenere方阵中 的第ki行第mi列的字母就是相应的密文字母。
例2.2
设明文为 This cryptosystem is not secure, 密钥为cipher, 则密文为:
VPXZGI AXIVWP UBTTMJ PWIZIT WZT。
有限域(伽罗瓦域):GF(2)
第2章 古典密码
主要内容
古典密码中的基本加密运算 几种典型的古典密码体制 古典密码的统计分析
密码学crypt2-古典密码

密码学教师:袁征2012年2月28日第二章古典密码及其破译序言古典密码是密码学的渊源,这些密码大都简单,可用手工或机械实现加解密,现在很少采用。
然而研究古典密码的原理,对理解、构造、分析现代密码都是十分有益的。
本章共分两节:第一节古典密码第二节古典密码的破译1、古典密码概述用你的经验如何设计一个密码算法?1、古典密码概述古典密码的形式很多,归纳起来有下面三种:类型一、代替密码体制类型二、移位密码体制类型三、乘积密码体制1、古典密码概述1. 用密码体制的概念,分析方格密码有什么特点?2. 能不能改进这个密码算法?1、古典密码概述1. 用密码体制的概念,分析单置换移位密码体制有什么特点?2. 能不能改进这个密码算法?1、古典密码概述1. 能不能把方格密码与单置换移位密码体制结合起来?2、基本数学知识1. 回顾学过的同余的概念、性质?2. 密码学中的运算基本上都是同余模运算。
例如:“凯撒密码”,它的原理是将26个英文字母分别用它后面的第3个英文字母代替,若分别以0~25表示英文字母a~z,用m表示“明文”,c表示密文,凯撒密码的加密算法是:E:c=m+3 (mod26) ,如下所示: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 ZD E F G H I J K L M N O P Q R S T U V W X Y Z A B C2、基本数学知识1. 7≡2(mod 5) ,2包含了整数中的什么数?二、剩余类环1.剩余类:所有模m和r(0≤r<m)同余的整数组成一个剩余类[r]。
例a:所有模5和2同余的整数组成一个剩余类[2],该剩余类中的元素有无穷多个:2、7、12、17、22…例b:模5的剩余类有[0]、[1]、[2]、[3]、[4] 。
练习:模26的剩余类有那些?2. 欧拉函数:剩余类[r]中与m互素的同余类的数目用Φ(m)表示,称Φ(m)是m的欧拉函数。
实验一古典加密算法的实现

凯撒密码映射表
明 A B C D E 文 密 D E F G H 文 F G H I J K L M I J K L M N O P
明 N O P Q R 文
S T U V W X Y Z
密 Q R S T U V W X Y Z撒密码的算法,对”Thisisanew term”进行加密 • 要求:(1)
要求
• 以密钥为:m*n=3 * 4,以及f= ((1234)(2413))对” ENGINEERING” 进行: • 要求:(1)
– 输入: ENGINEERING – 输出:(密文)
• (2)
– 输入:密文 – 输出: ENGINEERING
实验一 古典加密算法的实现
• 实验目的:
– 通过编程实现凯撒密码算法和矩阵换位密码算 法,加深对古典密码体制的了解。
• 实验原理:
– 古典加密算法的实验原理(详见下文ppt)
• 实验环境:
– 运行Windows操作系统的PC,TC编译环境
(1)凯撒密码加密算法
• 典型的单表代替密码是凯撒密码。 • 凯撒密码是最古老的代替密码,以英文26个字母 为例,它用D表示A,用E表示B,用F表示C,…, 用C表示Z,即:密文字母是明文字母后面的第三 个位置上的字母。这种映射关系表示为如下函数: • F(a)=(a十k)mod n • 其中:a表示明文字母,n为字符集中字母 个数,k=3为密钥。(移位密码、加法密码)
– 输入:Thisisanewterm – 输出:(密文)
• (2)
– 输入:密文 – 输出:Thisisanewterm
思考题:矩阵换位密码算法的实现
• 把明文中的字母按给定的顺序安排在一矩阵中,然 后用另一种顺序选出矩阵的字母来产生密文。 • 例:明文ENGINEERING按行排在3 × 4矩阵中,最 后一行不全用ABC…填充。 • E N G I 给置换f=((1234)(2413)) NIEG • N E E R ERNE • I NG A NAIG • 得到密文:NIEGERNENAIG • 密钥为:m*n=3 * 4,以及f= ((1234)(2413)) • 即:k=(m * n,f)
古典加密的两种基本方法

古典加密的两种基本方法
古典加密是一种早期的加密方法,它使用简单的替换或置换来实现加密和解密。
其中,替换是指将明文中的每个字符用密钥中相应的字符进行替换,而置换则是将明文中的每个字符轮流替换为密钥中相应的字符。
下面是两种基本的古典加密方法:
1. 恺撒密码:恺撒密码是一种基于替换的古典加密方法,它使用一个固定的密钥对明文进行加密,密钥通常为 3 个或 4 个字母。
加密时,将明文中的每个字符用密钥中相应的字符进行替换,例如,如果密钥为“ABC”,则恺撒密码加密后的文本为“DE”。
恺撒密码的优点是简单易用,但容易被破解。
2. 棋盘密码:棋盘密码是一种基于置换的古典加密方法,它使用一个固定的密钥对明文进行加密,密钥通常为一个矩形网格,其中每个元素都是一个字母。
加密时,将明文中的每个字符轮流替换为密钥中相应的字符,例如,如果密钥为“ABC”,则棋盘密码加密后的文本为“DE”。
棋盘密码的优点是加密强度较高,但需要较大的密钥空间,因此需要更复杂的算法来实现。
密码技术专题(二)——古典密码体制

密码技术专题(二)—古典密码体制∙1、密码体制的概念o明文信源o密文o密钥与加密运算o密码体制∙2、古典密码体制的发展o古典加密方法o代替密码o换位密码o转轮密码∙3、几种典型的古典密码体制o CAESAR体制o双字的Playfair体制o维吉尼亚体制o Hill体制我们已经知道,一个密码体制由明文信源、密文、密钥与加密运算这四个基本要素构成,下面我们将进一步给出它们的数学模型。
1、明文信源直观地讲,明文信源就是明文字母表或者明文字母。
比如所有的英文字母、全部的中文字符就是典型的明文字母表。
准确一点,明文信源还应当包含明文字母的概率分布。
如果用X表示明文字母表,则它的元素x∈X则就是明文字母。
在明文字母表中,不同的明文字母出现的频率往往是不同的,比如在26个英文字母中,一般来说字母“e”的频率最高;而在汉字中,可能是“的”字频率最高。
所以,一个明文信源记为S=[X,p(x)],其中X为明文字母表,p(x)为明文字母x∈X 出现的概率,而且p(x)满足如下条件:对任何x∈X,p(x)≥0,且∑p(x)=1。
2、密文密文由密文字母表Y和密文字母y∈Y组成,密文字母表一般是指密文可能使用的全部字母的集合,而y∈Y是它的元素。
密文字母表可以与明文字母表相同,也可以不同。
3、密钥与加密运算密钥用来从密码体制的一组加密运算中选择一个加密运算(或者称为加密步),密钥允许你按照以前制定的规则改变加密,比如每天,或每份报之后,或者每个字符之后。
通常,密钥的组织和编排须利于它们允许通过简单的规则产生单独的加密步。
加密方法的组合复杂度取决于在此方法下密钥的数量。
如果用K表示密钥空间,也就是选择加密步的参数集合,k∈K则称为一个密钥。
加密步就是明文字母表X到密文字母表Y的一个映射:E:X→Y,对每个x∈X。
由于加密步并不是单一的,而是一族运算,因此我们就可以记为Ek=Ek(x),其中x∈X,k∈K。
除特殊的编码方法外,如多名码或多音码,对于每个k∈K,Ek(x)都是X到Y的1-1映射。
实验二(两种基本古典密码设计与实现)

for(i=0;i<26;i++)
KeyTab[i]=(unsigned char)letter_to_digit(ChoiceWords[i]);
p=full_array2(25);
for(i=0;i<26;i++)
KeyTab[26+i]=p[i];
for(i=0;i<26;i++)
KeyTab[52+i]=(unsigned char)((7*i+3)%26);
putchar(d[key[(int)(((i-1)/16)*16+j)]]); if(i>=16*5) i=0; } if(i%16!=0) { for(j=i%16;j<16;j++)d[j]='*'; for(j=0;j<16;j++)
putchar(d[key[(int)((i/16)*16+j)]]);
char alphabet[26]={"abcdefghijklmnopqrstuvwxyz"}; for(i=0;i<26;i++)
if(tolower(c)==alphabet[i]) return(i); return(-1); } char digit_to_letter(int n) { // char alphabet[26]={'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'}; char alphabet[26]={"abcdefghijklmnopqrstuvwxyz"}; if(n<0||n>25) return(0); return(alphabet[n]); } unsigned char *KeyGen_s( ) { char KeyWords[106]; char ChoiceWords[26]; unsigned char *p; static unsigned char KeyTab[26*3]; int i,j,k,l; printf("\n 请输入密钥字:\n"); gets(KeyWords); strcat(KeyWords,"abcdefghijklmnopqrstuvwxyz"); k=0; l=strlen(KeyWords); ChoiceWords[k]=tolower(KeyWords[0]); for(i=1;i<l;i++) {
第1章02--古典密码

11
例1: 汉字和符号的区位码(单表代替) 2211
2277
12
例2 以十进值数为代替单位的代替函数
S : {0,1,2,,9} {0,1,2,,9}
假设S[10] {5, 4,8, 2,1, 0,9,7,3,6}
即代替表为:
明文 0 1 2 3 4 5 6 7 8 9 密文 5 4 8 2 1 0 9 7 3 6
则明文晨五点总攻 先变换为区位码 1931 4669 2167 5560 1505 再被加密成密文 4624 1996 8497 0095 4050 单表代替的缺点:明文字符相同,则密文字符也相同
13
例3 加法密码 选定常数 q 和 k. 明文空间=密文空间= Zq {0,1,2,, q 1}
18
y=24, 7*24+21(mod26)=7,
yh
例6:仿射密码
加密变换: 脱密变换:
c (am b) mod26
m a (c b) mod26
1
0 m, c 25
a-1是a的乘法逆元 a-1*a(mod26)=1
如:设(a,b)=(7,21),对vlxijh脱密。 7-1mod26=? 7*15mod26=1 7-1mod26=15
比较
计算散列值
随机选取M2
5
密码学的目标(2)
在敌人可能会对消息进行伪造的前 提下,采取额外的步骤以便接收者 能够对消息的完整性进行验证。
保密性 完整性 认证 不可否认
指身份特征或者消息实体的代表的属性。 认证算法:消息认证码(MAC)
需要秘密密钥来阻止任何人对标记进行伪造
具有同意负责任的属性。 不可否认和认证的性质十分相似,从 实现角度上讲,它们大都使用了相同 的基本原理。 当使用者具备签名能力时,他的公钥 签名才能称为不可否认性“设备”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二两种基本古典密码设计与实现
091234 谢锦仪一、实验目的:
该实验为验证性实验。
通过本实验,使学生对于两种基本的古典密码编码方法(“代替”与“移位”)产生深刻的感性认识,体验清楚二者之间的本质差异,为理解和掌握现代密码的相应知识打下良好基础。
二、实验内容:
1.设计一个周期3的多表代换并予以实现,要求:第一个表有密钥字法产生(密钥字自拟),第二个表由洗牌法产生(注意,字母a~z与数字0~25一一对应,洗牌法即相当于实验一的方法1(n=25)),第三个表由公式法产生(数学公式自拟,注意它须是Z26上的一个一一变换)。
2.设计一个周期5的16-置换移位密码并予以实现,要求:5个16-置换至少有一个是由实验一(n=15)提供的两个方法以为、自行设计的其它方法产生。
三、实验要求:
1. 上述两个古典密码的编程实现,须能对下面一段明文进行正确加密(对代
替密码,空格和标点符号保持不动;对移位密码,空格和标点符号也移位):
Q is a symmetric block cipher. It is defined for a block size of 128 bits. It allows arbitrary length passwords. The design is fairly conservative. It consists of a simple substitution-permutation network. In this paper we present the cipher, its design criteria and our analysis. The design is based on both Rjindael and Serpent. It uses an 8-bit s-box from Rjindael with the linear mixing layers replaced with two Serpent style bit-slice s-boxes and a linear permutation. The combination of methods eliminates the high level structure inherent in Rjindaelwhile having better speed and avalanche characteristics than Serpent. Speedis improved over Serpent. This version 2.00 contains better analysis, editorialchanges, and an improved key scheduling algorithm. The number ofrecommended rounds is also increased.
2. 抓图显示密文(附页),不能出现明显错误。
四、实验步骤:
1、实验思路
对于代替密码,难点是大小写的转化和保持加密后大小写的不变。
这里利用了专门的字符处理函数库ctype。
用Tolower函数将大写转化为小写,然后转化为数字。
这样才能容易的实现代替加密的过程。
在密钥字算法的实现中,利用字符串处理函数的功能,在拼接比较后,录入到choicewords中,最后进入keytab,作为密钥的一部分。
洗牌法我用的是实验一自己设计的方法,很简单就融入了这个程序之中。
移位密码:由于老师要求用一种全新的产生全排列的方法,我于是想到了RSA公钥体制。
这里面RSA算法是密码学三大算法之一(RSA、MD5、DES),是一种不对称密码算法。
说如果满足条件:D是素数,N是两个素数(P,Q)之积,(D * E) mod ((P-1) * (Q-1))=1,那么存在C与A(范围从2到N-1)一一对应,且C=(A EXP D)mod N。
A是一个有顺序的数,C就是一个看似无规律的伪随机数。
Mod运算表示求模,例如7Mod3=1。
意思是7除以3余1。
类似地8 Mod 3=2,9 Mod 3=0。
EXP表示前面数的后面数次方,其中还有两个附加条件:1,P和Q不能一样。
2,e<(P-1)(Q-1)且e与(P-1)(Q-1)的最大公因数为1。
具体实现的时候,我把1随机安插进去,就成了一个随机全排列了。
具体的代码见附录。
而在利用时间种子产生随机数的函数中,为了避免重复,我在数组b录入元素后,令数组a对应的为0,然后再a不为0时录入b,十分简单。
而将三种方法合并为密钥表的做法与代替的例子类似,这里就不说了。
在最后输出的时候有一个与代替密码不一样的问题:虽然都是由几组密钥组成的keytab,但是黛米可以不分组变换,而移位的密钥表是16*5,不分组变换效果很差。
所以在输出的时候利用i<16时,(i-1)/16为0这一性质,实现了分组变换输出。
2、实验过程
这些代码中很多都在做一个工作:去掉重复的元素,将无重复的存入数组进行后续处理。
根据不同的情况,也使用不同的方法:先存入另一数组,比较后存入处理数组;或者存入一个初始值进处理数组,然后每录入一个就比较一次。
这两种方法显然后一种是更好的,但有时确实又需要辅助数组,这就需要视具体情况而定。
五、实验结果:
1、代替密码
2、移位密码
六、实验体会:
这次的实验由于有老师提供的参考代码,困难程度并不像代码的长度那般惊人。
代替密码的ctype函数库是一个重点,我们开始都犹豫大写的明文加密后如何保持大写不变,另设一组变换时行不通的。
如将大写字母与另外26个数字相对应,那么就要准备两张keytab,而且程序的复杂度会增加很多。
但是利用了isupper函数后这个就简单了,至于公式法,密钥字法和洗牌法,有实验一的思考结果在,都是不难的。
移位密码开始不知道怎么做,不过在上网查过资料之后找到了一种较好的伪随机产生方法。
这次实验还是有一定的难度,但是有老师给的代码,所以不用花太多的时间来编写程序,大大降低了实验难度。
以后的实验应该会越来越难,应该做好预习工作。
七、思考题:
“代替表”与“置换”的不动点、逆等是否一致?
答:不一致。
代替是约定明文集合到另一集合的关系,不一定是原集合,而移位是在明文集合中进行随机排列然后得到的密文。
两者的不动点、逆,只有在统一集合变换时菜可能一致。