我正在开发一个移动应用程序,并且在我对 argon2 密码哈希算法的非专业研究中,似乎(忽略密钥和盐)有三个主要参数:
- 迭代
- 记忆
- 并行性
虽然广播这些显然没有意义,但据我所知,这些将不可避免地需要在移动应用程序中编译,并且不良行为者可以通过反编译移动应用程序来找出这些参数。
我需要如何保护这些参数?
如果需要保护这些参数,我该如何混淆这些参数或减轻对已编译应用程序的威胁?或者,这些参数能否以某种方式分发,而不是在移动应用程序中编译?
我正在开发一个移动应用程序,并且在我对 argon2 密码哈希算法的非专业研究中,似乎(忽略密钥和盐)有三个主要参数:
虽然广播这些显然没有意义,但据我所知,这些将不可避免地需要在移动应用程序中编译,并且不良行为者可以通过反编译移动应用程序来找出这些参数。
我需要如何保护这些参数?
如果需要保护这些参数,我该如何混淆这些参数或减轻对已编译应用程序的威胁?或者,这些参数能否以某种方式分发,而不是在移动应用程序中编译?
不需要保护这些参数,安全性不依赖于它们是秘密的。
更需要它们来验证用户输入的密码,因此有必要将它们与存储的密码散列一起存储(通常它们成为密码散列的一部分)。将参数与每个散列密码一起存储允许将来调整参数(以获得更快的硬件),并且仍然能够验证旧密码,其中使用较低参数进行散列。
您根本不应该保护您的默认 Argon2 参数。
相反,你应该为他们感到骄傲。
如果散列泄露,您应该选择能够最大限度地抵抗离线暴力攻击的参数。根据Kerckhoffs 的原则,您应该对选择它们公开发布它们背后的数学有足够的信心。