(57)【要約】【課題】背景技術の欠点の少なくとも一部を解消するソフトウェア暗号化ソリューションを提供することである。【解決手段】実行時に命令ごとに復号される、コンパイルされたコンピュータコード命令を暗号化する方法である。コンピュータコード命令は、暗号化された命令がその命令の値と、先行する命令の値と、擬似乱数とに依存するように、チェイニングモードを用いて暗号化される。２つ以上の先行する命令からその命令に至ることがあるので、その２つ以上の先行する命令に、暗号化された命令の復号時に用いる乱数補償値を関連づけ、暗号化された命令の復号により先行する命令がどれであっても結果が同じになるようにする。暗号化装置と、復号装置及び復号方法と、暗号化されたコンパイルされたコンピュータコード命令を格納するデジタルサポート媒体も提供する。【選択図】図３
2010140473.tif 000002
【特許請求の範囲】
【請求項１】
複数の分岐命令とラベル命令とを含むコンパイルされたコンピュータコード命令のセットを暗号化して、実行時に命令ごとに復号する、コンパイルされたコンピュータコード命令の暗号化されたセットを求める方法であって、
前記コンパイルされたコンピュータコード命令のセットの実行は前記複数の分岐命令の各々から前記ラベル命令に続き、
前記方法は一装置において、
暗号化されたラベル命令が少なくとも前記ラベル命令の値と、前記複数の分岐命令の選択された分岐命令の値に依存するように、チェイン化された暗号関数を用いて前記ラベル命令を暗号化する段階と、
前記ラベル命令の直前に前記複数の分岐命令のどれが実行されても、実行時に、同じ結果となるように、前記複数の分岐命令のうちの前記選択された分岐命令以外の少なくとも１つの分岐命令の各々に、前記暗号化されたラベル命令の復号の調整に用いる補償値を関連づける段階と、
を含む方法。
【請求項２】
前記ラベル命令の暗号化は、前記ラベル命令と関連づけられた擬似乱数にさらに依存する、請求項１に記載の方法。
【請求項３】
コード鍵と、前記擬似乱数を生成する命令のオフセットとの関数として前記擬似乱数を生成する段階をさらに含む、請求項２に記載の方法。
【請求項４】
前記ラベル命令の値と前記複数の分岐命令のうちの前記選択した分岐命令の値とは、それぞれのオプコード部分の値である、請求項１に記載の方法。
【請求項５】
前記暗号化は、前記ラベル命令の値と、前記複数の分岐命令のうちの選択された分岐命令の値との排他的論理和をとることにより実行される、請求項１に記載の方法。
【請求項６】
チェイン化された暗号関数を用いて暗号化された、コンパイルされたコンピュータコード命令のセットを復号する方法であって、
前記コンパイルされたコンピュータコード命令の実行時に、一装置において、
実行した関数の補償値を求める段階と、
前記コンパイルされたコンピュータコード命令の実行中に実行された関数に続く、後続の暗号化関数を求める段階と、
前記後続の暗号化関数の擬似乱数を求める段階と、
前記チェイン化された暗号化関数に対応する暗号化関数を用いて前記後続の暗号化された命令を復号する段階であって、前記暗号化関数は少なくとも前記後続の暗号化された命令と、前記実行された命令と、前記擬似乱数と、前記補償値とから後続の関数を生成する、復号する段階と、を含む方法。
【請求項７】
コード鍵と、前記後続の暗号化された関数のオフセットとの関数として前記擬似乱数を生成する段階をさらに含む、請求項６に記載の方法。
【請求項８】
暗号化された関数は暗号化されたオプコードと、もしあれば暗号化されていないパラメータとを含み、前記実行された関数と前記後続の暗号化された関数のオプコードの部分を復号に用いる、請求項６に記載の方法。
【請求項９】
前記後続の暗号化された命令の値と、前記実行された関数の値と、前記擬似乱数と、前記補償値の排他的論理和をとることにより復号を行う、請求項６に記載の方法。
【請求項１０】
複数の分岐命令とラベル命令とを含む、コンパイルされたコンピュータコード命令のセットを暗号化して、実行時に命令ごとに復号する、コンパイルされたコンピュータコード命令の暗号化されたセットを求める装置であって、
前記コンパイルされたコンピュータコード命令のセットの実行は前記複数の分岐命令の各々から前記ラベル命令に直接続き、
暗号化されたラベル命令が少なくとも前記ラベル命令の値と、前記複数の分岐命令の選択された分岐命令の値に依存するように、チェイン化された暗号関数を用いて前記ラベル命令を暗号化し、
前記ラベル命令の直前に前記複数の分岐命令のどれが実行されても、実行時に、同じ結果となるように、前記複数の分岐命令のうちの前記選択された分岐命令以外の少なくとも１つの分岐命令の各々に、前記暗号化されたラベル命令の復号の調整に用いる補償値を関連づけるように構成されたプロセッサを有する装置。
【請求項１１】
チェイン化された暗号関数を用いて暗号化された、コンパイルされたコンピュータコード命令のセットを復号する装置であって、
前記コンパイルされたコンピュータコード命令の実行時に、
実行した関数の補償値を求め、
前記コンパイルされたコンピュータコード命令の実行中に実行された関数に続く、後続の暗号化関数を求め、
前記後続の暗号化関数の擬似乱数を求め、
前記チェイン化された暗号化関数に対応する暗号化関数を用いて前記後続の暗号化された命令を復号する段階であって、前記暗号化関数は少なくとも前記後続の暗号化された命令と、前記実行された命令と、前記擬似乱数と、前記補償値とから後続の関数を生成するように構成されたプロセッサを有する装置。
【請求項１２】
コンピュータにおいて実行したとき、請求項６乃至９いずれか一項の方法を実行するコンピュータコード命令を含むデジタルサポート媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアに関し、特にソフトウェアの暗号化と、プロセッサにおけるその復号及び実行とに関する。
【背景技術】
【０００２】
このセクションは、以下に説明して特許を請求する本発明の様々な態様に関連する様々な態様の技術を読者に紹介することを意図するものである。この説明は、本発明の様々な態様の理解を容易にする背景情報を読者に提供する役に立つと思われる。従って、言うまでもなくこれらの記載は上記を考慮して読むべきであり、先行技術として認める（admissions  of  prior  art）ものではない。
【０００３】
ソフトウェアコードを暗号化により保護し、そのソフトウェアコードを実行時のみに命令ごとに復号する技術は、従来、例えば特許文献１及び特許文献２により知られている。これらのシステムの欠点は、比較的容易にハッカーが命令を変更して何をしているか知ってしまうことである。
【０００４】
この欠点を解消するため、特許文献３は、コードの基本ブロック（basic  blocks）をスクランブルして、シグネチャ（signature）を生成することによりインテグリティ（integrity）を確保することを提案している。このソリューションの欠点は、インテグリティを考慮しないでハッキングされたシステムでは、そのシステムをハックしようとするとき、まだ命令を置き換えることが可能だということである。
【０００５】
それゆえ言うまでもなく、背景技術の欠点の少なくとも一部を解消するソフトウェア暗号化ソリューションが必要である。本発明はかかるソリューションを提供するものである。
【特許文献１】米国特許公報第５，３８６，４６９号
【特許文献２】米国特許公報第６，３４５，３５９号
【特許文献３】米国特許出願公開第２００５／１０８５０７号
【発明の概要】
【０００６】
第１の態様では、本発明は、複数の分岐命令とラベル命令とを含む、コンパイルされたコンピュータコード命令のセットを暗号化して、実行時に命令ごとに復号する、コンパイルされたコンピュータコード命令の暗号化されたセットを求める方法に関する。前記コンパイルされたコンピュータコード命令のセットの実行は前記複数の分岐命令の各々から前記ラベル命令に直接続く。暗号化されたラベル命令が少なくとも前記ラベル命令の値と、前記複数の分岐命令の選択された分岐命令の値に依存するように、チェイン化（chained）された暗号関数を用いて前記ラベル命令を暗号化する。前記ラベル命令の直前に前記複数の分岐命令のどれが実行されても、実行時に同じ結果となるように、前記複数の分岐命令のうちの前記選択された分岐命令以外の少なくとも１つの分岐命令の各々に、前記暗号化されたラベル命令の復号の調整に用いる補償値を関連づける。
【０００７】
第１の好ましい実施形態において、前記ラベル命令の暗号化は、前記ラベル命令と関連づけられた擬似乱数にさらに依存する。
【０００８】
第２の好ましい実施形態において、コード鍵と、前記擬似乱数を生成する命令のオフセットとの関数として前記擬似乱数を生成する。
【０００９】
第３の好ましい実施形態において、前記ラベル命令の値と前記複数の分岐命令のうちの前記選択した分岐命令の値とは、それぞれのオプコード部分の値である。
【００１０】
第４の好ましい実施形態において、前記暗号化は、前記ラベル命令の値と、前記複数の分岐命令のうちの選択された分岐命令の値との排他的論理和をとることにより実行される。
【００１１】
第２の態様において、本発明は、チェイン化された暗号関数を用いて暗号化された、コンパイルされたコンピュータコード命令のセットを復号する方法に関する。コンパイルされたコンピュータコード命令の実行時、実行される関数の補償値と後続の暗号化された関数を求める。後続の暗号化された関数は、コンパイルされたコンピュータコード命令の実行時に、実行される関数に続くものである。前記後続の暗号化関数の擬似乱数を求める。前記チェイン化された暗号化関数に対応する暗号化関数を用いて前記後続の暗号化された命令を復号する。前記暗号化関数は少なくとも前記後続の暗号化された命令と、前記実行された命令と、前記擬似乱数と、前記補償値とから後続の関数を生成する。
【００１２】
第１の好ましい実施形態において、コード鍵と、後続の暗号化された関数のオフセットとの関数として擬似乱数を生成する。
【００１３】
第２の好ましい実施形態において、暗号化された関数は暗号化されたオプコードと、もしあれば暗号化されていないパラメータとを含み、前記実行された関数と前記後続の暗号化された関数のオプコードの部分のみを復号に用いる。
【００１４】
第３の好ましい実施形態において、前記後続の暗号化された命令の値と、前記実行された関数の値と、前記擬似乱数と、前記補償値の排他的論理和をとることにより復号を行う。
【００１５】
第３の態様では、本発明は、複数の分岐命令とラベル命令とを含むコンパイルされたコンピュータコード命令のセットを暗号化して、実行時に命令ごとに復号する、コンパイルされたコンピュータコード命令の暗号化されたセットを求める装置に関する。前記コンパイルされたコンピュータコード命令のセットの実行は前記複数の分岐命令の各々から前記ラベル命令に直接続く。この装置は、暗号化されたラベル命令が少なくとも前記ラベル命令の値と、前記複数の分岐命令の選択された分岐命令の値に依存するように、チェイン化された暗号関数を用いて前記ラベル命令を暗号化し、前記ラベル命令の直前に前記複数の分岐命令のどれが実行されても、実行時に、同じ結果となるように、前記複数の分岐命令のうちの前記選択された分岐命令以外の少なくとも１つの分岐命令の各々に、前記暗号化されたラベル命令の復号の調整に用いる補償値を関連づけるように構成されたプロセッサを含む。
【００１６】
第４の態様において、本発明は、チェイン化された暗号関数を用いて暗号化された、コンパイルされたコンピュータコード命令のセットを復号する装置に関する。この装置は、コンパイルされたコンピュータコード命令の実行時に、実行する関数の補償値を求め、前記コンパイルされたコンピュータコード命令の実行中に実行される関数に続く、後続の暗号化された関数を求め、前記後続の暗号化された関数の擬似乱数を求め、前記チェイン化された暗号化関数に対応する暗号化関数を用いて前記後続の暗号化された命令を復号するように構成されたプロセッサを含む。前記暗号化関数は少なくとも前記後続の暗号化された命令と、前記実行された命令と、前記擬似乱数と、前記補償値とから後続の関数を生成するように構成されたプロセッサを有する。
【００１７】
第５の態様において、本発明は、コンピュータにおいて実行したとき、本発明の第２の態様による方法を実行するコンピュータコード命令を含むデジタルサポート媒体に関する。
【図面の簡単な説明】
【００１８】
添付した図面を参照して、限定的でない例示により、本発明の好ましい特徴をここに説明する。
【図１】本発明の好ましい実施形態による、一般的なチェイニングモード暗号化方式を示す図である。
【図２】本発明の好ましい実施形態による、命令の暗号化法を詳細に示す図である。
【図３】本発明の好ましい実施形態を用いて暗号化したジャンプを有するコードの例を示す図である。
【図４】本発明の好ましい実施形態による、コード暗号化及び復号システムを示す図である。
【発明を実施するための形態】
【００１９】
本発明は、暗号化とその後の復号とによる、コンパイルしたソフトウェアコード命令のソフトウェアの保護を提案するものである。この説明を目的として、ハイレベルのコード命令は少なくとも下記の１つよりなる：
−ベーシックブロック（basic  block）、すなわち常に順次に実行される一組のマシンレベル命令。ベーシックブロックがジャンプまたはそれと同様の命令を含む場合、最後のマシンレベルの命令である。これは、次のマシンレベルの命令は、通常はコードが実行された時に決まるからである。
【００２０】
−ラベル。これはジャンプ命令の行き先と言える。ベーシックブロックがラベルを含む場合、そのラベルは常に最初の命令として現れる。
【００２１】
図１は、本発明の好ましい実施形態による、一般的なチェイニングモード（chaining  mode）暗号化方式を示す図である。通常、命令は、その命令と乱数とその前の命令との排他的論理和（ＸＯＲ）をとることにより暗号化される。図１に示した例では、３つの命令を暗号化しているだけであるが、これをより多数（または少数）の場合に一般化できることは言うまでもない。
【００２２】
暗号化する命令である命令１、命令２、命令３を左端から第１列に示した。第２列は擬似乱数であり、命令ごとに異なることが好ましい。これらの擬似乱数は秘密鍵を用いたストリーム暗号１０２により提供される擬似乱数ストリームである。秘密鍵はコンパイルされた各コードに対して一意的であることが好ましい。ストリーム暗号は原始的な暗号（cryptographic  primitives）であり、ＲＣ４やＳａｌｓａは非限定的な例である。ストリーム暗号として効果的に動作するように、カウンタモードのＡＥＳ（ＡＥＳ−ＣＴＲ）等のブロック暗号を用いることもできる。
【００２３】
第３列は前に暗号化された命令の値である。ただし、命令１には前の命令がないので、その替わりに初期化ベクトルＩＶを用いている。第４列は結果として得られた暗号化機能である。
【００２４】
図から分かるように、命令１は擬似乱数１及び初期化ベクトルＩＶと排他的論理和（ＸＯＲ）され、暗号化命令１すなわち｛命令１｝となる。しかし、命令２は、擬似乱数２及び命令１とＸＯＲされ、暗号化命令２すなわち｛命令２｝となる。その他の命令も、擬似乱数及び前の命令とＸＯＲされ、同様に暗号化される。
【００２５】
当業者には言うまでもないことであるが、図１に示したチェイニングモード（chaining  mode）は基本ブロックの暗号化にはうまく機能する。しかし、それ以外には使えない。例えばジャンプ命令などで複数の場所から来られる命令は、前の命令が複数あり、これらは互いに異なるからである。このため、１つの場合、すなわち「正しい」前の命令から後の命令に来た場合にのみ正しく復号することができる。
【００２６】
しかし、本発明は、コード全体をチェイン化することができる。このために、少なくとも一部（場合によっては全部）の命令に乱数補償値（compensator）を関連づける（associate）。この乱数補償値を用いて次の命令を暗号化及び復号する。後で説明するように、これらの乱数補償値により、前の命令がどれであっても命令を正しく暗号化できる。念のために言っておくと、乱数補償値は通常はランダムではないが、擬似乱数を補償する値である。
【００２７】
例えば、命令Ｉ１４には２つの前の命令Ｉ１３とＩ７とがあり得ると仮定する。各先行命令には乱数補償値Ｃ１３とＣ７がそれぞれ関連付けられている。
【００２８】
乱数補償値が無い場合、命令Ｉ１３からチェイン化された命令Ｉ１４の暗号化は、次の通りである：
【００２９】
【数１】
2010140473.tif 000003
ここで、
［外１］
2010140473.tif 000004
はＸＯＲ（排他的論理和）演算を示し、中括弧は暗号化された命令を示す。
【００３０】
同様に、命令Ｉ７からチェイニングする場合の命令Ｉ１４の暗号化は、次の通りである：
【００３１】
【数２】
2010140473.tif 000005
（多くの場合のように）Ｉ７とＩ１３とが異なれば、｛Ｉ１４｝が取り得る値は２つある。乱数補償値Ｃ１３とＣ７は、｛Ｉ１４｝の暗号値を同じにするために用いる。式は以下のようになる：
【００３２】
【数３】
2010140473.tif 000006
上の２つの式の結果が同じになるようにするには、右辺が等しくなければならない。すなわち、
【数４】
2010140473.tif 000007
この式を簡単にすると、
【数５】
2010140473.tif 000008
この式は、
［外２］
2010140473.tif 000009
である場合に、暗号化結果が同じになることを意味している。
【００３３】
乱数補償値は、ランダムコレクションテーブル（ＲＣＴ）に格納され、見出しには好ましくは暗号化されたバイナリコードが設けられる。
【００３４】
コードの復号はそのコードを実行する直前に行うのが好ましい。プロセッサ４２０は、秘密鍵を入力としたストリーム暗号２０２を用いて、各命令を復号する正しい擬似乱数値を生成できる。乱数補償値がある場合、命令Ｉ７から命令Ｉ１４の復号は、次の通りである：
【００３５】
【数６】
2010140473.tif 000010
また、命令Ｉ１３から命令Ｉ１４の復号は、次の通りである：
【００３６】
【数７】
2010140473.tif 000011
２つの式は同じ復号結果Ｉ１４を与える。
【００３７】
図２は、本発明の好ましい実施形態による、命令の暗号化法を詳細に示す図である。ソフトウェアコードをコンパイルするとき、コンパイラはジャンプを実行する命令に関する情報を提供する。この情報を用いて、コンパイルしたコードを暗号化する。
【００３８】
図１に示したように、命令２は、先行する命令１及び擬似乱数とＸＯＲをとることにより暗号化され、暗号化命令｛命令２｝となる。
【００３９】
図２は、擬似乱数の生成を詳細に示す図である。擬似乱数は（図１の場合と同様に、好ましくはＲＣ４、Ｓａｌｓａ、またはＡＥＳ−ＣＴＲである）ストリーム暗号２０２により生成される。ストリーム暗号２０２は、入力として、コード鍵と命令オフセット２０６とを用いる。ＲＣＴ２０４も命令オフセット２０６を入力として用い、乱数補償値Ｃ１を生成する。命令２の暗号化が補正（correction）を必要としない場合（これは命令２がラベルではない場合である）、ＲＣＴ２０４には、命令オフセット２０６に関連づけられた情報は無いことが好ましい。
【００４０】
命令オフセット２０６はストリーム暗号２０２に情報を提供し、１つの命令に対して毎回同じ乱数値が生成されるようにする。当業者には言うまでもないが、かかる命令オフセットは、図１では必要ない。コードブロックは所定の順序で生成されるからである。一方、図２ではコードをジャンプすることが許される。すなわち、７番目に実行される命令は、必ずしもコードの７番目の命令ではない。
【００４１】
言うまでもなく、どのジャンプ命令の乱数補償値もゼロに設定し、コードの完全なチェイニングを可能とするように、補正すべき命令の乱数補償値の計算を必要に応じて繰り返すことが可能である。
【００４２】
図３は、本発明の好ましい実施形態を用いて暗号化したジャンプを有するコードの例を示す図である。図から分かるように、最後の命令Ｉ８には異なる２つの命令Ｉ５とＩ７とから行かれる。暗号化命令｛命令８｝が先行する命令にかかわらず同じになるようにするため、
［外３］
2010140473.tif 000012
となるようにする。簡単のため、図３には、命令を暗号化するのに用いる乱数Ｒｉは示していない。
【００４３】
Ｃ７を設定すると、Ｃ５は
［外４］
2010140473.tif 000013
として計算できる。一方、Ｃ５を設定すると、Ｃ７は
［外５］
2010140473.tif 000014
として計算できる。すでに述べたように、どちらの乱数補償値を設定するかは通常は問題ではなく、重要なことは、可能性のあるすべての先行命令から来る命令を復号できることである。
【００４４】
乱数補償値の値は上記のＲＣＴテーブルに格納される。
【００４５】
図４は、本発明の好ましい実施形態による、コード暗号化及び復号システム４００を示す図である。システム４００は、コンパイルされたバイナリコード「コード」を受け取り、暗号化するように構成された暗号化装置４１０を有する。暗号化装置４１０は、前記のように、バイナリコードをスクランブルするように構成されている。暗号化装置４１０は、スクランブルされたコード｛コード｝Ｋｃが対象とする（intended）プロセッサ４２０の公開鍵Ｋｐｕｂを格納し、秘密コード鍵Ｋｃを生成する。この秘密コード鍵は毎回変わる（すなわち、コードごとに異なる）ことが好ましい。公開鍵Ｋｐｕｂは対象とする装置（または複数の装置）に対して一意的である。ストリーム暗号は秘密鍵Ｋｃを用いて、ランダムストリームを生成する。秘密鍵Ｋｃは、安全に送信するため、公開鍵Ｋｐｕｂを用いて暗号化され、暗号化された秘密鍵｛Ｋｃ｝Ｋｐｕｂとなる。｛Ｋｃ｝Ｋｐｕｂには、好ましくはそのヘッダに、バイナリコードが提供される。
【００４６】
暗号化装置４１０は、１つ以上のプロセッサで実施され、またはコードをコンパイルするように構成されたコンパイラを含み、さらに少なくとも１つの通信部とメモリとをさらに含む装置の一部で実施される。暗号化装置４１０は、コンパイルされたコードを分析し、暗号化するのに必要なラベル等の情報を見つけるように構成されている。
【００４７】
暗号化装置４１０は、スクランブルされたコード｛コード｝Ｋｃと暗号化された秘密鍵｛Ｋｃ｝Ｋｐｕｂとを、同じチャネルまたは別々のチャネルを介して、プロセッサ４２０に送信するようにさらに構成されている。言うまでもなく、スクランブルされたコード｛コード｝Ｋｃは、暗号化された秘密鍵｛Ｋｃ｝Ｋｐｕｂといっしょに、またはそれ無しに、ＣＤ−ＲＯＭ等のデジタルサポート媒体４３０で、または任意の適切なデジタル配信ネットワーク（例えば、インターネット、ＬＡＮ、ＵＭＴＳ）で配信してもよい。
【００４８】
プロセッサ４２０はバイナリコードヘッダから暗号化された秘密鍵｛Ｋｃ｝Ｋｐｕｂを取り出す。プロセッサ４２０は、好ましくは、公開鍵に対応する秘密鍵Ｋｐｒｉｖを用いて｛Ｋｃ｝Ｋｐｕｂを復号するように構成された暗号プロセッサ４２１を有する。秘密鍵Ｋｐｒｉｖは好ましくはセキュアな（不正操作できない）記憶場所に格納される。暗号プロセッサは、秘密鍵Ｋｃを用いて、スクランブルされたコード｛コード｝Ｋｃをデスクランブル（descramble）し、バイナリコードを求めるように構成されている。命令がデスクランブルされると、このバイナリコードは、キャッシュ４２３に送られ、キャッシュ４２３からさらに第２のプロセッサ（ＣＰＵ）４２４に送られ、実行される。プロセッサ４２０は、ＲＣＴを格納するように構成されたメモリ（ＲＡＭ）４２２をさらに有する。
【００４９】
本システムと方法は通常のプロセッサを用いて実施してもよいが、言うまでもなく、いわゆる暗号プロセッサ（crypto-processor）を用いるとより安全になり有利である。
【００５０】
上記の説明では、命令が暗号化されていると説明した。当業者には言うまでもなく、命令の長さはいわゆるオプコード（opcode）に付随（associated）する変数の数により変化し得る。
【００５１】
第１の変形例では、各命令のオプコードのみを暗号化し、変数は暗号化しない。
【００５２】
第２の変形例では、暗号化に用いる擬似乱数を最も長い命令と同じ長さにする。そうすれば、オプコードを最初に復号して、そのオプコードにリンクされている変数の長さを知ることができる。次に、第２のパスで、変数を復号する。第２の変形例を用いて命令をチェイン化するため、現在の命令と比較して先行する命令の方が長ければ、その先行する命令を現在の命令の長さに切り捨てる（truncate）。しかし、先行する命令の方が短ければ（または長さが同じなら）、切り捨ては必要ない。
【００５３】
当業者には言うまでもなく、問題となる命令に先だってどの命令が実行されても、暗号化値が同じになるように乱数補償値を計算した場合に、命令を暗号化するのに用いる擬似乱数を、その命令自体またはそれに先行する命令に付随させることが可能である。
【００５４】
明細書、特許請求の範囲、及び図面に開示した各特徴は、独立に設けることもできるし、適切に組み合わせて設けることもできる。ハードウェアで実施されると説明した機能はソフトウェアでも実施できるし、その逆の場合もある。
【００５５】
特許請求の範囲に示す参照符号は例示であり、請求項の範囲を限定するものではない。
【図１】
2010140473.tif 000015
【図２】
2010140473.tif 000016
【図３】
2010140473.tif 000017
【図４】
2010140473.tif 000018
【外国語明細書】
2010140473000001.pdf