0

会社で機密データを暗号化するために PHP mcrypt モジュールを使用しています。これはうまく機能しています。ただし、データを復号化できる新しいマスター パスワードを作成するように求められました。問題は、このマスター パスワードをスクリプト ファイルにハードコードする必要があることです。間違っている場合は修正してください。ただし、唯一の安全な方法は、スクリプトで公開キーをハードコーディングし、それを使用してデータを暗号化し、秘密キーを安全に保ち、必要な場合にのみ復号化することです。

mcrypt には、そのようなスキームの実装がないようです。これを行うライブラリ(PHPモジュールまたは純粋なPHP)を知っている人はいますか?

4

4 に答える 4

2

PHP OpenSSLバインディング、特にopenssl_public_encrypt()関数を確認することをお勧めします。実際、マスター公開鍵をスクリプトに埋め込んで、スクリプトに各ユーザーのAES鍵をこの公開鍵で暗号化させることができます。会社の対応するマスター秘密鍵を安全に保管してください。

マスター復号化機能が必要な場合は、暗号化されたユーザーキーを取得し、マスター秘密キーを使用して復号化してから、元のデータを復号化します。

于 2009-08-04T05:55:21.050 に答える
2

そのための PECL 拡張があります。http://us2.php.net/manual/en/book.gnupg.php

非常に高速である必要がない場合は、php から gnupg コマンド ライン ツールを使用することもできます: http://devzone.zend.com/article/1265

どちらの方法も試していません。

于 2009-08-04T05:19:14.150 に答える
1

このマスターパスワードの要件を確認するために、

  1. 問題の秘密鍵を知っている人だけが開くことができるencrypt this何かを「封印」するコマンドとしてのみ使用されると予想されますか?
    または、
    • 企業内で行われた暗号化を開くことを期待するものですか?
    • あなたの言い回しがこの2番目の方法で解釈されないことを確認したいだけです
    • あなたのフレーズ「decrypt any data」は危険に聞こえます
      (そして、非対称キー暗号化では実行不可能/実用的ではありません)

コメントに基づいて更新します。

  • それぞれ異なるキーで暗号化され たデータの 2 つのコピーを計画している
    • 1 つのコピーマスター公開鍵 で暗号化されます
      • マスター秘密鍵を持っている人なら誰でも復号化できます
        マスター秘密鍵を保護する必要があります (公開鍵は重要ではありません)
    • 2番目のコピーRijndael 256キーで暗号化されます
  • 目的は、
    特にデータを暗号化した個人が不在の場合に、必要に応じてマスターがデータを復号化できるようにすることです。


このアプローチは、マスター秘密鍵の所有者による介入を必要とせずに、Rijndael 鍵を持つ個人によるデータへの簡単なアクセスのために機能します。
また、マスター秘密鍵の所有者がデータの機密性を信頼されている場合。

ユーザーがコピーを更新するたびに、スキームはマスター コピーを更新する必要があります (古いものを削除し、新しいものを再暗号化します)。


ただし、ユーザー データがマスターで信頼されている場合 (ここでは明らかにそうです)、

  • もっと簡単な方法は、マスターから Rijndael キーを発行することです。
  • マスターは、マスター公開鍵自体で暗号化を維持できます
  • その後、発行された Rijndael キーだけでデータを暗号化できます。

    • ユーザーのRijndaelキーを開くことができるマスタープライベートキーで常にアクセスできます

ユーザーがデータに署名する必要がある場合は、プロセスで個別に行うことができます。
二重のコピーを保持して維持する必要がなくなります。


データに署名するために、ユーザーは自分で生成した鍵ペアを持つことができます。

  • Rijndael 秘密鍵でデータを暗号化する前に
  • ユーザー秘密鍵で暗号化されたマスター公開鍵を追加できます
  • (少なくとも) マスターと共有されるユーザー公開鍵
    は、ユーザーがデータを提供したことを認証するのに十分です。
  • 最悪のシナリオでは、ユーザーが利用できず、キーの確認に失敗した場合
    、マスターはデータの信頼性について信頼されている可能性があります。データはまだ復号化できます。
于 2009-08-04T05:27:02.917 に答える
1

それがどのように機能するかわかりません。双方向の暗号化機能は、暗号化に使用される特定のパスワードが提供された場合にのみ復号化されます (NSA であり、アルゴリズムにバックドアを設置しない限り)。2 つのパスワードで同じファイルを復号化することはできません (ハッシュの衝突がない限り、しかし、それは簡単に実現できるものではありません)。

マスターパスワードをプログラムに保存する限り、プログラムが読み込む別のファイルに保存する方がはるかに良いでしょう。そうすれば、そのファイルでより厳しい OS レベルのセキュリティを使用できます。

mcrypt は公開鍵暗号ではないことに注意してください。ただし、公開鍵暗号化を使用すると、やりたいことを実行できる場合があります。たとえば、PGP/GPG を使用すると、3 人の異なるユーザーが互いの秘密鍵を知らなくても、秘密鍵を使用してファイルを復号化できるようにファイルを暗号化できます。したがって、すべてを復号化できるマスターパスワードを持つ仮想ユーザーを持つことができます。

もう 1 つのオプションは、暗号化されたすべてのデータの 2 つのコピーを保持することです。1 つはユーザーのパスワードで暗号化され、もう 1 つはマスター パスワードで暗号化されます。

于 2009-08-04T05:37:06.030 に答える