中国剩余定理

如果已知n的素因子,那么就能够利用中国剩余定理求解方程组。用现代数学的语言来说明就是,中国剩余定理给出了以下的一元线性同余方程组有解的判定条件:

一般而言,如果n的素因子可以分解为:
\[
n=p_1 * p_2 * ... * p_t
\]

那么方程组:
\[
(x \quad mod \quad p_i)=a_i \quad (i=1,2,...t)
\]
有唯一解,这里x<n,就是说一个数被他的余数模这些素数唯一确定

例如,去两个素数2和5,与一个数字9,那么9 mod 2=19 mod 5=4,则小于2*5=10且满足上式的只有9

所以能够得到如果对已任意的a<p,b<q(p,q都是素数),那么,当x<p*q的时候,存在一个唯一的x使得:
\[
x \equiv a(mod \quad p)\quad 且\quad x\equiv b(mod \quad q)
\]
如何计算x

首先通过欧几里得算法找到u,使得:
\[
u * q \equiv 1(mod \quad p)
\]
然后计算:
\[
x=(((a-b) * u) mod \quad p)*q+b
\]
推论:

如果pq都是素数,且 p<q,那么存在一个唯一的x<p*q,使得
\[
a \equiv x(mod \quad p)且b \equiv x(mod \quad q)
\]
如果\(a \ge b\quad mod \quad p\),那么:
\[
x = (((a-(b \quad mod \quad p)) * u)mod \quad p) * q + b
\]
如果\(a < b\quad mod \quad p\),那么:
\[
x = (((a+p-(b \quad mod \quad p)) * u)mod \quad p) * q + b
\]

二次剩余

如果p是素数,且a<p,如果
\[
x^2 \equiv a(mod \quad p) \quad 对某些x成立
\]
那么称a是对模p的二次剩余

而如果a是对模n的一个二次剩余,那么它必定是对模n的所有因子的二次剩余,例如

如果p=7,那么二次剩余是1、2、4

每一个二次剩余都在上面出现了两次

而对于下面的的方程:

不存在一个x的值能够满足任意一个,所以对模7的非二次剩余就是3、5、6

费马小定理

如果m是一个素数,且a不是m的倍数,那么根据费马小定理,有:
\[
a^{m-1} \equiv 1(mod \quad m)
\]

欧拉函数

也称之为\(\varphi\)函数,写作\(\varphi(n)\),\(\varphi(n)\)表示与n互素的小于n的正整数的数目

如果n是素数,那么\(\varphi(n)=n-1\),如果\(n=pq\),(p、q为素数)那么\(\varphi(n)=(p-1)(q-1)\)

根据费马小定理的欧拉推广,如果`gcd(a,n)=1,那么:
\[
a^{\varphi(n)}\quad mod\quad n=1
\]

Rabin算法

破解RSA的关键即在于大整数的分解,只要n被成功分解,就能够破译。而Rabin密码体制是对RSA的一种修正。

  1. Rabin密码体制对于同一密文,可能有两个以上对应的明文
  2. 破译该密码体制同样等价于对大整数的分解,RSA中选取的公钥e满足\(1<e<\varphi(n)\),而Rabin中则选取e=2

密钥的产生

  1. 随机选择两个大素数 pq,通常选取pq\(\equiv 3(mod \quad4)\)

  2. 密钥为pq

  3. 公钥n=p*q

  4. 明文:m,密文:c

  5. 加密:\(c \equiv m^2 \quad mod \quad n\)

  6. 解密过程如下:

    1. \(m_p=c^{\frac{p+1}{4}}mod \quad p\)

      \(m_q=c^{\frac{q+1}{4}}mod \quad q\)

    2. 使用扩展欧几里得算法得到\(y_p和y_q\),使得\(y_p·p+y_q·q=1\)

    3. 利用中国剩余定理得到

      \(x_1=(y_p·p·m_q+y_q·q·m_p) mod \quad n\)

      \(x_2=n-x_1\)

      \(x_3=(y_p·p·m_q-y_q·q·m_p) mod \quad n\)

      \(x_4=n-x_3\)

    4. 举例

      a. 假定计算:\(p=7,q=11,n=77,m=20\)

      b. 那么:\(c=m^2 \quad mod \quad n=400 \quad mod \quad 77=15\)

      c. 所以:

      ​ \(m_p=c^{\frac{p+1}{4}}mod \quad p=15^2 \quad mod \quad 7=1\)

      ​ \(m_q=c^{\frac{q+1}{4}}mod \quad q=15^2 \quad mod \quad 11=9\)

      d. 利用扩展欧几里得算法计算\(y_p·p+y_q·q=1;y_p=-3,y_q=2\)

      e. 最终得到:

    ​ \(x_1=(y_p·p·m_q+y_q·q·m_p) mod \quad n=(-3·7·9+2·11·1)mod 77=64\)

    ​ \(x_2=n-x_1=77-64=13\)

    ​ \(x_3=(y_p·p·m_q-y_q·q·m_p) mod \quad n=(-3·7·9-2·11·1)mod 77=20\)

    ​ \(x_4=n-x_3=77-20=57\)

参考

《应用密码学》(协议、算法与C源程序):https://item.jd.com/11362600.html

维基百科:https://en.wikipedia.org/wiki/Rabin_cryptosystem

Rabin算法的更多相关文章

  1. Miller Rabin算法详解

    何为Miller Rabin算法 首先看一下度娘的解释(如果你懒得读直接跳过就可以反正也没啥乱用:joy:) Miller-Rabin算法是目前主流的基于概率的素数测试算法,在构建密码安全体系中占有重 ...

  2. Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法

    BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1044  Solved: 322[Submit][ ...

  3. Miller Rabin 算法简介

    0.1 一些闲话 最近一次更新是在2019年11月12日.之前的文章有很多问题:当我把我的代码交到LOJ上,发现只有60多分.我调了一个晚上,尝试用{2, 3, 5, 7, 11, 13, 17, 1 ...

  4. Miller Rabin算法学习笔记

    定义: Miller Rabin算法是一个随机化素数测试算法,作用是判断一个数是否是素数,且只要你脸不黑以及常数不要巨大一般来讲都比\(O(\sqrt n)\)的朴素做法更快. 定理: Miller ...

  5. 【数论基础】素数判定和Miller Rabin算法

    判断正整数p是否是素数 方法一 朴素的判定   

  6. (Miller Rabin算法)判断一个数是否为素数

    1.约定 x%y为x取模y,即x除以y所得的余数,当x<y时,x%y=x,所有取模的运算对象都为整数. x^y表示x的y次方.乘方运算的优先级高于乘除和取模,加减的优先级最低. 见到x^y/z这 ...

  7. 素数测试算法(基于Miller-Rabin的MC算法) // Fermat素数测试法

    在以往判断一个数n是不是素数时,我们都是采用i从2到sqrt(n)能否整除n.如果能整除,则n是合数;否则是素数.但是该算法的时间复杂度为O(sqrt(n)),当n较大时,时间性能很差,特别是在网络安 ...

  8. Miller-Rabin算法 codevs 1702 素数判定 2

    转载自:http://www.dxmtb.com/blog/miller-rabbin/ 普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(slog³n)的算法. 定理一:假如p是质数,且 ...

  9. 【Java-加密算法】对称加密、非对称加密、单向散列(转)

    一提到加密,就会联想到数字签名,这两个经常被混淆的概念到底是什么呢? 加密:加密是一种以密码方式发送信息的方法.只有拥有正确密钥的人才能解开这个信息的密码.对于其他人来说,这个信息看起来就像是一系列随 ...

随机推荐

  1. springboot参数校验

    为了能够进行嵌套验证,必须手动在Item实体的props字段上明确指出这个字段里面的实体也要进行验证.由于@Validated不能用在成员属性(字段)上,但是@Valid能加在成员属性(字段)上,而且 ...

  2. 导入maven项目pom.xml首行报错missing artifact。。。

    解决方法: 在maven地址(如一般默认的地址C:\Users\Administrator\.m2\repository\)找到对应包名 加后缀名为.lastUpdated文件(如:ojdbc14.l ...

  3. 让dcef3支持mp3和h.264 mp4解码播放

    嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件.CE ...

  4. IOS-swift5.1快速入门之旅

    快速之旅 传统表明,新语言中的第一个程序应在屏幕上打印“Hello,world!”字样.在Swift中,这可以在一行中完成: print("Hello, world!") // P ...

  5. JSP基础--EL表达式

    EL(表达式语言) 1 EL概述 1.1 EL的作用 JSP2.0要把html和css分离.要把html和javascript分离.要把Java脚本替换成标签.标签的好处是非Java人员都可以使用. ...

  6. Cookie/Session/Local Storage/IndexedDB

    本文主要总结客户端/浏览器端数据存储的技术. 在客户端或者浏览器端存储,可以快速的访问页面,当前主要有Cookie,Session,Local Storage,IndexedDB四种(WebSQL呗废 ...

  7. Spring自动装配之依赖注入(DI)

    依赖注入发生的时间 当Spring IOC 容器完成了Bean 定义资源的定位.载入和解析注册以后,IOC 容器中已经管理类Bean定义的相关数据,但是此时IOC 容器还没有对所管理的Bean 进行依 ...

  8. 状压BFS

    ​题意:1个机器人找几个垃圾,求出最短路径. 状压BFS,这道题不能用普通BFS二维vis标记数组去标记走过的路径,因为这题是可以往回走的,而且你也不能只记录垃圾的数量就可以了,因为它有可能重复走同一 ...

  9. SQL 日期格式化与格式转化

    日期格式化 Select CONVERT(varchar(), GETDATE(), ): :57AM Select CONVERT(varchar(), GETDATE(), ): // Selec ...

  10. 【JAVA】 03-Java中的异常和包的使用

    链接: 笔记目录:毕向东Java基础视频教程-笔记 GitHub库:JavaBXD33 目录: <> <> 内容待整理: 异常 异常和错误的发生和区别 异常:java运行期间发 ...