agn*_*ter 24 cookies openssl cryptography rsa
[免责声明:我知道,如果你对加密有任何了解,你可能会告诉我为什么我做错了 - 我已经做了足够的谷歌搜索,知道这似乎是典型的反应.]
假设以下内容:您有一个中央权限,想要为给定域发出登录cookie.在此域上,您不一定信任所有人,但您有一些能够读取cookie的关键端点.我说了一些,但在实践中,这些"可信"的合作伙伴可能很大.Cookie不包含太多信息 - 用户名,时间戳,到期日,随机数.当然,出于性能原因,即使在加密后(在合理范围内),它仍应保持很小.现在,有两个安全问题:
1)我们不信任此域上的每个网络服务器都有用户数据.因此,读取cookie的能力应仅限于这些可信赖的合作伙伴.2)虽然我们相信这些合作伙伴能够保护我们用户的数据,但我们仍然希望权威的中心点是不可伪造的(同样在合理范围内).
现在,如果我们为权限生成私有RSA密钥并保密,并将公钥仅分发给"可信伙伴",我们应该能够使用私钥进行加密,并且任何拥有公钥的人都可以读取它. .我不清楚的是,是否仍然需要签署该消息,或者解密行为是否是使用私钥生成的证据?这种方案的优点还是比向所有相关方传播对称密钥并使用它加密更好或更差,而使用私钥只是为了签名?当然可以随意告诉我这是一个愚蠢的想法,但请记住,实际的论点可能比重塑爱丽丝和鲍勃更有说服力.
哦,并且实现指针是受欢迎的,尽管可以在Google上找到基础知识,如果有任何"陷阱"可能会有用!
caf*_*caf 19
Nate Lawson 在这里和这里解释了为什么你不能安全地使用公钥作为一个密切关注的秘密解密密钥(这是一个微妙的点,并且是很多其他人在你之前做出的错误,所以不要感觉不好!).
只需使用您的公钥来签署真实性,并使用单独的对称密钥来保密.
我已经阅读了有关公共密钥系统的有趣攻击,特别是RSA,我完全同意这个结论:
公钥密码系统和RSA尤其脆弱.不要使用它们而不是设计它们.
(这意味着:使用公钥进行加密,使用私钥进行签名,以及其他任何正在玩火的内容.)
附录:
如果您对缩小生成的cookie的大小感兴趣,则应考虑使用ECDSA而不是RSA来生成签名 - ECDSA签名远小于等效安全因子的RSA签名.
在密码学中,你就是你所知道的.在您的方案中,您有一个能够发布cookie的中央权限,并且您不希望其他实体能够执行相同的操作.所以中央机关必须"知道"一些私人数据.此外,您希望"受信任的Web服务器"能够访问cookie的内容,并且您不希望任何人阅读cookie.因此,"可信Web服务器"也必须拥有自己的私有数据.
通常的方式是授权机构在cookie上应用数字签名,并使用可信Web服务器已知的密钥对cookie进行加密.你在想什么看起来像这样:
虽然这样的方案可行,但我发现其中存在以下问题:
目前正在研究确保相同类型的机密性和可验证完整性的问题.您可以查找签密.目前尚无既定标准.
基本上我认为你会更喜欢更经典的设计,数字签名仅用于签名,而(对称或非对称)加密用于机密部分.这将允许您使用尽可能少的自制代码来使用现有库.
对于签名部分,您可能希望使用DSA或ECDSA:它们产生更短的签名(对于相当于1024位RSA签名的安全性的DSA签名,通常为320位).从中央权威的角度来看,ECDSA还可以提供更好的性能:在我的PC上,使用单核,OpenSSL每秒可以处理超过6500个ECDSA签名(在P-192 NIST曲线中)和每个"仅"1145个RSA签名秒(使用1024位密钥).ECDSA签名包含两个192位整数,即384位进行编码,而RSA签名长度为1024位.P-192中的ECDSA被认为至少与RSA-1024一样强,可能更强.
您应该使用某种数字信号方案,或其他一些旨在解决您的方案完整性问题的机制.
加密本身是不够的.你怎么知道解密的messege应该是什么?解密用正确密钥加密的cookie肯定会提供"有效"的cookie,但是当您解密用错误密钥加密的cookie时会发生什么?或者只是一些毫无意义的数据?好吧,你可能只是得到一个看起来有效的cookie!(时间戳在您认为有效的范围内,用户名是合法的,随机数是......呃......数字等).
在我所知的大多数非对称加密算法中,没有内置验证.这意味着用错误的密钥解密消息不会"失败" - 它只会给你一个错误的明文,你必须将其与有效的明文区分开来.这就是完整性发挥作用的地方,最常见的是 - 使用数字签名.
顺便说一下,RSA经过长期研究并且有几个"陷阱",所以如果你打算从头开始实现它,你最好先读一下如何避免创建"相对容易破解"的密钥.
| 归档时间: | 
 | 
| 查看次数: | 36208 次 | 
| 最近记录: |