web-dev-qa-db-ja.com

バイナリとして保存された秘密鍵を総当たりするとき、どのようにして解決策を見つけたと思いますか?

次のシナリオがあるとします。

  • ユーザーにはパスワードがあり、対称鍵はPBKDF2またはbcryptによってそれから導出されます
  • プライベートRSAキーは上記の対称キーで保護されています
  • 攻撃者はバイナリ形式の暗号化された秘密鍵を利用できます
  • kDFアルゴリズムのすべての詳細が攻撃者に利用可能(塩、反復回数なし、ソースコード)

私の理解では、秘密鍵を解読したい攻撃者は、パスワードを推測してKDFを適用することにより、ブルートフォース攻撃を実行できます。

推測が成功したかどうかを攻撃者はどのようにして知るのですか?

総当たり以外に、上記の情報を与えられた秘密鍵を復号化する他のアプローチはありますか?

このシナリオでは、PBKDF2とbcryptの間に大きな違いはありますか?

ありがとう!

2
vidi

推測が成功したかどうかを攻撃者はどのようにして知るのですか?

秘密鍵が格納されるフォーマットは非常に多くあります。攻撃者として、私があなたの秘密鍵をあなた自身の自家製の形式で保存しなかったと仮定することができるなら、私は総当たりの推測が私がした形式のいずれかに秘密鍵を解読したかどうかをただ見るでしょう秘密鍵が入っていることを期待します。

たとえば、私があなたの秘密鍵をASCIIで保護されたPGP鍵であると想定した場合、最初の数バイトが

-----BEGIN PGP PRIVATE KEY BLOCK-----

他のフォーマットの場合も同様です。

攻撃者が秘密鍵の可能な公開鍵候補のリストを持っている場合、結果として復号化された秘密鍵の係数を公開鍵の係数と比較することもできます。

総当たり以外に、上記の情報を与えられた秘密鍵を復号化する他のアプローチはありますか?

強力な対称暗号を使用している限り、私は知りません。他の攻撃方法は、秘密鍵の暗号化に使用する対称暗号に重大な弱点があることを意味します。

このシナリオでは、PBKDF2とbcryptの間に大きな違いはありますか?

おそらく違います。正確な長所と短所については意見が異なりますが、どちらも主要な派生には強力であると見なされます。両者が共有する1つの欠点は、キーの導出にメモリをあまり使用しないため、GPUやFPGAなどの非常に高速で高度な並列プロセッサに実装できることです。

(編集:正しい復号化を確認するための公開鍵モジュラスとの比較に関する部分を追加)

2
Out of Band

場合によります。 RSA秘密鍵は対称鍵によってどの程度正確に保護されますか?

暗号化手順によって完全性も保護される場合は、認証タグまたはMACが存在します。このMacが単純な対称鍵から計算された場合、正しい解決策が明らかになります。ただし、最新の手順では、暗号化テキストがハッシュされるMAC暗号化を使用しているため、ソリューションに関する情報は明らかにされていません。

一方、公開鍵が攻撃者に知られている場合、攻撃者は各秘密鍵が公開鍵と一致するかどうかを確認できます。公開鍵の知識は、非対称暗号化の概念全体を考えると公正な仮定です。

どちらの場合も、候補が解であるかどうかを確認するために追加の計算を行う必要があることに注意してください。非対称暗号化は通常、ハッシュよりも要求が厳しいため、これは2番目の場所の情報にとってはおそらくより高価です。したがって、適切な暗号化手順を使用することは理にかなっています。

1
fzgregor

公開鍵を探す

RSA秘密鍵にはRSA公開鍵が含まれます(XMLの例については この回答 を参照)。したがって、ハッカーが公開鍵を知っている場合、この攻撃は 既知のプレーンテキスト攻撃 と非常に似ていますが、プレーンテキストの一部しか知られていない点が異なります。

したがって、ハッカーは対称鍵をたどり、出力をチェックして、公開鍵であるバイトシーケンスが含まれているかどうかを確認するだけで済みます。

公開鍵のバイトシーケンスが誤検知で表示される可能性は非常にわずかですが、ハッカーは短いノンスを暗号化および復号化して、正しい一致であることを確認するだけで済みます。

1
John Wu