APIキー・シークレット検出
ログやコード、.envファイルをChatGPTに貼る前にチェックしましょう。sk-proj-…(OpenAI)、AKIA…(AWS)、ghp_…(GitHub)、AIza…(Google)、xoxb-…(Slack)、sk_live_…(Stripe)などのキー、JWT、PEM秘密鍵、DB_PASSWORD=…の値を見つけて[REDACTED_…]に置き換えます。24文字以上で1文字あたりのシャノンエントロピーが4.0ビット以上のランダムな文字列も表示します。入力した文章はブラウザの外に出ません。
使い方
- AIチャットに送ろうとしているログ、コード、設定ファイル、プロンプトを貼り付けます。入力するとすぐにチェックが始まります。
- ハイライトされた箇所と行番号つきの一覧を確認します。赤は形式が知られているキー、青はシークレットかもしれないランダムな文字列です。
- 伏せ字にした文章をコピーします。どのキーだったか分かるようにしたい場合は「先頭4文字を残す」をオンにします(例: ghp_****)。
計算方法
主要サービスのキーは決まった接頭辞と長さで見つけます。OpenAIのsk-とsk-proj-、Anthropicのsk-ant-、AWSアクセスキー(AKIAまたはASIAの後に大文字・数字16文字)、GitHubのghp_・gho_・github_pat_、GoogleのAIzaの後35文字、Slackのxoxb-・xoxp-、Stripeのsk_live_・pk_live_・rk_、JWT(eyJで始まるbase64urlの3つの部分)、-----BEGIN … PRIVATE KEY-----ブロックが対象です。
名前からも見つけます。.envや設定ファイルでSECRET、TOKEN、PASSWORD、API_KEY、ACCESS_KEY、PRIVATE_KEYを含む名前に代入された値、aws_secret_access_keyの後の40文字のAWSシークレットキー、postgres://user:password@hostのような接続文字列のパスワードを伏せます。changeme、<your-key>、${VAR}、****のようなプレースホルダーは対象外です。
形式の分からない文字列はシャノンエントロピー H = -Σ p(c) log2 p(c) で評価します。大文字・小文字・数字が混ざった24文字以上の文字列で、1文字あたり4.0ビット以上なら表示します。ランダムな32文字のキーはふつう4.5〜5ビットです。コミットハッシュやUUIDのような16進数だけの文字列は除きます。
2つのルールが同じ箇所に当たった場合は、より具体的な方を使います。OPENAI_API_KEY=…の中のキーは一般的な.envの値ではなくOpenAIキーと表示されます。処理はすべてこのページ内で行い、文章はアップロードも保存もされず、アドレスにも残りません。
検出できる形式
| サービス | 形 |
|---|---|
| OpenAI | sk-… , sk-proj-… |
| Anthropic | sk-ant-… |
| AWS | AKIA… (20 文字) + 40文字のシークレット |
| GitHub | ghp_… , github_pat_… |
| Google API | AIza… (39 文字) |
| Slack | xoxb-… , xoxp-… , hooks.slack.com URL |
| Stripe | sk_live_… , pk_live_… , rk_… |
| JWT | eyJ….eyJ….… |
| 秘密鍵 | -----BEGIN … PRIVATE KEY----- |
| 接続文字列 | scheme://user:password@host |
| .envの値 | SECRET/TOKEN/PASSWORDを含む名前=… |
よくある質問
入力した文章はどこかに送信されますか?
いいえ。チェックと伏せ字はブラウザ内だけで行います。アップロードせず、ローカルストレージにも保存せず、URLにも入れないので、うっかり共有されることはありません。ページを離れると入力欄も空になります。
もうChatGPTにキーを貼ってしまいました。どうすれば?
キーを再発行してください。チャットを消していても、サービスの管理画面でそのキーを無効にし、新しいキーを作るべきです。設定によってはチャットが不正利用の審査や学習に使われることがあるため、一度出たキーは漏れたものとして扱います。
普通の文字列がシークレットとして表示されます。
エントロピーチェックは長くランダムに見える文字列を表示しますが、ビルドID、base64画像、署名付きURLなど無害な値もそう見えることがあります。青い表示は推定です。「ランダムな文字列も表示」をオフにすると、形式が知られているキーと名前つきの値だけになります。
見逃すものはありますか?
文中に書いた短いパスワード、名前がなくランダム性も低いシークレット、接頭辞のないサービスのキー、複数行に分かれた値は見逃すことがあります。送る前に結果を読んでください。チェックはリスクを下げるもので、安全の証明ではありません。
例のキーは本物ですか?
いいえ。AWSドキュメントの例示キー、jwt.ioで公開されている例のトークン、自作の無意味な文字列です。形式は同じですが何も開けません。