Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
lm-fingerprint — トークナイザーと挙動に基づいて大規模言語モデルをフィンガープリンティングするユニークなツール。 | Kitploit
ツール/GitLabGitLab/wattocyber/lm-fingerprint
偵察情報収集ペネトレーションテストレッドチーミングAPIセキュリティAIセキュリティ
GitLabwattocyber/lm-fingerprint

lm-fingerprint

トークナイザーと挙動に基づいて大規模言語モデルをフィンガープリンティングするユニークなツール。

リポジトリを見る
2時間33分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

LM-Fingerprint

LM-Fingerprint

OpenAI互換のチャットエンドポイントの背後にあるサービングスタックをフィンガープリントします。

トークナイザーのカウント方法、隠れたテンプレートオフセット、検証プローズ、JSON/SSEの形状、ロールの受け入れ、明示される制限、ゲートウェイヘッダーを記録します。重みを読み込まず、APIキーを保存せず、モデルに自分が誰かを尋ねることもありません。

インポートlm_fingerprint
CLIlm-fingerprint
概要/chat/completions に対するバージョン管理されたインフラストラクチャプローブ。オフライン合成ライブラリ。ローカルHugging Faceトークナイザーの検証(重みなし)。
そうではないもの勾配攻撃ではありません。ジェイルブレイクではありません。エンコードマップの同一性特定(tokprint)ではありません。「このポートでどのバイナリが動いているか」を特定するもの(Julius)でもありません。

python license repro

許可された用途のみ:自分が所有するエンドポイント、管理下にあるラボ、スコープ内のバグ報奨金、書面によるペネトレーションテスト。SECURITY.md を参照してください。 --api-key-env は環境変数を指定します。キーがログに記録されることはありません。

目次

  1. 問題
  2. フィンガープリントとは
  3. アーキテクチャ
  4. 脅威モデル
  5. インストールと再現性ゲート
  6. 最初の実行
  7. 稼働中のエンドポイントに対して
  8. ローカルHugging Faceトークナイザー
  9. CLI
  10. ライブラリ
  11. 結果JSONの読み方
  12. 実測値とModelPrint
  13. 誠実性のルール
  14. 関連ツール
  15. ライセンス

問題

OpenAI互換チャットは一般的なワイヤプロトコルです。vLLM、SGLang、ラボのゲートウェイ、リセラーはすべて /chat/completions を話すことができます。model フィールドは単なるラベルです。ホストはバックエンドを差し替えたり、トークナイザーをラップしたり、前面にルーターを配置したりできます。パーソナリティプローブは、システムプロンプトが変わると結果も変わります。

変わらずに残るのは配管(plumbing)です:サーバーがトークンをどう数えるか、隠れたテンプレートトークンをいくつ追加するか、バリデータが書いたプローズ、SSEの方言、受け入れるロール、max_tokens が非現実的な値のときに返す数値、Server / プロバイダーヘッダー。

このツールが答えるのは次の問いです:このチャット経路を処理しているスタックは何か? どのチェックポイントかでも、どのプロセスがポートにバインドされているかでも、誰が補完を書いたかでもありません。

ModelPrint はブラウザ上で9つのプローブを使って同じ問いを投げかけました。このパッケージはそのCLI版およびライブラリ版です:バージョン管理されたプローブ、登録可能なライブラリ、ペアワイズ証拠、ドリフト、そしてホスト型Inference APIを一切呼び出さないローカルトークナイザーパスを備えています。

フィンガープリントとは

フィンガープリントは、プローブの value を記録したバージョン管理されたJSONレコードです。各プローブは、同じスタックに対して2回実行した場合に同じ値を返さなければなりません。タイムスタンプ、リクエストID、レイテンシ、キーは除去されます。

トークナイザーのカウントは、ModelPrint 1.0.0のテキスト(MIT、unclecode/modelprint)をバイト単位で正確に再利用し、隠れたテンプレートが相殺されるように1文字の "a" ベースラインを差し引いています。この4つの数値はエンコードマップ (T) の射影です。カウントが等しくても (T_1 \equiv T_2) を意味するわけではありません。GPT-2とOPTはこれらのカウントで衝突しますが、rustパイプラインハッシュでは衝突しません。

hf_identity(ローカルHFパスのみ)は、そのパイプラインコミットメントとチャットテンプレートハッシュのSHA-256です。同じ (T) とテンプレートがあれば一致します(tiny-gpt2 / gpt2)。これはファミリー+テンプレートであり、チェックポイントではありません。

アーキテクチャ

レイアウト:

root@kitploit:~
src/lm_fingerprint/
  cli.py         argparse. --api-key-env only. No --api-key.
  client.py      HttpTransport, InProcessTransport, redact_secrets
  probes.py      23 ProbeSpec rows (tokenizer / errors / shape / roles / limits / proxy)
  engine.py      run suite → Fingerprint
  schema.py      schema_version=1, probe_suite_version=lm-fingerprint-probes-v1
  similarity.py  weighted exact-match, coverage, confidence, library rank, drift
  library.py     enroll / match. Packaged rows are synthetic fixtures
  synthetic.py   in-process stacks for tests and the shipped library
  hf.py          local AutoTokenizer + named validation profile. No weights
  localmap.py    encode-pipeline-v2 commitment (rust tokenizer.json)
  proof.py       measured ModelPrint 9-probe identity
  report.py      text reports
  data/library.json

同じプローブスイートへの2つの経路:

root@kitploit:~
live endpoint                         local Hub tokenizer (optional [hf])
     |                                         |
 HttpTransport.chat                      HfChatTransport
 POST /chat/completions                  encode / chat_template for counts
     |                                   synthetic profile for errors/shape
     +------------------+----------------------+
                        |
                   engine.run_probes
                        |
              Fingerprint (JSON, keyless)
                        |
          compare | match | drift | enroll

プローブの作成方法:docs/PROBES.md。モジュールマップ:docs/ARCHITECTURE.md。

脅威モデル

一致はインフラストラクチャの共有を意味します。1つのラボが1つのスタック上で2つのチェックポイントを提供できます。ルーターは独自のエラーラッパーで応答できます。カウントの一致は (T) の同一性ではありません。

インストールと再現性ゲート

Python 3.10以上。コアランタイムは標準ライブラリのみです。

root@kitploit:~
git clone https://gitlab.com/WattoCyber/lm-fingerprint.git
cd lm-fingerprint
pip install -e ".[dev]"
PYTHONPATH=src python3 scripts/repro.py

REPRO_OK が出力されるはずです。このゲートはオフラインです:GPUも本番APIも使用しません。ローカルHFテストは、トークナイザーがキャッシュされていない場合はスキップされます。

root@kitploit:~
pip install -e ".[hf]"    # transformers, for fingerprint-hf / verify-hf

最初の実行

root@kitploit:~
lm-fingerprint list-probes
lm-fingerprint list

list は同梱のスタック(openai-chat-strict、glm-compat、router-openai、permissive-compat)を表示します。これらはフィクスチャであり、スクレイピングしたプロバイダーではありません。ネットワークなしでそのうち2つを比較できます:

root@kitploit:~
from lm_fingerprint.client import InProcessTransport
from lm_fingerprint.engine import fingerprint_endpoint
from lm_fingerprint.similarity import compare_fingerprints
from lm_fingerprint.synthetic import SYNTHETIC_STACKS, handler_for

def fp(stack_id):
    t = InProcessTransport(handler_for(stack_id), headers=SYNTHETIC_STACKS[stack_id].headers)
    return fingerprint_endpoint(t, model=f"synthetic/{stack_id}", base_url=f"inprocess://{stack_id}")

print(compare_fingerprints(fp("openai-chat-strict"), fp("router-openai"))["note"])

同じワードトークナイザーでも、エラーとヘッダーは異なります。スコアは約 0.58 になります。ModelPrintの4つのカウントは一致しますが、このツールはそれを共有スタックとは呼びません。

稼働中のエンドポイントに対して

root@kitploit:~
lm-fingerprint fingerprint \
  --base-url https://your-lab.example/v1 \
  --model the-label \
  --api-key-env OPENAI_API_KEY \
  --out lab.json

lm-fingerprint match --fingerprint lab.json
lm-fingerprint enroll --fingerprint lab.json --stack-id my-lab --library my-lib.json

キーをコマンドラインで渡さないでください。公開ライブラリを埋めるために本番APIをスクレイピングしないでください。

ローカルHugging Faceトークナイザー

root@kitploit:~
lm-fingerprint fingerprint-hf --model sshleifer/tiny-gpt2 --local-files-only
lm-fingerprint verify-hf --local-files-only

カウントは、テンプレートが存在する場合は apply_chat_template から、それ以外の場合は encode(..., add_special_tokens=False) から取得されます。エラー分類は名前付き合成プロファイル(デフォルトは openai-chat-strict)から取得されるため、実行はオフラインのままです。リモートハンドル(https://、api://、…)は拒否されます。

CLI

root@kitploit:~
lm-fingerprint list-probes
lm-fingerprint list [--library PATH]
lm-fingerprint fingerprint --base-url URL --model MODEL --api-key-env VAR [--out PATH]
lm-fingerprint fingerprint-hf --model HANDLE [--profile NAME] [--local-files-only]
lm-fingerprint verify-hf [--models a,b,c] [--local-files-only]
lm-fingerprint prove [--local-files-only]
lm-fingerprint compare --a a.json --b b.json
lm-fingerprint match --fingerprint a.json [--library PATH]
lm-fingerprint drift --baseline old.json --current new.json
lm-fingerprint enroll --fingerprint a.json --stack-id ID --library PATH
lm-fingerprint export --fingerprint a.json

--api-key フラグはありません。古い wireprint-fingerprint / stackprint-fingerprint のJSONも引き続き読み込めます。

ライブラリ

root@kitploit:~
from lm_fingerprint import (
    StackLibrary,
    compare_fingerprints,
    fingerprint_endpoint,
    fingerprint_hf,
    match_library,
)
from lm_fingerprint.client import HttpTransport

fp = fingerprint_endpoint(HttpTransport(url, api_key=key), model="x", base_url=url)
hit = match_library(fp, StackLibrary.load())
local = fingerprint_hf("sshleifer/tiny-gpt2", local_files_only=True)

結果JSONの読み方

schema_version = 1、probe_suite_version = lm-fingerprint-probes-v1 です。

比較:両側で ok かつ stable なプローブに対する重み付き完全一致。信頼度は score × coverage です。ライブラリ照合は certainty(exact / strong / possible / unknown)と、2番目に近い隣接エントリとの差を報告します。

実測値とModelPrint

再実行:

root@kitploit:~
lm-fingerprint prove --local-files-only

ModelPrint と同じ残差(probes/index.js 内の9つのプローブ)を使用します。ModelPrintのREADMEがスコアリングルールです:フィンガープリントの一致はインフラストラクチャの共有を証明するものであり、同一性を証明するものではありません。

解説:docs/PROOF.md。

誠実性のルール

  1. 一致は共有された配管であり、同じチェックポイントではありません。
  2. カウントベクトルは (T) の射影です。(T) そのものではありません。
  3. 同梱のライブラリは合成です。ユーザーは許可された実行のみを登録します。
  4. fingerprint-hf は重みを決して読み込まず、ホスト型Inferenceも決して呼び出しません。
  5. キーは --api-key-env から取得します。成果物に sk- や Authorization を含めてはいけません。
  6. scripts/repro.py が製品ゲートです。実行した直後でない限り、 green を主張してはいけません。

関連ツール

ライセンス

MIT。LICENSE を参照してください。ModelPrintのトークナイザーテキストはMIT(unclecode/modelprint)のままであり、バイト単位で正確です。

ツールをダウンロード
あなたが保持するもの観測できるものこのツールが行うこと
認可されたOpenAI互換ベースURL+キーチャットHTTP:使用量、エラー、ヘッダー、SSEfingerprint / compare / match / drift
ローカルのトークナイザーファイルencode と chat_templatefingerprint-hf / verify-hf。重みはディスク上に残ります
host:port のみバナー / /health / /api/tagsスコープ外。Juliusを使用してください
フィールド意味
kindlm-fingerprint
target.model / target.base_url_host指定された対象。ホストのみ。キーは含みません
features.tokenizer_normModelPrintクラスの4つのカウント(英語、中国語、コード、絵文字)
features.template_offset隠れたサービングテンプレートのサイズ
probes.<id>.value比較可能なセル。安定している必要があります
probes.<id>.weight類似度への寄与
keys_stored常に false
weights_loaded常に false
テストModelPrintこのツール
同じトークナイザー、異なるスタック(openai-chat-strict 対 router-openai)トークナイザー4/4+テンプレート一致スコア 0.58、共有アカウンティングと判定
gpt2 対 facebook/opt-125m4つのカウントとテンプレートが衝突encode_commitment で分離
Qwen2 / 2.5 / 3トークナイザー4/4で衝突、テンプレートで分離hf_identity で分離
tiny-gpt2 対 gpt2一致(同じ (T))一致(必須)
プローブセット923+HFのエンコード/テンプレートコミットメント
logprobs、ストリーム形状、システムロールアイデアとして記載実装済み
ツール対象
ModelPrint同じ残差、ブラウザ、9つのプローブ
tokprintローカルエンコードマップのファミリーID。gradient-untangler 内に存在
gradient-untanglerローカル重みに対する勾配
Juliusポート上で動作しているサーバーソフトウェアの特定
TokenPrint / LLMmap / UTF生成テキスト、出自、または埋め込まれたトークン