6

私のDelphi 2010アプリケーション (現在開発中) は、ユーザーのファイルを暗号化し、EC2 にアップロードしてから S3 にアップロードします。ユーザーは、安全な Web サイトを使用してファイルをダウンロードできます (ドロップボックスに似ていますが、コンテキスト、市場、用途などは異なります)。

RSA 暗号化を使用しています。ユーザーが自分の秘密鍵 (ローカルで生成) を使用するか、共有鍵 (クラウド上にある) を使用するかを選択できるようにします。

ファイルのダウンロードに取り組んでいるときに、適切に処理する必要がある 4 つの可能性がありました。

  1. ユーザーが自分の秘密暗号化キーを使用する場合:

    を。Delphi / クライアントからのダウンロード: ファイルはダウンロード後にユーザーのマシンで復号化されます

    b. Web サイト / PHP からのダウンロード: (直接) 不可能です。ユーザーが自分の秘密鍵をローカルで提供し、ダウンロード後にファイルを復号化できる小さなユーティリティをダウンロードする可能性をユーザーに与えない限り。

長所/短所: 安全ですが、簡単ではありません/制限が多すぎて、モバイルでは実行できません(?)

  1. ユーザーは共有秘密暗号化キー (クラウド上にある) を使用することを選択

    を。Delphi / クライアントからのダウンロード: ファイルは最初に EC2 上の PHP を介して復号化されます (その後、ユーザーに提供されます)。この場合、多くのユーザーがファイルをダウンロードしている場合 (可能性は低い)、または復号化するファイルが大きすぎる場合、ダウンロード プロセスが非常に遅くなる可能性があります。 .

    b. ウェブサイトからのダウンロード / PHP: (a)と同じ

長所/短所: 単純明快 に動作しますが、CPU 使用率が非常に高くなり、ダウンロード時に許容できないほどの遅延が発生する可能性があります (特に、問題のファイル サイズが大きい場合)。

私の2部構成の質問は次のとおりです。

1) そのようなシナリオを処理するためのより良い戦略はありますか? と

2) ユーザーが秘密鍵と共有暗号鍵のどちらかを選択できるようにしたい場合、(暗号化戦略/ダウンロードの処理に関して) どうしますか?

PS。私は Delphi 2010 (クライアント) を使用しており、EC2 インスタンスで実行されている PHP 5.3 は、最新の標準の Amazon Linux 2012 ビルドを実行しています。

EDITトラフィックは常に暗号化されるため、HTTPS のみです。

EDIT 2暗号化/復号化にGPGを使用しています

4

1 に答える 1

2

サーバー側の暗号化/復号化を提供する必要がある場合は、openssl などで system()/exec() を使用してください。PHP が大きなものを暗号化/暗号化するために使用されるのを見るのは嫌いです。単純に、実際にはそうするように設計されていないからです。その場合、しばらくしてから暗号化されていないバージョンのファイルを削除することが重要です。

あなたがやろうとしていることと同様に、サーバー側で何かを安全にするのは本当に難しいです. 小さなものを暗号化/復号化している場合は、おそらくブラウザのjavascriptで実行できます-おそらくhttps://www.google.com/search?q=javascript+aes&sugexp=chrome,mod=16&sourceid=chrome&ie=UTFを参照してください-8

私がすること:

1) EC2 にアップロードします。ランダムなパスワードを生成し、それを公開鍵で暗号化して保存します。大きなものに非対称暗号化を使用したくない場合。以前に生成されたランダム パスワードを使用して、コマンド ラインから openssl で暗号化します。暗号化されたファイルを S3 にアップロードします。暗号化されていないファイルを削除 (おそらくシュレッド) します。

2) ダウンロードの場合は、S3 からフェッチします。ユーザーに秘密鍵をアップロードしてもらいます。秘密鍵を使用して、以前のランダム パスワードの暗号化されたバージョンを復号化します。そのパスワードを使用して、openssl を使用してファイルを復号化します。名前をランダムなもののハッシュにして、PHP なしで nginx/apache を直接通過できるようにします。x分ごとにcronにクリーンアップしてもらいます。

于 2012-09-02T14:06:22.950 に答える