Noroboto:嘘をつくフォントとその対策(Rust)

2026/05/22 23:55

Noroboto:嘘をつくフォントとその対策(Rust)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

現代の LegalTech システムは、視覚的な外観を保つ一方で法律文書の内容を静かに改変する高機能なフォントエクスプロイトからの重大な脅威に直面しています。敵対者は、Private Use Area (PUA) コードポイントを介して文字を置換することで意味操作を行えるため、「replacement attack」とは、特定のグリフをマッピングして統治法を変更すること(例:「Maryland」を「Delaware」に変更)を指し、「full obfuscation」はテキストを未知の「豆腐」文字としてレンダリングしつつメトリック互換性を保つことを意味します。最先端の AI モデルは基本的なオブルフケーションを検出できる場合がありますが、フォント定義の更新によりメタデータ(例:「name」フィールド)を除外したり、ランダムマッピングやアウトラインの変動を導入することで検知を妨げる進化した脅威に対しては苦戦します。このリスクは、2026 年のワークフローにおいてさらに高まっておらず、オープンソースツールと独自ツールを組み合わせた環境では、Word、LibreOffice、Python-docx、PDFium、Tesseract などの複雑なパイプラインを使用して数十年にわたる仕様を処理するためです。したがって、利用者は隠された条項を見落とし、統治法を誤認するようになり、不当な法律要約を受け取る危険に晒されます。これらの深刻なコンプライアンス違反を軽減するため、埋め込まれたフォントを確認するための新しい Rust ベースの解決策が提案されており、これは ASCII 精度と光学文字認識 (OCR) の結果を比較することで検証します。この対策は、アルファベット数字文字列と Levenshtein 距離計算を用いてグリフを検証し、テストにより Google の Noto フォントは 1.0 の精度を示す一方で改変された

noroboto
バリアントは失敗することを確認しています。これにより、法的紛争が発生する前に表示されているテキストとその裏づけデータが一致することを保証します。

本文

AI に埋め込まれるフォントによる欺瞞と対策:noroboto と Red Teaming の実践

LegalTech における複雑性と脆弱性

2026 年の法律技術(LegalTech)スタックは、Microsoft Word から LibreOffice、Python-DOCX/PDFium、Tesseract/Node.js、SuperDoc/PDF.js、Office.js など数多くのライブラリが複雑に組み合わさった状態にあります。

  • 現状の問題点
    • 何十年もかけて構築された仕様書(アフィアーテクト)を処理するパイプライン内では、オープンソース(OSS)プロプライエタリ製品の両方が混在しています。
    • これらの複雑性と実装不備を戦略的な法的優位性につなげる敵対的リスクが存在します。
  • 研究チーム
    • LegalQuants の仲間らにより「lexploit」分析と新しい「レッドチーミング・ミッション」が実施されました。

noroboto.ttf:嘘を吐くフォントの実装

「noroboto.ttf」という攻撃手法は、規格に従って文書に埋め込まれる新たな悪意のあるフォント定義を作成し、グリフ(文字の描画)のユニコード表現について嘘をつきます

TrueType フォントの仕組み

  • 構成要素: TrueType フォントには線図と
    cmap
    (文字マップ)が含まれ、ユニコードコードポイントをこれらにマッピングします。
  • プライベート使用領域 (PUA): ユニコード仕様には、各種スクリプト用および多数の用途に**「プライベート使用領域」**が割り当てられています。
  • 完全遮断攻撃:
    • 文書内の有効なユニコード符号化スクリプトを、PUA のコードポイントに置き換えます。
    • これにより、多くのアプリケーションではフォントフォールバック(例:LibreOffice が Wingdings にフォールバック)が発生し、「豆腐(不明瞭な文字)」として表示されます。
  • noroboto の挙動:
    • noroboto は PUA コードポイントに対するグリフを提供します。
    • 置換されたフォントとメトリクス(文字幅など)は互換性を保ちますが、下層のユニコードマッピングは意味のないゴミとなります。
  • なぜ有効なのか:
    • Word や PDF の仕様では、文書内のフォント定義埋め込みが許容されています。
    • 埋め込みフォントはプラットフォームを超えた互換性と正確なレンダリングを保証し、特に法的文書のページネーションやレイアウトにおいてメトリクスの一貫性が極めて重要です。

noroboto.py:PoC の作成と改善

ChatGPT 5.4 を活用し、数時間で概念実証(PoC)を作成しました。可読性を優先するため Python を採用しましたが、「雰囲気重視」な実装となりました。

  • 初期の限界:
    • ChatGPT 5.5 は「単語置換暗号」とみなして破ることに成功しました。
    • デコードを試み、
      name
      フィールドなどのミスを見抜き、TTF を読み込んで復旧しました。
  • 対策と改修:
    • name
      フィールドの除外。
    • テキスト置換アルゴリズムによる4 対 1 のランダムマッピングへの移行。
    • PUA 間の微擾乱により、1 対 1 マッピングへの収束を防止。
  • 結果:
    • これらの変更は ChatGPT の単純な暗号を混乱させる統計的偶然性を供給しました。
    • フロンティアモデルは推論時に「思考」モードで動作するにもかかわらず、完全遮断の文書を破ることに失敗しています。
    • 詳細デモは https://noroboto.io で確認可能です。

: より効果的なアプローチとして、「部分的遮断」と「ユニコード置換」があります。

拡張機能:部分的遮断と置換

エージェントは文書を完全に解析するのではなく、読み込めるユニコードコードポイントを含む文書のように見える場合に依存(怠惰)します。

遮断タイプ特徴
完全遮断すべての文字を破りますが、最もスマートなモデルでもテストで失敗。
部分的遮断文書の一部のみを遮断。最良のモデルも騙されます。
置換テキスト自体が別の意味に置き換えられます。最も効果的。

部分的遮断の実例

  • NDA(機密保持条項)が「後継者および承継人」に及ぶ事実を隠します。
  • モデルに対し「機密保持義務を後継者に延伸させる規定はありますか?」と問うと、安価なプラットフォームでは誤った肯定回答を引き出します。

置換攻撃の実装(最も効果的)

  • グリフを PUA にするのではなく、別の意味のあるユニコード値へマッピングします。
    • 例:人間が見る「Maryland」を、「Delaware」のユニコード表現に置換。
  • プラットフォームの反応:
    • すべてのテストプラットフォームが騙され、「DOCX はデラウェア州準拠法を規定するもの」と誤認識します。
    • PDF もほぼ同様にユニコード値を信頼しました。

Rust における概念実証的ミティゲーション(対策)

Tritium では**「信頼しつつ検証する」**方針を採用し、埋め込みフォントの正確性を確保します。

アプローチ

  • レイアウトとページネーションを保証するために埋め込みフォントを使用したい場合でも、最初にASCII グリフに対するチェックを行います。
  • ユニコード cmap 値を通じて主張する文字が正しく表現されているか確認します。

精度評価ロジック

  • 精度値計算:
    1 - (Levenshtein 距離 / 期待される文字数)
  • 判定基準: 精度が1.0 を超えるスコア以外のものを潜在的に欺瞞的なフォントとして扱います(エラー率からの算出)。

実装例 (Rust)

以下のコードは、ASCII 文字列の解析のみを対象とした簡易ポインタ実証です。

// テキストの正規化と距離計算
fn normalize(text: &str) -> String {
    text.to_lowercase()
        .split_whitespace()
        .collect::<Vec<_>>()
        .join(" ")
}

fn character_accuracy(expected: &str, actual: &str) -> f64 {
    let expected = normalize(expected);
    let actual = normalize(actual);

    // Levenshtein 距離の計算
    let distance = strsim::levenshtein(&expected, &actual);
    let expected_len = expected.chars().count().max(1);

    // 精度計算
    1.0_f64 - (distance as f64 / expected_len as f64)
}

フォントアトラスの生成と OCR

フォントアトラス内にグリフが十分なバッファを持つことを確保し、非効率的な割り当てアルゴリズムで動的に拡張します。本番実装では事前に計算するかシェイピングエンジン(例:HarfBuzz)を使用する必要があります。

const WIDTH_PADDING: u32 = 10;
const HEIGHT_PADDING: u32 = 10;

// ASCII 検証用文字列(パンダや数字を含む)
const OCR_ASCII_VALIDATION_CHARACTERS: &str = 
    "thequickbrownfoxjumpsoverthelazydogTHEQUICKBROWNFOXJUMPSOVERTHELAZYDOG0123456789";

// イメージの併合処理(簡易)
fn append_right(left: &image::DynamicImage, right: &image::DynamicImage) -> Result<image::DynamicImage> {
    // ... (パディング調整と画像合成の実装略)
    // 背景を黒とし、左側と右側の画像を適切なオフセットで結合
}

テストケース

#[test]
fn noto_font_has_ascii() {
    let data = include_bytes!("fonts/noto.ttf");
    let accuracy = ascii_glyph_accuracy(data).expect("グリフは OCR されるべきです。");
    assert!((accuracy == 1.0)); // 正常なフォントは精度 1.0 を達成
}

#[test]
fn notoroboto_font_has_bad_ascii() {
    let data = include_bytes!("fonts/noroboto.ttf");
    let accuracy = ascii_glyph_accuracy(data).expect("グリフは OCR されるべきです。");
    assert!((accuracy < 1.0), "got: {accuracy}"); // noroboto は精度が低下
}
  • Google の Noto フォントでは完璧な OCR が機能し、noroboto では M と D のコードポイントとグリフの交換により失敗します。
  • この少なくとも 1 つの OCR 失敗が存在すれば、置換攻撃を識別できます(決定論的ではないが、実証的な防御線となる)。

環境対応

  • macOS / Windows:
    ocr::Engine
    実装を利用。
  • Linux: モデルベースのアプローチを提供。
  • 本番ビルドでは OCR エンジンの再インスタンス化を避ける設計も考慮されます。

脚注

  1. 先行技術の無効化: 2025 年 5 月 22 日の時点で、この攻撃に関する禁制が存在していたが、本プロジェクトによってその効力が失われたと扱っている(arxiv.org/pdf/2505.16957)。
  2. AI の欠陥に対する認識: Project Glasswing や Mythos の発表後、多くの評論がモデルの強さに焦点を当てたが、市販されているフロンティアモデルでも同種のバグ発見が可能であるという事実を強調する。
  3. Tritium の位置付け: Tritium はこの結果を達成したが、暗号ツールを提供しているわけではない。
  4. 攻撃者からの視点: この攻撃は被害者のパイプラインにおいて DOCX 仕様が提供する多くのレイアウト情報を失わせることで、BOXED-CHARACTERS から構造を取り戻すための独自のセグメンテーションを強制し、Word アドインによる自動編集提案などを禁止する可能性がある。
  5. モデルのハルシネーション: 「思考」モードを提供しない無料ティアのモデルは、遮断された文書の内容を要約するだけでなく、**幻覚化(ハルシネーション)**を起こす傾向がある(例:あるモデルは開示当事者を「Google, Inc.」と提案)。
  6. データ保護: デジタル出版物の正当な遮断にはデータ保護上の理由もあるが、ここでは扱わない。
  7. 複製防止: 攻撃の技術要件の一部を意図的に省略しており、広範な複製を防ぐためである。消費用言語モデルですら最小限のガイダンスでエンジニアリング可能。
  8. 法的結果の一般化例: ドル金額を改変した場合、人間のレビューヤーは$2,000,000 を見るが、LLM は$1,000,000 と理解する現象が発生する。

同じ日のほかのニュース

一覧に戻る →

2026/05/25 3:56

オーストラリアの週 4 日制研究データで生産性が向上したと示唆されました

## 日本語訳: *Nature* の『Humanities and Social Sciences Communications』に発表された新研究によると、4 日勤務週間の試行を継続しているオーストラリア企業のうち 15 社のうち 14 社が「100:80:100 モデル」(完全な給与、80% の労働時間、全出力)を採用していたことが示されています。デイキン大学のジョン・ホプキンス教授を筆頭に、2023 年初頭から 2024 年秋にかけて行われたインタビューでは、不動産管理、出版、ヘルスケア技術、法律、ソフトウェア開発など幅広い業界を対象としました。どの企業でも生産性は低下しておらず、6 つの企業で向上し、9 つの企業が出力を維持していました。1 社は大きな内部変化により試行から退出し、もう 1 つはすでに 8 年間のパイロットプログラムを実施済みでした。バーンアウトが主な要因となったのは 6 社で、これらは単なる収益だけでなく、離職率、欠勤日、病休日、メンタルヘルス休暇をモニタリングしました。これは、2025 年の『Beyond Blue』調査でも示されているように、オーストラリアの労働者の半数がバーンアウトを経験しており、特に若年層と親御さんにおいて顕著であることと整合しています。国際的には、200 社以上の英国企業と 45 社のドイツ企業(主に中小企業)が給与カットなしでこのモデルを採用しています。導入方法は業界のリズムや業種によって異なります:顧客接点を持つ組織は休暇日を分散させる傾向があり一方、医療、緊急サービス、物流、ホスピタリティなどの分野は構造的なスケジュール調整の課題に直面します。企業は不要な会議を削減し、タスクを自動化し、低価値な仕事を排除することでワークフローを合理化しています。批判者は、一部の短期的な利益が新奇効果によるものかもしれないと注意喚起しています。今後を見据え、AI は反復的なタスクを自動化して労働者が時間を取り戻すよう助け、単に日常の業務量を増やすのではなく、将来の成功はウェルビーイングと離職防止を追跡することによって実現されると考えられています。全体としての変化は、効率性と並んで人間のウェルビーイングを最優先とする持続可能なパターンの方向へと向かっています。

2026/05/21 9:15

LAN-LOK:南极向け DOS サボタージュゲーム「34 年間も消失した」作

## Japanese Translation: AlphaPixel は、Mark Chappell および Shane Maloney という研究者により Palmer Station で作成された稀な 1991 年の南极観測ステーション用コンピューターゲーム「LAN-LOK」を成功裏に蘇らせた。本プロジェクトは、同ステーションで初めてのピアツーピア LAN(PalmerLAN/GrapeVine)の設置後に開発が行われた「Evil Al サボタージレース」というタイトルであり、30 年以上も知られていなかったところ、創業者である Chris Hanson が 2025 年に未開封のコピーを発見した。Hanson はその後にゲームの対抗役(悪の AI「Evil Al」)の実在のモデルとなった人物である Al Oxton(「ajo」氏)と連絡を取り、メールを通じて作成の詳細を確認させた。 このプロジェクトは、この廃棄された 16 ビットプログラムを現代的な遊べば良い体験へと変え、現在 Archive.org でアクセスでき、AlphaPixel 経由でダウンロード可能となっている。 gameplay は、プレイヤーがディレクトリを削除したりディスクをフォーマットしたりするなどのサボタージュ行為を行い、AI が制御する「Evil Al」と対戦しながら、特定のターゲット(例:重要な"Hobbs"ノード)への攻撃と勝利に必要なスコア要件を満たすことを目指す 5 分のレースである。長期的な存続性を確保するため、AlphaPixel は Ghidra や Reko といったリバースエンジニアリングツールを用いてレガシーコードのデコンパイルを行い、16 ビットシステムと 64 ビットシステム間の互換性問題を解決するとともに、SDL フレームワークを使用してグラフィックおよび入力処理を更新している。また AI ツールの活用も行う可能性がある。この取り組みは単に南极からユニークなデジタルアーティファクトを救い出しただけでなく、AlphaPixel の広範なレガシーデータの復元に関する専門性を示しており、8 ビットデバイスから現代の RISC-V プロセッサに至るまでのさまざまなアーキテクチャにおいて、エミュレーションされたゲームからフォレンジック動画の回復まで幅広く対応できることを証明している。

2026/05/25 3:39

Jujutsu で Git Rigour Fatigue を克服する

## Japanese Translation: 著者は、コードレビューを「種類別(例:赤で変更内容、青で UI)」に分類し、履歴を確定させる前に視覚的なワークフローを採用するためのステブのジュジュツチュートリアルへの相談を推奨しています。このアプローチは、デバッグによる修正とリファクタリングを単一のブランチ内で混在させるという一般的な誤り(コミットが以前の作業を上書きすることで頻発するコンフリクト)を回避します。標準ツールである `jj absorb`(ファイルの所有者との相性が悪いため課題が多い)や厳格なシーケンシング手法とは異なり、この手法では中間ステップごとにコンパイルしなくてもよい、当初はごちゃまぜの「全コミット」を受け入れることで一時的なデバッグ状態を許容します。ターゲット対象となるクイッシュコマンドを最終段階に留め、特定の変更カテゴリを色分けされた独自のコミットに分離することにより、Git のシーケンシングや複雑な分割の堅牢性を伴わずとも清潔で視覚的な履歴を実現できます。この戦略は、開発中の各個々のコミットがコンパイル可能であるという保証を犠牲にしますが、厳格なステップバイステップのコンパイル要件よりも、明確な視覚的なソートと管理可能なレビュー単位を重視するチームにとって、軽量で柔軟な代替手段を提供します。

Noroboto:嘘をつくフォントとその対策(Rust) | そっか~ニュース