衝突耐性のハッシュビット数
100万件を保存し、衝突の確率を100万分の1以下に抑えたいなら、必要なハッシュは59ビットです。誕生日の上界を満たす最小の幅で、その幅でのハッシュ空間と推定リスクも分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 項目
- 1,000,000
- 最大確率
- 0.000001
- 必要なビット数
- 59
- 衝突確率の近似値
- 0.0000008674
- ハッシュ空間
- 2^59
識別子、キャッシュキー、コンテンツダイジェスト、短縮コード向けにハッシュ長を選ぶとき、難しいのは「ダイジェストが原像安全性に足りるか」だけでなく、「偶然に二つのハッシュが衝突するまでに何件まで格納できるか」です。本計算機は古典的な誕生日バウンドで、その寸法決めを答えます。想定件数と許容する最大衝突確率を指定すると、近似のペア衝突リスクをその目標以下に保つ最小の整数ビット幅と、対応するハッシュ空間の大きさ、その幅での近似確率を返します。
誕生日バウンドと、ハッシュ長が集合サイズの二乗で伸びる理由
bビットの一様な乱数ハッシュは、各項目を大きさ二のb乗の空間へ写像します。一件だけなら衝突相手はありませんが、多数を入れると非順序ペアの数はn個から2個を選ぶ組み合わせのように増えます。各ペアは空間サイズ分の一程度の確率で衝突するため、衝突ペアの期待数はおよそn掛けるnマイナス一を二掛ける二のb乗で割った値になります。
この期待が小さいとき、それは少なくとも一件の衝突確率の良い近似にもなります。目標確率pについて解くと、ビット数はn掛けるnマイナス一を二pで割った値の底二の対数の切り上げ、という閉じた寸法規則が得られます。同等に、ビット数はnの対数の約二倍からpの対数を引き、さらに一を引いた値です。
この平方根構造は工学版の有名な誕生日のパラドックスです。十億件で衝突を稀に保つには三十ビットでは足りず、二の六十四乗回ハッシュを試せる攻撃者への暗号学的衝突耐性は、古典的に百二十八ビット以上のダイジェストへ設計を押しやります。本ツールは誕生日バウンド近似のみを用い、非一様ハッシュ、切り詰めHMAC、基本ペアを超える多重衝突攻撃はモデル化しません。
したがって回答は乱数らしいダイジェストの計画下限として扱い、実装の癖や偶然衝突を超える脅威モデルには余裕を加えてください。
活用例
識別子・短縮コード長の計画
プロダクトエンジニアは、想定ユーザー数やオブジェクト数における期待衝突が文書化されたリスク予算内に収まるよう、切り詰めハッシュや乱数IDのビット幅を決めます。
キャッシュキーとコンテンツダイジェスト
プラットフォームチームは、丸い数字の勘ではなく件数と目標確率を掃引して、キャッシュと重複排除インデックスのダイジェスト長を選びます。
誕生日バウンドの教材
講師や面接準備ツールは、衝突リスクがnの二乗で伸びる理由を示し、古典的な六十四ビットの教室閾値を決定論的に再現します。
よくある質問
暗号のセキュリティレビューの代わりになりますか?
いいえ。 一様ハッシュの偶然ペア衝突の寸法決めのみです。アルゴリズム選択、切り詰め、敵対的衝突探索、原像強度は別途のセキュリティ分析が必要です。
ハッシュの衝突が予想より早く起きるのはなぜですか?
大切なのは件数ではなく、組み合わせの数だからです。組の数は件数のおよそ2乗で増え、どの組も衝突しうるため、リスクは件数よりはるかに速く高まります。これが誕生日のパラドックスです。
どんなハッシュ関数にも当てはまりますか?
一様でランダムに見えるハッシュと、基本的な組ごとの上界を前提にしています。偏りのあるハッシュや鍵付きハッシュの切り詰め、多重衝突攻撃は扱わないため、計画上の下限として余裕を加えてください。
どんな値を入力できますか?
件数は1から1000兆まで、許容する確率は0より大きく1より小さい値です。範囲外の値や、ちょうど0または1の確率は受け付けません。
件数を2倍にすると必要なビット数はどう変わりますか?
およそ2ビット増えます。必要なビット数は件数の2を底とする対数のほぼ2倍から、目標確率の対数と1を引いた値なので、件数が倍になるたびに約2ビット必要になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/hash-bits-for-collision \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":1000000,"max_probability":0.000001}'const res = await fetch("https://api.kit.forhosting.com/dev/hash-bits-for-collision", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": 1000000,
"max_probability": 0.000001
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hash-bits-for-collision",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": 1000000,
"max_probability": 0.000001
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hash-bits-for-collision", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":1000000,"max_probability":0.000001}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":1000000,"max_probability":0.000001}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hash-bits-for-collision", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"items": 1000000,
"max_probability": 0.000001
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_bits_for_collision",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
同じ純算術がブラウザで無料に、課金API項目としても動き、教材デモ・設計文書・自動化スクリプトがサンプリングノイズや言語モデルなしの決定論的契約を共有できます。
入力契約、検証規則、応答フィールド
例:百万件で百万分の一を目標にするとおおよそ五十九ビットと二のその乗のハッシュ空間になります。約四十億件で五〇パーセントのリスクといった教室の古典例ではおなじみの六十四ビットが得られます。必須フィールド二つを持つJSON本体をPOSTします。itemsは一から十の十五乗(一京)までの正の整数で、ハッシュまたは格納する予定の件数を表し、別名n、count、num_itemsも受け付けます。max_probabilityはゼロと一のあいだの厳密に有限な数で、バウンド下で許容する最大衝突確率です。別名p、probability、target_probability、max_collision_probabilityも同様です。欠落、itemsの非整数、非有限確率、ゼロや負の件数、ゼロまたは一の確率、公開範囲外はinvalid_inputで失敗し課金されません。成功時はitemsとmax_probabilityを返し、bits_neededを最小の非負整数ビット幅、approximate_collision_probabilityをその幅での誕生日バウンド推定(lambdaがごく小さくないとき一マイナスexpのマイナスlambda)、hash_spaceを二のキャレットbits_neededという文字列、寸法規則を示す短いformula文字列を返します。
計算機の使いどころ、料金、モデルの誠実な限界
識別子方式の草案、URLやDBキー向け切り詰めハッシュ長の選択、集合サイズを倍にするとビットが約一本増える理由の説明には、無料ブラウザツールをご利用ください。検証失敗は残高を消費しません。モデルは理想的な一様独立ハッシュと標準のペア誕生日近似を前提とし、一様性を壊す構造化入力、第二原像や長さ拡張、壊れたハッシュ族で総当たりより安い敵対的衝突探索については警告しません。設計パイプライン、セキュリティ質問票の補助、容量計画、教材基盤が多くのnとpの組について一つの契約で安定したJSONを必要とするときはAPIをご利用ください。成功した各リクエストは$0.002の課金項目一件です。bits_neededは常に「n件のあいだの偶然ペア衝突をp未満に保つために、乱数らしいダイジェストがどれだけ広いか」と解釈し、実際のアルゴリズムと切り詰め方針は別途検証してください。
技術的な質問
衝突耐性のためのハッシュビット数はどう計算しますか?
整数items(またはn)と、0と1のあいだのmax_probability pを送ってください。APIは誕生日バウンド下でbits_needed = ceil(log2(n*(n-1)/(2*p)))と近似確率およびhash_spaceを返します。
誕生日バウンドはどの式を使いますか?
衝突確率はn(n-1)/(2·2^b)と近似されます。その値を目標p以下に保つ最小整数bを解くとbits_neededフィールドになります。
itemsが1のときはどうなりますか?
一件だけなら衝突するペアがないため、bits_neededは0、approximate_collision_probabilityは0です。1未満の件数はinvalid_inputとして拒否されます。
ハッシュビット計算機は無料ですか?
ブラウザツールはお使いの端末で無料です。API呼び出しは成功項目ごとに$0.002でKITの前払い残高を使い、検証失敗は課金されません。