ITセキュリティとGoogleでこれに似たものを検索しましたが、自分のやっていることに関連するものをリモートで見つけることができませんでした。
私は2つの部分からなるソフトウェアを開発しています-1つの安全な信頼できるコンピューターで実行されるC#プログラムと、サーバーで実行されるPHPソフトウェア)。このシステムは、機密データ、つまり薬局のレコードを扱います(米国ではない [〜#〜] hippaa [〜#〜] は適用されません)。
データを安全に暗号化して、データベースが盗まれた場合でも、可能な限りデータを復号化できないようにしたいと考えています。名前、住所などの識別可能なデータを保存せずにデータを保護しています。
最初は このソリューション のバリアントを使用したかったのですが、さらに熟考すると、RSAはプレーンテキストを直接暗号化する適切な方法ではないことに気付きました。私の研究により、AESがそのための最も適切なアルゴリズムであると私は信じるようになりました。暗号化の専門家でないほとんどの人に与えられたアドバイスは業界標準のプロトコルに従うことですが、私の基準に一致するプロトコルを見つけることができませんでした。
基準は次のとおりです。
これが私が思いついた解決策です:
当然、すべての接続はTLS/SSL(HTTPS経由)を介して行われます。機密データが転送される前に、サーバーとソフトウェアが「準備」またはペアリングされます。サーバーで非対称キーペアが生成され、秘密キーがソフトウェアに転送されます(C#コンポーネントを「ソフトウェア」と呼びます)。秘密鍵がサーバーから削除され、公開鍵が保管されます。
ユーザーが登録すると、そのパスワードが使用され、PBKDF2を使用して128ビットのキーが生成されます。このキーは、以前に生成された公開キーを使用してRSAで暗号化され、保存されます。
ソフトウェアからサーバーにデータがアップロードされると(24時間ごと)、ソフトウェアは(当然HTTPSを介して)データをアップロードするユーザーIDのリストを送信します。サーバーは、RSAで暗号化された128ビットの鍵のリストを、対応するユーザーIDとともに返信します。ソフトウェアは、プライベートキーを使用して1つずつ暗号化を解除し、128ビットキーのリストを取得します。サーバーはユーザーごとに、そのユーザーのデータを取得し、そのユーザーの対応するキーを使用してAES-128で暗号化します。ペイロード全体がサーバーにアップロードされ、直接格納されます。
ユーザーがログインすると、パスワードに短時間アクセスでき、PBKDF2を使用してAES-128キーが生成されます。ユーザーがページをロードするたびにパスワードを再入力する必要がないように、AES-128キーは短い(5〜10分)有効期限でマシンの安全なCookieに保存され、後続のページロードで復号化して表示するために使用されます。そのユーザーのデータ。実際には、サーバーに実際に保存されることはありません。
このセキュリティプロトコルは適切ですか?変更する必要がありますか?業界標準でここで機能するものはありますか?どんな助けでも大歓迎です。
独自のプロトコルを展開することはhardです。あなたは多かれ少なかれ実行するものを簡単に手に入れますが、安全なものを手に入れるには多くの作業とかなりの量の運も必要とします。
要件から、次のようなプロトコルが必要です。
OpenPGP形式 には、そのために必要なすべてのプリミティブが含まれています。 BouncyCastle は、その形式を使用できるオープンソースライブラリであり、C#/。NETバージョンとして使用できます。