出于安全目的,您有什么理由不应该执行自己的算法来加扰 ID?
Is there any reason why you shouldn't perform your own algorithm to scramble IDs for security purposes?
我打算实施我自己的非常简单的“散列”公式,为具有多个用户的应用程序添加一层安全性。我目前的计划如下:
- 用户创建一个帐户,此时在后端生成一个 ID。 ID 是 运行 通过公式(比方说 ID * 57 + 8926 - 36 * 7,或者同样随机的东西)。然后我将新的用户 ID 和新的“散列”号码发送回前端,并将它们存储在
localStorage
. 中
- 用户尝试访问安全区域(假设是设置页面,以便他们可以更改自己的设置)。
- 我向后端发送了两个值:它们的 ID 和哈希值。我 运行 通过相同的公式来检查 ID 是否与我收到的散列值相匹配。如果检查通过,他们就可以进入。因此,如果有人尝试更改
localStorage
中的 ID 以访问其他用户的设置页面,那么他们实现这一目标的唯一方法就是猜测公式是什么曾是。他们很容易猜到一个用户ID,但猜到对应的数字是ID * 57 + 8926 - 36 * 7 的结果似乎不太可能。
我这样做是因为它 quicker/cheaper 比数据库查找实际散列值...我想?使用包来创建某种主要 key/uuid 而不是“散列”我自己的值并每次都进行数据库查找是否更有意义?
技术堆栈:在 FE 上做出反应,Python 在 BE 上,SQL db.
您缺少的两个 属性 真实哈希是
- 输入的简单变化会引起输出的巨大变化
- 所有哈希的长度都相同
如果用户以某种方式知道自己的 ID 和哈希值,这可能会成为问题。
使用您自制的哈希,我可以通过对哈希进行反向工程轻松找出其他随机用户的哈希。
I see a lot of posts saying "don't roll your own" -- is this absolute?
是的。原因是,每当非密码学家尝试开发自己的算法时,他们总是会陷入大量的坑洞,从而使算法的安全性几乎毫无用处。
例如,给定两个连续的 ID 和“哈希”对,您的特定方案可能会被轻易破坏。 (简单等差数列,给定两个连续值推导等差数列的公式是~6级数学。)
I'm doing this because it would be quicker/cheaper than a db lookup for an actual hashed value...
性能差异可能可以忽略不计。不用担心。
如果信息不是特别敏感,给每个用户分配一个随机生成的128位数字即可。有人猜测有效用户号码的可能性几乎为零。
我打算实施我自己的非常简单的“散列”公式,为具有多个用户的应用程序添加一层安全性。我目前的计划如下:
- 用户创建一个帐户,此时在后端生成一个 ID。 ID 是 运行 通过公式(比方说 ID * 57 + 8926 - 36 * 7,或者同样随机的东西)。然后我将新的用户 ID 和新的“散列”号码发送回前端,并将它们存储在
localStorage
. 中
- 用户尝试访问安全区域(假设是设置页面,以便他们可以更改自己的设置)。
- 我向后端发送了两个值:它们的 ID 和哈希值。我 运行 通过相同的公式来检查 ID 是否与我收到的散列值相匹配。如果检查通过,他们就可以进入。因此,如果有人尝试更改
localStorage
中的 ID 以访问其他用户的设置页面,那么他们实现这一目标的唯一方法就是猜测公式是什么曾是。他们很容易猜到一个用户ID,但猜到对应的数字是ID * 57 + 8926 - 36 * 7 的结果似乎不太可能。
我这样做是因为它 quicker/cheaper 比数据库查找实际散列值...我想?使用包来创建某种主要 key/uuid 而不是“散列”我自己的值并每次都进行数据库查找是否更有意义?
技术堆栈:在 FE 上做出反应,Python 在 BE 上,SQL db.
您缺少的两个 属性 真实哈希是
- 输入的简单变化会引起输出的巨大变化
- 所有哈希的长度都相同
如果用户以某种方式知道自己的 ID 和哈希值,这可能会成为问题。 使用您自制的哈希,我可以通过对哈希进行反向工程轻松找出其他随机用户的哈希。
I see a lot of posts saying "don't roll your own" -- is this absolute?
是的。原因是,每当非密码学家尝试开发自己的算法时,他们总是会陷入大量的坑洞,从而使算法的安全性几乎毫无用处。
例如,给定两个连续的 ID 和“哈希”对,您的特定方案可能会被轻易破坏。 (简单等差数列,给定两个连续值推导等差数列的公式是~6级数学。)
I'm doing this because it would be quicker/cheaper than a db lookup for an actual hashed value...
性能差异可能可以忽略不计。不用担心。
如果信息不是特别敏感,给每个用户分配一个随机生成的128位数字即可。有人猜测有效用户号码的可能性几乎为零。