$\mathcal{Crypto}$ 共模攻击原理实现以及$\mathcal{CRT}$优化
\(\mathcal{共模攻击概述}\)
共模攻击是一种攻击 \(\mathcal{RSA}\) 加密的技术,当两个密文使用相同的 \(\mathcal{RSA}\) 公共模数时,攻击者可以使用中国剩余定理\(\mathcal{(CRT)}\)和最大公因数\(\mathcal{(GCD)}\)算法,推导出明文。这种攻击技术利用的是\(RSA\)加密算法中的数学性质,特别是模运算具有分配律和结合律的属性。共模攻击只需要拥有两个使用相同的公共模数加密的密文就能够推导出明文。因此,RSA算法的安全性在很大程度上依赖于保护其公共模数的机密性。
n:RSA公共模数
e1 & e2:RSA加密密钥指数
c1 & c2:对同一明文加密后得到的两个密文
使用 \(gmpy2.gcdext()\) 函数来计算两个密钥指数\(e1\)和\(e2\)的最大公因数,以及用于计算解密密钥的系数\(s1\)和\(s2\)。这些系数可以通过下面的式子计算得出:
s1 * e1 + s2 * e2 = gcd(e1, e2)
这里的 \(gcdext\) 函数返回三个参数,其中第一个是最大公因数,第二个是 \(s1\) ,第三个是 \(s2\)。
然后,代码计算明文\(m\),通过以下公式来计算:
m = (c1^s1 * c2^s2) mod n
\(\mathcal{CRT优化}\)
可以使用中国剩余定理 \((CRT)\) 来优化这段代码,这样可以更快地计算明文 \(m\) ,从而提高解密的效率。 \(CRT\) 可以利用多个同余方程求解一个线性方程组,这个线性方程组的解就是原来的方程组的解。
假设p和q是n的两个质因数,它们分别满足以下条件:
p ≡ 1 (mod e1)
p ≡ 0 (mod e2)
q ≡ 0 (mod e1)
q ≡ 1 (mod e2)
这里 \(e1\) 和 \(e2\) 分别是RSA加密的两个密钥指数。
我们可以使用 \(CRT\) 求解 \(m\) ,其计算公式如下:
m = (c1 * q * gmpy2.invert(q, p) + c2 * p * gmpy2.invert(p, q)) mod n
在这个公式中,\(invert()\) 函数用于计算模 \(p\) 或 \(q\) 的逆元,即p或q的乘法逆元,其中 \(n = p * q\) 。
下面是优化后的代码:
p = gmpy2.powmod(c1, e1, n)
q = gmpy2.powmod(c2, e2, n)
p1 = gmpy2.invert(q, n)
q1 = gmpy2.invert(p, n)
m = (c1 * q * p1 + c2 * p * q1) % n
随机推荐
- Mac下如何使用EVE-NG的telnet客户端和wireshark抓包
当我没有安装SecureCRT,点击启动的设备,弹出使用终端打开,但是由于eve中telnet使用的url是telnet xx.xx.xx.xx:xxxx 的形式,其在终端app中不能正常工作,tel ...
- 添加新模块 import
import getpass username = input("username") password = input("password") #passwo ...
- 通用CSS命名惯例
通用的 CSS 命名惯例 在参与规模庞大.历时漫长.且参与人数众多的项目时,要确保每一行代码都像是同一个人编写的:这就要求所有开发者,都遵守相同的代码规范.在先前的文章前端项目开发规范意见,从宏观角度 ...
- Sharp7与S7NetPlus 性能测试
介绍 Sharp7和都S7NetPlus是纯C#实现的基于以太网与S7系列的西门子PLC通讯的开源库.都支持.net core 跨平台可以部署在linxu, docker,windwos 中. 测 ...
- 圣诞树代码_HTML
这个冬天给TA栽不一样的圣诞树 直接上效果 <!DOCTYPE html> <html lang="en" > <head> <meta ...
- node 版本管理
32位版本的node,运行较大的项目,会内存溢出.所以建议安装64位的版本,且运行速度比32位快.node14以下的版本支持node-sass,版本node16以上的不再支持node-sass,而sa ...
- c++ dll 传递string参数
用c++编写了一个dll,需要传递一个路径的变量参数,刚开始想着使用string变量,但是在实践过程中string变量会成为乱码,尽量避免使用string变量传递参数,可以使用const char* ...
- Spring系列之基于注解的容器配置7
目录 基于注解的容器配置 @Required(弃用) `@Autowired` `@Primary` @Qualifier 使用泛型作为自动装配限定符 `@Resource` `@Value` 使用` ...
- sqlserver substring 函数截取text格式文本格式乱码导致的定位错误的问题
描述:使用 charindex 函数对 text 字段所要截取的内容下标读取例如:str(表字段名称-类型text)= <p>●123456</p> 截取 123 , inde ...
- git的基础指令练习
#版本回退 git reset commitId --hard