密码学基础--仿射密码

2023-10-27

 在仿射密码中,加密函数定义为:
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字母的频数统计
字母 频数 字母 频数
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^{_{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

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

密码学基础--仿射密码 的相关文章

  • 区块链学术会议/研究团队汇总

    欢迎评论补充 共建区块链学术生态 一 常见区块链文章发布会议 期刊 领域 简称 全称 CCF Level 备注 网络与信息安全 USENIX Security CCF A TIFS CCF A S P CCF A CCS CCF A Jou
  • 密码学原语如何应用?解析密码学特有的数据编解码|第10论

    隐私保护方案的工程实现 如何关联到学术论文中天书一般的公式符号 密码学工程中 有哪些特有的数据编解码方式 存在哪些认知误区和注意事项 需要克服哪些限制和挑战 作为支撑隐私保护方案的核心技术 如何运用数据编解码 将密码学论文中抽象的数学符号和
  • [攻防世界]crypto新手练习区Caesar

    攻防世界 crypto新手练习区Caesar Caesar最佳Writeup由Um0 Umo 提供 难度系数 1 0 题目来源 poxlove3 题目描述 你成功的解出了来了灯谜 小鱼一脸的意想不到 没想到你懂得这么多啊 你心里面有点小得意
  • 密码学哈希函数

    哈希函数H使用变长数据分组M作为输入 生成定长结果h H M 这一结果也称哈希值 哈希码或散列值 好的哈希函数的特点如下 对大输入集合使用该函数时 输出是均匀分布的且是明显随机的 概括的说 哈希函数的主要目标是保证数据的完整性 在安全应用中
  • 动手学区块链学习笔记(一):加密算法介绍

    引言 本文根据实验楼以及自己查询到的一些资料 文末给出 模拟了一下区块链从诞生到交易的整个过程 也算是弥补了一下之前区块链的一些缺失知识 哈希加密原理介绍 什么是比特币 比特币是一种加密货币 也是一种分布式数字货币 它的创建者使用匿名身份被
  • 3椭圆曲线密码学:ECDH和ECDSA

    原文链接 Elliptic Curve Cryptography ECDH and ECDSA 这篇文章是ECC系列的第三篇 在之前的文章中 我们已经知道了椭圆曲线是什么 并且为了对椭圆曲线上的点做一些数学运算我们定义了群公理 然后我们将椭
  • RSA简介

    什么是RSA RSA算法是应用最广泛的公钥密码算法 1977年 RSA算法由MIT的罗纳德 李维斯特 Ron Rivest 阿迪 萨莫尔 Adi Shamir 和伦纳德 阿德曼 Leonard Adleman 共同设计 于1978年正式发布
  • js逆向--百度滑块验证码

    声明 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 由于本人水平有限 如有理解或者描述不准确的地方 还望各位大佬指教 在工作中遇到了百度的滑块 翻了下csdn以及公众号发现没人写
  • 网络安全与密码学

    1 网络安全威胁 破坏网络安全的一些理论方式 窃听 窃听信息 在网路通信双方直接进行窃听 插入 主动在网络连接中插入信息 可以在message中插入恶意信息 假冒 伪造 spoof 分组中的源地址 假冒客户端或服务器 劫持 通过移除 取代发
  • cryptographic primitives(密码学原语 )

    hash commitment Pedersen承诺
  • 27、HMAC

    HMAC产生背景 HMAC为什么会被提出来 是MAC的产生有什么缺陷么 HMAC规范的设计是由于存在对将密钥与hash函数相结合的更简单机制的攻击 换言之就是有些将密钥和hash函数结合使用产生MAC的算法容易被攻击 而这种生成消息认证码的
  • 6、RC4算法

    参考 https blog csdn net huangyimo article details 82970903 RC4算法 RC4算法变量 RC4算法流程 RC4算法相关 RC4算法 RC4加密算法是Ron Rivest在1987年设计
  • 随着新技术的产生以及计算机运算速度的不断提高,传统的加密技术已无法满足应用的需求,请问目前新的密码技术有哪些?并简要分析。

    目前新的密码技术包括 1 基于量子力学的密码技术 Quantum cryptography 该技术是利用量子力学原理来保护信息安全 主要应用于信息传输领域 其基本原理是通过量子态来实现信息的加密和解密 从而保证传输过程中不会被窃听或篡改 2
  • Shamir门限方案的秘钥分享(包括逆元求解)

    Shamir门限方案的秘钥分享 不要求支持大数 题目描述 实验目的 通过基于Shamir门限方案的密钥分割及恢复的演示 理解密钥分割的重要性 理解密钥分割的基本原理和作用 掌握基于Shamir门限方案的密钥分割软件的使用 实验原理 秘密共享
  • 现代密码学-密码学概论与基本知识

    目录 简介 密码学发展简史 创建 发展阶段 古典密码时期 近代密码时期 现代密码时期 密码主要功能 机密性 完整性 认证性 不可否认性 密码系统的组成 密码分析学 定义 密码攻击类型 针对对称密码体制 针对对称密码体制 常用方法 密码体制的
  • 揭秘区块链的核心技术之「哈希与加密算法 」

    大家都知道 区块链的关键技术组成主要为 P2P网络协议 共识机制 密码学技术 账户与存储模型 而这些技术中 又以 密码学与共识机制 这两点为最核心 那么今天我们来详细的聊一聊密码学 看一看密码学技术是如何在区块链中应用的 首先 我们需知道区
  • 【密码学】古代、古典密码

    古代密码 数据的保密基于加密算法的保密 Scytale密码 使用一条纸袋作为载体 环绕在一根固定半径的圆柱上 加密 在绕好的纸带上写上明文 解开缠绕后 就是加密好的 无序的密文 圆柱的半径就是密钥 解密 找到相同大小的圆柱 将纸带缠绕在援助
  • 同态加密的原理详解与go实践

    学习资料来源 知乎VenusBlockChain https zhuanlan zhihu com p 110210315 知乎刘巍然 https www zhihu com question 27645858 answer 3759850
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • 有趣的数学 为什么素数在密码学中很重要?

    这里我们将探讨为什么素数在密码学中很重要 我们将根据特定的密码系统 RSA 算法 来进行深入了解 一 素数的特殊性 每个数字都可以分解为它的素数 一般来说 找到一个数的因数是非常困难的 要找到一个自然数的所有素因数 必须尝试将其除以它的可能

随机推荐

  • RabbitMQ消息转换器

    文章目录 RabbitMQ消息转换器 RabbitMQ消息转换器 在SpringAMQP的发送方法中 发送消息和接受消息的类型都是Object 也就是说 我们可以发送任意对象类型的消息 SpringAMQP都会帮我们把发送的消息序列化为字节
  • 爬虫的学习总结

    这里是我对最近几次课程的爬虫学习总结 1 学习了Python的爬虫原理 在此基础上安装了urllib requests BeautifulSoup等库 并学习了基本语法 为后续爬虫作业打下基础 2 完成第一次课上练习 对天气的爬取 巩固知识
  • k8s-多节点部署efk-dial tcp 172.20.2.134:5601: getsockopt: connection refused

    异常信息 Error dial tcp 172 20 0 145 5601 getsockopt connection refused Trying to reach http 172 20 0 145 5601 分析 部署好efk后 通过
  • An error occurred during installation: No such plugin: cloudbees-folder

    在启动jenkins时候报错 An error occurred during installation No such plugin cloudbees folder 字面意思是没有找到cloudbees folder这个插件 有一些文章
  • python爬虫入门教程(非常详细),超级简单的Python爬虫教程

    一 基础入门 1 1什么是爬虫 爬虫 spider 又网络爬虫 是指向网站 网络发起请求 获取资源后分析并提取有用数据的程序 从技术层面来说就是 通过程序模拟浏览器请求站点的行为 把站点返回的HTML代码 JSON数据 二进制数据 图片 视
  • jdbc的用处

    概念 JDBC Java DataBase Connectivity Java数据库连接技术 具体讲就是通过Java连接广泛的数据库 并对表中数据执行增 删 改 查等操作的技术 如图所示 此前我们学习过SQL后 可以通过 Navicat S
  • String index out of range: 6 报错

    debug发现是字符串越界 具体原因是程序中没判断是否需要CreateDate属性 而这个属性被拉去转化成字符串 当传入的article对象中没有给该字段赋值 即为null 被转化成了字符串 null 后续对该字符串进行截取 长度自然不够
  • java stream流递归实现树形结构

    sql 测试数据 DROP TABLE IF EXISTS pms category CREATE TABLE pms category cat id bigint 20 NOT NULL AUTO INCREMENT COMMENT 分类
  • 职业规划指导:消化这些技巧能让你升值一倍!!!

    序言 在担任公司高管的几年间 我面试过数以百计的各个层面的员工 其中最让我感到遗憾的一个现象就是很多人有着非常好的素质 甚至有的还是名校的毕业生 因为不懂得去规划自己的职业 在工作多年后 依然拿着微薄的薪水 为了一份好一点的工作而奔波 很多
  • 华为机试真题:消息队列合并

    http t csdn cn vFTTJ
  • 无向图的遍历_大鲨说算法与数据结构图(一)

    图系列 一 1 相关概念 应用 图应用很广泛比如社交网络 地图导航 游戏开发等 有向图 入度 出度 比如上面的有环3节点入度是2出度是1 无向图 其实类似每一条边有2条入度和出度的有向图 有权图 边可以拥有权值 连通图 如果无向图中任意2个
  • Java 8 之函数式接口史上最全详解

    转自 Java 8 之函数式接口史上最全详解 函数式接口简介 函数式接口 指只有一个抽象方法的接口 函数式接口 可以被隐式转换为Lambda表达式 函数式接口 可以用 FunctionalInterface注解标识 此注解非必须使用 常用函
  • 电子设计之硬件开发流程和前辈的指导

    硬件开发流程 图1 硬件开发流程 图2 硬件开发流程简图 开发流程经验 图2 硬件开发流程框图2 基本思想是使每一步流程具有严密的逻辑 每一步流程可操作 每一步流程的输入 操作及输出受控 1 硬
  • Groovy List 常用操作

    1 集合克隆 def list1 a b c def list2 list1 clone 2 list遍历 a 使用each进行遍历 def list 1 2 3 list each println Item it it是是与当前元素对应的
  • SQL中的in、not in语句遇到null时的坑点

    背景介绍 前两天做问题排查的时候 写了一条sql 但是并没有如期地查到数据 确实是有数据的 SQL如下 SELECT tar FROM tb account relation tar WHERE tar customer id NOT IN
  • 清华攒局8个ChatGPT狼人杀,心机伪装都在这一局里,清华:我没教过

    克雷西 发自 凹非寺量子位 公众号 QbitAI 除了玩电子游戏 人类的 社交神器 狼人杀也被AI给学会了 8个ChatGPT 坐 在一起 生动地扮演出了五种角色 和真人如出一辙 这个最新的人类社会模拟实验 由清华和中关村实验室共同完成 从
  • 光线追踪技术 清华大学 pdf_作为游戏界最新的图像渲染技术,光线追踪的好处以及它面临的困境...

    说起今年最受关注的显卡 那么无疑是AMD即将发布的Big Navi显卡以及NVIDIA的RTX30系列 RTX30系列GPU是7nm工艺的安培GPU 它将是12nm图灵GPU的继任者 除了升级图形架构之外 RTX光线追踪技术也会继续升级 光
  • Guid(全局唯一标识符)工具类

    public class Guid 使用场景 public String app type APP ID public String app key APP SECRET public String app sign public Guid
  • 【笔试强训选择题】Day31.习题(错题)解析

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 笔试强训选择题 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 前言 一 Day31习题 错题 解析 1 2 3 4 5 6 7 8 9 10 总结 前言
  • 密码学基础--仿射密码

    在仿射密码中 加密函数定义为 e x ax b mod26 a bZ 因为这样的函数被称为仿射函数 所以这样的密码体制也称为仿射密码 可以看出 当a 1时 其对应的正是移位密码 为了能对密文进行解密 必须保证所选用的仿射函数是一个单射函数