5

暗号を多用するアプリケーションを作成しています。ほとんどのネットワーク化されたアプリケーションと同様に、私のものはデータをさまざまな種類のメッセージ (インスタント メッセージ、ファイル チャンク、ビデオ フレームなど) に分割し、改ざん防止と正しい発信元の両方について、それぞれの信頼性をチェックする必要があります。これまでのところ、ECDH を使用して、AES で既に使用している共有シークレットをネゴシエートできます。もちろん、同じ共有シークレットを後で使用できます。

私の質問は次のとおりです。この場合、ECDH によって HMAC で確立された共有秘密を単に使用するのではなく、各メッセージに署名するために ECDSA を使用することに追加の利点はありますか?

以下で M と言う場合、暗号化されたメッセージまたは平文のいずれかを意味します。それは問題ではありません。以下のエラーを修正してください。

ECDSA (または DSA) では、通常M、安全なハッシュ アルゴリズム (私は現在 SHA-2 の 1 つを使用しています) を使用してメッセージ ( ) をハッシュし、署名者の秘密鍵を使用してH(M)暗号化することを理解しています。H(M)これによりRS整数 (署名) が生成されます。次に、M、R、および S が、送信者の公開鍵を既に所有している受信者に送信されます。 が計算され、 と を使用しH'(M)て署名が検証されます。BouncyCastle は、これを実装するものを提供します。RSECDSASigner

HMAC では、私が持っている共有シークレットが必要です。次に:
HMAC(K, M) := H( f2(K) || H(f1(K) || M) ) (訂正していただきありがとうございます、Paŭlo Ebermann。詳細については、彼の回答を参照してください。)

では、DH/ECDH が共有シークレットを安全にネゴシエートすることを考えると、HMAC を使用してはいけない理由はありますか?

関連: なぜNSAは、MAC ではなく DSA の標準アルゴリズムを指定するのですか? SHA-2 + AES にできるという理由だけで?

ここでは速度が重要です。現在作成しているこの 1 つのプロトコルで、現在のテキスト メッセージだけでなく、近い将来、大きなファイルやビデオ フレームもサポートするようにしたいからです。したがって、私は HMAC を使用することを好みますが、上記の目標を確実に達成できるようにしたいと考えています。

ご協力いただきありがとうございます!

4

1 に答える 1

4

DSA の欠点の 1 つは、署名に適切なランダム バイトがかなり必要になることです。不適切なランダム ソースを使用すると、署名から秘密鍵を再構築できる場合もあります。MAC の場合、多数のメッセージに署名する必要があるため、多数の乱数が必要になります。これらを生成するハードウェアがない場合、エントロピーが不足します。

HMAC には乱数は必要ありません (決定論的です)。

さらに、ここでは DSA を使用するよりも HMAC の方が効率的だと思いますが、これを測定することもできます (測定する必要があります)。


「正しいエラー」について: HMAC の説明は正しくありません。「復号化」はありません。それはもっとこのようなものです:

メッセージM、ハッシュ関数H、および共有シークレットがありKます。f12 つの公開関数andを追加しますf2(これらは単純な XOR+パディングです)。それで

HMAC(K, M) := H( f2(K) || H(f1(K) || M) )

単純な||連結です。送信者と受信者は同じ計算を行い、送信者は自分の計算をメッセージと共に送信し、受信者は自分の結果と送信された結果を比較します。(タイミング攻撃を許さない方法で比較を行うようにしてください。つまり、一致しないことがすでにわかっていても、すべてを比較してください。)

HMAC の正確な定義はRFC 2104にあり、明確な数値も含まれています。


この質問について:

関連: なぜNSAは、MAC ではなく DSA の標準アルゴリズムを指定するのですか?

よくわかりませんが、ここに1つのアイデアがあります:

The list of links there mentions the "Galois Counter Mode" for TLS (RFC 5288) and SSH (RFC 5647), and this is said to protect both confidentiality and integrity in one. Thus a separate MAC is not necessary anymore. (It's the first time I read this, so I can't judge this right now.)

于 2011-04-15T23:30:34.997 に答える