encryption - 客户端加密 - 最佳实践

标签 encryption cryptography password-protection

我不久前编写了一个“密码储物柜”C# 应用程序作为加密练习。我想将数据移动到网络上,以便我可以在任何地方访问它,而不会泄露我的密码数据。我只是想让社区运行我的想法,以确保我不会犯错误,因为我不是加密专家。

这是我的设想:

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

这是我的假设:

  • 我假设所有传输都可以被拦截
  • 我假设 JavaScript(包含解密算法和硬编码盐)可以被拦截(因为它实际上只在网络上)
  • 密码无法被拦截(因为它只是客户端输入)
  • 结果是,窥探者可以获得除密码之外的所有内容。

因此,基于这些假设:我的数据安全吗?我意识到我的数据的安全性取决于密码的强度...我可以采取哪些措施来改善这一点? Rijndael 解密速度是否足够慢以防止暴力攻击?

我考虑过使用随机盐值,但这仍然需要传输,因此,它似乎不会更安全。我的偏好是不在网络上以任何形式(散列或其他形式)存储密码。

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

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

编辑3: 根据 Nemo 的评论,我将根据每个用户使用盐。另外,我使用 PBKDF2 根据密码派生 key ,因此这就是我将“缓慢”地抵抗暴力攻击的地方。

最佳答案

即使不以任何方式进行加密分析,如果您假设您的所有信息都可以被拦截(即您在没有 SSL 的情况下运行),那么您就是安全的。

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

此外,任何入侵网站(或网站所有者)的人都可以恶意更改 Javascript,以执行相同的操作,即使 SSL 已启用。

关于encryption - 客户端加密 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610248/

相关文章:

java - Java 中使用零填充的三重 DES 加密/解密

python - 将 base-64 spki 字符串转换为公钥

PHP-hash_pbkdf2 函数

c# - 使用 cer 文件加密 Xml

java - iOS 和 Java 与 CTR 模式的 AES 互操作性

vb.net - 抽奖算法

tcp - TCP 客户端服务器架构中的简单密码验证

java - Android加密 "pad block corrupted"异常

使用 BouncyCaSTLe SSL 使用 keyFile 进行 Java AES 加密

java - 如何使用用户密码以编程方式打开 PDF