web-dev-qa-db-ja.com

RSA 4096とAES 256暗号化プロセス、PyCryptoを使用

PyCryptoモジュールを使用してpythonスクリプトでデータを暗号化および復号化するための次のプロセスがあります。

暗号化-サーバーA

  1. AES 256共有キーが生成されます
  2. 関連するIVが生成されます
  3. データは、AES 256共有キーを使用して暗号化され、CBCモードを使用して関連するIVがデータベースに保存されます。
  4. RSA 4096公開鍵は、AES 256鍵と関連するIVを暗号化するために使用され、これらもデータベースに格納されます。

復号化-サーバーB

  1. 暗号化されたAES 256共有キーと関連するデータベースのIVは、RSA 4096秘密キーを使用して復号化されます
  2. データベースからのデータは、復号化されたAES 256共有キーと関連するIVを使用して復号化されます。

上記のプロセスにより、攻撃者がデータベースへのアクセスを獲得した攻撃モデルに対するデータのセキュリティが確保されますか?

3
Imran Azad

私の主なフィードバック:提案の完全な批評を提供するのに十分な技術的詳細を提供していませんが、いくつかの一般的な間違いを犯していることがわかる十分な情報を提供しました。これまでに確認できた主な間違いは次のとおりです。

  • 間違い#1:独自の暗号化形式を発明する通常、 暗号化されたデータを格納するための独自の形式を設計することは良い考えではありません ;何か問題が発生する可能性があります。 GPGやOpenPGPメッセージ形式などの標準形式を使用することをお勧めします。

  • 間違い#2:メッセージの整合性保護を含めることができません。認証を行わずにデータを暗号化すると、微妙ですが深刻な攻撃に遭遇します 。これは非常に直感に反し、よくある間違いです。考えたくなりますが、これは秘密にしたいので、適切な暗号化アルゴリズムで暗号化すれば大丈夫です。しかし、いや、あなたは大丈夫ではありません。また、選択した暗号文攻撃を防御するために、メッセージ認証も必要です。また、適切なモード(認証済み暗号化、Encrypt-then-MACなど)と適切なキー管理(認証と暗号化のための独立したキー、またはキー分離の適切な使用)を適用する必要があります。

これらの問題を回避するには、上記のリンクにあるアドバイスに従ってください。

その他のその他のフィードバック:

  • 他の問題があるかもしれません。それらをすべて特定するのに十分な情報を提供していません。次に、潜在的な問題の例をいくつか示します。

    • たとえば、IVの生成方法については説明しません。過去のシステムでは、IVの生成が不十分なため、セキュリティの問題が発生することがありました。 (IVは、暗号強度の疑似乱数ジェネレータを使用して生成する必要があります。)

    • AESキーの暗号化方法については説明しません。 (適切なパディング方式(OAEPやPKCS#2など)を使用する必要があります。)

  • 選択したキーの長さは過剰です。

  • 最新の暗号化が適切に実装および使用されている場合、それがシステムの最も弱いリンクになることはほとんどありません。

    その代わり、攻撃者は通常、暗号アルゴリズムを破るのではなく、暗号をバイパスしてシステムの他の側面を攻撃することで暗号を破ります-おそらく人間にソーシャルエンジニアリングを適用し、コードにセキュリティホールを見つけてエンドポイントを危険にさらすかもしれませんキー管理のエラーを悪用する、またはシステムを攻撃する他の多くの方法のいずれか。

6
D.W.

予測された攻撃者が持つと考える力のリストである攻撃モデルを定義しない限り、「十分な安全性」はありません。

ただし、基本的なコメントとして、整合性チェックはここにはないため、アクティブな攻撃者はデータを操作します。また、暗号化モード(ECB、CBC、CTR ...?)と関連するIV管理について何も伝えないため、それを台無しにした可能性があります(難しい感情はなく、台無しになりやすく、入手が困難です)正しい)。キーのサイズが大きすぎるため、CPUサイクルが多く、何をすべきかがわかっている行政機関であるか、多少偏執的であるか、またはその両方です。さらに、自分で暗号を作成しているのですが、それは悪いことです。

3
Tom Leek
  1. AESキーだけが秘密です。 IVを再利用しない限り、CBC IVは秘密ではありません。 CBCを使用してメッセージを暗号化するたびに、暗号文の前にIVを付け、それを暗号文として保存できます。メッセージを復号化するときは、最初のブロックがIVであることを覚えておいてください。

  2. 整合性チェックは含まれません。署名はさまざまな方法で生成できますが、同じRSAキーペアを使用して署名および暗号化することは絶対に忘れないでください。署名を生成する方法の1つは、HMACの2番目の鍵を暗号化してランダムに生成し、HMAC-SHA512で暗号文のダイジェストと生成された鍵を取得し、生成されたHMAC鍵を生成されたAES鍵と一緒に暗号化して保存することです。 IVを暗号文と連結する慣習に従っている場合は、元の暗号文だけでなく、連結されたIV +暗号文にHMAC-SHA512を適用する必要があります。

  3. どちらか一方を指定したわけではありませんが、AESキー、CBC IV、およびHMACキーは、真のRNGが発生しない限り、暗号的に安全な疑似乱数ジェネレータ(cryptorandom PRNG)によってすべて生成される必要があります。ハンディ。

  4. 暗号化されたメッセージをシリアル化するための一般的な標準形式が存在します。暗号文とダイジェストの生のバイトを保存する代わりにそれらを使用することを選択できます。標準には OpenPGP Message Format および Cryptographic Message Syntax が含まれます。

#1は厳密にはセキュリティの問題ではありませんが、実際の問題は、システムのどの部分を秘密にする必要があるか、どの部分を公開する必要があるか、これらのルールの正しいコンテキストは何かなど、人々がしばしば混乱することです。混乱はしばしばエラーにつながります。 IVの目的は、平文の最初のブロックの暗号化に高度なエントロピーを提供することであり、なんらかの2番目の鍵ではありません。

3
yfeldblum