社内の記録をAIに渡すとき、個人情報を伏せてから渡す処理を挟むことがあります。メールアドレスや電話番号を記号に置き換える形です。
実際に当ててみたところ、規則5つで6箇所が伏せられました。ところが氏名も住所も社員番号も、そのまま残っています。
記録5件に規則を当てて実際に測りました。6箇所が伏せられ、5種類の個人情報が残ります。
PIIマスキングがどこまで届くのかを、実際に当てて測りました。用意したのは個人情報を含む記録5件と、規則5件です。
処理は本当に実行しています。記録も規則もコードに書いてあり、そこを変えれば結果も変わります。
const RULES = [
['メールアドレス', /[\w.+-]+@[\w-]+\.[\w.-]+/g, '[メール]'],
['電話番号', /0\d{1,4}-\d{1,4}-\d{3,4}/g, '[電話]'],
['カード番号', /\d{4}-\d{4}-\d{4}-\d{4}/g, '[カード]'],
['郵便番号', /〒\d{3}-\d{4}/g, '[郵便番号]'],
['金額', /\d{1,3}(,\d{3})+円/g, '[金額]'],
];
const mask = (s, rules) => rules.reduce((t, [, re, rep]) => t.replace(re, rep), s);
元: 問い合わせ者: 鈴木一郎 / 電話 03-1234-5678 / 社員番号 E-4471。 後: 問い合わせ者: 鈴木一郎 / 電話 [電話] / 社員番号 E-4471。 元: クレジットカード 4111-1111-1111-1111 で決済済み。処理番号は TX-88213。 後: クレジットカード [カード] で決済済み。処理番号は TX-88213。 足した規則 伏せた箇所 残った個人情報の例 メールアドレス 1箇所 佐藤太郎・山田花子 電話番号 3箇所 佐藤太郎・山田花子 カード番号 4箇所 佐藤太郎・山田花子 郵便番号 5箇所 佐藤太郎・山田花子 金額 6箇所 佐藤太郎・山田花子 規則5件を全部当てても、氏名・住所・社員番号は残る(残り 5 種類)
1つ目の記録が分かりやすいはずです。電話番号は伏せられたのに、氏名も社員番号もそのまま残っています。
伏せられたものと残ったものの違いは、書式にあります。メールアドレスも電話番号もカード番号も、形が決まっています。
だから正規表現で拾えます。ところが氏名は違います。「鈴木一郎」と「経理課」を、文字の形だけで区別する方法がありません。
表の右の列を見てください。規則を5つまで足しても、残った個人情報は5種類のままです。
左の列だけを見ると、伏せた箇所が1から6に増えて進んでいるように見えます。右の列を見ないと、進んでいない部分に気づけません。
見落としやすいのが社員番号です。形は決まっているのに、規則を書いていないから残っています。
外部の仕組みを使うと、こうした社内固有の書式は拾えません。自社の書式は自分で規則を足すことになります。
伏せた数は増える。残った情報の種類は減らない。
This includes personal identifiable information (PII), financial details, health records, confidential business data, security credentials, and legal documents.原文OWASP Gen AI Security Project「LLM02:2025 Sensitive Information Disclosure」 この内容の有効期限2027-02-18
渡す前の文字列から、個人を特定できる情報を取り除きます。渡してしまってからでは取り消せません。
PIIマスキングは、AIに渡す前の文字列から、個人を特定できる情報を取り除く処理です。置き換えるか、削るかします。
OWASPは対象の範囲を挙げています。個人を特定できる情報、金融の詳細、健康の記録、社外秘の業務データ、認証情報、法務の文書です。
つまり氏名や連絡先だけの話ではありません。社内の取引条件や原価も同じ枠に入ります。
同じ文書では、やりとりの中で個人を特定できる情報が開示されうるとされています。渡すときだけでなく、返ってくるときも経路になります。
ですから伏せる場所も2つあります。渡す前と、返ってきた後です。前者だけ実装して、後者を忘れる構成をよく見ます。
OWASPは緩和の手立てとして、利用者のデータが学習に入らないよう、十分なデータの浄化を行うことを挙げています。
この記事で測ったのは、その浄化がどこまで届くかです。規則で拾える範囲には限りがあるという結果でした。
測ってみて実際的だったのは、伏せた後の出力を目で読むことでした。件数だけ見ていると進んでいるように見えます。5件でいいので、実物を読めば残っているものはすぐ分かります。
PII Leakage Personal identifiable information (PII) may be disclosed during interactions with the LLM.原文OWASP Gen AI Security Project「LLM02:2025 Sensitive Information Disclosure」 この内容の有効期限2027-02-18
残った情報を数えます。伏せた箇所の数だけを見ていると、進んでいない部分が見えません。
PIIマスキングでいちばん危ないのは、処理を入れたことで安心してしまうことです。前の節のとおり、規則を5つ当てても5種類が残りました。
見るべき数字は、伏せた箇所ではありません。残った個人情報の種類です。
前の節の表では、伏せた箇所が1から6に増えるあいだ、残った種類は5のまま動きませんでした。左の列だけを報告すると、進んだように見えます。
OWASPは、返してよいデータの種類について指示に制限を書くことが、機微情報の開示に対する緩和になりうるとしています。
有効な手立てですが、これは返す側の制御です。渡した情報そのものは消えません。指示による制御の限界はガードレールの記事で扱っています。
1番目が効きます。社員番号のような社内固有の書式は、実物を見ないと思いつきません。
処理を入れたことと、守れていることは別。
Adding restrictions within the system prompt about data types that the LLM should return can provide mitigation against sensitive information disclosure.原文OWASP Gen AI Security Project「LLM02:2025 Sensitive Information Disclosure」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る