(57)【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
中央処理装置を含み、前記中央処理装置は複数のバイトのための記憶装置を有する少なくとも１つのレジスタを含み、前記少なくとも１つのレジスタは、少なくとも１つの暗号キーおよび暗号化されていないマイクロプロセッサのシリアル番号を記憶し、前記少なくとも１つの暗号キーおよび前記シリアル番号は前記マイクロプロセッサの外部から与えられるものであり、前記システムはさらに
前記中央処理装置に結合され、暗号化されたマイクロプロセッサのシリアル番号として暗号化された第１のシリアル番号を記憶するための不揮発性メモリ装置と、
前記少なくとも１つのレジスタおよび前記不揮発性メモリ装置に結合される暗号化／解読回路とを含み、前記暗号化／解読回路は前記少なくとも１つの暗号キーを用いて前記暗号化されていないマイクロプロセッサのシリアル番号を暗号化し、前記暗号化／解読回路はさらに、前記少なくとも１つの暗号キーを用いて前記暗号化されたマイクロプロセッサのシリアル番号を解読し、前記システムはさらに
前記暗号化／解読回路および前記不揮発性メモリ装置に結合され、前記暗号化されたマイクロプロセッサのシリアル番号を前記不揮発性メモリ装置に提供するためのインタフェース回路を含み、
前記中央処理装置は、
前記少なくとも１つのレジスタに記憶された前記暗号キーおよび前記第１のシリアル番号に基づいて、前記中央処理装置をアンロック状態に移行させる状態遷移手段と、
前記中央処理装置がアンロック状態であることに基づいて、前記暗号化／解読回路を用いて前記暗号キーにより暗号化した第２のシリアル番号を、前記暗号化された第１のシリアル番号に代えて、前記不揮発性メモリ装置に記憶させる再プログラム手段とを含み、
前記第２のシリアル番号は、前記レジスタに記憶されている前記暗号化されていないシリアル番号を暗号化することにより得られたものであり、
前記不揮発性メモリ装置に記憶されている前記暗号キーおよび前記第１のシリアル番号と、前記少なくとも１つのレジスタに記憶された前記暗号キーおよび前記第１のシリアル番号とが一致する場合に、状態遷移手段は、前記中央処理装置をアンロック状態に移行させる。
【請求項２】
暗号化を用いてマイクロプロセッサのシリアル番号を、前記マイクロプロセッサに接続された不揮発性メモリ装置に書込む方法であって、前記マイクロプロセッサはレジスタを含み、前記不揮発性メモリ装置は、暗号キーと、前記マイクロプロセッサのシリアル番号として前記暗号キーを用いて暗号化された第１のシリアル番号とを記憶しており、前記方法は、
前記不揮発性メモリ装置に記憶されている前記暗号キーおよび第１のシリアル番号と、前記レジスタに格納されている暗号キーおよび第１のシリアル番号とが一致する場合に、前記マイクロプロセッサの状態をアンロック状態に変更するステップと、
前記マイクロプロセッサの外部から与えられる少なくとも１つの暗号キーと、前記マイクロプロセッサについての暗号化されていないシリアル番号とを、前記レジスタに記憶するステップと、
前記マイクロプロセッサのシリアル番号として暗号化した第２のシリアル番号を得るために、前記レジスタに記憶されている前記暗号化されていないシリアル番号を、前記暗号キーを用いて暗号化するステップと、
前記マイクロプロセッサがアンロック状態であるとき、暗号化されて前記不揮発性メモリ装置に格納されている前記第１のシリアル番号を、前記暗号キーを用いた暗号化によって得られた前記第２のシリアル番号に置き換えるステップとを含む、方法。
【請求項３】
前記暗号化された第２のシリアル番号を得るために用いられた前記暗号キーと、前記第２のシリアル番号と、巡回冗長チェックサムビットとを、前記不揮発性メモリ装置に記憶するステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記不揮発性メモリ装置は不揮発性ランダムアクセスメモリである、請求項３に記載の方法。
【請求項５】
マイクロプロセッサのための暗号化されたシリアル番号を読み取る方法であって、前記マイクロプロセッサはレジスタを含み、前記レジスタは、前記暗号化されたシリアル番号と、前記シリアル番号の暗号化のために使用された少なくとも１バイトの第１の暗号キーを記憶しており、前記マイクロプロセッサには不揮発メモリ装置が結合されており、前記不揮発メモリ装置は、他の暗号キーと、前記マイクロプロセッサのシリアル番号として前記他の暗号キーを用いて暗号化された第１のシリアル番号とを記憶しており、前記方法は、
前記不揮発性メモリ装置に記憶されている前記他の暗号キーおよび暗号化された第１のシリアル番号と、前記レジスタに格納されている暗号キーおよび暗号化された第１のシリアル番号とが一致する場合に、前記マイクロプロセッサがアンロック状態に移行するステップと、
前記アンロック状態に移行したことに基づいて、前記レジスタに記憶されている前記第１の暗号キーにアクセスするステップと、
前記第１の暗号キーを用いて、前記レジスタに記憶されている前記暗号化されたシリアル番号の複数のバイトを解読することによって、少なくとも１バイトの第２の暗号キーを抽出するステップと、
前記第２の暗号キーを用いて前記暗号化されたシリアル番号の前記複数のバイトをさらに解読して、それによって前記マイクロプロセッサのための解読されたシリアル番号を提供するステップを含む、方法。
【請求項６】
前記解読されたシリアル番号を前記レジスタに記憶するステップをさらに含む、請求項５に記載の方法。
【請求項７】
前記第１の暗号キーにアクセスするステップは、符号化されて前記マイクロプロセッサに記憶されているキー値を、復号化のための関数を用いて復号化することによって前記第１の暗号キーを前記レジスタに記憶するステップを含む、請求項５に記載の方法。
【請求項８】
前記抽出するステップは、
前記マイクロプロセッサに結合された前記不揮発性メモリ装置から巡回冗長チェックサムビットで符号化されたシリアル番号を受取るステップと、
前記巡回冗長チェックサムビットを復号化して、それによって前記暗号化されたシリアル番号を提供するステップと、
前記暗号化されたシリアル番号を前記レジスタに記憶するステップとを含む、請求項５に記載の方法。
【請求項９】
前記不揮発性メモリ装置は不揮発性ランダムアクセスメモリである、請求項８に記載の方法。
【請求項１０】
シリアル番号を再プログラムするためにマイクロプロセッサを準備する方法であって、前記マイクロプロセッサはレジスタとコンパレータとを有しており、前記マイクロプロセッサは不揮発性メモリ装置に接続されており、前記方法は、
少なくとも１バイトの第１のキーを前記レジスタに記憶するステップと、
前記第１のキーを用いて前記レジスタに記憶された第１のシリアル番号の複数のバイトを暗号化して、それによって第１の暗号化されたシリアル番号を提供するステップと、
少なくとも１バイトの第２のキーを前記レジスタにさらに記憶するステップと、
前記第２のキーを用いて前記第１の暗号化されたシリアル番号を前記第１のキーとともにさらに暗号化して、それによって第１の二重に暗号化されたシリアル番号を暗号化された第１のキーとともに前記レジスタに提供するステップと、
前記不揮発性メモリ装置から巡回冗長チェックサムビットで符号化されたシリアル番号を受取るステップと、
前記巡回冗長チェックサムビットを復号化して、それによって第２の二重に暗号化されたシリアル番号および暗号化された第３のキーを提供するステップと、
前記コンパレータにおいて、前記第２の二重に暗号化されたシリアル番号および前記暗号化された第３のキーと、前記第１の二重に暗号化されたシリアル番号および前記暗号化された第１のキーとを比較するステップと、
前記第２の二重に暗号化されたシリアル番号および前記暗号化された第３のキーと、前記第１の二重に暗号化されたシリアル番号および前記暗号化された第１のキーとが一致する場合に、前記マイクロプロセッサをアンロック状態に移行させるステップと、
前記マイクロプロセッサがアンロック状態であることに基づいて、前記マイクロプロセッサが前記シリアル番号を再プログラムするのを可能にするステップとを含む、方法。
【請求項１１】
シリアル番号をつけられたソフトウェアを複数のアプリケーションプログラミングインタフェース（ＡＰＩ）を通じて構成してそのマイクロプロセッサのシリアル番号をアップグレードする方法であって、前記シリアル番号をつけられたソフトウェアは中央処理装置（ＣＰＵ）およびメモリを有するコンピュータシステムで実行可能であり、前記中央処理装置は、第１の暗号キーと、前記中央処理装置のためのシリアル番号として前記第１の暗号キーを用いて暗号化された第１のシリアル番号とを格納しており、前記メモリは、第２の暗号キーと、前記中央処理装置の変更前の他の中央処理装置のためのシリアル番号として前記第２の暗号キーを用いて暗号化された第２のシリアル番号を格納しており、前記方法は、
前記第１の暗号キーおよび前記第１のシリアル番号と、前記第２の暗号キーおよび前記第２のシリアル番号とが一致する場合に、前記中央処理装置をアンロック状態に遷移させるステップと、
前記中央処理装置がアンロック状態であることに基づいて、シリアル番号を読み出すためのアプリケーションプログラミングインターフェイスを介して前記第１のシリアル番号を読むステップと、
変更前の中央処理装置のシリアル番号を取り出すためのアプリケーションプログラミングインターフェイスを介して、前記メモリに記憶されている前記第２のシリアル番号を取り出すステップと、
前記第１のシリアル番号と前記第２のシリアル番号とが一致しないときに、中央処理装置のシリアル番号を更新するためのアプリケーションプログラミングインターフェイスを介して遠隔で権限付与を求めるステップと、
前記権限付与を受取る際に、新たなシリアル番号によってソフトウェアをロックするためのアプリケーションプログラミングインターフェイスを介して、前記第１のシリアル番号で前記ソフトウェアをロックするステップとを含む、方法。
【発明の詳細な説明】
発明の分野
この発明はマイクロプロセッサのシリアル番号に対し、より特定的にはマイクロプロセッサのシリアル番号にアクセスするために符号化された暗号キーを用いる方法に関する。
関連技術の説明
長い間、ワークステーション、ミニコンピュータおよびメインフレームの中にはそれらを一意に識別するシリアル番号が埋込まれていた。シリアル番号を付与することで、製造業者が現場の製品の出所を装置の原製造業者（ＯＥＭ）までたどることができる。このため、製造業者はその製品をよりよく管理することができる。さらに、シリアル番号を提供することで、独立したソフトウェアベンダーが製品を登録することが可能となる。マイクロプロセッサおよびパーソナルコンピュータは典型的には今までシリアル番号によって追跡されていなかったが、これは幾分かはシリアル番号を記憶し、および／または読出すための回路を設ける費用が加算されるためであった。
しかしながら、マイクロプロセッサそのものがさらに複雑になってきたため、シリアル番号を提供するための回路および／またはプロセスステップを追加する費用対効果はますます高くなりつつある。さらに、シリアル番号は特定のソフトウェアに関連づけることができる。つまり、たとえば、特定のプロセッサにインストールされているソフトウェアはパスワードを読み、その後その特定のマイクロプロセッサに合わせられるため、そのソフトウェアを別のプロセッサにインストールしようと試みても失敗する。とはいえ、コンピュータシステムにおいてシリアル番号識別をもたらす標準的な方法は一般的に費用がかかる。競争の激しいマイクロプロセッサ市場ではこのようなコストは最小に抑えることが望ましい。したがって、現場の製品の出所を装置の原製造業者（ＯＥＭ）までたどるため、マイクロプロセッサにシリアル番号を提供する安価で効果的な方法が必要である。
マイクロプロセッサのシリアル番号を機械可読な形態で提供することにおける問題は、権限のないユーザによりアクセスされ、そのため権限のない変更を受けることがあり得ることである。したがって、機械可読であるシリアル番号への権限のないアクセスを防ぐための機構が必要である。
マイクロプロセッサのシリアル番号を提供しソフトウェアにシリアル番号を付けることに関する別の問題は、プロセッサがアップグレードされるとか何らかの方法で置換えられる場合、そのソフトウェアが機能しなくなることである。（ソフトウェアにシリアル番号を付けるとは、ここではＣＰＵシリアル番号を所与のソフトウェアのセットに与えることと定義される。ソフトウェアはそのシリアル番号を有さないプロセッサでは動作することができない。）しかしながら、ソフトウェアにとって、権限のないコンピュータシステムにロードされることと権限のないプロセッサを提供されることとに大した差はない。いずれの場合にも、ソフトウェアはもはや存在しないプロセッサに合わせられていることとなり、動作しない。したがって、シリアル番号を付けられたソフトウェアが権限のないプロセッサで動作していることを検出し、これに応答して権限再付与プロセスを開始できるようなアップグレード方法が必要である。権限再付与プロセスが成功すると、ソフトウェアはアップグレードされたプロセッサで機能する。しかしながら、権限再付与プロセスに失敗するということは、ソフトウェアそのものが権限のないシステムにロードされること、したがって機能しないことを意味する。
上述のとおり、ソフトウェアにシリアル番号を付けることもまた望ましい。しかしながら、そうするには、シリアル番号が権限のない変更によってアクセスできない状態を保つと同時に、ソフトウェアによってシリアル番号にアクセスする簡単な方法をもたらすことが望ましい。
そのため、この発明では、ソフトウェアがマイクロプロセッサのシリアル番号およびその暗号キーを読出しかつアクセスすることを可能にする。さらに、キーを符号化して偶然にユーザにキーが知れるのを防ぐための機構が提供される。
発明の概要
したがって、マイクロプロセッサのシリアル番号へのアクセスをもたらすための独特のシステムおよび方法が提供される。プロセッサと同じ装置パッケージ内に形成される不揮発性ランダムアクセスメモリにマイクロプロセッサのシリアル番号を記憶するための機構が提供される。マイクロプロセッサのシリアル番号は権限のないアクセスおよび変更を防ぐため、二重キー暗号化方式を用いて暗号化される。暗号キー自体も符号化され、権限のあるユーザにはたやすくアクセスできるが、シリアル番号が権限なく読まれることを防ぐ。最後に、特定のプロセッサのシリアル番号を関連付けられたソフトウェアが権限のないプロセッサにおいて動作していることを検出し権限の再付与を求めることができる方法が提供される。
そのため、この発明では、ソフトウェアがマイクロプロセッサのシリアル番号およびその暗号キーを読出しかつアクセスすることを可能にする。さらに、キーを符号化して偶然にユーザにキーが知れるのを防ぐための機構が提供される。
したがって、工場から出荷される前にプログラムできるＣＰＵシリアル番号のための記憶空間を提供するための、ＣＰＵダイと共にパッケージされた小さい不揮発性ランダムアクセスメモリが提供される。ＣＰＵダイおよび不揮発性ＲＡＭダイの双方はパッケージのキャビティ内にある。この２つのダイの接続は従来のワイヤボンディングによりもたらされ、ＲＡＭとＣＰＵの間にシリアルインタフェースを設けることによって最小にされる。
この発明の別の局面によれば、ＣＰＵシリアル番号を記憶する不揮発性ＲＡＭへのアクセスはプロセッサ上の暗号化および論理によって制御される。機構の安全性を高めるため、２つの小さい階層化された暗号キーが用いられる。シリアル番号は両方のキーが正しいときのみ変更できる。キーおよび暗号アルゴリズムは製造業者のみが知っている。８０ビットのシリアル番号および２つの３２ビットのキーのためのレジスタ領域が提供される。ＲＡＭに記憶されるデータ内にチェックサムが含まれており、ＣＰＵに対するＲＡＭデータの転送におけるエラーを検出できる。
この発明のさらに別の局面によれば、シリアル番号を付けられたソフトウェアが権限のないプロセッサにおいて動作していることを検出し、権限の再付与のための使用プロファイルに基づいて権限再付与プロセスを開始するアップグレード方法が提供される。権限付与サービスが利用可能でない場合、または許されない場合、一時的にソフトウェアを再使用可とすることができる。問題が解決するまでの間、ユーザの使用が制限される。
この発明のさらに別の局面によれば、シリアル番号を付けられたＣＰＵを検出し、ＣＰＵシリアル番号を抽出しこれを標準アプリケーションプログラミングインタフェース（ＡＰＩ）によりアプリケーションに提供するためのコードシーケンスが提供される。
広く言えばこの発明は暗号キーが符号化されることで符号化された暗号キーをもたらす方法を企図する。このことはたとえば、複数バイトの暗号キーのバイトを合計することを含んでもよい。暗号キーおよびシリアル番号へのアクセスが望まれる場合、暗号キーのバイトは復号化される。
【図面の簡単な説明】
好ましい実施例の以下の詳細な説明を以下の図面に関連して読まれると、この発明のよりよい理解が得られるであろう。
図１ａおよび図１ｂは、この発明の一実施例による装置パッケージを共有する不揮発性ＲＡＭダイとＣＰＵダイとを示すブロック図である。
図２はこの発明の一実施例による暗号化システムの一実施例のブロック図である。
図３はこの発明の一実施例によるレジスタセット暗号化システムの図である。
図４ａ、図４ｂおよび図４ｃはこの発明の一実施例による暗号化の書込読取およびアンロックプロセスを示すフローチャートの図である。
図５はこの発明の一実施例によるアップグレード権限再付与システムを示すフローチャートの図である。
図６はこの発明の一実施例によるシリアル番号へのアクセスを示すフローチャートの図である。
図７はこの発明の一実施例による暗号化を示す図である。
この発明はさまざまな変更および代替の形態が可能であるが、その特定の実施例は例として図示され、ここで詳しく説明される。しかしながら、図面およびその詳細な説明によってこの発明を開示される特定の形態に限定することを意図するものではなく、逆にこの発明が添付の請求の範囲により規定されるこの発明の精神および範囲内に従うあらゆる変更、均等物および代替例を包含するものであることが理解されるべきである。
好ましい実施例の詳細な説明
図１ａを参照すると、中央処理装置（ＣＰＵ）ダイ６、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）ダイ８、ダイキャビティ４および装置パッケージ１０を含む集積回路パッケージ２の図が示される。好ましい実施例では、ＮＶＲＡＭダイ８はＣＰＵダイ６とは別に形成される。図１ｂを参照すると、ＮＶＲＡＭダイ８は信号線１４ａ、１４ｂ、１４ｃによりＣＰＵダイ６に結合される。信号線１４ａ、１４ｂおよび１４ｃはそれぞれ、ボンディングパッド１２ａ、１２ｂ、１２ｃおよび１６ａ、１６ｂ、１６ｃによりＣＰＵダイ６とＮＶＲＡＭダイ８とに装着される。ある実施例では、信号線１４ａは送信線であり、信号線１４ｂは受信線である。信号線１４ｃはクロック線であり、ＮＶＲＡＭとＣＰＵとの間でシリアルインタフェースを形成する。別の実施例では、ＮＶＲＡＭダイ８は１本の伝送線によってＣＰＵダイ６に接続されてもよい。その実施例では、ＣＰＵおよびＮＶＲＡＭはシリアルインタフェースをもたらすためさらなる回路を含む。ＮＶＲＡＭには工場から出荷される前にＣＰＵシリアル番号がプログラムされる。
ＣＰＵダイと共にパッケージされるＮＶＲＡＭ内にＣＰＵシリアル番号を与えることは、たとえばシリアル番号をダイに永久的にエッチングすることと比べてコストの面で有利であるが、シリアル番号への権限のないアクセスを防ぐための機構が必要である。ＮＶＲＡＭへのアクセス、よってシリアル番号へのアクセスはプロセッサ面の暗号キーおよび論理を介して制御される。次に図２を参照すると、例示的な暗号化機構のブロック図が示される。ＣＰＵは、制御論理２０および暗号化／解読論理２２に結合されるＮＶＲＡＭインタフェース論理１８を含む。制御論理２０および暗号化／解読論理２２はさらに互いに結合される。制御論理２０はシリアル番号読取、書込プロセスを監督する。暗号化／解読論理２２は以下に説明されるようにシリアル番号の暗号化および解読を行なう。暗号化／解読論理２２はまた、機械またはモデルにより特定されるレジスタ２４に結合される。機械により特定されるレジスタ２４はプログラマにインタフェースを提供し、最近のｘ８６タイププロセッサに共通のタイプのものであり、コマンドおよび／または状態ビット（たとえばアンロック、読出しなど）を含む。しかしながら、他のプロセッサまたはレジスタの使用も考えられることに注意されたい。制御論理２０はさらにGet Serial Numberコマンド線２６、Write Serial Numberコマンド線２８およびError線３０に結合される。ＮＶＲＡＭインタフェース論理１８はＮＶＲＡＭに対する転送を制御する。
図３は８０ビットのシリアル番号３２、３２ビットのキーＡ３６、および３２ビットのキーＢ３８を示す。８０ビットのシリアル番号３２およびキー３６、３８は機械により特定されるレジスタ２４内に記憶される。１６ビットのチェックサム３４はさらにＮＶＲＡＭに記憶されるデータ内に含まれ、ＣＰＵに対するデータの転送におけるエラーの検出を可能にする。しかしながら、チェックサム３４は暗号化プロセスには用いられない。機構の安全性を高めるため、２つのキー３６、３８を使用した階層化された暗号化方法が用いられる。シリアル番号そのものはキー３６、３８の双方が正しい場合のみ変更できる。キーおよび暗号アルゴリズムは製造業者のみが知っている。
次に図４ａを参照すると、新しいシリアル番号を書くのに用いられる書込プログラムのフローチャートの図が示される。はじめに、シリアル番号が機械により特定されるレジスタ（ＭＳＲ）２４内に提供され（ステップ１００）、キー３６、３８も同様にされる（ステップ１０４、ステップ１０２）。次に、ステップ１０６において、機械により特定されるレジスタ２４内に記憶されるシリアル番号にキー３８を用いて第１レベルの暗号化を施す。暗号化されたシリアル番号（ステップ１０８）およびキーＢは次にステップ１１２においてキーＡを用いてさらに暗号化される。こうして二重に暗号化されたシリアル番号は巡回冗長チェックサム（ＣＲＣ）とともにステップ１１４において示される。次に、ステップ１１６において、暗号化されたキーＢを備えた二重に暗号化されたシリアル番号はＣＲＣ生成を用いてＮＶＲＡＭに出力される。ステップ１１８ではＣＲＣを備えた結果生じる暗号化されたシリアル番号が記憶される。
次に図４ｂを参照すると、読取プロセスのフローチャートの図が示される。記憶されたＣＲＣを備えた二重に暗号化されたシリアル番号および暗号化されたキーＢは、はじめにＮＶＲＡＭ内に記憶される（ステップ１２０）。ステップ１２２では、誤り検出を用いてＮＶＲＡＭからＣＰＵへの転送が起こる。ＣＲＣを含まない、結果生じる二重に暗号化されたシリアル番号および暗号化されたキーＢ（ステップ１２４）は次にステップ１２６において機械により特定されるレジスタからのキーＡ（ステップ１２８）を用いて解読される。ステップ１３０においてキーＡを用いて解読した結果残るのはキーＢにより暗号化されたシリアル番号である（ステップ１３２）。そこで、暗号化されたシリアル番号をキーＢを用いてステップ１３４において解読する。その結果生じる完全に解読されたシリアル番号は次にステップ１３６において機械により特定されるレジスタに記憶される。解読プロセスの略図は図７に見られる。キーＡが、二重に暗号化されたシリアル番号および暗号化されたキーＢ１２３に適用される。結果生じる暗号化されたシリアル番号１２５が次に、キーＢを用いて解読される。結果生じるシリアル番号１２７が次に、マイクロプロセッサシリアル番号（または機械により特定される）レジスタ２４に記憶される。
上述の読取および書込プロセスはＣＰＵがアンロック状態にある場合のみ可能である。これは、初めて新しいシリアル番号をプログラムする際に起こる。たとえば、プロセッサが最初に組立てられる際はＮＶＲＡＭはオールゼロにされる。プロセッサはこの状態を検出し、アンロック状態に入り、上述の書込方法によって最初のシリアル番号がプログラムされるようにする。しかしながら、その装置が以前にシリアル番号を有していた場合、シリアル番号を再プログラムするために以下に説明するアンロックシーケンスを動作させなければならない。より特定的には、図４ｃを参照すると、初期状態では、シリアル番号は機械により特定されるレジスタ内に記憶され、キーＡ、Ｂもまた同様である（ステップ１３８、１４０および１４２）。シリアル番号は次にステップ１４４においてキーＢを用いて暗号化される。結果生じる暗号化されたシリアル番号（ステップ１４６）およびキーＢはさらにステップ１４８においてキーＡを用いて暗号化される。ステップ１５０における結果生じる二重に暗号化されたシリアル番号および暗号化されたキーＢは次にステップ１５２においてコンパレータに入力される。同時に、暗号化されたキーＢおよびＣＲＣを備えた以前に記憶された二重に暗号化されたシリアル番号（ステップ１５４）はステップ１５６において適当な誤り検出を用いてＮＶＲＡＭからＣＰＵへ転送される。ステップ１５８では、二重に暗号化されたシリアル番号およびキーＢはコンパレータ（ステップ１５２）へ出力される。ステップ１５０およびステップ１５８からの２つの出力はコンパレータ１５２において比較される。一致が見られると、プロセッサはアンロック状態に入る（ステップ１６０）。
容易に理解されるように、上述のプロセスは必然的にプロセッサにより特定されるものである。しかしながら、プロセッサはますます容易にアップグレードすることが可能となっている。プロセッサのアップグレードはそのプロセッサのシリアル番号にリンクされるソフトウェア（「シリアル番号を付けられたソフトウェア」）の機能を停止させることになる。この発明の一局面によれば、シリアル番号を付けられたソフトウェアがアップグレードされた（権限のない）プロセッサにおいて動作していることを検出し、権限再付与プロセスを開始できる方法が提供される。好ましい実施例では、権限再付与の手順は一連のアプリケーションプログラミングインタフェース（ＡＰＩ）を用いることで実行される。適切なＡＰＩは以下に記述される。
Read_CPU_Serial_Number
この関数により、ＯＳおよびこれを呼ぶアプリケーションがＣＰＵシリアル番号を読むことを可能にできる。ある実施例では、シリアル番号を読むために３２ビットのキーを入力するとともに適切なＭＳＲ内のread_serial_numberビットをセットしなければならない。
エントリ：
シリアル番号のためにアクセスされるＭＳＲ
３２ビットのキー
出口：
ＣＰＵシリアル番号
Upgrade_CPU_Serial_Number
この関数はＣＰＵアップグレードが起こると自動的にアップグレードおよび権限再付与プロセスを実行する。
エントリ：
新しいシリアル番号
古いシリアル番号
出口：
Authorization＝＝０−付与されず
Authorization＝＝１−アップグレード可
Lock_With_New_CPU_Serial_Number
Upgrade_CPUがAuthorization＝１を返した場合、対応するアプリケーションは利用されるソフトウェアロック方式を変更するのに適切な動作を行なう。
エントリ：新しいシリアル番号
出口：Success＝＝１−＞新しいシリアル番号でのロックＯＫ
Success＝＝０−＞新しいシリアル番号でのロック失敗
Get_Previous_CPU_Serial_Number
この関数は、ＯＳおよびアプリケーションが前のＣＰＵシリアル番号がシステムに記憶したものを取出すための機構を提供する。
エントリ：
なし
出口：
Success＝＝１or０
If Success＝＝１
システムにより記憶される、前のＣＰＵシリアル番号
else
なし
権限付与プロセスは図５に詳述される。その手順はステップ２００で開始される。ステップ２０２では、導入されたマイクロプロセッサの現在のＣＰＵシリアル番号が上述のRead_CPU_Serial_NumberＡＰＩコマンドを介して読まれる。次のステップ２０４では、最も新しく記憶されたシリアル番号がGet_Previous_CPU_Serial_NumberＡＰＩコマンドを介して取出される。現在のＣＰＵシリアル番号が前のＣＰＵシリアル番号と同じである場合（ステップ２０６）、プロセスはステップ２０８で終了する。しかしながら、その２つが等しくない場合、ステップ２１０においてUpgrade_CPU_Serial_NumberＡＰＩコマンドが開始され権限付与が求められる。権限付与は、電話音声、データ、インターネット接続２１１または他の遠隔接続を介してベンダーと連絡を取ることにより得られる。権限付与のための使用プロファイルに基づいて、ステップ２１２においてソフトウェアを再使用可とすることができる。権限付与が可能である場合、ステップ２１４において、新しいＣＰＵシリアル番号およびLock_with_new_CPU_serial_numberＡＰＩコマンドを用いてソフトウェアロックが行なわれる（ステップ２１４）。権限付与が可能でない場合、ステップ２１６においてアップグレードはできない。いずれの場合にも、プロセスはステップ２０８において完了する。権限付与サービスルーチンが利用可能でない場合、または権限付与が拒否される場合、一実施例では制限される使用を可能とするためのＡＰＩが想定されており、ユーザがその問題が解決するまでこのシステムを使用できるようにする。
上述の暗号化機構における可能性のある隙の１つは、３２ビットのキーＡおよび３２ビットのキーＢが機械により特定されるレジスタに記憶されることである。シリアル番号を書込むには両方のキーが必要であるが、これを読むには一方のみを提示すればよい。したがって、キー値を取出そうとするユーザから守るため、シリアル番号を読むのに必要なキー値を符号化しなければならない。また、ＣＭＯＳを保存するためには、キーのデータサイズを４バイトから１バイトまたは２バイトに減少することが望ましい。この発明のこの局面は図６および以下に説明するＡＰＩに関連して最もよく説明される。
Initialize_Key
この関数はシステム製造元によってのみ開始され得る。この関数の目的は３２ビットのキー値をＣＭＯＳに記憶することを容易にすることである。この機能はキーを符号化しＣＭＯＳに記憶する。
エントリ：
３２ビットのキー値
符号化された値の記憶のためのＣＭＯＳインデックス
出口：
なし
Encode_And_Store_Key
この関数はInitialize_Key関数によって呼ばれる。この関数はキーを符号化してこれをシステムＣＭＯＳに記憶する。キーは１００％保護されるわけではないが、通常のユーザがキー情報をシステムＣＭＯＳメモリから復号化することを防ぐ。
エントリ：
３２ビットのキー値
符号化された値の記憶のためのＣＭＯＳインデックス
出口：
なし
Decode_Key
この関数はＣＭＯＳから符号化されたキー値を取出しこれを使用するため復号化する。
エントリ：
記憶された符号化されたキー値のためのＣＭＯＳインデックス
出口：
３２ビットのキー値
以下の図ではシリアル番号およびキーのシステムソフトウェアアクセスおよび制御を示す。
より特定的には、図６を参照するとシリアル番号キーの符号化はステップ２５０で開始する。システム製造元がキーを初期設定しようとしていた場合（ステップ２５２）シリアル番号キーを初期設定するためにInitialize_KeyＡＰＩコマンドがアサートされる（ステップ２５４）。初期設定の際、ＣＰＵシリアル番号キーはEncode_and_Store_KeyＡＰＩコマンドを介してシステム記憶のため準備される（ステップ２５６）。特に、Encode_and_Store_KeyＡＰＩコマンドはキーを符号化する。たとえば、その関数ではキーバイトが合計され、それらがシステムＣＭＯＳに記憶されるか、またはさらに複雑な符号化がもたらされる。キーアクセスが求められない場合（ステップ２５８）、プロセスは完了する（ステップ２５２）。しかしながら、キーナンバーアクセスが求められる場合、キー値はDecode_KeyＡＰＩコマンドを用いてシステム使用のため読み戻される（ステップ２６０）。一旦キー値が取出されると、上述のとおりシリアル番号が読まれる。上記のシステムおよび方法ではキーまたはシリアル番号への権限のないアクセスから完全に保護することはできないが、ユーザが偶然に権限のないアクセスを得ることはできないであろう。
上述の説明において述べたこの発明はここで提示される特定の形態に限定されることが意図されるものではなく、逆に添付の請求の範囲により規定されるこの発明の精神および範囲内に合理的範囲で含められるような代替例、修正および均等物を包含することが意図される。
【図１】
0004245662.tif 000002
【図２】
0004245662.tif 000003
【図３】
0004245662.tif 000004
【図４ａ】
0004245662.tif 000005
【図４ｂ】
0004245662.tif 000006
【図４ｃ】
0004245662.tif 000007
【図５】
0004245662.tif 000008
【図６】
0004245662.tif 000009
【図７】
0004245662.tif 000010