愛車:マツダアテンザ
Webを中心とした、ビジネス&テクノロジーに関する思いつき
by F-shin
[ このサイトについて ] [ F-shinについて ] [ トップ ]
author:えふしん
photo_20.jpg
藤川真一について


モバツイの中の人
人の良いジョンカビラと言われます。ソフト哲学者を目指します。
AMN sponsor rolls
応援します!
ツイッターやるなら
for iPhone App
Google Friend Connect
このカテゴリ[Web系]の最新30件
ワーナー作品のオンデマンド配信サービス「ワーナーオンデマンド」 動画ベーススライドプレゼンよりも、スライドベース動画プレゼンの方がWeb向き。 mixiアプリやるならAmazon EC2 モバツイが月間1億PV到達の見通し ツイッターとはなんぞや?のわかりやすい回答 ツイッターか?ブログか?思考の整理学 【Best Mobile Based Twitter App】モバツイッターがTOP5にノミネートされました。投票のご協力を!【敵はtweetie2】 【Best Mobile Based Twitter App】モバツイッターのOpen Web Awardsへの投票のご協力をお願いします! モバツイッターが日経ビジネスアソシエに掲載されました。 ネットビジネスで商標は大事です。 twitterによって世界が集約され心の戦争が起きる おまとめマンxTwitterキャンペーン セカイカメラは、21世紀のネットスケープになるか?! 「食事中なう」が無意味だと?あれ?ライフログってなんだか意味わかってる? 岡田有花さんに取材された! EC2のロードバランサーのIPアドレスが変わる罠 twitterの「つぶやき」の有効期間は2分 究極のスモールスタートの方法 自宅サーバからEC2へ 技術や用語に興味ないユーザーを「一般ユーザー」と括るのキケン アマゾンEC2 ナイトセミナ 第 2 回に出演します。 モバツイッターの政治家アカウント一時サスペンドの話 【twitter話】ネットを使う人には2種類のタイプがある ビバ☆ヒウィッヒヒーは、ネットコミュニケーションの問題をズバリ突いている うっかりしてたらモバツイの延べ登録ユーザー数が10万人を超えていました。 POPitがカラメルの商品紹介&アフィリエイトに対応! twitterは「みんなのもの」じゃない。 入力フォームの美学と現実 日本人にとって一番使われてるハッシュタグ ツイッターはステートレスなコミュニケーションでありつづけて欲しい。 夜のプロトコル「NO_04「We love twitter & tumblr.」~あの娘、ぼくがリブログ決めたらどんな顔するだろう~」に参加した。
[このカテゴリをもっと見る]
F's Garage関連
Powered by
Movable Type
■お知らせ
モバツイッターが、Open Web AwardsのBest Mobile Based Twtter Appを受賞しました!

August 14, 2008

Webサービスのユーザー情報のテーブルにクレジットカードなどの流出したら困る情報を保存するのはとても怖いことです。

そんな情報は保存しないことが望ましいわけですが、ビジネス的な事情でカード情報を保存せざるを得ないケースも当然あります。

少なくともWEBサーバから直結してるサーバーに、そんな情報は置きたくないところで、最低限カード情報サーバは裏側に専用のapiサーバを置いて、SQL文なんぞで一発で全員の情報にアクセスできないような状態にはしておきたいところですが、昨今情報が流出してしまった老舗ECサイトのように、既に稼働していて簡単には直せないぞ!というシステムで、もし万が一、そういうDB情報が流出してしまったとして、流出したDB情報から、カード番号などの重要情報が特定されるまでの期間を多少なりとも延ばすために、1人日で応急措置ができる暗号化方法について記述してみます。

■やり方
・可逆な暗号化処理で暗号化してDBに保存する。暗号化キーを作成する際には、時間情報などの常に変わる情報とソースコードにしか書かれていない「ひみつの文字」を組み合わせて暗号化を行う。

・動作が確認されたらDBから平文の情報は削除する。

■この方法の適用可能範囲
誰もが知っていて、誰もが狙いたいと思える株式公開されている大企業や有名企業のシステムがターゲットではないことは間違いありません。ターゲットとしては中小企業、ベンチャーのWebシステムということになると思います。(とか書くと怒られそうだな。)

■この方法の限界
・ここで紹介するプログラム上で復号できる以上、暗号化方法が特定されてしまったら暗号化ロジックそのものが持つ暗号強度は無力だと思います。

・結局は、ソースコードに書かれた「ひみつの文字」に基づくキーが特定しにくいことだけに依存します。

・なのでソースコードは流出しないことは大前提となります。


ということで、暗号化手法が特定され、また、総当たりで計算されれば一つの暗号は解読可能で、そこから、どのように最初のキーを作ったのか?が特定されれば、芋づる式に全員のパスワードの復号は可能でしょうが、ソースコードと一緒に流出さえしなければ、それって現実的にどれぐらい時間がかかるのよ?ってのがポイントで、迅速に流出したことさえ検知できれば、実際に不正利用されるトラブルまでの時間稼ぎは可能かもしれません。

(こういうのって実際、普通のパソコンで正しい情報を解読するのにどのぐらい時間かかるんでしょうかね?)

また、暗号化方法を特定して、「ひみつの文字列」を特定しながら、その暗号を解く処理を行うだけのメリットがあるかどうか?も重要なことで、カード情報のような経済的に意味のある情報ならそれを解読する意味があるので頑張るでしょうが、それ以外の情報の場合は、そんなことを解読するメリットもそうない可能性もあるので、そこまでのやる意義は見いだせないかもしれません。

以上の能書きを前提として以下のようなソースになります。

今回は、libmcryptを利用したphpのソースです。


$himitsu_no_angou1= "うわなにをするやめr"; //何か適当な秘密の文字を。
$himitsu_no_angou2= "qあwせdrftgyふじこlp"; //何か適当な秘密の文字を。

$raw_passwd = "password"; //これが暗号化したいパスワード

$created_on = date('Y-m-d H:i:s', time()); //データ作成日時。こういうの既に保存されてるでしょ?
//(ホントはmicrotime()の方がよさげ?)


//ここから暗号化開始

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', 'cbc', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5($himitsu_no_angou1 . $created_on . $himitsu_no_angou2 ), 0, $ks);

mcrypt_generic_init($td, $key , $iv);
$enc = mcrypt_generic( $td, $row_passwd ) ;
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

$iv = bin2hex($iv);
$enc = bin2hex($enc); //暗号化されたデータを扱いやすくしてる

//$created_on , $iv , $encの3つの情報をDBに保存しておく。
//元の生情報は捨てる

//〜〜ここから復号開始〜〜

$iv = pack("H*", $iv);
$enc = pack("H*", $enc);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', 'cbc', '');
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5($himitsu_no_angou1 . $created_on . $himitsu_no_angou2 ), 0, $ks);
mcrypt_generic_init($td , $key , $iv);

$password = mdecrypt_generic($td, $enc);
//復号完了!DBに保存していた生パスの変わりにこのパスワードを使う。

mcrypt_generic_deinit($td);
mcrypt_module_close($td);


この関数を利用するためにはlibmcryptをインストールし、phpを--with-mcrypt= [libdir]をつけてコンパイルしてあげる必要があります。

サーバが数台レベルなら、テストも含めて、なんとか1人日で対処できる範囲だと思いますので、心当たりがありそうなら暫定処置してはいかがでしょうか?

また、もしこの方法より、もっと良い方法があるよという方や、ここで提示している【この方法の限界】以上に問題がありそうだったら、是非教えてください。


なおphpでlibmcryptの組み込み方はぐぐってください。phpを自分達でコンパイルしているところなら簡単にできます。こんな素敵な暗号が簡単に使えるのが素晴らしい。

インストール方法の調査と実際のインストールとソースコードの修正を含めた実作業工数をトータル1人日という見積もりにしています。それ以外に必要な「慎重に事を進めるためにかかる時間」やリリースに必要な時間は、都合にあわせてお見積もりください。

参考:
「libmcrypt php」でぐぐる
ウノウラボ Unoh Labs: PHPで暗号化・復号あれこれ

■同じカテゴリ[Web系]のエントリー
<<前の記事 ActiveServerPages時代にはhashもSQLインジェクションもすげーメジャーというわけではなかった。
>>次の記事 iPhoneのイノベーション、プラットフォームにうまく載れる人たち
■このblogの書き込み最新3件
グッドデザイン賞に出てたおしゃれなサイクロン掃除機がなんと半額以下。 SEOには、運用のSEOと設計のSEOの2つのフェーズがある。 ワーナー作品のオンデマンド配信サービス「ワーナーオンデマンド」
この記事への提案、提言一覧
この記事への提案、提言









あなたの情報を保存しますか?