(57)【要約】【課題】  コンピュータシステムに秘密を結び付けるシステムおよび方法を提供すること。【解決手段】  所与のコンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）を生成するシステムおよび方法も開示される。強いハードウェア識別（ＳＨＷＩＤ）は、結び付けられた秘密に結合される。強いハードウェア識別（ＳＨＷＩＤ）を使用して、コンピュータシステムへのハードウェア変更の程度に応じて当該コンピュータシステムでのソフトウェアの使用を制御することができる。【選択図】  図１
2004266841.tif 000002
【特許請求の範囲】
【請求項１】
第１のハードウェア構成を有する第１のコンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）を生成する方法であって、
前記第１のハードウェア構成中の各コンポーネントクラスを識別するステップであって、コンポーネントクラスの数はｎに等しいステップと、
各コンポーネントクラスのクラスの積ｃｐを求めるステップと、
各コンポーネントクラスのクラスの部分的秘密Ｐｐを求めるステップと、
各コンポーネントクラスの前記クラスの積ｃｐと前記部分的秘密Ｐｐを足してｎ個の強いクラスＩＤを形成するステップと
を含み、
前記ｎ個の強いクラスＩＤは、組み合わさって前記第１のコンピュータシステムの前記強いハードウェア識別（ＳＨＷＩＤ）を形成することを特徴とする方法。
【請求項２】
前記ｎは約１６までの整数であることを特徴とする請求項１に記載の方法。
【請求項３】
前記各コンポーネントクラスのクラスの積ｃｐは、
コンポーネントクラスの数ｎを選択するステップと、
前記ｎ個のコンポーネントクラスを識別するステップと、
各コンポーネントクラス中のすべてのインスタンスを識別するステップと、
各コンポーネントインスタンスの識別ストリングを割り当てるステップと、
各コンポーネントインスタンスにインスタンス素数ｐｐ，ｑを生成するステップであって、各インスタンス素数は正の素数であり、ｐは１からｎの範囲の所与のコンポーネントクラス番号を表し、ｑは、前記第１のハードウェア構成中でｑ番目のコンポーネントタイプを表すステップと、
各コンポーネントクラス中の前記インスタンス素数を乗算して、各コンポーネントクラスのクラスの積ｃｐを形成するステップと
によって求められることを特徴とする請求項１に記載の方法。
【請求項４】
前記インスタンス素数を生成するステップは、素数生成関数ｆ（ｘ）に各コンポーネントインスタンスの前記識別ストリングを入力するステップを含み、ｘは、約６５，０００文字までの長さの前記識別ストリングであることを特徴とする請求項３に記載の方法。
【請求項５】
前記ｆ（ｘ）は、２ｔより大きい値の正の素数を生成し、ｔは約３２から約２，０４８の範囲の整数であることを特徴とする請求項４に記載の方法。
【請求項６】
各コンポーネントクラスの前記部分的な秘密Ｐｐは、
各コンポーネントクラスについての乱数ｒｐを生成するステップと、
各コンポーネントクラスについての素数ｐｐを生成するステップであって、各クラスの素数は正の素数であるステップと、
必要とされるコンポーネントクラスの一致の数ｍを選択するステップであって、ｍはｎ以下であるステップと、
Ｎを決定するステップであって、Ｎはｍ個の最も小さなクラス素数ｐｐの積に等しいステップと、
Ｍを決定するステップであって、Ｍは（ｍ−１）個の最も大きなクラス素数ｐｐの積に等しく、Ｎ未満であるステップと、
秘密の数Ｓを選択するステップであって、Ｍ＜Ｓ＜Ｎであるステップと、
各コンポーネントクラスのクラスの剰余ｄｐを求めるステップであって、ｄｐは、［Ｓ（ｍｏｄ  ｐｐ）］に等しいステップと、
各コンポーネントクラスの第１の２進値を形成するステップであって、前記第１の２進値は、ｕビットまでの第１の２進値中に符号化された各クラスの前記クラスの素数ｐｐであり、ｕはｔ未満であり、ｕとｔはともに約２，０４８未満であるステップと、
各コンポーネントクラスの第２の２進値を形成するステップであって、前記第２の２進値は、ｖビットまでの第２の２進値中に符号化された各クラスのクラスの剰余ｄｐであり、ｖはｔ未満であり、（ｕ＋ｖ＝ｔ）であるステップと、
前記第１の２進値と第２の２進値を連結して、合計のビット数がｔに等しい各コンポーネントクラスの部分的秘密Ｐｐを形成するステップと
によって求められることを特徴とする請求項１に記載の方法。
【請求項７】
前記ｒｐは乱数生成器を使用して生成され、０から２ｕ未満の範囲の値であることを特徴とする請求項６に記載の方法。
【請求項８】
各コンポーネントクラスのクラス素数ｐｐを生成する前記ステップは、素数生成関数ｇ（ｘ）に各コンポーネントクラスの前記乱数を入力するステップを含み、ｘは、約６５，０００文字までの長さを有する乱数であることを特徴とする請求項６に記載の方法。
【請求項９】
前記ｇ（ｘ）は、２より大きく２ｖ未満の範囲の値を有する正の素数を生成することを特徴とする請求項８に記載の方法。
【請求項１０】
前記方法は、前記第１のコンピュータシステムにソフトウェア製品をロードするステップ中に開始されることを特徴とする請求項１に記載の方法。
【請求項１１】
第２のハードウェア構成を有する第２のコンピュータシステムでソフトウェア製品を使用できるかどうかを判定する方法であって、前記第２のコンピュータシステムは前記第１のコンピュータシステムと同じであるか、または異なり、前記方法は、
請求項１に記載の方法によって生成される強いハードウェア識別（ＳＨＷＩＤ）を決定するのに使用される前記ｎ個のコンポーネントクラスを識別するステップと、
前記第２のハードウェア構成の各コンポーネントクラス中のすべてのインスタンスを識別するステップと、
各個々のコンポーネントインスタンスを表す識別ストリングを取り出すステップと、
各コンポーネントインスタンスのインスタンス素数ｉｐ，ｑを生成するステップであって、各インスタンス素数は正の素数であり、ｐは１からｎの範囲の所与のコンポーネントクラス番号を表し、ｑは前記第１のハードウェア構成または前記第２のハードウェア構成中でｑ番目のコンポーネントタイプを表すステップと、
可能なクラスの部分的秘密Ｐｐ，ｑを取り出し、
Ｐｐ，ｑ＝［Ｃｐ（ｍｏｄ  ｉｐ，ｑ）］
であるステップと、
前記可能なクラスの部分的秘密Ｐｐ，ｑから可能なクラス素数ｐｐ，ｑおよび可能なクラスの剰余ｄｐ，ｑを抽出するステップと、
前記可能なクラス素数と前記可能なクラス剰余の順列によって得られる合同式の集合を解いて、可能な秘密を生成するステップと、
所与の暗号文を復号することによって前記可能な秘密をテストし、暗号文に対応する知られる平文に照らして前記テストの結果をテストするステップと、
を含み、
前記復号された平文が前記知られる平文と一致する場合は、前記ソフトウェア製品を前記第２のコンピュータシステムにロードし、
前記復号された平文が前記知られる平文と一致しない場合は、前記ソフトウェア製品を前記第２のコンピュータシステムにロードすることを阻止することを特徴とする方法。
【請求項１２】
前記インスタンス素数を生成するステップは、素数生成関数ｆ（ｘ）に各個々のコンポーネントインスタンスを表す前記識別ストリングを入力するステップを含み、ｘは、約６５，０００文字までの長さの前記識別ストリングであることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記ｆ（ｘ）は、２ｔより大きい値の正の素数を生成し、ｔは約３２から約２，０４８の範囲の整数であることを特徴とする請求項１２に記載の方法。
【請求項１４】
当該コンピューティングシステムで使用することが可能な少なくとも１つのアプリケーションモジュールを含むコンピューティングシステムであって、前記少なくとも１つのアプリケーションモジュールは、請求項１に記載の方法を行うアプリケーションコードを含むことを特徴とするコンピューティングシステム。
【請求項１５】
請求項１に記載の方法を行うコンピュータ実行可能命令が格納されたことを特徴とするコンピュータ可読媒体。
【請求項１６】
第１のハードウェア構成を有する第１のコンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）を生成する方法を行うコンピュータ実行可能命令が格納されたコンピュータ可読媒体であって、前記方法は、
前記第１のハードウェア構成中の各コンポーネントクラスを識別するステップであって、コンポーネントクラスの数はｎに等しいステップと、
各コンポーネントクラスのクラスの積ｃｐを求めるステップと、
各コンポーネントクラスのクラスの部分的秘密Ｐｐを求めるステップと、
各コンポーネントクラスの前記クラスの積ｃｐと前記部分的秘密Ｐｐを足してｎ個の強いクラスＩＤを形成するステップと
を含み、
前記ｎ個の強いクラスＩＤは、組み合わさって前記第１のコンピュータシステムの前記強いハードウェア識別（ＳＨＷＩＤ）を形成することを特徴とするコンピュータ可読媒体。
【請求項１７】
前記ｎは約１６までの整数であることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
前記各コンポーネントクラスのクラスの積ｃｐは、
コンポーネントクラスの数ｎを選択するステップと、
前記ｎ個のコンポーネントクラスを識別するステップと、
各コンポーネントクラス中のすべてのインスタンスを識別するステップと、
各コンポーネントインスタンスの識別ストリングを割り当てるステップと、
各コンポーネントインスタンスにインスタンス素数ｐｐ，ｑを生成するステップであって、各インスタンス素数は正の素数であり、ｐは１からｎの範囲の所与のコンポーネントクラス番号を表し、ｑは、前記第１のハードウェア構成中でｑ番目のコンポーネントタイプを表すステップと、
各コンポーネントクラス中の前記インスタンス素数を乗算して、各コンポーネントクラスのクラスの積ｃｐを形成するステップと
によって求められることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１９】
前記インスタンス素数を生成するステップは、素数生成関数ｆ（ｘ）に各コンポーネントインスタンスの前記識別ストリングを入力するステップを含み、ｘは、約６５，０００文字までの長さの前記識別ストリングであることを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記ｆ（ｘ）は、２ｔより大きい値の正の素数を生成し、ｔは約３２から約２，０４８の範囲の整数であることを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２１】
各コンポーネントクラスの前記部分的な秘密Ｐｐは、
各コンポーネントクラスについての乱数ｒｐを生成するステップと、
各コンポーネントクラスについての素数ｐｐを生成するステップであって、各クラスの素数は正の素数であるステップと、
必要とされるコンポーネントクラスの一致の数ｍを選択するステップであって、ｍはｎ以下であるステップと、
Ｎを決定するステップであって、Ｎはｍ個の最も小さなクラス素数ｐｐの積に等しいステップと、
Ｍを決定するステップであって、Ｍは（ｍ−１）個の最も大きなクラス素数ｐｐの積に等しく、Ｎ未満であるステップと、
秘密の数Ｓを選択するステップであって、Ｍ＜Ｓ＜Ｎであるステップと、
各コンポーネントクラスのクラスの剰余ｄｐを求めるステップであって、ｄｐは、［Ｓ（ｍｏｄ  ｐｐ）］に等しいステップと、
各コンポーネントクラスの第１の２進値を形成するステップであって、前記第１の２進値は、ｕビットまでの第１の２進値中に符号化された各クラスの前記クラスの素数ｐｐであり、ｕはｔ未満であり、ｕとｔはともに約２，０４８未満であるステップと、
各コンポーネントクラスの第２の２進値を形成するステップであって、前記第２の２進値は、ｖビットまでの第２の２進値中に符号化された各クラスのクラスの剰余ｄｐであり、ｖはｔ未満であり、（ｕ＋ｖ＝ｔ）であるステップと、
前記第１の２進値と第２の２進値を連結して、合計のビット数がｔに等しい各コンポーネントクラスの部分的秘密Ｐｐを形成するステップと
によって求められることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２２】
前記各乱数ｒｐは乱数生成器を使用して生成され、０から２ｕ未満の範囲の値であることを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２３】
各コンポーネントクラスのクラス素数ｐｐを生成する前記ステップは、素数生成関数ｇ（ｘ）中に各コンポーネントクラスの前記乱数を入力するステップを含み、ｘは、約６５，０００文字までの長さを有する乱数であることを特徴とする請求項２１に記載のコンピュータ可読媒体。
【請求項２４】
前記ｇ（ｘ）は、２より大きく２ｖ未満の範囲である値を有する正の素数を生成することを特徴とする請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記方法は、前記第１のコンピュータシステムにソフトウェア製品をロードするステップ中に開始されることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２６】
第２のハードウェア構成を有する第２のコンピュータシステムでソフトウェア製品を使用できるかどうかを判定する方法を行うコンピュータ実行可能命令が格納されたコンピュータ可読媒体であって、前記第２のコンピュータシステムは前記第１のコンピュータシステムと同じであるか、または異なり、前記方法は、
請求項１６に記載の方法によって生成される強いハードウェア識別（ＳＨＷＩＤ）を決定するのに使用される前記ｎ個のコンポーネントクラスを識別するステップと、
前記第２のハードウェア構成の各コンポーネントクラス中のすべてのインスタンスを識別するステップと、
各個々のコンポーネントインスタンスを表す識別ストリングを取り出すステップと、
各コンポーネントインスタンスのインスタンス素数ｉｐ，ｑを生成するステップであって、各インスタンス素数は正の素数であり、ｐは１からｎの範囲の所与のコンポーネントクラス番号を表し、ｑは前記第１のハードウェア構成または前記第２のハードウェア構成中でｑ番目のコンポーネントタイプを表すステップと、
可能なクラスの部分的秘密Ｐｐ，ｑを取り出し、
Ｐｐ，ｑ＝［Ｃｐ（ｍｏｄ  ｉｐ，ｑ）］
であるステップと、
前記可能なクラスの部分的秘密Ｐｐ，ｑから可能なクラス素数ｐｐ，ｑおよび可能なクラスの剰余ｄｐ，ｑを抽出するステップと、
前記可能なクラス素数と前記可能なクラス剰余の順列によって得られる合同式の集合を解いて、可能な秘密を生成するステップと、
所与の暗号文を復号することによって前記可能な秘密をテストし、暗号文に対応する知られる平文に照らして前記テストの結果をテストするステップと、
を含み、
前記復号された平文が前記知られる平文と一致する場合は、前記ソフトウェア製品を前記第２のコンピュータシステムにロードし、
前記復号された平文が前記知られる平文と一致しない場合は、前記ソフトウェア製品を前記第２のコンピュータシステムにロードすることを阻止することを特徴とするコンピュータ可読媒体。
【請求項２７】
前記インスタンス素数を生成するステップは、素数生成関数ｆ（ｘ）に各個々のコンポーネントインスタンスを表す前記識別ストリングを入力するステップを含み、ｘは、約６５，０００文字までの長さの前記識別ストリングであることを特徴とする請求項２６に記載のコンピュータ可読媒体。
【請求項２８】
ｆ（ｘ）は、２ｔより大きい値の正の素数を生成し、ｔは約３２から約２，０４８の範囲の整数であることを特徴とする請求項２７に記載のコンピュータ可読媒体。
【請求項２９】
当該コンピューティングシステムで使用することが可能な少なくとも１つのアプリケーションモジュールを含むコンピューティングシステムであって、前記少なくとも１つのアプリケーションモジュールは、第１のハードウェア構成を有する第１のコンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）を生成する方法を行うアプリケーションコードを含み、前記方法は、
前記第１のハードウェア構成中の各コンポーネントクラスを識別するステップであって、前記コンポーネントクラスの数はｎに等しいステップと、
各コンポーネントクラスのクラスの積ｃｐを求めるステップと、
各コンポーネントクラスのクラスの部分的秘密Ｐｐを求めるステップと、
各コンポーネントクラスの前記クラスの積ｃｐと前記部分的秘密Ｐｐを足してｎ個の強いクラスＩＤを形成するステップと
を含み、
前記ｎ個の強いクラスＩＤは、組み合わさって前記第１のコンピュータシステムの前記強いハードウェア識別（ＳＨＷＩＤ）を形成することを特徴とするコンピューティングシステム。
【請求項３０】
前記ｎは約１６までの整数であることを特徴とする請求項２９に記載のコンピューティングシステム。
【請求項３１】
前記各コンポーネントクラスのクラスの積ｃｐは、
コンポーネントクラスの数ｎを選択するステップと、
前記ｎ個のコンポーネントクラスを識別するステップと、
各コンポーネントクラス中のすべてのインスタンスを識別するステップと、
各コンポーネントインスタンスの識別ストリングを割り当てるステップと、
各コンポーネントインスタンスにインスタンス素数ｐｐ，ｑを生成するステップであって、各インスタンス素数は正の素数であり、ｐは１からｎの範囲の所与のコンポーネントクラス番号を表し、ｑは、前記第１のハードウェア構成中でｑ番目のコンポーネントタイプを表すステップと、
各コンポーネントクラス中の前記インスタンス素数を乗算して、各コンポーネントクラスのクラスの積ｃｐを形成するステップと
によって求められることを特徴とする請求項２９に記載のコンピューティングシステム。
【請求項３２】
前記インスタンス素数を生成するステップは、素数生成関数ｆ（ｘ）に各コンポーネントインスタンスの前記識別ストリングを入力するステップを含み、ｘは、約６５，０００文字までの長さの前記識別ストリングであることを特徴とする請求項３１に記載のコンピューティングシステム。
【請求項３３】
前記ｆ（ｘ）は、２ｔより大きい値の正の素数を生成し、ｔは約３２から約２，０４８の範囲の整数であることを特徴とする請求項３２に記載のコンピューティングシステム。
【請求項３４】
各コンポーネントクラスの前記部分的な秘密Ｐｐは、
各コンポーネントクラスについての乱数ｒｐを生成するステップと、
各コンポーネントクラスについての素数ｐｐを生成するステップであって、各クラスの素数は正の素数であるステップと、
必要とされるコンポーネントクラスの一致の数ｍを選択するステップであって、ｍはｎ以下であるステップと、
Ｎを決定するステップであって、Ｎはｍ個の最も小さなクラス素数ｐｐの積に等しいステップと、
Ｍを決定するステップであって、Ｍは（ｍ−１）個の最も大きなクラス素数ｐｐの積に等しく、Ｎ未満であるステップと、
秘密の数Ｓを選択するステップであって、Ｍ＜Ｓ＜Ｎであるステップと、
各コンポーネントクラスのクラスの剰余ｄｐを求めるステップであって、ｄｐは、［Ｓ（ｍｏｄ  ｐｐ）］に等しいステップと、
各コンポーネントクラスの第１の２進値を形成するステップであって、前記第１の２進値は、ｕビットまでの第１の２進値中に符号化された各クラスの前記クラスの素数ｐｐであり、ｕはｔ未満であり、ｕとｔはともに約２，０４８未満であるステップと、
各コンポーネントクラスの第２の２進値を形成するステップであって、前記第２の２進値は、ｖビットまでの第２の２進値中に符号化された各クラスのクラスの剰余ｄｐであり、ｖはｔ未満であり、（ｕ＋ｖ＝ｔ）であるステップと、
前記第１の２進値と第２の２進値を連結して、合計のビット数がｔに等しい各コンポーネントクラスの部分的秘密Ｐｐを形成するステップと
によって求められることを特徴とする請求項２９に記載のコンピューティングシステム。
【請求項３５】
前記各乱数ｒｐは乱数生成器を使用して生成され、０から２ｕ未満の範囲の値であることを特徴とする請求項３４に記載のコンピューティングシステム。
【請求項３６】
各コンポーネントクラスのクラス素数ｐｐを生成する前記ステップは、素数生成関数ｇ（ｘ）中に各コンポーネントクラスの前記乱数を入力するステップを含み、ｘは、約６５，０００文字までの長さを有する乱数であることを特徴とする請求項３４に記載のコンピューティングシステム。
【請求項３７】
前記ｇ（ｘ）は、２より大きく２ｖ未満の範囲の値を有する正の素数を生成することを特徴とする請求項３６に記載のコンピューティングシステム。
【請求項３８】
前記方法は、前記第１のコンピュータシステムにソフトウェア製品をロードするステップ中に開始されることを特徴とする請求項２９に記載のコンピューティングシステム。
【請求項３９】
当該コンピューティングシステムで使用することが可能な少なくとも１つのアプリケーションモジュールを含むコンピューティングシステムであって、前記少なくとも１つのアプリケーションモジュールは、第２のハードウェア構成を有する第２のコンピュータシステムでソフトウェア製品を使用できるかどうかを判定する方法を行うアプリケーションコードを含み、前記第２のコンピュータシステムは、前記第１のコンピュータシステムと同じであるか、または異なり、前記方法は、
請求項２９に記載の方法によって生成される強いハードウェア識別（ＳＨＷＩＤ）を決定するのに使用される前記ｎ個のコンポーネントクラスを識別するステップと、
前記第２のハードウェア構成の各コンポーネントクラス中のすべてのインスタンスを識別するステップと、
各個々のコンポーネントインスタンスを表す識別ストリングを取り出すステップと、
各コンポーネントインスタンスのインスタンス素数ｉｐ，ｑを生成するステップであって、各インスタンス素数は正の素数であり、ｐは１からｎの範囲の所与のコンポーネントクラス番号を表し、ｑは前記第１のハードウェア構成または前記第２のハードウェア構成中でｑ番目のコンポーネントタイプを表すステップと、
可能なクラスの部分的秘密Ｐｐ，ｑを取り出し、
Ｐｐ，ｑ＝［Ｃｐ（ｍｏｄ  ｉｐ，ｑ）］
であるステップと、
前記可能なクラスの部分的秘密Ｐｐ，ｑから可能なクラス素数ｐｐ，ｑおよび可能なクラスの剰余ｄｐ，ｑを抽出するステップと、
前記可能なクラス素数と前記可能なクラス剰余の順列によって得られる合同式の集合を解いて、可能な秘密を生成するステップと、
所与の暗号文を復号することによって前記可能な秘密をテストし、暗号文に対応する知られる平文に照らして前記テストの結果をテストするステップと、
を含み、
前記復号された平文が前記知られる平文と一致する場合は、前記ソフトウェア製品を前記第２のコンピュータシステムにロードし、
前記復号された平文が前記知られる平文と一致しない場合は、前記ソフトウェア製品を前記第２のコンピュータシステムにロードすることを阻止することを特徴とするコンピューティングシステム。
【請求項４０】
前記インスタンス素数を生成するステップは、素数生成関数ｆ（ｘ）に各個々のコンポーネントインスタンスを表す前記識別ストリングを入力するステップを含み、ｘは、約６５，０００文字までの長さの前記識別ストリングであることを特徴とする請求項３９に記載のコンピューティングシステム。
【請求項４１】
前記ｆ（ｘ）は、２ｔより大きい値の正の素数を生成し、ｔは約３２から約２，０４８の範囲の整数であることを特徴とする請求項４０に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所与のコンピュータシステムに秘密を結び付けるシステムおよび方法に関する。本発明は、所与のコンピュータシステムの強いハードウェア識別を生成するシステムおよび方法にも関し、強いハードウェア識別のコンポーネントを結び付けられた秘密に結合する。生成された強いハードウェア識別を使用して、所与のコンピュータシステムに行われたハードウェア変更の程度に応じてコンピュータシステムにおけるソフトウェアの使用を制御することができる。
【背景技術】
【０００２】
近年、コンピュータソフトウェアの不法使用を防止する、あるいは最小限に抑えるために多大な取り組みがなされている。その再現可能性と配布の容易さのためにライセンス同意の範囲を超えたコンピュータソフトウェアの著作権侵害行為と不法使用は一般的に行われており、それによりソフトウェア製造者が多大な損害を受けている。
【０００３】
【特許文献１】米国特許第６，２４３，４６８号明細書
【非特許文献１】Applied・Cryptography,・Second・Edition・by・Bruce・Schneier,・pages・259-260
【非特許文献２】Prime Numbers・by・Crandell・and・Pomerance,・Chapter・8
【非特許文献３】The・Mathematics・of・Ciphers・by・S.C.・Coutinho,・Chapter・7
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ライセンス同意の範囲を超えたコンピュータソフトウェアの著作権侵害行為とコンピュータソフトウェアの不法使用の発生を減らそうとして各種の方法が開発されている。しかし、そのような方法はしばしば、正当なソフトウェアの購入者とユーザに対して消費者にとっての不便性という形の問題を引き起こす。例えば、自分のコンピュータをアップグレードしたユーザは、アップグレード後のマシンに合法的にソフトウェア製品を再インストールできなければならない。しかし、現在利用可能な方法では、（ｉ）ソフトウェアをインストールすることができないか、（ｉｉ）（その時点で不満を抱いている）ユーザが支援を得るためにソフトウェア製造者に電話することを余儀なくされる場合がある。
【０００５】
したがって、正当なソフトウェア購入者およびユーザのニーズと慣行も認識し、それに対応する、著作権侵害行為および不正使用に対する改良された技術による解決法がなお必要とされる。
【課題を解決するための手段】
【０００６】
本発明は、所与のコンピュータシステムに秘密を結び付ける方法と、秘密に結合された改良されたハードウェア識別の発見により上述の問題および課題の一部に対処する。本発明のハードウェア識別は、ライセンス同意の範囲を超えたソフトウェアの著作権侵害行為とコンピュータソフトウェアの不法使用をできる限り抑えるか、あるいは防止し、同時に正当なソフトウェアユーザによるマシンのアップグレードを可能にする方法を提供する。
【０００７】
「強いハードウェア識別」（ＳＨＷＩＤ）と称する本発明のハードウェア識別は、（１）ハードウェア識別コンポーネントと、（２）部分的秘密のコンポーネント、の２つの別個のコンポーネントからなる。（１）ハードウェア識別コンポーネントと（２）部分的秘密のコンポーネントを共に組み合わせることにより、所与のコンピュータシステムのよりセキュアで信頼性の高い強いハードウェア識別（ＳＨＷＩＤ）が生成される。
【０００８】
この強いハードウェア識別（ＳＩＷＩＤ）を使用して、コンピュータにソフトウェア製品をロードする時に、所与のハードウェア構成を識別することができる。強いハードウェア識別（ＳＨＷＩＤ）は、（ｉ）同じソフトウェア製品が同じコンピュータまたは同じコンピュータのバリエーションで起動される時、または（ｉｉ）同じソフトウェア製品が同じコンピュータのバリエーションまたは全く異なるコンピュータに、再度ロードされる時、などの将来の使用のために記憶することができる。例えば、同じソフトウェア製品が同じコンピュータまたは同じコンピュータのバリエーションで起動される時には、元の強いハードウェア識別（ＳＨＷＩＤ）に結合された秘密を生成できるかどうかが判定される。秘密を生成できる場合、本発明の方法は、ソフトウェア製品の起動を許可する。しかし、秘密が生成できない場合、本発明の方法は、元のハードウェアシステムに要求される閾値を超える変更があるためにソフトウェア製品の起動を許可しない。
【０００９】
したがって、本発明は、所与のコンピュータシステムに秘密を結び付ける方法と、秘密に結合された強いハードウェア識別（ＳＨＷＩＤ）とを対象とする。本発明はさらに、元の強いハードウェア識別（ＳＨＷＩＤ）に結合された秘密をコンピュータシステム上で取り出すことができない場合に、コンピュータシステムにおけるソフトウェアの使用を阻止する方法を対象とする。
【００１０】
本発明のこれらおよびその他の特徴および利点は、以下の開示される実施形態の詳細な説明と特許請求の範囲を検討することにより明らかになろう。
【発明を実施するための最良の形態】
【００１１】
本発明の原理の理解を促すために、以下で本発明の特定の実施形態を説明し、特定の術語を使用してそれら特定の実施形態を説明する。ただし、特定の術語の使用によって本発明の範囲の制限を意図するものではないことは理解されよう。ここで述べる本発明の原理の変更、さらなる修正、およびさらなる応用は、本発明が関連する当業者に普通に着想されることが企図される。
【００１２】
本発明は、所与のコンピュータシステムに秘密を結び付ける方法、および秘密と結合された強いハードウェア識別（ＳＨＷＩＤ）を対象とする。秘密は通例、無作為に選択された整数からなる。秘密は次の特性を備えることが望ましい。
（１）秘密Ｓは、ハードウェア構成Ｈで計算することができる。
（２）秘密Ｓは、望まれる閾値量のコンポーネント変更以下の量のコンポーネント変更が行われたハードウェア構成Ｈであるハードウェア構成Ｈ１で計算することができる。
（３）秘密Ｓは、他のハードウェア構成Ｈ２では計算することが実質的に不可能である。
【００１３】
前記秘密を使用して、各種のハードウェアコンポーネントを含む所与のコンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）を生成することができる。例示的なコンピュータシステムは、これらに限定しないが、ハードディスクドライブ、ＣＤ−ＲＯＭドライブなどの光ディスクドライブ、ネットワークカード、ディスプレイアダプタ、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および基本入出力システム（ＢＩＯＳ）を含む複数のハードウェアコンポーネントクラスを含むことが可能である。次いで本発明を実施するための例示的なコンピュータシステムおよび例示的動作環境について説明する。
【００１４】
例示的動作環境
以下で図面を参照して本発明の例示的実施形態を説明するが、すべての図面で同様の要素は同様の参照符号によって表す。図１に、本発明を実施するための例示的な動作環境を示す。例示的動作環境は、従来のパーソナルコンピュータ２０の形態の汎用コンピューティングデバイスを含む。一般に、パーソナルコンピュータ２０は、処理装置２１、システムメモリ２２、およびシステムメモリ２２を含む各種のシステム構成要素を処理装置２１に結合するシステムバス２３を含む。システムバス２３は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数タイプのバス構造のいずれでもよい。システムメモリは、読み取り専用メモリ（ＲＯＭ）２４およびランダムアクセスメモリ（ＲＡＭ）２５を含む。起動時などにパーソナルコンピュータ２０内の要素間の情報転送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）２６は、ＲＯＭ２４に記憶される。
【００１５】
パーソナルコンピュータ２０はさらに、図示しないハードディスクの読み書きを行うハードディスクドライブ２７、取り外し可能の磁気ディスク２９の読み書きを行う磁気ディスクドライブ２８、およびＣＤ−ＲＯＭや他の光学媒体などの取り外し可能の光ディスク３１の読み書きを行う光ディスクドライブ３０を含む。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、それぞれハードディスクドライブインタフェース３２、磁気ディスクドライブインタフェース３３、および光ディスクドライブインタフェース３４によってシステムバス２３に接続される。ここで説明する例示的環境ではハードディスク２７、取り外し可能磁気ディスク２９、および取り外し可能光ディスク３１を用いるが、当業者には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなど、コンピュータからアクセスすることが可能なデータを記憶することができる他のタイプのコンピュータ可読媒体もこの例示的動作環境で使用できることが理解されよう。これらのドライブとそれに関連付けられたコンピュータ記憶媒体は、パーソナルコンピュータ２０のコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性の記憶を提供する。例えば、パーソナルコンピュータ２０のＲＡＭ２５および／またはハードドライブ２７には１つまたは複数のデータファイル６０（図示せず）を記憶することができる。
【００１６】
ハードディスク２７、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５には複数のプログラムモジュールを記憶することができ、これにはオペレーティングシステム３５、アプリケーションプログラムモジュール３６、他のプログラムモジュール３７、およびプログラムデータ３８が含まれる。プログラムモジュールには、これらに限定しないが、特定タスクを行うか、特定の抽象データ型を実装するルーチン、サブルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明の態様は、アプリケーションプログラムモジュール３６の一体部分として、または別のプログラムモジュール３７の一部分として実施することができる。
【００１７】
ユーザは、キーボード４０およびポインティングデバイス４２などの入力装置を通じてパーソナルコンピュータ２０にコマンドと情報を入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナなどがある。これらおよびその他の入力装置は、システムバス２３に結合されたシリアルポートインタフェース４６を通じて処理装置２２に接続することが多いが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースによって接続することも可能である。モニタ４７または他タイプの表示装置も、ビデオアダプタ４８などのインタフェースを介してシステムバス２３に接続される。パーソナルコンピュータは、モニタに加えて、通例スピーカやプリンタなど他の周辺出力装置（図示せず）も含む。
【００１８】
パーソナルコンピュータ２０は、１つまたは複数のリモートコンピュータ４９との論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ４９は、別のパーソナルコンピュータ、サーバ、クライアント、ルータ、ネットワークＰＣ、ピアデバイス、あるいはその他の一般的なネットワークノードでよい。リモートコンピュータ４９は通例、上記でパーソナルコンピュータ２０との関連で挙げた要素の多くまたはすべてを含むが、図１にはメモリ記憶装置５０のみを示している。図１に示す論理接続は、構内ネットワーク（ＬＡＮ）５１と広域ネットワーク（ＷＡＮ）５２を含む。このようなネットワーキング環境は、オフィス、企業内のコンピュータネットワーク、イントラネット、およびインターネットに一般的に見られる。
【００１９】
ＬＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ２０はネットワークインタフェースまたはアダプタ５３を通じてローカルエリアネットワーク５１に接続される。ＷＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ２０は通例、インターネットなどのＷＡＮ５２を通じて通信を確立するためのモデム５４またはその他の手段を含む。モデム５４は内蔵型でも外付け型でもよく、シリアルポートインタフェース４６を介してシステムバス２３に接続することができる。ネットワーク環境では、パーソナルコンピュータ２０との関連で図示したプログラムモジュール、またはその一部は遠隔のメモリ記憶装置５０に格納することができる。図のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用できることは理解されよう。
【００２０】
さらに、当業者には、本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースを利用した、あるいはプログラム可能な消費者家電製品、ネットワークパーソナルコンピュータ、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成で実施することが可能であることを理解されよう。本発明は、通信ネットワークを通じてリンクされた遠隔の処理デバイスによってタスクを行う分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモート両方のメモリ記憶装置に置くことができる。
【００２１】
本発明の例示的実施形態の実施
上述のように、コンピュータシステムは通例、複数のハードウェアコンポーネントクラスを備える。さらに、コンピュータシステムは、各ハードウェアコンポーネントのクラスに複数のコンポーネント（例えば２つのハードディスクドライブなど）を含む可能性がある。
【００２２】
本発明の強いハードウェア識別（ＳＨＷＩＤ）は、各ハードウェアコンポーネントクラスの各コンポーネント（「インスタンス」とも称する）を考慮する。本発明の強いハードウェア識別（ＳＨＷＩＤ）は、所与のコンピュータハードウェアシステムに結び付けられた秘密Ｓも考慮する。
【００２３】
本発明の強いハードウェア識別（ＳＨＷＩＤ）を生成する例示的方法について下記で説明する。さらに、強いハードウェア識別（ＳＨＷＩＤ）を著作権侵害行為の防止ツールとして使用する方法についても下記で説明する。
【００２４】
Ｉ．コンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）の生成
所与のコンピュータシステムの強いハードウェア識別（ＳＨＷＩＤ）は、（１）ハードウェアコンポーネント、および（２）部分的秘密のコンポーネント、の２つの別個のコンポーネントからなる。これらのコンポーネントを決定する例示的方法を下記で説明する。この例示的方法のステップは、上記で図１を参照して説明したコンピュータ２０と同様の顧客のコンピュータ上のソフトウェア製品のソフトウェアコードによって行うことができる。
【００２５】
Ａ．ＳＨＷＩＤのハードウェアコンポーネントの決定
本発明のＳＨＷＩＤは、各ハードウェアコンポーネントクラスのクラスの積を含む。ＳＨＷＩＤのハードウェアコンポーネントは、図２に示すように決定することができる。
【００２６】
図２に示すように、ＳＨＷＩＤのハードウェアコンポーネントの例示的な決定はステップ２０１で開始し、ここで所与のコンピュータシステムを識別するいくつかの数ｎのコンポーネントクラスを選択する。上述のように、所与のコンピュータシステムは、各種のハードウェアコンポーネントとハードウェアコンポーネントクラスを含むことが可能である。例示的なハードウェアコンポーネントクラスには、これらに限定しないが、ハードディスクドライブ、光ディスクドライブ、ネットワークカード、サウンドカード、ディスプレイアダプタ、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、およびＢＩＯＳシステムが含まれる。ハードウェアコンポーネントクラスの数ｎは、約２から約１６の範囲の整数であることが望ましい。一般に、（ｉ）所与のコンピュータシステムをより正確に識別するため、（ｉｉ）所与のコンピュータシステムの許容度をより精密に測定するため、および（ｉｉｉ）秘密Ｓのより高いレベルのセキュリティを可能にするために、ｎは可能な限り大きいことが望ましい。
【００２７】
ステップ２０１でコンポーネントクラスの数ｎを選択すると、ステップ２０２で各コンポーネントクラスを識別する。コンポーネントクラスは、ハードディスクドライブのクラスなど上述のコンポーネントクラスのいずれを含んでもよい。コンポーネントクラスの例示的なリストを下の表１に示す。
【００２８】
【表１】
2004266841.tif 000003
【００２９】
表１に示すように、この例では、ｎは４であり、識別されるハードウェアコンポーネントクラスは、（１）ＣＤ−ＲＯＭクラス、（２）ハードディスクドライブクラス、（３）ネットワークカードクラス、および（４）ディスプレイアダプタデバイスクラス、である。
【００３０】
ステップ２０２で各コンポーネントクラスを識別すると、ステップ２０３で、各ハードウェアコンポーネントクラスのすべてのインスタンスを識別する。特定のコンポーネントクラスの各インスタンスは、そのインスタンスに関連付けられた最も一意の識別ストリングで表されることが望ましい。例えば、ハードウェア構成は、ＮＥＣ社によって製造され、識別ストリング「ＮＥＣ  ＣＤＲＷ２４  Ｓ１５」を有するＣＤ−ＲＯＭドライブを含む可能性がある。デバイス照会とオペレーティングシステムＡＰＩの関数呼び出しを含む、所与のインスタンスの最も一意の識別ストリングを判定する任意の利用可能な方法を本発明で使用することができる。コンピュータハードウェア構成と、各ハードウェアコンポーネントクラスのインスタンスの一例を下の表２に示す。
【００３１】
【表２】
2004266841.tif 000004
【００３２】
上の表２に示すように、クラス１であるＣＤ−ＲＯＭクラスは２つのコンポーネントインスタンスを含み、クラス２のディスクハードドライブクラスは２つのコンポーネントインスタンスを含み、クラス３のネットワークカードクラスは１つのインスタンスを含み、クラス４のディスプレイアダプタデバイスクラスは１つのインスタンスを含んでいる。
【００３３】
ステップ２０５で、素数生成関数ｆ（ｘ）を使用して各コンポーネントインスタンスのインスタンス素数を生成する。関数ｆ（ｘ）は、次の特性を備えることが望ましい。
【００３４】
（ａ）ｆ（ｘ）の結果は正の素数。
（ｂ）ｘは、約６５，０００文字までの長さの任意のデータでよい。
（ｃ）ｆ（ｘ）＞２ｔ。ｔは望ましくは約３２より大きい整数。ｔは約６４以上であることが望ましい。ただしｔの値に制限はない。
（ｄ）ｆ（ｘ）の結果は、ｘの値に基づいて決定性である。
【００３５】
各コンポーネントインスタンスの素数を生成するには、任意の素数生成関数ｆ（ｘ）を本発明で使用することができる。上述のように、素数生成関数ｆ（ｘ）は、上記の特性を備えることが望ましい。適切な素数生成関数ｆ（ｘ）には、これに限定しないが、Ｒａｂｉｎ−Ｍｉｌｌｅｒアルゴリズム（非特許文献１参照）に基づく素数生成関数ｆ（ｘ）がある。同文献の開示は参照によりすべて本明細書に組み込まれる。
【００３６】
下の表３に、例示的ハードウェア構成のコンポーネントインスタンスのインスタンス素数ｉｐ，ｑの一覧を示す。
【００３７】
【表３】
2004266841.tif 000005
【００３８】
ここで使用する場合、インスタンス素数ｉｐ，ｑは、所与のクラスｐ中の所与のコンポーネントインスタンスｑについてのインスタンス素数を表すものとして使用する。例えば、インスタンス素数ｉ１，２は、コンポーネントクラス１（例えば、ｐ＝１）のコンポーネントインスタンス、より具体的には、コンポーネントクラス１とコンピュータハードウェア構成中で２番目のコンポーネントインスタンス（例えば、ｑ＝２）のインスタンス素数を識別するものとして使用する。
【００３９】
本発明の一実施形態では、所与のコンポーネントインスタンスのインスタンス素数を生成する前にコンポーネントインスタンスの識別子に「ｓａｌｔ値」を追加することができる。この実施形態では、ｓａｌｔ値を追加することにより、同じコンピュータハードウェア構成に基づいて異なるＳＨＷＩＤを生成することが可能になる。アプリケーションコードまたはユーザ識別から導出されるｓａｌｔ値は、同じハードウェア構成で実行される複数の異なるアプリケーションまたはユーザに異なるＳＨＷＩＤを生成することを可能にし、これは、特定のアプリケーションまたはユーザのみによって消費されるようにデータを保護する際に有用である可能性がある。
【００４０】
各コンポーネントクラスのインスタンス素数を生成すると、ステップ２０６で各コンポーネントクラスにクラスの積ｃｐを生成する。クラスの積ｃｐは、所与のクラス中のインスタンス素数を互いと乗算することによって生成する。例示的なクラスの積ｃ１〜ｃ４を下の表４に示す。
【００４１】
【表４】
2004266841.tif 000006
【００４２】
表４に示すように、ハードウェアコンポーネントクラスＣＤ−ＲＯＭクラスの積ｃ１は、２つのインスタンスｉ１，１とｉ１，２の積に等しい。クラスの積ｃ３のように単一のインスタンス素数から得られるクラスの積は、追加的な非インスタンスの素数で乗算して、所与のクラスの積を因数分解する困難さを高めることが可能であることに留意されたい。これは、特に上の表４に示すクラスの積ｃ３またはクラスの積ｃ４など単一のインスタンス素数からなるクラスの積に有用である。追加的な非インスタンスの素数を使用してクラスの積の値を増す場合、追加的な非インスタンスの素数は、２より大きく２ｔ未満の範囲であることが望ましく、ｔは上述のように任意の整数である。これにより、別のハードウェア構成のインスタンス素数との意図しない衝突が生じるリスクが緩和される。
【００４３】
ステップ２０７で、下記で述べるように各コンポーネントクラスの強いクラス識別Ｃｐに入力するために各クラスの積ｃｐを格納する。さらに、下記で述べるように、各クラスの各強いクラス識別Ｃｐの組み合わせを使用して、所与のコンピュータハードウェアシステムの強いハードウェア識別（ＳＨＷＩＤ）を生成する。クラスの積ｃｐは、所与のコンピュータハードウェアシステムの強いハードウェア識別（ＳＨＷＩＤ）のハードウェアコンポーネントに相当する。
【００４４】
Ｂ．ＳＨＷＩＤの部分的秘密コンポーネントの決定
本発明の強いハードウェア識別（ＳＨＷＩＤ）は、各ハードウェアコンポーネントクラスについての部分的な秘密のコンポーネントも含む。ＳＨＷＩＤの部分的秘密コンポーネントを決定する例示的方法を図３〜４に示す。この例示的方法のステップは、上記で図１を参照して説明したコンピュータ２０と同様の顧客のコンピュータのソフトウェア製品中のソフトウェアコードによって行うことができる。
【００４５】
図３のステップ３０１で、乱数生成器を使用して各コンポーネントクラスに乱数ｒｐを生成する。乱数ｒｐの生成には任意の従来の乱数生成器を使用してよい。適切な乱数生成器には、これに限定しないが、（非特許文献２）に開示される乱数生成器が挙げられる。同文献の開示は参照によりその全体を本明細書に組み込む。乱数ｒｐは、０以上２ｕ未満の範囲であることが望ましく、ｕは上記のｔより小さい。通例、ｕは、ｔを３で割った数にほぼ等しい。
【００４６】
ステップ３０１で生成した各ハードウェアコンポーネントクラスの乱数ｒｐを使用して、ステップ３０２で素数生成関数ｇ（ｒｐ）を使用してクラス素数ｐｐを生成する。素数生成関数ｇ（ｒｐ）は次の特性を備えることが望ましい。
【００４７】
（ａ）  ｇ（ｒｐ）の結果は正の素数。
（ｂ）  ｇ（ｒｐ）＜２ｖ。ｖはｕより大きい整数。
（ｃ）  ｕ＋ｖ＝ｔ
（ｄ）  ｇ（ｒｐ）の結果は、ｒｐの値に基づいて決定性である。
【００４８】
上記の素数生成関数ｆ（ｘ）と同様に、各コンポーネントクラスの乱数ｒｐについての素数の生成には、任意の素数生成関数ｇ（ｘ）を本発明で使用することができる。上述のように、素数生成関数ｇ（ｘ）は、上記の特性を備えることが望ましい。適切な素数生成関数ｇ（ｘ）には、これに限定しないが、（非特許文献１）に開示される素数生成関数ｇ（ｘ）が含まれる。同文献の開示は参照によりその全体を本明細書に組み込む。
【００４９】
ｇ（ｒｐ）、ｔ、ｕ、およびｖの関係の一例を下に挙げる。
ｔ＝６４
ｕ＝２０
ｖ＝４４
０＜ｒｐ＜２ｕ（２２０＝１，０４８，５７６）
２＜ｇ（ｒｐ）＜２ｖ
【００５０】
例示的コンピュータシステムのｎ個のクラス（ｎ＝４）それぞれのクラス素数ｐｐの例示的リストを下の表５に示す。
【００５１】
【表５】
2004266841.tif 000007
【００５２】
所与のハードウェア構成のクラス素数間の関係を示すサンプル出力を次のように与えることができる。
２＜ｐ２＜ｐ３＜ｐ１＜ｐ４＜２ｖ
【００５３】
ステップ３０３で、ハードウェア構成のコンポーネント変更について求められる許容度に応じて、必要とされるコンポーネントクラスの一致数ｍを選択する。必要とされるコンポーネントクラスの一致数ｍは、コンポーネントクラスの総数ｎと同じ大きさであっても、わずか１でもよい。ｍが増すのに従い、コンピュータハードウェア構成の変更の許容度が低くなる。例えば、コンポーネントクラスの総数ｎが４であり、ｍが３である場合は、秘密Ｓを取り出してソフトウェア製品のロードまたは実行を可能にするには、４つの全コンポーネントクラスのうち３つが少なくとも１つのコンポーネントインスタンスと一致しなければならない。コンポーネントクラスの一致の数が２以下である場合は、秘密Ｓは取り出されず、ソフトウェア製品はそのコンピュータハードウェア構成で実行あるいはロードされない。
【００５４】
必要とされるコンポーネントクラスの一致の数ｍは、ソフトウェアの製造者によって事前に決定し、本発明のＳＨＷＩＤ生成方法中に符号化することができる。ｍを選択すると、ステップ３０４および３０５に示すように追加的なパラメータを決定する。
【００５５】
ステップ３０４でパラメータＮを決定し、Ｎは、ｍ個の最も小さいクラス素数ｐｐの積に等しい。例えば、上述のクラス素数のサンプル出力では、２つの最も小さいクラス素数はｐ２とｐ３である。ｍが２である場合、Ｎは（ｐ２）×（ｐ３）に等しくなる。
【００５６】
ステップ３０５でパラメータＭを決定し、Ｍは、（ｍ−１）個の最も大きなクラス素数ｐｐの積に等しい。例えば、上記のクラス素数のサンプル出力ではｐ４が最大のクラス素数である。ｍが２である場合、Ｍは、単一の最大のクラス素数ｐ４の積に等しくなる（すなわち（Ｍ−１）＝１）。所与のクラス素数のセットの閾値がｍになるように、ＭはＮ未満でなければならないことに留意されたい。これは、閾値に基づく秘密共有の方式の一実施である（非特許文献３参照）。同文献の開示は参照により全体を本明細書に組み込む。
【００５７】
パラメータＮおよびＭを決定すると、ステップ３０６で秘密Ｓを選択する。秘密Ｓは、Ｍより大きくＮ未満である。さらに、秘密Ｓは、ＭからＮの間の任意の乱数である。
【００５８】
ステップ３０７で、次の式を使用してクラスの剰余ｄｐを計算する。
ｄｐ＝Ｓ  ｍｏｄ  Ｐｐ
【００５９】
例示的なクラスの剰余ｄｐのセットを下の表６に示す。
【００６０】
【表６】
2004266841.tif 000008
【００６１】
図４のステップ３０８で、各コンポーネントクラスのクラス素数ｐｐを、各コンポーネントクラスの第１の２進値中に符号化する。第１の２進値はそれぞれｕビットである。各クラス素数ｐｐは、次の関係のためにｕビットで表せることに留意されたい。
ｐｐ＝ｇ（ｒｐ）    ここで０＜＝ｒｐ＜２ｕ
取り出し時にｇ（ｒｐ）が得られればｐｐはｒｐによって表すことができる
ｒｐはｕビットで表すことができる
【００６２】
ｐｐは、以下の理由により、取り出し時にｇ（ｒｐ）を得ることができ、素数生成関数ｇ（）が分かっていればｒｐで表すことができる。ｐｐがｇ（ｒｐ）に等しく、素数生成関数ｇ（）が分かっている場合は、パラメータｒｐを用いてｇ（）を実行することでｐｐを再生成するには、ｒｐが分かれば十分である。ｒｐを符号化するにはｕビット（上の例では２０ビット）が必要であり、一方ｐｐにはｖビット（上の例では４４ビット）が必要である。ｐｐをｒｐとして表すことにより、必要なビット数の節減が実現される。
【００６３】
ステップ３０９で、各クラスの剰余ｄｐを、各コンポーネントクラスの第２の２進値中に符号化する。第２の２進値は、ｖビットで表すことができる。次の関係の結果、クラスの剰余ｄｐはｖビットで表せることに留意されたい。
ｄｐ＝Ｓ  ｍｏｄ  ｐｐ
０＜ｐｐ＜２ｖ
したがってｄｐ＜２ｖ
【００６４】
ステップ３１０で、ステップ３０８で生成した第１の２進値をステップ３０９の第２の２進値と連結して、合計ｔビット（すなわちｔ＝ｕ＋ｖ）の符号化されたコンポーネントクラスの部分的な秘密Ｐｐを形成する。コンポーネントクラスの部分的な秘密Ｐｐは、コンポーネントクラスごとに生成される。
【００６５】
所与のコンポーネントクラスのクラス部分的な秘密Ｐｐは、ｖビット未満の第２の２進値のために使用されないビットｚを含む可能性があることに留意されたい。その場合、使用されないビットｚにランダムノイズを埋めて、クラスの部分的な秘密Ｐｐを求めようとして符号化されたクラスの部分的な秘密Ｐｐを評価する、ｇ（ｒｐ）の特性を知る攻撃者を阻止することができる。例えば、ｐｐが２〜２ｖの範囲である場合、ｄｐは常に＜ｐｐである。ｐｐが２ｖより大幅に小さい場合は、ｄｐを符号化するのに必要なビットはｖビットよりも大幅に少なくなる。攻撃者は、ｄｐの値に基づいてｐｐの大きさの推測を行うことができる。ｄｐの不使用の［ｖ−（（ｄｐ）の大きさ）］ビットを埋めるランダムノイズを追加することにより、ｐｐの大きさを秘匿する助けとなる。
【００６６】
Ｃ．コンピュータシステムのＳＨＷＩＤ
これで、ステップ２０７で得たクラスの積ｃｐとステップ３１０で得たクラスの部分的な秘密Ｐｐを使用して強いハードウェア識別（ＳＨＷＩＤ）を構成することができる。図５のステップ４０１に示すように、クラスの強い識別（ＩＤ）Ｃｐを各コンポーネントクラスに作成し、ここでＣｐ＝ｃｐ＋Ｐｐである。ステップ４０２で、コンポーネントクラスのすべてのクラスの強いＩＤ、Ｃｐを組み合わせて強いハードウェア識別（ＳＨＷＩＤ）を形成する。得られたＳＨＷＩＤは、将来の取り出しのために記憶する。ＳＨＷＩＤは、ローカルに（レジストリ、ファイルシステム、セキュアなストアなど）に記憶しても、アクセス可能な遠隔の場所（データベースなど）に記憶してもよい。
【００６７】
より多くのビット数を有するクラスの部分的な秘密を生成するためにｔの値を増すことにより、セキュリティの増大が得られることに留意されたい。
【００６８】
ＩＩ．強いハードウェア識別（ＳＨＷＩＤ）を使用したコンピュータシステムからの秘密の取り出し
本発明はさらに、所与のコンピュータハードウェア構成から結び付けられた秘密Ｓを取り出す、または取り出しを試みる方法を対象とする。本発明の一実施形態では、所与のコンピュータハードウェア構成から結び付けられた秘密Ｓを取り出すことを試みる方法は、（ｉ）ソフトウェア製品のインストール時、（ｉｉ）ハードウェア構成のあるコンポーネントにすでに存在するソフトウェアアプリケーションのロード時、あるいは（ｉｉｉ）その両方、に開始される。ハードウェア構成から結び付けられた秘密Ｓを取り出す例示的方法を図６〜７に示す。この例示的方法のステップは、図１を参照して上記で説明したコンピュータ２０と同様の顧客のコンピュータのソフトウェア製品中のソフトウェアコードによって行うことができる。
【００６９】
図６のステップ５０１で、所与のコンピュータハードウェア構成の強いハードウェア識別（ＳＨＷＩＤ）の強いクラスＩＤ、Ｃｐを識別する。本発明を説明するために、３つの個別のハードウェア構成Ｈ、Ｈ１、およびＨ２から結び付けられた秘密Ｓを取り出す方法を、ハードウェア構成Ｈから決定された以前から記憶されていた強いハードウェア識別（ＳＨＷＩＤ）を使用して説明する。この３つの個別のハードウェア識別は、（ｉ）ＳＨＷＩＤがそれについて発行されたハードウェア構成と全く同じハードウェア構成Ｈ、（ｉｉ）許容できる許容度の１つまたは複数のコンポーネント変更が行われたハードウェア構成Ｈであるハードウェア構成Ｈ１、（ｉｉｉ）ハードウェア構成Ｈと比較して許容度を超える程のコンポーネントの変更があるハードウェア構成Ｈに相当するハードウェア構成Ｈ２、を含む。
【００７０】
ハードウェア構成Ｈ、Ｈ１、およびＨ２の強いクラスＩＤの例示的セットを下の表７に示す。
【００７１】
【表７】
2004266841.tif 000009
【００７２】
ステップ５０２で、所与のハードウェア構成の各コンポーネントクラス中のすべてのインスタンスを識別する。上述のように、各コンポーネントインスタンスの識別には任意の従来の方法を使用してよい。通例は、コンポーネントインスタンスは、そのコンポーネントの最も固有の識別ストリングによって識別される。例示的な構成Ｈ、Ｈ１、およびＨ２の各コンポーネントインスタンスの例示的な識別ストリングを下の表８〜１０に示す。
【００７３】
【表８】
2004266841.tif 000010
【００７４】
【表９】
2004266841.tif 000011
【００７５】
【表１０】
2004266841.tif 000012
【００７６】
所与のハードウェア構成の各コンポーネントクラス中のすべてのインスタンスを識別すると、ステップ５０３に示すように各インスタンスの最も固有の識別ストリングを取り出す。この各インスタンスの識別ストリングを使用して、ステップ５０４に示すように素数生成関数ｆ（コンポーネントインスタンスの識別子）を使用して各コンポーネントインスタンスのインスタンス素数を生成する。素数生成関数ｆ（コンポーネントインスタンス識別子）は、上記のように当業者に知られる任意の素数生成関数でよい。下の表１１〜１３に、例示的ハードウェア構成Ｈ、Ｈ１、およびＨ２の各コンポーネントインスタンスの例示的なインスタンス素数を示す。
【００７７】
【表１１】
2004266841.tif 000013
【００７８】
【表１２】
2004266841.tif 000014
【００７９】
【表１３】
2004266841.tif 000015
【００８０】
コンポーネントインスタンス｛ｆ（“ＳＯＮＹ  ＤＶＤ  １２２１”）｝は、このタイプのＣＤ−ＲＯＭは上記のハードウェア構成（すなわちＨ、Ｈ１、およびＨ２）で考慮される３番目のタイプのＣＤ−ＲＯＭであることから、ｉ１，３と表記することに留意されたい。
【００８１】
ステップ５０５で、可能なクラスの部分的秘密Ｐｐ，ｑをすべて決定し、ここでＰｐ，ｑはＣｐ  ｍｏｄ  ｉｐ，ｑに等しい。上述のように、各コンポーネントクラスの強いクラスＩＤ、Ｃｐは、クラスの積ｃｐと各クラスのクラス部分的秘密Ｐｐとの合計から得られる。強いハードウェアＩＤ（ＳＨＷＩＤ）がそれに基づいて生成された元のハードウェア構成Ｈに存在したインスタンス素数ｉｐ，ｑで強いクラスＩＤ、Ｃｐを除算すると、法演算後の剰余が、可能なクラスの部分的秘密Ｐｐ，ｑを提供する。例示的ハードウェア構成Ｈ、Ｈ１、およびＨ２の可能なクラスの部分的秘密Ｐｐ，ｑの例を下の表１４〜１６に示す。
【００８２】
【表１４】
2004266841.tif 000016
【００８３】
【表１５】
2004266841.tif 000017
【００８４】
【表１６】
2004266841.tif 000018
【００８５】
ステップ５０６に示すように、可能なクラス部分的秘密Ｐｐ，ｑそれぞれから、乱数ｒｐとクラスの剰余ｄｐを抽出することができる。上述のように、関数ｇ（ｒｐ）を使用してクラス素数Ｐｐ，ｑを取り出すことができ、ｒｐは、可能なクラス部分的秘密Ｐｐ，ｑの最初のｕビットである。クラスの剰余ｄｐ，ｑは、クラスの部分的秘密Ｐｐ，ｑの最後のｖビットから取り出すことができる。例示的ハードウェア構成Ｈ、Ｈ１、およびＨ２のすべての可能なクラス素数Ｐｐ，ｑとクラスの剰余ｄｐ，ｑの例示的リストを下の表１７〜１９に示す。
【００８６】
【表１７】
2004266841.tif 000019
【００８７】
【表１８】
2004266841.tif 000020
【００８８】
【表１９】
2004266841.tif 000021
【００８９】
ステップ５０６で可能なクラス素数とクラスの剰余をすべて求めると、それらはいくつかの合同式の集合を表す。Ｓは大きな数であり、それを可能なクラス素数ｐｐ，ｑで割ると所与の合同式集合のクラス剰余ｄｐ，ｑが得られる。Ｓが入念に選択され（すなわちＳはＭからＮの間）、すべての除数は素数なので、可能なクラス素数とクラス剰余を使用したＭからＮの範囲の合同式集合の解は、Ｓに違いないということになる。ステップ３０６におけるＳの入念な選択により、Ｓの正確な値を生成するために合同式の集合のうちＮ個の一致する要素のみが必要となることが確実になる。これは、従来から用いられる閾値に基づく秘密の共有方式であり（非特許文献３参照）、同文献の開示は参照によりその全体を本明細書に組み込む。
【００９０】
求められるハードウェア構成に一致する可能なクラス素数と剰余を事前に判定することが不可能な場合は、ステップ５０７で各順列によって与えられる合同式の離散集合を解くことにより可能なクラス素数とクラス剰余の各順列の可能な秘密を生成することが必要となる。ステップ５０８に示すように、検証の目的で生成された暗号文を使用して、生成された可能な秘密をテストすることができる。そのような方式を以下で説明する。
【００９１】
本発明では、秘密Ｓを鍵として使用して知られる平文を符号化して暗号文を形成する。通例、暗号化されたメッセージ（すなわち暗号文）には、メッセージの解読が成功したことを解読者に知らせる検証トークンが伴う。これは通例は、メッセージの平文のハッシュか、または何らかの選択された平文である。本発明では、平易さのために、選択された平文を使用することが望ましい。したがって、ＳＨＷＩＤを生成する際には、Ｓを（鍵として）使用して、選択された平文（「これが選択された平文です」など）を暗号化して暗号文を生成する。復号器は、選択された平文と暗号文の両方を知っている。
【００９２】
上記の状況では、Ｓの候補（すなわち生成された可能な各秘密）の妥当性は、それらＳの候補（すなわち生成された可能な各秘密）を鍵として使用して暗号文を解読することによって検証することができる。解読の結果得られた平文が選択された平文と一致する場合、そのＳの候補（生成された可能な秘密の１つ）が実際にＳであることになる。得られた平文が選択された平文と一致しない場合は、そのＳの候補（生成された可能な秘密の１つ）はＳでないことになる。
【００９３】
図７に示すように、可能な秘密を使用して暗号文を解読することによって知られる平文が明かされた場合は秘密Ｓが見つかったことになり、方法はステップ５１０に進み、プログラムは、所与のコンピュータハードウェア構成での所与のソフトウェア製品のロードまたはインストールを許可する。そうでない場合、方法はステップ５０９に進む。まだテストしていない順列がある場合、方法はステップ５０７に戻る。そうでない場合はＳＨＷＩＤが一致しないことになり、方法はステップ５１１に進み、ソフトウェア製品のロードまたはインストールを阻止する。
【００９４】
例示的な構成Ｈ、Ｈ１、Ｈ２の例示的な結果を下の表２０〜２２に示す。
【００９５】
【表２０】
2004266841.tif 000022
【００９６】
【表２１】
2004266841.tif 000023
【００９７】
【表２２】
2004266841.tif 000024
【００９８】
上の表２０に示すように、元のハードウェア構成Ｈでは、可能な秘密Ｓｐ，ｑと実際の秘密Ｓとの間で４つのうち４つが一致する。上の表２１に示すように、ハードウェア構成Ｈ１では、可能な秘密Ｓを求めるのに使用するクラスの剰余ｄｐ，ｑに応じて、４つの可能な一致のうち最高で２つが一致する。この例示的ハードウェア構成では、ｍが２である場合、プログラムは、結び付けられた秘密Ｓの取り出しを許可し、ハードウェア構成Ｈ１でソフトウェア製品をロードまたはインストールすることを許可する。しかし、上の表２２に示すハードウェア構成Ｈ２では４つの可能な一致のうち１つしか一致しない。ｍが２である場合は、偽の非秘密Ｚ１が生成され、方法は、特定のソフトウェア製品をハードウェア構成Ｈ２でロードまたはインストールできないようにする。
【００９９】
上記で説明し、図２、３〜４、５および６〜７に示す方法のステップは、ローカルで実行しても、遠隔の場所で実行してもよい。通例、顧客は、図１に示すコンピュータ２０などの所与のコンピュータで実行できるソフトウェア製品を購入する。このソフトウェア製品は、例えば、ＣＤ−ＲＯＭやフロッピー（登録商標）ディスケットなどの可搬式のコンピュータ可読媒体に記憶されたソフトウェアプログラムを有する収縮包装製品であることができる。あるいは、そのソフトウェア製品は、ローカルエリアネットワーク（ＬＡＮ）５１やワイドエリアネットワーク（ＷＡＮ）５２などのネットワークを通じて電子的に配信することもできる。顧客は、ソフトウェア製品を、システムメモリ２２に記憶されたプログラムとしてコンピュータ２０にロードする。
【０１００】
ソフトウェア製品をインストールする際、顧客は通例、そのソフトウェア製品のソフトウェア製品識別（ＰＩＤ）の一部をコンピュータ２０に入力するように指示される。ＰＩＤは、例えば収縮包装パッケージのラベルに印刷されたＣＤキーであってよい。顧客はＰＩＤを入力し、このＰＩＤはそのソフトウェア製品のあるソフトウェアプログラムに関連付けられている。ＰＩＤは、コンピュータ２０にローカルに記憶しても、かつ／または起動権限などの第三者を用いてローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２上のアクセス可能な場所にリモートに記憶してもよい。
【０１０１】
上述したように、ソフトウェア製品をインストールする際に、ソフトウェア製品中のコードを使用するか、またはソフトウェア製品のインストールによってトリガされる形で、強いハードウェア識別（ＳＨＷＩＤ）も生成される。本発明の方法によって生成される強いハードウェア識別（ＳＨＷＩＤ）は、ソフトウェア製品識別（ＰＩＤ）に関連付けられ、そのソフトウェア製品識別（ＰＩＤ）と共に、コンピュータ２０にローカルに記憶されるか、かつ／または第三者の起動権限を用いてローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２上のアクセス可能な場所に遠隔に記憶される。
【０１０２】
インストールプロセスの一部として、起動権限を用いてソフトウェア製品を起動することを顧客に求めることができる。この権限は、例えば製品の製造者や権限を付与された第３者である。起動方式は、（ｉ）特定のコンピュータへのインストールと使用、または（ｉｉ）製品の使用を許可する同意条件に沿ったインストールと使用、のためにそのソフトウェア製品を起動することを顧客に強制する。そのような起動プロセスが、マイクロソフト社（ワシントン州レドモンド）に譲渡された特許に詳細に記載され（特許文献１参照）、同文献の内容はすべて参照により本明細書に組み込まれる。
【０１０３】
本発明の方法によって生成された強いハードウェア識別（ＳＨＷＩＤ）とソフトウェア製品識別（ＰＩＤ）は、コンピュータ２０にローカルに記憶するか、かつ／または、起動権限を用いてローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２上のアクセス可能な場所にリモートに記憶することができる。ソフトウェア製品は、最初に起動された時にグラフィカルユーザインタフェース（ＵＩ）のダイアログウィンドウを自動的に表示し、それにより、それ自体の起動を行う起動サーバとの接続を開始するようにユーザを促すことが望ましい。起動サーバは、受け取った強いハードウェア識別（ＳＨＷＩＤ）と、それに関連付けられたソフトウェア製品識別（ＰＩＤ）を記憶するデータベースを維持する。
【０１０４】
所与のソフトウェア製品の強いハードウェア識別（ＳＨＷＩＤ）と、関連付けられたソフトウェア製品識別（ＰＩＤ）は、そのソフトウェア製品が別のコンピュータに再インストールされるか、第１のコンピュータ（すなわち最初のインストールで使用されたコンピュータ）で起動されるまで、不定の期間にわたって記憶することができる。同じソフトウェア製品が別のコンピュータに再度インストールされるか、第１のコンピュータで起動されると、そのソフトウェア製品のコードが、本発明によるコンピュータシステム上でソフトウェア製品を使用できるかどうかを判定する方法を開始する。このソフトウェア製品は、そのソフトウェア製品のソフトウェア製品識別（ＰＩＤ）に関連付けられた、以前から記憶されている強いハードウェア識別（ＳＨＷＩＤ）を、ローカルのコンピュータ２０から、またはローカルエリアネットワーク（ＬＡＮ）５１またはワイドエリアネットワーク（ＷＡＮ）５２を介して遠隔の場所から取り出す。上述のように、以前から記憶されていた強いハードウェア識別（ＳＨＷＩＤ）を使用して、あるコンピュータハードウェア構成でそのソフトウェア製品が使用できるかどうかを判定する。
【０１０５】
第１のコンピュータ（最初のインストール時に使用したコンピュータ）のハードウェア構成に著しい変更があるためにソフトウェア製品の使用が拒否される場合は、ダイアログボックスを顧客に提供し、そのソフトウェア製品の使用が拒否されていること、およびそのソフトウェア製品の今後の使用に関するさらなる情報を所与のソースから得られることを伝えることができる。
【０１０６】
ＩＩＩ．強いハードウェア識別（ＳＨＷＩＤ）の他の使用法
上記の使用法に加えて、本発明の強いハードウェア識別（ＳＨＷＩＤ）を使用して、特定のハードウェア構成のみで使用するためにデータを暗号化／解読することができる。
【０１０７】
本明細書についてその特定の実施形態との関連で詳細に説明したが、当業者は上述の説明を理解すればこれらの実施形態の変更形態、変形形態、および均等形態を容易に着想できることは理解されよう。したがって、本発明の範囲は、特許請求の範囲とその均等物の範囲として定義すべきである。
【図面の簡単な説明】
【０１０８】
【図１】本発明を実施する例示的な動作環境の主要な構成要素の一部のブロック図である。
【図２】強いハードウェア識別（ＳＨＷＩＤ）のハードウェア識別コンポーネントを決定する例示的ステップを示す流れ図である。
【図３】強いハードウェア識別（ＳＨＷＩＤ）の部分的秘密のコンポーネントを決定する際の例示的ステップを示す流れ図である。
【図４】強いハードウェア識別（ＳＨＷＩＤ）の部分的秘密のコンポーネントを決定する際の例示的ステップを示す流れ図である。
【図５】強いハードウェア識別（ＳＨＷＩＤ）のハードウェア識別コンポーネントと部分的秘密のコンポーネントを組み合わせる例示的ステップを示す流れ図である。
【図６】ソフトウェア製品を使用可能にする要素である結び付けられた秘密の取り出しを使用して、コンピュータハードウェアシステムでソフトウェア製品を使用できるかどうかを判定する際の例示的ステップを示す流れ図である。
【図７】ソフトウェア製品を使用可能にするファクターである結び付けられた秘密の取り出しを使用して、コンピュータハードウェアシステムでソフトウェア製品を使用できるかどうかを判定する際の例示的ステップを示す流れ図である。
【符号の説明】
【０１０９】
２０  パーソナルコンピュータ
２１  処理装置
２２  システムメモリ
２３  システムバス
２４  読み取り専用メモリ（ＲＯＭ）
２５  ランダムアクセスメモリ（ＲＡＭ）
２６  基本入出力システム（ＢＩＯＳ）
２７  ハードディスク
２８  磁気ディスクドライブ
２９  取り外し可能磁気ディスク
３０  光ディスクドライブ
３１  取り外し可能光ディスク
３２  ハードウェアディスクドライブインタフェース
３３  磁気ディスクドライブインタフェース
３４  光ディスクドライブインタフェース
３５  オペレーティングシステム
３７  プログラムモジュール
３８  マニフェスト
４０  キーボード
４２  マウス
４６  シリアルポートインタフェース
４７  モニタ
４８  ビデオアダプタ
４９  リモートコンピュータサーバ
５０  メモリ記憶装置
５２  広域ネットワーク（ＷＡＮ）
５１  構内ネットワーク（ＬＡＮ）
５２  ワイドエリアネットワーク
５３  ネットワークインタフェース
５４  モデム
１００  アプリケーションプログラム
１０５  ライブラリ
【図１】
2004266841.tif 000025
【図２】
2004266841.tif 000026
【図３】
2004266841.tif 000027
【図４】
2004266841.tif 000028
【図５】
2004266841.tif 000029
【図６】
2004266841.tif 000030
【図７】
2004266841.tif 000031
【外国語明細書】
2004266841.tif 000032
2004266841.tif 000033
2004266841.tif 000034
2004266841.tif 000035
2004266841.tif 000036
2004266841.tif 000037
2004266841.tif 000038
2004266841.tif 000039
2004266841.tif 000040
2004266841.tif 000041
2004266841.tif 000042
2004266841.tif 000043
2004266841.tif 000044
2004266841.tif 000045
2004266841.tif 000046
2004266841.tif 000047
2004266841.tif 000048
2004266841.tif 000049
2004266841.tif 000050
2004266841.tif 000051
2004266841.tif 000052
2004266841.tif 000053
2004266841.tif 000054
2004266841.tif 000055
2004266841.tif 000056
2004266841.tif 000057
2004266841.tif 000058
2004266841.tif 000059
2004266841.tif 000060
2004266841.tif 000061
2004266841.tif 000062
2004266841.tif 000063
2004266841.tif 000064
2004266841.tif 000065
2004266841.tif 000066
2004266841.tif 000067
2004266841.tif 000068
2004266841.tif 000069
2004266841.tif 000070
2004266841.tif 000071
2004266841.tif 000072
2004266841.tif 000073
2004266841.tif 000074
2004266841.tif 000075
2004266841.tif 000076