73 条回复  ·  8519 次点击
nbndco 小成 2025-7-13 09:58:31
@WngShhng 可能我对于安全的理解和你不同,似乎加密这个行为对你来说只是个 buzz word 。 你的产品的安全性完全建立在攻击者无法获取到用户的数据的前提下(我不懂这个前提下加密的意义)。一旦攻击者获取到用户数据,你精心设计了一套迷惑用户已加密但是把所有解密密码拱手送给攻击者的机制,确保加密完全失效。 确实也没啥可聊的了。
Ljxtt 初学 2025-7-13 09:59:43
@oott123 最后一句真的所见略同,刚想这么回。真的太刻板了。。
likelylee 初学 2025-7-13 10:00:09
怎么说呢,我先摆资历来增加说服力,国内的 FIPS140-2/3 认证,基本都是我做的。如果有做过认证的或者关心过认证的,应该就知道我是谁。 当然你的产品不做认证前提下,随便怎么开发都没问题,但是如果你希望哪怕参考一点所谓的“最佳实践”,你就会发现那个“大神”说的大差不差。语气问题可能以下我也有,见谅。 端到端加密没有一个准确的定义,但是按照常规的实现思路来说,“没有第三人持有任何可用于解密的材料”这个应该是共识,那么按照你现在的做法引入一个 RSA 公私钥做加密,私钥在你的服务器侧用作密码恢复,先不提所谓的算法安全强度的事情,至少你说端到端这个就不准确了。这里不讨论 RSA 用于加密的一堆要求,也不讨论怎么身份认证的事情,就单纯存在一个中心点可能会解密密码这个场景,作为明确有端到端需求的人可能就不选了。 其他的问题,诸如 KDF 密钥派生算法,常规的方式都是考虑把密码作为 PBKDF2 的输入,提高 iteration 次数到 10000 以上,然后用派生出来的密钥作为 AES 密钥使用。AES 的 IV 要看使用场景来判断长度和生成方式,通常来说至少是随机数 96 bits 以上。在做到这些之后,你怎么做拼接 base64 之类的都无所谓。 我们都能理解不要自创算法的重要性,但同时正确使用算法,正确的组合算法也相当重要。
Pteromyini 小成 2025-7-13 10:02:43
老实说从我勉强刚刚入门的安全理论基础的角度出发,大神说的几条一半以上是正确的,少数几条我也不懂不评价
WngShhng 楼主 小成 2025-7-13 10:10:15
@likelylee 你说得对!但是我还是请教一下,如果 RSA 作为一个可选项的话,那么该如何评论呢?
WngShhng 楼主 小成 2025-7-13 10:15:46
@nbndco 这说不上“把所有解密密码拱手送给攻击者”,因为私钥在我这里,攻击者没有私钥
quicknight 初学 2025-7-13 10:15:54
建议学一下密码学
likelylee 初学 2025-7-13 10:16:11
@WngShhng 想突出端到端就不要加服务器,忘了就忘了,或者参考 bitlocker 提供离线的恢复密码的助记码之类的方式。如果一定要做 RSA 且服务器保存,那么至少参考上边几楼的说法,做好身份认证之类的事情,比如额外引入 CA......
wy315700 小成 2025-7-13 10:22:07
作为信安科班生,我建议你认认真真学一学密码学基础, 来一个个解释一下 他最终还是没输出使用拼接 48 位有什么问题 --- 为什么要用派生算法。因为用户输入的,永远会是可见字符,所以密码空间并不能占满整个密钥空间,所以要用 PBKDF 等算法,把用户输入的字符,映射到整个密钥空间去,让密钥看起来更加随机。 “谁”都能破解,我不知道他怎么得出的结论; --- 你的服务器私钥是一人一钥吗,不然的话我拿别人的对应区块传上来能解密到他的密码。这个在密码学里专业术语叫做抵挡选择密文攻击。 他始终没明白为什么密钥放在客户端不安全;对于用户忘记密码,这和忘记文件加密密钥是两回事。 ---- 用户忘记密码允许找回 不代表可以随意让其他人拿到密码。 从 48 位解析出原本简单的密码只因为那是用户自己输出的密码…… ---- 良好的密码设计是不允许从 48 位解析出用户密码的,参考 PBKDF2 另外,你的设计里还有一个很奇葩的地方,你要校验用户输入的密码是否正确,,建议用 AEAD 校验,而不是你自创的方法。
cmdOptionKana 初学 2025-7-13 10:22:09
支持 OP ,多数“有知识”的人只会生搬硬套,根本不管实际情况,OP 这个场景和目的与书本里的案例不一样,但他们满脑子都是书本里的案例,都不看 OP 描述的场景,不看不听,一味像复读机一样背诵自己学过的教条。
返回顶部