Token & API Key Üreteci

Web Crypto API ile kriptografik olarak güvenli tokenlar. UUID, hex, Base64 bearer token veya önekli API key.

128 bitlik bir RFC 4122 v4 tanımlayıcısı; bunun 122 biti rastgeledir. Veritabanı birincil anahtarları, istek ID'leri ve korelasyon tokenları için varsayılan tercih.

122 bit entropi · tarayıcında üretildi, hiçbir zaman sunucuya gönderilmedi

Neden Math.random() değil?

Math.random() bir sözde rastgele sayı üretecdir — çıktısı tahmin edilebilir ve güvenlik tokenları için uygun değildir. Bu araç, TLS ve SSH key üretimini de destekleyen API olan crypto.getRandomValues() kullanır.

Token türleri açıklandı

UUID v4, veritabanı ID'leri ve korelasyon tokenları için standarttır. Hex string'ler oturum tokenları ve nonce'lar için uygundur. Base64, API tokenları için kompakttır. Önekli API key'ler (sk_ veya vlt_ gibi) sızan kimlik bilgilerinin tespit edilmesini ve rotasyonunu kolaylaştırır.

Bir token ne kadar uzun olmalı?

Bir erişimi koruyan her şey için 128 bit entropi alt sınırdır ve NIST SP 800-63B'nin rastgele üretilmiş bir sırdan beklediği de budur. Bu 32 hex karakter, 22 Base64 karakter ya da bir UUID v4 demektir. 256 bitin ötesine geçmek kaba kuvvete karşı hiçbir şey kazandırmaz - yalnızca log hacmi ve header boyutu olarak sana pahalıya gelir. Uzunluk, alfabeden daha çok şey ifade eder: 32 karakterlik bir hex token ile 22 karakterlik bir Base64 token'ın tahmin edilmesi eşit derecede zordur.

Bearer token, access token ve API key

Bu isimler bir kimlik bilgisinin nasıl kullanıldığını anlatır, nasıl üretildiğini değil. Bearer token yalnızca sunulduğu için erişim verir; HTTP Authorization header'ının onu birebir taşımasının sebebi budur. Access token, kısa ömürlü bir bearer token'dır ve genellikle bir OAuth akışıyla verilir. API key ise bir kişiye değil bir servise verilen uzun ömürlü bir bearer token'dır. Üretim anında üçü de aynı şeydir: yüksek entropili, anlamsız rastgele bir dize. İlk ikisi için hex ya da Base64, taranabilir bir önek istediğinde ise API key modunu kullan.

API key'lere neden önek konur?

GitHub, Stripe, OpenAI ve Slack key'lerine tek bir sebeple önek koyar (ghp_, sk_live_, xoxb_): sır tarayıcıları sızan bir key'i hiçbir bağlam olmadan yalnızca dizeye bakarak tanıyabilsin diye. Önekli bir key'i herkese açık bir depoya gönderdiğinde, onu veren taraf dakikalar içinde iptal edebilir. Öneksiz 32 karakterlik bir hex dize commit hash'ine benzer, bu yüzden hiçbir şey onu yakalamaz. Önekler ayrıca ortamı bir bakışta belli eder; bu da bir production key'ini staging yapılandırmasına yapıştırmaya karşı en ucuz savunmadır.

Sıkça sorulan sorular

Bu tokenlar gerçekten rastgele mi?

Evet. Her token, tarayıcının kriptografik olarak güvenli rastgele sayı üreteci olan ve işletim sisteminin entropi havuzundan beslenen crypto.getRandomValues() ile üretilir. TLS oturum anahtarlarını üreten ilkelin aynısıdır. Birçok çevrimiçi üretecin hâlâ kullandığı Math.random() ise tahmin edilebilir bir sözde rastgele üreteçtir ve asla bir güvenlik token'ı üretmemelidir.

Token'ım sizin sunucunuza gönderiliyor mu?

Hayır. Üretim tamamen senin tarayıcında, Web Crypto API ile gerçekleşir. Ağ sekmesini açıp bir token üret: tek bir istek bile gitmez. Hiçbir şey kaydedilmez, saklanmaz veya iletilmez. Sonrasında token'ı paylaşmayı seçersen, sayfadan herhangi bir şey ayrılmadan önce tarayıcında şifrelenir.

Bir API key için hangi uzunluğu kullanmalıyım?

128 bit entropi; bu aracın API key modunun ürettiği şey tam olarak budur: senin önekin artı 32 onaltılık karakter. Pratikte tahmin edilemez ve Stripe, GitHub ile AWS'nin verdikleriyle aynı seviyededir. Bunun üzerine ancak belirli bir uyumluluk gereksinimi istiyorsa çık.

UUID v4 ile rastgele hex token arasındaki fark ne?

UUID v4, biçimi sabit rastgele bir token'dır: 36 karakter, dört tire ve sürüm ile varyant için ayrılmış altı bit, geriye 122 rastgele bit kalır. Veritabanındaki bir uuid sütunu gibi başka bir şey bu biçimi bekliyorsa onu kullan. Yalnızca bir sırra ihtiyacın varsa ve biçim sana kalmışsa düz hex veya Base64 kullan - aynı güçte daha kısadır.

Aynı anda birden fazla token üretebilir miyim?

Evet. Adedi 5, 10 veya 25 yap; her token bağımsız olarak üretilir. Tümünü kopyala, satır başına bir tane olacak şekilde kopyalar; çoğu seed betiği, .env dosyası ve parola yöneticisinin toplu içe aktarmada kabul ettiği biçim budur.

Bir iş arkadaşıma token'ı nasıl güvenle gönderirim?

Slack, e-posta veya bir talep kaydıyla değil - bunlar bir kopyayı süresiz saklar, dolayısıyla sonradan o kanala erişen herkes kimlik bilgisine de erişir. Token'ı şifreli ve kendiliğinden imha olan bir bağlantının arkasına koymak için Güvenli paylaş'ı kullan: tarayıcında şifrelenir, anahtar URL parçasında yolculuk eder ve sunucumuza hiçbir zaman ulaşmaz, sır ise okunduğu anda ya da süresi dolduğunda yok edilir.

Bir token'ı güvenli paylaşmak mı istiyorsun?

Tokenları Slack'e veya e-postaya yapıştırma. Yalnızca alıcının açabileceği şifreli, kendiliğinden imha olan bir bağlantıyla gönder.