如果我保留公钥并发布私钥呢?



据我所知,我必须保证私钥的安全并发布公钥,这样任何人都可以使用公钥加密任何数据,而我可以使用我自己的私钥解密它(没有人拥有)。

问题是,如果我发布私钥并保留公钥会怎么样?该算法似乎又起作用了:任何人都用私钥(已发布)锁定数据,但没有人拥有公钥(由我保持安全)。

是什么使公钥成为公钥?私钥中有哪些安全且重要的资料是我不应该向任何人展示的?

对于一个完整的加密+解密(或签名+验证)过程,您总是需要两个密钥。一个用于加密/签名,另一个用于解密/验证。对于哪个操作使用哪个键(原则上)是不相关的,只要您为反向操作使用相应的另一个键即可。

那么让我们假设您使用类似openssl的工具来生成密钥对AB

在发布这些密钥时,我们必须考虑两个方面

  • 数学从纯数学的角度来看(暂时不考虑安全性),您将哪些密钥公开,哪些密钥保密是无关紧要的。所有进程都将以任何方式工作。

    decrypt(encrypt(data, A), B) == data == decrypt(encrypt(data, B), A)verify(sign(data, A), B) == OK == verify(sign(data, B), A)

  • 安全当我们考虑到安全性时,通过数字签名证明你的身份是唯一可能的,如果你使用钥匙,没有人可能知道。对于某些加密系统,可以从密钥B导出密钥A,即存在一个函数,使得

    A = f(B)

    而不是相反,即没有函数使得

    B = f(A)

    因此,当您知道B时,您也知道A,但是如果您只知道A,则不可能推导出B

因此B被称为私钥,必须保持私有,A是公钥,可以发布。如果你用另一种方式来做,从数学的角度来看,这些过程仍然有效(尽管大多数系统会拒绝你的密钥),但它们不再安全了……

根据系统的使用,公钥可能是'众所周知的'。例如,对于RSA,公钥只是你的模数加上公共指数65537,而私钥是模数加上私有指数(这是真正的秘密)。所以知道私钥的人在默认情况下也知道公钥。大多数基于椭圆曲线的系统也是如此。

理论上,人们可以创建一个rsa风格的系统,其中公共指数也难以确定(例如随机生成的足够位的值是不可猜测的),在这种情况下,它将更加对称,但这不是系统通常设置的方式。在任何情况下,知道密钥背后的秘密参数(RSA中的模数因子)的人都可以很容易地从私钥中确定公钥,或者从公钥中确定私钥。


在像Diffie-Hellman这样的系统中,公钥实际上是通过一个众所周知的算法从私钥中派生出来的(除了私钥本身之外没有任何秘密参数),所以在这种情况下,密钥根本不是对称的,任何知道私钥的人都可以轻松地确定公钥。

最新更新