Temel olarak, üç gereksiniminiz var:
- aynı anahtarı birden fazla müşteri örneği için kullanmak kolay olmamalıdır,
- yeni geçerli anahtarlar oluşturmak kolay olmamalıdır ve
- meşru bir müşterinin anahtarını çalmak kolay olmamalıdır.
İlk bölüm oldukça basit olmalı: iki oyuncunun aynı sunucuya aynı anda aynı anahtarla giriş yapmasına izin vermeyin. Ayrıca, sunucuların oturum açmış kullanıcılar hakkında bilgi alışverişinde bulunmasını sağlayabilir veya paylaşılan bir kimlik doğrulama sunucusuyla iletişim kurabilirsiniz, böylece aynı anahtarı farklı sunuculardaki farklı oyuncular için aynı anda kullanmak da başarısız olur. Ayrıca, muhtemelen anahtar kullanımın şüpheli kalıplarını aramak isteyeceksiniz ve bir anahtarın sızdırıldığını tespit ederseniz, yasaklı anahtarların listesine ekleyin.
İkinci kısım için, bir yol basitçe verilen tüm geçerli anahtarların bir veritabanını tutmaktır. Anahtarlar yeterince uzun (örneğin, 128 bit veya daha fazla) ve rastgele seçildikçe (güvenli bir RNG kullanarak), geçerli bir anahtar tahmin etmeyi başarabilenlerin oranları esasen sıfırdır. (Hatalı zorlama ile geçerli anahtarları bulma girişimlerini durdurmak için başarısız oturum açma girişimlerinde bir sınırlama oranı kullanıyorsanız, çok daha kısa anahtarlar bile güvenli olabilir.)
Alternatif olarak, herhangi bir benzersiz tanımlayıcı alarak ve ona gizli bir ana anahtar kullanılarak hesaplanan bir mesaj doğrulama kodu ( HMAC gibi ) ekleyerek anahtarlar oluşturabilirsiniz . Yine, MAC yeterince uzun olduğu sürece, ana anahtarın, herhangi bir ID için geçerli bir MAC tahmin edememesini bilmeyen bir kimsenin, ihmal edilebilir olması ihtimali yüksektir. Bu yöntemin bir avantajı, bir anahtar veri tabanına olan ihtiyacı ortadan kaldırmanın yanı sıra, tanımlayıcının herhangi bir benzersiz dize olabilmesi ve anahtarın verildiği müşteri ile ilgili bilgileri kodlayabilmesidir.
MAC kullanımı ile ilgili bir sorun, resmi oyun sunucularının (veya en azından kimlik doğrulama sunucusunun) MAC'yi doğrulamak için ana anahtarı bilmesi gerektiğidir; Bu riski azaltmanın bir yolu, her bir ID için farklı ana anahtarlar kullanarak birkaç MAC hesaplamak olabilir, ancak ana anahtarlardan yalnızca birini oyun sunucularında depolamak olabilir. Bu şekilde, eğer o ana anahtar sızdırılmışsa ve sahte kimlikler oluşturmak için kullanılmışsa, onu iptal edebilir ve başka bir ana anahtara geçebilirsiniz. Alternatif olarak, MAC'leri , ana anahtarın yalnızca genel yarısı kullanarak doğrulanabilen dijital imzalarla değiştirebilirsiniz .
Üçüncü kısım için, bir yaklaşım, alıcının gerçekten meşru bir resmi sunucu olduğunu doğrulamaksızın müşterinin anahtarını kimseye göndermeyeceğinden emin olmaktır. Örneğin , giriş işlemi için SSL / TLS (veya DTLS ) kullanabilir , oyun sunucularınız için özel sertifikalar verebilir ve yalnızca sizin tarafınızdan verilen müşteri güven sertifikalarını alabilirsiniz. Uygun bir şekilde, TLS kullanımı, müşteri anahtarlarını (ve diğer kimlik doğrulama verilerini) gizli ortaklardan, örneğin halka açık WLAN'lardan da koruyacaktır.
Ne yazık ki, bu yaklaşım üçüncü taraf sunucuların istemese bile istemci anahtarlarını doğrulamalarına izin vermez. Bunun için üçüncü taraf oyun sunucularının kullanabileceği bir resmi kimlik doğrulama sunucusu kurarak, örneğin müşterinin kimlik doğrulama sunucusunda oturum açması ve giriş yapmak için kullanabilecekleri bir kez rastgele bir simge almasıyla çalışabilirsiniz. oyun sunucusu (daha sonra bunu doğrulamak için belirteci kimlik doğrulama sunucusuna gönderir).
Alternatif olarak, müşterilerinize gerçek müşteri sertifikaları veya benzeri bir sertifika da verebilirsiniz. İstemci sertifikası kimlik doğrulamasını destekleyen (önerilen) mevcut bir protokolü (TLS gibi) kullanabilir ya da kendinizinkini uygulayabilirsiniz, örneğin:
- İstemci sertifikası, keyfi bir kimlik dizesi, bir genel / özel anahtar çifti ve bir ana anahtar kullanan kimliğin ve genel anahtarın dijital imzasından oluşur.
- Giriş yapmak için müşteri kimliğini, ortak anahtarını ve imzasını gönderir. Sunucu, istemcinin özel anahtarla imzaladığı (anahtarı bildiğini ispatlamak için) müşterinin özel anahtarla imzaladığı (anahtarı bildiğini ispatlamak için) benzersiz bir sorgu dizesiyle (tercihen bir sunucu kimliği ve bir zaman damgası dahil) yanıtlar.
- Sunucu, her iki imzayı da denetleyerek, ID + genel anahtarının meşru bir müşteri anahtarı oluşturduğunu (ana anahtarla imzalandıklarından beri) ve müşteri anahtarının gerçekten müşteriye ait olduğunu kanıtlar (müşteri, sunucunun özel ile olan mücadelesini imzalayabildiğinden beri) tuşu).
(Bu protokol, müşterinin bir sunucu kimliği ve bir zaman damgasından oluşan "meydan okumayı" oluşturmasını ve imzalamasını sağlayarak daha da basitleştirilebilir. Elbette, sunucunun kimliğin ve zaman damgasının geçerli olduğunu doğrulaması gerekir. bu basit protokol kendi başına bir aracı saldırganın müşterinin oturumunu ele geçirmesini engellemeyecek, ancak müşterinin gelecekteki girişler için gerekli olan özel anahtarını edinmelerini önleyecektir.)