密码学基础--仿射密码

 在仿射密码中,加密函数定义为:
e(x)=(ax+b)mod26
a,b
\inZ_{26}。因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码(可以看出,当a=1时,其对应的正是移位密码)。



为了能对密文进行解密,必须保证所选用的仿射函数是一个单射函数。换句话说,对任意的Y∈Z_{26},如下同余方程:
 ax+b≡y(mod26)
有唯一解。上述同余方程等价于
 ax≡y-b(mod26)
当y遍历Z~26~时,显然y-b亦遍历Z~26~,我们只需要研究同余方程ax≡y(mod26)即可(y\inZ_{26})。
我们断言,以上同余方程有唯一解的充分必要条件是gcd(a,26)=1(这里的gcd表示最大公约数)。首先,假设gcd(a,26)=d>1。则同余方程ax≡0(mod26)至少有两个解,分别为x=0和x=26/d。这种情况下,加密函数不是一个单射函数,因此不能用来作为一个有效的加密函数。



定理:
设a∈Z_{m},对任意的b
\inZ_{m},同余方程ax≡b(mod m)有唯一解x∈Z~m~的充分必要条件是gcd(a,m)=1。
因为26=2×13,故所有的与26互素的数为a=1,3,5,7,9,11,15,17,19,21,23,25。b的取值可为Z~26~中的任何一个数。因此,仿射密码的密钥空间为12×26=312(当然,这个密钥空间还是太小的)。



定义   设a>=1,m>=2且均为整数。如果gcd(a,m)=1,则称a与m互素。Z_{m}中所有与m互素的数的个数使用φ(m)来表示(这个函数称为欧拉函数)
和欧拉函数有关的一个数论中的著名结果是m的素数幂分解的形式给出φ(m)的值(一个整数p称为素数,如果它没有除1和p之外的因子。任一整数m>1都可以用唯一的方式分解成素数幂的乘积。例如60=2^2^×3×5和98=2×7^2^)


下面定理给出φ(m)值的计算公式。
定理 假定

m = \prod ^{n}_{i=1} (p^{e_{i}}_{i})

这里p_{i}均为素数且各不相同,e_{i}>0,1\leqi\leqn。则

φ(m)= \prod ^{n}_{i=1} (p^{e_{i}}_{i} - p^{e_{i}-1}_{i})

由上面关于欧拉函数φ(m)值得计算公式可以推出,仿射密码的密钥空间的大小是mφ(m)。例如,如果m=60,φ(60)=2×2×4=16,那么仿射密码的密钥空间大小是60×16=960。


下面分析仿射密码在模26情形下的解密过程。已知有gcd(a,26)=1,解密的过程就是解同余方程y≡ax+b(mod26)。由此前的讨论,此同余方程在Z_{26}上只有唯一解,但是还需要有效的方法找出这个解。

首先,我们先给出乘法逆的概念。

定义    设a\inZ_{m},若存在a' \in Z_{m},使得aa'\equiva'a=1(mod m),则a'称为a在Z_{m}上的乘法逆,将其记为a^{-1}mod m。在m是固定的情形下,也可将其简记为a^{-1}

可证明,a在Z_{m}上存在乘法逆,当且仅当gcd(a,m)=1,并且其逆如果存在,则必唯一。如果p为素数,则Z_{p}上任一非零元均有乘法逆存在,一个【环】_{【1】}如果满足这条性质,将其称为域。

考虑同余方程y\equivax+b(mod26)。其等价于如下同余方程:

            ax\equivy-b(mod26)

因为gcd(a,26)=1,故a在Z_{26}上存在乘法逆元a^{-1},有

            a^{-1}(ax)\equiva^{-1}x(y-b)mod26\equiv(a^{-1}a)x\equiv1x\equivx(mod26)

故有,x=a^{-1}(y-b)mod26。因此相应的解密变换为

            d(y)=a^{-1}(y-b)mod26

下面给出乘法逆的算法:(扩展的欧几里得算法)

例  求5关于模14的乘法逆元

辗转相除:14=5×2+4;5=4+1

逆推:1=5-4=5-(14-5×2)=5×3-14

因此,5关于模14的乘法逆元为3

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


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

令P=C=Z_{26},且

                       K={(a,b)\inZ_{26}×Z_{26}:gcd(a,26)=1}

对任意的K=(a,b)\inK,x,y\inZ_{26},定义

                     e^{_{K}}(x)=(ax+b)mod 26

和 

                     d^{_{K}}(y)=a^{-1}(y-b)mod 26


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

          e^{_{K}}(x)=7x+3

相应的解密函数为

          d^{_{K}}(y)=15(y-3)=15y-19

以上运算均是在Z_{26}上完成。下面来验证对任意的x\inZ_{26},都有 d^{_{K}}(e^{_{K}}(x))=x:

          d^{_{K}}(e^{_{K}}(x))= d^{_{K}}(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。 


仿射密码的密码分析

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

FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEVLRHHRH

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

密文中出现的26字母的频数统计
字母频数字母频数
A2N1
B1O1
C0P2
D7Q0
E5R8
F4S3
G0T0
H5U2
I0V4
J0W0
K5X2
L2Y1
M2Z0

 

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

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

 

  • 20
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值