web-dev-qa-db-ja.com

コンピューターを一意に識別する良い方法は何ですか?

クライアントが再販するためのデスクトップソフトウェアを開発しています。クライアントは、登録コードが唯一のコンピューターに固有になるようにソフトウェアを制限したいと考えています。

ネットワークカードのMACを使用する以外に、コンピューターを一意に識別する他の技術(WindowsとMac OS Xの両方で機能する)がありますか?

52
Paul Lefebvre

別の解決策は、ライセンステクノロジをドングルと共に使用することです。これは、ホストのUSBまたは別のI/Oポートに差し込む小さなデバイスで、ソフトウェアをアクティブ化するための一意の物理キーとして機能します。

3番目の解決策は、ライセンスマネージャーを提供することです。つまり、ソフトウェアが起動すると、ネットワーク上のサーバー(顧客のLANまたはインターネット経由で会社からアクセスされるサーバー)に照会し、顧客によるソフトウェアの使用が正当であることを検証します。これは「コンカレントライセンス」に適したソリューションであるため、顧客は多くのホストにソフトウェアをインストールできますが、限られた数のホストで同時に使用するためにライセンスを付与します。 FLEXnet Publisher は、ライセンス管理ソリューションの例です。

ネットワークカードのMACアドレスは、特定のホストで実行するソフトウェアのライセンスを取得した会社で前回働いたときに使用したソリューションです。

ただし、この種のライセンスを行う場合、顧客のライセンスを追跡するために継続的な管理作業になることを予測する必要があります。数百人の顧客がいると、キーを変更するリクエストで電話をかける頻度に驚くでしょう。

「サーバーをギガビットネットワークアダプターにアップグレードしましたが、新しいアダプターのMACアドレスが異なるため、ライセンスが機能しなくなりました。」

または、顧客がマシン全体を交換し、新しいマシンでソフトウェアを実行するには更新されたライセンスが必要になる場合があります。私は私が働いていた会社でこれらの電話をほぼ毎日受けました。

また、新しいキーを提供した場合、古いコンピューター(またはネットワークアダプター)でソフトウェアの使用を停止することを顧客に信頼する必要があります。そもそも彼らがライセンスに従うことを彼らに信用できなかった場合、彼らが古い鍵を捨てることをどのように信用できるでしょうか?

この管理アクティビティをサポートする方法を計画していない場合は、この方法で製品のライセンスを取得しないでください。とにかく協力してくれる良き顧客だけに不便をかけるでしょう。

38
Bill Karwin

最良の方法は、WindowsでC#を使用してUUIDを取得することです

Windowsマシンを一意に識別する最良の方法

public string GetUUID()
{
    var procStartInfo = new ProcessStartInfo("cmd", "/c " + "wmic csproduct get UUID")
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };

    var proc = new Process() { StartInfo = procStartInfo };
    proc.Start();

    return proc.StandardOutput.ReadToEnd().Replace("UUID", string.Empty).Trim().ToUpper();
}
10

ここでは悪魔の擁護者を演じ、このようなことはおそらく「パブリック」で議論するのに最適なものではないことを伝えます。

そうは言っても、他の人が何をしたかを見て、それを改善する(またはその一部を取る)可能性があります。あなたが言ったように、MACアドレスはおそらく使用しても大丈夫です。 Windowsおよび他のプログラムはハードドライブ情報(シリアル番号)を使用すると聞きました- このサイト によると、Windows Activationは10種類のアイテムをチェックし、それらを一意のキーにします。

10
Nicholas H

私がいじるアイデアは、ハードウェアに関連するいくつかのシリアル番号または一意のIDを使用して、それらを一緒にハッシュすることです。

アップグレードされるもの:-メモリ-MAC(なりすまし、USBアダプタのプラグインなど)

頻繁にアップグレードされないもの:-CPU -BIOS -Motherboard

WMICを使用すると、情報を取得するのに最適な方法になる可能性があります。最初の優先選択として頻繁に変更されないものを取得することから始めます。生成に使用する少なくとも2つのシリアル番号またはデバイスをフィンガープリントできるようにしたいと思います登録キー。

wmic cpu get DeviceId /format:value

これによりCPU IDが取得され、次のコマンドを実行できます。

1-CPU(cpu:DeviceID)2-マザーボード(baseboard:serialnumber)3-BIOS(bios:serialnumber)

少なくとも2つの値が入力されていない場合は、取得します

4-ネットワークアダプター-(nic:MACAddress)5-RAM-(memphysical:SerialNumber)

ビジネスロジックに応じて、最初の2つのシリアル番号を使用して登録番号を作成できます。常に同じ順序に従う場合、再インストール時に登録番号は引き続き機能しますが、デバイスが変更されたりユーザーがセカンダリコンピューターにIDの変更をインストールして、登録番号を無効にします。技術サポートコールの量を減らすために、指紋をとる最小限のハードウェアが頭痛を最小限に抑え、アップグレードする可能性が最も低いアイテムを指紋化しようとすると、頭痛がさらに軽減されます。私の好みは上記の順序です。

Diffie-Hellmanキー交換スキームを使用して、ユーザーにハードウェアIDをペイロードとしてプライベート/プーリックキーペアを生成させ、この情報を登録サーバーに渡して、登録サーバーが公開/秘密キーを使用してペイロードを復号化し、登録キーを計算してエンドユーザーに戻ります。私は、JWTを使用して、JWTのペイロードに含まれる公開鍵との間でやり取りすることを好みます。それが役に立てば幸いです。

UUIDは上記で言及されており、windows cmd.exeから以下のコマンドを使用して取得できます。

wmic csproduct get UUID /format:value      

免責事項これらのコマンドはWindows 2000以降でのみ動作しますが、確認する必要があります。2000より下のシステムで利用できるかもしれませんが、その時点ではそれらのデバイスをサポートしないようにしています。がんばろう。

Macの場合:

system_profiler | grep "Serial Number (system)"

Linux(debian)の場合:

Sudo dmidecode -t system | grep "Serial Number"

dmidecodeおよびsystem_profilerには、Windowsのwmicと同様のシリアル番号を取得できる他のコンポーネントがあります。私はMacでは動作しないので、正確な仕様のリストを確認することはできませんが、3つすべてのコマンドがアクセスできるパーツのシリアル番号のLCD(最小公分母))のリストを作成しますアップグレードまたは変更される可能性が最も低い部分にまとめられ、グルーミングされます。その後、ハッシュされた上位2〜3の数字の組み合わせにより、一意のマシンIDが作成されます。オペレーティングシステムが更新されたデバイス。

6

MACアドレスを使用してリクエストキーを生成し、ユーザーにクライアントへの登録を要求するだけです。クライアントには、そのリクエストキーを取得し、ユーザーがソフトウェアのアクティベーションに使用できるアクティベーションキーを生成する特別なアプリケーションがあります。アクティベーションが完了すると、ソフトウェアは機能し、機能するだけです。たまに確認のために電話をかけたりする必要はありません。

それが本当の要件だった場合です。私の最初の仕事は、これが悪い考えだとクライアントに納得させることです。

理由は、これらのスキームが実際にneverであるため、コードがクラックされるのを防ぐためです。しかし、彼らはあなたの本物の顧客の生活をより困難にします。真の顧客を彼らの目標を達成することのないスキームで悩ませる他の業界を考えるのは難しいと思います(もちろん、政府サービス以外:-)。

mustこれを行う場合、契約上の義務を満たすためにトークンの努力をするだけです(ただし、クライアントにこれを伝えないでください)。 MACアドレス(または、$DEITY禁止、コンピューターにはネットワークカードがありません)リクエストキーとして、プログラムを使用してXORだけでASCII文字列でアクティベーションキーを取得し、ネットワークカード(またはマザーボード)を変更するだけでソフトウェアを無効にしたくないので、両方のキーを保存します-彼らはまだ同じコンピューターとしてそれを見て幸せではないでしょうソフトウェアが機能しなくなった場合。

あなたのコードは関係なくクラックされます(プログラムがゴミである場合を除き、そうではありません)-この方法は、クライアントの会社が何らかの理由で応答しなくなった場合に、ソフトウェアを別のマシンに移動する手段を提供します(サポートを停止します) 、廃業など)。

ハードウェアのビットの一意性に依存するallスキームの主な問題は、顧客がハードウェアのビットを変更することを選択できることです。

  • ディスクの内容をより大きなハードディスクにゴースト化すると、HDシリアル番号が変更されます。
  • cPUシリアル番号を使用するということは、最新のIntel bigmutha CPUにアップグレードしてソフトウェアを強制終了することを意味します。
  • mACアドレスを使用すると、NICを変更できなくなります。

これらはすべて、これらの値を使用してインストール時にキーを作成し、6か月後の変更された値ではなく、そのキーに対してのみチェックすることで修正できます。つまり、リクエストとアクティベーションの値を保存する必要がありますが、アップグレードでは、ユーザーがソフトウェアを再アクティベートするプロセスを経る必要はありません。私を信じて、彼らはあなたがそれをしなければならないことを軽deするでしょう。

5
paxdiablo

コンピューターが最終的に交換できる多くの部品で構築されていると仮定した場合、コンピューターを一意に識別する確実な方法はありません。

一部のハードウェア部品-MACアドレス、HDDディスクシリアル番号、マザーボードシリアルなど-は、いくつかの優れた「一意性」の原因ですが、ご存知のように、クライアントがライセンスが依存する部品をアップグレードすることを決定した場合...いくつかの顧客サポート。また、一部のパーツはスプーフィングされる可能性があることに留意してください(MACはそれらの1つです)。

オンラインライセンスチェックは別の良い方法です。サーバー側ですべてを管理し、独自のルール(クライアント/インストールごとのライセンス数、同時実行性など)を定義することもできますが、注意すべき重要なことは接続を確立できませんか?

4
J.C. Inacio

レジストリを開き、に移動します

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

「MachineGuid」というキーを探します。このキーは、Windowsのインストール中に一意に生成され、ハードウェアスワップに関係なく変更されません(OSがインストールされている起動可能なハードドライブの交換は除きます)。つまり、OSごとにインストールを追跡し続ける場合、これは別の選択肢です。 Windowsを新たに再インストールしない限り、変更されません。

2
Telson Alva

MotherBoard固有のシリアル番号を使用してはどうですか?

2
user2912991

ユーザーが1回入力する必要があるシリアルキーを作成できます。ユーザーのメールアドレス([email protected]など)を含める必要があります。これにより、多くの人々がそれを改ざんしたり、他の人に渡そうとするのを防ぐことができます。アクティベーション中に、ソフトウェアはシリアルキーが存在するかどうかをオンラインデータベースと照合する必要があります。

1
tmighty

私が見た限り、CPUにシリアル番号が刻印されていました。この情報(PSN、Pentiumシリアル番号)は廃止されました。情報はまだ存在する可能性がありますが、少なくともP3の世界では消えていました。また、ホストに使用されるメインインターフェイスのNICでのMACアドレスの明らかな選択は、実際の可能性として考慮されるべきだと思います。クライアントがイーサネットインターフェイスの存在を期待していない場合彼らが販売するホスト。

1
Suroot

これについていくつかの経験があります。私のソリューションでは、製品をクライアントに販売するときにサービスキーを発行します。

クライアントがアプリケーションをインストールするときに、クライアントマシンのマザーボードシリアルを読み取ってキーを生成します。クライアントは、製品をアクティブ化するために、サービスキーとインストール時に生成されたキーを組織に電子メールで送信することになっています。

アクティベーションキーの発行時に、組織で管理アプリケーションを維持します。特定のサービスキーのキーに対してアクティベーションキーを1つだけ提供します。

コピーの数を販売し、問題なく実行されます。しかし、その後、マザーボードのシリアル番号を提供しないコンピューターを見つけました。これらのマシンは、マザーボードのシリアル番号としてnull値を返します。それでもこの問題を修正しようとしています。

1
gihan

あなたはサードパーティのライセンスユーティリティを検討するかもしれません。これはおそらくこの「正しい」権利を得るだけでなく、要件が変更された場合に追加のオプションを提供します(そして常にそうではありませんか?)。特定の名前を名前で言及しますが、実際にはあまり詳しくありません。

1
Ðаn

aN、ハードドライブ、proc、ramなどが焼き付けられているものをハッシュする方法はどうでしょうか。このハッシュは、部品が交換されるまでコンピューターに残ります。

1
none

または、単にアクティベーションコードを持たず、EULAに書かれた監査権限を持ち、時々監査する権利を行使することもできます。

オラクルにとって素晴らしい作品です。

0
troy

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

「MachineGuid」キーは、Windowsのインストール中に一意に生成され、ハードウェアスワップに関係なく変更されません(OSがインストールされている起動可能なハードドライブの交換を除く)。これについてはわかりません。

私の提案

そのMachineGuid、ハードディスクのシリアル番号、マザーボードのシリアル番号、およびUUIDを使用できます。一緒にSHA 256または他のHASH関数を使用してHASHします。

[〜#〜] uuid [〜#〜]-wmic csproduct get UUID

MachineGuid-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

ハードディスクシリアル番号-wmic diskdrive get serialnumber

BIOSシリアル番号-wmic bios get serialnumber

マザーボードのシリアル番号-wmic baseboard get serialnumber

0
varshanbp