Lisans anahtarı, lisanslama sisteminizin her müşterinin gördüğü tek parçasıdır. Müşteriler onu bir e-postadan kopyalar, uygulamanıza yapıştırır, destek ekibine sesli okur, hatta bazen bir ekran görüntüsüne bakarak elle yazar. İyi bir lisans anahtarı formatı bunların hepsini kolaylaştırır ve yine de tahmin edilemez. Kötü bir format ise yazım hatalarına, destek taleplerine ve en kötü durumda başkalarının üretebileceği anahtarlara yol açar.
Bu rehberde bir anahtar formatının arkasındaki kararları ele alıyoruz: bir anahtarın ne kadar rastgelelik içermesi gerektiği, karakterlerin okunaklı olması için nasıl gruplanacağı, hangi karakterlerin dışarıda bırakılacağı, sabit ön eklerin nasıl kullanılacağı ve qPapel Auth'taki anahtar maskesi (keymask) profillerinin, sattığınız her üründe formatı nasıl tutarlı tuttuğu.
İyi bir lisans anahtarı formatı nasıl olmalı?
Bir lisans anahtarı formatının dört görevi vardır ve bu görevler birbirini farklı yönlere çeker.
- Tahmin edilemez olmalı. Kimse kombinasyonları deneyerek ya da bir örüntü yakalayarak geçerli bir anahtar üretememeli.
- Okunaklı olmalı. Müşteriler anahtarı hatasız kopyalayabilmeli, yazabilmeli ve sesli okuyabilmeli.
- Tanınabilir olmalı. Siz ve destek ekibiniz bir anahtarın hangi ürüne veya sürüme ait olduğunu bir bakışta anlayabilmeli.
- Anlamsız olmalı. Anahtar; sipariş numarası, tarih ya da müşterinin e-posta adresi gibi bir saldırganın işine yarayabilecek hiçbir bilgi içermemeli.
Eski şemaların çoğu tam da son maddede çuvalladı. İstemcinin içindeki bir algoritmayla doğrulanan, yani belirli karakterlerinin bir formülü sağlaması gereken anahtarlar, tersine mühendislikle çözülüp bir anahtar üreticisine (keygen) dönüştürülebilir. Formülü ele geçiren kişi sınırsız sayıda geçerli anahtar üretebilir ve hiçbir yasak listesi buna yetişemez. Modern bir anahtar ise yalnızca rastgele bir tanımlayıcıdır; geçerli olup olmadığına sunucudaki kayda bakılarak karar verilir.
Bir lisans anahtarı ne kadar entropi içermeli?
Entropi, bir şeyin ne kadar öngörülemez olduğunu bit cinsinden ölçer. Rastgele seçilmiş karakterlerden oluşan bir anahtar için hesaplaması kolaydır: Rastgele karakter sayısını alfabe boyutunun log2 değeriyle çarparsınız. 32 karakterlik bir alfabe karakter başına tam 5 bit verir; dolayısıyla 16 rastgele karakter 80 bit eder.
| Alfabe | Karakter başına bit | 80 bit için karakter | 128 bit için karakter |
|---|---|---|---|
| Hex (0–9, A–F) | 4 | 20 | 32 |
| Crockford Base32 (32 sembol) | 5 | 16 | 26 |
| Büyük harfler ve rakamlar (36) | ≈5,17 | 16 | 25 |
| Büyük-küçük harfler ve rakamlar (62) | ≈5,95 | 14 | 22 |
Peki ne kadarı yeterli? Online doğrulanan anahtarlar için yaklaşık 80 bit, tahminle ulaşılabilecek her sınırın çok ötesindedir. 2⁸⁰, yani kabaca 1,2 × 10²⁴ olası anahtar vardır. Bir milyon anahtar dağıtmış olsanız bile tek bir rastgele tahminin gerçek bir anahtarla eşleşme olasılığı yaklaşık 10¹⁸'de birdir ve her tahmin, sunucunuzun hız sınırına tabi tutup kaydedebileceği bir istektir.
Güvenlik payı istiyorsanız, anahtarların bir gün sunucu olmadan da kontrol edilmesi ihtimali varsa ya da kriptografik token'larda kullanılan marjı tercih ediyorsanız 128 bit rahat bir seçimdir. Crockford Base32 ile bu, 80 bite göre yalnızca on karakter daha uzun bir anahtar demektir. Çoğu ürün için ikisi arasındaki her değer sağlam bir tercihtir. Kesin sayıdan daha önemli olan iki kural var:
- Kriptografik olarak güvenli bir rastgele sayı üreteci kullanın.
rand(),System.Randomya da zamanla tohumlanan herhangi bir üreteç tahmin edilebilir. Platformunuzun güvenli üretecini kullanın; örneğin .NET'teRandomNumberGenerator. - Yalnızca rastgele kısmı sayın. Sabit ön ek, ayırıcılar, sağlama karakteri ya da sıra numarası entropiye hiçbir şey katmaz. Hesabı yalnızca rastgele karakterler üzerinden yapın.
// Illustrative: build a key body from Crockford Base32 with a secure RNG.
using System.Linq;
using System.Security.Cryptography;
static class KeyFormat
{
const string Alphabet = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"; // no I, L, O, U
public static string NewKeyBody(int length = 16, int group = 4)
{
var chars = new char[length];
for (int i = 0; i < length; i++)
chars[i] = Alphabet[RandomNumberGenerator.GetInt32(Alphabet.Length)];
return string.Join("-", Enumerable.Range(0, length / group)
.Select(g => new string(chars, g * group, group)));
}
}
// KeyFormat.NewKeyBody() returns something like "7KQ2-M9XD-4TPR-H6WN" (80 bits)Lisans anahtarlarını kolay okunur ve yazılır hâle getirmek
Karakterleri dörderli veya beşerli gruplayın
İnsanlar kısa parçaları uzun dizilerden çok daha güvenilir şekilde okur ve kontrol eder; telefon ve kart numaralarının gruplanmasının nedeni de budur. Anahtarlar da farklı değildir. 7KQ2M9XD4TPRH6WN ile 7KQ2-M9XD-4TPR-H6WN aynı 80 biti taşır, ama ikincisini bir e-postayla karşılaştırmak ya da telefonda okumak çok daha kolaydır.
- Tirelerle ayrılmış dörder veya beşer karakterlik gruplar kullanın.
- Tek bir harf biçimi, genellikle büyük harf kullanın ve girişte büyük-küçük harf ayrımı yapmayın.
- Doğrulamadan önce boşlukları ve tireleri temizleyin; böylece fazladan boşlukla yapıştırılan bir anahtar da çalışır.
- Anahtarları teslimat e-postasından uygulamanızın aktivasyon ekranına kadar müşterilerin gördüğü her yerde eş aralıklı (monospace) bir yazı tipiyle gösterin.
Birbirine benzeyen karakterleri çıkarın
Bazı karakterler yaygın yazı tiplerinde, düşük çözünürlüklü ekran görüntülerinde ya da sesli okunurken kolayca karıştırılır. Her karışıklık başarısız bir aktivasyon, çoğu zaman da bir destek talebi demektir.
| Benzer karakterler | Yaygın çözüm |
|---|---|
| 0 ve O | O'yu çıkarın, girişte O'yu 0 olarak okuyun |
| 1, I ve l | I ve L'yi çıkarın, ikisini de 1 olarak okuyun |
| 5 ve S, 2 ve Z | Anahtarlar elle yazılıyorsa her çiftten birini çıkarın |
| 8 ve B | Anahtarlar sık sık ekran görüntüsünden okunuyorsa birini çıkarın |
Crockford Base32 denenmiş ve sağlam bir başlangıç noktasıdır: rakamlarla birlikte I, L, O ve U dışındaki büyük harfler. Sonuncusu, yanlışlıkla kelime oluşmasın diye çıkarılmıştır. Alfabe 32 sembolü korur, yani her karakter yine tam 5 bittir. Bunun dışında çıkardığınız her karakter biraz entropiye mal olur; kaybı da anahtara bir karakter daha ekleyerek telafi edersiniz.
Sabit ön ekler: anahtarı zayıflatmadan etiketlemek
Sabit ön ek, her anahtarın başında yer alan PRO-, TEAM- veya TRIAL- gibi kısa ve değişmeyen bir etikettir. Güvenliğe hiçbir katkısı yoktur, ama anahtarlarla her gün uğraşan insanların işini kolaylaştırır.
- Destek ekibi anahtarı anında tanır. Bir müşteri destek talebine anahtarını yapıştırdığında, hiçbir kayda bakmadan ürünü ve sürümü bilirsiniz.
- Müşteriler anahtarlarını birbirinden ayırt eder. İki ürününüze ya da hem deneme hem de tam lisansa sahip biri, hangi anahtarın hangisi olduğunu bilir.
- Raporlar okunaklı kalır. Ürün veya sürüm başına bir ön ek, dışa aktarımlarda, loglarda ve bayilerden gelen tablolarda anahtarları tanımayı kolaylaştırır.
Ön eki herkese açık bir bilgi olarak düşünün. Entropiye sıfır katkı sağlar; bu yüzden rastgele kısım tek başına yeterince uzun olmalı ve ön ek hiçbir zaman bir şeye karar vermemelidir. PRO- ile başlayan bir anahtar, ilk dört karakteri yüzünden değil, sunucudaki kayıt öyle dediği için Pro anahtarıdır. Kişisel veya sıralı verileri anahtarların tamamen dışında tutun: Bir sipariş numarası ya da tarih, saldırgana kaç anahtar olduğunu ve ne zaman üretildiklerini söyler.
Örnek lisans anahtarı formatlarının karşılaştırması
Çoğu ürün, kendini kanıtlamış birkaç kalıp arasından seçim yapabilir. Tabloda, aksi belirtilmedikçe her X, Crockford Base32'den rastgele seçilmiş bir karakterdir.
| Format | Rastgele kısım | Entropi | Uygun olduğu durum |
|---|---|---|---|
XXXX-XXXX-XXXX-XXXX | 16 Base32 karakteri | 80 bit | Çoğu masaüstü yazılımı |
PRO-XXXXX-XXXXX-XXXXX-XXXXX | 20 Base32 karakteri | 100 bit | Ön ekle ayrılan sürümler |
TRIAL-XXXX-XXXX-XXXX-XXXX | 16 Base32 karakteri | 80 bit | Destek ekibinin hemen tanıyacağı deneme anahtarları |
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX | 25 Base32 karakteri | 125 bit | Klasik ürün anahtarı görünümü, ekstra güvenlik payı |
| Gruplanmamış 32 hex karakter | 32 hex karakter | 128 bit | Yalnızca yapıştırılan anahtarlar |
Çoğu durumu iki kalıp karşılar. Müşteriler anahtarları elle yazıyorsa, gerektiğinde bir ön ekle birlikte dörder Base32 karakterlik dört grup kullanın. Anahtarlar yalnızca yapıştırılıyor ya da sistemler arasında aktarılıyorsa okunabilirlik daha az önemlidir ve daha uzun bir anahtarın hiçbir maliyeti yoktur. Deneme anahtarları kendi ön eklerini hak eder, çünkü destek ekibinin en sık gördüğü anahtarlar onlardır; deneme sürümlerinin ücretli dönemlerle nasıl bir arada çalıştığını yazılımlar için abonelik tabanlı lisanslama yazısında bulabilirsiniz.
qPapel Auth'ta anahtar maskesi profilleri
Anahtar maskesi (keymask), bir anahtar üreticisinin izlediği şablondur: Hangi konumların rastgele olduğunu, hangi karakterlerin sabit kaldığını ve ayırıcıların nereye geleceğini belirler. Maskeyi her seri için elle ayarlamak, formatların zamanla dağılmasının klasik yoludur: Bir ürünün anahtarları dörderli, diğerininki beşerli olur ve bir lansmanın ortasında ön ek unutulur.
V6.5 sürüm notlarında qPapel Auth'a eklenen özel anahtar maskesi profilleri bu sorunu çözer. Bir anahtar maskesini bir kez oluşturup profil olarak kaydeder, o profille anahtar ürettiğiniz her seferde kullanılacak sabit bir ön ek belirler ve maskeyi her defasında yeniden ayarlamadan kayıtlı profiller arasında geçiş yaparsınız. qPapel Auth, formatın yanı sıra ürettiğiniz anahtarların sürelerini ve aktivasyon limitlerini de ayarlamanıza olanak tanır.
Sabit ön ek
Her anahtarda yeniden kullanılır
Rastgele konumlar
Entropinin kaynağı
Ayırıcılar
Okunaklı gruplar
Kayıtlı ve yeniden kullanılabilir
Yeniden ayarlamadan geçiş
- 01
Her ürün için formatı belirleyin
Yukarıdaki tablolardan yararlanarak bir alfabe, uzunluk ve gruplama seçin. Birden fazla ürün, sürüm ya da deneme anahtarı satıyorsanız bir ön ek ekleyin.
- 02
Profil olarak kaydedin
Sabit ön ekinizle özel bir anahtar maskesi profili oluşturun ve ona ait olduğu ürünün veya sürümün adını verin.
- 03
Anahtarları profilden üretin
İster bir lansman, ister bir çekiliş, ister elle tanımlanan bir lisans olsun, anahtar ürettiğiniz her seferde maskeyi yeniden yazmak yerine kayıtlı profili seçin.
- 04
Doğrulamayı sunucuda tutun
Formatı ne olursa olsun anahtarlar PapelShip'in sunucularında kontrol edilir, ilk aktivasyonda alıcının donanımına bağlanır ve istediğiniz an durdurulabilir veya yasaklanabilir.
Bir profili değiştirmek yalnızca yeni anahtarların görünümünü değiştirir; daha önce dağıttığınız anahtarlar sunucuda ayrı kayıtlar olarak durur. Bu sayede yeni bir ana sürüm için formatı düzenlerken mevcut müşterilerinizden hiçbir şey yapmalarını istemeniz gerekmez. Teslimat ise ayrı bir adımdır: PapelShip'te ödenen bir sipariş anahtarını üretir ve yazılım lisanslarını online satma rehberinde anlatıldığı gibi hem ekranda hem de e-postayla teslim eder.
Lisans anahtarı formatında sık yapılan hatalar
- İstemcide kontrol edilen algoritmik anahtarlar. Uygulamanız geçerli bir anahtarı geçersiz olandan çevrimdışı ayırt edebiliyorsa bu kural çıkarılıp bir anahtar üreticisine dönüştürülebilir.
- Ön eki güvenlik saymak. 24 karakterlik bir anahtarın 12 karakteri ön ekse rastgele karakter sayısı yalnızca 12'dir ve hesaba katılan da yalnızca onlardır.
- Tahmin edilebilir üreteçler. Zamanla tohumlanan ya da kriptografik olmayan bir rastgele sayı üretecinden çıkan anahtarlar, aşağı yukarı ne zaman üretildiklerini bilen herkes tarafından yeniden üretilebilir.
- Anlam taşıyan içerik. Anahtarların içindeki sipariş numaraları, tarihler veya e-posta adresleri iş verilerinizi sızdırır ve anahtarları kısmen tahmin edilebilir kılar.
- Büyük-küçük harfe duyarlı doğrulama. Karışık harfli anahtarlar karakter başına daha fazla entropi taşır ama yazım hatalarına yol açar. Kullanıyorsanız müşterilerin bunları asla elle yazmak zorunda kalmamasını sağlayın.
- Zararsız girişleri reddetmek. Sondaki bir boşluk ya da eksik bir tire yüzünden anahtarı reddetmek, güvenliğe hiçbir katkı sağlamadan destek talebi yaratır.
- Her seri için farklı bir format. Tutarsız formatlar desteği yavaşlatır ve hata olasılığını artırır. Formatı bir kez kaydedin ve hep onu kullanın.
Format, anahtarları iyi yönetmenin yalnızca bir parçasıdır. Üretim, teslimat, yasaklar ve sızıntıya müdahale güvenli lisans anahtarı yönetimi yazısında, anahtarları bir makineye bağlamak ise HWID kilidi nedir? yazısında ele alınıyor. Planlar ve lisanslama özelliklerinin tamamı için qPapel Auth sayfasına göz atın.
Sıkça sorulan sorular
Formatı bir kez tasarlayın, sonra aklınızdan çıkarın
İyi bir lisans anahtarı formatı, etkisi uzun süren küçük bir karardır. Temiz bir alfabeden yeterince rastgele karakter seçin, insanların okuyabileceği şekilde gruplayın, desteğe yardımı olacaksa bir ön ek ekleyin ve önemli olan her şeyi sunucuda tutun. Ardından formatı bir profil olarak kaydedin; böylece o ürünün her anahtarı, kimsenin hatırlamasına gerek kalmadan aynı kurallara uyar.
Format netleştikten sonra dikkatinizi daha çok fayda sağlayacağı yerlere verebilirsiniz: anahtarları ödeme onaylandığı anda teslim etmeye, donanıma bağlamaya ve biri sızdığında hızla harekete geçmeye.
qPapel Security Team
Lisanslama ve yazılım koruması