シード指定の2段階認証バックアップコード生成
この2段階認証バックアップコード生成機能は、指定された個数の一意な使い捨て復旧コードを、4桁、ハイフン、4桁という標準的な形式で作成します。個数と秘密のシードが同じであれば、常に同じ順序のコード一覧が得られます。この再現性は、管理されたプロビジョニング、テスト用データ、文書化された復旧手順、生成済み一覧を保存せずにコードを再構成する必要があるシステムに役立ちます。処理はローカル計算だけで完結し、ネットワーク、時刻、乱数源、アカウント情報、隠れた状態を使用しません。シードと生成されたすべてのコードは、機密性の高い認証情報として厳重に保護してください。
無料で実行
個数を選び、シードを保護します
まず、アカウントまたはアプリケーションで発行する復旧コードの個数を決めます。個数には1から1,000までの整数を指定する必要があります。1未満の要求は、空の一覧を黙って返すのではなく、エラーとして拒否されます。次に、空ではないシードを指定します。再現性の根拠はシードだけであるため、シードと個数が同一なら、同じコードが同じ順序で生成されます。実運用では、組織が承認した秘密情報管理手順によって作成・保管された、長く十分なエントロピーを持つ秘密値をご使用ください。氏名、メールアドレス、プロジェクト名、短く覚えやすい語句は、第三者に推測されてコードを再構成されるおそれがあるため、実運用のシードには適しません。利用者、環境、サービスをまたいで同じシードを再利用しないでください。アルゴリズム内のドメイン分離は、別の導出処理との偶発的な重複を防ぎますが、弱いシードや漏えいしたシードを安全にするものではありません。自動テストで再現可能なデータが必要な場合は、テスト用シードを明確に識別して隔離し、その出力が本番の認証システムで決して受理されないようにしてください。処理時間と資源消費を予測可能な範囲に保つため、シードは4,096文字までに制限されています。
決定論的な生成処理を理解します
各出力位置は、バージョン付きラベル、シードの正確な長さ、シード文字列、ゼロから始まる位置、再試行カウンターを入力として、SHA-256で個別に導出されます。シード長を含めることで入力の区切りが曖昧にならず、バージョン付きラベルによって、この用途を他のシード利用計算から分離しています。生成処理では、ダイジェストから符号なしの値を読み取り、8桁の10進数へ縮小する前に棄却サンプリングを行います。この手順により、単純な剰余変換で生じるわずかな分布の偏りを避けられます。採用された数値は、先頭のゼロを保持したまま、ハイフンで区切った4桁ずつの2グループに整形されます。すでに出力した値は集合で管理され、衝突が起きた場合は、新しいコードが得られるまで再試行カウンターを決定論的に進めます。そのため、結果には指定された個数の一意なコードが含まれ、同じ要求を再実行すると、衝突時の判断を含めて同じ最終一覧が再現されます。ネットワークサービス、システム時刻、実行環境の乱数生成器、永続キャッシュ、変更可能なモジュール状態が結果に影響することはありません。通常、シードの1文字を変更するだけで一覧全体が変わります。
コードを安全に配布、保存、無効化します
生成は、バックアップコード運用の一工程にすぎません。認証サービス側では、各コードについて承認された検証値を保存し、最初の正常な使用後に使用済みとして記録し、試行回数を制限し、明示的な失効または再生成機能を用意する必要があります。シードや平文コードを、分析データ、トレース、サポート依頼、ビルド出力、共有チャットへ記録しないでください。保護されたセッションを通じて認証済みの利用者にコードを提示し、パスワードマネージャーなどの安全な場所へオフライン保存するよう案内してください。決定論的な仕組みは災害復旧や管理されたプロビジョニングを容易にしますが、シードを取得した人物がすべてのコードを再構成できることも意味します。漏えいが疑われる場合、利用者が再生成を求めた場合、または方針により旧一覧の無効化が必要な場合は、新しい独立したシードへ切り替えてください。古いシードのまま個数だけを変えてはいけません。2つの要求で共通する位置のコードは同じままです。数字のグループ化は転記を容易にしますが、各コードの候補は1億通りに限られるため、オンラインでの試行に対する防御も不可欠です。APIは1回$0.002で、ブラウザー版も同じ純粋な計算を使用します。
活用例
復旧コードをプロビジョニング
登録時に、利用者ごとの保護されたシードから再現可能な方法で、管理された復旧コード一覧を作成します。
安定した認証テストを作成
手作業で管理する一覧をリポジトリへ保存せずに、統合テスト用の固定バックアップコードデータを生成します。
承認済みコード一覧を再構成
表示用の控えが失われても保護されたシードが残っている場合に、文書化されたインシデント手順で同じ順序の一覧を復元します。
よくある質問
コードはどのような形式ですか?
各コードは8桁の10進数字を4桁ずつ2組に分けた形式です。例は0123-4567で、先頭のゼロも保持されます。
同じ入力なら常に同じコードになりますか?
はい。乱数、時刻、ネットワーク、保存状態に依存しないため、同じ個数と完全に同一のシードから同じ順序の一覧が再現されます。
1回の応答に重複コードが含まれますか?
いいえ。衝突を検出すると、指定個数の一意なコードが得られるまで決定論的に再試行します。
覚えやすいシードを使用できますか?
実運用には使用しないでください。シードを取得または推測した人物はコードを再構成できるため、承認された手順で作成・保管した長く高エントロピーの秘密値をご使用ください。
個数がゼロまたは負数の場合はどうなりますか?
個数は1以上でなければならないことを示す無効入力エラーとなり、要求は失敗します。
APIの利用料金はいくらですか?
APIは1回$0.002です。ブラウザー版では同じ純粋なアルゴリズムをローカルで実行します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/security/two-factor-backup-codes-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"count":8,"seed":"correct-horse-battery-staple-2026"}'const res = await fetch("https://api.kit.forhosting.com/security/two-factor-backup-codes-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"count": 8,
"seed": "correct-horse-battery-staple-2026"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/security/two-factor-backup-codes-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"count": 8,
"seed": "correct-horse-battery-staple-2026"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/security/two-factor-backup-codes-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"count":8,"seed":"correct-horse-battery-staple-2026"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"count":8,"seed":"correct-horse-battery-staple-2026"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/security/two-factor-backup-codes-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"count": 8,
"seed": "correct-horse-battery-staple-2026"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "security.two_factor_backup_codes_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |