鍵長とキー空間を計算:56・128・256ビット比較
鍵長は短い表記で示せますが、その安全性の規模は過小評価されがちです。ビットが一つ増えるたびに、候補となる鍵の数は二倍になります。この計算ツールは、対応範囲内の任意のビット長について、キー空間の正確な大きさと、理想的な全数探索で必要となる平均試行回数を求めます。さらに56・128・256ビットを基準として並べ、曖昧な評価語ではなく、正確な二の累乗で差を示します。計算は決定論的であり、鍵が一様に分布し、暗号方式そのものを迂回する攻撃手法がないことを前提としています。
無料で実行
ビット長から鍵候補数を求める方法
nビットの鍵は、二のn乗個の異なるビット列を表せます。この単純な規則から、日常的な感覚をはるかに超える速さで大きくなる数が生まれます。一ビット追加するとキー空間は二倍になり、十ビット追加すると1,024倍になります。この計算ツールは厳密な整数演算で累乗を求め、浮動小数点による近似値ではなく、完全な十進数を返します。素早く規模を把握できるよう、簡潔な科学的記数法も併記します。たとえば56ビット鍵の候補は72,057,594,037,927,936個であり、128ビット鍵では340,282,366,920,938,463,463,374,607,431,768,211,456個です。ただし、これらの値が示すのは探索空間の大きさだけです。アルゴリズムの安全性を証明するものではありません。実装上の欠陥、弱い鍵生成、内部状態の漏えい、暗号解読攻撃、プロトコルの誤りがあれば、実際の攻撃コストは大幅に下がり得ます。結果は規模の理解に用い、暗号、モード、プロトコル、鍵生成手順はそれぞれ個別に評価してください。
平均的な総当たり攻撃量の読み方
全数探索では、正しい鍵が見つかるまで候補を順に試します。正解の鍵が一様に分布し、その位置に関する有用な情報なしに候補を検証する場合、正解は探索順序のどこにでも現れ得ます。期待される位置はキー空間の中央なので、この計算ツールは平均試行回数を二のnマイナス一乗として示します。これは期待値であり、保証ではありません。個別の探索では最初の一回で成功する場合も、ほぼすべての候補を試す場合もあります。出力が解読時間ではなく試行回数を示すのは意図的です。秒数へ換算するには、対象のアルゴリズム、ハードウェア、並列化方式、検証処理に即した根拠ある試行速度が必要です。別の暗号やパスワードハッシュの速度を流用すると、何桁も異なる誤差を生む可能性があります。平均試行回数は、すべての暗号対象を同じ速度で試せると仮定せずに強度を比較できる、安定した数学的尺度です。
56・128・256ビット強度の比較
比較結果では、選択した鍵長を三つの代表的な基準と対比します。五十六ビットは歴史的に重要ですが、現在では全数探索空間が小さい部類に入ります。百二十八ビットの空間は桁違いに大きく、二の72乗倍の56ビット空間です。二百五十六ビットは、二の128乗倍まで128ビット空間を拡大します。選択した長さが基準を上回る場合は「より強い」と判定し、正確な倍率を表示します。下回る場合は「より弱い」と判定し、不正確な小数を避けるため逆数側の除数を示します。同じ長さは等しいものとして明示します。ここで比較するのは総当たり攻撃に対するキー空間だけであり、異なる暗号プリミティブ間で同等の安全性を主張するものではありません。構成上の安全性上限が低い場合、量子探索を脅威モデルに含める場合、または鍵の生成元に偏りやエントロピー不足がある場合、256ビット鍵であっても実効安全性が自動的に256ビットになるわけではありません。
活用例
暗号設計を検討する
候補となる鍵長を正確なキー空間と平均探索回数に変換し、設計で定めた安全性目標と比較できます。
指数関数的な増加を説明する
わずかなビット数の追加が、全数探索の負荷を非常に大きく増やす理由を、学習者や意思決定者へ示せます。
旧来と現代の強度を確認する
独自または旧式の鍵長を、二の正確な累乗によって56・128・256ビットの固定基準と並べられます。
よくある質問
鍵候補の総数はどのように計算しますか?
鍵長がnビットの場合、表現できるビット列の総数は正確に2^nです。
平均総当たり試行回数がキー空間の半分なのはなぜですか?
正しい鍵が一様に分布し、探索の近道がない場合、全数探索の順序における期待位置が候補全体の中央になるためです。
鍵を長くすれば、システムは必ず安全になりますか?
いいえ。鍵長が示すのは総当たり攻撃への上限の一つです。アルゴリズムの弱点、実装不備、乱数品質、プロトコルの誤り、鍵の漏えいが実際の安全性を左右します。
解読に必要な年数を表示しないのはなぜですか?
時間は対象アルゴリズム、検証コスト、ハードウェア、並列度、攻撃者モデルによって変わります。試行回数なら恣意的な速度を仮定せず比較できます。
比較における「より強い」「より弱い」とは何ですか?
全数探索に必要なキー空間の比率だけを表します。dビットの差は2^d倍に相当します。
APIリクエストの料金はいくらですか?
APIリクエスト一回の料金は$0.002です。同じ決定論的な計算を、Tier A機能としてブラウザーでも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/key-space-bits \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"key_bits":128}'const res = await fetch("https://api.kit.forhosting.com/dev/key-space-bits", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"key_bits": 128
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/key-space-bits",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"key_bits": 128
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/key-space-bits", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"key_bits":128}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"key_bits":128}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/key-space-bits", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"key_bits": 128
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.key_space_bits",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_bits | 4096 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |