那些花里胡哨的素数们
作者:互联网
昨晚看夏日重现外传的时候,看到了这样的一幕:
反素数?安全素数?啥玩意,听都没听说过,只听说过梅森素数和费马素数。然后就滚去百度了一波,发现竟然还有反素数的题,顺便还递归学习到了危险素数、索菲热尔曼素数、强素数的概念,于是就想写个博客,把这些花里胡哨的素数定义都记录下来,加深一波印象。
顺便强烈安利一波夏日重现,太好看了,潮和波稻都是我老婆。
梅森素数(和完全数
若 \(p\) 是一个素数,则称 \(2^p-1\) 为梅森数,记为 \(Mp\),若一个梅森数同时也是一个素数,则称这个梅森数为梅森素数。
比如:\(2^2-1=3,~2^3-1=7\) 都是梅森素数。
它的一个比较有趣的性质是,如果 \(2^p-1\) 是梅森素数,则 \(\displaystyle\frac{2^p\times(2^p-1)}{2}\) 是完全数。
完全数就是除它本身之外的约数之和等于它本身的数,比如 \(6\) 的约数有 \(1,2,3,6\) 且 \(1+2+3=6\),则 \(6\) 是一个完全数,它可以由 \(3\) 这个梅森素数得到。
目前找到的完全数都是偶数,存不存在奇数的完全数目前还不能下定论,但欧拉证明了偶完全数一定是 \(\displaystyle\frac{2^p\times(2^p-1)}{2}\) 这种形式的,即它们之间是一一对应的,因此只要找到梅森素数便可发现偶完全数,但遗憾的是找起来非常难,目前只找到了 \(51\) 个偶完全数/梅森素数。
费马素数
\(n\in\N\),则称 \(2^{2^n}+1\) 为费马数,记作 \(F_n\),若一个费马数同时也是一个素数,则称这个费马数为费马素数。
当年费马闲的没事的时候,发现有:
\[\begin{array}{l} F_0=2^{2^0}+1=3\\ F_1=2^{2^1}+1=5\\ F_2=2^{2^2}+1=17\\ F_3=2^{2^3}+1=257\\ F_4=2^{2^4}+1=65537 \end{array} \]都是素数,因此做出一个猜想:形如 \(F_n=2^{2^n}+1~(n\in\N)\) 的数都是素数,于是人们就把这样的数称为费马数;后来欧拉算出 \(F_5=641\times6700417\) 不是素数,否定了这个猜想;再后来人们又算出了 \(F_6、F_7、F_8\dots\) 发现都不是素数,因此目前为止,费马素数只找到了上述这五个。
安全素数和危险素数
若 \(p\) 是一个素数,且 \(2p+1\) 也是一个素数,则称 \(2p+1\) 为安全素数;危险素数顾名思义,就是指不是安全素数的素数。
之所以叫安全素数,主要是早些年间,在像 \(\rm RSA\) 这种基于整数分解的密码系统中,使用这样的素数作为因子构造出的密钥比较难被一些常用的因式分解算法(比如 Pollard's p−1
算法)攻破。
顺带一提,真正能够被称为安全素数的一般是一些满足定义的、足够大的素数,毕竟不够大的数无论有什么特殊的性质都,因式分解起来都不会很难,就比如 \(5,7,11\) 这种很小的安全素数,你真的觉得它们很安全吗?显然是不安全滴。(我个人将这类安全素数称为伪安全素数
索菲热尔曼素数
若 \(p\) 是一个素数,且 \(2p+1\) 也是一个素数,则称 \(p\) 为索菲热尔曼素数。显然安全素数和索菲热尔曼素数也是一一对应的,找到它们在计算难度上也是等价的。
索菲热尔曼素数以法国数学家索菲热尔曼的名字命名,她在她对费马大定理的研究中使用了它们。
强素数
在密码学和数论中的定义有所不同。
密码学的定义
一个素数 \(p\),如果 \(p-1\) 和 \(p+1\) 都有足够大的质因数,则称 \(p\) 为强素数。
密码学上的定义其实比较暧昧:有时只满足部分条件的也算强素数;有时又要求加入更多限制条件;“足够大”的标准也不统一,一般来说是 \(500\) 位左右。总而言之,在密码学中,基于它构造出来的密钥具有不容易被破解这一性质的素数就可以说是强素数,从这个角度来看,足够大的安全素数也可以说是强素数。
值得一提的是,就当今的密码学来说,“安全素数”这个术语可能已经有些过时了,毕竟它主要是早些年间,针对那些基于整数分解的密码系统提出的概念,而现在有很多优秀的因式分解算法,它们的时间复杂度只跟被分解数的大小有关,无论是用安全素数还是用危险素数构造的密钥,只要大小差不多,分解起来都是一样快滴;而在基于离散对数的密码系统中,我们往往也只会强调强素数的概念:例如在 Diffie-Hellman key exchange
中,假设选取的模数为 \(p\),如果 \(p-1\) 不存在较大的质因数,则可以通过 Pohlig-Hellman
算法在多项式时间内求解,因此通常会选取一个强素数 \(p\) 作为模数(当然你取足够大的安全素数也行,不过此时主要看重的是“\(p-1\) 存在足够大的质因数”这一性质,比安全素数的定义要宽松很多)。
数论中的定义
一个素数 \(p\),如果比它左右两边相邻的两个素数的平均数大,则称 \(p\) 为强素数。
比如 \(11>\displaystyle\frac{7+13}{2}\),因此 \(11\) 是一个强素数。
类似的还有均衡素数和弱素数。
比如 \(5=\displaystyle\frac{3+7}{2}\),因此 \(5\) 是一个均衡素数。
\(3<\displaystyle\frac{2+5}{2}\),因此 \(3\) 是一个弱素数。
反素数
记 \(\tau(x)\) 的值为 \(x\) 的因数个数,若一个正整数 \(x\) 满足:对于任意的小于 \(x\) 的正整数 \(i\),有 \(\tau(x)>\tau(i)\),则称 \(x\) 为反素数。
感性的理解一下,素数就是相对来说因数较少的数,反素数就是相对来说因数较多的数辣。
令反素数 \(x=p_1^{e_1}*p_2^{e_2}*\dots p_{n-1}^{e_{n-1}}*p_n^{e_n}\),它有两个性质:
- \(p_1=2\),且 \(p_1,p_2,\dots,p_{n-1},p_n\) 都是连续的素数;
- \(e_1\geq e_2\geq\dots\geq e_{n-1}\geq e_n\)。
证明:主要是根据 \(\tau(x)=(1+e_1)*(1+e_2)*\dots*(1+e_{n-1})*(1+e_n)\) 这个式子来证。
对于性质1,反证法,如果 \(x\) 是一个反素数,且它不是由从 \(2\) 开始的连续素数相乘得到的,那么一定存在某个 \(p_k^{e_k}\),我们可以令 \(e_k\) 不变,\(p_k\) 变成更小的素数,此时找到了一个比 \(x\) 更小的数 \(y\),且 \(\tau(y)=\tau(x)\),与 \(x\) 是反素数矛盾,得证。
对于性质2,同样的道理,如果 \(x\) 是一个反素数,且质因数分解中存在一对 \(i,j\) 满足 \(i<j\and e_i<e_j\),那么只需调换 \(p_i\) 和 \(p_j\),即从 \(p_i^{e_i}*p_j^{e_j}\) 变成 \(p_j^{e_i}*p_i^{e_j}\),此时就又找到了一个比 \(x\) 更小的数 \(y\),且 \(\tau(y)=\tau(x)\),与 \(x\) 是反素数矛盾,得证。
参考资料
标签:tau,梅森,热尔曼,那些,安全,素数,花里胡哨,密码学 来源: https://www.cnblogs.com/olderciyuan/p/16240839.html