it-swarm.dev

Benzersiz donanım kimliği oluşturmanın güvenilir yolu

Soru: Her ağ istemcisi için benzersiz bir kimlik bulmalıyım, şöyle ki:

  • i̇stemci yazılımı hedef bilgisayara yüklendikten sonra (ID) devam etmeli ve yazılım aynı bilgisayara ve aynı işletim sistemi kurulumuna yeniden kuruluysa devam etmelidir.
  • donanım yapılandırmasının birçok şekilde değiştirilip değiştirilmediğini değiştirmemelidir (anakartı değiştirmek hariç)
  • İstemci yazılımı kurulu olan sabit disk, aynı donanım yapılandırmasına sahip (veya mümkün olduğu kadar benzer) başka bir bilgisayara kopyalandığında, istemci yazılımı bu değişikliğin farkında olmalıdır.

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:

  • Windows etkinleştirme sistemi, donanım değişikliklerine son derece hassas olan bir tür ağır parmak izi mekanizması kullanır,
  • Disk görüntüleme yazılımı, tüm Birim ID'leri (formatlandığında her bölüme bağlı) ve kurulum işlemi sırasında, ilk çalıştırma sırasında veya kendiliğinden kesinlikle yazılım olan ve kayıt defterinde saklanan başka bir şekilde özel, benzersiz bir şekilde oluşturulan ID'ler kopyalar. sabit sürücüde, bu yüzden iki karıştırmak çok kolaydır.

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.

25
mr.b

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.

7
Oleg

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

Belgeler: http://msdn.Microsoft.com/en-us/library/aa394077(VS.85).aspx
Örnek kod: http://msdn.Microsoft.com/en-us/library/aa390423%28VS.85%29.aspx

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.

7
David Titarenco

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:

http://www.mathworks.com/support/solutions/en/data/1-171PI/index.html

Ayrıca bu soruya bir göz atın:

Unix benzeri bir sistemden benzersiz bir kimlik alma

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.

4
SystematicFrank

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).

0
Rigel