密码协议学习笔记(1.4):密码学的一些数学基础

数学基础:

抽象代数:

一个算符的代数结构:

幺半群:

数的集合和一个算符构成的代数结构(G,+),且满足

  • 封闭性
  • 结合律
  • 存在恒等元(在群中我习惯这么叫,避免混淆)

群:

满足如下条件的代数结构(G,+):

  • 封闭性
  • 结合律
  • 存在恒等元
  • 对于每个元素均存在逆元

交换群/阿贝尔群:

满足如下条件的代数结构(G,+).

  • 封闭性
  • 结合律
  • 存在恒等元
  • 对于每个元素均存在逆元
  • 交换律

两个算符的代数结构:

环:

数的集合和两个算符构成的代数结构(G,+,),且

  • (G,+)是一个交换群
  • (G,)是一个幺半群
  • +满足分配律

在环中,加法的恒等元记为0,也称零元,乘法的恒等元记为e1

要求(G,)是幺半群而非群的理由是,0元素无法存在对的逆元

交换环:

数的集合和两个算符构成的代数结构(G,+,),且

  • (G,+)是一个交换群
  • (G,)是一个满足交换律的幺半群
  • +满足分配律

域:

数的集合和两个算符构成的代数结构(G,+,),且

  • (G,+)是一个交换群
  • (G,)是一个满足交换律的幺半群
  • +满足分配律
  • R{0}存在逆元

大佬博客上的一张图能直观说明这几个概念之间的联系:

图源:http://sparkandshine.net/algebraic-structure-primer-group-ring-field-vector-space/

其他概念:

阶:

群,环,域等代数结构中,记R的大小为|R|.

循环群,循环子群,生成元:

(G,)是群,aG,记 (a)={ai|iZ},可以证明,((a),)(G,)的子群,称(a)为由a生成的循环子群,并称a为该循环子群的生成元.

例如,({1,3,5,7},mod8)是一个群.

a=3

(3)={(1,3)mod8}是由生成元3生成的循环子群

(G,)是群,aG,若an=e,则对于那个最小的n,称an.

可以证明,一个群中某元素的阶等于该生成元生成的循环子群的阶(即元素个数,这两个概念叫一个名字也是因为此).

若群(G,)中存在元素aG,其生成的循环子群(a)就是(G,)本身,那么称这个群为循环群,a为该群的生成元(注意,生成元未必是唯一的).

例如,({1,2,4,5,7,8},mod9)是一个循环群,使用25作为生成元能生成这个群本身,但使用47则只能生成({1,4,7},mod9),使用8只能生成({1,8},mod9),使用1则只能生成({1},mod9).

可以证明,阶数相同的所有循环群相互之间均同构.

可以证明,素数阶群都是循环群,且非恒等元都是生成元.

例如,({0,1,2,3,4,5,6},+mod7)是循环群,1,2,3,4,5,6都是该群的生成元.

又例如,({1,2,4,8,16,32,64},mod127)是循环群,1,2,4,8,16,32,64都是该群的生成元.

这两个定理非常好用,每当遇到素数p阶的群G时可以构造出它与模加群([0,p1],+modp)之间的双射.

具体方法是找出它的恒等元e对应0,然后再随便揪出一个非恒等元x,令x,x2,x3,,xp1分别对应1,2,3,,p1,这能大大减少思考问题的复杂度.

数论:

欧拉定理:

欧拉函数:

记为φ(n),是[1,n1]之间与n的最大公约数为1的数的个数.

可以证明,若n=a1x1a2x2,其中a1,a2,n的质因数,那么φ(n)=(a11)a1x11(a21)a2x21

例如,100=2252,那么φ(100)=(21)221(51)521=40,实际上,[1,99]中与100最大公约数为1的数有1,3,7,9,11,13,17,19,21,23,27,29,31,33,37,39,41,43,47,49,51,53,57,59,61,63,67,69,71,73,77,79,81,83,87,89,91,93,97,99,共计40个.

欧拉定理:

a,n互质,则aφ(n)=1modn

费马小定理:

首先不难看出,若n为质数,则φ(n)=n1

费马小定理本质上是欧拉定理的特殊形式,其形式为,若n为质数,那么任意a[1,n1],an1=1mod1,因此可以记an2=a1modn,结合快速幂算法,这是一个计算模素数域的乘法逆元的简便方法.

原根:

阶:

回到欧拉定理,若a,n互质,则aφ(n)=1modn,可将φ(n)看作一个"循环节",但这个循环节并非最小循环节,例如,考虑a=2,n=7的情况,φ(7)=6,固然有26=1mod7,但实际上,23=1mod7,3才是2在模7下的"最小循环节",称2在模7意义下的3.写作ord7(2)=3.

原根:

若某数an的阶恰好有ordn(a)=φ(n),那么称an的一个原根.

有些数不存在原根,如8,φ(8)=4,但1,2,3,4,5,6,78的阶均不为4.

(主要参考资料:算法学习笔记(40): 原根 - 知乎 (zhihu.com))

根据Euler定理,若gcd(a,m)=1,则aφ(m)=1(modm)

若将(1modm),(amodm),(a2modm),(a3modm),看作一个数列,那么这个数列存在着一个长度为φ(m)的循环节,因为aφ(m)=1.然而,这个循环节未必是最短的,比如当a=2,m=7

20=1,21=2,22=4,23=1,(mod7)

循环节的长度就是3,而非φ(7)=6,将这个最短循环节的长度定义为a在模m下的阶,写作ordma,ord72=3(同时2也是φ(7)=6阶群上的一个ord72=3阶循环子群)

(考虑ordma的值和m1阶循环群([1,m1],modm)里元素的个数的关系)

ordma=φ(m)时,就称a为模m意义下的一个原根.(同时a也是φ(m)阶循环群自身的一个生成元)

并非所有模数都存在原根(并不是所有的群都是循环群),例如φ(8)=4,但ord81=1,ord83=2,ord85=2,ord87=2

实际上,对于原根存在性,有着如下的定理:

原根存在的性质:

正整数有原根的充要条件为:它能表示为下列形式之一:2,4,pn,2pn其中p为奇素数.

证明略.

原根的个数:

m存在原根,则m的原根共有φ(φ(m))个,不妨记am的原根,那么对于任意与φ(m)互质的正整数s,as也是m的原根.

证明略.

posted @   Isakovsky  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示