質問

簡単に推測できるシーケンシャルIDがあります。このIDに関連するデータを表示したい場合は、以前に与えたトークンでアクセスを証明する必要があります。

token = md5(secret_key + md5(id))

この仕事にはMD5で十分ですか?

役に立ちましたか?

解決

技術的には、十分なソルティングを確保するために、連結する前にidをmd5する必要さえありません。

ただし、パフォーマンスに重大な懸念がある場合(埋め込みプログラミングなど)を除き、一般的にsha-256またはsha-512を使用することをお勧めします。

他のヒント

それは本当に保護しようとしているものに依存しますが、おそらくそうではありません。より強力なハッシュ関数を使用するしない理由はありません。

これが認証に使用されると仮定すると、 HMAC を使用します。たとえば、 FIPS PUB 198 を参照してください。これにより、たとえば、MD5ではなく安全なハッシュ関数を使用し、説明どおりに結果を切り捨て、安全なトークンを取得できます。

MD5を使用しないでください。壊れています。すべての人々のVeriSignがまだMD5を使用しているとは信じられません。 MD5ハッシュ比較の破壊に使用するために、MD5のハッシュ衝突を決定するために利用可能なテストスイートがあります。

最低限、SHA-1を使用します。 SHA-5の使用をお勧めします。

IDを簡単に推測できる場合、秘密鍵が非常に長い場合を除き、これは実際にはあまり安全ではありません。

私のPCは、約1日で6文字のsecret_keyに対してMD5に基づいたsecret_key値をブルートフォースできます。より高速/より多くのコンピューターにアクセスできるユーザーは、その時間を大幅に短縮できます。ブレークまでの時間は、キーに数字が追加されるごとに10倍に増加します。 IDは簡単に推測できるため、計算されたMD5値であるため、secret_keyを取得するために元に戻すのが難しくなりません。

代替ソリューションを使用するか、(受け入れられない場合)md5生成ルーチンにデータを追加することをお勧めします。 secret_keyが一定で、1つのハッシュをリバースエンジニアリングできる場合、他のIDに対して正しいキーを生成できます。

データと現在の時間(保護しているレコードに関連付けられている場合)を保存したランダムなソルトなどをmd5世代に組み込むと、攻撃の難易度が劇的に高まります。

参照:

http://www.freerainbowtables.com/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top