経験が少ないため、みなさんの事例を聞ければと思い質問を立てました。
データベースに登録する情報に関しての質問です。
ネットを徘徊している際、データベースに登録する情報の一部を、暗号化すべきとする記述を見かけました。
個人的な感想として、データベースへの登録は素のデータを登録すべきで、暗号化すべきではないのではないかと思っています。
理由は
・可逆性があるのであれば、根本的に暗号化は無意味
・検索しにくくなる
といった点からです。
皆様の経験上、データベースへ登録する情報を暗号化するようなケースがあれば、教えていただけないでしょうか。
できれば、その暗号化の意図と詳細も教えていただけると幸いです。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 10:06
2016/08/09 10:09
退会済みユーザー
2016/08/09 10:14
退会済みユーザー
2016/08/10 02:05
回答9件
0
ベストアンサー
情報セキュリティ要件を実装する上で、実践的規範としてPCI DSSというものがあります。
これはクレジットカード会社間からスタートした取り決めではありますが、
現在では情報セキュリティを導入する上でのグローバルスタンダードとなっています。
話が脱線してしまいましたが、
上記の要件によればクレジットカード情報等は明確に保護されなければならないとしています。
そのためクレジットカード番号はデータ暗号化が導入される一例となっています。
暗号化といってもデータ投入時の暗号化もあれば、DBMSが提供機能としてもデータ暗号化はあるので、
セキュリティ性の高い案件では機能も使われるということは知っておいて損はないと思われます。
セキュリティ一般に言えることですが、
常に攻撃者に突破される可能性を考慮した上で、
何重にも対策を張りめぐらせ、
一つ突破されても次で防御できるという状態を保つことが望ましいです。
コスト削減と利便性とはトレードオフの関係なので、
どこで妥協点を定めるかと言うのが一番難しい所ではあるのでしょうが^^;
###追記
コメントを受けまして少し追記をば。
データベース暗号化について、
DBMS(Oracle、SQL Serverなど)にもよるかもしれませんが、
データベース暗号化技術を利用しても基本的には現在のSQLをそのまま用いて暗号化・復号化の実施を行えるような機能を提供しております。テーブル暗号化
また顧客情報の内クレジットカード情報のみ暗号化したい等といった場合は、
カラム暗号化のように柔軟な仕組みを提供しているDBMSも存在します(Oracleなど)。
後、暗号化とは少し話が変わりますが、
ビューなどを利用して実テーブルの定義を隠ぺい(顧客の機密情報の入ったカラムを除いたビューを定義など)してセキュリティを確保するケースもありますね。
###さらに追記
暗号化と聞くと対外的な対策とイメージしやすいですが、
対内的にも牽制の意味で用いるとかはあるのかもですね。
(以下某試験問題の受け売り)
例えば普段はクレジットカード番号は暗号化し、
内部スタッフでも普段は参照は不可とする。
ある顧客(当然クレジットカード持ち主であることの本人確認はしっかり行うこと)から、
クレジットカード番号に関する問い合わせがあった場合、
オペレータはその顧客情報から検索した番号のみを復号して得る。
クレジットカード情報レベルとなると、
社内オペレータに対しても必要以上情報を開示してはいけないという考えによるものです。
###蛇足
IPAの主催している情報処理技術者試験の区分のひとつに、
「情報セキュリティスペシャリスト」(今年限りでこの名前の試験はなくなるのですが^^;)という試験があります。
確か2年ほど前の試験だったと思いますが、
ちょうど午後Ⅱの試験でPCI DSSとデータベースセキュリティをテーマとした問題が出題されました。
興味があればこの辺りの設問を読んでみるだけでも面白いかもしれません^^
投稿2016/08/09 11:10
編集2016/08/09 23:09総合スコア1636
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 11:44
退会済みユーザー
2016/08/09 15:25
2016/08/09 22:45
退会済みユーザー
2016/08/10 01:59
2016/08/10 03:16
退会済みユーザー
2016/08/10 04:04
2016/08/10 05:14
退会済みユーザー
2016/08/10 05:26
2016/08/10 09:26
2016/08/10 11:43
退会済みユーザー
2016/08/11 00:14
0
データベースに登録する値の一部をアプリケーションで暗号化する事に関してですね。
どのデータを暗号化すべきか(どこまで暗号化すべきか)というのはケースバイケースな部分もあるとは思いますが、パスワードや個人情報などが挙げられると思います。
・可逆性があるのであれば、根本的に暗号化は無意味
・検索しにくくなる
この2番目の検索しにくくなるのはそうですね。
利便性は損ねるかもしれません。
(データベース側で暗号化する機能を使った場合はそうとも言い切れませんが)
1番目の方はまた後で。
その暗号化の意図と詳細も教えていただけると幸いです。
基本的にはリスク回避が目的です。
悪意ある行為またはミスによって、データベースの内容がすべて露出してしまった場合そのままで使えなければ安全・・・いや、安全ではないのですが、まだマシです。
(一方で実行中のアプリケーションで復号されたものがバシバシ流出するとしたら、そこに対しては意味はないでしょうね。)
たとえば以下は今簡単に暗号化したものですが、
64 C4 D9 3B 1D 8F 0B 5B 26 0D 63 D4 87 EA 83 1A B9 92 A3 96 99 ED F4 5B 18 D8 CC 10 18 65 B9 09
これを元に戻せますか?
・可逆性があるのであれば、根本的に暗号化は無意味
についてですが、これは「容易に可逆可能なら無意味」ではありますが、根本的には無意味とまではならないと思います。
暗号化されたバイト列を復号するには鍵が必要です。
この鍵の管理がずさんなら(データと共に鍵と暗号化方式またはデータを利用するプログラムのソースなどまでバレれば)、容易に可逆可能なので無意味と言えます。
先ほどの暗号化はAES暗号(CBC)を使っています。
キーとブロックは128bitです。
鍵は "teraTail" です。
そこまでわかれば暗号化した内容はたしかにほとんど意味はないでしょう。
パスワードなど一部のデータに関しては可逆である必要は必ずしもないので不可逆な暗号化にしておいても構いません。
(暗号化して同じ文字列になるかどうかで正しいか判断できるからです)
また、暗号化は「現実的な時間では解けない」という理屈の上で成り立っていて、絶対ではない点も留意しておいてください。
投稿2016/08/09 10:46
総合スコア2604
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 12:01
2016/08/09 12:10
退会済みユーザー
2016/08/09 12:18
0
金融検査マニュアルに、こんな記述があります:
- 金融機関が責任を負うべき顧客の重要情報を網羅的に洗い出し、把握、管理しているか。
- 洗い出した顧客の重要情報について、重要度判定やリスク評価を実施しているか。また、それぞれの重要度やリスクに応じ、以下のような情報管理ルールを策定しているか。
- 機密情報について、暗号化やマスキング等の管理ルールを定めているか。また、暗号化プログラム、暗号鍵、暗号化プログラムの設計書等の管理に関するルールを定めているか。なお、「機密情報」とは、暗証番号、パスワード、クレジットカード情報等、顧客に損失が発生する可能性のある情報をいう。
FISC 安全対策基準・解説書 には、こんな記述があります:
データ保護/漏洩防止/技28 蓄積データの漏洩防止策を講ずること。
これらに準拠するために、また監査で指摘されないために、顧客情報や機密情報は暗号化しています。
対象によってケースバイケースですが、OracleDBの透過的データ暗号化を使ったり、ネットワーク暗号化ツールを使ったり、電子政府推奨暗号リストを参考に、sha-2のようなトラップドア関数をかけたりします。
暗号化したまま検索が可能な秘匿検索技術 なるものがあるそうです。使ったことはないですが、興味があります。
投稿2016/08/09 10:52
編集2016/08/09 10:58総合スコア2493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 11:51
2016/08/09 13:04 編集
退会済みユーザー
2016/08/09 13:08
2016/08/09 14:54 編集
退会済みユーザー
2016/08/09 15:27
0
社内の人給システムをマイナンバー対応にするときに暗号化の話がありました…。マイナンバーが平文でディスク上に存在してはならないみたいな要件があって、まぁ、対応のために購入するシステム(内製化なんて無理っすよ)は暗号化にもちろん対応しているんですけど、それをバックアップするときはどうするのかとか考えるのが面倒でした…。
さて、暗号化する理由は**「物理的な盗難」にあったときに備えるためというただ一点です。秘密鍵は地理的に別の場所にあることは当たり前の話**なので、ここでは議論しません。「論理的な盗難」は、プログラマーやSEが頑張れば、なんとかなる物です。セキュリティパッチを当てるとか脆弱性を防ぐ仕組みを随所に入れるとか、色々できます。ですが、どんなに強固なシステムであろうとも、盗んで、HDDを直接読んじゃえば、あってないような物です。
うちのサーバは○○社(好きな企業名を入れてください)のデータセンターにあるから…って言ってもやろうと思えばいくらでもできます。データセンターに入ったことがある人はわかるかと思いますが、結構簡単に入れます。中に入らないと作業できないから当たり前なんですけど、結局、性善説で入室を許可してしまいます。
A社のデータを盗もうとしたB社は、A社が利用しているデータセンターを把握し、A社のサーバと同じフロアにあるサーバを所有するC社を買収。A社から出向中のC社の関係者として、C社のサーバのメンテナンスだと申請し、堂々と玄関からデータセンターに入り、A社のサーバがあるフロアに侵入する。
なんて、産業スパイ映画(というより企業戦士Y○M○Z○KIにありそうって、古っ!)みたいなこともできないことは無いのです(もちろん、監視カメラやラックの鍵とかあるので、同じフロアに入れたからと言って簡単に盗めるというわけではありませんが)。専用フロアにすればいいって?どれだけ金が必要になるでしょうかね〜〜。うちなんて流行りのクラウドのA○Sだから大丈夫…いやいや、なんで外国のどこかにあるデータセンターがなぜ安全だと思うんですかね?クラウドなんて、物理的に一番信頼できないところです。それに、どんなに頑丈であっても、未曾有の天災で建屋が崩壊し、HDDが散らばっていた…なんてことが起きない保証は誰がしてくれるんでしょうか?(もちろん、一定以上の天災の場合の免責事項はちゃーんと契約書に書いてありますよ、責任は取れないって)
結局、どんなに金を掛けても物理を完全に防ぐ方法はありません。だからこそ、盗まれても大丈夫という仕組みを導入する事は意味があるのだと思います。
投稿2016/08/09 13:26
総合スコア21737
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 13:38
2016/08/09 14:00
2016/08/09 14:58 編集
2016/08/09 22:37
退会済みユーザー
2016/08/10 01:55
0
クレジット・カードの番号は漏えいすると致命的なことはご理解いただけますよね。詳細なテーブル定義情報、実際に実行されるSQLもまねされたくないなど、公開したくない場合もあります。
投稿2016/08/09 10:04
総合スコア16417
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 10:07
2016/08/09 11:32
退会済みユーザー
2016/08/09 12:07
退会済みユーザー
2016/08/09 13:40
0
個人的には、情報自体を暗号化するのはちがうんじゃないかな、と。
やるとしたらシステムへの出し入れをセキュリティ的に固める方向で。
システム的には強固であっても、ソーシャルハッキングに対しては
ガバガバだってことはありがちですよね。
そのへんをどうバランスとって納得していくかじゃないのかなあ。
投稿2016/08/09 10:13
総合スコア7460
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 10:16
2016/08/09 10:24
退会済みユーザー
2016/08/09 10:29
0
おっしゃる通り、可逆性のある暗号化では読み取ることが可能ではありますが、それでも無駄ではないかと思います。
例えば顧客情報を含むデータレコードであったとして、
データベースをごっそり抜き取られるようなケースを想定した場合、
そのままで顧客情報を読み取ることができてしまいます。
しかし暗号化されている場合、可逆化解読技術がない場合は、読み取られません。
それだけでも、情報流出を抑える意味があると思います。
(例えば可逆化に暗号キーが必要な場合であれば、さらに解読に手間がかかります)
完全ではないかもしれませんが、大事なお客様のデータを守るために、できることをできる限り行うことは無意味でないと思います。
投稿2016/08/09 10:02
編集2016/08/09 10:28総合スコア440
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 10:08
2016/08/09 11:55 編集
退会済みユーザー
2016/08/09 10:15
2016/08/09 11:12 編集
退会済みユーザー
2016/08/09 10:26
2016/08/09 10:36 編集
退会済みユーザー
2016/08/09 10:30
0
では今とあるサイトでやっている事実だけを
クレジットカードや口座番号など本当にばれちゃいけないデータは外部サービスに保持してもらいそこからの電文を利用して処理しています。
まあその外部サービスが流出したらどうすんだという問題はありますが、自社でそういう情報を持っておくより安全です
個人の登録情報で暗号化する内容はパスワードだけ行っています。
投稿2016/08/09 10:45
総合スコア1820
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 12:14
2016/08/10 02:47
退会済みユーザー
2016/08/10 02:51
0
私の場合は、小規模システムが多いので、データベースの暗号化という要件があまりないのですが、提案することもあまりないですね。しいて言えばパスワードのハッシュ化ぐらいなものです。
使い勝手やパフォーマンスの面でデメリットが大きいのは指摘の通りだと思います。
検索しにくくなるというのが最大の問題点だと思います。
物理盗難についての問題もありますが、これについてはファイルシステム自体を暗号化したりなど、別のレイヤで行ったほうがメリットが大きいように思います。
投稿2016/08/09 13:58
総合スコア1939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/09 14:58
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。