密码学(2)

100 阅读4分钟

单表代替密码

置换密码:将明文中的字母重新排列,字母本身不变,但其位置发生改变。

代替密码:将明文字母替换成其他字母、数字或符号。

代替密码分为单表代替密码、单字母代替密码、多字母代替密码和多表代替密码。

单表代替密码定义

假设所采用语言的字母表含有qq个字母,即

Zq=0,1,,q1Zq={0,1,……,q-1}

集合上ZqZq上置换的全体记为SYM(Zq)SYM(Zq),则SYM(Zq)SYM(Zq)ZqZq上的对称群。

定义1k=σ1σ2,σn,k={σ1,σ2,……,σn,……}是一列置换,x=x1,x2,,xn,x={x1,x2,……,xn,……}是一列明文,其中σi是SYM(Zq)中元素。变换EkEknn-明文组x=x1,x2,,xnx={x1,x2,……, xn}加密成nn-密文组y=y1,y2,,yn,,y={y1,y2,……,yn,……},

Ek(x)=(σ1(x1),σ2(x2),,σn(xn))=(y1,y2,,yn)=yEk(x)=(σ1(x1),σ2(x2),……,σn(xn))=(y1,y2,……,yn)=y

称上述加密方式为代替加密。

1.当σ1=σ2=σnσ1=σ2=…σn时,称EkEk为单表代替加密;否则,称其为多表代替加密。

2.称σiσi为代替加密密表。

3.由于SYM(Zq)SYM(Zq)的阶等于q!q!,故单表代替密码共有q!q!个(其中含恒等代替加密EIEI)不同的代替加密密表。

单字母单表代替密码——移位代替密码

以下将qq个字母的字母表与ZZqq中数作一一对应,医用每个字母对应的数字代替该字母。

移位代替密码是最简单的一种代替密码。其加密变换为

Ek(m)=m+kc(modq)其中0m,c<qEk(m)=m+k≡c (mod q) 其中0≤m, c<q

K=k0k<qK={k|0≤k<q}

显然,移位代替密码的密钥空间中的元素个数为qq,其中k=0k=0是恒等变换。

凯撒密码的一般形式

1.将英文字母表移k(0k<26)k(0≤k<26)位得到替换表,则得一般得CaesarCaesar算法。

2.共有26种可能的密码算法(25种可用)

3.将每个字母分配一个数值,如a=0,b=1a=0,b=1等,则算法可表示为:

(a)加密算法:c=E(p)=(p+k)mod(26)c=E(p)=(p+k)mod(26)

(b)解密算法:p=D(c)=(ck)mod(26)p=D(c)=(c-k)mod(26)

单字母单表代替密码——乘法代替密码

乘法代替密码的加密变换为:

Ek(m)=mkc(modq),其中0c<qEk(m)=mk≡c(mod q),其中0≤c<q

这种密码又叫采样密码,因为其密文字母表是将明文字母表按下标每隔k位取出一个字母排列而成(字母表首尾相连)

注:

1.当gcd(k,d)=1gcd(k,d)=1.即k与互素时明文字母与密文字母一一对应

2.若qq为素数,则有q2q-2个可用密钥;否则只有φ(q)1φ(q)-1个可用密钥。其中φ(q)φ(q)qq的欧拉函数,等于小于qq且与qq互素的正整数的个数。 对于q=26q=26,与qq互素且小于qq的正整数个数为φ(26)=12φ(26)=12,除去k=1k=1的恒等变换,还有1111种选择,即k=357911192123k=3、5、7、9、11、19、21、232525

104A8D69A6E0B83DBF1ED9C6D787B0F4.jpg C19426007911BF077F2B8C55D69784DC.jpg

单字母单表代替密码——仿射代替密码

将移位代替密码和乘法代替密码结合起来就构成仿射代替密码。其加密变换为Ek(m)=mk1+k0c,k0,k1ZqEk(m)=mk1+k0≡c, k0,k1∈Zq 其中gcd(k1,q)=1,以[k1,k0]表示仿射代替密码的密钥。

1.当k0=0k0=0时,就得到乘法代替密码;当k1=1k1=1时,就得到移位代替密码。

2.q=26q=26时,可用的密钥数为26×12-1=311个。

因为gcd(k1,q)=1gcd(k1,q)=1,所以存在k1Zqk1∈Zq,故仿射代替密码的解密变换为

Dk(c)(ck0)×1/k1(modq)Dk(c)≡(c-k0)×1/k1(mod q)

单字母单表代替密码——密钥短语密码

可以通过下述方法对加法代替密码进行改造,得到一种密钥可以灵活变化的密码。具体步骤如下:

1.选一个英文短语,称其为密钥字或密钥短语;

2.按顺序去掉重复的字母;

3.将它依次写在明文字母表之下;

4.将明文字母表中未在短语中出现过的字母依次写在此短语之后,构造出一个代替表。

多字母单表代替密码——Playfair密码

Playfair算法基于一个由密钥词构成的5×5字母矩阵。(两个两个字母加密)

以monarchy为例,填充矩阵方法如下:

1.将密钥词(去掉重复字母)从左向右,从上到下填在矩阵格子中;

2.将剩余的字母按字母表的顺序从左到右、从上到下填在矩阵剩下的格子里;

3.字母I和J暂且当作一个字母。 DD410D2A189951930408806E6A2F4124.jpg

Playfair密码的加解密步骤:

加密:

1.明文分组(填充):2个字母1组

2.同行字母对加密:循环向右,ei→FK

3.同列字母对加密:循环向下,cu→EM,xi→AS

4.其它字母对加密:矩形对角线字母,且按行排序,hs→BP,es→IL(或JL)

解密:加密的逆向操作

多字母单表代替密码——希尔(Hill)密码

将m个连续的明文字母替换为m个密文字母,由m个线性方程决定,在方程中每个字母被指定为一个数(a=0,b=1,……,z=25) (三个三个字母加密)

Hill密码的加解密过程:

加密:

明文分组并编码 C≡KP mod 26, 其中,K为密钥矩阵,P、C分别为明、密文分组。

解密:

密文分组并编码 P≡1/K×C mod 26, 对密钥矩阵K的要求:在mod 26下可逆。