cryptography - 当给定 2 个密文且公钥相差 1 位时,在 RSA 中查找原始消息
问题描述
使用 RSA, 已知:
K_1
- 公钥K_2
- 公钥C_1
=E(M,K_1)
- 密文C_2
=E(M,K_2)
- 密文- 密钥 K_1 和 K_2 仅在一位不同(我们不知道是哪一位)。
如何找到原始的纯文本 M? 注意:不能使用蛮力。
我在某处读到
r*K_1 + s*K_2 = 1 modN,
和r
(或s
)也可能是负面的。
因此,可以这样找到 M: ((C_1 )^-1)^-r * (C_2)^s = M
注意: ((C_1 )^-1)
可以计算C_1
,所以M
可以计算。
问题:谁说的gcd(K_1,K_2) = 1,
那怎么可能是真的r*K_1 + s*K_2 = 1 modN
?
其次,如果该解决方案不正确,任何人都可以告诉我他如何解决这个问题?
解决方案
假设 K_1 和 K_2 是合法的密钥,则应该存在以下内容:
gcd(K_1, φ(φ(N))=1
欧拉函数gcd(K_2, φ(N))=1
在哪里。φ
鉴于此,我们知道 K_1 和 K_2 一定是奇数。根据这些密钥仅相差 1 位的信息,我们知道gcd(K_1, K_2)=1
. 这意味着r s
存在诸如rK_1 + sK_2 = 1
(定义gcd
)。
我们知道C_1 = E(M,K_1)
和C_2 = E(M,K_2)
。
让我们乘以C_1^r
,C_2^s
看看我们得到了什么:
C_1^r * C_2^s = (M^K_1)^r * (M^K_2)^s = M^(rK_1 + sK_2) = M^1 = M
我们找到了原始消息 M。
推荐阅读
- java - 如何在springBoot应用程序(application.properties)中配置“idle_in_transaction_session_timeout”数据库属性
- c++ - QT c++:插入多行编辑
- php - 如何在 Mailjet 分页中获取最后一页或总记录
- excel - 我想存档按钮所做的操作,但我的组合框中出现错误,不知道为什么
- javascript - 活动选择结束
- android - 应用程序特定目录未在 android 的外部存储目录中创建
- java - 如何在 Spring Boot Maven 项目中正确添加 Data REST 依赖项?
- c# - 如何再次选择已经选择的gridview项目
- pyspark - Pyspark:用 groupby 替换逐行循环?
- angular - 如何在 Angular 应用程序上以编程方式添加 fa-icon