@
gamexg #17 你的结论碰巧是正确的,然而论证是错误的
首先“公钥是两个大素数乘积,私钥是两个大素数本身”这句话是错误的,你下面的例子里的那两个大素数并不是私钥本身,而是用于生成公私钥的元素,虽然现有的工程实践中在设计私钥文件格式时顺便保存了这两个大素数,然而在使用私钥进行加解密时并用不到他们,换句话说你完全可以自己设计一种密钥文件格式,公私钥中都不保存大素数,也完全不影响使用
除了上面这个原因,还有另一个原因,为了下文简便先将 RSA 密钥的生成过程粗略地描述下,详细的过程在任何一篇 RSA 算法细节的文档中都能找到,生成两个大素数 p 和 q,乘积为 n,生成随机数 e,利用 n 和 e 计算出 d,注意这里已知 n 和 d 的话同样是可以计算出 e 的,二者地位等同,n 和 e 及 n 和 d 分别作为公私钥,然而现有的实现中 e 并不是用随机数,而是固定值 65537,于是只能 n 和 e 作为公钥,n 和 d 作为私钥,并且私钥文件中同时还保存了 pq 等其他信息
综上所述,公私钥不能互换并不是算法本身决定的,而只是现有工程实践的特例,原始的 RSA 算法中二组密钥实际地位等同,谁是私钥谁是公钥完全取决于后续使用时谁公开谁保密