UUID v3 基于 MD5 为 API 生成代理密钥是否不安全?
Is UUID v3 insecure for generating surrogate keys for APIs since it is based on MD5?
背景:
我想在我的数据库中生成 surrogate/alternate 键,这样我就可以在我的 API 端点中将它们作为我的资源标识符公开公开,如下所示:GET /resources/{id}
有问题的数据是真实来源数据库的副本,我副本中的唯一标识符是敏感的,不能在 URL 中公开。
所以我想从现有数据生成一个新的但可重现的标识符,我正在考虑使用 UUID v3。 (或 v5,但我没有看到任何 Java 官方实现)如果我的副本必须重新创建,则可以重现,那么我可以确定我重现了相同的标识符。
在重要的情况下,数据存储在 SQL 服务器数据库中。
问题: 以这种方式使用 UUID v3/5 是否安全,因为它们基于 MD5/SHA-1?
版本 3 已被弃用是有原因的。没有已知的方法(除了蛮力)可以从 UUID 恢复到名称,但是 MD5 确实有问题,并且攻击只会随着时间的推移变得更好。如果您使用的库尚不支持版本 5,请获取支持的库。
对于他们两个,如果进入散列的数据量很小,那么暴力破解可能是两个版本真正关心的问题。答案是使用更多的输入数据,即足以使蛮力不再可能。确切的选项将取决于您可用的内容以及它的可猜测性
背景:
我想在我的数据库中生成 surrogate/alternate 键,这样我就可以在我的 API 端点中将它们作为我的资源标识符公开公开,如下所示:GET /resources/{id}
有问题的数据是真实来源数据库的副本,我副本中的唯一标识符是敏感的,不能在 URL 中公开。
所以我想从现有数据生成一个新的但可重现的标识符,我正在考虑使用 UUID v3。 (或 v5,但我没有看到任何 Java 官方实现)如果我的副本必须重新创建,则可以重现,那么我可以确定我重现了相同的标识符。
在重要的情况下,数据存储在 SQL 服务器数据库中。
问题: 以这种方式使用 UUID v3/5 是否安全,因为它们基于 MD5/SHA-1?
版本 3 已被弃用是有原因的。没有已知的方法(除了蛮力)可以从 UUID 恢复到名称,但是 MD5 确实有问题,并且攻击只会随着时间的推移变得更好。如果您使用的库尚不支持版本 5,请获取支持的库。
对于他们两个,如果进入散列的数据量很小,那么暴力破解可能是两个版本真正关心的问题。答案是使用更多的输入数据,即足以使蛮力不再可能。确切的选项将取决于您可用的内容以及它的可猜测性