[PHP-users 15500]Re: 個人情報保護の方法について
Osamu Shigematsu
m5issige @ mr.hitachi-medical.co.jp
2003年 5月 27日 (火) 17:15:15 JST
重松です。こんにちは。
まず、PHP のスクリプトに埋め込んだデータベースのパスワードの
隠蔽方法ですが、環境変数を利用する方法が以前に提案されています。
過去ログを参照してみてください。
それから、データの暗号化について、ですが、
データを参照する必要があるのか、ないのか、によって方法論が変わります。
例えば、クレジットカード番号や、電話番号、住所などは、
全部をひとつのブロックにせずに、分割して、平文と暗号文で保存することを
提案します。
その理由として、クレジットカードの最初の 4 桁でほぼどのカードかを
カード枚数が多くない人は特定できるでしょうし、8 桁も見せれば、
どれか特定できないことはないと思われるため、
ユーザがどこに配送されるのか、など、特定できる情報で、
かつ、万一漏洩した際にも被害を最小限度にとどめられるように、
平文で保持するデータを制限するためです。
画面のイメージとしては、
現在のお支払いのカード:
帝国金融 VISA カード 0893-0893-XXXX-XXXX 有効期限 12/06
[お支払いを別のカードに変更する]
現在登録のお届け先:
308-XXXX
茨城県 つくば市 (ご自宅)
0298-99-XXXX
[お届け先を変更する]
という感じになりますね。
この場合、まず、ユーザが入力したデータを下に sha などのハッシュを用い、
十分に一意な強固な対称鍵暗号用の秘密鍵を生成します。
ユーザが入力したデータで秘匿する必要があるものは、
秘密鍵を用い対称鍵暗号アルゴリズムを用いて暗号化します。
そして、この秘密鍵をこのデータベースのために作った公開鍵で、暗号化します。
公開鍵で暗号化したデータを解読できるのはあなただけです。
そして、公開鍵は漏洩しても問題ありません。
このようにすることで、web application 側は、漏れてもそれほど問題でない
データのみ平文で表示できます。
しかし、先ほど書いたように、web application 側は重要なデータを
復号するための対象暗号鍵自身が公開鍵暗号で暗号化されているため、
それらを復号することができません。
また、万一、秘密鍵がひとつ破られても、それらはすべて異なるので、
被害を最小限に食い止められるとおもいます。
すべてのデータで公開鍵暗号を使ってもいいですが、すごく遅いです。
--
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>
PHP-users メーリングリストの案内