我的团队收到了一些生成随机令牌的服务器端代码(Java),我对此有疑问 -
这些令牌的用途相当敏感 - 用于会话 ID、密码重置链接等。因此它们确实需要加密随机以避免有人猜测它们或暴力破解它们是可行的。令牌是“长”的,因此它是 64 位长。
该代码当前使用java.util.Random
该类来生成这些标记。的文档java.util.Random
清楚地说明了以下内容:
java.util.Random 的实例在密码学上不是安全的。考虑改为使用 SecureRandom 来获取加密安全的伪随机数生成器,以供安全敏感的应用程序使用。
但是,代码当前使用的方式java.util.Random
是这样的 - 它实例化java.security.SecureRandom
类,然后使用该SecureRandom.nextLong()
方法获取用于实例化java.util.Random
类的种子。然后它使用java.util.Random.nextLong()
方法来生成令牌。
java.util.Random
所以我现在的问题 - 考虑到正在使用 播种,它仍然不安全java.security.SecureRandom
吗?我是否需要修改代码以使其java.security.SecureRandom
专门用于生成令牌?
目前代码种子是Random
启动时的一次