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


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


定理:
设a∈Z,对任意的b
Z,同余方程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)的值(一个整数p称为素数,如果它没有除1和p之外的因子。任一整数m>1都可以用唯一的方式分解成素数幂的乘积。例如60=2^2^×3×5和98=2×7^2^)


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

m =  ()

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

φ(m)=  ( - )

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


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

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

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

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

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

    axy-b(mod26)

因为gcd(a,26)=1,故a在上存在乘法逆元,有

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

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

            d(y)=(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,且

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。


仿射密码的密码分析

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

FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEVLRHHRH

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

密文中出现的26字母的频数统计
字母 频数 字母 频数
A 2 N 1
B 1 O 1
C 0 P 2
D 7 Q 0
E 5 R 8
F 4 S 3
G 0 T 0
H 5 U 2
I 0 V 4
J 0 W 0
K 5 X 2
L 2 Y 1
M 2 Z 0

这条密文只有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. 【现代密码学】仿射密码加密

    //仿射变换主要是乘法与加法变换的结合 //C=a*m+k mod 26 加密 //M=a^-1(c-k)mod 26 解密 #include <iostream> #include< ...

  2. 密码学基础--代换密码(Substitution Cipher)

    定义 一个密码体制是满足以下条件的五元组(P,C,K,E,D): 1.P代表所有可能的明文组成的有限集. 2.C代表所有可能的密文组成的有限集. 3.K代表密钥空间,由所有可能的秘钥组成的有限集. 4 ...

  3. 密码学基础(二)单表---置换密码 凯撒密码 棋盘密码 乘法密码 仿射密码 多表---vigenere方阵

    1古典密码 (1)置换密码 明文字母重新排列,字母本身不变,但是位置发生变化(倒序或者按照按照数组排列后以行或列重新组合) (2)代替密码 分为单表代替密码和多表代替密码 单表代替密码中代表性的 凯撒 ...

  4. 密码学基础知识(三)古典密码

    说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...

  5. 密码学—仿射密码实验报告

    古典密码算法实验报告 姓名:空の城 学号:你猜 专业班级:网络安全专业 一.实验目的 通过编程实现替代密码算法--仿射密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础. 二.实验原理 仿射 ...

  6. 凯撒密码加密算法python_CTF中会用到的密码学基础(节选)

    Hello,大家好,好耐冇见,我系初音 今天我们来学习一下关于CTF中会用到的部分密码学基础(很简单的那部分) 01第一节.凯撒密码 在密码学中,凯撒密码(Caesar cipher),或称凯撒加密. ...

  7. 仿射密码 [GKCTF2020]小学生的密码学

    在仿射密码中,加密函数定义为: e(x)=(ax+b)mod26 a,b\inZ_{26}.因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码 符合仿射密码的特征 在线解密 然后将 sor ...

  8. 【密码学原理与实践】(三)仿射密码 符java代码实现

    仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...

  9. 密码学课设-仿射密码的攻击

    攻略 实验描述 实验分析 编程实现 py3 实现 c++ 实现 实验描述 问题描述 仿射密码系统用五元组(P,C,K,E,D)表示,设 P = C = { 计算机学院网络工程信息安全,我们热爱中华人民 ...

最新文章

  1. mysql 远程连接速度慢的解决方案
  2. LeetCode Algorithm 217. 存在重复元素
  3. 字符识别(模板匹配BP神经网络训练)
  4. 《计算机组成原理》----2.3 二进制运算
  5. 终于!华为在欧盟注册新商标“Harmony”;亚马逊AWS宣布张文翊“新官上任”;甲骨文失去竞购100亿美元国防部云计算合同资格...
  6. jeecg集成实现websocket
  7. 从谷歌浏览器复制不带样式_如何更新ETHERSCAN区块链浏览器上的代币信息
  8. linux v4l2 示例程序,linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)...
  9. (Photo Metadata Remover)Android App 一键去除照片 EXIF 隐私信息
  10. 国内电影发行公司简介
  11. 如何看误差累积分布图
  12. SPARC架构下的反汇编(四)——SPARC汇编语言(二)
  13. 浙江大学竺可桢学院计算机专业好就业吗,浙大竺可桢学院有多厉害?看了这些数据你就知道了...
  14. FOne MOOC在线课程平台
  15. 利用Nginxcp为cPanel/WHM服务器开启nginx支持
  16. 【Python】NumPy 中 ravel() 正确打开方式
  17. C语言程序设计——冒泡排序
  18. 国产操作系统之银河麒麟服务器版V10安装
  19. python 万历年表
  20. 贡献30本经典Linux学习和开发教程和资料,都是pdf完整版的

热门文章

  1. 酒桌上的DOTA原理
  2. three.js 跳跳乐游戏
  3. 一文彻底搞懂volatile用法
  4. 深度学习与图像处理之:人像背景虚化
  5. 谷歌日历一键删除日程_如何在Google日历中删除新的提醒
  6. 公司地址变更:工商、税务变更流程(转)
  7. [搬家from qzone] 读书笔记 爱是一种选择
  8. Randomize Random
  9. php中rowcount 意思,SQL中@@ROWCOUNT函数
  10. 通用的三视图和正等轴测图的绘制(C++实现)