APIキーとシークレットトークンの生成
Webサービス用の高エントロピーAPIキーとシークレットトークンを生成します。推奨フォーマット、キー長、base62/base64エンコーディング、プレフィックス規則、安全な保存方法を解説します。
Platform-Specific
詳細な説明
APIキーとシークレットトークンの生成
APIキーとシークレットトークンはマシン間認証の資格情報として機能します。記憶する必要がないため最大エントロピーが求められ、長く完全にランダムな文字列の理想的な候補です。
APIキーのフォーマット
異なるサービスは異なるフォーマットを使用します:
16進文字列(Base16)
a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
- 32文字の16進数で16バイトのエントロピー
- HMACシークレットやハッシュベースのトークンで一般的
Base62(英数字)
kR9mT2pX7nQw4bYsHt5vL8jB3eY6cN1x
- エンコーディングなしでURL安全
- 1文字あたり約5.95ビット
- APIキーで広く使用
Base64 / Base64URL
a1B2c3D4+e5F6/a7B8==
a1B2c3D4-e5F6_a7B8
- 1文字あたり約6ビット(最も効率的)
- Base64URLバリアントは
+、/、=を避けてURL安全
推奨キー長
| 用途 | 最小ビット | フォーマット | 長さ |
|---|---|---|---|
| APIキー | 128ビット | Base62 | 22文字 |
| HMACシークレット | 256ビット | Hex | 64文字 |
| JWTシークレット | 256ビット | Base64 | 44文字 |
| OAuthクライアントシークレット | 256ビット | Base62 | 43文字 |
| Webhook署名キー | 256ビット | Hex | 64文字 |
プレフィックス規則
多くのサービスはキータイプを識別するためにプレフィックスを追加します:
sk_live_kR9mT2pX7nQw4bYs (Stripeシークレットキー)
pk_test_Ht5vL8jB3eY6cN1x (Stripe公開キー)
ghp_xxxxxxxxxxxxxxxxxxxx (GitHub個人アクセストークン)
プレフィックスは以下に役立ちます:
- 識別 — キータイプの素早い判別
- シークレットスキャン — コード内の漏洩キーの自動検出
- 失効 — 特定のキーパターンのログ検索
安全な保存
APIキーには厳格な取り扱いが必要です:
- 環境変数 — バージョン管理にコミットしない
- シークレットマネージャー — AWS Secrets Manager、GCP Secret Manager、HashiCorp Vault
- 保存時の暗号化 — データベースに保存されたキーは暗号化すべき
- スコープされた権限 — キーごとに最小限必要な権限を割り当て
- ローテーションスケジュール — 90日ごとまたは人員変更後にキーをローテーション
コードでのキー生成
Web Crypto API(ブラウザ対応)を使用:
const array = new Uint8Array(32);
crypto.getRandomValues(array);
const key = Array.from(array, b =>
b.toString(16).padStart(2, '0')
).join('');
ユースケース
APIキーとシークレットトークンは、サードパーティサービスを統合する開発者、REST APIの構築、Webhookの設定、OAuthアプリケーションのセットアップに使用されます。すべてのSaaS製品、モバイルアプリバックエンド、マイクロサービスには、サービス間通信のための安全に生成された認証トークンが必要です。