bitlvl
SR

Generator nasumičnih bajtova i tokena

Izaberite dužinu i format i generišite koliko vam treba. Sve dolazi iz kriptografskog izvora nasumičnosti pregledača, istog koji koristi TLS.

Vrsta
 

Rezultati i poruke ovog alata prikazuju se na engleskom.

Odakle dolazi nasumičnost

crypto.getRandomValues pita CSPRNG operativnog sistema (getrandom() na Linuxu, SecRandomCopyBytes na macOS-u, BCryptGenRandom na Windowsu), koji se inicijalizuje iz hardverskih događaja i, na modernim procesorima, RDRAND instrukcije. Nepredvidiv je u oba smera: poznavanje milion izlaza ne govori vam ništa o sledećem. Math.random() nije; to je brz PRNG sa malim unutrašnjim stanjem, dobar za igre i nikada za tajne.

Koliko bajtova

NamenaBajtovaZašto
ID sesije, CSRF token16–32128 bitova je izvan dometa grube sile; 32 bajta je uobičajena podrazumevana vrednost.
API ključ / tajna32256 bitova; hešira se sa SHA-256 za čuvanje, kao lozinka, ali bez potrebe za sporim heširanjem jer je nasumičan.
HMAC / JWT ključ za potpisivanje32–64Uskladite sa izlazom heša: 32 za SHA-256, 64 za SHA-512.
AES ključ16 / 32AES-128 ili AES-256.
So16Jedinstvenost je ono što je bitno; 128 bitova je garantuje.
Token za reset lozinke u URL-u16–24Base64URL ga drži kratkim; čuvajte njegov heš, neka brzo ističe.

Nasumični celi brojevi bez pristrasnosti

Uzimanje random_byte % 6 za kockicu je suptilno pogrešno: 256 nije deljivo sa 6, pa 1–4 ispadaju malo češće nego 5–6. Ispravan metod izvlači vrednost, odbacuje je ako upadne u preostali opseg na vrhu, i pokušava ponovo; to radi ovaj generator, kao i secrets.randbelow, crypto.randomInt i rand.Intn.

Ključevi sa prefiksom

Prefiksi poput sk_live_, ghp_ ili AKIA ne dodaju bezbednost, ali ključeve čine prepoznatljivim u logovima i omogućavaju skenerima tajni (GitHubovom, gitleaks) da pronađu procurele. Izaberite prefiks jedinstven za vaš servis i nasumični deo držite na 32 bajta.

Pitanja

Da li je ovo dobro kao openssl rand ili /dev/urandom?

Da: pregledač poziva isti generator operativnog sistema koji ti alati čitaju. Izlaz je pogodan za ključeve i tajne. Ako vam ipak treba u shellu: openssl rand -hex 32, ili head -c 32 /dev/urandom | base64.

Da li API ključeve treba čuvati heširane?

Da, brzim hešom kao što je SHA-256; pošto je ključ nasumičan, spor heš za lozinke nije potreban. Prikažite ključ jednom pri kreiranju i čuvajte samo heš, kao što rade GitHub i Stripe.

Šta je Base64URL?

Base64 sa - i _ umesto + i /, obično bez paddinga, tako da vrednost može da stoji u URL-u ili kolačiću bez escape-ovanja. JWT-ovi i većina modernih tokena ga koriste.

Zašto ne koristiti jednostavno UUID kao token?

UUIDv4 ima 122 nasumična bita, što je dovoljno, ali njegov fiksni format odaje šta je i troši znakove na crtice. Za tajne su sirovi nasumični bajtovi u Base64URL kraći i jači. UUID-ovi su za identifikatore, ne za tajne.