web-dev-qa-db-ja.com

RSAキーの1つのペアを使用して相互認証を行うことは安全ですか?

私は最近インフォテインメント製品でこのデザインを見ました。目標は、E1とE2の2つのECU間の相互認証です。彼らはお互いを気にするだけです。基本的な考え方は、両方の鍵を秘密にして、それぞれにECUを1つ持たせることです。公開鍵と秘密鍵、またはEとDの代わりに、鍵k1とk2を呼びましょう。両方の鍵は大きいです。

E1にk1があり、E2にk2があるとします。相互認証をコスト効率の高い方法で実行するには:

  1. E1は固定長のランダムデータDを生成し、hash(D)をk1で暗号化してS1を生成します。 DとS1はE2に送信されます。
  2. E2はS1をk2で復号化し、それがhash(D)と一致するかどうかを確認します。
  3. OKの場合、E2はDで表されるDのバイナリ補数を計算します。次に、ハッシュ(D ')をk2で暗号化し、S2を生成します。 S2はE1に送信されます。
  4. E1はD 'を計算し、k2でS2を復号化して、hash(D')と一致するかどうかを確認します。

このデザインにはリスクがあるとは思いますが、弱点を見つけることができません。現実世界では十分安全ですか?

編集:もう一度リプレイ攻撃E2があるようですが、「マスター」ノードE1はだまされることはありませんよね? D 'を使用するとMITM攻撃の可能性がいくらか漏れるかもしれませんが、見つけるのは複雑です。

3
wdscxsj

独自の暗号を作成しないでください。

攻撃者が相互認証トークンをコピーして残りの通信を変更する可能性があるため、MITMの可能性があると思いますが、使用しているRSAプリミティブと送信しているデータの背後にいくつかの隠れたリスクがあると考えられます。

とにかく、少なくともいくつかのキーを使用しないのはなぜですか?

1
Ángel

そのスキームを使用するために私が想像できる唯一の理由は、技術的な理由(たとえば、インフォテインメントシステムに適したメモリシステムの継ぎ目の十分な空き容量がない)のために、2つのキーペアの使用を回避することです。

その場合は、対応する秘密鍵を使用して対称暗号アルゴリズムを使用することをお勧めします。転送中のメッセージの機密性と整合性を保護するだけでよく、対称暗号を使用することでそれを実現できるためです。

さらに、この設計は公開鍵暗号を悪用して、適切な使用のためにいくつかの鍵ペアを使用する必要があるユースケースに適合しているように見えます。

他の人が以前に言ったように、暗号化は複雑な科学であるため、強制されない限り、暗号をいじらないでください。選択できる場合は、賢明な決定を行い、標準を最大限に活用してください。

1
kudrom