前提・実現したいこと
現在開発しているシステムにて、年齢を扱っている機能があります。個人情報であるためこの値は暗号化を施す必要があるといわれ、値を暗号化してDBに格納するように設計しました。
ただ、テーブル内に格納されている暗号化された年齢を抽出する際にORDER BY句を利用したソートをしたいと考えております。
このときのソート順は格納されている暗号文そのままではなく、平文での昇順・降順で並び替えたいと考えています。
しかし単純にORDER BY句を利用すると当然暗号文で並び替えられてしまい思った動きになりません。
社内の別のシステムでどういった方法で平文での並び替えを実現しているのかと質問したところ、以下の方法で行っていると回答がありました。
1.「ソート用年齢値」テーブルのようなものを追加する 2.DBへのデータ格納時、年齢にある値を加算・乗算した値を「ソート用年齢値」テーブルに格納する 3.年齢抽出時、「ソート用年齢値」テーブルの値をSELECT句で減算・除算した値をORDER BY句でソートして暗号化された年齢が入っているテーブルと結合して抽出する
この方法を聞いたときに以下の疑問が生まれました
そもそも暗号化はある文字列に計算式をかませて難しい文字列を作り出しているものなので、上記の方法とやっていることは根本的には変わらない。 元の値を判断しづらくするためにわざわざ暗号化をしているにも変わらず、別のテーブルに解読しやすい「ソート用年齢値」なんてものがあったら意味がないのではないか
まとめるとお聞きしたい点は以下の二つになります
Q1.上記の方法(ソート用の別テーブルを作る方法)は問題がないのか。一般的な方法なのか
Q2.暗号化した値を平文でソートしたいとき、ほかにどのような方法が考えられるか
どうかよろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
値の暗号化はDBの機能(SQL ServerでいえばAlways Encrypt等)ではなく、個別に製作したライブラリに含まれる関数で行い、その値をDBに格納しています。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/10 01:28
2018/10/10 01:42 編集
2018/10/12 12:06