OpenAI Privacy Filterでネットワーク機器のIPアドレスと認証情報は隠せるか?
ネットワーク機器のコンフィグをAIに渡して、設定の説明やトラブルシューティングを手伝ってもらいたい。
ただ、顧客のIPアドレスや認証情報をそのまま送るのは避けたい。
そんなニーズもあるかと思います。
AIに「情報を送らないで」では秘匿は間に合わない
AIに情報を送りたくなければ、プロンプトで「IPアドレスとパスワードはAIに送らないで」と依頼すれば良いのでは?
そう考えたくなりますが、クラウドAIがその依頼を読める時点で、貼り付けたコンフィグも一緒に届いています。
情報を送らないためには、送信前に手元でマスキングする必要があります。
OpenAI Privacy Filterとは
OpenAI Privacy Filterは、文章に含まれる個人識別情報(PII)や認証情報を検出し、マスキングするためのモデルです。
※ローカル環境で動作します
氏名、住所、メールアドレス、電話番号などに加え、パスワードやAPIキーも検出対象に含まれます。
正規表現が文字列の形式に基づいて検出するのに対し、Privacy Filterは周囲の文脈も使って判断します。
入力文中の対象箇所を分類し、その結果に基づいて などのラベルに置き換えます。
モデルの重みが公開されており、手元の環境で実行できます。
そのため、元の機密情報をクラウドへ送らずにマスキングする前処理として利用できます。

図1:OpenAI Privacy Filter動作イメージ
スポンサード
動作検証
今回は手元のPC上のDockerで動かし、日本語の文章とネットワーク機器のコンフィグで検出結果を確認しました。
まず、人物名を含む日本語の文章を入力します。
以下は今回使用したコマンドです。
というDockerイメージを利用できる環境での参考例です。
「山田太郎さんの趣味は釣りです。株式会社佐藤山田商事に勤務しています。」という情報から、個人情報をマスキングしてもらいます。
出力は次のようになりました。
人物名に当たる部分が に置換されています。
一方、会社名の一部もマスキングされました。
次に、ネットワーク機器のコンフィグで確認します。
今回の検証イメージ
Cisco IOS XE形式のコンフィグを入力し、マスキング後に何が残るかを確認しました。

図2:検証イメージ
入力には、LANとWANのインターフェース、NAT、デフォルトルート、ローカルユーザーなどの設定が含まれています。
入力したコンフィグはこちら(クリックしてください)
!
version 17.3
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname Router01
!
boot-start-marker
boot-end-marker
!
!
no ip domain lookup
ip domain name example.com
!
!
login on-success log
!
enable secret 9 $9$mKx7.kL3r8.1eE$O.J1WvP7Q8eK.4oI9x2U7y6Z1aB3cD5eF7gH9iJ1kL
!
username admin privilege 15 secret 9 $9$aB3cD5eF7gH9iJ1$Z9y8x7w6v5u4t3s2r1q0pOnMlKjIhGfEdCbA
!
!
!
!
!
crypto pki trustpoint TP-self-signed-0000000000
enrollment selfsigned
subject-name cn=IOS-Self-Signed-Certificate-0000000000
revocation-check none
rsakeypair Router01.example.com
!
!
!
!
!
!
!
interface GigabitEthernet0/0/0
description LAN-Internal
ip address 192.168.1.1 255.255.255.0
ip nat inside
negotiation auto
!
interface GigabitEthernet0/0/1
description WAN-External
ip address 203.0.113.2 255.255.255.248
ip nat outside
negotiation auto
!
ip nat inside source list NAT_ACL interface GigabitEthernet0/0/1 overload
ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 203.0.113.1
!
ip access-list standard NAT_ACL
10 permit 192.168.1.0 0.0.0.255
!
!
clock timezone JST 9 0
!
!
ntp server ntp.nict.jp
!
control-plane
!
!
line con 0
exec-timeout 10 0
logging synchronous
login local
stopbits 1
line aux 0
stopbits 1
line vty 0 4
exec-timeout 10 0
logging synchronous
login local
transport input ssh
!
!
end
※AIで生成したサンプルコンフィグなので、コンフィグ自体の妥当性は確認していません
IPアドレスは一部だけマスキングされた
出力されたコンフィグはこちら(クリックしてください)
!
version 17.3
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname Router01
!
boot-start-marker
boot-end-marker
!
!
no ip domain lookup
ip domain name example.com
!
!
login on-success log
!
enable secret 9 $9$mKx7.kL3r8.1eE$O.J1WvP7Q8eK.4oI9x2U7y6Z1aB3cD5eF7gH9iJ1kL
!
username admin privilege 15 secret 9 $9$aB3cD5eF7gH9iJ1$Z9y8x7w6v5u4t3s2r1q0pOnMlKjIhGfEdCbA
!
!
!
!
!
crypto pki trustpoint TP-self-signed-0000000000
enrollment selfsigned
subject-name cn=IOS-Self-Signed-Certificate-0000000000
revocation-check none
rsakeypair Router01.example.com
!
!
!
!
!
!
!
interface GigabitEthernet0/0/0
description LAN-Internal
ip address 192.168.1.1 255.255.255.0
ip nat inside
negotiation auto
!
interface GigabitEthernet0/0/1
description WAN-External
ip address 203.0.113.2 255.255.255.248
ip nat outside
negotiation auto
!
ip nat inside source list NAT_ACL interface GigabitEthernet0/0/1 overload
ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 <PRIVATE_URL>
!
ip access-list standard NAT_ACL
10 permit 192.168.1.0 0.0.0.255
!
!
clock timezone JST 9 0
!
!
ntp server ntp.nict.jp
!
control-plane
!
!
line con 0
exec-timeout 10 0
logging synchronous
login local
stopbits 1
line aux 0
stopbits 1
line vty 0 4
exec-timeout 10 0
logging synchronous
login local
transport input ssh
!
!
end
デフォルトルートのネクストホップは、次のように置換されました。
しかし、インターフェースとACLのアドレスは残りました。
| 設定箇所 | IPアドレス | 結果 |
|---|---|---|
| LANインターフェース | 残った | |
| WANインターフェース | 残った | |
| デフォルトルートのネクストホップ | マスキングされた | |
| ACL | 残った |
IPアドレスを検出できないわけではありませんが、今回のコンフィグでは、隠したいアドレスをすべて除去できませんでした。
パスワードのハッシュ値も残った
次の2行に含まれる認証情報も、置換されずに出力されました。
公式の対象でも、検出は保証されない
OpenAIの公式資料には、IPアドレスやパスワードも検出対象として記載されています。
ただし、すべてを確実に見つけられるわけではありません。
今回の検証でも、マスキングされたIPアドレスがある一方で、そのまま残ったIPアドレスがありました。
パスワードのハッシュ値も残りましたが、その理由は今回の結果だけではわかりません。
コンフィグには正規表現や構文に沿った処理を
今回の検証では、IPアドレスは一部だけマスキングされ、パスワードのハッシュ値は残りました。
送信前のマスキングをPrivacy Filter単独に任せるには、不十分な結果でした。
この用途では、正規表現や機器の構文に基づく処理を主軸にするのがよさそうです。
IPアドレスを抽出して置換し、 や の値は、形式を問わず除去します。
クラウドAIに送信する前に、IPアドレスや認証情報など、外部に出せない情報をマスキングまたは削除。
送信できる情報の範囲は社内ルールによって異なるため、そのルールに沿って加工し、機密情報が残っていないか確認してから利用しましょう。
<その他記事>