19

または:多数のユーザーのために暗号化されたデータを保存する方法は?

確かに、それはばかげた質問です。この用語がすでに示しているように、秘密鍵は1人だけに制限されています。しかし、私には次のシナリオがあります。

ユーザーTomは、データベースに暗号化して保存する必要のあるデータを入力します。ユーザーは、この情報をジムとボブが利用できるようにすることを決定します。ユーザーのJohnとJayneは、それを復号化できないようにする必要があります。もちろん、サーバーをハッキングし、暗号化されたデータと暗号化/復号化を行うスクリプトにアクセスできるユーザーTimも対象外です。

PHPのopenssl_public_encrypt関数を使用した公開鍵/秘密鍵のアプローチは、2人のユーザーがデータを復号化するためにその「秘密」鍵を持っている必要があるため、ここでは機能しないと思います。

これはかなり一般的な質問だと思いますが、重要な場合は、PHP(およびMySQL)で実行する必要があります。

4

4 に答える 4

17

これがOpenPGP(および他のシステム)で行われた方法です。-データ自体を暗号化するために使用される秘密対称鍵を生成しています。-次に、この対称鍵はトムの鍵で暗号化されます。-また、対称鍵はジムとボブの公開鍵で暗号化できるため、鍵を復号化し、その後データを復号化できます

于 2011-01-05T14:33:54.693 に答える
12

PHPはこのための関数を提供します- openssl_seal()。この関数は、公開鍵の配列を受け取り、データを暗号化して、対応する秘密鍵のいずれかを使用してデータを復号化できるようにします(を使用してopenssl_open())。

于 2011-01-06T04:36:37.250 に答える
4

PHPのライブラリを知りません。ただし、一般的な手順は次のとおりです。

  • データは対称鍵を使用して暗号化されます
  • 受信者ごとに、受信者の公開鍵を使用して鍵が暗号化されます
  • これはすべてPKCS#7ファイル構造に保存されます

「PHPとPKCS7」を検索すると、いくつかの結果が得られるはずです...

于 2011-01-05T14:32:54.833 に答える
2

トムのキーとは異なるデータ暗号化キー(Kgeneralと呼びます)を使用します。

トムの公開鍵でKgeneralを暗号化し、結果をトムに渡します。トムは秘密鍵を使用してそれを復号化し、Kgeneralを取得できます。

その後、別のユーザーがデータにアクセスする必要がある場合、トム(またはアプリケーション)は公開鍵を使用してKgeneralを暗号化し、その方法でアクセスを許可できます。

于 2011-01-05T14:33:26.707 に答える