2012-06-13 2 views
0

Я использую следующий код, чтобы получить процессор ID:Может ли идентификатор процессора использоваться для криптографического ключа AES?

System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor"); 
System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances(); 

foreach (System.Management.ManagementObject currentResult in theCollectionOfResults) 
{ 
    MessageBox.Show(currentResult["ProcessorID"].ToString()); 
} 

Является процессор ID уникальный идентификатор для каждого компьютера? Я хочу создать случайный уникальный номер для каждого компьютера, используемого в качестве криптографического ключа AES. Я не хочу использовать MAC-адрес, потому что знаю, что MAC-адрес можно изменить.

+2

Возможный дубликат [WIN32_Processor :: Is ProcessorId Unique для всех компьютеров] (http://stackoverflow.com/questions/1101772/win32-processoris-processorid-unique-for-all-computers) – Jon

+3

Дополнительно: подумайте о том, что произойдет, если какой-нибудь аппаратный компонент, который вы используете для криптовального ключа, внезапно умрет. – Jon

+2

Почему бы просто не использовать 'Guid.NewGuid()'? Даже это не идеально, но если вы уже думаете о том, чтобы использовать что-то столь же легко извлекаемое, как CPUID, вы могли бы просто генерировать Guid и хранить его где-то; возможно, шифруя это с помощью некоторого закрытого ключа, известного только вашей программе. Но даже тогда у вас есть проблема, что программа может быть декомпилирована. –

ответ

0
  1. Идентификатор процессора не гарантированно будет уникальным для каждого процессора или гарантированно будет существовать вообще.
  2. Аппаратное обеспечение можно заменить - вы не можете изменить этот факт.

Предложения:
, если вам нужно, чтобы однозначно идентифицировать машину - это нормально использовать Id процессора или MAC-адрес или как на уникальность. (или любого другого связанного с аппаратным обеспечением номера). , но вы должны иметь в виду, что вы используете аппаратное обеспечение, а не пользователь, поэтому, если аппаратное обеспечение изменилось, это похоже на то, что кто-то, кого вы знаете, взял подтяжку лица, и теперь вы его не узнаете.

Если вам нужно определить пользователя (который, я думаю, лучше), просто позвольте ему выбрать имя пользователя и пароль.

Если вам нужно убедиться, что только один пользователь, ранее идентифицированный вами, использует ваше приложение, и вы боитесь, что он будет пиратским приложением. Единственный способ - иметь сервер/центральную точку.

0

Это плохое решение, потому что CPU должен поддерживать инструкции CPUID, и система может содержать более одного CPU.

 Смежные вопросы

  • Нет связанных вопросов^_^