IP ハッシュ化とは
概要
IP ハッシュ化は、ユーザーの IP アドレスを SHA-256 などのハッシュ関数に通し、元の IP アドレスを復元できない固定長の文字列に変換する技術である。変換後のハッシュ値は同一の IP アドレスからは常に同じ値になるため、「同一人物かどうか」の判定には使えるが、「誰なのか」は特定できない。匿名性を保ちつつ不正利用を検出するという、相反する要件を両立させる手段として広く使われている。
ハッシュ関数の選択と実装上の注意
IP アドレスの空間は IPv4 で約 43 億通り、IPv6 でも実際に使われるプレフィックスは限られている。そのため、単純にハッシュ化しただけではレインボーテーブル攻撃 (事前に全 IP のハッシュ値を計算しておく手法) で元の IP を逆引きされるリスクがある。
この対策として、ハッシュ化の際にソルト (秘密の固定文字列) を付加する。ソルトを知らない第三者はレインボーテーブルを構築できないため、ハッシュ値から元の IP を特定することが事実上不可能になる。ソルトはサーバー側の環境変数や秘密管理サービスに保管し、ソースコードには含めない。
匿名質問サービスでの活用
匿名質問サービスでは、IP ハッシュ化を 2 つの目的で使用している。第一に、同一 IP からの連続投稿を検出するレートリミットの識別子として使う。ハッシュ値をキーにしてカウンターを管理すれば、生の IP アドレスを保持せずに投稿頻度を制限できる。
第二に、質問箱のオーナーに表示する「投稿者 ID」の生成に使う。IP ハッシュの先頭数文字を取り出して短い ID にすることで、同一人物からの複数の質問を紐づけて把握できる。ただし、この ID はあくまで目安であり、VPN やモバイル回線の IP 変動により同一人物でも異なる ID になる場合がある。
生 IP の暗号化保存との使い分け
IP ハッシュ化は不可逆であるため、法的手続きに基づく開示請求に対応できない。そのため、多くのサービスでは IP ハッシュ化と並行して、生の IP アドレスを AES-256 などの対称鍵暗号で暗号化して保存している。通常運用ではハッシュ値のみを参照し、開示請求があった場合にのみ暗号化された IP を復号する。
この二重保存方式は、プライバシー保護と法的義務の両立を実現する。ハッシュ値は日常的な不正検出に、暗号化 IP は法的対応にと、用途を明確に分離することで、不必要な個人情報へのアクセスを最小化できる。
認証技術やセキュリティの基礎を学びたい方は、Web セキュリティの関連書籍も参考になります。