密码学基础--仿射密码
在仿射密码中,加密函数定义为:
e(x)=(ax+b)mod26
a,bZ。因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码(可以看出,当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,对任意的bZ,同余方程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
这条密文的频数分析表如下:
字母 | 频数 | 字母 | 频数 |
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
至此,我们得出了正确的密钥。
密码学基础--仿射密码相关推荐
- 【现代密码学】仿射密码加密
//仿射变换主要是乘法与加法变换的结合 //C=a*m+k mod 26 加密 //M=a^-1(c-k)mod 26 解密 #include <iostream> #include< ...
- 密码学基础--代换密码(Substitution Cipher)
定义 一个密码体制是满足以下条件的五元组(P,C,K,E,D): 1.P代表所有可能的明文组成的有限集. 2.C代表所有可能的密文组成的有限集. 3.K代表密钥空间,由所有可能的秘钥组成的有限集. 4 ...
- 密码学基础(二)单表---置换密码 凯撒密码 棋盘密码 乘法密码 仿射密码 多表---vigenere方阵
1古典密码 (1)置换密码 明文字母重新排列,字母本身不变,但是位置发生变化(倒序或者按照按照数组排列后以行或列重新组合) (2)代替密码 分为单表代替密码和多表代替密码 单表代替密码中代表性的 凯撒 ...
- 密码学基础知识(三)古典密码
说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...
- 密码学—仿射密码实验报告
古典密码算法实验报告 姓名:空の城 学号:你猜 专业班级:网络安全专业 一.实验目的 通过编程实现替代密码算法--仿射密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础. 二.实验原理 仿射 ...
- 凯撒密码加密算法python_CTF中会用到的密码学基础(节选)
Hello,大家好,好耐冇见,我系初音 今天我们来学习一下关于CTF中会用到的部分密码学基础(很简单的那部分) 01第一节.凯撒密码 在密码学中,凯撒密码(Caesar cipher),或称凯撒加密. ...
- 仿射密码 [GKCTF2020]小学生的密码学
在仿射密码中,加密函数定义为: e(x)=(ax+b)mod26 a,b\inZ_{26}.因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码 符合仿射密码的特征 在线解密 然后将 sor ...
- 【密码学原理与实践】(三)仿射密码 符java代码实现
仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...
- 密码学课设-仿射密码的攻击
攻略 实验描述 实验分析 编程实现 py3 实现 c++ 实现 实验描述 问题描述 仿射密码系统用五元组(P,C,K,E,D)表示,设 P = C = { 计算机学院网络工程信息安全,我们热爱中华人民 ...
最新文章
- mysql 远程连接速度慢的解决方案
- LeetCode Algorithm 217. 存在重复元素
- 字符识别(模板匹配BP神经网络训练)
- 《计算机组成原理》----2.3 二进制运算
- 终于!华为在欧盟注册新商标“Harmony”;亚马逊AWS宣布张文翊“新官上任”;甲骨文失去竞购100亿美元国防部云计算合同资格...
- jeecg集成实现websocket
- 从谷歌浏览器复制不带样式_如何更新ETHERSCAN区块链浏览器上的代币信息
- linux v4l2 示例程序,linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)...
- (Photo Metadata Remover)Android App 一键去除照片 EXIF 隐私信息
- 国内电影发行公司简介
- 如何看误差累积分布图
- SPARC架构下的反汇编(四)——SPARC汇编语言(二)
- 浙江大学竺可桢学院计算机专业好就业吗,浙大竺可桢学院有多厉害?看了这些数据你就知道了...
- FOne MOOC在线课程平台
- 利用Nginxcp为cPanel/WHM服务器开启nginx支持
- 【Python】NumPy 中 ravel() 正确打开方式
- C语言程序设计——冒泡排序
- 国产操作系统之银河麒麟服务器版V10安装
- python 万历年表
- 贡献30本经典Linux学习和开发教程和资料,都是pdf完整版的