首页 > 编程知识 正文

仿射密码算法,仿射密码例题

时间:2023-05-05 06:01:55 阅读:186234 作者:3317

在仿射密码中,加密函数的定义如下:

e(x )=) axb ) mod26

a、b Z。因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码(可以看出,当a=1时,其对应的正是移位密码)。

为了破译密文,必须保证所选择的仿射函数是单射函数。 也就是说,对于任意的YZ,将联合方程式表示如下。

ax+by(mod26)

有唯一的解。 上述的同余方程式

axy-b(mod26)

因为当y遍历z(26 )时,y-b显然也遍历z(26 ),所以我们只需研究同余方程axy ) mod26 ) (yZ )。

我断言以上联合方程唯一解的充分条件是gcd(a,26 )=1(这里的gcd表示最大公约数。 首先,假设gcd(a,26 )=d1。 同余方程ax0(mod26 )至少有两个解,分别为x=0和x=26/d。 在这种情况下,加密函数不是单射函数,因此不能用作有效的加密函数。

定理:

设aZ,则对于任意bZ,联合方程axb(modm )唯一能具有解xz(m )的充分必要条件是gcd(a,m )=1。

26=213,所以所有26和像素的数量为a=1、3、5、7、9、11、15、17、19、21、23、25。 B的可取值可以是Z~26~的任意一个数。 因此,仿射加密的密钥空间是1226=312 (当然,该密钥空间太小)。

定义 设a=1,m=2且均为整数。如果gcd(a,m)=1,则称a与m互素。Z中所有与m互素的数的个数使用(m)来表示(这个函数称为欧拉函数)

关于欧拉函数数论的有名结果是以m的素数幂分解的形式给出(m )的值。 (如果没有1和p以外的因子,整数p就称为素数。 任何整数m-1都可以唯一地分解为素数幂的乘积。 例如60=2^2^35和98=27^2^ )

以下定理给出(m )值的计算公式。

定理假设

m =()

这里均为素数且各不相同,0,1in。则

(m)=(-)

根据对于欧拉函数的上述计算式,仿射加密的密钥空间的尺寸是m )。 例如,如果m=60,=60=224=16,则仿射密码的密钥空间大小为6016=960。

其次,分析模块26的情况下的仿射密码的解密过程。 已知gcd(a,26 )=1,解码的过程是求解同余方程yaxb ) mod26 )。 从目前为止的讨论来看,该联合方程式在上只有唯一的解,但要找到该解需要有效的方法。

首先,给出乘法的相反概念。

定义 设a,若存在a',使得aa'a'a=1(mod m),则a'称为a在Z上的乘法逆,将其记为mod m。在m是固定的情形下,也可将其简记为。

可以证明,a只有在z中存在乘法的逆,且gcd(a,m )=1的情况下,并且如果存在逆,则一定是唯一的。 当p为素数时,z的任意非零元上乘法运算相反存在,当一个【环】满足该性质时,称之为域。

考虑同余方程yaxb(mod26 )。 它等效于以下同余方程:

axy-b(mod26)

由于gcd(a,26 )=1,所以a中存在乘法逆元,存在

(ax)x(y-b)mod26(a)x1xx(mod26)

因此,x=(y-b )模26。 因此,对应的解码随后被转换为

d(y)=(y-b)mod26

下面给出乘法逆的算法:(扩展的tmdmj算法)

例5关于模14的乘法逆元

辗转除外: 14=52 4; 5=4 1

反推:1=5-4=5-(14-52 )=53-14

因此,5型14乘法逆元为3

来总结一下方法,假设要求a关于模m的乘法逆元,由定义进行辗转相除直到取到1,然后将等式化为1=ab+/-mc,其中b,c为整数。

ng>

密码体制 -- 仿射密码(Affine Cipher)

令P=C=Z,且

                       K={(a,b)Z×Z:gcd(a,26)=1}

对任意的K=(a,b)K,x,yZ,定义

                     e(x)=(ax+b)mod 26

和 

                     d(y)=(y-b)mod 26

例    设密钥K(7,3)。上述已知mod26=15。加密函数为

          e(x)=7x+3

相应的解密函数为

          d(y)=15(y-3)=15y-19

以上运算均是在Z上完成。下面来验证对任意的xZ,都有 d(e(x))=x:

          d(e(x))= d(7x+3)=15(7x+3)-19=x+45-19=x

使用上面的密钥,我们来加密明文hot。首先转换字母爱h,o,t为对应的模26下的数,分别为7,14,19.分别加密如下:

          (7×7+3)mod26=52mod26=0

          (7×14+3)mod26=101mod26=23

          (7×19+3)mod26=136mod26=6

所以三个密文字符为0,23,6,相应的密文应为AXG。 

仿射密码的密码分析

让我们首先看一个如何利用统计数据来尽心改密码分析的简单例子:仿射密码的分析。假设jpdll已经截获到了下列密文:

FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEVLRHHRH

这条密文的频数分析表如下:

密文中出现的26字母的频数统计 字母频数字母频数A2N1B1O1C0P2D7Q0E5R8F4S3G0T0H5U2I0V4J0W0K5X2L2Y1M2Z0

 

这条密文只有57个字母,但是已经可以分析仿射密码,最大频数字母是:R(8次),D(7次),E,H,K(各5次),S,F,V(各4次)。首先,我们猜想R是e的加密,而D是t的加密,因为e和t是英文字母表统计表出现频数最高的字母(详细表见另一篇博文“密码学基础--代换密码”)。以数字表达即为e(4)=17和e(19)=3,可得以下方程组:

            4a+b=17

           19a+b=13

解这个方程组可得唯一解a=6,b=19,但这是一个不合法的密钥,因为gcd(a,26)=2>1。

我们再猜测R是e的加密,而E是t的加密,同上计算得a=13,也不合法。

继续进行,我们猜测R是e的加密,K是t的加密,则有a=3,b=5,密钥合法,接下来我们来验证是否能得到有意义的明文串,解密得:

algorithmsarequitegeneraldefinitionsofarrithmeticprocesses

至此,我们得出了正确的密钥。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。