为什么都是私钥签名公钥验签,而不是直接私钥加密公钥解密?

2018-12-21 09:39:51 +08:00
 zjsxwc

为什么都是私钥签名公钥验签,而不是直接私钥加密公钥解密?

是处于什么考虑这么做?性能考虑吗?

8765 次点击
所在节点    程序员
48 条回复
CRVV
2018-12-22 09:59:20 +08:00
@geelaw
> RSA 这个名字既可以指代使用 RSA trapdoor 的加密方案,也可以指代使用 RSA trapdoor 的签名方案。

RSA 这个名字还可以指代 RSA 算法本身。或者说,这里列出来的几个基本操作 https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Operation

> 首先你需要定义“本质”。

我原本的意思是,可以任选一个密钥来加密,用另一个密钥来解密,在加解密的过程中不需要区分哪个密钥是哪个密钥。

> 为什么不能把 RSA 加密的公钥、加密算法当作 RSA 签名私钥、签名算法,把 RSA 解密的私钥、解密算法当作 RSA 签名公钥、验证算法?

这是四个问题,其中一个是,为什么不能把 RSA 加密的加密算法当作 RSA 签名算法。
这就是楼主问的问题
对于任何一个教科书上有答案的问题,你都可以回答说“教材上是这么写的”。所以我说你的回答是正确的废话。

> 你想象中的攻击并不一定能够成功。

你好像完成不懂密码学上的攻击是什么。一个攻击成功的概率高于暴力破解的概率,就算作一个攻击了。
你可以自己写代码去试试这个方法的成功概率有多少,当然不写代码也应该知道这个方法成功的概率大约是什么水平。
如果你认为这个方式能起到签名的作用,那你真的“需要阅读密码学的教材”了

某个东西是 “ private class member ” 就不继续往下深究了,我不认可这样的学习方式。
geelaw
2018-12-22 16:58:47 +08:00
@CRVV #41

> RSA 这个名字还可以指代 RSA 算法本身。

我没有说 RSA 不能指代 RSA trapdoor function。

> 我原本的意思是,可以任选一个密钥来加密,用另一个密钥来解密,在加解密的过程中不需要区分哪个密钥是哪个密钥。

这仍然是定义的问题,用来加密和解密的那个输入叫做公钥、私钥,它们的名字是根据用法决定的,而不是这些字符串先有名字,后把它们安插到对应的参数位置。

> 你对“为什么不能……?”的回复

我在展示一个正确的提问方法。你不需要回答这个问题(当然,你的回答可能有助于楼主)。

> 你好像完成不懂密码学上的攻击是什么……那你真的“需要阅读密码学的教材”了

你在臆想我是否懂,我说的“成功”的意思是指该方法有 non-negligible advantage。首先你的“暴力破解”的说法很含糊,你是指目前人类知道的最好方法的成功概率呢,还是指字面上的枚举法的概率呢?如果是后者,一些密码学方案是缩减安全程度的,然而只要保障 adversary 的成功概率仍然是 negligible 就可以。

至于为什么“你的攻击方法不一定能成功”,是因为这里很含糊,完全没有说具体的方案设计是怎么样,如果该方案其他地方有额外的验证机制,你的方法的成功概率不一定是 non-negligible。

> 某个东西是 “ private class member ” 就不继续往下深究了,我不认可这样的学习方式。

我并没有说不应该深入学习 private class member。我那句话意在表明先明白接口( public members ),明白术语的意思,然后正确地提出问题,才能获得正确的答案。
reself
2018-12-22 23:37:04 +08:00
@maomo THX,学习了!
查找了一下资料,感觉选择密文攻击和完整性没关系,完整性本身仍然是保证了的(私钥确实签署了这份数据),选择密文攻击的风险应该是泄露明文:
解密和签名、加密和验签的算子都是相同的,导致对已用公钥加密的密文再用私钥签名蕴含了解密,所以攻击者可以截获用公钥加密的密文,然后通过某种运算将密文隐藏,设法使私钥对这份隐藏有密文的数据直接签名,再对签名后得到的"准明文"进行逆运算就可以解出明文,最开始用公钥加密发送出去的明文就泄露了。
hash 一下破坏了这条计算链,所以 hash 又有了抗选择密文攻击的作用。
geelaw
2018-12-23 08:07:18 +08:00
@reself #43 先无论前面的分析对错。最后的部分:是否抗那个攻击取决于 hash 函数的安全性质。
reself
2018-12-23 10:31:49 +08:00
@geelaw 就选择密文攻击的场合而言应该问题不大,因为是对公钥加密后的密文进行 hash,攻击无法达到解出明文的目的,构造 hash 碰撞来篡改倒是有可能,但貌似不属于选择密文攻击了。
如果 hash 安全性也影响抗选择密文攻击的话,能否描述一下攻击的场景呢?网上搜了一下,大多是描述选择明文攻击的,讲选择密文攻击的太少了。
wolfie
2018-12-23 15:26:41 +08:00
加密的意义是什么?
就是验证一个文件没有被篡改?
firefox12
2018-12-23 21:04:28 +08:00
这个问题 我还专门尝试过 对于 RSA 但是好像不可以



Here is an example of RSA encryption and decryption. The parameters used here are artificially small, but one can also use OpenSSL to generate and examine a real keypair.

Choose two distinct prime numbers, such as
{\displaystyle p=61} p=61 and {\displaystyle q=53} q=53
Compute n = pq giving
{\displaystyle n=61\times 53=3233} n=61\times 53=3233
Compute the Carmichael's totient function of the product as λ(n) = lcm(p − 1, q − 1) giving
{\displaystyle \lambda (3233)=\operatorname {lcm} (60,52)=780} {\displaystyle \lambda (3233)=\operatorname {lcm} (60,52)=780}
Choose any number 1 < e < 780 that is coprime to 780. Choosing a prime number for e leaves us only to check that e is not a divisor of 780.
Let {\displaystyle e=17} e=17
Compute d, the modular multiplicative inverse of e (mod λ(n)) yielding,
{\displaystyle d=413} {\displaystyle d=413}
Worked example for the modular multiplicative inverse:
{\displaystyle d\times e{\bmod {\lambda }}(n)=1} {\displaystyle d\times e{\bmod {\lambda }}(n)=1}
{\displaystyle 413\times 17{\bmod {7}}80=1} {\displaystyle 413\times 17{\bmod {7}}80=1}
The public key is (n = 3233, e = 17). For a padded plaintext message m, the encryption function is

{\displaystyle c(m)=m^{17}{\bmod {3}}233} {\displaystyle c(m)=m^{17}{\bmod {3}}233}
The private key is (n = 3233, d = 413). For an encrypted ciphertext c, the decryption function is



public 是 n 和 e
private 是 n 和 d

e 一般都是 65535, 而 n 是双方都知道的, 所以 priavte 加密 public key 基本就是公开的。当然 如果 n 不公开,还是可以认为有一点安全的。 如果只有双方知道 n 这个加密还是安全的。

只是安照算法 直接把 e 替换成 d 然后加密,好像是不行的。
Evilk
2018-12-24 15:16:20 +08:00
这其实是,在两种不同的场景跟需求下的不同的叫法而已

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/519617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX