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