「衝突を見つけることは、証明書に埋め込まれた公開鍵のビットをいじる必要があるため、トリッキーなプロセスです(詳細については、このペーパーを参照してください。)また、Microsoftは、ランダムなシリアル番号を彼らがしなかった証明書。」
私の質問は、証明書にランダムな値を追加してセキュリティをどのように向上させるかですか?攻撃者はシリアル番号を生成してMD5衝突を作成することはできませんか?
更新:
MicrosoftがCAキーにランダム化を実装する方法 に関する情報を次に示します。それぞれの長所と短所はわかりません。
シリアル番号生成の構成
Windows 2000 CAでは、2種類の固定長シリアル番号が生成されます。レジストリを変更して、どちらか一方のタイプを生成できます。デフォルトのシリアル番号は(高いものから低いものへ)です。GetTickCount()からのDWORD + USHORT CA証明書インデックス(0から開始)+ DWORD RequestId(10バイト/ 20桁の16進数)。代替形式は、レジストリから派生した1バイト+ DWORD RequestId + 8バイトのCryptGenRandom出力+ USHORT CA証明書インデックス+ DWORD RequestId(19バイト/ 38 16進数字)です。
代替フォームを有効にして、レジストリから派生したバイトを設定するには、次のコマンドを使用します。
certutil –setreg ca\HighSerial 0x33
指定されたバイト値は、特定のMicrosoft以外のPKIアプリケーションでのシリアル番号エンコーディングのあいまいなバグを回避するために、符号ビットをクリアし、高ニブルにビットを設定するように変更されます。
Windows Server 2003 CAでは、3種類の固定長シリアル番号が生成されます。デフォルトおよび代替フォームはWindows 2000と同じです。Windows2000代替フォームは、シリアル番号ごとにCryptGenRandomによって生成された新しいランダムな8バイトを使用します。 Windows Server 2003の新しい代替フォームは、CryptGenRandomからの固定ランダム8バイトを使用し、証明書を発行する最初の試行中に生成され、8バイトの固定CryptGenRandom出力+ USHORT CA証明書インデックス+ DWORD RequestId( 14バイト/ 28桁の16進数)。
レジストリで新しい代替フォームを有効にするには、次のコマンドを使用します。
certutil –setreg ca\HighSerial 0xffffffff
CryptGenRandomからの固定ランダム8バイトは文字列としてエンコードされ、レジストリに保存されるため、それらを直接設定して、新しいシリアル番号に使用することができます。実際、任意の長さの16進数文字列をレジストリに設定できます(ただし、桁数は偶数でなければなりません)。レジストリから使用されるバイト数は、シリアル番号で合計19バイトをオーバーフローする場合に削減されます。 Microsoft以外の特定のアプリケーションに関する問題を回避するために、上位バイトは前述のように操作されます。 IETF標準では、最大20バイトのシリアル番号が指定されています。
短い答えです。利点は、予測できないシリアル番号からであり、古いシリアル番号からではありません。
実際、連番は簡単に予測できるため、セキュリティは追加されません。ただし、シリアル番号をランダム化すると(予測が困難になるため)、MD5に対する既知の衝突攻撃を悪用して偽造証明書を取得することが難しくなります。説明させてください。
背景CAが証明書を発行すると、公開鍵、ドメインを含む一部の証明書ペイロードPについて、MD5(P)の署名が含まれます名前、およびシリアル番号。 MD5に対する既知の衝突攻撃では、攻撃者は同じMD5ハッシュを持つ2つの値PとQを選択できます。これは、次のように、MD5を使用するCAを攻撃するために使用できます。攻撃者はMD5衝突攻撃を使用して、次のプロパティを持つP、Qを見つけます。Pは、CAが喜んで署名する無害な証明書ペイロード(たとえば、攻撃者が制御する新しいドメインの証明書)ですが、Qは悪質な証明書ですCAが署名しないペイロード(Microsoft.comの証明書など)。攻撃者はPに対応する証明書要求をCAに送信します。 CAはそれに署名し、署名された証明書を返します。この証明書の署名もQの有効な署名になります。
この攻撃では、CAがPの証明書に署名するときに使用されるシリアル番号の値を攻撃者が予測する必要があることに注意してください。シリアル番号が連続して割り当てられている場合、この予測タスクは簡単です。しかし、シリアル番号が(たとえば)暗号的にランダムな128ビットの番号である場合、攻撃は適用されなくなります。そのため、緩和策としてランダムなシリアル番号の使用を提案している人もいます。
詳細詳細については、次のリサーチペーパーを参照してください。
推奨事項。最善の防御策は、MD5を使用しないことです。使用をやめてください。 CAは、SHA1、SHA256、SHA2などの最新のハッシュを使用する必要があります。証明書を発行するときに、MD5を使用しないでください。
しかし、なんらかの理由でMD5を使用せざるを得ない場合は、シリアル番号をランダム化するのが妥当な緩和策です。実際、ランダムなシリアル番号を使用することは、どのようなハッシュアルゴリズムを使用していても、ベルトアンドサスペンダーの多層防御の形式として、悪い考えではないかもしれません。