-3

假设我们有下一个字符串:

13:45:11:17:-65:107

该字符串是 RSA 加密的产物。每个数字都是加密信息的一个字节。我们用公钥加密它。之后我们决定“隐藏”它,下一个方法:1=q,3=f,4=d,5=o,7=y,6=p,0=b,-=u,:=t;

毕竟,我们有下一个字符串:

qftdotqqtqytupotqby

假设服务器端将以相反的方式取消隐藏该字符串。并通过私钥解密。

所以我问:如果有人偷了这个字符串,但他没有任何访问我们的软件的权限。他只有一个字符串 - qftdotqqtqytupotqby

有没有可能让他明白

qftdotqqtqytupotqby = 13:45:11:17:-65:107

4

2 回答 2

1

如果您假设攻击者无法访问您的软件,因此他所拥有的只是一些 ECB(替代密码)编码的 RSA 密文,那么答案是否定的,他无法逆转它。(这假设 RSA 密文在没有密钥的情况下实际上是按字节计算的“伪随机”。如果它们有一些明文可预测的标头信息,那么 ECB 可能会受到攻击。)

然而,这是一个需要考虑的非常弱的攻击者位置。一般来说,您应该假设攻击者拥有您的软件的副本,否则您的软件的每个副本实际上都是整个系统的秘密主密钥。

我倾向于使用 AES 和您的自制 ECB 的已编译密钥。至少这限制了密钥的秘密,而不是潜在的整个软件包。您还可以使用此技术将安全风险划分为仅具有相同编译密钥的软件包。

于 2013-01-30T09:31:40.477 回答
1

从严格的安全角度来看,字母编码毫无价值并且不会增加任何保护(请参阅Kerkoff 原则),因为您不能假设攻击者不知道您的实现。安全性必须完全依赖于密钥。

假设 RSA 输出看起来确实与问题中呈现的完全一样(这意味着使用了非常小的 RSA 密钥大小),那么很容易至少部分破坏简单的替换,因为 RSA 密文的 ASCII 表示是高度结构化的。最常见的符号是冒号 ( :),而仅出现在冒号旁边的符号是减号 ( -)。如果冒号之间有四个符号,最左边的是减号。如果冒号之间有三个符号,最左边是减号、一个 ( 1) 或两个 ( 2)。剩下的 8 位数字并不容易,但结合使用的 RSA 的小密钥大小并不是真正的障碍。


以下不是问题的直接部分,但也必须说:您的协议的 RSA 部分是否安全取决于许多因素,以至于不可能写出完整的答案。这里只是上述方案如何存在缺陷的两个示例:

  • 一个字节的小块大小意味着 8 位的密钥大小,即使只用笔和纸也很容易破解。
  • 如果这是没有安全填充的普通教科书 RSA 加密(例如 PKCS#1 2.x OAEP),那么该方案存在致命缺陷。攻击者可以简单地使用公钥来计算一个包含所有 256 字节值的加密版本的字典,并使用该字典来解密所有加密字节。

话虽如此,按字节进行 RSA 效率极低,最好将所有字节放在一个 RSA 块中,或者如果单个块的数据过多,请使用具有对称算法的混合方案进行批量加密和只有 RSA 加密随机会话密钥,正如用户 1131467 所建议的那样.

于 2013-01-30T12:12:32.260 回答