
GitHubは、コードの周辺情報を読む分類モデルを秘密情報の検出に導入しました。従来のLLMを使う処理と比べ、リポジトリ所有者単位で重み付けした検出結果の受け入れ率が11.5%上昇し、コミット後スキャンの実行時間の中央値は86%短縮しました。この高速化を受け、コミット後だけでなく、変更をプッシュする前の検査にも汎用的な秘密情報の検出を広げています。
正規表現で候補を拾い、分類モデルで絞り込む
新しい処理は、候補の抽出と判定を分けた二段階構成です。最初に正規表現で秘密情報らしい文字列を広く拾い、その後、ModernBERTを微調整した分類モデルが候補と周辺情報を見て、本物の認証情報である可能性を判定します。
周辺情報には、ファイルパス、変数名、秘密情報の種類、前後のコードや文章が含まれます。文書中のプレースホルダー、テスト用の値、チェックサムなど、形式は似ていても使える認証情報ではない候補を、文脈に応じて抑えます。
正規表現は候補を素早く見つける段階に残し、分類モデルは本物らしさの判別を担います。GitHubは、検出漏れを避けるため候補を広く集めてから、誤検知になりやすい文字列を絞る設計を採りました。
文脈を読むModernBERTを採用
ModernBERTは、文章を生成するモデルではなく、入力を読み取って分類や検索などに使うエンコーダー型モデルです。BERTを現代化したモデルで、位置情報の扱いに回転位置埋め込みを採用し、最大8192トークンの系列を扱える設計です。
論文では、ModernBERTを2兆トークンで学習し、コードを含む複数領域の分類や検索を評価しています。8192トークンの系列では、従来モデルよりほぼ2倍速く処理できたと報告しています。Hugging FaceのTransformersでは、パディングによる計算の無駄を減らす処理や、局所・全体の注意機構を交互に使う構成が採用されています。
秘密情報の検出では、候補文字列だけでなく短いコード周辺の文脈も判定材料になります。ModernBERTは分類向けのエンコーダーであり、GitHubは検出用途に合わせてこのモデルを微調整しています。GitHubのモデルはONNX形式に変換し、8ビット量子化して推論に使います。
学習データには誤検知しやすい例も含める
学習には、GitHubリポジトリ由来の例、正規表現で集めた候補、人手で注釈した例、合成データを組み合わせています。合成データでは、文書中の値、テスト用の値、公開鍵、チェックサム、よく似た誤判定候補などを扱います。
モデルには、候補の値、ファイルパス、秘密情報の種類、一定範囲の周辺文脈を入力します。学習データを分割する際には、同じリポジトリや候補値に由来する例と近似データが、学習用と評価用の両方に入らないようにまとめました。
判定のしきい値はオフライン評価で選び、本番に近いトラフィックで挙動を確認してから展開しています。学習と評価では、正規表現だけでは区別しにくい実際の秘密情報、誤検知、紛らわしい候補を重視しました。
評価では精度・再現率と運用指標を比較
同じ公開トラフィックを使ったオフライン評価で、新しい処理は従来のLLMベースの処理より、コミット後スキャンの適合率が13%、再現率が19%高くなりました。適合率は検出結果のうち正しいものの割合、再現率は実際の秘密情報をどれだけ拾えたかを表す指標です。
顧客を対象にしたA/B評価では、リポジトリ所有者ごとの受け入れ率を重み付けした値が11.5%上昇しました。受け入れ率は、検出されたアラートが顧客に受け入れられた割合です。リポジトリ所有者単位の重み付けは、大量のアラートをまとめて解決する顧客が単純平均に与える影響を抑えるために使われました。
GitHubは、コミット後スキャンの実行時間の中央値が86%短縮し、従来のLLMベースの処理に比べて提供コストが98%超低下したと報告しています。この高速化によって、プッシュ前に結果を返す保護機能にも汎用的な検出を広げました。開発者は変更をプッシュする前に候補を検査できます。










