Bit hash per resistenza alle collisioni
Salvare 1.000.000 di elementi con al massimo una probabilità su un milione di collisione richiede 59 bit di hash, la larghezza minima che rispetta il limite del compleanno. Vede anche lo spazio di hash e il rischio stimato a quella larghezza. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Elementi
- 1.000.000
- Probabilità massima
- 0,000001
- Bit necessari
- 59
- Probabilità di collisione approssimata
- 0,0000008674
- Spazio di hash
- 2^59
Quando sceglie la lunghezza di un hash per identificatori, chiavi di cache, digest di contenuto o codici brevi, la domanda difficile non è solo se il digest basti per la sicurezza di preimmagine, ma quanti elementi può memorizzare prima che due hash collidano per caso. Questo calcolatore risolve quel dimensionamento con il classico bound del compleanno. Lei indica il numero atteso di elementi e la probabilità massima di collisione che accetta; riceve la minore larghezza intera in bit che mantiene il rischio approssimato di collisione a coppie al di sotto o uguale a tale obiettivo, più la dimensione dello spazio hash e la probabilità approssimata a quella larghezza.
Bound del compleanno e perché la lunghezza dell'hash cresce con il quadrato dell'insieme
Un hash aleatorio uniforme di b bit mappa ogni elemento in uno spazio di dimensione due alla b. Con un solo elemento non c'è nulla con cui collidere, ma inserendo molti valori il numero di coppie non ordinate cresce come n su due. Ogni coppia collides con probabilità circa uno sullo spazio, così il numero atteso di coppie in collisione è approssimativamente n per n meno uno su due per due alla b.
Quando tale aspettativa è piccola, è anche una buona approssimazione della probabilità di almeno una collisione. Isolando per una probabilità obiettivo p si ottiene la regola di dimensionamento: bit uguale al soffitto del logaritmo in base due di n per n meno uno su due p. In modo equivalente, i bit sono circa il doppio del log di n meno il log di p, meno uno.
Quella struttura a radice quadrata è il famoso paradosso del compleanno in veste ingegneristica: per mantenere rare le collisioni con un miliardo di elementi servono ben più di trenta bit di hash, e la resistenza crittografica alle collisioni contro un avversario che può provare due alla sessantaquattro hash spinge classicamente verso digest da centoventotto bit o più.
Questo strumento usa solo l'approssimazione del bound del compleanno —non modellizza hash non uniformi, costruzioni HMAC troncate né attacchi multi-collisione oltre la coppia di base—, quindi tratti la risposta come limite inferiore di pianificazione per digest dall'aspetto casuale e aggiunga margine per particolarità di implementazione e modelli di minaccia oltre le collisioni casuali.
Casi d'uso
Pianificazione della lunghezza di identificatori e codici brevi
Gli ingegneri di prodotto dimensionano la larghezza in bit di hash troncati o ID casuali così che le collisioni attese tra conteggi previsti di utenti o oggetti restino sotto un budget di rischio scritto.
Chiavi di cache e digest di contenuto
I team di piattaforma scelgono le lunghezze di digest per cache e indici di deduplicazione scorrendo conteggi di elementi e probabilità obiettivo invece di indovinare numeri tondi.
Insegnare il bound del compleanno
Docenti e strumenti di preparazione ai colloqui mostrano perché il rischio di collisione scala con n al quadrato e recuperano in modo deterministico le soglie classiche d'aula a sessantaquattro bit.
Domande frequenti
Quale formula usa il bound del compleanno?
La probabilità di collisione è approssimata come n(n-1)/(2·2^b).
Il calcolatore di bit hash è gratuito?
Lo strumento del browser gira gratis sul Suo dispositivo.
Sostituisce una revisione di sicurezza crittografica?
No. Dimensiona solo collisioni casuali a coppie per hash uniformi. Scelta dell'algoritmo, troncamento, ricerca avversaria di collisioni e forza di preimmagine richiedono ancora un'analisi di sicurezza separata.
Perché le collisioni di hash arrivano prima del previsto?
Perché contano le coppie, non gli elementi. Il numero di coppie cresce più o meno con il quadrato degli elementi e ogni coppia può collidere, quindi il rischio sale molto più in fretta della quantità. È il paradosso del compleanno.
Il risultato vale per qualsiasi funzione di hash?
Presuppone un hash uniforme e dall'aspetto casuale e usa il limite di base sulle coppie. Non modella hash non uniformi, hash con chiave troncati né attacchi a collisioni multiple: lo consideri un minimo di progetto e aggiunga un margine.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"items": 1000000,
"max_probability": 0.000001
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_bits_for_collision",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
La stessa aritmetica pura gira gratis nel browser e come voce API a pagamento, così demo didattiche, documenti di progettazione e script di automazione condividono un contratto deterministico senza rumore di campionamento e senza modello linguistico.
Contratto di ingresso, regole di validazione e campi di risposta
Esempio: un milione di elementi con obiettivo di uno su un milione produce dell'ordine di cinquantanove bit e uno spazio hash di due a quella potenza. Controlli classici d'aula come circa quattro miliardi di elementi al cinquanta per cento di rischio recuperano la familiare cifra di sessantaquattro bit. Invii un corpo JSON con due campi obbligatori. items è un intero positivo da uno a un quadrilione (uno per dieci alla quindici) che descrive quanti valori prevede di fare l'hash o memorizzare; sono accettati gli alias n, count e num_items. max_probability è un numero finito strettamente tra zero e uno con la maggiore probabilità di collisione che tollererà sotto il bound; gli alias p, probability, target_probability e max_collision_probability funzionano allo stesso modo. Campi mancanti, non interi per items, probabilità non finite, conteggi zero o negativi, probabilità di zero o uno o fuori dall'intervallo pubblicato falliscono con invalid_input e non vengono addebitati. In caso di successo la risposta riecheggia items e max_probability, restituisce bits_needed come la minore larghezza intera non negativa in bit, approximate_collision_probability come la stima del bound a quella larghezza (usando uno meno exp di meno lambda quando lambda non è minuscolo), hash_space come la stringa due circonflesso bits_needed, e una breve stringa di formula che documenta la regola.
Quando usare il calcolatore, prezzi e limiti onesti del modello
Usi lo strumento gratuito del browser mentre progetta schemi di identificatori, sceglie lunghezze di hash troncato per URL o chiavi di database, o insegna perché raddoppiare la dimensione dell'insieme costa circa un bit in più e non zero. Il modello assume hash ideali uniformi e indipendenti e l'approssimazione standard a coppie del compleanno; non avviserà di ingressi strutturati che rompono l'uniformità, di seconda preimmagine o length-extension, né di ricerca avversaria di collisioni più economica della forza bruta per una famiglia di hash rotta. Usi l'API quando una pipeline di progettazione, un assistente a questionari di sicurezza, un pianificatore di capacità o una piattaforma didattica necessita di JSON stabile per molte coppie n e p sotto un solo contratto. Ogni richiesta riuscita è una voce fatturabile a $0.002; la validazione fallita non consuma saldo. Interpreti sempre bits_needed come quanto largo deve essere un digest dall'aspetto casuale affinché le collisioni per caso tra n elementi restino sotto p, poi validi separatamente l'algoritmo reale e la politica di troncamento.
Domande tecniche
Come calcolo i bit hash per la resistenza alle collisioni?
Invii interi items (o n) e un max_probability p strettamente tra 0 e 1. L'API restituisce bits_needed = ceil(log2(n*(n-1)/(2*p))) sotto il bound del compleanno, più la probabilità approssimata e hash_space.
Cosa succede se items è 1?
Con un solo elemento non c'è coppia che collida, quindi bits_needed è 0 e approximate_collision_probability è 0. Conteggi inferiori a 1 vengono rifiutati come invalid_input.