[PHP-users 23773] Re: DB の暗号化について

Ryuzo KOSAKI kosaki @ fip.fujitsu.com
2004年 12月 1日 (水) 16:17:51 JST


こさきです。

"[PHP-users 23770] Re: DB の暗号化について" の記事において 
tom @ asakawa.ne.jpさん は書きました。

>80番を通す様な、FWの場合,80番経由の攻撃に対しては、無力だと思いますけど.
>もちろん、高度なFWの中には、そういう攻撃パターンを読む様なものもあるとは思
>いますが.

パケットのパターンでブロックする、というFWはけっこうありますね。
(高いけど)
また、FWをちゃんと設定しておけば、Webサーバを乗っ取られてもそこ
から外に攻撃に出られないってことが大事。

>また、裏セグメントの場合,WWWサーバからは、どのみち、DBサーバが見え
>てるのですから
>WWWサーバを乗っ取られてしまえば、FWが、あろうとなかろうと、同じです.
>FWが無くてもいいというより、有っても無駄ってことです.

たとえばWeb->DBに向けては5432番だけしか通さない設定にしておけば、
その先に行けるかどうかの難易度が違うでしょう。
(そうは言ってもこちらにFWを設置することはほとんどないですが)

元の暗号化の話にもどりますと「データベース(行全体)の暗号化」と
いうのは検索などの問題が出ますが「列の暗号化」は意味があるでし
ょう。
よくあるのは、個人情報ではなく「4桁の暗証番号」のようなもので
すね。普通のパスフレーズのようなものならばmd5などでhash化しても
(暗号化ではない)探るのは難しいでしょうが、桁数の決まった暗証番
号のようなものはすぐわかります。

Webサーバ上でphpを使った公開鍵を使用した暗号化ですが、たとえば
GnuPGをproc_open()で呼び出せば実現できると思います。実用になる
かどうかは別として。proc_open()のマニュアルに載っていたサンプ
ルをこんなにすると動きます。

<?php
$himitsu="himitsu no mojiretsu";
$encrypt="";

$spec = array(
 0 => array("pipe", "r"),
 1 => array("pipe", "w"),
 2 => array("file", "/dev/null", "w")
);

$proc = proc_open("gpg -ea -r recipient", $spec, $pipes);
if (is_resource($proc)) {
  fwrite($pipes[0], $himitsu);
  fclose($pipes[0]);

  while(!feof($pipes[1])) {
    $encrypt .= fgets($pipes[1], 1024);
  }
  fclose($pipes[1]);
  proc_close($proc);
}
?>


>> セキュリティのことをどのレベルまで考えるかって話です
>> ね。間抜けなシステム管理者もいるでしょうし。
>
>間抜けな管理者でもOKな様な、そんなに凄いFWが普通なのでしょうか?
>とてもそうは思えませんが.

そんなすごいものじゃなくても、普通にきっちりセットしたFWがあれ
ば、間抜けが管理者のおかげでサーバを乗っ取られてもspamまき散ら
しマシンなどにならずに済んだりします。別にOKというわけではなく
って、「どのレベルまで考えるか」ということですね。



PHP-users メーリングリストの案内