Generatore di chiavi API
Genera chiavi API casuali in base62, esadecimale o base64url, con prefisso facoltativo e l’hash SHA-256 da salvare sul tuo server.
Come si usa
Scegli un formato e una robustezza, aggiungi un prefisso se vuoi e «Genera» crea la chiave con crypto.getRandomValues(), il generatore casuale crittografico del browser. «Copia», accanto a ogni chiave, copia quella chiave; «Copia tutte» mette tutte le chiavi negli appunti, una per riga. Fino a 20 chiavi alla volta, ognuna estratta in modo indipendente.
La robustezza è il numero di bit casuali, e la lunghezza dipende dall’alfabeto. A 256 bit una chiave esadecimale ha 64 caratteri, mentre base62 (a–z, A–Z, 0–9) e base64url (che aggiunge - e _) ne richiedono 43. Ogni carattere base62 nasce da un byte casuale, e i byte da 248 in su vengono scartati, così i 62 caratteri sono esattamente equiprobabili; la riga sopra le chiavi mostra il numero reale di bit.
Un prefisso come sk_live_ viene scritto così com’è davanti alla parte casuale. Non è segreto e non aggiunge robustezza, ma dice a una persona a che cosa serve la chiave e permette agli strumenti di scansione dei segreti di trovare una chiave trapelata nel codice: le chiavi di Stripe iniziano con sk_, pk_ o rk_ seguiti da test_ o live_, i token di GitHub con ghp_, gho_ e simili. Il trattino basso, inoltre, fa sì che un doppio clic selezioni l’intera chiave.
Con l’opzione SHA-256 ogni chiave arriva con il suo hash, calcolato sull’intera chiave, prefisso compreso. Sul server salva solo quell’hash: quando arriva una richiesta, calcola l’hash della chiave ricevuta e confrontalo. Poiché la chiave è lunga e casuale, qui basta un hash veloce, a differenza delle password, che ne richiedono uno lento. Non viene inviato nulla: le chiavi esistono solo in questa pagina finché non le copi.
Esempio
Genera una chiave base62 da 256 bit con il prefisso sk_test_. Ogni esecuzione produce una chiave diversa.
256 bit in base6243 lettere e cifre: 43 × 5,95 bit ≈ 256 bit.256 bit in esadecimale64 caratteri tra 0–9 e a–f: 4 bit ciascuno.128 bit in base64url22 caratteri, 132 bit: base64url può solo arrotondare per eccesso a caratteri interi da 6 bit.Prefisso sk_test_sk_test_ seguito dalla parte casuale; il prefisso aggiunge 8 caratteri e nessuna robustezza.
Domande frequenti
Di quanti bit ha bisogno una chiave API?
128 bit casuali sono già fuori dalla portata di qualsiasi tentativo: anche con un miliardo di prove al secondo, esplorarne una frazione apprezzabile richiederebbe più dell’età dell’universo. Qui il valore predefinito è 256 bit, perché una chiave più lunga costa solo qualche carattere. GitHub ha portato i suoi token a 178 bit nel 2021.
Quale formato scegliere?
Base62 è il più comodo da copiare: nessun simbolo che un URL, una shell o un file di configurazione possa trattare in modo speciale. L’esadecimale è più lungo ma funziona dove sono accettati solo 0–9 e a–f. base64url è il più corto ed è sicuro negli URL, ma il - può interrompere la selezione con doppio clic e alcuni validatori lo rifiutano.
Perché salvare solo l’hash?
Se il database trapela, gli hash non servono a chiamare la tua API e da essi non si ricavano le chiavi. È la stessa idea delle password; la differenza è che una chiave casuale da 256 bit non si può indovinare, quindi SHA-256 basta e non serve un hash lento come Argon2.
Un UUID va bene come chiave API?
Un UUID versione 4 ha solo 122 bit casuali e una forma fissa e riconoscibile, ed è stato pensato come identificatore, non come segreto. Per chiavi che danno accesso, usa una chiave casuale dedicata come queste, con un prefisso se vuoi che sia riconoscibile.
Quando servono 384 o 512 bit?
Per i segreti che firmano JSON Web Token con HMAC. L’RFC 7518 richiede una chiave lunga almeno quanto l’output dell’hash: 256 bit per HS256, 384 per HS384 e 512 per HS512. Per una normale chiave API, 256 bit sono già più che sufficienti.