不久前,我写了一个“Password Locker”C# 应用程序作为加密练习。我想将数据移动到网络上,这样我就可以在任何地方访问它而不会泄露我的密码数据。我只是想通过社区来运行我的想法,以确保我不会犯错误,因为我不是加密专家。
这是我的设想:
- 在 C# 应用程序中,所有密码数据都使用用户提供的密码加密为单个文本块。我在 CBC 模式下使用 Rijndael(对称加密)。密码使用硬编码值加盐。
- 加密数据被发送到我的数据库
- 我转到我服务器上的网页并下载加密文本。使用客户端 javascript 我输入了我的密码。javascript将解密所有内容(仍然是客户端)
以下是我的假设:
- 我假设所有传输都可以被拦截
- 我假设可以拦截 javascript(包含解密算法和硬编码盐)(因为它实际上只是在网络上)
- 密码不能被截取(因为它只是输入客户端)
- 结果是窥探的人可以拥有除密码之外的所有内容。
因此,基于这些假设:我的数据安全吗?我意识到我的数据与密码强度一样安全......我可以做些什么来改进它?Rijndael 解密是否足够慢以防止暴力攻击?
我考虑过使用随机盐值,但这仍然需要传输,因此,它似乎不会更安全。我的偏好是不在网络上以任何形式(散列或其他)存储密码。
编辑: 我正在考虑使用 SSL,所以我的“拦截”假设在这种情况下可能无效。
编辑 2: 根据 Joachim Isaksson 的评论,我将使用 SSL 运行。请继续打破我的假设!
编辑 3: 根据 Nemo 的评论,我将根据每个用户使用盐。此外,我正在使用 PBKDF2 根据密码派生密钥,所以这就是我将获得“缓慢”以抵抗暴力攻击的地方。