« OS Xでのファイルの開かれ方 | メイン | ヒビノキロク・・ »

MySQLでカラムの暗号化/復元

DBを作る上で必ず悩んでしまう問題。
もし、もし、仮にDBからレコードのデータを全部ぶっこぬかれた場合、そこに個人情報が載っかってると非常にマズイ。
だから、もし、もし、仮にDBからレコードをぶっこぬかれても、データとして意味が内容に、暗号化しておけないか・・と。

DBに格納されている時は暗号化されておいて、スクリプトから取り出した時点で、復元されているという感じ。
MD5やCRYPTは、一方通行なため、暗号化する前のデータがわかってなければ使えない。

どうしたらいいものかと調べたので、結果をここにまとめる。

環境:MySQL 4.0.2以降

phoneというカラムがあり、これを暗号化する。

INSERT INTO test( phone )
VALUES (
AES_ENCRYPT( '0120-000-1234', 'secret_key' )
)

secret_keyは、復元するために必要なキー。

INSERTしたフィールドを見ると、、

SELECT hex( phone )
FROM `test`

結果:
D8637B3C6F6E4B86A48B5BFA7DD09D1B


となる。

次に、復元。

SELECT AES_DECRYPT( phone, 'secret_key' ) FROM `test`

結果:
0120-000-1234

暗号化/復元の為のキーをそのままSQLのクエリとして書いちゃうと、ソースを見られたり、ログ見られたりすると意味がないのだけれど。

その辺をもう一工夫する必要があるよなぁ。
それと、暗号化したカラムはwhereで指定できないってことくらいかな。

まぁ、実際はそれ以前のレイヤーでちゃんと防いどかないとダメだよね〜
でも、念には念を入れるってことで。極力バレたくないカラムは、上の方法で暗号化してみるのもありかと。

トラックバック

このエントリーのトラックバックURL:
http://www.ironhearts.com/diary/mt-tb-ih.cgi/561

コメントを投稿

2008年12月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

最近のコメント

999 on 日々の記録: 4600Cを業務で使
uta on エラーコード -10660: はぁ〜なるほど。 あ
あんどりゅー on Firefoxでtableをdisplay:blockすると、幅がおかしくなる問題の対処: なるほど! 助かりま
小優 on 日々の記録: DELL4600Cで
よしぞう on 日々の記録: 4600C 表記の対
よしぞう on 日々の記録: 4600C 表記の対
on MySQL後で調べるメモ: DB接続後 目的のS
on 日々の記録: 「無くなった留め具」
on JavaScriptでクロスドメイン: >しかし、こういう小
junp on iMovieで静止画を取り込むと荒い: すいません困ってます

アーカイブ