個人情報保護等のセキュリティ要件として氏名や住所等を
DBに保存する場合、文字列をマスキングして格納する事を検討しています。
お客様からDelphiではそういった(隠蔽目的のための)関数が
予め用意されているはず。と言われました。
ネット等で探したところ「FormatMaskText」という関数を見つけましたが、
この関数が先の要件を満たすものか、
また、この関数の使用イメージ(引数)等がわからずにいます。
詳しい方居ましたらアドバイス頂ければ助かります。
どうぞ宜しくお願いします。
表示する時だけ隠すんじゃなくて、保存してる時も隠したいんじゃないの?
だったら暗号化するしかないね。
マスキングした文字列をDBに格納してはたしてそのテーブルはどんな役割を持ち得るのか・・・
暗号化したデータを保持するということは検索やメンテナンスなどにそれ相応の手間とパフォーマンスを犠牲にしなければならないはずなのだが、その辺はどうするんだろう・・・
やったことないし、導入事例も聞いたことないので導入後に興味あり
DBは何を使うか知らないけど、個人情報保護法対策なら私見では「やるだけムダ」
表示時も保存時も隠避化したら扱えなくなりそうですが。
・暗号化して再度復号する場合は。
目的は違いますが、base64_encode / base64_decode のような
外部ライブラリーを使えば、擬似的に隠せます。
・パスワードのように暗号化して復号できないようにする場合は。
md5 のような外部ライブラリー使えば良いかと思います。
これらのライブラリーは検索すればいくつか提供サイトも出てきますが
base64_encodeを使う場合は、一般的な変換関数ですので
解読可能なため、本当の意味での隠避にはなりません。(念のため)
..オリジナルな関数で作れば本当の隠避化ができるかと。
(意味があるかどうかは別ですけど)
色々とご意見有難うございます。
私の説明では若干誤解を招いているようですので改めて要件を整理します。
・画面表示時は隠蔽しません
(例えば顧客管理機能と考えてもらえれば良いです。
顧客の登録や更新を行う等)
・DBやファイルとしてデータ保存時に隠蔽します
・DBやファイル保存時の隠蔽の目的としては、例えばデータが保存された
ファイルが外部に持ち出された時のセキュリティ対策です
(第三者がファイルを持ち出し、中身を見ても判別できない)
またセキュリティレベルについても考慮する必要がありますが、
まずは上記要件をDelphiの関数で構築できるか否かの判断をしたいです。
以上宜しくお願いします。
DBに暗号化して保存した場合は、TFieldのGetTextEventで復号して表示できると思うけど、検索時は当然キーワードも暗号化してから使うことになるのかな...
CSVでの保存でもいいのなら、暗号化複合化も含めてもっと手軽に。
暗号化コンポはフリーでもあると思うけど、大切な個人情報ならお金を出して堅固な暗号化コンポを使うべきでしょうね。
元から断つさんや、通りがかりさんが、書いているように、暗号化すれば出来ますが、そんなバカなさんがおっしゃるように、DBテーブルのメンテナンスは不可能に近くなると思います。
それと、使った事はありませんが、FirebirdなどのDBMSではDBそのものに
パスワードを掛けることができたと思います。
セキュリティにはいろんなやり方があるので、考え方を変えて見るのも..
既にレスがありますが、最近は個人情報保護の観点から、DB側で項目暗号化をサポート
しているものがあります。OracleやJET(Access)の最新バージョンにもあるようです。
そのような機能がないDBでは、Commit(Post)などの際に暗号化する作業が必要でしょう。
もちろん、表示の時は逆の動作が必要ですが。
http://www.atmarkit.co.jp/ad/oracle/10g0704/on_win/on_win.html
暗号化をキーにしていろいろ調べてみてはいかがでしょうか。
FormatMaskTextはわかりません。
以前聞いた事のある話です。
・お金を取られないように堅牢な金庫に入れたものの、いざ必要な時に
お金が出せなくて、壊したと言う話。
・使っているPCに何重にもパスワードを掛けたがために
自分も入れなくなり、結局再インストールした話。
(データは再度入れなおしたので膨大な時間がかかったそうです)
何をやってんのか分からない、お粗末なお話でした。
何事もほどほどに。
色々ご意見有難うございます。
とても参考になる話が多くて助かります。
まずFormatMaskText関数については、
こちらの意図した(隠蔽目的の)関数ではありませんでした。
普通に体裁を整えるための関数のようです。
(Ex.電話番号にハイフンを付けたり)
また改めて整理しますと、今回の質問は
あくまで文字列を隠蔽できる関数がDelphiで標準で
存在するか否かを知りたいのが目的です。
(実際に採用するのとは別の話です)
個人データのセキュリティ要件を満たす方式として、
市販ツール等によるファイル暗号化や、
DBの暗号化機能を使用する案も別途整理を進めています。
最終的にはそれら処理方式におけるコストや
メンテナンス性を考慮して判断される予定です。
やはりDelphi標準の文字列マスク(暗号化?)関数というものは
存在しないのでしょうか?
ネット上でも(簡単に)見つかりませんし、
この場でも有力な情報がないと言うことは、
お客の勘違いかもしれません。
(お客は存在すると言っているので)
もう少し様子を見て当件Closeしようと思います。
以上、宜しくお願いします。
少なくともD7proには無いです。
途中送信すみません。
暗号化を目的としたものは無いという意味です。
お客さんとの意志の疎通をはかった方が、早いように思います。お客さんの「存在する」と言っている機能を見せていただいたら良いでしょう。
まだ文字列マスクと暗号化を混同してるみたいね。
なんでDelphi標準の関数に拘るのかな。
市販ツール等によるファイル暗号化は考慮するのに
暗号化コンポやライブラリは考慮しないの?
Blowfishで検索するとイイコトあるかもね。
Delphiの関数に拘る目的としては、
お客の提案でしたので、まず事実確認をしたかったためです。
お客の提案を頭から否定するのは心象が悪いというものありますし、
簡単に「そんな関数ない」と言ってもし存在したら、
こちらの技術力も疑われてしまうので。。
PJとしては市販ツールはもちろん、
各種フリーライブラリ等並行で検討しています。
いずれも当初の目的(関数の有無)については”無い”という
結論にしたいと思いますので当件Closeします。
色々コメント頂いた方々には感謝致します。
有難うございました。
ツイート | ![]() |