1

社会保障番号などの安全なデータを暗号化しようとしていますが、暗号化のソース コードに完全にアクセスできる他の人 (Web ホスト、従業員など) がいるでしょう。元のソースに含める必要のないキーを使用して何らかの方法で暗号化して、私 (キーを知っている人) だけが復号化できるようにすることは可能ですか?

4

3 に答える 3

3

あなたの考えでは、いや、それはできません。いいえ、「非対称暗号化」と言っても役に立ちません。特定の操作が(正当なユーザーによって)それらのデータに対して発生する場合、それらを復号化する必要があり、復号化キーが保存されている場所にコードがアクセスしようとします(サーバー上のすべての管理者がアクセスできることを意味しますそれも)。

もちろん、クライアントのデータを半永久的に暗号化したい場合 (ユーザーはデータを変更したり再度読み取ったりすることはできません)、はい、あなた (開発者) に非対称暗号化を提案した人々は、秘密鍵の秘密は、100% 正しいです。

それを行う方法は次のとおりです。

  1. ユーザーのサインアップ: キー ペア (プライベートとパブリック) を生成し、パブリックをデータベースに保存し、プライベートをユーザーのパスワードのハッシュで暗号化し、データベースに保存します。ハッシュ化されたパスワードを再度ハッシュ化し、データベースに保存します。

  2. ユーザーが機密データを入力する: 入力を取得し、データベースの公開鍵で暗号化して (Hugo の提案に従って、ユーザーのパスワードをプロセスのパスフレーズとして使用します)、データベースに保存します。

  3. ユーザーが自分の情報にアクセス/編集する: ユーザーのパスワードを取得し、2 回ハッシュして認証します。次に、正当なユーザーである場合は、最初のハッシュを使用して秘密鍵を復号化し、秘密鍵を使用してデータを復号化します (ユーザーのパスワードを次のように使用します)。プロセスのパスフレーズ)。

100% のセキュリティはありません。この考えを取り入れて改善してください。

更新: 支払い処理会社で働く友人と話をしたところ、彼は実際の状況を次のように説明しました。

サーバーを実行している人は、暗号化されているかどうかにかかわらず、常にデータにアクセスできます。秘密鍵をどこかに保管する必要があります。SSN とクレジット カード番号は、物理的なセキュリティを備えた別のサーバー上の別のデータ データベースに保管されており、許可された人物のみがそのサーバーにアクセスできます。同じサーバー上でスクリプトを使用する以外は、安全なデータベースにクエリを実行しません。これらのスクリプトは、すべての支払いを処理する最小限の API を提供します。私たちの平文データベースでは、情報の一部 (XXXX-XXXX-XXXX-4569) のみを閲覧目的で保持しています。すべての編集、読み取り、追加、追加、削除は、API を介してその安全なサーバー (安全なソフトウェア、ロックされたドア、セキュリティ カメラ) で行われます。

于 2012-06-26T05:20:45.947 に答える
1

短い答えはノーです。

ただし、GPG キー (または SSL キー) などの非対称キーを使用することもできます。

秘密鍵と公開鍵があります。公開鍵は暗号化に使用され、秘密鍵は復号化に使用されます。ソース コードに公開鍵を含めて、秘密鍵だけを保持することができます。

于 2012-06-26T04:43:40.757 に答える
0

あなたはmcryptを使うことができます

エンコーディングの例:

$key = "mykey";
$data = "my data";
$enc_data = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_ECB, md5($key));

デコード例:

$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $enc_data, MCRYPT_MODE_ECB);

$ keyは、ソースコードの外部で指定することも、覚えてhtmlフォームを介して指定することもできます。

于 2012-06-26T06:18:06.260 に答える