第二讲 密码学的数学基础
群、环和域
- 群是两个元素作二元运算得到的一个新元素,需要满足群公理。
- 环在阿贝尔群(也叫交换群)的基础上,添加一种二元运算乘法 (虽叫乘法,但不同于初等代数的乘法)。一个代数结构是环,需要满足环公理。
- 域在交换环的基础上,还增加了二元运算除法,要求元素(除零以外)可以作除法运算,即每个非零的元素都要有乘法逆元。
逆元的存在是为了解密。因此,密码学要以域为研究对象。
由此可见,域是一种可以进行加减乘除(除0以外)的代数结构,是数域与四则运算的推广。整数集合,不存在乘法逆元(不是整数),所以整数集合不是域。有理数、实数、复数可以形成域,分别叫有理数域、实数域、复数域。
- 在密码学中为什么采用有限域?
所有的加密算法都涉及整数集上的算术运算。如果某种算法使用的运算之一是除法,那么我们就必须使用定义在域上的运算。
加密算法需要明文与密文一一映射关系,而密文是有限的,无限域存在浪费。 - 为什么采用模运算?
模运算能够造出有限域(定义除法)
有限域和的形式的有限域
有限域即含有有限个元素的域。
元素个数为的有限域一般记为。
运用的原因是:加密运算要求将整数平均地映射到自身且构造的整数集合必须是一个域。
为了使资源不浪费,不使用直接的模运算而是使用既约多项式模运算。
- 为什么密码学采用形式的有限域,而不采用形式的有限域?
为了方便实用和提高效率,希望这个整数集中的数与给定的二进制位数能够表达的信息一一对应而不出现浪费,即希望整数集的范围是。
素数
素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
任意正整数可由素数的乘积来表示。
同余会使得多个明文对应同一个密文(即二义性),虽更安全但失去了可用性。因而多数情况下选择对一个素数进行模运算。
Fermat定理和推论
定理
若是素数,是正整数且不能被整数,则
推论
Fermat定理的另一种有用表示:若是素数,是任意正整数,则
理解为乘了一个即可。
Euler函数
Euler函数,指小于且与互素的正整数的个数。
- 对于素数有:
- 由此,对于素数和,,那么对,有:
Euler定理和推论
定理
对于任意互素的和,有:
另一种有用表示:
本质就是将Euler函数运用在Fermat定理上。
推论
给定两个素数和,整数,对于小于的任意正整数,有以下关系式成立:
另一种表达形式:
离散对数
本原根
如果使得成立的最小正幂满足,则称是的本原根。 其中为欧拉函数。
- 若是的本原根,则的到次幂模是各不相同的,且均与互素。
- 若为素数时,若是的本原根,则的到次幂模是各不相同的。
- 模的本原根共有个
本质上讲本原根的意思就是该数的到次方逐个,结果各不相同且均。所以的本原根应该就是指模的本原根。
参考:密码学基础 本原根
- 示例
定义
对于某素数,的本原根为;
对于任何整数,;
存在唯一的整数,,使得
称为以为底的指标,也记为离散对数,记为
性质
离散对数和一般的对数有着相类似的性质:
计算
已知,计算是容易的
已知,计算是容易的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!