(57)【要約】【課題】  所与のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）を生成するシステムおよび方法を提供すること。【解決手段】  詳細ハードウェア識別（ＶＨＷＩＤ）を使用して、所与のコンピュータシステムへのハードウェア変更の程度に応じてそのコンピュータシステムでのソフトウェアの使用を制御することができる。【選択図】  図３
2004295871.tif 000002
【特許請求の範囲】
【請求項１】
第１のハードウェア構成を有する第１のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）を生成する方法であって、
ｎ個のコンポーネントクラスを選択するステップと、
前記ｎ個のコンポーネントクラスそれぞれのすべてのコンポーネントインスタンスを識別するステップと、
複数のハッシュ結果を生成するステップであって、前記複数のハッシュ結果は、各コンポーネントインスタンスのハッシュ結果と、前記ｎ個のコンポーネントクラスについての少なくとも１つのハッシュ結果とを含むステップと、
前記複数のハッシュ結果を連結してハッシュ部分を形成するステップと
を含み、
前記ハッシュ部分は、前記第１のコンピュータシステムの前記詳細ハードウェア識別（ＶＨＷＩＤ）を形成することを特徴とする方法。
【請求項２】
（ｉ）ヘッダ部分と（ｉｉ）カウント部分と（ｉｉｉ）前記詳細ハードウェア識別（ＶＨＷＩＤ）のハッシュ部分とを連結して前記第１のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）を形成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ｎは最高約１６までの整数であることを特徴とする請求項１に記載の方法。
【請求項４】
前記ヘッダ部分は、（ａ）バージョン番号と、（ｂ）（ｉ）単一インスタンスクラスの識別ストリングにハッシュ関数を行うステップから得られるハッシュ結果、（ｉｉ）単一インスタンスクラスの連結された識別ストリング、および（ｉｉｉ）単一インスタンスクラスの識別ストリングの１つ、とを含むことを特徴とする請求項２に記載の方法。
【請求項５】
コンポーネント（ａ）と（ｂ）を連結して前記ヘッダ部分を形成することを特徴とする請求項４に記載の方法。
【請求項６】
前記ヘッダ部分は、（ａ）バージョン番号と、（ｂ）（ｉ）単一インスタンスクラスの識別ストリングにハッシュ関数を行うステップから得られるハッシュ結果、（ｉｉ）単一インスタンスクラスの連結された識別ストリング、および（ｉｉｉ）単一インスタンスクラスの識別ストリングの１つ、とを含むことを特徴とする請求項２に記載の方法。
【請求項７】
前記カウント部分は、ｎ個の数からなる連結ストリングを含み、各数は、前記ｎ個のコンポーネントクラス中のコンポーネントインスタンスの数を表すことを特徴とする請求項２に記載の方法。
【請求項８】
少なくとも１つのコンポーネントクラスは、２つ以上のコンポーネントインスタンスを含むことを特徴とする請求項１に記載の方法。
【請求項９】
各コンポーネントクラスは、０から約１４個のコンポーネントインスタンスを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
各ハッシュ結果は１６ビット数に切り捨てられることを特徴とする請求項１に記載の方法。
【請求項１１】
前記ハッシュ結果は、１６ビット数に切り捨てられることを特徴とする請求項４に記載の方法。
【請求項１２】
前記方法は、前記第１のコンピュータシステムにソフトウェア製品をロードするステップ中に開始されることを特徴とする請求項１に記載の方法。
【請求項１３】
第２のハードウェア構成を有する第２のコンピュータシステムでソフトウェア製品を使用できるかどうかを判定する方法であって、前記第２のコンピュータシステムは、前記第１のコンピュータシステムと同じであるか、または異なり、前記方法は、
前記第２のハードウェア構成についての第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）を生成するステップと、
前記第２のハードウェア構成の前記第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）と、請求項１に記載の方法によって生成された前記第１のハードウェア構成の前記詳細ハードウェア識別（ＶＨＷＩＤ）とを比較するステップと、
前記第２のハードウェア構成のコンポーネントクラスと、それに対応する前記第１のハードウェア構成のコンポーネントクラスの間にある数の一致が存在し、かつ前記一致の数が、必要とされるコンポーネントクラス一致の数ｍと等しいか、またはｍを超える場合、前記ソフトウェア製品を前記第２のコンピュータシステムにロードするステップと、
前記一致の数がｍより少ない場合は、前記第２のコンピュータシステムへの前記ソフトウェア製品のロードを阻止するステップと
を含むことを特徴とする方法。
【請求項１４】
前記第２のハードウェア構成のあるコンポーネントクラス中のコンポーネントインスタンスを表す１つのハッシュ結果が、それに対応する前記第１のハードウェア構成のコンポーネントクラスからのハッシュ結果のいずれか１つと一致する時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間に一致が存在することを特徴とする請求項１３に記載の方法。
【請求項１５】
前記第２のハードウェア構成のあるコンポーネントクラス中の２つ以上のコンポーネントインスタンスを表す２つ以上のハッシュ結果が、それに対応する前記第１のハードウェア構成のコンポーネントクラスからの前記ハッシュ結果の２つ以上と一致する時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間に１つの一致が存在することを特徴とする請求項１３に記載の方法。
【請求項１６】
（ｉ）前記第１のハードウェア構成のあるコンポーネントクラスがコンポーネントインスタンスを含まず、かつそれに対応する前記第２のハードウェア構成のコンポーネントクラスがコンポーネントインスタンスを含まない時、および（ｉｉ）前記第１のハードウェア構成の前記コンポーネントクラスが単一のコンポーネントインスタンスを含み、それに対応する前記第２のハードウェア構成のコンポーネントクラスがコンポーネントインスタンスを含まない時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間には一致が存在しないことを特徴とする請求項１３に記載の方法。
【請求項１７】
前記ｍは（ｎ−３）に等しいことを特徴とする請求項１３に記載の方法。
【請求項１８】
当該コンピューティングシステムで使用することが可能な少なくとも１つのアプリケーションモジュールを含むコンピューティングシステムであって、前記少なくとも１つのアプリケーションモジュールは、請求項１に記載の方法を行うアプリケーションコードを含むことを特徴とするコンピューティングシステム。
【請求項１９】
請求項１に記載の方法を行うコンピュータ実行可能命令が格納されていることを特徴とするコンピュータ可読媒体。
【請求項２０】
第１のハードウェア構成を有する第１のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）を生成する方法を行うコンピュータ実行可能命令が格納されたコンピュータ可読媒体であって、前記方法は、
ｎ個のコンポーネントクラスを選択するステップと、
前記ｎ個のコンポーネントクラスそれぞれですべてのコンポーネントインスタンスを識別するステップと、
複数のハッシュ結果を生成するステップであって、前記複数のハッシュ結果は、各コンポーネントインスタンスのハッシュ結果と、前記ｎ個のコンポーネントクラスについての少なくとも１つのハッシュ結果とを含むステップと、
前記複数のハッシュ結果を連結してハッシュ部分を形成するステップと
を含み、
前記ハッシュ部分は、前記第１のコンピュータシステムの前記詳細ハードウェア識別（ＶＨＷＩＤ）を形成することを特徴とするコンピュータ可読媒体。
【請求項２１】
前記方法はさらに、
（ｉ）ヘッダ部分、（ｉｉ）カウント部分、および（ｉｉｉ）前記詳細ハードウェア識別（ＶＨＷＩＤ）のハッシュ部分とを連結して、前記第１のコンピュータシステムの前記詳細ハードウェア識別（ＶＨＷＩＤ）を形成するステップ
をさらに含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２２】
前記ｎは最高約１６までの整数であることを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２３】
前記ヘッダ部分は、（ａ）バージョン番号と、（ｂ）（ｉ）単一インスタンスクラスの識別ストリングにハッシュ関数を行うステップから得られるハッシュ結果、（ｉｉ）単一インスタンスクラスの連結された識別ストリング、および（ｉｉｉ）単一インスタンスクラスの識別ストリングの１つ、とを含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２４】
コンポーネント（ａ）と（ｂ）を連結して前記ヘッダ部分を形成することを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記ヘッダ部分は、（ａ）バージョン番号と、（ｂ）（ｉ）単一インスタンスクラスの識別ストリングにハッシュ関数を行うステップから得られるハッシュ結果、（ｉｉ）単一インスタンスクラスの連結された識別ストリング、および（ｉｉｉ）単一インスタンスクラスの識別ストリングの１つ、とを含むことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２６】
前記カウント部分は、ｎ個の数からなる連結ストリングを含み、各数は、前記ｎ個のコンポーネントクラス中のコンポーネントインスタンスの数を表すことを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２７】
少なくとも１つのコンポーネントクラスは、２つ以上のコンポーネントインスタンスを含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２８】
各コンポーネントクラスは、０から約１４個のコンポーネントインスタンスを含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２９】
各ハッシュ結果は１６ビット数に切り捨てられることを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項３０】
前記ハッシュ結果は１６ビット数に切り捨てられることを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項３１】
前記方法は、前記第１のコンピュータシステムにソフトウェア製品をロードするステップ中に開始されることを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項３２】
第２のハードウェア構成を有する第２のコンピュータシステムでソフトウェア製品を使用できるかどうかを判定する方法を行うコンピュータ実行可能命令が格納されたコンピュータ可読媒体であって、前記第２のコンピュータシステムは、第１のコンピュータシステムと同じであるか、または異なり、前記方法は、
前記第２のハードウェア構成についての第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）を生成するステップと、
前記第２のハードウェア構成の前記第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）を、請求項２０に記載の方法で生成した前記第１のハードウェア構成の前記詳細ハードウェア識別（ＶＨＷＩＤ）と比較するステップと、
前記第２のハードウェア構成のコンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間にある数の一致が存在し、かつ前記一致の数が、必要とされるコンポーネントクラス一致の数ｍと等しいか、またはｍを超える場合、前記ソフトウェア製品を前記第２のコンピュータシステムにロードするステップと、
前記一致の数がｍより少ない場合は、前記第２のコンピュータシステムへの前記ソフトウェア製品のロードを阻止するステップと
を含むことを特徴とするコンピュータ可読媒体。
【請求項３３】
前記第２のハードウェア構成のあるコンポーネントクラス中のコンポーネントインスタンスを表す１つのハッシュ結果が、それに対応する前記第１のハードウェア構成のコンポーネントクラスからのハッシュ結果のいずれか１つと一致する時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間に一致が存在することを特徴とする請求項３２に記載のコンピュータ可読媒体。
【請求項３４】
前記第２のハードウェア構成のあるコンポーネントクラス中の２つ以上のコンポーネントインスタンスを表す２つ以上のハッシュ結果が、それに対応する前記第１のハードウェア構成のコンポーネントクラスからの前記ハッシュ結果の２つ以上と一致する時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスとの間に１つの一致が存在することを特徴とする請求項３２に記載のコンピュータ可読媒体。
【請求項３５】
（ｉ）前記第１のハードウェア構成のあるコンポーネントクラスがコンポーネントインスタンスを含まず、それに対応する前記第２のハードウェア構成のコンポーネントクラスがコンポーネントインスタンスを含む時、および（ｉｉ）前記第１のハードウェア構成の前記コンポーネントクラスが単一のコンポーネントインスタンスを含み、それに対応する前記第２のハードウェア構成のコンポーネントクラスがコンポーネントインスタンスを含まない時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間には一致が存在しないことを特徴とする請求項３２に記載のコンピュータ可読媒体。
【請求項３６】
ｍは（ｎ−３）に等しいことを特徴とする請求項３２に記載のコンピュータ可読媒体。
【請求項３７】
当該コンピューティングシステムで使用することが可能な少なくとも１つのアプリケーションモジュールを含むコンピューティングシステムであって、前記少なくとも１つのアプリケーションモジュールは、第１のハードウェア構成を有する第１のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）を生成する方法を行うアプリケーションコードを含み、前記方法は、
ｎ個のコンポーネントクラスを選択するステップと、
前記ｎ個のコンポーネントクラスそれぞれですべてのコンポーネントインスタンスを識別するステップと、
複数のハッシュ結果を生成するステップであって、前記複数のハッシュ結果は、各コンポーネントインスタンスのハッシュ結果と、前記ｎ個のコンポーネントクラスについての少なくとも１つのハッシュ結果とを含むステップと、
前記複数のハッシュ結果を連結してハッシュ部分を形成するステップと
を含み、
前記ハッシュ部分は、前記第１のコンピュータシステムの前記詳細ハードウェア識別（ＶＨＷＩＤ）を形成することを特徴とするコンピューティングシステム。
【請求項３８】
前記方法はさらに、
（ｉ）ヘッダ部分、（ｉｉ）カウント部分、および前記詳細ハードウェア識別（ＶＨＷＩＤ）の（ｉｉｉ）ハッシュ部分を連結して、前記第１のコンピュータシステムの前記詳細ハードウェア識別（ＶＨＷＩＤ）を形成するステップ
をさらに含むことを特徴とする請求項３７に記載のコンピューティングシステム。
【請求項３９】
ｎは最高約１０までの整数であることを特徴とする請求項３７に記載のコンピューティングシステム。
【請求項４０】
前記ヘッダ部分は、（ａ）バージョン番号と、（ｂ）（ｉ）単一インスタンスクラスの識別ストリングにハッシュ関数を行うステップから得られるハッシュ結果、（ｉｉ）単一インスタンスクラスの連結された識別ストリング、および（ｉｉｉ）単一インスタンスクラスの識別ストリングの１つ、とを含むことを特徴とする請求項３８に記載のコンピューティングシステム。
【請求項４１】
コンポーネント（ａ）および（ｂ）を連結して前記ヘッダ部分を形成することを特徴とする請求項４０に記載のコンピューティングシステム。
【請求項４２】
前記ヘッダ部分は、（ａ）バージョン番号と、（ｂ）（ｉ）単一インスタンスクラスの識別ストリングにハッシュ関数を行うステップから得られるハッシュ結果、（ｉｉ）単一インスタンスクラスの連結された識別ストリング、および（ｉｉｉ）単一インスタンスクラスの識別ストリングの１つ、とを含むことを特徴とする請求項３８に記載のコンピューティングシステム。
【請求項４３】
前記カウント部分は、ｎ個の数からなる連結ストリングを含み、各数は、前記ｎ個のコンポーネントクラス中のコンポーネントインスタンスの数を表すことを特徴とする請求項３８に記載のコンピューティングシステム。
【請求項４４】
少なくとも１つのコンポーネントクラスは、２つ以上のコンポーネントインスタンスを含むことを特徴とする請求項３７に記載のコンピューティングシステム。
【請求項４５】
各コンポーネントクラスは、０から約１４個のコンポーネントインスタンスを含むことを特徴とする請求項３７に記載のコンピューティングシステム。
【請求項４６】
各ハッシュ結果は１６ビット数に切り捨てられることを特徴とする請求項３７に記載のコンピューティングシステム。
【請求項４７】
前記ハッシュ結果は１６ビット数に切り捨てられることを特徴とする請求項４０に記載のコンピューティングシステム。
【請求項４８】
前記方法は、前記第１のコンピュータシステムにソフトウェア製品をロードするステップ中に開始されることを特徴とする請求項３７に記載のコンピューティングシステム。
【請求項４９】
当該コンピューティングシステムで使用することが可能な少なくとも１つのアプリケーションモジュールを含むコンピューティングシステムであって、前記少なくとも１つのアプリケーションモジュールは、第２のハードウェア構成を有する第２のコンピュータシステムでソフトウェア製品を使用できるかどうかを判定する方法を行うアプリケーションコードを含み、前記第２のコンピュータシステムは、第１のコンピュータシステムと同じであるか、または異なり、前記方法は、
前記第２のハードウェア構成についての第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）を生成するステップと、
前記第２のハードウェア構成の前記第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）を、請求項３７に記載の方法で生成した前記第１のハードウェア構成の第１の詳細ハードウェア識別（ＶＨＷＩＤ）と比較するステップと、
前記第２のハードウェア構成のコンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間にある数の一致が存在し、かつ前記一致の数が、必要とされるコンポーネントクラス一致の数ｍと等しいか、またはｍを超える場合、前記ソフトウェア製品を前記第２のコンピュータシステムにロードするステップと、
前記一致の数がｍより少ない場合は、前記第２のコンピュータシステムへの前記ソフトウェア製品のロードを阻止するステップと
を含むことを特徴とするコンピューティングシステム。
【請求項５０】
前記第２のハードウェア構成のあるコンポーネントクラス中のコンポーネントインスタンスを表す１つのハッシュ結果が、それに対応する前記第１のハードウェア構成のコンポーネントクラスからのハッシュ結果のいずれか１つと一致する時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間に一致が存在することを特徴とする請求項４９に記載のコンピューティングシステム。
【請求項５１】
前記第２のハードウェア構成のあるコンポーネントクラス中の２つ以上のコンポーネントインスタンスを表す２つ以上の複数のハッシュ結果が、それに対応する前記第１のハードウェア構成のコンポーネントクラスからの前記ハッシュ結果の２つ以上と一致する時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスとの間に１つの一致が存在することを特徴とする請求項４９に記載のコンピューティングシステム。
【請求項５２】
（ｉ）前記第１のハードウェア構成のあるコンポーネントクラスがコンポーネントインスタンスを含まず、それに対応する前記第２のハードウェア構成のコンポーネントクラスがコンポーネントインスタンスを含む時、および（ｉｉ）前記第１のハードウェア構成の前記コンポーネントクラスが単一のコンポーネントインスタンスを含み、それに対応する前記第２のハードウェア構成のコンポーネントクラスがコンポーネントインスタンスを含まない時、前記第２のハードウェア構成の前記コンポーネントクラスとそれに対応する前記第１のハードウェア構成のコンポーネントクラスの間には一致が存在しないことを特徴とする請求項４９に記載のコンピューティングシステム。
【請求項５３】
前記ｍは（ｎ−３）に等しいことを特徴とする請求項４９に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所与のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）を生成するシステムおよび方法に関する。詳細ハードウェア識別（ＶＨＷＩＤ）を使用して、所与のコンピュータシステムに行われたハードウェア変更の程度に応じてコンピュータシステムにおけるソフトウェアの使用を制御することができる。
【背景技術】
【０００２】
近年、コンピュータソフトウェアの不法使用を防止する、あるいは最小限に抑えるために多大な取り組みがなされている。その再現可能性と配布の容易さのためにライセンス同意の範囲を超えたコンピュータソフトウェアの著作権侵害行為と不法使用は一般的に行われており、それによりソフトウェア製造者が多大な損害を受けている。
【０００３】
【特許文献１】米国特許第６，２４３，４６８号明細書
【非特許文献１】Applied・Cryptography・by・Bruce・Schneier,・John・Wiley・&・Sons・出版(ISBN・#0471117099)
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ライセンス同意の範囲を超えたコンピュータソフトウェアの著作権侵害行為とコンピュータソフトウェアの不法使用の発生を減らそうとして各種の方法が開発されている。しかし、そのような方法はしばしば、正当なソフトウェアの購入者とユーザに対して消費者にとっての不便性という形の問題を引き起こす。例えば、自分のコンピュータをアップグレードしたユーザは、アップグレード後のマシンに合法的にソフトウェア製品を再インストールできなければならない。しかし、現在利用可能な方法では、（ｉ）ソフトウェアをインストールすることができないか、（ｉｉ）（その時点で不満を抱いている）ユーザが支援を得るためにソフトウェア製造者に電話することを余儀なくされる場合がある。
【０００５】
したがって、正当なソフトウェア購入者およびユーザのニーズと慣行も認識し、それに対応する、著作権侵害行為および不正使用に対する改良された技術による解決法がなお必要とされる。
【課題を解決するための手段】
【０００６】
本発明は、コンピュータシステムのための改良されたハードウェア識別を発見することにより、上述の問題および課題の一部に対処する。本発明のハードウェア識別は、ライセンス同意の範囲を超えたソフトウェアの著作権侵害行為とコンピュータソフトウェアの不正使用を可能な限り抑えるか、あるいは防止し、同時に正当なソフトウェアユーザによるマシンのアップグレードを可能にする方法を提供する。
【０００７】
「詳細ハードウェア識別（ＶＨＷＩＤ）」と称する本発明のハードウェア識別は、（１）コンピュータシステムのハードウェア構成を構築するのに一般に使用される複数のコンポーネントクラス、および（２）特定のコンピュータシステムの所与のコンポーネントクラス中の各コンポーネントデバイスあるいはインスタンス、を識別する。選択された数のコンポーネントクラス中の各コンポーネントデバイスあるいはインスタンスを考慮することにより、特定のコンピュータシステムのセキュアで信頼性の高い詳細ハードウェア識別（ＶＨＷＩＤ）が生成され、同時に、その特定のコンピュータシステムのハードウェア構成に対するコンポーネントの変更にある程度の許容度が許される。
【０００８】
詳細ハードウェア識別（ＶＨＷＩＤ）は、コンピュータに最初にソフトウェア製品をロードする時に、特定のハードウェア構成を識別するために使用することができる。詳細ハードウェア識別（ＶＨＷＩＤ）は、（ｉ）同じソフトウェア製品が同じコンピュータまたは同じコンピュータのバリエーションで起動される時、または（ｉｉ）同じソフトウェア製品が、同じコンピュータのバリエーションまたは全く異なるコンピュータに再度ロードされる時、など将来の使用のために記憶することができる。例えば、同じソフトウェア製品が同じコンピュータまたは同じコンピュータのバリエーションで起動される時には、第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）が生成され、最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）と比較される。第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）のコンポーネントクラスと最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）のコンポーネントクラスの間に所望数の一致がある場合、本発明の方法はソフトウェア製品の起動を許可する。しかし、第２の詳細ハードウェア識別（ｓＶＨＷＩＤ）のコンポーネントクラスと最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）のコンポーネントクラスの間に所望数の一致がない場合、本発明の方法は、元のハードウェアシステムに要求される閾値を超える変更があるためにソフトウェア製品の起動を許可しない。
【０００９】
したがって、本発明は、詳細ハードウェア識別（ＶＨＷＩＤ）と、詳細ハードウェア識別（ＶＨＷＩＤ）を生成する方法とを対象とする。本発明はさらに、ソフトウェア製品を起動しようとする試みにより新しい詳細ハードウェア識別（ＶＨＷＩＤ）が生成され、その識別が、元のコンピュータシステムに１つまたは複数のハードウェア変更が行われているために元のハードウェア識別（ＶＣＨＷＩＤ）と比較した時に許容度を超える場合に、コンピュータシステムにおけるソフトウェアの使用を阻止する方法を対象とする。
【００１０】
本発明のこれらおよびその他の特徴および利点は、以下の開示される実施形態の詳細な説明と頭記の特許請求の範囲を検討することにより明らかになろう。
【発明を実施するための最良の形態】
【００１１】
本発明の原理の理解を促すために、以下で本発明の特定の実施形態を説明し、特定の術語を使用してそれら特定の実施形態を説明する。ただし、特定の術語の使用によって本発明の範囲の制限を意図するものではないことは理解されよう。ここで述べる本発明の原理の変更、さらなる修正、およびさらなる応用は、本発明が関連する当業者に普通に着想されることが企図される。
【００１２】
本発明は、詳細ハードウェア識別（ＶＨＷＩＤ）により所与のコンピュータシステムのハードウェア構成を識別する方法を対象とする。本発明は、選択された数のコンポーネントクラス内コンポーネントインスタンス全てを識別することにより、詳細ハードウェア識別（ＶＨＷＩＤ）を生成する方法も対象とする。本発明はさらに、詳細ハードウェア識別（ＶＨＷＩＤ）を使用して、あるコンピュータハードウェア構成でソフトウェア製品を使用できるかどうかを判定する方法を対象とする。
【００１３】
詳細ハードウェア識別（ＶＨＷＩＤ）は、各種のハードウェアコンポーネントを含むコンピュータシステムについて生成することができる。例示的なコンピュータシステムは複数のハードウェアコンポーネントを含み、それらのコンポーネントは、これらに限定しないが、ハードディスクドライブ、光ディスクドライブ、ネットワークカード、ディスクアダプタ、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および基本入出力システム（ＢＩＯＳ）を含むクラスに分類される。次いで、本発明を実施するための例示的なコンピュータシステムおよび例示的な動作環境について説明する。
【００１４】
例示的動作環境
以下で図面を参照して本発明の例示的実施形態を説明するが、すべての図面で同様の要素は同様の参照符号によって表す。図１に、本発明を実施するための例示的な動作環境を示す。例示的動作環境は、従来のパーソナルコンピュータ２０の形態の汎用コンピューティングデバイスを含む。一般に、パーソナルコンピュータ２０は、処理装置２１、システムメモリ２２、およびシステムメモリ２２を含む各種のシステム構成要素を処理装置２１に結合するシステムバス２３を含む。システムバス２３は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数タイプのバス構造のいずれでもよい。システムメモリは、読み取り専用メモリ（ＲＯＭ）２４およびランダムアクセスメモリ（ＲＡＭ）２５を含む。起動時などにパーソナルコンピュータ２０内の要素間の情報転送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）２６は、ＲＯＭ２４に記憶される。
【００１５】
パーソナルコンピュータ２０はさらに、図示しないハードディスクの読み書きを行うハードディスクドライブ２７、取り外し可能の磁気ディスク２９の読み書きを行う磁気ディスクドライブ２８、およびＣＤ−ＲＯＭや他の光学媒体などの取り外し可能の光ディスク３１の読み書きを行う光ディスクドライブ３０を含む。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、それぞれハードディスクドライブインタフェース３２、磁気ディスクドライブインタフェース３３、および光ディスクドライブインタフェース３４によってシステムバス２３に接続される。ここで説明する例示的環境ではハードディスク２７、取り外し可能磁気ディスク２９、および取り外し可能光ディスク３１を用いるが、当業者には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなど、コンピュータからアクセスすることが可能なデータを記憶することができる他のタイプのコンピュータ可読媒体もこの例示的動作環境で使用できることが理解されよう。これらのドライブとそれに関連付けられたコンピュータ記憶媒体は、パーソナルコンピュータ２０のコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性の記憶を提供する。例えば、パーソナルコンピュータ２０のＲＡＭ２５および／またはハードドライブ２７には１つまたは複数のデータファイル６０（図示せず）を記憶することができる。
【００１６】
ハードディスク２７、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５には複数のプログラムモジュールを記憶することができ、これにはオペレーティングシステム３５、アプリケーションプログラムモジュール３６、他のプログラムモジュール３７、およびプログラムデータ３８が含まれる。プログラムモジュールには、これらに限定しないが、特定タスクを行うか、特定の抽象データ型を実装するルーチン、サブルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明の態様は、アプリケーションプログラムモジュール３６の一体部分として、または別のプログラムモジュール３７の一部分として実施することができる。
【００１７】
ユーザは、キーボード４０およびポインティングデバイス４２などの入力装置を通じてパーソナルコンピュータ２０にコマンドと情報を入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナなどがある。これらおよびその他の入力装置は、システムバス２３に結合されたシリアルポートインタフェース４６を通じて処理装置２２に接続することが多いが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースによって接続することも可能である。モニタ４７または他タイプの表示装置も、ビデオアダプタ４８などのインタフェースを介してシステムバス２３に接続される。パーソナルコンピュータは、モニタに加えて、通例スピーカやプリンタなど他の周辺出力装置（図示せず）も含む。
【００１８】
パーソナルコンピュータ２０は、１つまたは複数のリモートコンピュータ４９との論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ４９は、別のパーソナルコンピュータ、サーバ、クライアント、ルータ、ネットワークＰＣ、ピアデバイス、あるいはその他の一般的なネットワークノードでよい。リモートコンピュータ４９は通例、上記でパーソナルコンピュータ２０との関連で挙げた要素の多くまたはすべてを含むが、図１にはメモリ記憶装置５０のみを示している。図１に示す論理接続は、構内ネットワーク（ＬＡＮ）５１と広域ネットワーク（ＷＡＮ）５２を含む。このようなネットワーキング環境は、オフィス、企業内のコンピュータネットワーク、イントラネット、およびインターネットに一般的に見られる。
【００１９】
ＬＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ２０はネットワークインタフェースまたはアダプタ５３を通じてローカルエリアネットワーク５１に接続される。ＷＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ２０は通例、インターネットなどのＷＡＮ５２を通じて通信を確立するためのモデム５４またはその他の手段を含む。モデム５４は内蔵型でも外付け型でもよく、シリアルポートインタフェース４６を介してシステムバス２３に接続することができる。ネットワーク環境では、パーソナルコンピュータ２０との関連で図示したプログラムモジュール、またはその一部は遠隔のメモリ記憶装置５０に格納することができる。図のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用できることは理解されよう。
【００２０】
さらに、当業者には、本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースを利用した、あるいはプログラム可能な消費者家電製品、ネットワークパーソナルコンピュータ、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成で実施することが可能であることを理解されよう。本発明は、通信ネットワークを通じてリンクされた遠隔の処理デバイスによってタスクを行う分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモート両方のメモリ記憶装置に置くことができる。
【００２１】
本発明の例示的実施形態の実施
上述のように、コンピュータシステムは通例、複数のハードウェアコンポーネントクラスを備える。さらに、コンピュータシステムは、各ハードウェアコンポーネントのクラスに複数のコンポーネント（例えば２つのハードディスクドライブなど）を含む可能性がある。
【００２２】
本発明の詳細ハードウェア識別（ＶＨＷＩＤ）は、ＶＨＷＩＤを決定するために使用することが求められる各ハードウェアコンポーネントクラスにつき各コンポーネントデバイス（各「インスタンス」とも称する）を考慮に入れる。本発明の詳細ハードウェア識別（ＶＨＷＩＤ）は、コンピュータハードウェアシステムの所与のコンポーネントクラスにおけるコンポーネントデバイスの不在も考慮することができる。例えば、所与のコンピュータハードウェア構成の識別に使用するコンポーネントクラスの決定は、そのコンピュータハードウェア構成を調べる前に行うことができる。コンピュータハードウェア構成は、そのコンピュータハードウェア構成の詳細ハードウェア識別（ＶＨＷＩＤ）を生成するのに使用される選択された各コンポーネントクラスのコンポーネントインスタンスを含んでも、含まなくともよい。
【００２３】
詳細ハードウェア識別（ＶＨＷＩＤ）を生成する本発明の例示的方法について下記で説明する。さらに、詳細ハードウェア識別（ＶＨＷＩＤ）を著作権侵害行為の防止ツールとして使用する本発明の例示的方法についても下記で説明する。
【００２４】
Ｉ．コンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）の生成
例示的な詳細ハードウェア識別（ＶＨＷＩＤ）の構成要素について以下で説明する。
【００２５】
Ａ．詳細ハードウェア識別（ＶＨＷＩＤ）
所与のコンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）は、（１）ヘッダコンポーネント、（２）カウントコンポーネントおよび（３）ハッシュコンポーネントの３つの別個の部分を含むことが望ましい。可能な詳細ハードウェア識別（ＶＨＷＩＤ）の各部分は、所与のコンピュータシステムのハードウェア構成から得ることができる。コンピュータハードウェア構成と、各コンポーネントクラスのインスタンスの一例を図２に示す。
【００２６】
図２に示すように、例示的コンピュータハードウェア構成２０は８個の別個のコンポーネントクラス２１〜２８を含み、コンポーネントクラス２１〜２８には合計１９個のコンポーネントインスタンス２００が分散している。ＣＤ−ＲＯＭコンポーネントクラス２１は４つのコンポーネントインスタンスを含み、ＩＤＥコンポーネントクラス２２は２つのコンポーネントインスタンスを含み、ドライブコンポーネントクラス２３は１つのコンポーネントクラスを含み、ディスプレイコンポーネントクラス２４は１つのコンポーネントインスタンスを含み、ＳＣＳＩコンポーネントクラス２５は２つのコンポーネントインスタンスを含み、ディスクコンポーネントクラス２６は６つのコンポーネントインスタンスを含み、ネットワークカードコンポーネントクラス２７は１つのコンポーネントクラスを含み、プロセッサ（すなわちＣＰＵ）コンポーネントクラス２８は２つのコンポーネントクラスを含んでいる。図２の行２９は、数のストリングを示し、これは、８つのコンポーネントクラス２１〜２８それぞれのコンポーネントインスタンスの数を表す。
【００２７】
所与のコンポーネントクラスのコンポーネントインスタンスの数は、０から、所与のハードウェア構成を表すのに必要な数まで異なる可能性があるが、１つの実施で、１コンポーネントクラス当たりのコンポーネントインスタンス数を任意で制限できることに留意されたい。通例、所与のハードウェア構成は、１コンポーネントクラスにつき０から約６個のコンポーネントインスタンスを含む。下記で述べるように、コンポーネントクラスがコンポーネントインスタンスを含まない場合でも、そのコンポーネントクラスにおけるコンポーネントインスタンスの不在は情報を提供し、その情報が詳細ハードウェア識別（ＶＨＷＩＤ）に組み込まれる。
【００２８】
例示的な詳細ハードウェア識別（ＶＨＷＩＤ）を図３に示す。図３の例示的な詳細ハードウェア識別（ＶＨＷＩＤ）３４は、図２のコンピュータハードウェア構成を識別する可能な方式の１つである。上述のように、詳細ハードウェア識別（ＶＨＷＩＤ）３４は、ヘッダ部分３１、カウント部分３２、およびハッシュ部分３３、の少なくとも３つの別個の部分からなることが望ましい。詳細ハードウェア識別（ＶＨＷＩＤ）３４のこれら３つの別個の部分それぞれを図３に示す。ヘッダ部分３１は、バージョンコンポーネント３１０および切り捨て数値部分３１２からなることが望ましい。
【００２９】
ヘッダ部分３１のバージョンコンポーネント３１０は、所与のコンピュータシステムを識別するのに使用される詳細ハードウェア識別（ＶＨＷＩＤ）３４の特定のバージョンを識別する。例えば、特定のバージョン（例えばバージョン「１」）の詳細ハードウェア識別（ＶＨＷＩＤ）は、あるパラメータセットを使用してバージョン１を作成し、別の異なるパラメータセットを使用してバージョン２を作成することにより、別のバージョン（例えばバージョン「２」）の詳細ハードウェア識別（ＶＨＷＩＤ）と異なることができる。各種のパラメータを使用して所与のバージョンの詳細ハードウェア識別（ＶＨＷＩＤ）を作成することができる。適切なパラメータには、これらに限定しないが、（１）詳細ハードウェア識別（ＶＨＷＩＤ）３４のヘッダ部分３１に表されるコンポーネントクラスの数、（２）ヘッダ部分３１を形成するために使用する１つまたは複数のコンポーネントインスタンスの識別ストリングにハッシュ関数または他の何らかのデータ処理（例えば識別ストリングの切り捨て）をかけるかどうか、（３）詳細ハードウェア識別（ＶＨＷＩＤ）３４を作成するのに使用するコンポーネントクラスの最大数および／または最小数、（４）所与のコンポーネントクラス中で考慮するコンポーネントインスタンスの最大数および／または最小数、（５）各コンポーネントインスタンスのハッシュ値を生成するのに使用するハッシュ関数、（６）詳細ハードウェア識別（ＶＨＷＩＤ）３４を形成するのに使用する各ハッシュ結果の長さ、（７）詳細ハードウェア識別（ＶＨＷＩＤ）３４の合計の長さおよび／または最大の長さ、が含まれる。
【００３０】
一部のコンポーネントクラスは、複数のコンポーネントインスタンスを持つことができず、これを単一インスタンスクラスと称する。トータルシステムＲＡＭは、単一インスタンスクラスの一例である。単一インスタンスクラスについてのデータは、必要であればハッシングと切捨てを行ってから、ヘッダ部分３１の切捨て数値部分３１２に格納される。ヘッダに表される単一インスタンスクラスはそれぞれ、それに関連付けられた連結数値部分３１２を有する。
【００３１】
詳細ハードウェア識別（ＶＨＷＩＤ）３４のヘッダ部分３１は、固定の長さであることが望ましく、この長さは、特定のバージョンタイプを有するすべての詳細ハードウェア識別（例えばバージョン１のＶＨＷＩＤ）について一定であることが望ましい。例えば、詳細ハードウェア識別（ＶＨＷＩＤ）３４のヘッダ部分３１は、約１０〜約２４バイトの固定長で、バージョンコンポーネント３１０および切り捨て数値部分３１２に全バイト数が分散することができる。
【００３２】
カウント部分３２は複数の数からなるストリングを含み、これは、詳細ハードウェア識別（ＶＨＷＩＤ）３４を作成するのに使用された複数のコンポーネントクラスそれぞれのコンポーネントインスタンス数を表す。図３に示すように、カウント部分３２は、数のストリング「４  ２  １  １  ２  ６  １  ２」を含み、これは図２のコンポーネントクラス２１〜２８のコンポーネントインスタンスに対応している。コンポーネントクラスがコンポーネントインスタンスを含まない場合、カウント部分３２は、その特定のコンポーネントクラスについては「０」を含むことに留意されたい。
【００３３】
上述のヘッダ部分３１と同様に、詳細ハードウェア識別（ＶＨＷＩＤ）３４のカウント部分３２も固定長であることが望ましく、その長さは、特定のバージョンタイプのすべての詳細ハードウェア識別について一定であることが望ましい。カウント部分３２は常に、詳細ハードウェア識別（ＶＨＷＩＤ）３４を作成するのに使用するコンポーネントクラスの数であるｎに等しい長さを持つ。通例、詳細ハードウェア識別（ＶＨＷＩＤ）３４のカウント部分３２は、約６〜約１６文字の固定長を有する。
【００３４】
ハッシュ部分３３は、図２に示すコンポーネントクラス２１〜２８の１９個のコンポーネントクラスそれぞれを表すハッシュ値の連結ストリングからなる。各個別のハッシュ結果は、最高約１６０ビットの長さを有することができる。各個別のハッシュ結果の長さは、望ましくは約１０〜約２０ビット、より望ましくは約１６ビットである。この例では、得られる詳細ハードウェア識別（ＶＨＷＩＤ）３４のハッシュ部分３３は、望ましい合計３０４ビット（１９×１６＝３０４）の長さになる。
【００３５】
詳細ハードウェア識別（ＶＨＷＩＤ）３４のハッシュ部分３３は通例ある長さを持ち、この長さは、所与のハードウェア構成のｎ個のコンポーネントクラス中のコンポーネントインスタンスの数に応じて異なる。ハッシュ部分３３の合計の長さは、コンポーネントインスタンスの数と各コンポーネントインスタンスのハッシュ結果の望ましいハッシュ結果の長さとの積に等しい。
【００３６】
図３に示すように、詳細ハードウェア識別（ＶＨＷＩＤ）３４は、ヘッダ部分３１、カウント部分３２、およびハッシュ部分３３の連結ストリングによって表される。あるコンピュータハードウェア構成の詳細ハードウェア識別（ＶＨＷＩＤ）３４を求める例示的方法については以下で説明する。
【００３７】
本発明の詳細ハードウェア識別（ＶＨＷＩＤ）は１つの部分のみからなってもよいことに留意されたい。本発明の一実施形態では、所与のコンピュータハードウェア構成の詳細ハードウェア識別（ＶＨＷＩＤ）は、ハッシュ部分３３のみからなる。この実施形態では、詳細ハードウェア識別（ＶＨＷＩＤ）は、ヘッダ部分３１もカウント部分３２も含まない。本発明のさらなる実施形態では、詳細ハードウェア識別（ＶＨＷＩＤ）３２は、ハッシュ部分３３と組み合わせたカウント部分３２のみからなる。本発明の別の実施形態では、詳細ハードウェア識別（ＶＨＷＩＤ）は、カウント部分３２が潜在的に含まれる（ｉｍｐｌｉｃｉｔ）ように構成されたヘッダ部分３１とハッシュ部分３３のみからなる。
【００３８】
Ｂ．コンピュータシステムの詳細ハードウェア識別（ＶＨＷＩＤ）の決定
本発明のＶＨＷＩＤは、図４〜６に示す例示的方法によって求めることができる。この例示的方法のステップは、図１を参照して上記で説明したコンピュータ２０と同様の顧客のコンピュータのソフトウェア製品中のソフトウェアコードによって行うことができる。図４〜６に示すように、所与のコンピュータハードウェア構成（「ＨＷ１」と称する）のＶＨＷＩＤの例示的な決定はステップ４０１で開始し、ここで所与のコンピュータハードウェア構成ＨＷ１を識別するためのいくつかの数ｎのコンポーネントクラスを選択する。上述のように、所与のコンピュータシステムは、各種のハードウェアコンポーネントとハードウェアコンポーネントクラスを含むことができる。例示的なハードウェアコンポーネントのクラスには、これらに限定しないが、ハードディスクドライブ、論理的なディスクパーティション、光ディスク、ネットワークカード、ディスプレイアダプタ、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＩＤＥデバイス、サウンドカード、ビデオカード、プロセッサ、ＳＣＳＩデバイス、およびシステムＢＩＯＳなどが含まれる。ハードウェアコンポーネントクラスの数ｎは、約２から約１６の範囲の整数であることが望ましい。一般に、（ｉ）所与のコンピュータシステムをより正確に識別するため、および（ｉｉ）所与のコンピュータシステムの許容度をより正確に測定するために、ｎは可能な限り大きいことが望ましい。
【００３９】
ステップ４０１でコンポーネントクラスの数ｎを選択すると、ステップ４０２で各コンポーネントクラスを識別する。コンポーネントクラスは、ディスクハードドライブクラスなど上述のコンポーネントクラスのいずれを含んでもよい。例示的なハードウェア構成ＨＷ１を識別するのに使用されるコンポーネントクラスの例示的なリストを下の表１に示す。
【００４０】
【表１】
2004295871.tif 000003
【００４１】
表１に示すように、この例では、ｎは８であり、識別されるハードウェアコンポーネントクラスには、（１）ＣＤ−ＲＯＭクラス、（２）ＩＤＥデバイスクラス、（３）ドライブクラス、（４）ディスプレイアダプタデバイスクラス、（５）ＳＣＳＩデバイスクラス、（６）ディスククラス、（７）ネットワークカードクラス、および（８）ＣＰＵプロセッサクラス、が含まれる。
【００４２】
ステップ４０２で各コンポーネントクラスを識別すると、ステップ４０３で各ハードウェアコンポーネントクラスのすべてのデバイスまたはインスタンスを識別する。「カウント」（各コンポーネントクラスのコンポーネントデバイスまたはインスタンスの数）もステップ４０３で判定する。特定のコンポーネントクラスの各インスタンスは、そのインスタンスに関連付けられた最も一意の識別ストリングによって識別されることが望ましい。例えば、ハードウェア構成は、ＮＥＣ社によって製造され、識別ストリング「ＮＥＣ  ＣＤＲＷ２４  Ｓ１５」を有するＣＤ−ＲＯＭを含む可能性がある。所与のインスタンスの最も一意の識別ストリングを判定する任意の利用可能な方法を本発明で使用することができる。各コンポーネントインスタンスの識別ストリングを割り当てるステップをステップ４０４に示す。
【００４３】
各コンポーネントインスタンスの識別ストリングを割り当てると、ステップ４０５で詳細ハードウェア識別ＶＨＷＩＤのヘッダ部分を作成する。ステップ４０６で、ＶＨＷＩＤの特定のバージョンをヘッダに入力してヘッダ部分３１０を図３のように形成する。上述のように、バージョン番号は、詳細ハードウェア識別（ＶＨＷＩＤ）を決定するのに使用された１つまたは複数のパラメータを表すことができる。
【００４４】
ステップ４０７で、ヘッダ中に表すコンポーネントクラスを識別する。通例は、単一のコンポーネントインスタンスしか有することができないコンポーネントクラス、すなわち単一インスタンスクラスがＶＨＷＩＤのヘッダ部分に表される。ＶＨＷＩＤのヘッダ部分に表すことが可能な適切なコンポーネントクラスには、これらに限定しないが、メモリコンポーネントクラス、コンピュータドッキング性のコンポーネントクラス（すなわちそのコンピュータがドッキング可能であるか否か）、システムＢＩＯＳ、またはこれらの組み合わせが含まれる。本発明の例示的な一実施形態では、ＶＨＷＩＤのヘッダ部分は、そのハードウェア構成の単一コンポーネントクラスからの情報を含む。
【００４５】
判定ブロック４０９で、ヘッダに含まれる単一インスタンスクラスの識別ストリングにハッシュ関数をかけるかどうかを判定する。識別ストリングはハッシュ関数をかけるか、かつまたは所望数のビットに切り捨てることができる。
【００４６】
識別ストリングにハッシュ関数をかける場合、方法はステップ４１１に進み、コンポーネントインスタンスの識別ストリングにハッシュ関数を実行する。ハッシュ結果は、約１６ビットの長さに切り捨てることが望ましい。ステップ４１２で、ハッシュ結果をヘッダ部分３１の切捨て数値部分３１２（図３）に入力する。識別ストリングにハッシュ関数をかけない場合、方法はステップ４１０に進み、識別ストリングを所望の長さに切り捨て、ヘッダ部分３１の切捨て数値部分３１２に入力する。識別ストリングは、約１６ビット未満の長さに切り捨てることが望ましい。
【００４７】
ステップ４１２の切り捨てたハッシュ結果、またはステップ４１０の切り捨てた識別ストリングをヘッダ部分３１の切捨て数値部分３１２に入力すると、方法は判定ブロック４１３に進む。判定ブロック４１３で、別のコンポーネントクラスの詳細をＶＨＷＩＤのヘッダ部分３１に追加するかどうかを判定する。別のコンポーネントクラスの追加的な詳細をＶＨＷＩＤのヘッダ部分３１に追加する場合、方法はステップ４０７に戻り、上述のように進行する。ＶＨＷＩＤのヘッダ部分３１にそれ以上情報を追加しない場合は、方法はステップ４１４に進み、ＶＨＷＩＤのカウント部分３２を作成する。上述のように、ＶＨＷＩＤのカウント部分３２はｎ個の数からなる数値ストリングを含み、このストリングは、そのＶＨＷＩＤを形成するのに使用したｎ個のコンポーネントクラスそれぞれのコンポーネントインスタンスの数を表す。（図３のカウント部分３２参照）。
【００４８】
ステップ４１５で、ＶＨＷＩＤのカウント部分３２に表される各コンポーネントインスタンスの識別ストリングにハッシュ関数を行う。所与のコンポーネントクラスがコンポーネントインスタンスを含まない場合は、そのＶＨＷＩＤで使用するための特別なハッシュ結果を生成することができ、この特別なハッシュ結果は、所与のコンポーネントクラスがコンポーネントインスタンスを含まなかったことを表す。あるいは、ハッシュ値を記憶せず、欠如しているコンポーネントクラスに対応するカウント部分３２の一部をゼロに設定して、そのコンポーネントクラスが存在しないことを表してもよい。各コンポーネントインスタンスのハッシュ結果は、所望の長さに切り捨てることができる。本発明の例示的な一実施形態では、ハッシュ関数の結果はそれぞれ、約１０ビットから約２０ビットの長さ、より望ましくは約１６ビットの長さに切り捨てる。
【００４９】
任意の長さの識別ストリングを受け付けることができ、約１６０ビット以下の固定長のハッシュ出力または結果を生成することが可能であれば任意の知られるハッシュ関数を本発明で使用することができる。適切なハッシュ関数の例には、これらに限定しないが、ハッシュ関数アルゴリズムＮＡＶＡＬ、ＭＤ２、ＭＤ４、ＭＤ５、およびＳＨＡ−１などがあり、これらはいずれも当業者には知られる。本発明で使用するのに適した他のハッシュ関数が開示される（非特許文献１参照）。同文献の開示は参照によりその全体を本明細書に組み込む。
【００５０】
本発明の一実施形態では、所与のコンポーネントインスタンスにハッシュ関数を行う前に、コンポーネントインスタンスの識別子に「ｓａｌｔ値」を追加することができる。この実施形態では、ｓａｌｔ値を追加することにより、同じコンピュータハードウェア構成に基づいて異なるＶＨＷＩＤを生成することが可能になる。同じハードウェア構成の異なるＶＨＷＩＤは、複数の異なるアプリケーションあるいは異なるパスを実行する際に有用である可能性がある。同じハードウェア構成の異なるＶＨＷＩＤが有用である状況の一例を下記で説明する。
【００５１】
例えば、ユーザが同じベンダによる複数のソフトウェアパッケージを起動する場合、ＶＨＷＩＤを使用して別々の起動記録を関連付けて、そのユーザのソフトウェア購買の習慣のピクチャを構築することが可能である可能性がある。これから保護するために、ハッシュｘ＝ＭＤ５［（ｓａｌｔ値）ｘ＋ＩＤストリング］などのハッシュ関数を使用して別々のハッシュを構築することにより、同じマシンから生成された異なるＶＨＷＩＤが互いに関連しないように見せることができ、ここでｓａｌｔ値はソフトウェアパッケージごとに異なる。
【００５２】
ステップ４１６で、各コンポーネントインスタンスのハッシュ結果を連結して、詳細ハードウェア識別（ＶＨＷＩＤ）３４のハッシュ部分３３を図３のように形成する。ステップ２１７で、ヘッダ部分３１、カウント部分３２、およびハッシュ部分３３を連結することにより、最終的な詳細ハードウェア識別（ＶＨＷＩＤ）３４をアセンブルする。
【００５３】
ステップ４１８で、結果得られるハードウェア構成ＨＷ１の詳細ハードウェア識別（ＶＨＷＩＤ）を将来の使用のために記憶する。ハードウェア構成ＨＷ１の詳細ハードウェア識別（ＶＨＷＩＤ）は、ローカルに（例えばレジストリ、ファイルシステム、セキュアなストアなど）記憶しても、アクセス可能な遠隔の場所（例えばデータベース）に記憶しても、ライセンス取得のためにクリアリングハウスサーバに送信してもよい。
【００５４】
上述したように本発明の一部の実施形態では、ハードウェア構成ＨＷ１の詳細ハードウェア識別（ＶＨＷＩＤ）は、（ｉ）ハッシュ部分３３を含んでも、（ｉｉ）ハッシュ部分３３と連結したカウント部分３２からなるＶＨＷＩＤなど、ハッシュ部分３３と組み合わせたカウント部分３２のみを含んでもよい。
【００５５】
ＩＩ．詳細ハードウェア識別（ＶＨＷＩＤ）を使用してコンピュータシステム上でのソフトウェア製品の使用を可能にする
本発明はさらに、詳細ハードウェア識別（ＶＨＷＩＤ）を使用して、所与のコンピュータハードウェア構成を有するコンピュータシステムでのソフトウェア製品の使用を可能にする方法を対象とする。本発明の一実施形態では、詳細ハードウェア識別（ＶＨＷＩＤ）を使用して、所与のコンピュータハードウェア構成を有するコンピュータシステム上でソフトウェア製品の使用を可能にする方法は、（ｉ）最初のインストール時を除く、コンピュータにソフトウェア製品をインストールする時、（ｉｉ）コンピュータハードウェア構成のあるコンポーネントにすでに存在するソフトウェア製品またはアプリケーションの起動時、または（ｉｉｉ）その両方、に開始される。詳細ハードウェア識別（ＶＨＷＩＤ）を使用する例示的方法を図７に示す。この例示的方法のステップは、図１を参照して上記で説明したコンピュータ２０と同様の顧客のコンピュータのソフトウェア製品中のソフトウェアコードによって行うことができる。
【００５６】
図７のステップ５０１に示すように、ハードウェア構成ＨＷ２を有するコンピュータでソフトウェア製品がロードまたは起動される。コンピュータハードウェア構成ＨＷ２は、最初の詳細ハードウェア識別（ここではｉＶＨＷＩＤと称する）を生成するのに使用されたハードウェア構成ＨＷ１と同じであっても、全く別のコンピュータであってもよい。ステップ５０２で、コンピュータハードウェア構成ＨＷ２に新しい詳細ハードウェア識別（ここではｎＶＨＷＩＤと称する）を生成する。コンピュータハードウェア構成ＨＷ２の詳細ハードウェア識別（ｎＶＨＷＩＤ）は、上述のように、また図４〜６に示すように生成することができる。コンピュータハードウェア構成ＨＷ２に新しい詳細ハードウェア識別（ｎＶＨＷＩＤ）を生成すると、ステップ５０３で記憶されていた詳細ハードウェア識別（ＶＨＷＩＤ）を取り出す。通例、記憶されている詳細ハードウェア識別（ＶＨＷＩＤ）は最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）であり、最初にＨＷ１にソフトウェア製品をインストールした時、またはその直後に第１のハードウェアコンピュータ構成ＨＷ１で生成されたものである。
【００５７】
ステップ５０４で、ハードウェア構成ＨＷ２の新しい詳細ハードウェア識別（ｎＶＨＷＩＤ）をハードウェア構成ＨＷ１の最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）と比較する。方法は判定ブロック５０５に進む。判定ブロック５０５で、コンポーネントクラスの一致の数が、ハードウェア構成ＨＷ２でソフトウェア製品の使用を可能にするのに必要なコンポーネントクラス一致の数ｍと等しいか、またはｍを超えるかどうかを判定する。コンポーネントクラスの一致の数が、必要とされるコンポーネントクラス一致の数ｍと等しいか、またはそれを超える場合、方法はステップ５０６に進み、ハードウェア構成ＨＷ２におけるソフトウェア製品の使用を可能にする。コンポーネントクラス一致の数が必要なコンポーネントクラス一致の数ｍより小さい場合、方法はステップ５０７に進み、ハードウェア構成ＨＷ２におけるソフトウェア製品の使用を不可にする。
【００５８】
ステップ５０４のハードウェア構成ＨＷ２の新しい詳細ハードウェア識別（ｎＶＨＷＩＤ）とハードウェア構成ＨＷ１の最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）との比較では、所与のコンポーネントクラスに一致があるかないかを判定するための１つまたは複数の規則が伴ってもよい。詳細ハードウェア識別（ＶＨＷＩＤ）を使用してソフトウェア製品の使用を可能にする方法は、新しく生成された詳細ハードウェア識別と以前から記憶されていた詳細ハードウェア識別との間のコンポーネントクラスの一致数を判定するための以下の規則のうち１つまたは複数を備えることが望ましい。
【００５９】
（ｉ）ハードウェア構成ＨＷ２のあるコンポーネントクラス中のコンポーネントインスタンスを表す新しい詳細ハードウェア識別（ｎＶＨＷＩＤ）の各ハッシュ結果を、それに対応するハードウェア構成ＨＷ１のコンポーネントクラスを表す最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）の各ハッシュ結果と比較する。
【００６０】
（ｉｉ）ハードウェア構成ＨＷ２のあるコンポーネントクラス中のコンポーネントインスタンスを表す新しい詳細ハードウェア識別（ｎＶＨＷＩＤ）中の１つのハッシュ結果が、それに対応するハードウェア構成ＨＷ１のコンポーネントクラスを表す最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）中のハッシュ結果の１つと一致する時、ハードウェア構成ＨＷ２の当該コンポーネントクラスとそれに対応するハードウェア構成ＨＷ１のコンポーネントクラスの間に一致が存在する。
【００６１】
（ｉｉｉ）ハードウェア構成ＨＷ２のあるコンポーネントクラス中の２つ以上のコンポーネントインスタンスを表す新しい詳細ハードウェア識別（ｎＶＨＷＩＤ）中の２つ以上のハッシュ結果が、それに対応するハードウェア構成ＨＷ１のコンポーネントクラスを表す最初の詳細ハードウェア識別（ｉＶＨＷＩＤ）中の２つ以上のハッシュ結果と一致する時、ハードウェア構成ＨＷ２の当該コンポーネントクラスとそれに対応するハードウェア構成ＨＷ１のコンポーネントクラス間に１つの一致が存在する。
【００６２】
（ｉｖ）ハードウェア構成ＨＷ２のコンポーネントクラスがコンポーネントインスタンスを含まず、それに対応するハードウェア構成ＨＷ１のコンポーネントクラスがコンポーネントインスタンスを含まない時は、ハードウェア構成ＨＷ２のあるコンポーネントクラスとそれに対応するハードウェア構成ＨＷ１のコンポーネントクラスの間に一致が存在しない。
【００６３】
（ｖ）ハードウェア構成ＨＷ２のコンポーネントクラスが単一のコンポーネントインスタンスを含み、それに対応するハードウェア構成ＨＷ１のコンポーネントクラスがコンポーネントインスタンスを含まない時には、ハードウェア構成ＨＷ２のあるコンポーネントクラスと、それに対応するハードウェア構成ＨＷ１のコンポーネントクラスの間には一致が存在しない。
【００６４】
（ｖｉ）ハードウェア構成ＨＷ２とハードウェア構成ＨＷ１との間で必要とされるコンポーネントクラスの一致数ｍは、あらかじめ決定し、所与のソフトウェア製品のコードに埋め込むことができる。
【００６５】
必要とされるコンポーネントクラスの一致数ｍは、ハードウェア構成コンポーネントの変化について要求される許容度に応じて選択される。必要とされるコンポーネントクラス一致の数ｍは、詳細ハードウェア識別（ＶＨＷＩＤ）を決定する際に考慮するコンポーネントクラスの総数ｎと同じにするか、またはわずか１にすることができる。ｍが大きくなるのに従って、コンピュータハードウェア構成の変更に対する許容度が低下する。例えば、コンポーネントクラスの総数ｎが１０であり、ｍが７である場合は、ソフトウェア製品のロードまたは実行を可能にするには、１０個のコンポーネントクラスのうち７個が少なくとも１つのコンポーネントインスタンスと一致しなければならない。コンポーネントクラスの一致の数が６以下である場合には、ソフトウェア製品はそのコンピュータハードウェア構成ではロードまたは実行するようにライセンスされることはない。
【００６６】
必要とされるコンポーネントクラスの一致数ｍは、ソフトウェア製造者によってあらかじめ決定し、詳細ハードウェア識別（ＶＨＷＩＤ）を生成するのに使用されるソフトウェア製品コードに埋め込むことができる。ｍは（ｎ−３）以上であることが望ましく、ｍは（ｎ−２）以上であることがより望ましい。ただし、上述のようにｍは１からｎの範囲とすることができる。
【００６７】
上記で説明し、図４〜６および７に示す方法のステップは、ローカルで実行しても、遠隔の場所で実行してもよい。通例、顧客は、図１に示すコンピュータ２０などの所与のコンピュータで実行できるソフトウェア製品を購入する。このソフトウェア製品は、例えば、ＣＤ−ＲＯＭやフロッピー（登録商標）ディスケットなどの可搬式のコンピュータ可読媒体に記憶されたソフトウェアプログラムを有する収縮包装製品であることができる。あるいは、そのソフトウェア製品は、ローカルエリアネットワーク（ＬＡＮ）５１やワイドエリアネットワーク（ＷＡＮ）５２などのネットワークを通じて電子的に配信することもできる。顧客は、ソフトウェア製品を、システムメモリ２２に記憶されたプログラムとしてコンピュータ２０にロードする。
【００６８】
ソフトウェア製品をインストールする際、顧客は通例、そのソフトウェア製品のソフトウェア製品識別（ＰＩＤ）の一部をコンピュータ２０に入力するように指示される。ＰＩＤは、例えば収縮包装パッケージのラベルに印刷されたＣＤキーから得ることができる。顧客はＰＩＤを入力し、このＰＩＤはそのソフトウェア製品のあるソフトウェアプログラムに関連付けられている。ＰＩＤは、コンピュータ２０にローカルに記憶しても、かつ／または起動権限などの第三者を用いてローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２上のアクセス可能な場所にリモートに記憶してもよい。
【００６９】
上述したように、ソフトウェア製品をインストールまたは起動する際に、ソフトウェア製品中のコードを使用するか、またはソフトウェア製品のインストールによってトリガされる形で、詳細ハードウェア識別（ＶＨＷＩＤ）も生成される。本発明の方法によって生成される詳細ハードウェア識別（ＶＨＷＩＤ）は、ソフトウェア製品識別（ＰＩＤ）に関連付けられ、そのソフトウェア製品識別（ＰＩＤ）と共に、コンピュータ２０にローカルに記憶されるか、かつ／または第三者の起動権限を用いてローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２上のアクセス可能な場所に遠隔に記憶される。
【００７０】
インストールプロセスの一部として、起動権限を用いてソフトウェア製品を起動することを顧客に求めることができる。この権限は、例えば製品の製造者や権限を付与された第３者である。起動方式は、（ｉ）特定のコンピュータへのインストールと使用、または（ｉｉ）製品の使用を許可する同意条件に沿ったインストールと使用、のためにそのソフトウェア製品を起動することを顧客に強制する。そのような起動プロセスが、マイクロソフト社（ワシントン州レドモンド）に譲渡された特許に詳細に記載され（特許文献１参照）、同文献の内容はすべて参照により本明細書に組み込まれる。
【００７１】
本発明の方法によって生成された詳細ハードウェア識別（ＶＨＷＩＤ）およびソフトウェア製品識別（ＰＩＤ）は、コンピュータ２０にローカルに記憶しても、かつ／または起動権限を用いてローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２上のアクセス可能な場所に遠隔に記憶してもよい。ソフトウェア製品は、（ｉ）詳細ハードウェア識別（ＶＨＷＩＤ）とそれに関連付けられたソフトウェア製品識別（ＰＩＤ）の両方をコンピュータ２０に記憶し、（ｉｉ）詳細ハードウェア識別（ＶＨＷＩＤ）とそれに関連付けられたソフトウェア製品識別（ＰＩＤ）をともにワイドエリアネットワーク（ＷＡＮ）５２を介して起動サーバに電子的に送信することが望ましい。ソフトウェア製品は、最初の起動時にグラフィカルユーザインタフェース（ＵＩ）のダイアログウィンドウを自動的に表示して、それによりその製品を起動する起動サーバとの接続を開始するようにユーザに指示することが望ましい。起動サーバは、受け取った詳細ハードウェア識別（ＶＨＷＩＤ）とそれに関連付けられたソフトウェア製品識別（ＰＩＤ）を格納するデータベースを維持する。
【００７２】
詳細ハードウェア識別（ＶＨＷＩＤ）とそれに関連付けられた所与のソフトウェア製品のソフトウェア製品識別（ＰＩＤ）は、そのソフトウェア製品が別のコンピュータに再度インストールされるか、第１のコンピュータ（最初のインストール時に使用されたコンピュータ）で起動されるまで、不定の時間にわたって記憶することができる。同じソフトウェア製品が別のコンピュータに再度インストールされるか、第１のコンピュータで起動されると、ソフトウェア製品のコードは、本発明による新しい詳細ハードウェア識別（ＶＨＷＩＤ）を生成する方法を開始する。ソフトウェア製品はまた、そのソフトウェア製品のソフトウェア製品識別（ＰＩＤ）に関連付けられた、以前から記憶されている詳細ハードウェア識別（ＶＨＷＩＤ）を、ローカルコンピュータ２０から、またはローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２を介して遠隔の場所から取り出す。新しい詳細ハードウェア識別（ＶＨＷＩＤ）と以前から記憶されていた詳細ハードウェア識別（ＶＨＷＩＤ）との比較は、上述のように行う。
【００７３】
第１のコンピュータ（最初のインストール時に使用したコンピュータ）のハードウェア構成に著しい変更があるためにソフトウェア製品の使用が拒否される場合は、ダイアログボックスを顧客に提供し、そのソフトウェア製品の使用が拒否されていること、およびそのソフトウェア製品の今後の使用に関するさらなる情報を所与のソースから得られることを伝えることができる。
【００７４】
ＩＩＩ．詳細ハードウェア識別（ＶＨＷＩＤ）の他の使用法
本発明の詳細ハードウェア識別（ＶＨＷＩＤ）は、上述以外の他の目的にも使用することができる。本発明の一実施形態では、詳細ハードウェア識別（ＶＨＷＩＤ）を使用して、マシンを追跡するためのほぼ一意のインストールＩＤを作成する。本発明の別の実施形態では、顧客のコンピュータでソフトウェアを使用するためのライセンスを付与する際に、詳細ハードウェア識別（ＶＨＷＩＤ）をクリアリングハウスサーバで使用する。
【００７５】
本明細書についてその特定の実施形態との関連で詳細に説明したが、当業者は上述の説明を理解すればこれらの実施形態の変更形態、変形形態、および均等形態を容易に着想できることは理解されよう。したがって、本発明の範囲は、特許請求の範囲とその均等物の範囲として定義すべきである。
【図面の簡単な説明】
【００７６】
【図１】本発明を実施する例示的な動作環境の主要な構成要素の一部のブロック図である。
【図２】８個のコンポーネントクラスと、その８個のコンポーネントクラスに分散した計１９個のコンポーネントデバイスあるいはインスタンスを含む例示的なハードウェア構成の図である。
【図３】図２に示す例示的ハードウェア構成の１つの可能な詳細ハードウェア識別（ＶＨＷＩＤ）の図である。
【図４】あるハードウェア構成の詳細ハードウェア識別（ＶＨＷＩＤ）を決定する際の例示的ステップを示す流れ図である。
【図５】あるハードウェア構成の詳細ハードウェア識別（ＶＨＷＩＤ）を決定する際の例示的ステップを示す流れ図である。
【図６】あるハードウェア構成の詳細ハードウェア識別（ＶＨＷＩＤ）を決定する際の例示的ステップを示す流れ図である。
【図７】新しく生成された詳細ハードウェア識別（ＶＨＷＩＤ）と以前に生成された詳細ハードウェア識別（ＶＨＷＩＤ）とを比較することにより、コンピュータハードウェアシステムでソフトウェア製品を使用できるかどうかを判定する例示的ステップを示す流れ図である。
【符号の説明】
【００７７】
３１  光ディスク
３２  ハードディスクドライブインタフェース
３３  磁気ディスクドライブインタフェース
３４  光ディスクドライブインタフェース
３１０  バージョンコンポーネント
３１２  切捨て数値部分
【図１】
2004295871.tif 000004
【図２】
2004295871.tif 000005
【図３】
2004295871.tif 000006
【図４】
2004295871.tif 000007
【図５】
2004295871.tif 000008
【図６】
2004295871.tif 000009
【図７】
2004295871.tif 000010
【外国語明細書】
2004295871.tif 000011
2004295871.tif 000012
2004295871.tif 000013
2004295871.tif 000014
2004295871.tif 000015
2004295871.tif 000016
2004295871.tif 000017
2004295871.tif 000018
2004295871.tif 000019
2004295871.tif 000020
2004295871.tif 000021
2004295871.tif 000022
2004295871.tif 000023
2004295871.tif 000024
2004295871.tif 000025
2004295871.tif 000026
2004295871.tif 000027
2004295871.tif 000028
2004295871.tif 000029
2004295871.tif 000030
2004295871.tif 000031
2004295871.tif 000032
2004295871.tif 000033
2004295871.tif 000034
2004295871.tif 000035
2004295871.tif 000036
2004295871.tif 000037
2004295871.tif 000038
2004295871.tif 000039
2004295871.tif 000040
2004295871.tif 000041
2004295871.tif 000042
2004295871.tif 000043
2004295871.tif 000044
2004295871.tif 000045
2004295871.tif 000046