質問:次のようなネットワーク接続されたクライアントごとに一意のIDを考え出す必要があります。
説明と裏話:
この問題は基本的に古くからある質問であり、ソフトウェアのコピー防止のトピックにも触れています。その領域で使用されているメカニズムの一部がここで説明されているためです。この時点で、私はコピー防止スキームを探しているわけではないことを明確にする必要があります。読んでください。 :)
ローカルネットワークで動作するはずのクライアントサーバーソフトウェアを使用しています。私が解決しなければならない問題の1つは、ネットワーク内の一意の各クライアントを特定することで(それほど問題ではありません)、特定の属性をすべての特定のクライアントに適用し、特定のデプロイメントのライフタイム中にそれらの属性を保持および適用できますクライアント。
解決策を探していたとき、私は次のことを認識していました。
この種類の問題の明らかな選択は、BIOS識別子を見つけることです(ただし、これが同一のマザーボードモデルを通じて一意であるかどうかは100%確実ではありません)。これは、複製によって転送されず、複製によって転送される唯一の方法です。 、そしてそれを変更することはできません(少なくともいくつかのユーザースペースプログラムを使用することによっては)。それ以外のすべては、信頼性がない(MACのクローン作成など)、または要求が厳しすぎる(構成の変更に敏感すぎる)ために失敗します。
私が聞きたいサブ質問は、私はそれを正しく行っているのですか、アーキテクチャ的にですか?多分私が達成しなければならないタスクのためのより良いツールがあります...
私が考えていた別のアプローチは、ハンドシェイクメカニズムに似たものです。サーバーは、接続されたクライアントIDの内部ルックアップテーブルを維持し(特定の時点では完全にソフトウェアベースで一意ではない場合もあります)、クライアントに次のように伝えます。接続時に重複したIDが提供された場合、ハンドシェイク中に別のIDを考え出します。残念ながら、このアプローチは、存続期間中に属性を特定のクライアントに結び付けるための要件の1つではうまく機能しません。
自分の要件に対応する一意のIDを作成する必要があるようです。このIDは、重要な情報(ソフトウェアおよびハードウェアコンポーネントに関する情報)からハッシュ(MD5、SHA1、SHA512など)として作成できます。
このようなハッシュに秘密鍵で署名し、ソフトウェアが起動時に鍵(signed hash value)が署名されていることを確認すると、ソリューションをより安全にすることができます(公開鍵のみを一緒にインストールする必要があります)ソフトウェア)。さまざまなオンラインサービスでそのような種類のソリューションを拡張することはできますが、企業のクライアントはオンラインサービスをそれほどうまく見つけることができません。
あなたが探しているのは Windows WMI です。マザーボードID(isは、同じタイプのマザーボード全体で一意)または他の多くのタイプの一意の識別子を取得して、巧妙なシードを作成できますUHIDを生成する関数。おっと私は頭字語を作っただけですか?
また、マザーボード(BIOS)IDを取得するために特に探している場合:
WMI class: Win32_BIOS
Namespace: \Root\Cimv2
ドキュメント: http://msdn.Microsoft.com/en-us/library/aa394077(VS.85).aspx
サンプルコード: http://msdn.Microsoft.com/en-us/library/aa390423%28VS.85%29.aspx
Edit:言語を指定しなかった(そして私はC++を想定した)が、これはJava (COMドライバーを使用)、および.NET言語も同様です。
多くのプログラムは、(FlexLMに基づくもののような)ライセンスコードを構築するためにhostIdを使用します。手術システムに応じてMatlabが何をするかを見てください:
http://www.mathworks.com/support/solutions/en/data/1-171PI/index.html
この質問も見てください:
ハードドライブのシリアル番号に基づいてライセンスを取得しているプログラムもいくつか見ましたが、おそらくそれが変更される可能性はほとんどありません。イーサネットカードのMACの使用を提案する人もいますが、これは再プログラムできます。
[〜#〜] mac [〜#〜]
MACに依存しないでください!これまで。それは永続的ではありません。ユーザーは簡単に変更できます( 秒未満 )。
ボリュームID
ボリュームIDに依存しないでください!これまで。それは永続的ではありません。ユーザーは簡単に変更できます。ドライブをフォーマットするだけでも変化します。
[〜#〜] wmi [〜#〜]
WMIはサービスです。簡単に無効にすることができます。実際、私はそれを試してみましたが、多くのコンピュータで無効になっているか壊れている(はい、かなり頻繁に壊れています)ことがわかりました。
ライセンスサーバー
検証サーバーへの接続は、次の理由から多くのトラブルを引き起こす可能性があります。
*顧客が常にインターネットに接続しているとは限りません。
*顧客は、検証サーバーに接続するためにプログラムに入力する必要がある特別な設定(ルーター/ NAT /プロキシ/ゲートウェイ)で接続する場合があります。
*それらはファイアウォールの背後にある可能性があり、いくつか(私の場合)を除くすべてのプログラムをブロックします。場合によっては、ファイアウォールが制御されないことがあります(ほとんどの企業ユーザーに有効)。
*ライセンスサーバーをエミュレートするローカルの偽のWebサーバーにプログラムをリダイレクトするのは 超簡単 です。
ハードウェアデータ
強力な保護が必要な場合は、ハードウェアに依存する必要があります。ユーザーが編集できないもの。 Intel/AMD CPUで利用可能なCPU ID命令やドライブのIDEインターフェイスに書き込まれたシリアル番号など。
CPU IDとHDD IDは永続的です。コンピュータをフォーマットしてWindowsを再インストールした後でも、変更されることはありません。
実行可能です。たとえば this library は、コンピューターのハードウェアIDを読み取ります。コンパイルされたデモとソースコード/ [〜#〜] dll [〜#〜] があります。免責事項:リンクは商用製品につながります(19€/ロイヤリティなし)。