数値または文字列をハッシュ化(匿名化)する方法

個人情報を含むデータを扱う際に、名前や顧客IDなどの元の値を特定できないように、元の値を認識できない形に変換しつつ、同じ値には同じ匿名化された値を割り当てたいことがあります。

そのような時によく行われるのが、数値または文字列をハッシュ化(匿名化)です。そこでこちらのノートでは、数値または文字列をハッシュ化(匿名化)する方法を紹介します。

基本的なハッシュ化(匿名化)

今回は1行が1つの注文を表すデータを利用して、その具体的なやり方を紹介します。

まずは処理したい列のヘッダーメニューから「テキストデータの加工」、「変換する」から「匿名化」を選択します。

すると、テキストを変換するためのダイアログが表示されるので、プレビューボタンをクリックして匿名化されていることを確認したら、実行ボタンをクリックします。

これによって元の顧客名を認識できないような形かつ顧客ごとに一意な値に匿名化されました。

例えば9行目から11行目の顧客については、同じ顧客IDを持っていたため、同じ値に匿名化されていることが確認できます。

任意のカスタムキーを使ったハッシュ化(匿名化)

ハッシュ化を行う際に、カスタムキー(salt)と呼ばれる文字列を使いたい場合があります。

カスタムキーとは、ハッシュ化の際に追加で指定できる任意の文字列のことです。

カスタムキーを使うと、同じ入力値であっても、カスタムキーをもとに異なるハッシュ化された値が生成されるようになり、第三者による推測や逆引きを防ぐことができます。

Exploratoryでは、あらかじめインストールされているopensslのパッケージの中でサポートしている以下の関数(方式)を使って、任意のカスタムキーを使った処理が可能です。

  • sha1
  • sha224
  • sha256
  • sha384
  • sha512
  • keccak
  • sha2
  • sha3
  • md4
  • md5
  • blake2b
  • blake2s

いずれの関数の基本的な使い方は同じですが、今回はsha256関数を使った例を紹介します。まずは、先ほど追加したテキストデータの匿名化のステップを削除します。

顧客名の列ヘッダーメニューから「計算を作成」の「標準」を選択します。

計算を作成のダイアログが開いたら、今回は明示的にopensslのパッケージの関数を使いたいので、とタイプします。

openssl::sha256(顧客名)

続いてkeyの引数を利用して、以下のようにキーを指定します。なお、今回はtestをキーとして指定します。

openssl::sha256(顧客名, key="test")

この時、キーは文字列ですので、ダブルクォーテーションで囲うことを忘れないようにしてください。

なお、このまま実行するとエラーが返ります。

これは、今回利用しているsha256などのハッシュ化するための関数の結果が、ハッシュ化に利用した情報も返し、それをExploratoryがうまく処理できないためです。

そこで、実行結果を文字列型に変換するために、文字列型に変換するためのas.characterという関数を追加します。

as.character(openssl::sha256(顧客名, key="test"))

「既存列を上書きする」にチェックをつけて実行ボタンをクリックします。

これで任意のキーをもとに顧客名をハッシュ化できました。

Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio