我目前正在探索Java的安全方面。当然,我查的第一件事是整个解码点。
提到的解密技术
经过一段时间的学习,我学到了一些关于以下密码学技术的知识:
- MD5
- 沙
- PBKDF2WithHmacSHA1
我为什么要问这个问题?
我知道粗略地说SHA1比MD5更安全,PBKDF2WithHmacSHA1是最安全的。但是现在我不得不问自己,为什么在某些应用程序中仍然使用MD5或SHA1等加密,而在这种情况下PBKDF2WithHmacSHA1更安全?我当然知道,只有在极少数情况下(降低蛮力速度/碰撞风险(,才有机会利用最佳技术。
但尽管如此,实施时间还是有点长,作为回报,您将获得更安全的加密。
我的最后一个问题
简而言之,我的问题是为什么并非所有应用程序都始终使用最好的加密技术,即使它们不一定需要它?我的意思是唯一的缺点是实施需要更长的时间。
另外
我不认为速度损失是不使用最佳加密技术的原因。
目标是使哈希函数足够慢以阻止攻击,但仍然足够快,不会对用户造成明显的延迟。从这里
我想到了几个共鸣:
- 缺乏知识 - 一个人对密码学的了解不足以编写好的代码(我应该选择PBKDF2WithHmacSHA1,PBKDF2WithHmacSHA512,bcrypt,Argon2吗?
- 遗留系统 - 散列值无法取消散列,因此散列密码无法转换为新的加密方案
- 操作系统没有库/可用/支持/符合NIST标准/等