AIスクリーン読み取りに対する以前の防御はピクセル層で動作していました — ランダムノイズ、周波数領域の摂動、サブピクセルジッター、マイクロブラー、クロマシフト。これらは依然として古典的なOCRエンジンに対して有効であり、層状防御の一部として残っています。しかしモダンなビジョン言語モデル — GPT-4V、Claude Vision、Gemini、およびその後継 — は部分的な視覚的証拠から単語を再構築するトークナイザー認識パッチエンコーダーを持っており、着実に向上しています。ピクセルがノイズだらけでも、モデルは依然として根底にあるテキストを復元します。
次の攻撃サーフェスは一層上にあります。DOM。保護されたページをレンダリングするヘッドレスブラウザの内部では、スクリーンに描かれる実際の文字データを私たちが所有しています。第3段落の47番目の位置の文字はもはやオリジナルではないと決定できます。同じアルファベット内の視覚的に類似しているが異なる文字です。そのページのスクリーンショットを見るOCRまたはVLMは置換された文字を見て、それを真実として報告します。モデルは置換されたことを知らず、比較するものもありません。
難しい部分は人間ユーザーの読書を壊さずにこれを行うことです。リビールメカニズム — カーソル周辺の小さな領域で置換されたテキストをオリジナルに戻す — がその答えです。人々は一瞥して読みます。目は1つのフレーズに固定し、脳のパターン認識が周辺視野とコンテキストから残りを補完します。カーソルリビールはユーザーが実際に見ている場所に合わせられています。ページの残りは置換されたままでいられます。ユーザーはいずれにせよ一文字ずつ読んでいないからです。同じスクリーンショットを見るAIモデルはそのようなカーソルも、そのようなリビールも持ちません — すべてを置換されたテキストとして読みます。
スクリプトはZeroLeakのヘッドレスブラウザによってすべての保護されたページに注入されます。起動時にスクリプトはDOMを走査し、同じラテンアルファベットから文字の一部に視覚的に類似した置換を選んでページに書き込みます。カーソルの位置がリビールゾーンを駆動します — ユーザーが見ている場所ならどこでもオリジナルが表示されます。リビールの外はすべて置換されたままです。
ページ上のある位置の文字は視覚的に類似しているが異なる文字になります — aはeに、bはpに、mはwに、nはuになります。この交換はラテンアルファベット内で視覚的なファミリーを共有する文字間で行われ、Unicodeの見た目が似た文字の間ではありません。この区別が重要な理由:OCRとAIビジョンパイプラインはUnicode同形文字(キリル文字のaをラテン文字のaに)を正規のラテン文字に正規化します。同一スクリプトの交換は正規化するものを何も残しません — モデルは置換された文字を実際の文字として読み取ります。
ユーザーがカーソルを動かすと、その周辺の領域(デフォルトは円形、水平バンドとして設定可能)が置換された文字をオリジナルに戻します。ユーザーは見ている場所を見ます。脳の自然なパターン認識が周辺視野から残りを処理します。リビールの外では、ページは置換されたままです — これがスクリーンショットを見るAIモデルが見るものです。
ページが読み込まれると、各置換された文字はページの生存期間中安定したままの特定の置換を受け取ります。ユーザーの視野にはフリッカーなし、時間的回転なし、アニメーションなし — 暗号はカーソルリビールの後ろに静かに座っています。以前のデザインは数フレームごとに暗号を回転させました。ユーザー疲労テストにより測定可能な読書不快感が生じることが示され、最終的なデザインは静的のままになりました。
テキスト暗号はヘッドレスブラウザのDOM内部で動作します — レンダリングされたピクセルではなく、文字データに直接。AIビジョンモデルに対するピクセル層の防御は引き続き下で動作します。テキスト暗号はピクセル回復技術では対処できない直交する攻撃サーフェスを追加します。ピクセル層を破った攻撃者は依然として置換されたテキストを正しく読む必要があります。何らかの形でオリジナルの文字を回復した攻撃者は依然としてピクセル層を打ち負かす必要があります。
以下の各動作は経験的疲労リビジョン後の製品設計の一部です。ライブ実装はこれと完全に一致しています。設定はオペレーターコンソールを通じて保護されたサービスごとに行われます。
置換はラテンアルファベット内に留まります。置換テーブルは視覚的なファミリーでキュレーションされています:丸いボウル(a、e、o、c)、鏡像ボウル(b、p、d、q)、細い縦線(i、l、j、1)、アーチ(m、n、u、h、w)、ディセンダー(g、y、j、q)。テーブルの各文字は2〜4個の視覚的な隣人を持ちます。置換はその1つを選びます。レイアウトのリフローが起きないよう幅のマッチングが優先されます。
デフォルトの形状は設定可能な半径(デフォルト200 px)の円です。代替バンド形状はカーソルの高さで水平ストリップをカバーします — 目の動きが主に水平な長い行のコンテンツを読む場合に便利です。形状は他のZeroLeakカーソルベースのエフェクトと共有されるため、オペレーターは一度設定するだけです。
スクリプトがテキストノードを最初に見ると、ノードごとのマップにオリジナル値を保存し、置換された値をDOMに書き込みます。後続の更新は同じ置換を使用します — フレームごとの回転はありません。ユーザーは静止したページを認識します。暗号はカーソルリビールの後ろに見えません。
置換スクリプトはZeroLeakエンジンによってヘッドレスChromium内のすべてのナビゲートされたドキュメントに注入されます。保護されたWebアプリケーションは変更されません。暗号はレンダリングされたドキュメントとユーザーの表示層の間のページサイドヘルパーとして動作します。保護されたアプリケーションのコードとの調整は不要です。
ユーザーがinput、textarea、またはcontentEditable領域に入力したテキストは置換から除外されます。保護されたアプリケーションはユーザーが入力したとおりのクリーンな入力を受け取ります。検索ボックス、メッセージ作成、フォーム送信 — すべて影響を受けません。
IntersectionObserverはどのテキストノードが実際に可視かを追跡します。画面外のテキストは置換されません(いずれにせよユーザーには見えません)。ユーザーが非表示のセクションをスクロールして表示すると、置換がちょうど間に合って適用されます。これにより実行コストはページ全体のサイズではなく、画面上にあるものに比例します。
同一スクリプトの視覚的置換がこの技術の核心です。以下のテーブルは実際の製品マッピングのサンプルです。完全なテーブルはすべての小文字、大文字、選択された数字をカバーします。
これら4つの文字はすべて閉じたボウル形状を共有します。一方を他方に置換すると読書距離でシルエットが保持されます。「data」のような単語は置換された形で「doto」になるかもしれません — カーソルリビールを通じて一瞥した人間は即座に「data」と読み取りますが、OCRまたはAIモデルが置換された形を読むと「doto」を返します。
これら4つは互いの視覚的な鏡像です。一方を他方に置換すると縦棒+ボウルのパターンが保持されます。「database」という単語は暗号形式で「patabose」になるかもしれません — 脳のパターン認識がオリジナルを回復するのに十分なほど視覚的に近いですが、AIモデルが読むと間違った単語を返すほど意味的に無関係です。
これら5つはアーチ/逆アーチ/繰り返しアーチのパターンを共有します。このファミリー内での置換はテキストの全体的なリズムを保持します。「human」は「wuwon」になるかもしれません — カーソルの下で一瞥して読めますが、置換されたテキストを読むAIには認識できません。
以前の提案はUnicodeの混同文字(ラテン文字aのためのキリル文字а、ラテン文字oのためのギリシャ文字ο)を使用していました。これらは拒否されました。OCRパイプラインとAIビジョンモデルは言語モデルステージでこれらを正規のラテン文字に正規化するからです。ラテン-キリル混在テキストにロシア語言語パックを持つTesseractはクリーンなラテン出力を返します。言語モデルの第2パスがキリル文字の同形文字をラテン文字の等価物に投影するからです。同一スクリプトの置換は正規化するものを何も残しません。
HTML5 canvasまたはSVG内でレンダリングされたテキストはDOMテキストノードセットの一部ではありません。暗号はそれに触れません。同様に、ユーザーがinputやtextareaに入力したテキストもクリーンのままです。これらのカバレッジのギャップは意図的です。canvasとSVGコンテンツは並行してピクセル層の防御によって処理され、フォーム入力は保護されたアプリケーションが機能するためにクリーンのままである必要があります。
スマートフォンやワークステーションの傍らでパーソナルAIアシスタントを持つユーザー — 誰もがスクリーンショットをGPT-4VまたはClaude Visionに貼り付けてサマリーを求めることができます。テキスト暗号が有効な場合、AIのサマリーは置換されたテキストに基づいて構築されます — 検査すると元の画面にあったものとは異なる、もっともらしい出力を返します。
画面で読まれるが、AIツールを通じて持ち出されることを意図しない文書。スクリーンショットを撮ってAIに分析させると、ゆがんだ数字と変更された名前が返されます — AIは実際の文書と一致しないコンテンツを自信を持って報告します。
患者記録への閲覧のみのアクセス権を持つ医療スタッフは、データをサマリーしたりクエリしたりするために外部のAIを有意義に使用することができません — AIは置換されたテキストを見ます。臨床的な洞察は保護された環境内に留まります。AIの取り込みパスは別の文書を返します。
アナリストが閲覧する機密コンテンツ。保護された環境の外から参照されるAIツールは、オリジナルの機密素材ではなく置換されたテキストを読み取ります。開示の境界はスクリーンショットパスと同様にAI取り込みパスでも維持されます。
ページを読み込み、通常の読書が見えるようにカーソルをテキストの上で動かし、スクリーンショットを撮り、そのスクリーンショットをTesseract、GPT-4V、Claude Visionに送信します — そして各々が返す非常に異なるテキストをお見せします。