Hash-Bits für Kollisionsresistenz
Wer 1.000.000 Einträge mit einer Kollisionswahrscheinlichkeit von höchstens eins zu einer Million speichern will, braucht 59 Bit Hash, die kleinste Breite nach der Geburtstagsschranke. Sie sehen auch den Hash-Raum und das geschätzte Risiko bei dieser Breite. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- Elemente
- 1.000.000
- Maximale Wahrscheinlichkeit
- 0,000001
- Benötigte Bits
- 59
- Ungefähre Kollisionswahrscheinlichkeit
- 0,0000008674
- Hash-Raum
- 2^59
Wenn Sie die Hash-Länge für Kennungen, Cache-Schlüssel, Inhalts-Digests oder Kurzcodes wählen, lautet die schwierige Frage nicht nur, ob der Digest für Preimage-Sicherheit ausreicht, sondern wie viele Elemente Sie speichern können, bevor zwei Hashes zufällig kollidieren. Dieser Rechner löst diese Dimensionierung mit der klassischen Geburtstags-Schranke. Sie geben die erwartete Elementanzahl und die maximale Kollisionswahrscheinlichkeit an, die Sie akzeptieren; zurück kommt die kleinste ganzzahlige Bitbreite, die das näherungsweise Paar-Kollisionsrisiko auf oder unter diesem Ziel hält, plus die implizierte Hash-Raumgröße und die Näherungswahrscheinlichkeit bei dieser Breite.
Geburtstags-Schranke und warum die Hash-Länge mit dem Quadrat der Menge wächst
Ein uniformer Zufalls-Hash mit b Bits bildet jedes Element in einen Raum der Größe zwei hoch b ab. Mit nur einem Element gibt es nichts, womit kollidiert werden könnte, aber sobald viele Werte eingefügt werden, wächst die Zahl ungeordneter Paare wie n über zwei. Jedes Paar kollidiert mit Wahrscheinlichkeit etwa eins über die Raumgröße, sodass die erwartete Zahl kollidierender Paare ungefähr n mal n minus eins über zwei mal zwei hoch b beträgt.
Ist diese Erwartung klein, ist sie auch eine gute Näherung der Wahrscheinlichkeit mindestens einer Kollision. Umstellen auf eine Zielwahrscheinlichkeit p liefert die Dimensionierungsregel: Bits gleich der Decke des Logarithmus zur Basis zwei von n mal n minus eins über zwei p. Äquivalent sind Bits ungefähr zweimal der Log von n minus der Log von p, minus eins.
Diese Wurzelstruktur ist das berühmte Geburtstagsparadoxon in Ingenieurskleidung: um Kollisionen bei einer Milliarde Elementen selten zu halten, brauchen Sie weit mehr als dreißig Hash-Bits, und kryptografische Kollisionsresistenz gegen einen Angreifer, der zwei hoch vierundsechzig Hashes versuchen kann, drängt klassisch zu Digests mit einhundertachtundzwanzig Bit oder mehr. Dieses Werkzeug nutzt nur die Näherung der Geburtstags-Schranke —es modelliert keine nicht-uniformen Hashes, trunkierten HMAC-Konstruktionen oder Multi-Kollisionsangriffe jenseits der Basis-Paar-Schranke—, behandeln Sie die Antwort daher als Planungs-Untergrenze für zufällig wirkende Digests und legen Sie Marge für Implementierungsbesonderheiten und Bedrohungsmodelle jenseits zufälliger Kollisionen hinzu.
Anwendungsfälle
Längenplanung für Kennungen und Kurzcodes
Produktingenieure dimensionieren Bitbreiten trunkierter Hashes oder zufälliger IDs so, dass erwartete Kollisionen unter projizierten Nutzer- oder Objektzahlen unter einem schriftlichen Risikobudget bleiben.
Cache-Schlüssel und Inhalts-Digests
Plattformteams wählen Digest-Längen für Caches und Deduplizierungsindizes, indem sie Elementzahlen und Zielwahrscheinlichkeiten durchlaufen statt runde Zahlen zu raten.
Die Geburtstags-Schranke lehren
Lehrende und Interview-Vorbereitungstools zeigen, warum das Kollisionsrisiko mit n im Quadrat skaliert, und rekonstruieren klassische Vierundsechzig-Bit-Schwellen deterministisch.
Häufige Fragen
Ersetzt das eine kryptografische Sicherheitsprüfung?
Nein. Es dimensioniert nur Zufalls-Paar-Kollisionen für uniforme Hashes. Algorithmuswahl, Trunkierung, adversarielle Kollisionssuche und Preimage-Stärke brauchen weiterhin eine eigene Sicherheitsanalyse.
Warum treten Hash-Kollisionen früher auf als erwartet?
Weil die Paare zählen, nicht die Einträge. Die Zahl der Paare wächst ungefähr mit dem Quadrat der Einträge, und jedes Paar kann kollidieren, deshalb steigt das Risiko viel schneller als die Menge. Das ist das Geburtstagsparadoxon.
Gilt das Ergebnis für jede Hash-Funktion?
Es setzt einen gleichmäßigen, zufällig wirkenden Hash und die einfache Paarschranke voraus. Ungleichmäßige Hashes, gekürzte Hashes mit Schlüssel und Mehrfachkollisionen bildet es nicht ab, nehmen Sie es also als Untergrenze und planen Sie Reserve ein.
Welche Werte kann ich eingeben?
Die Zahl der Einträge reicht von 1 bis zu einer Billiarde, die höchste Wahrscheinlichkeit muss strikt zwischen null und eins liegen. Werte außerhalb dieser Bereiche sowie genau null oder eins werden abgelehnt.
Was bewirkt eine Verdopplung der Einträge?
Etwa zwei Bit mehr. Die nötigen Bit sind ungefähr das Doppelte des Logarithmus zur Basis zwei der Einträge, minus dem der Zielwahrscheinlichkeit, minus eins, jede Verdopplung kostet also knapp zwei Bit.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
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)Beispiel-Anfrage
{
"items": 1000000,
"max_probability": 0.000001
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_bits_for_collision",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Dieselbe reine Arithmetik läuft kostenlos im Browser und als abgerechnetes API-Item, sodass Lehrdemos, Designdokumente und Automatisierungsskripte einen deterministischen Vertrag ohne Sampling-Rauschen und ohne Sprachmodell teilen.
Eingabevertrag, Validierungsregeln und Antwortfelder
Beispiel: eine Million Elemente mit Ziel eins zu einer Million ergibt in der Größenordnung neunundfünfzig Bits und einen Hash-Raum von zwei zu dieser Potenz. Klassische Unterrichtschecks wie etwa vier Milliarden Elemente bei fünfzig Prozent Risiko ergeben die vertraute Vierundsechzig-Bit-Zahl. Senden Sie einen JSON-Body mit zwei Pflichtfeldern. items ist eine positive Ganzzahl von eins bis eine Billiarde (eins mal zehn hoch fünfzehn), die angibt, wie viele Werte Sie hashen oder speichern wollen; die Aliase n, count und num_items werden akzeptiert. max_probability ist eine endliche Zahl strikt zwischen null und eins mit der größten Kollisionswahrscheinlichkeit, die Sie unter der Schranke dulden; die Aliase p, probability, target_probability und max_collision_probability funktionieren ebenso. Fehlende Felder, Nicht-Ganzzahlen für items, nicht-endliche Wahrscheinlichkeiten, Null- oder negative Zählungen, Wahrscheinlichkeiten von null oder eins oder außerhalb des veröffentlichten Bereichs scheitern mit invalid_input und werden nicht abgerechnet. Bei Erfolg spiegelt die Antwort items und max_probability, liefert bits_needed als kleinste nichtnegative ganzzahlige Bitbreite, approximate_collision_probability als Schranken-Schätzung bei dieser Breite (mit eins minus exp von minus lambda, wenn lambda nicht winzig ist), hash_space als Zeichenkette zwei Zirkumflex bits_needed und eine kurze Formelzeichenkette zur Dokumentation der Regel.
Wann Sie den Rechner nutzen, Preise und ehrliche Grenzen des Modells
Nutzen Sie das kostenlose Browser-Werkzeug beim Entwerfen von Kennungsschemata, bei der Wahl trunkierter Hash-Längen für URLs oder Datenbankschlüssel oder beim Erklären, warum eine Verdopplung der Mengengröße etwa ein Extra-Bit und nicht null kostet. Nutzen Sie die API, wenn eine Design-Pipeline, ein Sicherheitsfragebogen-Helfer, ein Kapazitätsplaner oder eine Lehrplattform stabiles JSON für viele n- und p-Paare unter einem Vertrag braucht. Jede erfolgreiche Anfrage ist ein abrechenbares Item zu $0.002; Validierungsfehler werden nicht berechnet. Das Modell nimmt ideale uniforme unabhängige Hashes und die Standard-Paar-Geburtstagsnäherung an; es warnt Sie nicht vor strukturierten Eingaben, die die Uniformität brechen, vor Second-Preimage- oder Length-Extension-Themen oder vor adversarieller Kollisionssuche, die bei einer gebrochenen Hash-Familie günstiger als Brute-Force ist. Interpretieren Sie bits_needed stets als: wie breit muss ein zufällig wirkender Digest sein, damit Zufalls-Paar-Kollisionen unter n Elementen unter p bleiben — und prüfen Sie Algorithmus und Trunkierungspolitik gesondert.
Technische Fragen
Wie berechne ich Hash-Bits für Kollisionsresistenz?
Senden Sie Ganzzahlen items (oder n) und ein max_probability p strikt zwischen 0 und 1. Die API liefert bits_needed = ceil(log2(n*(n-1)/(2*p))) unter der Geburtstags-Schranke sowie Näherungswahrscheinlichkeit und hash_space.
Welche Formel nutzt die Geburtstags-Schranke?
Die Kollisionswahrscheinlichkeit wird als n(n-1)/(2·2^b) genähert. Die kleinste ganze Zahl b, die diesen Wert auf oder unter Ihrem Ziel-p hält, ergibt das Feld bits_needed.
Was, wenn items 1 ist?
Mit einem einzelnen Element gibt es kein Paar zur Kollision, daher ist bits_needed 0 und approximate_collision_probability 0. Zählungen unter 1 werden als invalid_input abgelehnt.
Ist der Hash-Bits-Rechner kostenlos?
Das Browser-Werkzeug läuft kostenlos auf Ihrem Gerät. API-Aufrufe nutzen das vorausbezahlte KIT-Guthaben zu $0.002 pro erfolgreichem Item; Validierungsfehler werden nicht berechnet.