不管我将使用什么KDF,让我们想象一下,我必须生成两个密钥:一个用于身份验证,另一个用于加密(它将始终保留在生成它的设备上,直到注销为止)。当然,我用于加密和解密的密钥必须始终是相同的。
我在这个网站上读到了一些答案,建议为两个密钥生成一个随机的盐,并将其保存在这些(最好是分开的)。但是有一个问题:当用户必须解密数据或验证自己时,他将需要这种精确的盐,它必须从数据库中获取。既然他还没有鉴定,我怎么能相信那些向我要盐的人呢?因为如果我把它给任何需要它的人,用它是没有意义的。
也许我错了,因为我是个新手。如果我没有弄错我的假设,我如何才能解决这个僵局?我读到有人建议在这种情况下使用电子邮件或用户名的散列作为salt。这是一个很好的练习吗?考虑到客户端的任何人都可以看到我在数据上所做的事情。
发布于 2020-05-03 20:05:54
既然他还没有鉴定,我怎么能相信那些向我要盐的人呢?因为如果我把它给任何需要它的人,用它是没有意义的。
那就是你出错的地方。盐是公开的:它们的目的是根据导出的密钥是唯一的,而不是秘密的。对KDF的安全性分析必须假定所使用的任何盐都是公开的,因此向任何提出要求的人发布它们都是安全的。这是盐的定义性质之一,而不是“胡椒”。辣椒往往提供的好处,不能提供无法通过增加成本参数,并复杂的储存,所以他们没有太多的使用。
https://crypto.stackexchange.com/questions/80432
复制相似问题