Soru: Her ağ istemcisi için benzersiz bir kimlik bulmalıyım, şöyle ki:
Biraz açıklama ve biraz da hikaye:
Bu soru, temelde asırlık bir sorudur, ayrıca bu alanda kullanılan mekanizmaların bazıları burada belirtildiği gibi, yazılım kopya koruması konusuna da değinmektedir. Bu noktada bir kopya koruma programı aramayacağımı açıkça belirtmeliyim. Lütfen, okumaya devam et. :)
Yerel bir ağda çalışması gereken bir istemci-sunucu yazılımı üzerinde çalışıyorum. Çözmem gereken sorunlardan biri, ağdaki her benzersiz istemciyi tanımlamak (çok fazla sorun değil), böylece her özel istemciye belirli özellikleri uygulayabilir, belirli özellikleri dağıtım ömrü boyunca bu özellikleri koruyabilir ve uygulayabilirim. istemcisi.
Bir çözüm ararken aşağıdakilerin farkındaydım:
Bu tür bir sorun için bariz seçenek BIOS tanımlayıcılarını bulmak olacaktır (aynı anakart modelleri ile benzersiz olsa bile% 100 emin değiliz), çünkü güvenebileceğim tek şey kopyalanmıyor, klonlayarak aktarılıyor. ve bu değiştirilemez (en azından bazı kullanıcı alanı programları kullanılarak değil). Geriye kalan her şey ya güvenilir olmadığından (MAC klonlama, herhangi biri mi?) Ya da çok talep edici (konfigürasyon değişikliklerine karşı çok hassas olduğu için) başarısız olur.
Sormak istediğim soru şu; bunu doğru yapıyorum, mimarlık açısından mı? Belki de başarmam gereken görev için daha iyi bir araç var.
Aklımdaki bir diğer yaklaşım, bir sunucunun bağlı müşteri kimlikleri için dahili bir arama tablosu tuttuğu (herhangi bir anda tamamen yazılım tabanlı ve benzersiz olmayan) ve müşteriye bildirdiği bir el sıkışma mekanizmasına benzer bir şeydir. Bağlantı sırasında kopya bir kimlik sağlanmışsa, el sıkışma sırasında farklı bir kimlik belirir. Maalesef bu yaklaşım, ömür boyu belirli müşteriye nitelik bağlamaya yönelik gereksinimlerden biriyle iyi bir şekilde oynamıyor.
Bana göre gereksinimlerinize karşılık gelen benzersiz bir kimlik belirlemelisiniz. Bu kimlik sizin için önemli olan bilgilerden (bazı yazılım ve donanım bileşenleri hakkında) hash (MD5, SHA1 veya SHA512 gibi) olarak oluşturulabilir.
Özel anahtarınızla böyle bir hastayı imzalarsanız ve yazılımınız başlangıçta anahtarın ( imzalı hash değeri ) imzalı olduğunu doğrularsa (yalnızca yazılımınızla birlikte ortak anahtarın yüklenmesi gerekir) çözümünüzü daha güvenli hale getirebilirsiniz . Birisi, farklı çevrimiçi hizmetler ile bu tür bir çözümü genişletebilir, ancak kurumsal müşteriler çevrimiçi hizmetleri o kadar hoş bulmazlar.
Aradığın şey Windows WMI . Anakart kimliğini (aynı anakart genelinde is benzersiz) ya da birçok başka benzersiz tanımlayıcı türünü elde edebilir ve bir UHID oluşturmak için akıllıca ekilmiş bir işlevle karşılaşabilirsiniz. Ben sadece bir kısaltma yaptım mı?
Ve özellikle Anakart (BIOS) Kimliğini almak için arıyorsanız:
WMI class: Win32_BIOS Namespace: \Root\Cimv2
Düzenle: Bir dil belirtmediniz (ve C++ 'ı varsaydım), ancak bu Java (bir COM sürücüsü ile) ve herhangi bir .NET dilinde yapılabilir.
Birçok program, bir lisans kodu oluşturmak için hostId'yi kullanır (FlexLM'e dayalı olanlar gibi). İşletim sistemine bağlı olarak Matlab'ın neler yaptığına bir göz atın:
Ayrıca bu soruya bir göz atın:
Ayrıca bazı programları lisanslarını sabit sürücünün seri numarasına dayandırırken gördüm, belki de bu değişmesi daha az olasıdır. Bazıları ethernet kartınızın MAC'sini kullanmanızı önerebilir, ancak bu yeniden programlanabilir.
MAC VE SES KİMESİNE GÜVENMİYORUM !!!!!
Doğrulama sunucusuna bağlantı, size birçok sıkıntıya da neden olabilir, çünkü:
* Müşterileriniz her zaman İnternete bağlı olmayabilir.
* Müşterileriniz, doğrulama sunucusuna bağlanabilmesi için programınıza girmeleri gereken özel ayarlarla (yönlendirici/NAT/proxy/ağ geçidi) bağlantı kurabilir.
* birkaçı hariç tüm programları engelleyebilecek bir güvenlik duvarının arkasında olabilirler (benim durumum). Bazı durumlarda güvenlik duvarı kontrol altında olmayabilir (MOST kurumsal kullanıcıları için geçerlidir)!
Güçlü bir korumaya ihtiyacınız varsa, donanım kimliğine güvenmeniz gerekir.
İşte size tam olarak ne istediğinizi sunan bir kütüphane: Bir bilgisayarın donanım kimliğini okumak için güvenilir bir yol. Diğerleri arasında, hem benzersiz hem de hiçbir zaman değişmeyecek olan CPU Kimliğini ve HDD Kimliğini okuyabilir (evet, bilgisayarı biçimlendirdikten ve Windows'u yeniden yükledikten sonra bile).
Gerçekten de kimliklerin benzersiz ve kalıcı olduğunu gösteren derlenmiş bir demo uygulaması var: http://www.soft.tahionic.com/download-hdd_id/index.html
Ayrıca birçok programlama dili için demo kaynak kodu vardır: http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html
Kütüphanenin kullanımı tek bir işlevi çağırmak kadar kolaydır (tabii ki DLL belleğe yüklendikten sonra).