1

私の Java アプリは、暗号化されたファイルを処理する必要があります。ワークフローは次のとおりです。

  1. お客様はファイルを暗号化し (RSA 暗号化など)、Amazon S3 にアップロードします。
  2. 私の Java アプリは AS3 からファイルを取得します。
  3. 私のJavaアプリはファイルを復号化します。
  4. 私の Java アプリは、復号化されたファイルを使用して他のファイルを作成します。
  5. 私の Java アプリは、別のキーで新しいファイルを暗号化し、AS3 にアップロードします。
  6. お客様がファイルを受け取ります。
  7. お客様がファイルを復号化します。

Amazon S3 は、ダウンロード/アップロード、復号化/暗号化のための Java クラスを提供します。この API は入力として受け取りますjava.security.KeyPair。アプリがキーを取得できるように、お客様が My Java アプリにキーを提供する方法がわかりませjava.security.KeyPairん。

顧客とアプリの間でキーを交換する適切な方法は何ですか? どのキーファイル形式を使用できますか?

4

2 に答える 2

3

通常、非対称暗号化/復号化は次のように機能します。

  • 秘密鍵と公開鍵のペアを生成します。秘密鍵は秘密にしておく必要があり、送信することはできません。公開鍵は、セキュリティを気にせずに顧客に渡すことができます。
  • これで、顧客はこの公開鍵でファイルを暗号化します。暗号化されたファイルは、秘密鍵でのみ復号化できます。そのため、ユーザーはファイルを送信できます (この場合は Amazon S3 経由)。
    • ファイルを受け取り、秘密鍵で復号化します。

これで、顧客からファイルが届きました。暗号化されたメッセージを送り返すには、別の公開鍵と秘密鍵のペアが必要です。今回は、秘密鍵を知っているのは顧客だけである必要があります。たとえば、彼はあなたに送ったファイルに公開鍵を入れることができます。とにかく、どうにかして彼から公開鍵を取得する必要があります。そのキーを使用して、ファイルを暗号化し、Amazon S3 に送信します。ユーザーはそれらを受け取り、自分の秘密鍵で復号化します。

したがって、秘密鍵が含まれているため、顧客はあなたに を渡してはなりません。java.security.KeyPair秘密鍵を送信するのは安全ではありません。しかし、彼はあなたに公開鍵をjava.security.PublicKey. とにかく彼が提供するファイル内で、または彼が同時にアップロードし、提供されたファイルとは別に別のファイル内でそれを送信するのが最善の方法だと思います.

于 2012-12-07T15:44:18.197 に答える
1

問題は、信頼を分散する方法がまだないことです。幸いなことに、かなりうまく機能するものがあります: TLS. TLS 証明書はブラウザ内に保存されます (代わりにシック クライアントが必要な場合は JRE にも保存されます)。

キー ペアは、ローカルで生成する必要があります (または、セキュリティで保護されたマシンで生成してインポートする必要があります)。秘密鍵は常に安全に保管する必要があります。顧客は TLS を使用してサイトに接続し、公開鍵をダウンロードします。次に、顧客は鍵ペアの公開鍵をアップロードします。これは、セットアップ/構成段階で実行できます。

これで、顧客はあなたに代わってファイルを暗号化でき、あなたは顧客に代わってファイルを暗号化できます。TLS はすでに暗号化 (機密性) を提供していることに注意してください。これにより、ファイルが転送された後、保管中にファイルが保護されるようになります。公開鍵 (および信頼できるシステム) を信頼すると、プレーンな HTTP 経由でファイルを送信できます。

署名を追加することは非常に重要です。署名を追加しないと、誰でもストレージ内のファイルを置き換えることができます。何らかの監査ログもおそらく必要です。そうしないと、ファイルが削除される可能性があります。

他のスキームも可能ですが (ファイルの暗号化/復号化には PGP スキームを好みます)、鍵の帯域外通信が必要です。これは基本的なスキームにすぎないことに注意してください。多くの落とし穴がありますが、アプリケーションの特定のセキュリティ アーキテクチャを構築することは、明らかにトピックから外れています。

于 2012-12-08T15:19:56.060 に答える