私のチームは、ランダムトークンを生成するサーバー側のコード(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は起動時に1回です