首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端加密-最佳实践

客户端加密-最佳实践
EN

Stack Overflow用户
提问于 2012-09-26 20:55:39
回答 3查看 1.5K关注 0票数 2

不久前,作为加密练习,我编写了一个“密码锁定”C#应用程序。我想把数据转移到网上,这样我就可以在任何地方访问它,而不损害我的密码数据。我只想通过社区运行我的想法,以确保我不会犯错误,因为我不是一个加密专家。

以下是我的设想:

  1. 在C#应用程序中,所有密码数据都是使用用户提供的密码作为单一文本块加密的。我在CBC模式下使用Rijndael (对称加密)。使用硬编码值对密码进行盐碱化。
  2. 加密数据被发送到我的数据库
  3. 我进入服务器上的网页并下载加密文本。使用客户端javascript输入我的密码。javascript将解密所有内容(仍然是客户端)

以下是我的假设:

  • 我假设所有的传输都可以被截获。
  • 我假设javascript (包含解密algo和硬编码盐)可以被截获(因为它实际上只是在网络上)。
  • 密码不能被截获(因为它只是输入客户端)
  • 其结果是,有人窥探可以拥有一切,除了密码。

因此,基于这些假设:我的数据安全吗?我意识到我的数据和密码的强度一样安全.我能做些什么来改善这一点吗?Rijndael解密速度慢到足以防止暴力攻击吗?

我想使用一个随机的盐值,但它仍然需要传输,因为这一点,它似乎不会更安全。我倾向于不将密码以任何形式(散列或其他形式)存储在网络上。

编辑:我正在考虑使用,所以我的“拦截”假设在这种情况下可能无效。

编辑2:基于Joachim Isaksson的评论,我将使用SSL运行。请继续打破我的假设!

编辑3:基于的评论,我将在每个用户的基础上使用salt。此外,我还使用PBKDF2来根据密码派生密钥,因此我将在这里获得“慢度”以抵抗野蛮的武力攻击。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-26 21:00:06

即使不以任何方式进入密码分析,如果您假设您的所有信息都可以被截获(即您运行时没有SSL),那么您是而不是安全的。

因为任何人都可以拦截Javascript,所以他们也可以更改Javascript,使浏览器在解密后将明文传递到其他地方。

而且,任何侵入站点(或站点所有者)的人都可以恶意地更改Javascript以做同样的事情,即使SSL是开着的。

票数 2
EN

Stack Overflow用户

发布于 2012-09-26 21:11:39

“密码数据”,我想你是指“密码保护数据”吧?

盐必须是随机的。在透明的环境中传播是很好的。盐的目的是防止字典攻击。也就是说,如果有人设法获得您的整个加密数据库,他们可以快速地针对您的所有用户尝试一个大型密码字典。对于随机盐类,他们需要针对每个用户尝试字典。

或者,即使在不损害数据库的情况下,他们也可以为大量字典单词生成大量预先加密的数据集,并立即能够识别任何由这些密钥加密的已知明文。

即使使用salt,字典攻击也可能比您想要的更快,因此从密码中提取密钥数据要比大多数人意识到的要微妙得多。

底线:一如既往,永远不要发明你自己的密码学,甚至你自己的操作模式。若要从密码中派生加密密钥,请使用众所周知的标准,如PBKDF2 (又名)。PKCS#5)。

票数 2
EN

Stack Overflow用户

发布于 2012-09-26 22:48:57

嗯,因为这是一个悬而未决的问题:

问题1

如果提供的密码不正确,或者盐类/密文被更改,您将做什么?您将得到一个不正确的解密结果,但您将如何测试呢?如果密码的最后一部分被修改了会发生什么?还是完全被移除?

解决方案:提供针对此类攻击的完整性保护。使用不同的键添加HMAC,或者使用GCM模式。

问题2

如果您更改密码或向密码中添加几个字节(及时比较加密存储),会发生什么情况?

解决方案:每次用不同的IV加密密钥存储。

这已经发现了4个问题:)密码是困难的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12610248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档