zoukankan      html  css  js  c++  java
  • 从数学到密码学(九)

    数学基础(四)--群的性质

    声明:凡是在本系列中涉及到数学知识,我会尽量解释、证明其中的原理,但不会对所有论证细节进行推敲(此时通常都会推荐参考教科书)
    因为我们的目标是快速掌握密码学的基本数学基础。之所以给出较为详尽的推导过程,主要是满足一些读者刨根问底的需要。

    继续话题。

    根据定义,群(G,+)的运算满足结合律:对于任意a、b、c∈G,a+(b+c)=(a+b)+c。这条性质有什么用呢?
    先看一个例子,假设要将群G中的4个元素a,b,c,d用+先后串起来进行运算,有很多种运算次序,我们考虑其中的一类情况:
    即4个元素相对的位置顺序不变,变化的只是运算的优先级,比如:

    ((a+b)+c)+d--先计算a+b,得到的结果(可以看作是“a与b的和”)与c相加,得到的“和”再与d相加
    a+((b+c)+d)--先计算b+c,得到的和去加d,结果再与a相加(严格说a在前面,因为一般而言a+b不等于b+a)
    ((a+b)+(c+d))--先分别计算a+b和c+d,再把得到的两个“和”相加

    等等,有多种形式,那么以上这几个最终结果有什么关系吗?结合律告诉我们,这几个结果最终都是相等的。
    换句话说,只要参与运算元素的位置不变,运算顺序就不会对运算结果有影响,此时重新排列表达式的括号并不会改变其值。
    想知道为什么是这样,请参考标准的抽象代数教科书,一般都会给出证明(事实上利用数学归纳法就可以证明)。

    有鉴于此,我们可以将运算中涉及的括号都去掉,比如将a+(b+c)或(a+b)+c记为a+b+c,将((a+b)+c)+d、a+((b+c)+d)或((a+b)+(c+d))记为a+b+c+d
    因为不管在何处加括号,其最终运算结果都是相同的。

    如果群的运算还满足交换律(Zn上的+运算就是个例子,可以由定义验证),则群中任意多个元素间的运算,随便打乱运算顺序和位置,最终结果都是一样的
    举例验证:设a,b,c为交换群G的元素,则(c+b)+a=(b+c)+a=a+(b+c)=a+b+c, 而(b+a)+c=(a+b)+c=a+b+c,两个结果是相等的

    群中的单位元,根据不同情况,可能会用e、1或0来表示。
    但是应该注意:这里的1和0都是一个记号,只是表示它们具有群中单位元的性质(见群定义中的条件3和4),不要与阿拉伯数字1和0混淆,它们虽然符号一样,但含义不同。

    群G中的单位元和某一元素(比如a)对应的逆元,是否可以有多个?可以证明,单位元和元素的逆元都是唯一的
    这在某种程度上打消了我们的担心,因为如果有多个单位元或某一元素有多个逆元,则我们要用到它们的时候,取哪一个好呢?

    我们已经知道,Zn={[0],[1]……[n-1]}关于运算+(见前面对+的定义)构成群,该群的元素是等价类,比如元素[0]={……-2n,-n,0,n,2n……}
    如何在计算机中表示群Zn的元素(即等价类)?由于每个等价类都包含无限个整数,而计算机的存储器(不管是内存还是外存)都是有限的
    自然想到用等价类的某个代表元素来表示等价类,直觉告诉我们,选0,1,……,n-1分别代表[0],[1]……[n-1]共n个等价类最为恰当

    问题马上出来:这n个数之间是怎样运算的?注意到,它们之间不能像平常的加法一样运算,比如说,1和(n-1)如果按正常加法运算,结果等于n
    但是n不在0,1,……,n-1之间,连运算的封闭性都不满足。
    怎么办?还是回到原来对等价类[]加法+的定义,既然我们选的这n个数表示等价类,那它们也同样满足原来运算+的定义

    原来:[i]+[j]≡[i+j]——i,j事先被限制在0,n-1之间
    现在: i + j ≡多少?很明显,只要将i+j除以n,得到余数r就可以作为等价类的代表元素,证明如下
    设i+j=k*n+r,则(i+j)-r=k*n,由定义,(i+j)~r,从而[i+j]=[r],r又是余数,必然有0≤r<n,这说明r正是我们要的那个数
    结论:如果i,j作为计算机中的表示,用来代表Zn中的等价类,则等价类的运算,即i+j的结果是(i+j)除以n得到的余数,也称为模n的余数。
    用公式来说,就是,对于0≤i,j<n,i+j=(i+j)mod n——对于任意整数n,我们用i(mod n)来表示i模n的余数。有时候也用i%n来表示。

    提到模n的余数,我们补充一点相关的性质,根据定义,如果[a]=[b],[c]=[d],则[a]+[c]=[a+c]=[b+d]=[b]+[d]
    令a=b(mod n),c=d(mod n),则[b(mod n)+d(mod n)]=[b+d],两边都是等价类
    分别取范围在0,n-1之间的等价元,则有(b(mod n)+d(mod n))(mod n)=(b+d)(mod n)
    这说明:求两个整数之和的模n的余数,可以先分别计算这两个整数模n的余数,然后把两个余数相加,再对相加的和取余数,就得到想要的结果。

    以上步骤,看起来有点麻烦,但是如果b,d很大,则避免了大数的相加运算(代之以模运算,其运算效率有所提高),总的来说,还是划得来的。
    稍后将看到,这在求两个大整数乘积的模运算时尤其有用。

    最后再补充一点群的基础知识。

    为什么要在群中引入逆元的概念,结论是:可以使用消去法
    举例:设a*b=a*c,两边同乘以a的逆元,则可以同时消去a,最终得到b=c

    [子群]:(G,*)是群, I是G的非空子集, 如果I关于G的运算*构成群, 则称I为G的子群, 记作I≤G
    (1) *在I上运算封闭
    (2) *在I上结合律成立(由于*在G上结合律成立, 此条件自然成立)
    (3) I中存在单位元1
    (4) I中逆运算封闭,即I中任一元素都有逆元素在I中
    可以证明,如果I是G的子群,则I的单位元1就是G的单位元

    设a∈有限群(G,*),我们分别计算a*a(平方运算,简记为a2)、a*a*a(立方运算,记为a3)、a*a*a*a(四次方a4)……,一直计算下去
    根据抽屉原理(又称鸽笼原理),必然存在正整数m,n(假设m>n)满足am=an,消去an,得am-n=1,我们把满足am=1的最小正整数m称为元素a的阶
    用|a|表示。同样,称有限群G中的元素个数为群G的阶,用|G|表示。

    关于有限群的阶与元素的阶,有以下性质
    定理:设|a|=m,则对于任意正整数n,an=1←→m|n
    定理:G中任一元素的阶整除|G|
    定理:G为有限交换群,G中元素的最大阶=n,则G中任一元素的阶整除n

  • 相关阅读:
    Java学习之路
    ofo开锁共享平台
    Texstudio
    我的母亲 (老舍)
    Excel数据透视表
    Excel分类汇总与数据有效性
    Tomcat源码分析
    证明:在任意六人的聚会中,要么有三人曾经认识,要么有三人不曾认识
    琅琊榜读书笔记
    选择排序可视化
  • 原文地址:https://www.cnblogs.com/efzju/p/2137677.html
Copyright © 2011-2022 走看看