128ビットのAPIキーを生成しています。 AFAIK 128は、生成されたキーに対して完全に安全です。 (DBリークから保護するための)プレーンテキストではなく、ハッシュを格納するDBに、どのハッシュアルゴリズムを使用する必要がありますか? MD5とSHA-1は安全とは見なされません。 SHA-256はキー自体よりも大きな出力を生成するため、SHA-256で128ビットのキーを使用しても意味がないようです。
理論的には、MD5は衝突攻撃に対してのみ脆弱であり、APIキーを偽造するために必要となるはるかに危険なプリイメージ攻撃に対しては脆弱ではないため、ここでMD5を使用しても安全です。ただし、MD5は原則として監査人にとって見た目が悪いため、原則として回避することはbadの問題ではありません。
ハッシュする値がランダムに生成され、人間が提供する潜在的に弱いpasswordでないと仮定すると、SHA-512を使用して出力を切り捨てることができます。標準を使用する場合は、セクション5.3.6の FIPS 180-4 で定義されたSHA-512/tハッシュがあり、のダイジェストを出力します。 t≤512ビット。標準が重要ではない場合は、ハッシュの出力を128ビットに切り捨てることで問題ありません。
逆説的に、64ビットシステムでは実際には高速であるため、SHA-256ではなくSHA-512を指定しています。システムが64ビットでない場合、SHA-256を使用するとパフォーマンスが向上する可能性があります。
しかし、どのハッシュキーを使用すればよいですか? md5またはsha1は安全とは見なされません。 sha256はキー自体よりも大きな出力を生成するので、sha256で128ビットキーを使用しても意味がないようです
出力ハッシュが保護されている入力よりも長くても問題ありません。 Sha1とMd5はどちらも特定のアプリケーションでは非推奨であるため、これらのオプションを回避することをお勧めします。
128ビットのキーをハッシュしているので、1ラウンドのsha256を使用するだけで問題ない場合があります。これは、パスワードではなくランダムな128ビットAPIキーをハッシュしているという理解に基づいています。パスワードをハッシュするためのアドバイスは非常に異なります。
SHA-512(または、必要に応じてSHA-256)を使用して、出力の最初の128ビットを使用することができます。出力の一部を破棄することを恐れる理由はありません。