如何更改我的应用程序的密码散列?
How can I Change my application's password hashing?
我的后端使用 Hashing-A(一种方式)存储密码,我希望将其转换为 Hashing-B(单程)。我想删除 Hashing-A 密码删除并更改为 Hashing-B.
在后端,我可以在下次登录时简单地将密码更改为 Hashing-B,但真正的问题是在应用程序中,我的应用程序通过 Hashing-A 发送密码,我可以更改它,但旧应用程序将继续面临同样的问题,我不能简单地推出旧应用程序。
几乎不可能对旧应用程序进行任何更改。
不在后端保留 Hashing-A 的最佳方法是什么 ?
一般使用加固的密码哈希来避免对数据库的暴力破解或字典攻击。如果攻击者窃取了服务器或数据库,那么将很难取回密码,因为加盐和迭代计数将为密码本身的强度增加额外的防御级别。
因此,向已存储的哈希值添加迭代(工作因子)和可能的额外盐字节确实有意义。唯一的要求确实是原始散列没有完全破坏(即是加密安全散列)并具有足够大的输出。
您可以做的是向新更改的哈希值添加某种标识符 - 协议标识符和可能的参数。这样您甚至可以在线更改散列值,选择直接比较 - 在您的情况下 - 或在服务器上进行附加工作以执行 B 散列。
你无法破解这个,因为 hashing-A 值对攻击者来说不再可用,并且没有办法反转 hashing-B 以得到 hashing-A。当然,在传输过程中保持密码或散列 A 的安全是至关重要的。但是您可以简单地部署 TLS 1.2 来避免这种情况。
我的后端使用 Hashing-A(一种方式)存储密码,我希望将其转换为 Hashing-B(单程)。我想删除 Hashing-A 密码删除并更改为 Hashing-B.
在后端,我可以在下次登录时简单地将密码更改为 Hashing-B,但真正的问题是在应用程序中,我的应用程序通过 Hashing-A 发送密码,我可以更改它,但旧应用程序将继续面临同样的问题,我不能简单地推出旧应用程序。
几乎不可能对旧应用程序进行任何更改。
不在后端保留 Hashing-A 的最佳方法是什么 ?
一般使用加固的密码哈希来避免对数据库的暴力破解或字典攻击。如果攻击者窃取了服务器或数据库,那么将很难取回密码,因为加盐和迭代计数将为密码本身的强度增加额外的防御级别。
因此,向已存储的哈希值添加迭代(工作因子)和可能的额外盐字节确实有意义。唯一的要求确实是原始散列没有完全破坏(即是加密安全散列)并具有足够大的输出。
您可以做的是向新更改的哈希值添加某种标识符 - 协议标识符和可能的参数。这样您甚至可以在线更改散列值,选择直接比较 - 在您的情况下 - 或在服务器上进行附加工作以执行 B 散列。
你无法破解这个,因为 hashing-A 值对攻击者来说不再可用,并且没有办法反转 hashing-B 以得到 hashing-A。当然,在传输过程中保持密码或散列 A 的安全是至关重要的。但是您可以简单地部署 TLS 1.2 来避免这种情况。