Cryptography 可以用私钥加密/用公钥解密吗?

Cryptography 可以用私钥加密/用公钥解密吗?,cryptography,cookies,openssl,rsa,Cryptography,Cookies,Openssl,Rsa,[免责声明:我知道,如果你了解加密技术,你可能会告诉我为什么我做错了——我已经在谷歌上搜索了足够多的信息,知道这似乎是典型的回答。] 假设以下情况:您有一个希望为给定域发布登录cookie的中心机构。在这个领域,你不一定信任所有人,但是你有几个关键的端点,这些端点应该能够读取cookie。我说了一些,但实际上,这一“受信任”的合作伙伴数量可能很大。cookie不包含太多信息——用户名、时间戳、到期日和随机数。当然,出于性能原因,即使在加密之后(在合理范围内),它也应该保持较小。现在,有两个安全问

[免责声明:我知道,如果你了解加密技术,你可能会告诉我为什么我做错了——我已经在谷歌上搜索了足够多的信息,知道这似乎是典型的回答。]

假设以下情况:您有一个希望为给定域发布登录cookie的中心机构。在这个领域,你不一定信任所有人,但是你有几个关键的端点,这些端点应该能够读取cookie。我说了一些,但实际上,这一“受信任”的合作伙伴数量可能很大。cookie不包含太多信息——用户名、时间戳、到期日和随机数。当然,出于性能原因,即使在加密之后(在合理范围内),它也应该保持较小。现在,有两个安全问题:

1) 我们不信任此域上的每个Web服务器都有用户数据。因此,读取cookie的能力应该限制在这些受信任的合作伙伴。 2) 虽然我们相信这些合作伙伴会保护我们用户的数据,但我们仍然希望中心授权点是不可伪造的(同样,在合理范围内)

现在,如果我们为权威机构生成一个RSA私钥并对其保密,并且只将公钥分发给“受信任的合作伙伴”,那么我们应该能够使用私钥进行加密,并使任何人都可以使用公钥读取它。我不清楚的是,是否仍有必要对消息进行签名,或者解密行为是否证明消息是用私钥生成的?这是否比向所有相关方传播对称密钥并使用对称密钥进行加密,而仅使用私钥进行签名更好或更差?当然,请随意告诉我这是一个愚蠢的想法,但请记住,实际的争论可能比重新审视爱丽丝和鲍勃更有说服力


哦,虽然你可以在谷歌上找到基础知识,但如果有任何“陷阱”的话,那么实现指针是很有用的

您应该使用某种数字信号方案,或其他旨在解决您的场景中的完整性问题的机制

加密本身是不够的。 你怎么知道解密的消息是它应该是什么? 解密使用正确密钥加密的cookie肯定会提供“有效”cookie,但是当您解密使用错误密钥加密的cookie时会发生什么?或者只是一些毫无意义的数据?嗯,你可能会得到一块看起来有效的饼干!(时间戳在你认为有效的范围内,用户名是合法的,随机数是……呃……一个数字等等)。< /P> 在我所知道的大多数非对称加密算法中,没有内置的验证。这意味着用错误的密钥解密消息不会“失败”——它只会给你一个错误的明文,你必须将它与有效的明文区分开来。这就是诚信发挥作用的地方,最常见的是使用数字签名


顺便说一句,RSA被研究了很长时间,有几个“陷阱”,所以如果你打算从头开始实现它,你最好提前阅读如何避免创建“相对容易破解”的密钥。

在密码学中,你就是你所知道的。在您的场景中,您有一个能够发布cookie的中央机构,并且您不希望其他实体能够这样做。因此,中央当局必须“知道”一些私人数据。此外,您希望“受信任的web服务器”能够访问Cookie的内容,并且您不希望只有任何人阅读Cookie。因此,“受信任的web服务器”也必须有自己的私有数据

通常的做法是,管理局对cookie应用数字签名,并使用可信web服务器已知的密钥对cookie进行加密。您的想法如下所示:

  • 有一个RSA模n和两个常用的RSA指数d和e(例如,ed=1模p-1和q-1,其中n=pq)。中央机构知道d,可信的web服务器知道e,模n是公共的
  • 中央机构通过将cookie填充为整数c模n并计算s=c^d模n来处理cookie
  • 受信任的web服务器通过计算c=s^e mod n来访问cookie数据
虽然这项计划可能奏效,但我看到其中存在以下问题:

  • 对于基本安全性,e必须很大。在通常的RSA描述中,e是公共指数,并且很小(如e=3)。当指数很小时,它是公共的并没有问题,但由于您不希望第三方可以访问cookie内容,所以必须使e足够大,以抵抗穷举搜索。同时,受信任的web服务器不能知道p和q,只能知道n。这意味着受信任的web服务器将需要计算具有大模数和大指数的内容,并且不知道模数因子。这似乎是一个次要问题,但它取消了许多RSA实现库的资格。您将“依靠自己”,拥有大整数(以及所有被称为“侧通道泄漏”的实现问题)
  • RSA签名的抵抗力和RSA加密的抵抗力已经得到了很好的研究,但没有结合起来。恰好填充是必要的,并且加密和签名不使用相同的填充方案。这里,您需要一个对签名和加密都有好处的填充方案。密码学家通常认为,当数百名受过训练的密码学家已经观察了该方案几年后,发现了良好的安全性,并且没有发现明显的弱点(或固定了任何弱点)。自制的方案几乎总是无法实现安全性
  • 如果很多人知道一个秘密,那么它就不再是秘密了。在这里,如果所有web服务器都知道e,那么在不选择新的e并将新值传递给所有剩余的受信任web服务器之前,您无法撤销受信任web服务器的权限