マーケター向け、技術専門用語の解説「ハッシュ」とは?

技術用語
ハッシュ

記事公開日:

マーケター向け、技術専門用語の解説「ハッシュ」とは?

Webマーケティングに関わっている人の中には、技術的な領域に詳しくなく、なんとなく曖昧な理解のまま技術用語を使っているケースをよく見かけます。本記事では、そんな技術専門用語の1つである「ハッシュ」(ハッシュ化、ハッシュ値)について知っておくべき知識をまとめました。

「ハッシュ」はTwitterで出てくる「ハッシュ・タグ」とは全く異なる用語です。「ハッシュ」について、きちんとした理解ができていない、と思う方はぜひ読んで理解するようにしましょう。


ハッシュに関する大まかな理解

厳密にハッシュを理解する前に、まずはハッシュについて、大まかな理解をしましょう。大雑把には、ハッシュとは

元のデータから一定の計算方法に従って求めること

を指します。そして、この文字列を求める方法を「ハッシュ関数」「ハッシュ・アルゴリズム」と言います。また、求められた文字列のことを「ハッシュ値」と言います。

例えば、"https://sem-technology.info/" という文字列を「SHA-256」というハッシュ・アルゴリズムでハッシュ値を求めると

78968D9F3313D32EA206C1317883E98D9CABEC0063F5CD3B743C0DC22696CE53

という文字列になります。このように一見ランダムに見える(が実際にはある計算によって求められた)英数字の文字列になります。

この記事でSHA-256というハッシュ・アルゴリズムの計算方法を説明するには複雑すぎるので、ここでは簡易的なハッシュ関数を考えてみます。例えば、

文字列の中にある○の数

も(実用性はゼロですが)1つのハッシュ関数と言えます。

まずは、このハッシュ関数の具体的な計算結果を見てみましょう。

元の文字列メモハッシュ値
SEM Technologyeoogにそれぞれ1つずつ4
Googleoogeのそれぞれに1つずつ4
Facebookaebooのそれぞれに1つずつ5
日本日に2つ2

計算の仕組みがわかりやすくなりました。以降、このハッシュ関数を使って説明を続けます。

元の文字列とハッシュ値の関係

元の文字列と生成されたハッシュ値には、以下のような関係がなりたります。

同じ文字列からは同じ結果が得られる

当たり前の話ですが、ハッシュ・アルゴリズムと元の文字列の2つから得られるハッシュ値は、誰がどのように計算を行ったとしても全く同じ結果となります。上で記載した「文字列の中にある○の数」を例にすると分かりやすいかと思います。どのような文字列であっても、計算方法は明らかであり、誰がどのように計算しても同じ結果になります。

実際のハッシュ値を見ると、一見ランダムな文字列が並んでいるように見えますが、計算するたびに値が変化するような完全なランダムではなく、一定の計算方法(アルゴリズム)に沿った値となっています。

不可逆変換

元の文字列とハッシュ値の関係で最も重要な点は「不可逆変換であること」です。何らかの文字列をハッシュ値に変換することは可能ですが、ハッシュ値から元の文字列を求めることはできません。Webマーケティングでハッシュが使われる理由はこの「不可逆変換」の性質を使ったものとなります。

実際、「文字列の中にある○の数」のハッシュ関数を考えると分かりやすいです。ハッシュ値が「4」と分かったとしても、この「4」から元の文字列が何であったのかは求められません。これがハッシュの重要な性質です。

ハッシュ値の衝突

既に「文字列の中にある○の数」のハッシュ関数の例でも明らかなように、元の文字列が全く別の文字列であっても、ハッシュ値が同一になることがあります。これを「ハッシュ値の衝突」といいます。「文字列の中にある○の数」の例では簡単にハッシュ値の衝突が発生しましたが、これはハッシュ関数の性能が悪いことに起因しています。一般的に使われるハッシュ関数はこんなに簡単にハッシュ値が衝突することはありません。

代表的なハッシュ関数(ハッシュ・アルゴリズム)の例

代表的なハッシュアルゴリズムには、

  • MD5
  • SHA-1
  • SHA-256

などがあります。一昔前は「MD5」がよく使われていましたが、異なる文字列であっても同一のハッシュ値を得る方法が研究されてしまっており、脆弱性の観点からMD5が使われることはほとんどありません。SHA-1も同様に脆弱性が謳われています。

もし、今後なんらかの場面でハッシュ値が必要なときに、ハッシュアルゴリズムとしてMD5やSHA-1が指定されていた場合は注意するようにしましょう。

ハッシュの利用用途

Webマーケティング用途

Webマーケティング用途では、Webサイトの閲覧者やCRM上の顧客データをベンダーに送信する前に、決められたハッシュ・アルゴリズムを用いてハッシュ化します。ベンダー側は、自社が持っている顧客データベース内のデータ全てをハッシュ化し、受け取ったデータと一致するデータを探し出します。

このとき重要なことは、

  • 受け渡しているデータ自体はハッシュ化されたもののため、このハッシュ化されたデータが漏洩しても、個人情報漏洩のリスクは低いこと。
  • ハッシュ値から元の値を復元することはできないですが、事業者とベンダーで共通データを持っている場合、2者間でデータを共有することができること。

の2点です。Google広告の場合は、

  • 「カスタマーマッチ」によるオーディエンスの作成
  • 「拡張コンバージョン」によるコンバージョン計測

において利用されています。カスタマーマッチにおけるハッシュの仕組みを図にすると、以下のようになります。

また、GoogleアナリティクスのようなWeb解析ツールの多くは、「個人情報」をカスタムデータとして送信することを規約により禁じています。そのような場合であっても、適切にハッシュ化したデータであれば、元の文字列に戻すことができないため、個人情報には当たらないと解釈することもできます。

例えば、Webサイトでの問合せ時などに、このハッシュ化した個人情報をGoogleアナリティクスに送信し、またCRM上の成約データの個人情報を後で突き合わせることで、オンラインとオフラインのデータを統合するような仕組みを構築することも可能です。

ただし、個人情報をハッシュ化したデータが個人情報に当たるか否かのような法解釈については人により見解が分かれる可能性が十分にあることと、個人情報であるかどうかは抜きにして各社設定しているプライバシーポリシーに適合しない可能性もあるので、実施の際は注意してください。

それ以外の用途

Webマーケティング以外の領域では、ハッシュは「パスワード管理」「ファイルの同一性保証」に使われることが多いです。特に、パスワード管理についてはほとんどのケースでハッシュが用いられています。

なんらかの会員サービスに登録するときに入力された「パスワード」は、そのままの文字列でサービス提供者のデータベースに登録されるわけではありません。入力されたパスワードを何らかのハッシュ・アルゴリズムを使って求められたハッシュ値のみがデータベースに保存されます。会員ログインの際には、入力されたパスワードからハッシュ値を求め、そのハッシュ値がデータベース上のハッシュ値と一致するかでパスワードの検証を行っています。

パスワードを忘れてしまったときに、「保存しているパスワードを送信してくれる」ようなサービスはほとんどなく、既存のパスワードを無効にし新たなパスワードを設定する流れのサービスがほとんどです。これは、

  • 元々のパスワード自体をデータベースに保存しているわけではない
  • ハッシュ化された文字列から元の文字列を算出することはできない

の特性によるものです。逆に言えば、パスワードを忘れてしまった時に、元々のパスワードを送信してくれるサービスは、パスワード漏洩時のリスクが高いサービスであると言えます。

ハッシュ値を計算するには

現在、一般的に使われているハッシュ・アルゴリズムであるSHA-256は、非常に複雑なアルゴリズムとなっており、本ブログで紹介できる内容ではありません。JavaScriptでSHA-256を計算する方法は、Qiita: SHA-256の実装などを参考にしていただければと思います。

ただし、かなり複雑になるので、自身で実装する方法は、技術に自身のある人のみにしましょう。 Google広告におけるカスタマーマッチなどでオーディエンスリストとして活用する場合は、SEM Insightのブログ記事「Google AdWordsのカスタマーマッチで使いたい、メールアドレスのハッシュ化(SHA256ソルトなし)マクロ」を活用し、Excelマクロで行うのが良いかもしれません(実際に自分が試したわけではないので、自己責任でお願いします)。

Googleタグマネージャーの場合、メールアドレスなどをデータレイヤー変数に書き出してもらうときに、SHA-256アルゴリズムでハッシュ化した値も合わせて制作会社に出力を依頼してしまうのが簡単かと思います。自分の場合は、

dataLayer.push({
  event: 'userinfo.update',
  userInfo: {
    email: 'yamada@example.com',
    email_sha256: '946b7e2df623066a75432527fc94f5ee165fab0fae407d8cbe1fb1f0c262937a'
  }
});

のような形で、メールアドレスと、メールアドレスのハッシュ値を合わせて出力してもらうようにしています。

また、サーバーサイドGTMであれば、コミュニティテンプレートの変数で「sha256 Hasher」があるのでこれを使うのも良いかと思います。

まとめ

今回の記事では、Webマーケターのかたが最近よく耳にする技術用語である「ハッシュ」についてまとめてみました。ハッシュについては今後のマーケターが必ず知っておかなければいけない知識の1つになります。ぜひ、この記事を読んで理解していただければと思います。