質問
会社で機密データの暗号化にPHP mcryptモジュールを使用しています。これはうまく機能しています。ただし、データを復号化できる新しいマスターパスワードを作成するように要求されました。問題は、このマスターパスワードをスクリプトファイルにハードコーディングする必要があることです。私が間違っている場合は修正してくださいが、唯一の安全な方法は、スクリプトで公開鍵をハードコーディングし、それを使用してデータを暗号化する一方で、秘密鍵を安全に保ち、必要なときにのみ復号化することです。
mcryptには、このようなスキームの実装がないようです。誰もがこれを行うライブラリ(PHPモジュールまたは純粋なPHP)を知っていますか?
解決
PHP OpenSSLバインディング、特に openssl_public_encrypt()関数を確認することをお勧めします。確かに、スクリプトにマスター公開キーを埋め込み、この公開キーを使用して各ユーザーのAESキーをスクリプトに暗号化させることができます。会社の対応するマスター秘密鍵を安全に保ちます。
マスター復号化機能が必要な場合は、暗号化されたユーザーキーを取得し、マスタープライベートキーで復号化してから元のデータを復号化します。
他のヒント
そのためのPECL拡張機能があります。 http://us2.php.net/manual/en/book.gnupg。 php
非常に高速である必要がない場合は、phpからgnupgコマンドラインツールを使用することもできます。 http://devzone.zend.com/article/1265
どちらの方法も試していません。
どのように機能するかわかりません。双方向の暗号化機能は、暗号化に使用される特定のパスワードが入力された場合にのみ解読されます(NSAであり、アルゴリズムにドアを入れない限り)。 2つのパスワードで同じファイルを復号化することはできません(ハッシュの衝突がない限り、それは簡単に実現できるものではありません)。
プログラムにマスターパスワードを保存する限り、プログラムが読み込む別のファイルに保存する方がはるかに優れているため、そのファイルに対してより厳しいOSレベルのセキュリティを使用できます。
mcryptは公開鍵暗号方式ではないことに留意してください。ただし、公開キー暗号化を使用すると、必要な処理を実行できる場合があります。たとえば、PGP / GPGを使用すると、3人の異なるユーザーが互いの秘密鍵を知らなくても秘密鍵を使用してファイルを復号化できるようにファイルを暗号化できます。したがって、すべてを復号化できるマスターパスワードを持つ仮想ユーザーを作成できます。
別のオプションは、すべての暗号化されたデータのコピーを2つ保持することです。 1つはユーザーのパスワードで暗号化され、もう1つはマスターパスワードで暗号化されます。
このマスターパスワードの要件を確認してください、
- 何かを「封印」する「
これを暗号化
」コマンドとしてのみ使用することを想定していますか
問題の秘密鍵を知っている人だけが開くことができますか?または、- 企業内で行われた暗号化を開くことが期待されるものですか?
- フレーズがこの2番目の方法で解釈されないようにしたいだけです
- 「
任意のデータを解読
」というフレーズは危険です
(非対称キー暗号化では実現不可能/実用的)
コメントに基づいて更新します。
- データの2つのコピーを計画しており、それぞれ異なるキーで暗号化されています
- 1つのコピーは、マスター公開キーで暗号化されます
- マスタープライベートキーを持っている人なら誰でも解読できます
次に、マスター秘密鍵を保護する必要があります(公開鍵は重要ではありません)
- マスタープライベートキーを持っている人なら誰でも解読できます
- 2番目のコピーは、
Rijndael 256
キーで暗号化されます
- 1つのコピーは、マスター公開キーで暗号化されます
- 目的は、必要に応じてマスターがデータを復号化できるようにすることです
特に、暗号化した個人がいない場合
このアプローチは、
Rijndaelキーを使用した個人によるデータへの簡単なアクセス、
マスター秘密鍵の所有者による介入の必要なし。
また、マスター秘密キーの所有者がデータの機密性を信頼している場合。
ユーザーがコピーを更新するたびに、スキームでマスターコピーを更新する必要があります(古いコピーを削除し、新しいコピーを再暗号化する)。
ただし、ユーザーデータがマスターと信頼されている場合(明らかにここにあるように)、
- より簡単なアプローチは、マスターからラインダールキーを発行することです
- マスターは、マスター公開鍵自体で暗号化を維持できます
- その後、発行されたRijndaelキーだけでデータを暗号化できます
- マスタープライベートキーで常にアクセス可能
ユーザーのRijndaelキーを開くことができます
- マスタープライベートキーで常にアクセス可能
ユーザーがデータに署名する必要がある場合は、プロセスで個別に署名できます。
これにより、二重コピーを保持して維持する必要がなくなります。
データに署名するために、ユーザーはキーペアを生成できます。
- Rijndael秘密鍵でデータを暗号化する前に
- user-private-key で暗号化されたマスター公開鍵を追加できます
- (少なくとも)マスターと共有するユーザー公開鍵
ユーザーがデータを提供したことを認証するには十分です - 最悪のシナリオでは、ユーザーが利用できず、キーの確認が失敗した場合、
マスターはデータの信頼性で信頼されている可能性があります-まだ解読できます