(57)【要約】演算の内容を解析しにくくするコンピュータシステムを提供する。  べき乗演算部２６２は、入力データａ、ｂに対し、  ｇａ＝ｇａｍｏｄ  ｎ，ｇｂ＝ｇｂｍｏｄｎを計算する。  次に、乗算部２６４は、ｇａ及びｇｂに対し、  ｇａｂ＝ｇａ×ｇｂ  ｍｏｄ  ｎを計算する。  次に、離散対数計算部２６６は、  ｇａｂ＝ｇｃｉ  ｍｏｄ  ｐｉ（ｉ＝１，２，…，ｋ）となるｃｉｍｏｄ  ｐｉ−１を求める。  次に、ＣＲＴ部２６７は、中国人剰余定理（ＣＲＴ）により、ｃｉ＝ｃ  ｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）となるｃを求める。【特許請求の範囲】
【請求項１】
２個以上の整数を加算するコンピュータシステムであって、
複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、
前記記憶手段に記憶されている前記コンピュータプログラムから１個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、
前記コンピュータプログラムは、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
ことを特徴とするコンピュータシステム。
【請求項２】
前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、
前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、
前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いる
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記群Ｇは、剰余整数環の乗法群であり、
前記変換命令群は、各整数に冪乗を施し、
演算命令群は、前記元に対して、乗算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記群Ｇは、複数個の相異なる素数ｐ１，ｐ２，…，ｐｋ（ｋ＞１）の積ｎ＝ｐ１×ｐ２×…×ｐｋに対し、Ｚ／ｎＺの乗法群であり、
×は、乗算を示す演算子であり、Ｚは、整数環であり、Ｚ／ｎＺは、ｍを法とし整数と合同である値から構成される剰余整数環である
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記逆変換命令群は、前記素数ｐ１，ｐ２，…，ｐｋを用いたＺ／ｐ１Ｚ、Ｚ／ｐ２Ｚ、…、Ｚ／ｐｋＺの乗法群における離散対数問題を解く命令を含む
ことを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
前記逆変換命令群は、前記素数ｐ１，ｐ２，…，ｐｋを用いたＺ／ｐ１Ｚ，Ｚ／ｐ２Ｚ，…，Ｚ／ｐｋＺの乗法群における離散対数問題の解に対し、中国人の剰余定理を用いる命令を含む
ことを特徴とする請求項５に記載のコンピュータシステム。
【請求項７】
前記群Ｇは、２つの素数ｐ，ｑと正整数ｍを用いて表されるｎ＝ｐｍ×ｑに対し、Ｚ／ｎＺの乗法群であり、
前記変換命令群は、各整数に冪乗を施し、
演算命令群は、前記元に対して、乗算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項８】
前記部分群Ｓは、Ｚ／ｐｍ  Ｚの乗法群である
ことを特徴とする請求項７に記載のコンピュータシステム。
【請求項９】
前記正整数ｍは、２である
ことを特徴とする請求項７に記載のコンピュータシステム。
【請求項１０】
前記部分群Ｓは、アノマラス楕円曲線の群であり、
前記変換命令群は、各整数に楕円曲線上の乗算を施し、
演算命令群は、前記元に対して、楕円曲線上の加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１１】
前記群Ｇは、二つのアノマラス楕円曲線の群の直積であり、
前記変換命令群は、各整数に楕円曲線上の乗算を施し、
演算命令群は、前記元に対して、楕円曲線上の加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１２】
さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求める
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１３】
さらに、前記逆変換命令群は、前記群Ｇに属する元を前記部分群Ｓに属する元に還元する還元部を備える
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１４】
前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、
前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、
前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１５】
前記暗号化又は復号は、共通鍵方式の暗号化又は復号アルゴリズムである
ことを特徴とする請求項１４に記載のコンピュータシステム。
【請求項１６】
前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、
前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、
前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１７】
前記コンピュータシステムは、前記メモリ部と前記プロセッサとが高密度に集積された集積回路を含むＩＣカードである
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１８】
メモリ部とプロセッサとを備えるコンピュータシステムにおいて用いられ、２個以上の整数を加算する加算方法であって、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換ステップと、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算ステップと、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換ステップとを含む
ことを特徴とする加算方法。
【請求項１９】
２個以上の整数を加算するコンピュータプログラムであって、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
ことを特徴とするコンピュータプログラム。
【請求項２０】
前記コンピュータプログラムは、コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２１】
前記コンピュータプログラムは、搬送波に乗せられて送信される
ことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２２】
２個以上の整数を加算するコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記コンピュータプログラムは、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
ことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、コンピュータプログラムの解析を困難にする耐タンパーソフト技術に関する。
【背景技術】
【０００２】  従来より、コンピュータプログラムに従って動作するプロセッサを備えるコンピュータシステムにおいて、秘密の通信や相手の認証をする際に、暗号プログラム（暗号ソフトウェア）が用いられる。
このとき、鍵や暗号アルゴリズムなどを含む暗号ソフトウェアをコンピュータシステムにそのまま実装すると、実装された暗号ソフトウェアを解析された場合に、簡単に不正な使用がされてしまう。このような問題点を解決するために、特許文献１は、演算及びデータの領域を変換することにより、元の演算及びデータを推測困難にする技術を開示している。【０００３】  例えば、入力データａ、ｂに対し、加算を施して、加算結果ａ＋ｂを出力する加算プログラムを想定する。
予め、整数ｋ１、ｋ２を保持し、これらを用いて、入力データａ、ｂを、それぞれｔａ＝ｋ１×ａ＋ｋ２，ｔｂ＝ｋ１×ｂ＋ｋ２に変換する。ここで、「×」は、乗算を示す演算子である。【０００４】  次にｔａ，ｔｂに対して、ｔａｂ＝ｔａ＋ｔｂを計算する。
さらに、ｔａｂに対して、ｃ＝（ｔａｂ−２ｋ２）／ｋ１を計算する。
次に、演算結果ｃを出力する。
上記のように処理すると、
ｔａｂ＝ｔａ＋ｔｂ
＝ｋ１×ａ＋ｋ２＋ｋ１×ｂ＋ｋ２
＝ｋ１×（ａ＋ｂ）＋２ｋ２より、
（ｔａｂ−２ｋ２）／ｋ１＝ａ＋ｂが成り立つ。【０００５】  従って、ｃ＝ａ＋ｂとなり、加算プログラムによりａとｂの加算結果が得られる。
【特許文献１】米国特許第６５９４７６１号公報
【特許文献２】日本国特許第３４０２４４１号特許公報
【特許文献３】日本国特許第２７６０７９９号特許公報
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】Ｈｅｎｒｉ  Ｃｏｈｅｎ，“Ａ  Ｃｏｕｒｓｅ  ｉｎ  Ｃｏｍｐｕｔａｔｉｏｎａｌ  Ａｌｇｅｂｒａｉｃ  Ｎｕｍｂｅｒ  Ｔｈｅｏｒｙ″，ＧＴＭ  １３８，Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ，１９９３，ｐｐ．１９−２０
【非特許文献３】Ｉ．Ｂｌａｋｅ，Ｇ．Ｓｅｒｏｕｓｓｉ  ａｎｄ  Ｎ．Ｓｍａｒｔ，“Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅｓ  ｉｎ  Ｃｒｙｐｔｏｇｒａｐｈｙ″，ＣＡＭＢＲＩＤＧＥ  ＵＮＩＶＥＲＳＩＴＹ  ＰＲＥＳＳ，１９９９
【非特許文献４】Ｎ．Ｋｕｎｉｈｉｒｏ  ａｎｄ  Ｋ．Ｋｏｙａｍａ，“Ｔｗｏ  Ｄｉｓｃｒｅｔｅ  Ｌｏｇ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｓｕｐｅｒ−Ａｎｏｍａｌｏｕｓ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅｓ″，ＳＣＩＳ’９９，１９９９，ｐｐ．８６９−８７４
【発明の開示】
【発明が解決しようとする課題】
【０００６】  上記従来例の方式によると、変換後の領域においても通常の加算と同じ加算を行うため、変換後の演算を解析することにより、変換前の演算が加算であることが推測される可能性があるという問題点がある。プログラムにおいて、加算をしている箇所が、解析者により知られた場合に、その前後の部分がさらに集中して解析されると、どのような変換を行っているか知られてしまう恐れがある。ゆえに、可能な限り、変換前の演算を知られないようにした方がよい。【０００７】  本発明は、演算の内容を解析しにくくすることができるコンピュータシステム、コンピュータプログラム、加算方法及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００８】  上記目的を達成するために、本発明は、２個以上の整数を加算するコンピュータシステムであって、複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、前記記憶手段に記憶されている前記コンピュータプログラムから１個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、前記コンピュータプログラムは、各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含むことを特徴とする。
【発明の効果】
【０００９】  この構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。
ここで、前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いるとしてもよい。【００１０】  この構成によると、セキュリティ処理における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記群Ｇは、剰余整数環の乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。【００１１】  ここで、前記群Ｇは、２つの素数ｐ，ｑと正整数ｍを用いて表される
ｎ＝ｐｍ×ｑに対し、Ｚ／ｎＺの乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。【００１２】  ここで、前記部分群Ｓは、アノマラス楕円曲線の群であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。また、前記群Ｇは、二つのアノマラス楕円曲線の群の直積であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。【００１３】  これらの構成によると、変換後に施される演算は、楕円曲線上の加算であり、整数の加算と異なるので、演算を隠蔽することができる。
ここで、さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求めるとしてもよい。【００１４】  この構成によると、逆変換命令群による逆算が容易である。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。【００１５】  この構成によると、暗号化又は復号における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。【００１６】  この構成によると、デジタル署名又は署名検証における加算において、使用する値及び演算を隠蔽することができる。
以上説明したように、本発明の構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができ、その価値は大きい。
【図面の簡単な説明】
【００１７】
【図１】コンテンツ配信システム１０の構成を示す構成図である。
【図２】コンテンツサーバ装置１００の構成を示すブロック図である。
【図３】コンテンツ配信プログラム１３１の内容を説明するフローチャートである。
【図４】コンテンツ暗号プログラム１３２の内容を説明するフローチャートである。
【図５】暗号プログラム１３３の構成を示す構成図である。
【図６】暗号制御モジュール１４１の内容を説明するフローチャートである。図７へ続く。
【図７】暗号制御モジュール１４１の内容を説明するフローチャートである。図６から続く。
【図８】パーソナルコンピュータ２００の構成を示すブロック図である。
【図９】コンテンツ受信プログラム２３１の内容を説明するフローチャートである。
【図１０】コンテンツ復号プログラム２３２の内容を説明するフローチャートである。
【図１１】復号プログラム２３４の構成を示す構成図である。
【図１２】復号制御モジュール２４１の内容を説明するフローチャートである。図１３へ続く。
【図１３】復号制御モジュール２４１の内容を説明するフローチャートである。図１２から続く。
【図１４】加算モジュール２４３の構成を示す構成図である。
【図１５】加算モジュール２４３による加算の動作を示すフローチャートである。
【図１６】加算モジュール５０１の構成を示す構成図である。
【図１７】加算モジュール５０１による加算の動作を示すフローチャートである。
【図１８】加算モジュール６０１の構成を示す構成図である。
【図１９】加算モジュール６０１による加算の動作を示すフローチャートである。
【発明を実施するための最良の形態】
【００１８】  １．コンテンツ配信システム１０
本発明に係る第１の実施の形態としてのコンテンツ配信システム１０について説明する。
１．１  コンテンツ配信システム１０の構成
コンテンツ配信システム１０は、図１に示すように、コンテンツサーバ装置１００、配信サーバ装置３００ａ、放送装置３００ｂ、ＢＤ製造装置３００ｃ、パーソナルコンピュータ２００、デジタル放送受信装置２００ａ及びＢＤ再生装置２００ｂから構成されている。【００１９】  コンテンツサーバ装置１００は、映像データ及び音データから構成される映画のコンテンツを記憶しており、配信サーバ装置３００ａからの要求に応じて、記憶しているコンテンツを暗号化して暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２１を介して接続されている配信サーバ装置３００ａへ送信する。配信サーバ装置３００ａは、暗号化コンテンツを受信し、インターネット２０を介して接続されているパーソナルコンピュータ２００へ暗号化コンテンツを送信する。パーソナルコンピュータ２００は、暗号化コンテンツを受信し、受信した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。【００２０】  また、コンテンツサーバ装置１００は、上記と同様に、放送装置３００ｂからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２２を介して接続されている放送装置３００ｂへ送信する。放送装置３００ｂは、暗号化コンテンツを受信し、受信した暗号化コンテンツを放送波に乗せて放送し、デジタル放送受信装置２００ａは、放送波を受信し、受信した放送波から前記暗号化コンテンツを抽出し、抽出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。【００２１】  さらに、コンテンツサーバ装置１００は、上記と同様に、ＢＤ製造装置３００ｃからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２３を介して接続されているＢＤ製造装置３００ｃへ送信する。ＢＤ製造装置３００ｃは、暗号化コンテンツを受信し、受信した暗号化コンテンツを記録媒体４００に書き込む。暗号化コンテンツが書き込まれた記録媒体４００は、販売されて利用者が購入する。利用者により、記録媒体４００が装着されたＢＤ再生装置２００ｂは、記録媒体４００から前記暗号化コンテンツを読み出し、読み出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。【００２２】  １．２  コンテンツサーバ装置１００
コンテンツサーバ装置１００は、図２に示すように、マイクロプロセッサ１０１、ハードディスク部１０２、メモリ部１０３、入力制御部１０４、表示制御部１０５及び通信ユニット１０６などから構成されるコンピュータシステムである。入力制御部１０４及び表示制御部１０５は、それぞれ、キーボード１０７及びモニタ１０８に接続されている。また、通信ユニット１０６は、専用回線２１、２２及び２３を介して、それぞれ、配信サーバ装置３００ａ、放送装置３００ｂ及びＢＤ製造装置３００ｃに接続されている。【００２３】  ハードディスク部１０２及びメモリ部１０３には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ１０１が、前記コンピュータプログラムに従って動作することにより、コンテンツサーバ装置１００は、その一部の機能を達成する。
（１）ハードディスク部１０２
ハードディスク部１０２は、図２に示すように、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・、鍵１２３、鍵１２４、鍵１２５、・・・、及び図示していないその他のコンピュータプログラムを記憶している。また、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・を記憶するための領域を備えている。【００２４】  コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・は、それぞれ、鍵１２３、鍵１２４、鍵１２５、・・・、に対応しており、また、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・に対応している。
コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・は、それぞれ、映像データ及び音データが高効率に圧縮符号化された圧縮データである。【００２５】  鍵１２３、鍵１２４、鍵１２５、・・・は、それぞれ、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・に、暗号化アルゴリズムを施して、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・を生成する際に使用される暗号鍵であり、それぞれ、６４ビット長のデータである。ここで、前記暗号化アルゴリズムについては、後述する。【００２６】  暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・は、それぞれ、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・に、前記暗号化アルゴリズムが施されて生成された暗号化データである。
（２）メモリ部１０３
メモリ部１０３は、図２に示すように、コンテンツ配信プログラム１３１、コンテンツ暗号プログラム１３２、暗号プログラム１３３、送信プログラム１３４及び図示していないその他のプログラムを記憶している。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ１０１により解読され実行される形式である。【００２７】  以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
（ａ）コンテンツ配信プログラム１３１
コンテンツ配信プログラム１３１は、図３に示すように、命令コード群Ｓ１０１、Ｓ１０２、Ｓ１０３及びＳ１０４を含んで構成されており、これらの命令コード群は、コンテンツ配信プログラム１３１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。【００２８】  命令コード群Ｓ１０１は、コンテンツサーバ装置１００の管理者からコンテンツの指定を受け付け、又はコンテンツの配信先の装置からコンテンツの指定を受け取ることを示す複数の命令コードを含む。
命令コード群Ｓ１０２は、コンテンツの配信先の装置の指定を受け取ることを示す複数の命令コードを含む。【００２９】  命令コード群Ｓ１０３は、受け付けた指定又は受け取った指定により示されるコンテンツを指定して、コンテンツ暗号プログラム１３２を呼び出し、次に、コンテンツ暗号プログラム１３２により生成された暗号化コンテンツを暗号化コンテンツ１２６としてハードディスク部１０２へ書き込むことを示す複数の命令コードを含む。
命令コード群Ｓ１０４は、受け取った指定による配信先の装置と、生成されハードディスク部１０２に書き込まれた暗号化コンテンツとを指定して、送信プログラム１３４を呼び出すことを示す複数の命令コードを含む。命令コード群Ｓ１０４が実行されることにより、受け取った指定により示される配信先の装置へ、生成された暗号化コンテンツが送信される。【００３０】  （ｂ）コンテンツ暗号プログラム１３２
コンテンツ暗号プログラム１３２は、図４に示すように、命令コード群Ｓ１１１、Ｓ１１２、Ｓ１１３、Ｓ１１４、Ｓ１１５及びＳ１１６を含んで構成されており、これらの命令コード群は、コンテンツ暗号プログラム１３２内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。【００３１】  命令コード群Ｓ１１１は、指定を受け付けたコンテンツ内におけるデータの位置をビットにより示す読出しポイントに、初期値として値「−６４」を代入し、指定を受け付けたコンテンツに対応する鍵をハードディスク部１０２から読み出すことを示す複数の命令コードを含む。ここで、値「−６４」を有する読出しポイントは、前記コンテンツ外の位置を示しているが、読出しポイントに初期値として値「−６４」を代入するのは、後述する命令コード群Ｓ１１２の最初の実行において、読出しポイントが、前記コンテンツの先頭の位置を示すようにするためである。後述する命令コード群Ｓ１１２の最初の実行において、前記読出しポイントに６４ビットが加算され、読出しポイントは、値「０」を有することになり、この読出しポイントは、前記コンテンツの先頭の位置を示している。【００３２】  命令コード群Ｓ１１２は、前記読出しポイントに６４ビットを加算し、次に、前記コンテンツにおいて、加算された読出しポイントにより示される位置から１ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記コンテンツ内であるならば、当該位置から１ブロック分のデータを読み出し、読出しポイントにより示される位置が前記コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含む。ここで、１ブロックは、６４ビット長のデータである。【００３３】  命令コード群Ｓ１１３は、命令コード群Ｓ１１２から終了コードが出力された場合には、コンテンツ暗号プログラム１３２による処理を終了し、終了コードが出力されていない場合には、次の命令コード群Ｓ１１４に制御を移すことを示す複数の命令コードを含む。
命令コード群Ｓ１１４は、読み出された前記鍵及び読み出された前記１ブロックを伴って、暗号プログラム１３３を呼び出すことを示す複数の命令コードを含む。【００３４】  命令コード群Ｓ１１５は、暗号プログラム１３３により生成された１個の暗号化ブロックを、ハードディスク部１０２に対して、暗号化コンテンツ１２６の一部として書き込むことを示す複数の命令コードを含む。
命令コード群Ｓ１１６は、次に、制御を命令コード群Ｓ１１２へ移すことを示す命令コードを含む。【００３５】  （ｃ）暗号プログラム１３３
暗号プログラム１３３は、図５に示すように、暗号制御モジュール１４１、拡張鍵生成モジュール１４２及びローテーションモジュールＡ１４３、ローテーションモジュールＢ１４４、ローテーションモジュールＣ１４５及びローテーションモジュールＤ１４６から構成されている。【００３６】  各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ１０１により解読され実行される形式である。
（拡張鍵生成モジュール１４２）
拡張鍵生成モジュール１４２は、呼出し元のプログラムから、６４ビットの鍵Ｋを受け取り、受け取った鍵Ｋを用いて、８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８を生成し、生成した８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８を呼出し元のプログラムへ出力する複数の命令コードを含む。【００３７】  なお、拡張鍵を生成する方法については、特許文献３に記載されているため、説明を省略する。
（ローテーションモジュールＡ１４３）
ローテーションモジュールＡ１４３は、呼出し元のプログラムから３２ビットのデータＸを受け取り、データＸに対して、Ｒｏｔ２（Ｘ）＋Ｘ＋１を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。【００３８】  ここで、Ｒｏｔ２（Ｘ）は、３２ビットのデータＸを左へ２ビット循環シフトすることを示す。なお、３２ビットのデータＸを左へ２ビット循環シフトするとは、データＸを最上位２ビットＸ１と最下位３０ビットＸ２に分け、Ｘ２を、データＸの最上位３０ビットにシフトし、Ｘ１をデータＸの最下位２ビットにシフトすることを言う。
（ローテーションモジュールＢ１４４）
ローテーションモジュールＢ１４４は、呼出し元のプログラムから３２ビットのデータＸを受け取り、データＸに対して、Ｒｏｔ４（Ｘ）ＸＯＲ  Ｘを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。【００３９】  ここで、Ｒｏｔ４（Ｘ）は、データＸを左へ４ビット循環シフトすることを示し、ＸＯＲは、排他的論理和を示す。なお、３２ビットのデータＸを左へ４ビット循環シフトするとは、データＸを最上位４ビットＸ１と最下位２８ビットＸ２に分け、Ｘ２を、データＸの最上位２８ビットにシフトし、Ｘ１をデータＸの最下位４ビットにシフトすることを言う。【００４０】  （ローテーションモジュールＣ１４５）
ローテーションモジュールＣ１４５は、呼出し元のプログラムから３２ビットのデータＸを受け取り、データＸに対して、Ｒｏｔ８（Ｘ）ＸＯＲ  Ｘを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Ｒｏｔ８（Ｘ）は、データＸを左へ８ビット循環シフトすることを示す。なお、３２ビットのデータＸを左へ８ビット循環シフトするとは、データＸを最上位８ビットＸ１と最下位２４ビットＸ２に分け、Ｘ２を、データＸの最上位２４ビットにシフトし、Ｘ１をデータＸの最下位８ビットにシフトすることを言う。【００４１】  （ローテーションモジュールＤ１４６）
ローテーションモジュールＤ１４６は、呼出し元のプログラムから３２ビットのデータＸ及び３２ビットのデータＹを受け取り、データＸ及びデータＹに対して、Ｒｏｔ１６（Ｘ）＋（Ｘ  ＡＮＤ  Ｙ）を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。【００４２】  ここで、Ｒｏｔ１６（Ｘ）は、データＸを、左へ１６ビット循環シフトすることを示し、ＡＮＤは、論理積を示す。なお、３２ビットのデータＸを左へ１６ビット循環シフトするとは、データＸを最上位１６ビットＸ１と最下位１６ビットＸ２に分け、Ｘ２を、データＸの最上位１６ビットにシフトし、Ｘ１をデータＸの最下位１６ビットにシフトすることを言う。【００４３】  （暗号制御モジュール１４１）
暗号制御モジュール１４１は、図６及び図７に示すように、命令コード群Ｓ１２１〜命令コード群Ｓ１４０を含んで構成されており、これらの命令コード群は、暗号制御モジュール１４１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含む。【００４４】  命令コード群Ｓ１２１は、暗号制御モジュール１４１の呼出し元のプログラムから、１ブロックの平文Ｍ及び鍵Ｋを受け取ることを示す複数の命令コードを含む。ここで、１ブロックは、６４ビット長のデータである。
命令コード群Ｓ１２２は、受け取った鍵Ｋを伴って、拡張鍵生成モジュール１４２を呼び出すことを示す複数の命令コードを含む。命令コード群Ｓ１２２が実行されると、その結果、８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８が生成される。【００４５】  命令コード群Ｓ１２３は、データＭ１を定義する命令コード及びデータＭ２を定義する命令コードを含む。データＭ１は、受け取った平文Ｍの最上位の３２ビットのデータであり、データＭ２は、受け取った平文Ｍの最下位の３２ビットのデータである。
命令コード群Ｓ１２４は、データＭ１とデータＭ２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１に格納することを示す複数の命令コードを含む。【００４６】  ＴＭＰ１＝Ｍ１  ＸＯＲ  Ｍ２
命令コード群Ｓ１２５は、変数ＴＭＰ１と拡張鍵Ｋ１とに加算を施し、その演算結果を変数ＴＭＰ２に格納することを示す複数の命令コードを含む。
ＴＭＰ２＝ＴＭＰ１  ＋  Ｋ１
命令コード群Ｓ１２６は、変数ＴＭＰ２を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ３に格納することを示す複数の命令コードを含む。【００４７】  ＴＭＰ３＝Ｒｏｔ２（ＴＭＰ２）＋ＴＭＰ２＋１
命令コード群Ｓ１２７は、変数ＴＭＰ３を伴って、ローテーションモジュールＢ１４４を呼び出し、その演算結果を変数ＴＭＰ４に格納することを示す複数の命令コードを含む。
ＴＭＰ４＝Ｒｏｔ４（ＴＭＰ３）  ＸＯＲ  ＴＭＰ３
命令コード群Ｓ１２８は、変数ＴＭＰ４とデータＭ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ５に格納することを示す複数の命令コードを含む。【００４８】  ＴＭＰ５＝ＴＭＰ４  ＸＯＲ  Ｍ１
命令コード群Ｓ１２９は、変数ＴＭＰ５と拡張鍵Ｋ２とに加算を施し、その演算結果を変数ＴＭＰ６に格納することを示す複数の命令コードを含む。
ＴＭＰ６＝ＴＭＰ５  ＋  Ｋ２
命令コード群Ｓ１３０は、変数ＴＭＰ６を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ７に格納することを示す複数の命令コードを含む。【００４９】  ＴＭＰ７＝Ｒｏｔ２（ＴＭＰ６）＋ＴＭＰ６＋１
命令コード群Ｓ１３１は、変数ＴＭＰ７を伴って、ローテーションモジュールＣ１４５を呼び出し、その演算結果を変数ＴＭＰ８に格納することを示す複数の命令コードを含む。
ＴＭＰ８＝Ｒｏｔ８（ＴＭＰ７）ＸＯＲ  ＴＭＰ７
命令コード群Ｓ１３２は、変数ＴＭＰ８と拡張鍵Ｋ３とに加算を施し、その演算結果を変数ＴＭＰ９に格納することを示す複数の命令コードを含む。【００５０】  ＴＭＰ９＝ＴＭＰ８  ＋  Ｋ３
命令コード群Ｓ１３３は、変数ＴＭＰ９を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ１０に格納することを示す複数の命令コードを含む。
ＴＭＰ１０＝Ｒｏｔ２（ＴＭＰ９）＋ＴＭＰ９＋１
命令コード群Ｓ１３４は、変数ＴＭＰ７及び変数ＴＭＰ１０を伴って、ローテーションモジュールＤ１４６を呼び出し、その演算結果を変数ＴＭＰ１１に格納することを示す複数の命令コードを含む。【００５１】  ＴＭＰ１１＝Ｒｏｔ１６（ＴＭＰ１０）＋（ＴＭＰ１０  ＡＮＤ  ＴＭＰ７）
命令コード群Ｓ１３５は、変数ＴＭＰ１１と変数ＴＭＰ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１２に格納することを示す複数の命令コードを含む。
ＴＭＰ１２＝ＴＭＰ１１  ＸＯＲ  ＴＭＰ１
命令コード群Ｓ１３６は、変数ＴＭＰ１２と拡張鍵Ｋ４とに加算を施し、その演算結果を変数ＴＭＰ１３に格納することを示す複数の命令コードを含む。【００５２】  ＴＭＰ１３＝ＴＭＰ１２  ＋  Ｋ４
命令コード群Ｓ１３７は、変数ＴＭＰ１３を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ１４に格納することを示す複数の命令コードを含む。
ＴＭＰ１４＝Ｒｏｔ２（ＴＭＰ１３）＋ＴＭＰ１３＋１
命令コード群Ｓ１３８は、変数ＴＭＰ１４と変数ＴＭＰ４とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１５に格納することを示す複数の命令コードを含む。【００５３】  ＴＭＰ１５＝ＴＭＰ１４  ＸＯＲ  ＴＭＰ４
命令コード群Ｓ１３９は、変数ＴＭＰ１５と変数ＴＭＰ１２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１６に格納することを示す複数の命令コードを含む。
ＴＭＰ１６＝ＴＭＰ１５  ＸＯＲ  ＴＭＰ１２
命令コード群Ｓ１４０は、変数ＴＭＰ１５を最上位３２ビット、変数ＴＭＰ１６を最下位３２ビットとする６４ビットの整数を暗号文Ｃとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。【００５４】  （ｄ）送信プログラム１３４
送信プログラム１３４（図示していない）は、複数の命令コードが並べられて構成されており、呼出し元のプログラムから、データの指定及び配信先の装置の指定を受け取り、通信ユニット１０６を制御して、指示されたデータを指定された配信先の装置へ送信することを示す複数の命令コードを含む。【００５５】  １．３  パーソナルコンピュータ２００
パーソナルコンピュータ２００は、図８に示すように、マイクロプロセッサ２０１、ハードディスク部２０２、メモリ部２０３、入力制御部２０４、表示制御部２０５及び通信ユニット２０６などから構成されるコンピュータシステムである。入力制御部２０４及び表示制御部２０５は、それぞれ、キーボード７０７及びモニタ２０８に接続されている。また、通信ユニット２０６は、インターネット２０に接続されている。【００５６】  ハードディスク部２０２及びメモリ部２０３には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ２０１が、各コンピュータプログラムに従って動作することにより、パーソナルコンピュータ２００は、その一部の機能を達成する。
なお、デジタル放送受信装置２００ａ及びＢＤ再生装置２００ｂは、パーソナルコンピュータ２００と同様の構成を有しているので、これらの装置についての説明を省略する。【００５７】  （１）ハードディスク部２０２
ハードディスク部２０２は、図８に示すように、鍵２２２を記憶しており、また暗号化コンテンツ２２１を記憶するための領域を備えている。暗号化コンテンツ２２１と鍵２２２とは、対応している。
暗号化コンテンツ２２１及び鍵２２２は、それぞれ、コンテンツサーバ装置１００のハードディスク部１０２に記憶されている暗号化コンテンツ１２６及び鍵１２３と同じものである。【００５８】  （２）メモリ部２０３
メモリ部２０３は、図８に示すように、コンテンツ受信プログラム２３１、コンテンツ復号プログラム２３２、再生プログラム２３３、復号プログラム２３４及び加算プログラム２３５を記憶している。また、メモリ部２０３は、復号コンテンツ領域２３６を含む。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ２０１により解読され実行される形式である。【００５９】  復号コンテンツ領域２３６には、暗号化コンテンツが復号されて生成された復号コンテンツが一時的に書き込まれる。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。【００６０】  （ａ）コンテンツ受信プログラム２３１
コンテンツ受信プログラム２３１は、図９に示すように、命令コード群Ｓ２０１、Ｓ２０２、Ｓ２０３及びＳ２０４を含んで構成されており、これらの命令コード群は、コンテンツ受信プログラム２３１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。【００６１】  命令コード群Ｓ２０１は、パーソナルコンピュータ２００の利用者からコンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群Ｓ２０２は、指定を受け付けた前記コンテンツを識別するコンテンツ識別子を取得し、取得したコンテンツ識別子を、通信ユニット２０６及びインターネット２０を介して、配信サーバ装置３００ａへ送信することを示す複数の命令コードを含んでいる。【００６２】  命令コード群Ｓ２０３は、配信サーバ装置３００ａから、インターネット２０及び通信ユニット２０６を介して、暗号化コンテンツを受信することを示す複数の命令コードを含んでいる。ここで、受信する前記暗号化コンテンツは、前記コンテンツ識別子により識別されるものである。
命令コード群Ｓ２０４は、受信した暗号化コンテンツをハードディスク部２０２へ、暗号化コンテンツ２２１として書き込むことを示す複数の命令コードを含んでいる。【００６３】  （ｂ）コンテンツ復号プログラム２３２
コンテンツ復号プログラム２３２は、図１０に示すように、命令コード群Ｓ２１１、Ｓ２１２、Ｓ２１３、Ｓ２１４、Ｓ２１５、Ｓ２１６、Ｓ２１７及びＳ２１８を含んで構成されており、これらの命令コード群は、コンテンツ復号プログラム２３２内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。【００６４】  命令コード群Ｓ２１１は、パーソナルコンピュータ２００の利用者から、ハードディスク部２０２に記憶されているいずれかの暗号化コンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１２は、メモリ部２０３に記憶されている再生プログラム２３３を呼び出すことを示す複数の命令コードを含んでいる。命令コード群Ｓ２１２が実行されることにより、その結果、コンテンツ復号プログラム２３２と再生プログラム２３３とが並行して実行される。【００６５】  命令コード群Ｓ２１３は、指定を受け付けた暗号化コンテンツ内におけるデータの位置をビットにより示す読出しポイントに初期値として値「−６４」を代入し、次に、指定を受け付けた暗号化コンテンツに対応する鍵をハードディスク部２０２から読み出すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１４は、前記読出しポイントに６４ビットを加算し、次に、前記暗号化コンテンツにおいて、加算された読出しポイントにより示される位置から１ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記暗号化コンテンツ内であるならば、当該位置から１ブロック分のデータを読み出し、読出しポイントにより示される位置が前記暗号化コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含んでいる。ここで、１ブロックは、６４ビット長のデータである。【００６６】  命令コード群Ｓ２１５は、命令コード群Ｓ２１４から終了コードが出力された場合には、コンテンツ復号プログラム２３２による処理を終了し、終了コードが出力されていない場合には、次の命令コード群Ｓ２１６に制御を移すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１６は、読み出された前記鍵及び読み出された前記１ブロックを伴って、復号プログラム２３４を呼び出すことを示す複数の命令コードを含んでいる。【００６７】  命令コード群Ｓ２１７は、復号プログラム２３４により生成された１個の復号ブロックを、メモリ部２０３の復号コンテンツ領域２３６へ書き込むことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１８は、次に制御を命令コード群Ｓ２１４へ移すことを示す命令コードを含んでいる。【００６８】  （ｃ）再生プログラム２３３
再生プログラム２３３は、図１０に示すように、命令コード群Ｓ２１８、Ｓ２１９及びＳ２２０を含んで構成されており、これらの命令コード群は、再生プログラム２３３は内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。【００６９】  命令コード群Ｓ２１８は、メモリ部２０３が有する復号コンテンツ領域２３６から１個以上の復号ブロックを読み出すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１９は、読み出した前記復号ブロックから映像データ及び音データを生成し、生成した映像データ及び音データを映像信号及び音信号に変換して、表示制御部２０５を介して、モニタ２０８へ出力することを示す複数の命令コードを含んでいる。【００７０】  命令コード群Ｓ２２０は、次に制御を命令コード群Ｓ２１８へ移すことを示す命令コードを含んでいる。
（ｄ）復号プログラム２３４
復号プログラム２３４は、図１１に示すように、復号制御モジュール２４１、拡張鍵生成モジュール２４２、加算モジュール２４３、ローテーションモジュールＡ２４４、ローテーションモジュールＢ２４５、ローテーションモジュールＣ２４６及びローテーションモジュールＤ２４７から構成されている。【００７１】  各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ２０１により解読され実行される形式である。
拡張鍵生成モジュール２４２、ローテーションモジュールＡ２４４、ローテーションモジュールＢ２４５、ローテーションモジュールＣ２４６及びローテーションモジュールＤ２４７は、それぞれ、図５に示す拡張鍵生成モジュール１４２、ローテーションモジュールＡ１４３、ローテーションモジュールＢ１４４、ローテーションモジュールＣ１４５及びローテーションモジュールＤ１４６と同じであるので、説明を省略する。【００７２】  （復号制御モジュール２４１）
復号制御モジュール２４１は、図１２及び図１３に示すように、命令コード群Ｓ２２１〜命令コード群Ｓ２４０を含んで構成されており、これらの命令コード群は、復号制御モジュール２４１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含む。【００７３】  命令コード群Ｓ２２１は、復号制御モジュール２４１の呼出し元のプログラムから、１ブロックの暗号文Ｍ及び鍵Ｋを受け取ることを示す複数の命令コードを含む。ここで、１ブロックは、６４ビット長のデータである。
命令コード群Ｓ２２２は、受け取った鍵Ｋを伴って、拡張鍵生成モジュール２４２を呼び出すことを示す複数の命令コードを含む。命令コード群Ｓ２２２が実行されると、その結果、８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８が生成される。【００７４】  命令コード群Ｓ２２３は、データＭ１を定義する命令コード及びデータＭ２を定義する命令コードを含む。データＭ１は、受け取った暗号文Ｍの最上位の３２ビットのデータであり、データＭ２は、受け取った暗号文Ｍの最下位の３２ビットのデータである。
命令コード群Ｓ２２４は、データＭ１とデータＭ２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１に格納することを示す複数の命令コードを含む。【００７５】  ＴＭＰ１＝Ｍ１  ＸＯＲ  Ｍ２
命令コード群Ｓ２２５は、変数ＴＭＰ１と拡張鍵Ｋ１とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ２に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ２＝ＴＭＰ１  ＋  Ｋ１が算出される。【００７６】  命令コード群Ｓ２２６は、変数ＴＭＰ２を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ３に格納することを示す複数の命令コードを含む。
ＴＭＰ３＝Ｒｏｔ２（ＴＭＰ２）＋ＴＭＰ２＋１
命令コード群Ｓ２２７は、変数ＴＭＰ３を伴って、ローテーションモジュールＢ２４５を呼び出し、その演算結果を変数ＴＭＰ４に格納することを示す複数の命令コードを含む。【００７７】  ＴＭＰ４＝Ｒｏｔ４（ＴＭＰ３）  ＸＯＲ  ＴＭＰ３
命令コード群Ｓ２２８は、変数ＴＭＰ４とデータＭ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ５に格納することを示す複数の命令コードを含む。
ＴＭＰ５＝ＴＭＰ４  ＸＯＲ  Ｍ１
命令コード群Ｓ２２９は、変数ＴＭＰ５と拡張鍵Ｋ２とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ６に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ６＝ＴＭＰ５  ＋  Ｋ２が算出される。【００７８】  命令コード群Ｓ２３０は、変数ＴＭＰ６を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ７に格納することを示す複数の命令コードを含む。
ＴＭＰ７＝Ｒｏｔ２（ＴＭＰ６）＋ＴＭＰ６＋１
命令コード群Ｓ２３１は、変数ＴＭＰ７を伴って、ローテーションモジュールＣ２４６を呼び出し、その演算結果を変数ＴＭＰ８に格納することを示す複数の命令コードを含む。【００７９】  ＴＭＰ８＝Ｒｏｔ８（ＴＭＰ７）ＸＯＲ  ＴＭＰ７
命令コード群Ｓ２３２は、変数ＴＭＰ８と拡張鍵Ｋ３とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ９に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ９＝ＴＭＰ８  ＋  Ｋ３が算出される。【００８０】  命令コード群Ｓ２３３は、変数ＴＭＰ９を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ１０に格納することを示す複数の命令コードを含む。
ＴＭＰ１０＝Ｒｏｔ２（ＴＭＰ９）＋ＴＭＰ９＋１
命令コード群Ｓ２３４は、変数ＴＭＰ７及び変数ＴＭＰ１０を伴って、ローテーションモジュールＤ２４７を呼び出し、その演算結果を変数ＴＭＰ１１に格納することを示す複数の命令コードを含む。【００８１】  ＴＭＰ１１＝Ｒｏｔ１６（ＴＭＰ１０）＋（ＴＭＰ１０  ＡＮＤ  ＴＭＰ７）
命令コード群Ｓ２３５は、変数ＴＭＰ１１と変数ＴＭＰ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１２に格納することを示す複数の命令コードを含む。
ＴＭＰ１２＝ＴＭＰ１１  ＸＯＲ  ＴＭＰ１
命令コード群Ｓ２３６は、変数ＴＭＰ１２と拡張鍵Ｋ４とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ１３に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ１３＝ＴＭＰ１２  ＋  Ｋ４が算出される。【００８２】  命令コード群Ｓ２３７は、変数ＴＭＰ１３を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ１４に格納することを示す複数の命令コードを含む。
ＴＭＰ１４＝Ｒｏｔ２（ＴＭＰ１３）＋ＴＭＰ１３＋１
命令コード群Ｓ２３８は、変数ＴＭＰ１４と変数ＴＭＰ４とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１５に格納することを示す複数の命令コードを含む。【００８３】  ＴＭＰ１５＝ＴＭＰ１４  ＸＯＲ  ＴＭＰ４
命令コード群Ｓ２３９は、変数ＴＭＰ１５と変数ＴＭＰ１２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１６に格納することを示す複数の命令コードを含む。
ＴＭＰ１６＝ＴＭＰ１５  ＸＯＲ  ＴＭＰ１２
命令コード群Ｓ２４０は、変数ＴＭＰ１５を最上位３２ビット、変数ＴＭＰ１６を最下位３２ビットとする６４ビットの整数を復号文Ｃとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。【００８４】  （加算モジュール２４３）
加算モジュール２４３は、入力データａ、ｂに対し、データａ＋ｂを演算し、データａ＋ｂを出力するコンピュータプログラムであり、図１４に示すように、変換部２５１、主要演算部２５２及び逆変換部２５３から構成されており、変換部２５１は、パラメタ格納部２６１及びべき乗演算部２６２を含み、主要演算部２５２は、パラメタ格納部２６３及び乗算部２６４を含み、逆変換部２５３は、パラメタ格納部２６５、離散対数計算部２６６及びＣＲＴ（Ｃｈｉｎｅｓｅ  Ｒｅｍａｉｎｄｅｒ  Ｔｈｅｏｒｅｍ）部２６７を含む。【００８５】  （ｉ）各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール２４３で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
ｐｉ（ｉ＝１，２，…，ｋ）を、それぞれ異なる素数とする。例えば、ｐｉ
（ｉ＝１，２，…，ｋ）は、ｐ１＝３、ｐ２＝５、ｐ３＝７、ｐ４＝１３、・・・などのように、それぞれ小さい素数である。また、例えば、ｋ＝１７である。また、それらの積ｐ１×ｐ２×…×ｐｋをｎとする。ここで、×は乗算を示す。ｎは、例えば、６４ビット程度で表現できる数である。例えば、ｋ＝１７のとき、ｎ＝ｐ１×ｐ２×…×ｐｋ＞２６４となる。【００８６】  ｐｉ（ｉ＝１，２，…，ｋ）は、逆変換部２５３により保持され、ｎは、変換部２５１及び主要演算部２５２により保持されている。
加算モジュール２４３では、ｍｏｄ  ｎの整数から構成される剰余整数環Ｚ／ｎＺの乗法群の演算を用いる。ｇは、その乗法群に属する予め与えられた数であり、ｐｉ（ｉ＝１，２，…，ｋ）に対して原始元とする。【００８７】  原始元とは、ｍを１，２，…と動かしたとき、初めてｇｍ＝１  ｍｏｄ  ｐｉとなるｍの値が、ｐｉ−１であるようなｇである。
Ｌ＝ＬＣＭ（ｐ１−１，ｐ２−１，…，ｐｋ−１）とする。ここで、ＬＣＭ（ｐ１−１，ｐ２−１，…，ｐｋ−１）は、ｐ１−１，ｐ２−１，…，ｐｋ−１の最小公倍数（Ｌｅａｓｔ  Ｃｏｍｍｏｎ  Ｍｕｌｔｉｐｌｅ）を示す。【００８８】  入力データａ、ｂは、それぞれ、Ｌ／２より小さい非負整数とする。
（ｉｉ）変換部２５１の構成
変換部２５１は、パラメタ格納部２６１及びべき乗演算部２６２を含む。
パラメタ格納部２６１は、ｎとｇとを格納している。
べき乗演算部２６２は、入力データａ、ｂを受け取り、受け取った入力データａ、ｂに対し、
ｇａ＝ｇａｍｏｄ  ｎ，及び
ｇｂ＝ｇｂｍｏｄ  ｎを計算し、得られたｇａ及びｇｂを主要演算部２５２へ出力する。【００８９】  （ｉｉｉ）主要演算部２５２の構成
主要演算部２５２は、パラメタ格納部２６３及び乗算部２６４を含む。
パラメタ格納部２６３は、ｎを格納している。
乗算部２６４は、べき乗演算部２６２からｇａ及びｇｂを受け取り、受け取ったｇａ及びｇｂに対し、
ｇａｂ＝ｇａ×ｇｂｍｏｄ  ｎを計算し、得られたｇａｂを逆変換部２５３へ出力する。【００９０】  （ｉｖ）逆変換部２５３の構成
逆変換部２５３は、パラメタ格納部２６５、離散対数計算部２６６及びＣＲＴ部２６７を含む。
パラメタ格納部２６５は、ｐ１、ｐ２、・・・、ｐｋを格納している。
離散対数計算部２６６は、乗算部２６４からｇａｂを受け取り、
受け取ったｇａｂについて、ｇ  ｍｏｄ  ｐｉに対するｇａｂｍｏｄ  ｐｉ（ｉ＝１，２，…，ｋ）の離散対数ｃｉｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）を計算する。【００９１】  つまり、ｇａｂ＝ｇｃｉｍｏｄ  ｐｉ（ｉ＝１，２，…，ｋ）となるｃｉｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）を求める。次に、得られたｃｉｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）をＣＲＴ部２６７へ出力する。
離散対数計算部２６６によるｃｉ  ｍｏｄ  ｐｉ−１の計算方法については、様々なものがあるが、以下にその一例を示す。【００９２】  ｗを１，２，３，…と順番に動かして、ｇｗ＝ｇａｂｍｏｄ  ｐｉとなるｗを求める。そのｗをｃｉとする。なお、各ｐｉに関し、ｇ１，ｇ２，…，
ｇ（ｐｉ−２）ｍｏｄ  ｐｉを計算した結果をテーブルとして保持し、そのテーブルの値から、ｇａｂｍｏｄ  ｐｉと一致するｇｗを探す、としてもよい。
ＣＲＴ部２６７は、離散対数計算部２６６からｃｉｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）を受け取り、中国人剰余定理（ＣＲＴ）により、受け取ったｃｉｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）から、ｇａｂｍｏｄ  ｎのｇ  ｍｏｄ  ｎに対する離散対数ｃ  ｍｏｄ  Ｌを求める。つまり、中国人剰余定理により、ｃｉ＝ｃ  ｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）となるｃを求める。【００９３】  離散対数ｃｉｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）から、中国人剰余定理を用いて、ｃ  ｍｏｄＬ（ここで、Ｌ＝ＬＣＭ（ｐ１−１，ｐ２−１，…，ｐｋ−１））を求めるには、次に示すようにする。
ここで、式が複雑になるのを避けるために、ｍｉ＝ｐｉ−１とおく。
ｕ２＝ｍ１×（ｍ１−１ｍｏｄ（ｍ２／ＧＣＤ（ｍ１，ｍ２）））×（ｃ２−ｃ１）＋ｃ１を計算する。【００９４】  ここで、ＧＣＤ（ａ，ｂ，ｃ，・・・）は、ａ，ｂ，ｃ，・・・の最大公約数（Ｇｒｅａｔｅｓｔ  Ｃｏｍｍｏｎ  Ｄｉｖｉｓｏｒ）を示す。
次に、
ｕ３＝（ｍ１×ｍ２）×（（ｍ１×ｍ２）−１ｍｏｄ（ｍ３／ＧＣＤ（ｍ１，ｍ２，ｍ３）））×（ｃ３−ｕ２）＋ｕ２
を計算し、
ｕ４＝（ｍ１×ｍ２×ｍ３）×（（ｍ１×ｍ２×ｍ３）−１ｍｏｄ（ｍ４／ＧＣＤ（ｍ１，ｍ２，ｍ３，ｍ４）））
×（ｃ４−ｕ３）＋ｕ３を計算し、
以下順に、同様に、ｕ５，ｕ６，・・・，ｕｋ−１を計算し、
ｕｋ＝（ｍ１×ｍ２×ｍ３×・・・×ｍｋ−１）×（（ｍ１×ｍ２×ｍ３・・・×ｍｋ−１）−１
ｍｏｄ（ｍｋ／ＧＣＤ（ｍ１，ｍ２，ｍ３，ｍ４・・・，ｍｋ−１）））×（ｃｋ−ｕｋ−１）＋ｕｋ−１を計算する。【００９５】  次に、ｃ＝ｕｋとする。こうして、ｃが得られる。
なお、ＣＲＴ部２６７よるｃｉ（ｉ＝１，２，．．．，ｋ）から，
ｃ  ｍｏｄ  ｐｉ−１＝ｃｉを満たすｃ  ｍｏｄ  Ｌを計算する方法については、非特許文献２に詳しく述べられている。
次に、ＣＲＴ部２６７は、得られたｃを加算モジュール２４３の呼び出し元のプログラムへ出力する。【００９６】  （ｖ）の加算モジュール２４３による加算の動作
加算モジュール２４３による加算の動作について、図１５に示すフローチャートを用いて説明する。
べき乗演算部２６２は、加算モジュール２４３の呼び出し元のプログラムから入力データａ、ｂを受け取り（ステップＳ３０１）、受け取った入力データａ、ｂに対し、ｇａ＝ｇａｍｏｄ  ｎ，ｇｂ＝ｇｂｍｏｄ  ｎを計算する（ステップＳ３０２〜Ｓ３０３）。【００９７】  次に、乗算部２６４は、ｇａ及びｇｂに対し、ｇａｂ＝ｇａ×ｇｂｍｏｄ  ｎを計算する（ステップＳ３０４）。
次に、離散対数計算部２６６は、ｇａｂ＝ｇｃｉｍｏｄ  ｐｉ（ｉ＝１，２，…，ｋ）となるｃｉｍｏｄ  ｐｉ−１を求め（ステップＳ３０５）、ＣＲＴ部２６７は、中国人剰余定理（ＣＲＴ）により、ｃｉ＝ｃ  ｍｏｄ  ｐｉ−１（ｉ＝１，２，…，ｋ）となるｃを求め（ステップＳ３０６）、次に、得られたｃを加算モジュール２４３の呼び出し元のプログラムへ出力する（ステップＳ３０７）。【００９８】  （ｖｉ）加算モジュール２４３による加算の動作の検証
以下で、加算モジュール２４３が、入力データａ、ｂに対し、データａ＋ｂを出力していることを検証する。
変換部２５１において、入力データａ、ｂに対し、ｇａ＝ｇａｍｏｄ  ｎ，
ｇｂ＝ｇｂｍｏｄ  ｎを計算し、主要演算部２５２において、
ｇａｂ＝ｇａ×ｇｂｍｏｄ  ｎを計算する。このとき、ｇａｂ＝ｇ（ａ＋ｂ）ｍｏｄ  ｎを満たすことは明らかである。
逆変換部２５３では、ｇとｇａｂからｇａｂ＝ｇｃｉｍｏｄ  ｐｉ（ｉ＝１，２，…，ｋ）を満たすｃｉを計算し、その結果を用いて、ｃ＝ｃｉｍｏｄ  ｐｉ−１を満たすｃ  ｍｏｄ  Ｌを計算する。このとき、ｃはｇａｂ＝ｇｃ
ｍｏｄ  ｎを満たす。なぜなら、ａ＋ｂ＝ｃ  ｍｏｄ  Ｌより、ｇ（ａ＋ｂ＋ｃ）＝１  ｍｏｄ  ｎとなるためである。したがって、ｇ（ａ＋ｂ）ｍｏｄ  ｎ＝ｇｃｍｏｄ  ｎを満たすため、ａ＋ｂ＝ｃ  ｍｏｄ（（ｐ１−１）×（ｐ２−１）×…×（ｐｋ−１））を満たす。ａ＜Ｌ／２，ｂ＜Ｌ／２よりａ＋ｂ＜Ｌであるので、加算モジュール２４３は、入力データａと入力データｂとの加算結果であるデータａ＋ｂを出力していることになる。【００９９】  １．４  第１の実施の形態の効果
加算モジュール２４３は、加算を行う値を変換している。変換部２５１及び逆変換部２５３が解析困難な場合であっても、解析者はｇａ，ｇｂ，ｇａｂの値を知り、ｇａ，ｇｂからｇａｂを計算する処理を知る可能性がある。このような場合であっても、変換後の値ｇａ，ｇｂから変換前の値ａ，ｂを推測することは困難である。さらに、加算モジュール２４３は、主要演算部２５２において、乗算を行っており、この乗算という演算から加算モジュール２４３が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、第１の実施の形態は有効である。【０１００】  復号制御モジュール２４１は、鍵と他のデータとの加算において、加算モジュール２４３を利用している。そのため、加算の対象となる値、すわなち、鍵の値を推測することが困難になる。また、解析者が暗号アルゴリズムを知っている場合においても、鍵加算部分が、鍵との「加算」を行っていると推測しにくい。そのため、解析者が、暗号アルゴリズムの特徴である鍵加算部分をプログラム内から探し出す攻撃をした場合でも、鍵加算部分を探し出すことが困難なため、攻撃も困難となる。このように、解析者の攻撃が困難になり、本実施の形態は有効である。【０１０１】  ２．変形例（１）
第１の実施の形態における加算モジュール２４３の代わりに、加算モジュール５０１を採用するとしてもよい。ここでは、加算モジュール５０１について説明する。
２．１  加算モジュール５０１の構成
加算モジュール５０１は、加算モジュール２４３と同様に、入力データａ、ｂに対し、データａ＋ｂを演算し、データａ＋ｂを出力するコンピュータプログラムであり、図１６に示すように、変換部５１１、主要演算部５１２及び逆変換部５１３から構成されており、変換部５１１は、パラメタ格納部５２１、乱数発生部５２２及びべき乗演算部５２３を含み、主要演算部５１２は、パラメタ格納部５２４及び乗算部５２５を含み、逆変換部５１３は、パラメタ格納部５２６、離散対数計算部５２７及び還元部５２８を含む。【０１０２】  ２．２  各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール５０１で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
ｐ，ｑを素数とし、ｎ＝ｐ２×ｑとする。ｐ，ｑは、逆変換部５１３により保持され、ｎは、それぞれ、変換部５１１及び主要演算部５１２により保持される。【０１０３】  加算モジュール５０１では、ｍｏｄ  ｎの整数から構成される剰余整数環Ｚ／ｎＺの乗法群の演算を用いる。ｇは、その乗法群に属する予め与えられた数でありｇ（ｐ−１）ｍｏｄ  ｐ２の位数がｐである数とする。また、
ｇｐ＝ｇ（ｐ−１）ｍｏｄ  ｐ２と定義する。
入力データａ、ｂは、ｐ／２より小さい非負整数とする。【０１０４】  ２．３  変換部５１１の構成
変換部５１１は、パラメタ格納部５２１、乱数発生部５２２及びべき乗演算部５２３から構成されている。
パラメタ格納部５２１は、ｎとｇとを記憶している。
乱数発生部５２２は、ｎ以下の乱数Ｒ１，Ｒ２を生成する。【０１０５】  べき乗演算部５２３は、入力データａ、ｂに対し、乱数発生部５２２により生成された乱数Ｒ１，Ｒ２を用いて、
ｇａ＝ｇ＾（ａ＋ｎ×Ｒ１）ｍｏｄ  ｎ、
ｇｂ＝ｇ＾（ｂ＋ｎ×Ｒ２）ｍｏｄ  ｎを計算する。
なお、本明細書において、記号「＾」は、べき乗を示す演算子である。例えば、ａ＾ｂ＝ａｂである。本明細書において、表現上の都合により、ａ＾ｂ及び
ａｂの両方の表記を使い分けている。【０１０６】  次に、べき乗演算部５２３は、計算結果ｇａ，ｇｂを主要演算部５１２へ出力する。
２．４  主要演算部５１２の構成
主要演算部５１２は、パラメタ格納部５２４及び乗算部５２５から構成されている。
パラメタ格納部５２４は、ｎを記憶している。
乗算部５２５は、べき乗演算部５２３から計算結果ｇａ，ｇｂを受け取り、受け取ったｇａ，ｇｂに対し、
ｇａｂ＝ｇａ×ｇｂｍｏｄ  ｎを計算し、計算結果ｇａｂを逆変換部５１３へ出力する。【０１０７】  ２．５  逆変換部５１３の構成
逆変換部５１３は、パラメタ格納部５２６、離散対数計算部５２７及び還元部５２８から構成されている。
パラメタ格納部５２６は、ｐを格納している。
離散対数計算部５２７は、乗算部５２５から計算結果ｇａｂを受け取り、受け取ったｇａｂに対し、パラメタ格納部５２６に格納されているｐを用いて、
ｃｐ＝ｇａｂ（ｐ−１）ｍｏｄ  ｐ２を計算し、次に、ｃｐを還元部５２８へ出力する。【０１０８】  還元部５２８は、離散対数計算部５２７からｃｐを受け取り、
受け取ったｃｐを用いて、ｍｏｄ  ｐ２におけるｇｐに対するｃｐの離散対数ｃを計算し、計算して得られたｃを、呼び出し元のプログラムへ出力する。
還元部５２８におけるｃの計算方法については、特許文献２に詳しく述べられている。具体的には、以下のように行う。【０１０９】  ｃｐに対し、ｃ＝（ｃｐ−１）／（ｇｐ−１）ｍｏｄ  ｐとしてｃを求める。
２．６  加算モジュール５０１による加算の動作
加算モジュール５０１による加算の動作について、図１７に示すフローチャートを用いて説明する。
べき乗演算部５２３は、呼び出し元のプログラムから入力データａ、ｂを受け取り（ステップＳ３１１）、乱数発生部５２２は、ｎ以下の乱数Ｒ１，Ｒ２を生成し（ステップＳ３１２）、べき乗演算部５２３は、
ｇａ＝ｇ＾（ａ＋ｎ×Ｒ１）ｍｏｄ  ｎ、
ｇｂ＝ｇ＾（ｂ＋ｎ×Ｒ２）ｍｏｄ  ｎを計算する（ステップＳ３１３〜Ｓ３１４）。【０１１０】  なお、本明細書において、記号「＾」は、べき乗を示す演算子であり、例えば、ａ＾ｂ＝ａｂである。本明細書では、場合によって、「ａ＾ｂ」及び「ａｂ」の両方の表記を使い分けている。
次に、乗算部５２５は、ｇａｂ＝ｇａ×ｇｂｍｏｄ  ｎを計算する（ステップＳ３１５）。【０１１１】  次に、離散対数計算部５２７は、ｃｐ＝ｇａｂ（ｐ−１）ｍｏｄ  ｐ２を計算し（ステップＳ３１６）、還元部５２８は、ｃ＝（ｃｐ−１）／（ｇｐ−１）ｍｏｄ  ｐとしてｃを求め（ステップＳ３１７）、次に、ｃ（＝ａ＋ｂ）を呼び出し元のプログラムへ出力する（ステップＳ３１８）。【０１１２】  ２．７  加算モジュール５０１による加算の動作の検証
以下において、加算モジュール５０１が、入力データａ、ｂに対し、ａ＋ｂを出力していることを検証する。
変換部５１１において、ａ，ｂに対し、
ｇａ＝ｇ＾（ａ＋ｎ×Ｒ１）ｍｏｄ  ｎ、
ｇｂ＝ｇ＾（ｂ＋ｎ×Ｒ２）ｍｏｄ  ｎを計算し、
主要演算部５１２において、ｇａｂ＝ｇａ×ｇｂ  ｍｏｄ  ｎを計算する。このとき、ｇａｂ＝ｇ＾（ａ＋ｂ＋ｎ×（Ｒ１＋Ｒ２））ｍｏｄ  ｎを満たすことは明らかである。逆変換部５１３では、まず、
ｃｐ＝ｇａｂ（ｐ−１）−ｇｐ＾（ａ＋ｂ＋ｎ×（Ｒ１＋Ｒ２））ｍｏｄ  ｐ２となり、
ｇｐｐ＝１  ｍｏｄ  ｐ２より、
ｇｐｎ＝１  ｍｏｄ  ｐ２であるため、
ｃｐ＝ｇｐ（ａ＋ｂ）ｍｏｄ  ｐ２となる。【０１１３】  逆変換部５１３では、さらに、ｍｏｄ  ｐ２におけるｇｐに対するｃｐの離散対数ｃを求める。すなわち、
ｃｐ＝ｇｐｃｍｏｄ  ｐ２が成り立つ。したがって、
ｃ＝ａ＋ｂ  ｍｏｄ  ｐであり、ａ＜ｐ／２，ｂ＜ｐ／２より、ａ＋ｂ＜ｐであるため、加算モジュール５０１は、入力データａとｂの加算結果ａ＋ｂを出力していることになる。【０１１４】  ２．８  加算モジュール５０１による効果
加算モジュール５０１は、第１の実施の形態１の加算モジュール２４３と同様に、加算を行う値を変換しており、変換部５１１及び逆変換部５１３が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。さらに、加算モジュール５０１は、主要演算部５１２において、乗算を行っており、この乗算という演算から加算モジュール５０１が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、この発明は有効である。【０１１５】  ２．９  その他（１）
加算モジュール５０１では、剰余整数環Ｚ／ｎＺの乗法群における冪乗演算を変換部５１１で行い、その乗法群の部分群である剰余整数環Ｚ／ｐ２Ｚの乗法群における離散対数問題を逆変換部５１３で解いている。ここで、もし、解析者がｐ，ｑは分からないが、変換部５１１で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部５１３のみが解析者により解析困難である場合である。この場合においても、ｎの大きさが素因数分解が困難なぐらい、例えば、１０２４ビットぐらいであれば、ｎの素因数分解結果であるｐ，ｑを得ることが困難になる。また、ｐ，ｑが得られなければ、剰余整数環Ｚ／ｎＺの乗法群における離散対数問題を解くことが困難になる。一般に乗法群の大きさ（元の数）が１０２４ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール５０１では、ｐが既知の場合は逆変換部５１３における逆変換の方法によって、Ｚ／ｐ２Ｚの乗法群における離散対数問題を容易に解けるようになる。加算モジュール５０１における変換はこのように、ｐが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、加算モジュール２４３１と異なる。【０１１６】  ２．１０  その他（２）
加算モジュール５０１は、次のように構成してもよい。
ｐ，ｑを素数とし、ｎ＝ｐｍ×ｑとする。ｍは、正整数である。また、加算モジュール５０１では、ｍｏｄ  ｎの整数から構成される剰余整数環Ｚ／ｎＺの乗法群の演算を用いる。ｇは、その乗法群に属する予め与えられた数でありｇ（ｐ−１）ｍｏｄ  ｐｍの位数がｐである数とする。また、ｇｐ＝ｇ（ｐ−１）ｍｏｄ  ｐｍと定義する。【０１１７】  離散対数計算部５２７は、乗算部５２５から計算結果ｇａｂを受け取り、受け取ったｇａｂに対し、パラメタ格納部５２６に格納されているｐを用いて、
ｃｐ＝ｇａｂ（ｐ−１）ｍｏｄ  ｐｍを計算し、次に、ｃｐを還元部５２８へ出力する。
還元部５２８は、離散対数計算部５２７からｃｐを受け取り、
受け取ったｃｐを用いて、ｍｏｄ  ｐｍにおけるｇｐに対するｃｐの離散対数ｃを計算し、計算して得られたｃを、呼び出し元のプログラムへ出力する。【０１１８】  ３．変形例（２）
第１の実施の形態における加算モジュール２４３の代わりに、加算モジュール６０１を採用するとしてもよい。ここでは、加算モジュール６０１について説明する。加算モジュール６０１は、楕円曲線上のスカラ倍演算を利用している。楕円曲線については、非特許文献３に詳しく説明されている。【０１１９】  ３．１  加算モジュール６０１の構成
加算モジュール６０１は、加算モジュール２４３と同様に、入力データａ、ｂに対し、データａ＋ｂを演算し、データａ＋ｂを出力するコンピュータプログラムであり、図１８に示すように、変換部６１１、主要演算部６１２及び逆変換部６１３から構成されており、変換部６１１は、パラメタ格納部６２１及びスカラ倍演算部６２２を含み、主要演算部６１２は、パラメタ格納部６２３及び楕円曲線加算部６２４を含み、逆変換部６１３は、パラメタ格納部６２５、還元部６２６及び離散対数計算部６２７を含む。【０１２０】  ３．２  各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール６０１で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
ｐ、ｑを素数とし、ｎ＝ｐ×ｑとする。ｐ、ｑは、逆変換部６１３により保持され、ｎは、それぞれ、変換部６１１及び主要演算部６１２により保持されている。【０１２１】  楕円曲線Ｅの方程式を
ｙ２＝ｘ３＋Ａ×ｘ＋Ｂとする。ここで、Ａ、Ｂは、楕円曲線Ｅのパラメータである。
Ｇ＝（ｘｇ，ｙｇ）ｍｏｄ  ｎを楕円曲線Ｅ上の点とする。すなわち、
ｙｇ２＝ｘｇ３＋Ａ×ｘｇ＋Ｂ  ｍｏｄ  ｎを満たす。
Ａ、Ｂ、Ｇは、変換部６１１、主要演算部６１２、逆変換部６１３により保持される。【０１２２】  楕円曲線Ｅの方程式をもつ体ＧＦ（ｐ）上の楕円曲線の点から構成される群をＥ（ＧＦ（ｐ））と表現する。同様に、楕円曲線Ｅの方程式をもつ体ＧＦ（ｑ）上の楕円曲線の点から構成される群をＥ（ＧＦ（ｑ））と表現する。
Ｚ／ｎＺ上の楕円曲線の群を
Ｅ（ＧＦ（ｐ））とＥ（ＧＦ（ｑ））との
直積Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））で表す。なお、Ｚ／ｎＺは体ではなく、環であるため、数学的には楕円曲線とは呼べないが、ここでは便宜上、その直積Ｚ／ｎＺ上の楕円曲線の群とよぶ。【０１２３】  Ｅ（ＧＦ（ｐ））上の点Ｇｐ＝（ｘｇｐ，ｙｇｐ）ｍｏｄ  ｐと、
Ｅ（ＧＦ（ｑ））上の点Ｇｑ＝（ｘｇｑ，ｙｇｑ）ｍｏｄ  ｑとに対応するＺ／ｎＺ上の楕円曲線Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））の
点Ｇ＝（ｘｇ，ｙｇ）ｍｏｄ  ｎについて、
ｘｇを
ｘｇｍｏｄ  ｐ＝ｘｇｐ及び
ｘｇｍｏｄ  ｑ＝ｘｇｑを満たす数と定義し、
ｙｇを
ｙｇｍｏｄ  ｐ＝ｙｇｐ及び
ｘｇｍｏｄ  ｑ＝ｘｇｑを満たす数と定義する。【０１２４】  この定義より、
Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））上の点Ｇ＝（ｘｇ，ｙｇ）ｍｏｄ  ｎに対応するＥ（ＧＦ（ｐ））上の点Ｇｐを
Ｇｐ＝（ｘｇｐ，ｙｇｐ）ｍｏｄ  ｐとし、
Ｅ（ＧＦ（ｑ））上の点ＧｑをＧｑ＝（ｘｇｑ，ｙｇｑ）とすることで、
Ｅ（ＧＦ（ｐ）），Ｅ（ＧＦ（ｑ））をＥ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））の部分群とみなす。【０１２５】  加算部６０１においては、上記楕円曲線Ｅは、ｍｏｄ  ｐでの楕円曲線の位数、すなわち、点の個数が、ｐであるとする。このような体ＧＦ（ｐ）上の楕円曲線をアノマラス（Ａｎｏｍａｌｏｕｓ）楕円曲線とよぶ。
さらに、ｍｏｄ  ｑでの楕円曲線の位数がｑである、すなわち、ＧＦ（ｑ）上でもアノマラス楕円曲線であるとする。【０１２６】  このとき、Ｚ／ｎＺ上の楕円曲線を、スーパーアノマラス（Ｓｕｐｅｒ−Ａｎｏｍａｌｏｕｓ）楕円曲線とよぶ。スーパーアノマラス楕円曲線については非特許文献４に詳しく説明されている。
このとき、Ｚ／ｎＺ上の楕円曲線の群はＥ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））であるので、楕円曲線の位数は、
ｎ（＝ｐ×ｑ）となる。【０１２７】  入力データａ、ｂは、ｐ／２より小さい非負整数とする。
３．３  変換部６１１の構成
変換部６１１は、パラメタ格納部６２１及びスカラ倍演算部６２２から構成されている。
パラメタ格納部６２１は、ｎ、Ａ、Ｂ、Ｇを記憶している。【０１２８】  スカラ倍演算部６２２は、呼び出し元のプログラムから、入力データａ、ｂを受け取り、受け取った入力データａ、ｂに対し、パラメータ格納部６２１に格納されているｎ、Ａ、Ｂ、Ｇを用いて、
Ｇａ＝ａ＊Ｇ  ｍｏｄ  ｎ及び
Ｇｂ＝ｂ＊Ｇ  ｍｏｄ  ｎを計算する。【０１２９】  ここで、ａ＊Ｇは、Ｇをａ回、楕円曲線の加算により足し合わせて得られる点である。また、ａ＊Ｇ  ｍｏｄ  ｎは、ａ＊Ｇの各座標に、ｍｏｄ  ｎを施したものである。
スカラ倍演算部６２２は、計算結果Ｇａ，Ｇｂを主要演算部６１２へ出力する。
３．４  主要演算部６１２の構成
主要演算部６１２は、パラメタ格納部６２３及び楕円曲線加算部６２４から構成されている。【０１３０】  パラメタ格納部６２３は、ｎ、Ａ、Ｂを記憶している。
楕円曲線加算部６２４は、スカラ倍演算部６２２から計算結果Ｇａ，Ｇｂを受け取り、パラメタ格納部６２３に記憶されているｎ、Ａ、Ｂを用いて、Ｇａ及びＧｂに対して、楕円曲線加算を実行して、
Ｇａｂ＝Ｇａ＋Ｇｂｍｏｄ  ｎ
を計算し、その計算結果Ｇａｂを逆変換部６１３へ出力する。【０１３１】  ３．５  逆変換部６１３の構成
逆変換部６１３は、パラメタ格納部６２５、還元部６２６及び離散対数計算部６２７から構成されている。
パラメタ格納部６２５は、ｐ，Ａ，Ｂ，Ｇ  ｍｏｄ  ｐを記憶している。
還元部６２６は、楕円曲線加算部６２４から計算結果Ｇａｂを受け取り、受け取ったＧａｂに対し、パラメタ格納部６２５に格納されているｐを用いて、
Ｇａｂｐ＝Ｇａｂｍｏｄ  ｐを計算し、計算結果を離散対数計算部６２７へ出力する。【０１３２】  離散対数計算部６２７は、Ｇ  ｍｏｄ  ｐに対するＧａｂｐの離散対数ｃ  ｍｏｄ  ｐを計算する。つまり、Ｇａｂｐ＝ｃ＊Ｇ  ｍｏｄ  ｐのｃを求める。次に、ｃを呼び出し元のプログラムへ出力する。
ここで、楕円離散対数計算部６２７におけるｃは、アノマラス楕円曲線上の離散対数問題の解である。アノマラス楕円曲線上の離散対数問題を解く方法については、非特許文献３の８８〜９１ページに詳しく説明されている。計算方法はこの文献に記載されているため、ここでは説明を省略する。【０１３３】  ３．６  加算モジュール６０１の動作
加算モジュール６０１の動作について、図１９に示すフローチャートを用いて説明する。
スカラ倍演算部６２２は、呼び出し元のプログラムから、入力データａ、ｂを受け取り（ステップＳ３２１）、受け取った入力データａ、ｂに対し、パラメータ格納部６２１に格納されているｎ、Ａ、Ｂ、Ｇを用いて、
Ｇａ＝ａ＊Ｇ  ｍｏｄ  ｎ及び
Ｇｂ＝ｂ＊Ｇ  ｍｏｄ  ｎを計算する（ステップＳ３２２〜Ｓ３２３）。【０１３４】  次に、楕円曲線加算部６２４は、
Ｇａｂ＝Ｇａ＋Ｇｂｍｏｄ  ｎを計算する（ステップＳ３２４）。
次に、還元部６２６は、
Ｇａｂｐ＝Ｇａｂｍｏｄ  ｐを計算し（ステップＳ３２５）、
離散対数計算部６２７は、Ｇ  ｍｏｄ  ｐに対するＧａｂｐの離散対数ｃを計算し（ステップＳ３２６）、次に、ｃを呼び出し元のプログラムへ出力する（ステップＳ３２７）。【０１３５】  ３．７  加算モジュール６０１の動作検証
以下において、加算モジュール６０１が、入力データａ，ｂに対し、ａ＋ｂを計算して出力していることを検証する。
変換部６１１において、ａ，ｂに対し、
Ｇａ＝ａ＊Ｇ  ｍｏｄ  ｎ，
Ｇｂ＝ｂ＊Ｇ  ｍｏｄ  ｎを計算し、
主要演算部６１２において、
Ｇａｂ＝Ｇａ＋Ｇｂ  ｍｏｄ  ｎを計算する。【０１３６】  このとき、Ｇａｂ＝（ａ＋ｂ）＊Ｇ  ｍｏｄ  ｎを満たすことは明らかである。
逆変換部６１３において、まず、
Ｇａｂｐ＝Ｇａｂ  ｍｏｄ  ｐを計算し、
Ｇ  ｍｏｄ  ｐに対するＧａｂｐの離散対数ｃを求める。
すなわち、Ｇａｂｐ＝ｃ＊Ｇ  ｍｏｄ  ｐが成り立つ。【０１３７】  従って、ｃ＝ａ＋ｂ  ｍｏｄ  ｐであり、ａ＜ｐ／２，ｂ＜ｐ／２より、ａ＋ｂ＜ｐであるため、加算モジュール６０１は、入力データａとｂとの加算結果ａ＋ｂを出力していることになる。
３．８  加算モジュール６０１の効果
加算モジュール６０１は、加算モジュール２４３及び、加算モジュール５０１と同様に、加算を行う値を変換しており、変換部６１１及び逆変換部６１３が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。【０１３８】  さらに、加算モジュール６０１は、主要演算部６１２において、楕円曲線加算を行っており、この楕円曲線加算という演算から加算モジュール６０１が整数の加算を実現していることを推測することは困難である。
従って、整数の加算を行う入力の値の隠蔽だけではなく、整数の加算という演算自体も隠蔽できることになり、加算モジュール６０１は、有効である。【０１３９】  ３．９  その他
加算モジュール６０１では、Ｚ／ｎＺ上の楕円曲線の群Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））のスカラ倍演算を変換部で行い、その部分群であるＥ（ＧＦ（ｐ））における離散対数問題を逆変換部で解いている。
ここで、もし、解析者がｐ，ｑは分からないが、変換部で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部のみが解析者により解析困難である場合である。【０１４０】  この場合においても、ｎの大きさが素因数分解が困難なぐらい、例えば、１０２４ビットぐらいであれば、ｎの素因数分解結果であるｐ，ｑを得ることが困難になる。また、ｐ，ｑが得られなければ、Ｚ／ｎＺ上の楕円曲線の群Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））における離散対数問題を解くことが困難になる。
一般に群の大きさ（元の数）が１０２４ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール６０１では、ｐが既知の場合は逆変換モジュールにおける逆変換の方法によって、楕円曲線の群Ｅ（ＧＦ（ｐ））における離散対数問題を容易に解けるようになる。加算モジュール６０１における変換はこのように、ｐが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、第１の実施の形態と異なる。【０１４１】  ４．その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）加算モジュール２４３、５０１及び６０１において、２個の非負整数ａ及びｂの加算を行うとしているが、各加算モジュールは、３個、又はそれ以上の個数の非負整数の加算を行うとしてもよい。この場合に、各加算モジュールの変換部は、それぞれの非負整数を変換し、加算モジュール２４３及び５０１の主要演算部は、それぞれの変換結果に対して乗算を施し、加算モジュール６０１の主要演算部は、それぞれの変換結果に対して、楕円曲線加算を施す。【０１４２】  （２）復号制御モジュール２４１において、鍵加算部分のみに加算モジュール２４３、５０１又は６０１を使用するとしているが、他の加算部分において、各加算モジュールを使用するとしてもよい。
（３）第１の実施の形態では、各加算モジュールを復号制御モジュール２４１に適用するとしているが、上記の暗号制御モジュール１４１や、他の暗号プログラム、復号プログラム、デジタル署名を生成する署名生成プログラムに適用するとしてもよい。このように、加算による演算が出現する情報処理演算であれば、どのようなものであっても適用することができる。【０１４３】  （４）加算モジュール２４３、５０１及び６０１において、剰余整数環の乗法群、楕円曲線上の群を利用したが、その他の群を利用するとしてもよい。
また、加算モジュール２４３及び５０１においては、冪乗演算を行って、整数を変換し、加算モジュール６０１においては、楕円曲線のスカラ倍演算を行って、整数を変換するとしているが、その他の群の冪演算を行うことにより変換するとしてもよい。【０１４４】  ここで、冪演算とは、群の基本演算、すなわち、剰余整数環では乗算を、また楕円曲線上の群では楕円曲線加算を、整数回行った結果を求める演算である。
したがって、剰余整数環の乗法群の冪演算は冪乗演算、楕円曲線上の群の冪演算は楕円曲線のスカラ倍演算である。
加算モジュール５０１では、剰余整数環Ｚ／ｎＺの乗法群の「部分群」である、剰余整数環Ｚ／ｐ２Ｚの乗法群において離散対数問題を解いている。その他の群を使用する場合は、加算モジュール５０１と同様に逆変換部でその他の群の「部分群」において離散対数問題を解くとしてもよい。【０１４５】  （５）加算モジュール２４３において、ｇは、ｍｏｄ  ｐｉ（ｉ＝１，２，…，ｋ）において原始元としたが、原始元でなくてもよい。
その場合は、ｇｍｉ＝１  ｍｏｄ  ｐｉ（ｍｉ＞０）となるｍｉに対し、
Ｌ＝ｍ１×ｍ２×…×ｍｋとする。
（６）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を１個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。【０１４６】  （７）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。【０１４７】  （８）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。【０１４８】  （９）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。【０１４９】  また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。【０１５０】  また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１０）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
（１１）以上説明したように、本発明によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。したがって、本技術を用いた難読化ソフトウェアをＩＣカード等の機器に組み込むことは有用である。
【産業上の利用可能性】
【０１５１】  本発明を構成する各装置、各方法及び各コンピュータプログラムは、情報を安全かつ確実に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置、各方法及び各コンピュータプログラムは、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
【図１】
2005098795.tif 000002
【図２】
2005098795.tif 000003
【図３】
2005098795.tif 000004
【図４】
2005098795.tif 000005
【図５】
2005098795.tif 000006
【図６】
2005098795.tif 000007
【図７】
2005098795.tif 000008
【図８】
2005098795.tif 000009
【図９】
2005098795.tif 000010
【図１０】
2005098795.tif 000011
【図１１】
2005098795.tif 000012
【図１２】
2005098795.tif 000013
【図１３】
2005098795.tif 000014
【図１４】
2005098795.tif 000015
【図１５】
2005098795.tif 000016
【図１６】
2005098795.tif 000017
【図１７】
2005098795.tif 000018
【図１８】
2005098795.tif 000019
【図１９】
2005098795.tif 000020
【手続補正書】
【提出日】平成18年3月9日(2006.3.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
２個以上の整数を加算するコンピュータシステムであって、
複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、
前記記憶手段に記憶されている前記コンピュータプログラムから１個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、
前記コンピュータプログラムは、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
ことを特徴とするコンピュータシステム。
【請求項２】
前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、
前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、
前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いる
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記群Ｇは、剰余整数環の乗法群であり、
前記変換命令群は、各整数に冪乗を施し、
演算命令群は、前記元に対して、乗算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記群Ｇは、複数個の相異なる素数ｐ1 ，ｐ2 ，…，ｐk （ｋ＞１）の積ｎ＝ｐ1×ｐ2 ×…×ｐk に対し、Ｚ／ｎＺの乗法群であり、
×は、乗算を示す演算子であり、Ｚは、整数環であり、Ｚ／ｎＺは、ｍを法とし整数と合同である値から構成される剰余整数環である
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記逆変換命令群は、前記素数ｐ1 ，ｐ2 ，…，ｐk を用いたＺ／ｐ1 Ｚ、Ｚ／ｐ2Ｚ、…、Ｚ／ｐk Ｚの乗法群における離散対数問題を解く命令を含む
ことを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
前記逆変換命令群は、前記素数ｐ1 ，ｐ2 ，…，ｐk を用いたＺ／ｐ1Ｚ，Ｚ／ｐ2 Ｚ，…，Ｚ／ｐk Ｚの乗法群における離散対数問題の解に対し、中国人の剰余定理を用いる命令を含む
ことを特徴とする請求項５に記載のコンピュータシステム。
【請求項７】
前記群Ｇは、２つの素数ｐ，ｑと正整数ｍを用いて表されるｎ＝ｐm ×ｑに対し、Ｚ／ｎＺの乗法群であり、
前記変換命令群は、各整数に冪乗を施し、
演算命令群は、前記元に対して、乗算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項８】
前記部分群Ｓは、Ｚ／ｐm   Ｚの乗法群である
ことを特徴とする請求項７に記載のコンピュータシステム。
【請求項９】
前記正整数ｍは、２である
ことを特徴とする請求項７に記載のコンピュータシステム。
【請求項１０】
前記部分群Ｓは、アノマラス楕円曲線の群であり、
前記変換命令群は、各整数に楕円曲線上の乗算を施し、
演算命令群は、前記元に対して、楕円曲線上の加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１１】
前記群Ｇは、二つのアノマラス楕円曲線の群の直積であり、
前記変換命令群は、各整数に楕円曲線上の乗算を施し、
演算命令群は、前記元に対して、楕円曲線上の加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１２】
さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求める
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１３】
さらに、前記逆変換命令群は、前記群Ｇに属する元を前記部分群Ｓに属する元に還元する還元部を備える
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１４】
前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、
前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、
前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１５】
前記暗号化又は復号は、共通鍵方式の暗号化又は復号アルゴリズムである
ことを特徴とする請求項１４に記載のコンピュータシステム。
【請求項１６】
前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、
前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、
前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施す
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１７】
前記コンピュータシステムは、前記メモリ部と前記プロセッサとが高密度に集積された集積回路を含むＩＣカードである
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項１８】
メモリ部とプロセッサとを備えるコンピュータシステムにおいて用いられ、２個以上の整数を加算する加算方法であって、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換ステップと、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算ステップと、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換ステップとを含む
ことを特徴とする加算方法。
【請求項１９】
２個以上の整数を加算するコンピュータプログラムであって、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
ことを特徴とするコンピュータプログラム。
【請求項２０】
前記コンピュータプログラムは、コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２１】
前記コンピュータプログラムは、搬送波に乗せられて送信される
ことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２２】
２個以上の整数を加算するコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記コンピュータプログラムは、
各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、
生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、
群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
ことを特徴とする記録媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムの解析を困難にする耐タンパーソフト技術に関する。
【背景技術】
【０００２】
従来より、コンピュータプログラムに従って動作するプロセッサを備えるコンピュータシステムにおいて、秘密の通信や相手の認証をする際に、暗号プログラム（暗号ソフトウェア）が用いられる。
このとき、鍵や暗号アルゴリズムなどを含む暗号ソフトウェアをコンピュータシステムにそのまま実装すると、実装された暗号ソフトウェアを解析された場合に、簡単に不正な使用がされてしまう。このような問題点を解決するために、特許文献１は、演算及びデータの領域を変換することにより、元の演算及びデータを推測困難にする技術を開示している。
【０００３】
例えば、入力データａ、ｂに対し、加算を施して、加算結果ａ＋ｂを出力する加算プログラムを想定する。
予め、整数ｋ1 、ｋ2 を保持し、これらを用いて、入力データａ、ｂを、それぞれｔa ＝ｋ1×ａ＋ｋ2 ，ｔb ＝ｋ1 ×ｂ＋ｋ2 に変換する。ここで、「×」は、乗算を示す演算子である。
次にｔa ，ｔb に対して、ｔab＝ｔa ＋ｔbを計算する。
【０００４】
さらに、ｔabに対して、ｃ＝（ｔab−２ｋ2 ）／ｋ1 を計算する。
次に、演算結果ｃを出力する。
上記のように処理すると、
ｔab＝ｔa ＋ｔb 
＝ｋ1 ×ａ＋ｋ2 ＋ｋ1 ×ｂ＋ｋ2 
＝ｋ1 ×（ａ＋ｂ）＋２ｋ2 より、
（ｔab−２ｋ2 ）／ｋ1 ＝ａ＋ｂが成り立つ。
【０００５】
従って、ｃ＝ａ＋ｂとなり、加算プログラムによりａとｂの加算結果が得られる。
【特許文献１】米国特許第６５９４７６１号公報
【特許文献２】日本国特許第３４０２４４１号特許公報
【特許文献３】日本国特許第２７６０７９９号特許公報
【非特許文献１】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献２】Henri Cohen, “A Course in Computational Algebraic NumberTheory", GTM 138, Springer-Verlag, 1993, pp.19-20
【非特許文献３】I. Blake, G. Seroussi and N. Smart, “Elliptic Curves inCryptography",  CAMBRIDGE UNIVERSITY PRESS, 1999
【非特許文献４】N. Kunihiro and K. Koyama, “Two Discrete Log Algorithms forSuper-Anomalous Elliptic Curves", SCIS'99, 1999, pp. 869-874
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記従来例の方式によると、変換後の領域においても通常の加算と同じ加算を行うため、変換後の演算を解析することにより、変換前の演算が加算であることが推測される可能性があるという問題点がある。プログラムにおいて、加算をしている箇所が、解析者により知られた場合に、その前後の部分がさらに集中して解析されると、どのような変換を行っているか知られてしまう恐れがある。ゆえに、可能な限り、変換前の演算を知られないようにした方がよい。
【０００７】
本発明は、演算の内容を解析しにくくすることができるコンピュータシステム、コンピュータプログラム、加算方法及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明は、２個以上の整数を加算するコンピュータシステムであって、複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、前記記憶手段に記憶されている前記コンピュータプログラムから１個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、前記コンピュータプログラムは、各整数に、群Ｇ上の冪演算を施すことにより、群Ｇに属する元を生成する変換命令群と、生成された全ての前記元に対して、前記加算とは異なる群Ｇ上の基本演算を施して、演算値を生成する演算命令群と、群Ｇ又は群Ｇに真に含まれる部分群Ｓにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含むことを特徴とする。
【発明の効果】
【０００９】
この構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。
ここで、前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いるとしてもよい。
【００１０】
この構成によると、セキュリティ処理における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記群Ｇは、剰余整数環の乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。
【００１１】
ここで、前記群Ｇは、２つの素数ｐ，ｑと正整数ｍを用いて表される
ｎ＝ｐm ×ｑに対し、Ｚ／ｎＺの乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。
【００１２】
ここで、前記部分群Ｓは、アノマラス楕円曲線の群であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。また、前記群Ｇは、二つのアノマラス楕円曲線の群の直積であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。
【００１３】
これらの構成によると、変換後に施される演算は、楕円曲線上の加算であり、整数の加算と異なるので、演算を隠蔽することができる。
ここで、さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求めるとしてもよい。
【００１４】
この構成によると、逆変換命令群による逆算が容易である。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。
【００１５】
この構成によると、暗号化又は復号における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。
【００１６】
この構成によると、デジタル署名又は署名検証における加算において、使用する値及び演算を隠蔽することができる。
以上説明したように、本発明の構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができ、その価値は大きい。
【発明を実施するための最良の形態】
【００１７】
１．コンテンツ配信システム１０
本発明に係る第１の実施の形態としてのコンテンツ配信システム１０について説明する。
１．１  コンテンツ配信システム１０の構成
コンテンツ配信システム１０は、図１に示すように、コンテンツサーバ装置１００、配信サーバ装置３００ａ、放送装置３００ｂ、ＢＤ製造装置３００ｃ、パーソナルコンピュータ２００、デジタル放送受信装置２００ａ及びＢＤ再生装置２００ｂから構成されている。
【００１８】
コンテンツサーバ装置１００は、映像データ及び音データから構成される映画のコンテンツを記憶しており、配信サーバ装置３００ａからの要求に応じて、記憶しているコンテンツを暗号化して暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２１を介して接続されている配信サーバ装置３００ａへ送信する。配信サーバ装置３００ａは、暗号化コンテンツを受信し、インターネット２０を介して接続されているパーソナルコンピュータ２００へ暗号化コンテンツを送信する。パーソナルコンピュータ２００は、暗号化コンテンツを受信し、受信した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【００１９】
また、コンテンツサーバ装置１００は、上記と同様に、放送装置３００ｂからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２２を介して接続されている放送装置３００ｂへ送信する。放送装置３００ｂは、暗号化コンテンツを受信し、受信した暗号化コンテンツを放送波に乗せて放送し、デジタル放送受信装置２００ａは、放送波を受信し、受信した放送波から前記暗号化コンテンツを抽出し、抽出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【００２０】
さらに、コンテンツサーバ装置１００は、上記と同様に、ＢＤ製造装置３００ｃからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２３を介して接続されているＢＤ製造装置３００ｃへ送信する。ＢＤ製造装置３００ｃは、暗号化コンテンツを受信し、受信した暗号化コンテンツを記録媒体４００に書き込む。暗号化コンテンツが書き込まれた記録媒体４００は、販売されて利用者が購入する。利用者により、記録媒体４００が装着されたＢＤ再生装置２００ｂは、記録媒体４００から前記暗号化コンテンツを読み出し、読み出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【００２１】
１．２  コンテンツサーバ装置１００
コンテンツサーバ装置１００は、図２に示すように、マイクロプロセッサ１０１、ハードディスク部１０２、メモリ部１０３、入力制御部１０４、表示制御部１０５及び通信ユニット１０６などから構成されるコンピュータシステムである。入力制御部１０４及び表示制御部１０５は、それぞれ、キーボード１０７及びモニタ１０８に接続されている。また、通信ユニット１０６は、専用回線２１、２２及び２３を介して、それぞれ、配信サーバ装置３００ａ、放送装置３００ｂ及びＢＤ製造装置３００ｃに接続されている。
【００２２】
ハードディスク部１０２及びメモリ部１０３には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ１０１が、前記コンピュータプログラムに従って動作することにより、コンテンツサーバ装置１００は、その一部の機能を達成する。
（１）ハードディスク部１０２
ハードディスク部１０２は、図２に示すように、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・、鍵１２３、鍵１２４、鍵１２５、・・・、及び図示していないその他のコンピュータプログラムを記憶している。また、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・を記憶するための領域を備えている。
【００２３】
コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・は、それぞれ、鍵１２３、鍵１２４、鍵１２５、・・・、に対応しており、また、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・に対応している。
コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・は、それぞれ、映像データ及び音データが高効率に圧縮符号化された圧縮データである。
【００２４】
鍵１２３、鍵１２４、鍵１２５、・・・は、それぞれ、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・に、暗号化アルゴリズムを施して、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・を生成する際に使用される暗号鍵であり、それぞれ、６４ビット長のデータである。ここで、前記暗号化アルゴリズムについては、後述する。
【００２５】
暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・は、それぞれ、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・に、前記暗号化アルゴリズムが施されて生成された暗号化データである。
（２）メモリ部１０３
メモリ部１０３は、図２に示すように、コンテンツ配信プログラム１３１、コンテンツ暗号プログラム１３２、暗号プログラム１３３、送信プログラム１３４及び図示していないその他のプログラムを記憶している。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ１０１により解読され実行される形式である。
【００２６】
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
（ａ）コンテンツ配信プログラム１３１
コンテンツ配信プログラム１３１は、図３に示すように、命令コード群Ｓ１０１、Ｓ１０２、Ｓ１０３及びＳ１０４を含んで構成されており、これらの命令コード群は、コンテンツ配信プログラム１３１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００２７】
命令コード群Ｓ１０１は、コンテンツサーバ装置１００の管理者からコンテンツの指定を受け付け、又はコンテンツの配信先の装置からコンテンツの指定を受け取ることを示す複数の命令コードを含む。
命令コード群Ｓ１０２は、コンテンツの配信先の装置の指定を受け取ることを示す複数の命令コードを含む。
【００２８】
命令コード群Ｓ１０３は、受け付けた指定又は受け取った指定により示されるコンテンツを指定して、コンテンツ暗号プログラム１３２を呼び出し、次に、コンテンツ暗号プログラム１３２により生成された暗号化コンテンツを暗号化コンテンツ１２６としてハードディスク部１０２へ書き込むことを示す複数の命令コードを含む。
命令コード群Ｓ１０４は、受け取った指定による配信先の装置と、生成されハードディスク部１０２に書き込まれた暗号化コンテンツとを指定して、送信プログラム１３４を呼び出すことを示す複数の命令コードを含む。命令コード群Ｓ１０４が実行されることにより、受け取った指定により示される配信先の装置へ、生成された暗号化コンテンツが送信される。
【００２９】
（ｂ）コンテンツ暗号プログラム１３２
コンテンツ暗号プログラム１３２は、図４に示すように、命令コード群Ｓ１１１、Ｓ１１２、Ｓ１１３、Ｓ１１４、Ｓ１１５及びＳ１１６を含んで構成されており、これらの命令コード群は、コンテンツ暗号プログラム１３２内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００３０】
命令コード群Ｓ１１１は、指定を受け付けたコンテンツ内におけるデータの位置をビットにより示す読出しポイントに、初期値として値「−６４」を代入し、指定を受け付けたコンテンツに対応する鍵をハードディスク部１０２から読み出すことを示す複数の命令コードを含む。ここで、値「−６４」を有する読出しポイントは、前記コンテンツ外の位置を示しているが、読出しポイントに初期値として値「−６４」を代入するのは、後述する命令コード群Ｓ１１２の最初の実行において、読出しポイントが、前記コンテンツの先頭の位置を示すようにするためである。後述する命令コード群Ｓ１１２の最初の実行において、前記読出しポイントに６４ビットが加算され、読出しポイントは、値「０」を有することになり、この読出しポイントは、前記コンテンツの先頭の位置を示している。
【００３１】
命令コード群Ｓ１１２は、前記読出しポイントに６４ビットを加算し、次に、前記コンテンツにおいて、加算された読出しポイントにより示される位置から１ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記コンテンツ内であるならば、当該位置から１ブロック分のデータを読み出し、読出しポイントにより示される位置が前記コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含む。ここで、１ブロックは、６４ビット長のデータである。
【００３２】
命令コード群Ｓ１１３は、命令コード群Ｓ１１２から終了コードが出力された場合には、コンテンツ暗号プログラム１３２による処理を終了し、終了コードが出力されていない場合には、次の命令コード群Ｓ１１４に制御を移すことを示す複数の命令コードを含む。
命令コード群Ｓ１１４は、読み出された前記鍵及び読み出された前記１ブロックを伴って、暗号プログラム１３３を呼び出すことを示す複数の命令コードを含む。
【００３３】
命令コード群Ｓ１１５は、暗号プログラム１３３により生成された１個の暗号化ブロックを、ハードディスク部１０２に対して、暗号化コンテンツ１２６の一部として書き込むことを示す複数の命令コードを含む。
命令コード群Ｓ１１６は、次に、制御を命令コード群Ｓ１１２へ移すことを示す命令コードを含む。
【００３４】
（ｃ）暗号プログラム１３３
暗号プログラム１３３は、図５に示すように、暗号制御モジュール１４１、拡張鍵生成モジュール１４２及びローテーションモジュールＡ１４３、ローテーションモジュールＢ１４４、ローテーションモジュールＣ１４５及びローテーションモジュールＤ１４６から構成されている。
【００３５】
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ１０１により解読され実行される形式である。
（拡張鍵生成モジュール１４２）  
拡張鍵生成モジュール１４２は、呼出し元のプログラムから、６４ビットの鍵Ｋを受け取り、受け取った鍵Ｋを用いて、８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８を生成し、生成した８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８を呼出し元のプログラムへ出力する複数の命令コードを含む。
【００３６】
なお、拡張鍵を生成する方法については、特許文献３に記載されているため、説明を省略する。
（ローテーションモジュールＡ１４３）
ローテーションモジュールＡ１４３は、呼出し元のプログラムから３２ビットのデータＸを受け取り、データＸに対して、Ｒｏｔ２（Ｘ）＋Ｘ＋１を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
【００３７】
ここで、Ｒｏｔ２（Ｘ）は、３２ビットのデータＸを左へ２ビット循環シフトすることを示す。なお、３２ビットのデータＸを左へ２ビット循環シフトするとは、データＸを最上位２ビットＸ１と最下位３０ビットＸ２に分け、Ｘ２を、データＸの最上位３０ビットにシフトし、Ｘ１をデータＸの最下位２ビットにシフトすることを言う。
（ローテーションモジュールＢ１４４）
ローテーションモジュールＢ１４４は、呼出し元のプログラムから３２ビットのデータＸを受け取り、データＸに対して、Ｒｏｔ４（Ｘ）  ＸＯＲ  Ｘを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
【００３８】
ここで、Ｒｏｔ４（Ｘ）は、データＸを左へ４ビット循環シフトすることを示し、ＸＯＲは、排他的論理和を示す。なお、３２ビットのデータＸを左へ４ビット循環シフトするとは、データＸを最上位４ビットＸ１と最下位２８ビットＸ２に分け、Ｘ２を、データＸの最上位２８ビットにシフトし、Ｘ１をデータＸの最下位４ビットにシフトすることを言う。
【００３９】
（ローテーションモジュールＣ１４５）
ローテーションモジュールＣ１４５は、呼出し元のプログラムから３２ビットのデータＸを受け取り、データＸに対して、Ｒｏｔ８（Ｘ）  ＸＯＲ  Ｘを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Ｒｏｔ８（Ｘ）は、データＸを左へ８ビット循環シフトすることを示す。なお、３２ビットのデータＸを左へ８ビット循環シフトするとは、データＸを最上位８ビットＸ１と最下位２４ビットＸ２に分け、Ｘ２を、データＸの最上位２４ビットにシフトし、Ｘ１をデータＸの最下位８ビットにシフトすることを言う。
【００４０】
（ローテーションモジュールＤ１４６）
ローテーションモジュールＤ１４６は、呼出し元のプログラムから３２ビットのデータＸ及び３２ビットのデータＹを受け取り、データＸ及びデータＹに対して、Ｒｏｔ１６（Ｘ）＋（Ｘ  ＡＮＤ  Ｙ）を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
【００４１】
ここで、Ｒｏｔ１６（Ｘ）は、データＸを、左へ１６ビット循環シフトすることを示し、ＡＮＤは、論理積を示す。なお、３２ビットのデータＸを左へ１６ビット循環シフトするとは、データＸを最上位１６ビットＸ１と最下位１６ビットＸ２に分け、Ｘ２を、データＸの最上位１６ビットにシフトし、Ｘ１をデータＸの最下位１６ビットにシフトすることを言う。
【００４２】
（暗号制御モジュール１４１）
暗号制御モジュール１４１は、図６及び図７に示すように、命令コード群Ｓ１２１〜命令コード群Ｓ１４０を含んで構成されており、これらの命令コード群は、暗号制御モジュール１４１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含む。
【００４３】
命令コード群Ｓ１２１は、暗号制御モジュール１４１の呼出し元のプログラムから、１ブロックの平文Ｍ及び鍵Ｋを受け取ることを示す複数の命令コードを含む。ここで、１ブロックは、６４ビット長のデータである。
命令コード群Ｓ１２２は、受け取った鍵Ｋを伴って、拡張鍵生成モジュール１４２を呼び出すことを示す複数の命令コードを含む。命令コード群Ｓ１２２が実行されると、その結果、８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８が生成される。
【００４４】
命令コード群Ｓ１２３は、データＭ１を定義する命令コード及びデータＭ２を定義する命令コードを含む。データＭ１は、受け取った平文Ｍの最上位の３２ビットのデータであり、データＭ２は、受け取った平文Ｍの最下位の３２ビットのデータである。
命令コード群Ｓ１２４は、データＭ１とデータＭ２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１に格納することを示す複数の命令コードを含む。
【００４５】
ＴＭＰ１＝Ｍ１  ＸＯＲ  Ｍ２
命令コード群Ｓ１２５は、変数ＴＭＰ１と拡張鍵Ｋ１とに加算を施し、その演算結果を変数ＴＭＰ２に格納することを示す複数の命令コードを含む。
ＴＭＰ２＝ＴＭＰ１  ＋  Ｋ１
命令コード群Ｓ１２６は、変数ＴＭＰ２を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ３に格納することを示す複数の命令コードを含む。
【００４６】
ＴＭＰ３＝Ｒｏｔ２（ＴＭＰ２）＋ＴＭＰ２＋１
命令コード群Ｓ１２７は、変数ＴＭＰ３を伴って、ローテーションモジュールＢ１４４を呼び出し、その演算結果を変数ＴＭＰ４に格納することを示す複数の命令コードを含む。
ＴＭＰ４＝Ｒｏｔ４（ＴＭＰ３）  ＸＯＲ  ＴＭＰ３
命令コード群Ｓ１２８は、変数ＴＭＰ４とデータＭ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ５に格納することを示す複数の命令コードを含む。
【００４７】
ＴＭＰ５＝ＴＭＰ４  ＸＯＲ  Ｍ１
命令コード群Ｓ１２９は、変数ＴＭＰ５と拡張鍵Ｋ２とに加算を施し、その演算結果を変数ＴＭＰ６に格納することを示す複数の命令コードを含む。
ＴＭＰ６＝ＴＭＰ５  ＋  Ｋ２
命令コード群Ｓ１３０は、変数ＴＭＰ６を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ７に格納することを示す複数の命令コードを含む。
【００４８】
ＴＭＰ７＝Ｒｏｔ２（ＴＭＰ６）＋ＴＭＰ６＋１
命令コード群Ｓ１３１は、変数ＴＭＰ７を伴って、ローテーションモジュールＣ１４５を呼び出し、その演算結果を変数ＴＭＰ８に格納することを示す複数の命令コードを含む。
ＴＭＰ８＝Ｒｏｔ８（ＴＭＰ７）  ＸＯＲ  ＴＭＰ７
命令コード群Ｓ１３２は、変数ＴＭＰ８と拡張鍵Ｋ３とに加算を施し、その演算結果を変数ＴＭＰ９に格納することを示す複数の命令コードを含む。
【００４９】
ＴＭＰ９＝ＴＭＰ８  ＋  Ｋ３
命令コード群Ｓ１３３は、変数ＴＭＰ９を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ１０に格納することを示す複数の命令コードを含む。
ＴＭＰ１０＝Ｒｏｔ２（ＴＭＰ９）＋ＴＭＰ９＋１
命令コード群Ｓ１３４は、変数ＴＭＰ７及び変数ＴＭＰ１０を伴って、ローテーションモジュールＤ１４６を呼び出し、その演算結果を変数ＴＭＰ１１に格納することを示す複数の命令コードを含む。
【００５０】
ＴＭＰ１１＝Ｒｏｔ１６（ＴＭＰ１０）＋（ＴＭＰ１０  ＡＮＤ  ＴＭＰ７）
命令コード群Ｓ１３５は、変数ＴＭＰ１１と変数ＴＭＰ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１２に格納することを示す複数の命令コードを含む。
ＴＭＰ１２＝ＴＭＰ１１  ＸＯＲ  ＴＭＰ１
命令コード群Ｓ１３６は、変数ＴＭＰ１２と拡張鍵Ｋ４とに加算を施し、その演算結果を変数ＴＭＰ１３に格納することを示す複数の命令コードを含む。
【００５１】
ＴＭＰ１３＝ＴＭＰ１２  ＋  Ｋ４
命令コード群Ｓ１３７は、変数ＴＭＰ１３を伴って、ローテーションモジュールＡ１４３を呼び出し、その演算結果を変数ＴＭＰ１４に格納することを示す複数の命令コードを含む。
ＴＭＰ１４＝Ｒｏｔ２（ＴＭＰ１３）＋ＴＭＰ１３＋１
命令コード群Ｓ１３８は、変数ＴＭＰ１４と変数ＴＭＰ４とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１５に格納することを示す複数の命令コードを含む。
【００５２】
ＴＭＰ１５＝ＴＭＰ１４  ＸＯＲ  ＴＭＰ４
命令コード群Ｓ１３９は、変数ＴＭＰ１５と変数ＴＭＰ１２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１６に格納することを示す複数の命令コードを含む。
ＴＭＰ１６＝ＴＭＰ１５  ＸＯＲ  ＴＭＰ１２
命令コード群Ｓ１４０は、変数ＴＭＰ１５を最上位３２ビット、変数ＴＭＰ１６を最下位３２ビットとする６４ビットの整数を暗号文Ｃとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。
【００５３】
（ｄ）送信プログラム１３４
送信プログラム１３４（図示していない）は、複数の命令コードが並べられて構成されており、呼出し元のプログラムから、データの指定及び配信先の装置の指定を受け取り、通信ユニット１０６を制御して、指示されたデータを指定された配信先の装置へ送信することを示す複数の命令コードを含む。
【００５４】
１．３  パーソナルコンピュータ２００
パーソナルコンピュータ２００は、図８に示すように、マイクロプロセッサ２０１、ハードディスク部２０２、メモリ部２０３、入力制御部２０４、表示制御部２０５及び通信ユニット２０６などから構成されるコンピュータシステムである。入力制御部２０４及び表示制御部２０５は、それぞれ、キーボード７０７及びモニタ２０８に接続されている。また、通信ユニット２０６は、インターネット２０に接続されている。
【００５５】
ハードディスク部２０２及びメモリ部２０３には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ２０１が、各コンピュータプログラムに従って動作することにより、パーソナルコンピュータ２００は、その一部の機能を達成する。
なお、デジタル放送受信装置２００ａ及びＢＤ再生装置２００ｂは、パーソナルコンピュータ２００と同様の構成を有しているので、これらの装置についての説明を省略する。
【００５６】
（１）ハードディスク部２０２
ハードディスク部２０２は、図８に示すように、鍵２２２を記憶しており、また暗号化コンテンツ２２１を記憶するための領域を備えている。暗号化コンテンツ２２１と鍵２２２とは、対応している。
暗号化コンテンツ２２１及び鍵２２２は、それぞれ、コンテンツサーバ装置１００のハードディスク部１０２に記憶されている暗号化コンテンツ１２６及び鍵１２３と同じものである。
【００５７】
（２）メモリ部２０３
メモリ部２０３は、図８に示すように、コンテンツ受信プログラム２３１、コンテンツ復号プログラム２３２、再生プログラム２３３、復号プログラム２３４及び加算プログラム２３５を記憶している。また、メモリ部２０３は、復号コンテンツ領域２３６を含む。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ２０１により解読され実行される形式である。
【００５８】
復号コンテンツ領域２３６には、暗号化コンテンツが復号されて生成された復号コンテンツが一時的に書き込まれる。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
【００５９】
（ａ）コンテンツ受信プログラム２３１
コンテンツ受信プログラム２３１は、図９に示すように、命令コード群Ｓ２０１、Ｓ２０２、Ｓ２０３及びＳ２０４を含んで構成されており、これらの命令コード群は、コンテンツ受信プログラム２３１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００６０】
命令コード群Ｓ２０１は、パーソナルコンピュータ２００の利用者からコンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群Ｓ２０２は、指定を受け付けた前記コンテンツを識別するコンテンツ識別子を取得し、取得したコンテンツ識別子を、通信ユニット２０６及びインターネット２０を介して、配信サーバ装置３００ａへ送信することを示す複数の命令コードを含んでいる。
【００６１】
命令コード群Ｓ２０３は、配信サーバ装置３００ａから、インターネット２０及び通信ユニット２０６を介して、暗号化コンテンツを受信することを示す複数の命令コードを含んでいる。ここで、受信する前記暗号化コンテンツは、前記コンテンツ識別子により識別されるものである。
命令コード群Ｓ２０４は、受信した暗号化コンテンツをハードディスク部２０２へ、暗号化コンテンツ２２１として書き込むことを示す複数の命令コードを含んでいる。
【００６２】
（ｂ）コンテンツ復号プログラム２３２
コンテンツ復号プログラム２３２は、図１０に示すように、命令コード群Ｓ２１１、Ｓ２１２、Ｓ２１３、Ｓ２１４、Ｓ２１５、Ｓ２１６、Ｓ２１７及びＳ２１８を含んで構成されており、これらの命令コード群は、コンテンツ復号プログラム２３２内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００６３】
命令コード群Ｓ２１１は、パーソナルコンピュータ２００の利用者から、ハードディスク部２０２に記憶されているいずれかの暗号化コンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１２は、メモリ部２０３に記憶されている再生プログラム２３３を呼び出すことを示す複数の命令コードを含んでいる。命令コード群Ｓ２１２が実行されることにより、その結果、コンテンツ復号プログラム２３２と再生プログラム２３３とが並行して実行される。
【００６４】
命令コード群Ｓ２１３は、指定を受け付けた暗号化コンテンツ内におけるデータの位置をビットにより示す読出しポイントに初期値として値「−６４」を代入し、次に、指定を受け付けた暗号化コンテンツに対応する鍵をハードディスク部２０２から読み出すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１４は、前記読出しポイントに６４ビットを加算し、次に、前記暗号化コンテンツにおいて、加算された読出しポイントにより示される位置から１ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記暗号化コンテンツ内であるならば、当該位置から１ブロック分のデータを読み出し、読出しポイントにより示される位置が前記暗号化コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含んでいる。ここで、１ブロックは、６４ビット長のデータである。
【００６５】
命令コード群Ｓ２１５は、命令コード群Ｓ２１４から終了コードが出力された場合には、コンテンツ復号プログラム２３２による処理を終了し、終了コードが出力されていない場合には、次の命令コード群Ｓ２１６に制御を移すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１６は、読み出された前記鍵及び読み出された前記１ブロックを伴って、復号プログラム２３４を呼び出すことを示す複数の命令コードを含んでいる。
【００６６】
命令コード群Ｓ２１７は、復号プログラム２３４により生成された１個の復号ブロックを、メモリ部２０３の復号コンテンツ領域２３６へ書き込むことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１８は、次に制御を命令コード群Ｓ２１４へ移すことを示す命令コードを含んでいる。
【００６７】
（ｃ）再生プログラム２３３
再生プログラム２３３は、図１０に示すように、命令コード群Ｓ２１８、Ｓ２１９及びＳ２２０を含んで構成されており、これらの命令コード群は、再生プログラム２３３は内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００６８】
命令コード群Ｓ２１８は、メモリ部２０３が有する復号コンテンツ領域２３６から１個以上の復号ブロックを読み出すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１９は、読み出した前記復号ブロックから映像データ及び音データを生成し、生成した映像データ及び音データを映像信号及び音信号に変換して、表示制御部２０５を介して、モニタ２０８へ出力することを示す複数の命令コードを含んでいる。
【００６９】
命令コード群Ｓ２２０は、次に制御を命令コード群Ｓ２１８へ移すことを示す命令コードを含んでいる。
（ｄ）復号プログラム２３４
復号プログラム２３４は、図１１に示すように、復号制御モジュール２４１、拡張鍵生成モジュール２４２、加算モジュール２４３、ローテーションモジュールＡ２４４、ローテーションモジュールＢ２４５、ローテーションモジュールＣ２４６及びローテーションモジュールＤ２４７から構成されている。
【００７０】
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ２０１により解読され実行される形式である。
拡張鍵生成モジュール２４２、ローテーションモジュールＡ２４４、ローテーションモジュールＢ２４５、ローテーションモジュールＣ２４６及びローテーションモジュールＤ２４７は、それぞれ、図５に示す拡張鍵生成モジュール１４２、ローテーションモジュールＡ１４３、ローテーションモジュールＢ１４４、ローテーションモジュールＣ１４５及びローテーションモジュールＤ１４６と同じであるので、説明を省略する。
【００７１】
（復号制御モジュール２４１）
復号制御モジュール２４１は、図１２及び図１３に示すように、命令コード群Ｓ２２１〜命令コード群Ｓ２４０を含んで構成されており、これらの命令コード群は、復号制御モジュール２４１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含む。
【００７２】
命令コード群Ｓ２２１は、復号制御モジュール２４１の呼出し元のプログラムから、１ブロックの暗号文Ｍ及び鍵Ｋを受け取ることを示す複数の命令コードを含む。ここで、１ブロックは、６４ビット長のデータである。
命令コード群Ｓ２２２は、受け取った鍵Ｋを伴って、拡張鍵生成モジュール２４２を呼び出すことを示す複数の命令コードを含む。命令コード群Ｓ２２２が実行されると、その結果、８個の拡張鍵Ｋ１、Ｋ２、Ｋ３、・・・、Ｋ８が生成される。
【００７３】
命令コード群Ｓ２２３は、データＭ１を定義する命令コード及びデータＭ２を定義する命令コードを含む。データＭ１は、受け取った暗号文Ｍの最上位の３２ビットのデータであり、データＭ２は、受け取った暗号文Ｍの最下位の３２ビットのデータである。
命令コード群Ｓ２２４は、データＭ１とデータＭ２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１に格納することを示す複数の命令コードを含む。
【００７４】
ＴＭＰ１＝Ｍ１  ＸＯＲ  Ｍ２
命令コード群Ｓ２２５は、変数ＴＭＰ１と拡張鍵Ｋ１とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ２に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ２＝ＴＭＰ１  ＋  Ｋ１が算出される。
【００７５】
命令コード群Ｓ２２６は、変数ＴＭＰ２を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ３に格納することを示す複数の命令コードを含む。
ＴＭＰ３＝Ｒｏｔ２（ＴＭＰ２）＋ＴＭＰ２＋１
命令コード群Ｓ２２７は、変数ＴＭＰ３を伴って、ローテーションモジュールＢ２４５を呼び出し、その演算結果を変数ＴＭＰ４に格納することを示す複数の命令コードを含む。
【００７６】
ＴＭＰ４＝Ｒｏｔ４（ＴＭＰ３）  ＸＯＲ  ＴＭＰ３
命令コード群Ｓ２２８は、変数ＴＭＰ４とデータＭ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ５に格納することを示す複数の命令コードを含む。
ＴＭＰ５＝ＴＭＰ４  ＸＯＲ  Ｍ１
命令コード群Ｓ２２９は、変数ＴＭＰ５と拡張鍵Ｋ２とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ６に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ６＝ＴＭＰ５  ＋  Ｋ２が算出される。
【００７７】
命令コード群Ｓ２３０は、変数ＴＭＰ６を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ７に格納することを示す複数の命令コードを含む。
ＴＭＰ７＝Ｒｏｔ２（ＴＭＰ６）＋ＴＭＰ６＋１
命令コード群Ｓ２３１は、変数ＴＭＰ７を伴って、ローテーションモジュールＣ２４６を呼び出し、その演算結果を変数ＴＭＰ８に格納することを示す複数の命令コードを含む。
【００７８】
ＴＭＰ８＝Ｒｏｔ８（ＴＭＰ７）  ＸＯＲ  ＴＭＰ７
命令コード群Ｓ２３２は、変数ＴＭＰ８と拡張鍵Ｋ３とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ９に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ９＝ＴＭＰ８  ＋  Ｋ３が算出される。
【００７９】
命令コード群Ｓ２３３は、変数ＴＭＰ９を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ１０に格納することを示す複数の命令コードを含む。
ＴＭＰ１０＝Ｒｏｔ２（ＴＭＰ９）＋ＴＭＰ９＋１
命令コード群Ｓ２３４は、変数ＴＭＰ７及び変数ＴＭＰ１０を伴って、ローテーションモジュールＤ２４７を呼び出し、その演算結果を変数ＴＭＰ１１に格納することを示す複数の命令コードを含む。
【００８０】
ＴＭＰ１１＝Ｒｏｔ１６（ＴＭＰ１０）＋（ＴＭＰ１０  ＡＮＤ  ＴＭＰ７）
命令コード群Ｓ２３５は、変数ＴＭＰ１１と変数ＴＭＰ１とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１２に格納することを示す複数の命令コードを含む。
ＴＭＰ１２＝ＴＭＰ１１  ＸＯＲ  ＴＭＰ１
命令コード群Ｓ２３６は、変数ＴＭＰ１２と拡張鍵Ｋ４とを伴って、加算モジュール２４３を呼び出し、その演算結果を変数ＴＭＰ１３に格納することを示す複数の命令コードを含む。この結果、加算モジュール２４３により、ＴＭＰ１３＝ＴＭＰ１２  ＋  Ｋ４が算出される。
【００８１】
命令コード群Ｓ２３７は、変数ＴＭＰ１３を伴って、ローテーションモジュールＡ２４４を呼び出し、その演算結果を変数ＴＭＰ１４に格納することを示す複数の命令コードを含む。
ＴＭＰ１４＝Ｒｏｔ２（ＴＭＰ１３）＋ＴＭＰ１３＋１
命令コード群Ｓ２３８は、変数ＴＭＰ１４と変数ＴＭＰ４とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１５に格納することを示す複数の命令コードを含む。
【００８２】
ＴＭＰ１５＝ＴＭＰ１４  ＸＯＲ  ＴＭＰ４
命令コード群Ｓ２３９は、変数ＴＭＰ１５と変数ＴＭＰ１２とに排他的論理和ＸＯＲを施し、その演算結果を変数ＴＭＰ１６に格納することを示す複数の命令コードを含む。
ＴＭＰ１６＝ＴＭＰ１５  ＸＯＲ  ＴＭＰ１２
命令コード群Ｓ２４０は、変数ＴＭＰ１５を最上位３２ビット、変数ＴＭＰ１６を最下位３２ビットとする６４ビットの整数を復号文Ｃとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。
【００８３】
（加算モジュール２４３）
加算モジュール２４３は、入力データａ、ｂに対し、データａ＋ｂを演算し、データａ＋ｂを出力するコンピュータプログラムであり、図１４に示すように、変換部２５１、主要演算部２５２及び逆変換部２５３から構成されており、変換部２５１は、パラメタ格納部２６１及びべき乗演算部２６２を含み、主要演算部２５２は、パラメタ格納部２６３及び乗算部２６４を含み、逆変換部２５３は、パラメタ格納部２６５、離散対数計算部２６６及びＣＲＴ（Ｃｈｉｎｅｓｅ  Ｒｅｍａｉｎｄｅｒ  Ｔｈｅｏｒｅｍ）部２６７を含む。
【００８４】
（ｉ）各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール２４３で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
ｐi （ｉ＝１，２，…，ｋ）を、それぞれ異なる素数とする。例えば、ｐi 
（ｉ＝１，２，…，ｋ）は、ｐ1 ＝３、ｐ2 ＝５、ｐ3 ＝７、ｐ4 ＝１３、・・・などのように、それぞれ小さい素数である。また、例えば、ｋ＝１７である。また、それらの積ｐ1×ｐ2 ×…×ｐk をｎとする。ここで、×は乗算を示す。ｎは、例えば、６４ビット程度で表現できる数である。例えば、ｋ＝１７のとき、ｎ＝ｐ1×ｐ2 ×…×ｐk ＞２64となる。
【００８５】
ｐi （ｉ＝１，２，…，ｋ）は、逆変換部２５３により保持され、ｎは、変換部２５１及び主要演算部２５２により保持されている。
加算モジュール２４３では、ｍｏｄ  ｎの整数から構成される剰余整数環Ｚ／ｎＺの乗法群の演算を用いる。ｇは、その乗法群に属する予め与えられた数であり、ｐi（ｉ＝１，２，…，ｋ）に対して原始元とする。
【００８６】
原始元とは、ｍを１，  ２，  …と動かしたとき、初めてｇm ＝１  ｍｏｄ  ｐi となるｍの値が、ｐi−１であるようなｇである。
Ｌ＝ＬＣＭ（ｐ1 −１，ｐ2 −１，…，ｐk −１）とする。ここで、ＬＣＭ（ｐ1−１，ｐ2 −１，…，ｐk −１）は、ｐ1 −１，ｐ2 −１，…，ｐk−１の最小公倍数（Least Common Multiple）を示す。
【００８７】
入力データａ、ｂは、それぞれ、Ｌ／２より小さい非負整数とする。
（ii）変換部２５１の構成
変換部２５１は、パラメタ格納部２６１及びべき乗演算部２６２を含む。
パラメタ格納部２６１は、ｎとｇとを格納している。
べき乗演算部２６２は、入力データａ、ｂを受け取り、受け取った入力データａ、ｂに対し、
ｇa ＝ｇa ｍｏｄ  ｎ，及び
ｇb ＝ｇb ｍｏｄ  ｎを計算し、得られたｇa 及びｇb を主要演算部２５２へ出力する。
【００８８】
（iii ）主要演算部２５２の構成
主要演算部２５２は、パラメタ格納部２６３及び乗算部２６４を含む。
パラメタ格納部２６３は、ｎを格納している。
乗算部２６４は、べき乗演算部２６２からｇa 及びｇb を受け取り、受け取ったｇa 及びｇbに対し、
ｇab ＝ｇa ×ｇb   ｍｏｄ  ｎを計算し、得られたｇabを逆変換部２５３へ出力する。
【００８９】
（iv）逆変換部２５３の構成
逆変換部２５３は、パラメタ格納部２６５、離散対数計算部２６６及びＣＲＴ部２６７を含む。
パラメタ格納部２６５は、ｐ1 、ｐ2 、・・・、ｐk を格納している。
離散対数計算部２６６は、乗算部２６４からｇabを受け取り、
受け取ったｇabについて、ｇ  ｍｏｄ  ｐi に対するｇab  ｍｏｄ  ｐi（ｉ＝１，２，…，ｋ）の離散対数ｃi ｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）を計算する。
【００９０】
つまり、ｇab  ＝ｇci  ｍｏｄ  ｐi （ｉ＝１，２，…，ｋ）となるｃiｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）を求める。次に、得られたｃi ｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）をＣＲＴ部２６７へ出力する。
離散対数計算部２６６によるｃｉ  ｍｏｄ  ｐｉ−１の計算方法については、様々なものがあるが、以下にその一例を示す。
【００９１】
ｗを１，２，３，…と順番に動かして、ｇw ＝ｇab  ｍｏｄ  ｐi となるｗを求める。そのｗをｃiとする。なお、各ｐi に関し、ｇ1 ，ｇ2 ，…，
ｇ(pi-2)  ｍｏｄ  ｐｉを計算した結果をテーブルとして保持し、そのテーブルの値から、ｇab  ｍｏｄ  ｐiと一致するｇw を探す、としてもよい。
ＣＲＴ部２６７は、離散対数計算部２６６からｃi ｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）を受け取り、中国人剰余定理（ＣＲＴ）により、受け取ったｃiｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）から、ｇab  ｍｏｄ  ｎのｇ  ｍｏｄ  ｎに対する離散対数ｃ  ｍｏｄ  Ｌを求める。つまり、中国人剰余定理により、ｃi＝ｃ  ｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）となるｃを求める。
【００９２】
離散対数ｃi ｍｏｄ  ｐi −１（ｉ＝１，２，…，ｋ）から、中国人剰余定理を用いて、ｃ  ｍｏｄ  Ｌ  （ここで、Ｌ＝ＬＣＭ（ｐ1−１，ｐ2 −１，…，ｐk −１））を求めるには、次に示すようにする。
ここで、式が複雑になるのを避けるために、ｍi ＝ｐi −１とおく。
u2 =m1×(m1-1 mod (m2/GCD(m1,m2)))×(c2-c1)+c1  を計算する。
【００９３】
ここで、GCD(a,b,c,・・・)は、a,b,c,・・・の最大公約数（Greatest Common Divisor）を示す。
次に、
u3 =(m1×m2)×((m1×m2)-1mod (m3/GCD(m1,m2,m3 )))×(c3- u2)+u2 
を計算し、
u4 =(m1×m2×m3)×((m1×m2×m3)-1mod (m4/GCD(m1,m2,m3,m4)))
×(c4 - u3)+u3 を計算し、
以下順に、同様に、u5,u6,・・・,uk-1を計算し、
uk =(m1×m2×m3×・・・×mk-1)×((m1×m2×m3・・・×mk-1)-1
mod (mk/GCD(m1,m2,m3,m4・・・,mk-1)))×(ck- uk-1)+uk-1 を計算する。
【００９４】
次に、ｃ＝uk とする。こうして、ｃが得られる。
なお、ＣＲＴ部２６７よるｃi （ｉ＝１，２，．．．，ｋ）から，
ｃ  ｍｏｄ  ｐi −１＝ｃi を満たすｃ  ｍｏｄ  Ｌを計算する方法については、非特許文献２に詳しく述べられている。
次に、ＣＲＴ部２６７は、得られたｃを加算モジュール２４３の呼び出し元のプログラムへ出力する。
【００９５】
（ｖ）加算モジュール２４３による加算の動作
加算モジュール２４３による加算の動作について、図１５に示すフローチャートを用いて説明する。
べき乗演算部２６２は、加算モジュール２４３の呼び出し元のプログラムから入力データａ、ｂを受け取り（ステップＳ３０１）、受け取った入力データａ、ｂに対し、ｇa＝ｇa ｍｏｄ  ｎ，ｇb ＝ｇb ｍｏｄ  ｎを計算する（ステップＳ３０２〜Ｓ３０３）。
【００９６】
次に、乗算部２６４は、ｇa 及びｇb に対し、ｇab ＝ｇa ×ｇb  ｍｏｄ  ｎを計算する（ステップＳ３０４）。
次に、離散対数計算部２６６は、ｇab  ＝ｇci  ｍｏｄ  ｐi （ｉ＝１，２，…，ｋ）となるｃiｍｏｄ  ｐi −１を求め（ステップＳ３０５）、ＣＲＴ部２６７は、中国人剰余定理（ＣＲＴ）により、ｃi ＝ｃ  ｍｏｄ  ｐi−１（ｉ＝１，２，…，ｋ）となるｃを求め（ステップＳ３０６）、次に、得られたｃを加算モジュール２４３の呼び出し元のプログラムへ出力する（ステップＳ３０７）。
【００９７】
（vi）加算モジュール２４３による加算の動作の検証
以下で、加算モジュール２４３が、入力データａ、ｂに対し、データａ＋ｂを出力していることを検証する。
変換部２５１において、入力データａ、ｂに対し、ｇa ＝ｇa ｍｏｄ  ｎ，
ｇb ＝ｇb ｍｏｄ  ｎを計算し、主要演算部２５２において、
ｇab＝ｇa ×ｇb   ｍｏｄ  ｎを計算する。このとき、ｇab＝ｇ(a+b)ｍｏｄ  ｎを満たすことは明らかである。
逆変換部２５３では、ｇとｇabからｇab＝ｇci  ｍｏｄ  ｐi （ｉ＝１，２，…，ｋ）を満たすｃiを計算し、その結果を用いて、ｃ＝ｃi ｍｏｄ  ｐi −１を満たすｃ  ｍｏｄ  Ｌを計算する。このとき、ｃはｇab＝ｇc
ｍｏｄ  ｎを満たす。なぜなら、ａ＋ｂ＝ｃ  ｍｏｄ  Ｌより、ｇ(a+b-c) ＝１  ｍｏｄ  ｎとなるためである。したがって、ｇ(a+b)  ｍｏｄ  ｎ＝ｇcｍｏｄ  ｎを満たすため、ａ＋ｂ＝ｃ  ｍｏｄ  （（ｐ１−１）×（ｐ２−１）×…×（ｐｋ−１））を満たす。ａ＜Ｌ／２，ｂ＜Ｌ／２よりａ＋ｂ＜Ｌであるので、加算モジュール２４３は、入力データａと入力データｂとの加算結果であるデータａ＋ｂを出力していることになる。
【００９８】
１．４  第１の実施の形態の効果
加算モジュール２４３は、加算を行う値を変換している。変換部２５１及び逆変換部２５３が解析困難な場合であっても、解析者はｇa ，ｇb，ｇabの値を知り、ｇa ，ｇb からｇabを計算する処理を知る可能性がある。このような場合であっても、変換後の値ｇa，ｇb から変換前の値ａ，ｂを推測することは困難である。さらに、加算モジュール２４３は、主要演算部２５２において、乗算を行っており、この乗算という演算から加算モジュール２４３が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、第１の実施の形態は有効である。
【００９９】
復号制御モジュール２４１は、鍵と他のデータとの加算において、加算モジュール２４３を利用している。そのため、加算の対象となる値、すわなち、鍵の値を推測することが困難になる。また、解析者が暗号アルゴリズムを知っている場合においても、鍵加算部分が、鍵との「加算」を行っていると推測しにくい。そのため、解析者が、暗号アルゴリズムの特徴である鍵加算部分をプログラム内から探し出す攻撃をした場合でも、鍵加算部分を探し出すことが困難なため、攻撃も困難となる。このように、解析者の攻撃が困難になり、本実施の形態は有効である。
【０１００】
２．変形例（１）
第１の実施の形態における加算モジュール２４３の代わりに、加算モジュール５０１を採用するとしてもよい。ここでは、加算モジュール５０１について説明する。
２．１  加算モジュール５０１の構成
加算モジュール５０１は、加算モジュール２４３と同様に、入力データａ、ｂに対し、データａ＋ｂを演算し、データａ＋ｂを出力するコンピュータプログラムであり、図１６に示すように、変換部５１１、主要演算部５１２及び逆変換部５１３から構成されており、変換部５１１は、パラメタ格納部５２１、乱数発生部５２２及びべき乗演算部５２３を含み、主要演算部５１２は、パラメタ格納部５２４及び乗算部５２５を含み、逆変換部５１３は、パラメタ格納部５２６、離散対数計算部５２７及び還元部５２８を含む。
【０１０１】
２．２  各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール５０１で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
ｐ，ｑを素数とし、ｎ＝ｐ2 ×ｑとする。ｐ，ｑは、逆変換部５１３により保持され、ｎは、それぞれ、変換部５１１及び主要演算部５１２により保持される。
【０１０２】
加算モジュール５０１では、ｍｏｄ  ｎの整数から構成される剰余整数環Ｚ／ｎＺの乗法群の演算を用いる。ｇは、その乗法群に属する予め与えられた数でありｇ(p-1)  ｍｏｄ  ｐ2 の位数がｐである数とする。また、
ｇp ＝ｇ(p-1)   ｍｏｄ  ｐ2 と定義する。
入力データａ、ｂは、ｐ／２より小さい非負整数とする。
【０１０３】
２．３  変換部５１１の構成
変換部５１１は、パラメタ格納部５２１、乱数発生部５２２及びべき乗演算部５２３から構成されている。
パラメタ格納部５２１は、ｎとｇとを記憶している。
乱数発生部５２２は、ｎ以下の乱数Ｒ１，Ｒ２を生成する。
【０１０４】
べき乗演算部５２３は、入力データａ、ｂに対し、乱数発生部５２２により生成された乱数Ｒ１，Ｒ２を用いて、
ｇa ＝ｇ＾（ａ＋ｎ×Ｒ１）  ｍｏｄ  ｎ、
ｇb ＝ｇ＾（ｂ＋ｎ×Ｒ２）  ｍｏｄ  ｎを計算する。
なお、本明細書において、記号「＾」は、べき乗を示す演算子である。例えば、ａ＾ｂ＝ａb である。本明細書において、表現上の都合により、ａ＾ｂ及び
ａb の両方の表記を使い分けている。
【０１０５】
次に、べき乗演算部５２３は、計算結果ｇa ，ｇb を主要演算部５１２へ出力する。
２．４  主要演算部５１２の構成
主要演算部５１２は、パラメタ格納部５２４及び乗算部５２５から構成されている。
パラメタ格納部５２４は、ｎを記憶している。
乗算部５２５は、べき乗演算部５２３から計算結果ｇa ，ｇb を受け取り、受け取ったｇa ，ｇbに対し、
ｇab＝ｇa ×ｇb   ｍｏｄ  ｎを計算し、計算結果ｇabを逆変換部５１３へ出力する。
【０１０６】
２．５  逆変換部５１３の構成
逆変換部５１３は、パラメタ格納部５２６、離散対数計算部５２７及び還元部５２８から構成されている。
パラメタ格納部５２６は、ｐを格納している。
離散対数計算部５２７は、乗算部５２５から計算結果ｇabを受け取り、受け取ったｇabに対し、パラメタ格納部５２６に格納されているｐを用いて、
ｃp ＝ｇab(p-1)   ｍｏｄ  ｐ2 を計算し、次に、ｃpを還元部５２８へ出力する。
【０１０７】
還元部５２８は、離散対数計算部５２７からｃp を受け取り、
受け取ったｃp を用いて、ｍｏｄ  ｐ2 におけるｇp に対するｃp の離散対数ｃを計算し、計算して得られたｃを、呼び出し元のプログラムへ出力する。
還元部５２８におけるｃの計算方法については、特許文献２に詳しく述べられている。具体的には、以下のように行う。
【０１０８】
ｃp に対し、ｃ＝（ｃp −１）／（ｇp −１）  ｍｏｄ  ｐとしてｃを求める。
２．６  加算モジュール５０１による加算の動作
加算モジュール５０１による加算の動作について、図１７に示すフローチャートを用いて説明する。
べき乗演算部５２３は、呼び出し元のプログラムから入力データａ、ｂを受け取り（ステップＳ３１１）、乱数発生部５２２は、ｎ以下の乱数Ｒ１，Ｒ２を生成し（ステップＳ３１２）、べき乗演算部５２３は、
ｇa ＝ｇ＾（ａ＋ｎ×Ｒ１）ｍｏｄ  ｎ、
ｇb ＝ｇ＾（ｂ＋ｎ×Ｒ２）ｍｏｄ  ｎを計算する（ステップＳ３１３〜Ｓ３１４）。
【０１０９】
なお、本明細書において、記号「＾」は、べき乗を示す演算子であり、例えば、ａ＾ｂ＝ａb である。本明細書では、場合によって、「ａ＾ｂ」及び「ａb」の両方の表記を使い分けている。
次に、乗算部５２５は、ｇab＝ｇa ×ｇb   ｍｏｄ  ｎを計算する（ステップＳ３１５）。
【０１１０】
次に、離散対数計算部５２７は、ｃp ＝ｇab(p-1)   ｍｏｄ  ｐ2を計算し（ステップＳ３１６）、
還元部５２８は、ｃ＝（ｃp −１）／（ｇp −１）  ｍｏｄ  ｐとしてｃを求め（ステップＳ３１７）、次に、ｃ（＝ａ＋ｂ）を呼び出し元のプログラムへ出力する（ステップＳ３１８）。
【０１１１】
２．７  加算モジュール５０１による加算の動作の検証
以下において、加算モジュール５０１が、入力データａ、ｂに対し、ａ＋ｂを出力していることを検証する。
変換部５１１において、ａ，ｂに対し、
ｇa ＝ｇ＾（ａ＋ｎ×Ｒ１）ｍｏｄ  ｎ、
ｇb ＝ｇ＾（ｂ＋ｎ×Ｒ２）ｍｏｄ  ｎを計算し、
主要演算部５１２において、ｇab＝ｇa ×ｇb   ｍｏｄ  ｎを計算する。このとき、ｇab＝ｇ＾（ａ＋ｂ＋ｎ×（Ｒ１＋Ｒ２））ｍｏｄ  ｎを満たすことは明らかである。逆変換部５１３では、まず、
ｃp ＝ｇab(p-1) ＝ｇp＾（ａ＋ｂ＋ｎ×（Ｒ１＋Ｒ２））ｍｏｄ  ｐ2 となり、
ｇp p ＝１  ｍｏｄ  ｐ2 より、
ｇp n ＝１  ｍｏｄ  ｐ2 であるため、
ｃp ＝ｇp (a+b)   ｍｏｄ  ｐ2 となる。
【０１１２】
逆変換部５１３では、さらに、ｍｏｄ  ｐ2 におけるｇp に対するｃp の離散対数ｃを求める。すなわち、
ｃp ＝ｇp c ｍｏｄ  ｐ2 が成り立つ。したがって、
ｃ＝ａ＋ｂ  ｍｏｄ  ｐであり、ａ＜ｐ／２，ｂ＜ｐ／２より、ａ＋ｂ＜ｐであるため、加算モジュール５０１は、入力データａとｂの加算結果ａ＋ｂを出力していることになる。
【０１１３】
２．８  加算モジュール５０１による効果
加算モジュール５０１は、第１の実施の形態１の加算モジュール２４３と同様に、加算を行う値を変換しており、変換部５１１及び逆変換部５１３が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。さらに、加算モジュール５０１は、主要演算部５１２において、乗算を行っており、この乗算という演算から加算モジュール５０１が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、この発明は有効である。
【０１１４】
２．９  その他（１）
加算モジュール５０１では、剰余整数環Ｚ／ｎＺの乗法群における冪乗演算を変換部５１１で行い、その乗法群の部分群である剰余整数環Ｚ／ｐ2 Ｚの乗法群における離散対数問題を逆変換部５１３で解いている。ここで、もし、解析者がｐ，ｑは分からないが、変換部５１１で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部５１３のみが解析者により解析困難である場合である。この場合においても、ｎの大きさが素因数分解が困難なぐらい、例えば、１０２４ビットぐらいであれば、ｎの素因数分解結果であるｐ，ｑを得ることが困難になる。また、ｐ，ｑが得られなければ、剰余整数環Ｚ／ｎＺの乗法群における離散対数問題を解くことが困難になる。一般に乗法群の大きさ（元の数）が１０２４ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール５０１では、ｐが既知の場合は逆変換部５１３における逆変換の方法によって、Ｚ／ｐ2Ｚの乗法群における離散対数問題を容易に解けるようになる。加算モジュール５０１における変換はこのように、ｐが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、加算モジュール２４３１と異なる。
【０１１５】
２．１０  その他（２）
加算モジュール５０１は、次のように構成してもよい。
ｐ，ｑを素数とし、ｎ＝ｐm ×ｑとする。ｍは、正整数である。また、加算モジュール５０１では、ｍｏｄ  ｎの整数から構成される剰余整数環Ｚ／ｎＺの乗法群の演算を用いる。ｇは、その乗法群に属する予め与えられた数でありｇ(p-1)  ｍｏｄ  ｐm の位数がｐである数とする。また、ｇp ＝ｇ(p-1)   ｍｏｄ  ｐmと定義する。
【０１１６】
離散対数計算部５２７は、乗算部５２５から計算結果ｇabを受け取り、受け取ったｇabに対し、パラメタ格納部５２６に格納されているｐを用いて、
ｃp ＝ｇab(p-1)   ｍｏｄ  ｐm を計算し、次に、ｃpを還元部５２８へ出力する。
還元部５２８は、離散対数計算部５２７からｃp を受け取り、
受け取ったｃp を用いて、ｍｏｄ  ｐm におけるｇp に対するｃp の離散対数ｃを計算し、計算して得られたｃを、呼び出し元のプログラムへ出力する。
【０１１７】
３．変形例（２）
第１の実施の形態における加算モジュール２４３の代わりに、加算モジュール６０１を採用するとしてもよい。ここでは、加算モジュール６０１について説明する。加算モジュール６０１は、楕円曲線上のスカラ倍演算を利用している。楕円曲線については、非特許文献３に詳しく説明されている。
【０１１８】
３．１  加算モジュール６０１の構成
加算モジュール６０１は、加算モジュール２４３と同様に、入力データａ、ｂに対し、データａ＋ｂを演算し、データａ＋ｂを出力するコンピュータプログラムであり、図１８に示すように、変換部６１１、主要演算部６１２及び逆変換部６１３から構成されており、変換部６１１は、パラメタ格納部６２１及びスカラ倍演算部６２２を含み、主要演算部６１２は、パラメタ格納部６２３及び楕円曲線加算部６２４を含み、逆変換部６１３は、パラメタ格納部６２５、還元部６２６及び離散対数計算部６２７を含む。
【０１１９】
３．２  各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール６０１で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
ｐ、ｑを素数とし、ｎ＝ｐ×ｑとする。ｐ、ｑは、逆変換部６１３により保持され、ｎは、それぞれ、変換部６１１及び主要演算部６１２により保持されている。
【０１２０】
楕円曲線Ｅの方程式を
ｙ2 ＝ｘ3 ＋Ａ×ｘ＋Ｂとする。ここで、Ａ、Ｂは、楕円曲線Ｅのパラメータである。
Ｇ＝（ｘg ，ｙg ）  ｍｏｄ  ｎを楕円曲線Ｅ上の点とする。すなわち、
ｙg 2 ＝ｘg 3 ＋Ａ×ｘg ＋Ｂ  ｍｏｄ  ｎを満たす。
Ａ、Ｂ、Ｇは、変換部６１１、主要演算部６１２、逆変換部６１３により保持される。
【０１２１】
楕円曲線Ｅの方程式をもつ体ＧＦ（ｐ）上の楕円曲線の点から構成される群をＥ（ＧＦ（ｐ））と表現する。同様に、楕円曲線Ｅの方程式をもつ体ＧＦ（ｑ）上の楕円曲線の点から構成される群をＥ（ＧＦ（ｑ））と表現する。
Ｚ／ｎＺ上の楕円曲線の群を
Ｅ（ＧＦ（ｐ））とＥ（ＧＦ（ｑ））との
直積Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））で表す。なお、Ｚ／ｎＺは体ではなく、環であるため、数学的には楕円曲線とは呼べないが、ここでは便宜上、その直積Ｚ／ｎＺ上の楕円曲線の群とよぶ。
【０１２２】
Ｅ（ＧＦ（ｐ））上の点Ｇp ＝（ｘgp，ｙgp）  ｍｏｄ  ｐと、
Ｅ（ＧＦ（ｑ））上の点Ｇq ＝（ｘgq，ｙgq）  ｍｏｄ  ｑとに対応するＺ／ｎＺ上の楕円曲線Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））の
点Ｇ＝（ｘg ，ｙg ）  ｍｏｄ  ｎについて、
ｘg を
ｘg ｍｏｄ  ｐ＝ｘgp及び
ｘg ｍｏｄ  ｑ＝ｘgqを満たす数と定義し、
ｙg を
ｙg ｍｏｄ  ｐ＝ｙgp及び
ｘg ｍｏｄ  ｑ＝ｘgqを満たす数と定義する。
【０１２３】
この定義より、
Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））上の点Ｇ＝（ｘg ，ｙg ）  ｍｏｄ  ｎに対応するＥ（ＧＦ（ｐ））上の点Ｇpを
Ｇp ＝（ｘgp，ｙgp ）  ｍｏｄ  ｐとし、
Ｅ（ＧＦ（ｑ））上の点Ｇq をＧq ＝（ｘgq，ｙgq）とすることで、
Ｅ（ＧＦ（ｐ）），Ｅ（ＧＦ（ｑ））をＥ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））の部分群とみなす。
【０１２４】
加算部６０１においては、上記楕円曲線Ｅは、ｍｏｄ  ｐでの楕円曲線の位数、すなわち、点の個数が、ｐであるとする。このような体ＧＦ（ｐ）上の楕円曲線をアノマラス（Anomalous）楕円曲線とよぶ。
さらに、ｍｏｄ  ｑでの楕円曲線の位数がｑである、すなわち、ＧＦ（ｑ）上でもアノマラス楕円曲線であるとする。
【０１２５】
このとき、Ｚ／ｎＺ上の楕円曲線を、スーパーアノマラス（Super-Anomalous）楕円曲線とよぶ。スーパーアノマラス楕円曲線については非特許文献４に詳しく説明されている。
このとき、Ｚ／ｎＺ上の楕円曲線の群はＥ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））であるので、楕円曲線の位数は、
ｎ（＝ｐ×ｑ）となる。
【０１２６】
入力データａ、ｂは、ｐ／２より小さい非負整数とする。
３．３  変換部６１１の構成
変換部６１１は、パラメタ格納部６２１及びスカラ倍演算部６２２から構成されている。
パラメタ格納部６２１は、ｎ、Ａ、Ｂ、Ｇを記憶している。
【０１２７】
スカラ倍演算部６２２は、呼び出し元のプログラムから、入力データａ、ｂを受け取り、受け取った入力データａ、ｂに対し、パラメータ格納部６２１に格納されているｎ、Ａ、Ｂ、Ｇを用いて、
Ｇa ＝ａ＊Ｇ  ｍｏｄ  ｎ  及び
Ｇb ＝ｂ＊Ｇ  ｍｏｄ  ｎを計算する。
【０１２８】
ここで、ａ＊Ｇは、Ｇをａ回、楕円曲線の加算により足し合わせて得られる点である。また、ａ＊Ｇ  ｍｏｄ  ｎは、ａ＊Ｇの各座標に、ｍｏｄ  ｎを施したものである。
スカラ倍演算部６２２は、計算結果Ｇa ，Ｇb を主要演算部６１２へ出力する。
３．４  主要演算部６１２の構成
主要演算部６１２は、パラメタ格納部６２３及び楕円曲線加算部６２４から構成されている。
【０１２９】
パラメタ格納部６２３は、ｎ、Ａ、Ｂを記憶している。
楕円曲線加算部６２４は、スカラ倍演算部６２２から計算結果Ｇa ，Ｇb を受け取り、パラメタ格納部６２３に記憶されているｎ、Ａ、Ｂを用いて、Ｇa及びＧb に対して、楕円曲線加算を実行して、
Ｇab  ＝Ｇa ＋Ｇb   ｍｏｄ  ｎ
を計算し、その計算結果Ｇabを逆変換部６１３へ出力する。
【０１３０】
３．５  逆変換部６１３の構成
逆変換部６１３は、パラメタ格納部６２５、還元部６２６及び離散対数計算部６２７から構成されている。
パラメタ格納部６２５は、ｐ，Ａ，Ｂ，Ｇ  ｍｏｄ  ｐを記憶している。
還元部６２６は、楕円曲線加算部６２４から計算結果Ｇabを受け取り、受け取ったＧabに対し、パラメタ格納部６２５に格納されているｐを用いて、
Ｇabp ＝Ｇab ｍｏｄ  ｐ  を計算し、計算結果を離散対数計算部６２７へ出力する。
【０１３１】
離散対数計算部６２７は、Ｇ  ｍｏｄ  ｐに対するＧabp の離散対数ｃ  ｍｏｄ  ｐを計算する。つまり、Ｇabp ＝ｃ＊Ｇ  ｍｏｄ  ｐのｃを求める。次に、ｃを呼び出し元のプログラムへ出力する。
ここで、楕円離散対数計算部６２７におけるｃは、アノマラス楕円曲線上の離散対数問題の解である。アノマラス楕円曲線上の離散対数問題を解く方法については、非特許文献３の８８〜９１ページに詳しく説明されている。計算方法はこの文献に記載されているため、ここでは説明を省略する。
【０１３２】
３．６  加算モジュール６０１の動作
加算モジュール６０１の動作について、図１９に示すフローチャートを用いて説明する。
スカラ倍演算部６２２は、呼び出し元のプログラムから、入力データａ、ｂを受け取り（ステップＳ３２１）、受け取った入力データａ、ｂに対し、パラメータ格納部６２１に格納されているｎ、Ａ、Ｂ、Ｇを用いて、
Ｇa ＝ａ＊Ｇ  ｍｏｄ  ｎ  及び
Ｇb ＝ｂ＊Ｇ  ｍｏｄ  ｎを計算する（ステップＳ３２２〜Ｓ３２３）。
【０１３３】
次に、楕円曲線加算部６２４は、
Ｇab  ＝Ｇa ＋Ｇb   ｍｏｄ  ｎを計算する（ステップＳ３２４）。
次に、還元部６２６は、
Ｇabp ＝Ｇab ｍｏｄ  ｐ  を計算し（ステップＳ３２５）、
離散対数計算部６２７は、Ｇ  ｍｏｄ  ｐに対するＧabp の離散対数ｃを計算し（ステップＳ３２６）、次に、ｃを呼び出し元のプログラムへ出力する（ステップＳ３２７）。
【０１３４】
３．７  加算モジュール６０１の動作検証
以下において、加算モジュール６０１が、入力データａ，ｂに対し、ａ＋ｂを計算して出力していることを検証する。
変換部６１１において、ａ，ｂに対し、
Ｇa ＝ａ＊Ｇ  ｍｏｄ  ｎ，
Ｇb ＝ｂ＊Ｇ  ｍｏｄ  ｎを計算し、
主要演算部６１２において、
Ｇａｂ＝Ｇａ＋Ｇｂ  ｍｏｄ  ｎを計算する。
【０１３５】
このとき、Ｇａｂ＝（ａ＋ｂ）＊Ｇ  ｍｏｄ  ｎを満たすことは明らかである。
逆変換部６１３において、まず、
Ｇabp ＝Ｇａｂ  ｍｏｄ  ｐを計算し、
Ｇ  ｍｏｄ  ｐに対するＧabp の離散対数ｃを求める。
すなわち、Ｇabp ＝ｃ＊Ｇ  ｍｏｄ  ｐが成り立つ。
【０１３６】
従って、ｃ＝ａ＋ｂ  ｍｏｄ  ｐであり、ａ＜ｐ／２，ｂ＜ｐ／２より、
ａ＋ｂ＜ｐであるため、加算モジュール６０１は、入力データａとｂとの加算結果ａ＋ｂを出力していることになる。
３．８  加算モジュール６０１の効果
加算モジュール６０１は、加算モジュール２４３及び、加算モジュール５０１と同様に、加算を行う値を変換しており、変換部６１１及び逆変換部６１３が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。  
【０１３７】
さらに、加算モジュール６０１は、主要演算部６１２において、楕円曲線加算を行っており、この楕円曲線加算という演算から加算モジュール６０１が整数の加算を実現していることを推測することは困難である。
従って、整数の加算を行う入力の値の隠蔽だけではなく、整数の加算という演算自体も隠蔽できることになり、加算モジュール６０１は、有効である。
【０１３８】
３．９  その他
加算モジュール６０１では、Ｚ／ｎＺ上の楕円曲線の群Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））のスカラ倍演算を変換部で行い、その部分群であるＥ（ＧＦ（ｐ））における離散対数問題を逆変換部で解いている。
ここで、もし、解析者がｐ，ｑは分からないが、変換部で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部のみが解析者により解析困難である場合である。
【０１３９】
この場合においても、ｎの大きさが素因数分解が困難なぐらい、例えば、１０２４ビットぐらいであれば、ｎの素因数分解結果であるｐ，ｑを得ることが困難になる。また、ｐ，ｑが得られなければ、Ｚ／ｎＺ上の楕円曲線の群Ｅ（ＧＦ（ｐ））×Ｅ（ＧＦ（ｑ））における離散対数問題を解くことが困難になる。
一般に群の大きさ（元の数）が１０２４ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール６０１では、ｐが既知の場合は逆変換モジュールにおける逆変換の方法によって、楕円曲線の群Ｅ（ＧＦ（ｐ））における離散対数問題を容易に解けるようになる。加算モジュール６０１における変換はこのように、ｐが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、第１の実施の形態と異なる。
【０１４０】
４．その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）加算モジュール２４３、５０１及び６０１において、２個の非負整数ａ及びｂの加算を行うとしているが、各加算モジュールは、３個、又はそれ以上の個数の非負整数の加算を行うとしてもよい。この場合に、各加算モジュールの変換部は、それぞれの非負整数を変換し、加算モジュール２４３及び５０１の主要演算部は、それぞれの変換結果に対して乗算を施し、加算モジュール６０１の主要演算部は、それぞれの変換結果に対して、楕円曲線加算を施す。
【０１４１】
（２）復号制御モジュール２４１において、鍵加算部分のみに加算モジュール２４３、５０１又は６０１を使用するとしているが、他の加算部分において、各加算モジュールを使用するとしてもよい。
（３）第１の実施の形態では、各加算モジュールを復号制御モジュール２４１に適用するとしているが、上記の暗号制御モジュール１４１や、他の暗号プログラム、復号プログラム、デジタル署名を生成する署名生成プログラムに適用するとしてもよい。このように、加算による演算が出現する情報処理演算であれば、どのようなものであっても適用することができる。
【０１４２】
（４）加算モジュール２４３、５０１及び６０１において、剰余整数環の乗法群、楕円曲線上の群を利用したが、その他の群を利用するとしてもよい。
また、加算モジュール２４３及び５０１においては、冪乗演算を行って、整数を変換し、加算モジュール６０１においては、楕円曲線のスカラ倍演算を行って、整数を変換するとしているが、その他の群の冪演算を行うことにより変換するとしてもよい。
【０１４３】
ここで、冪演算とは、群の基本演算、すなわち、剰余整数環では乗算を、また楕円曲線上の群では楕円曲線加算を、整数回行った結果を求める演算である。
したがって、剰余整数環の乗法群の冪演算は冪乗演算、楕円曲線上の群の冪演算は楕円曲線のスカラ倍演算である。
加算モジュール５０１では、剰余整数環Ｚ／ｎＺの乗法群の「部分群」である、剰余整数環Ｚ／ｐ2 Ｚの乗法群において離散対数問題を解いている。その他の群を使用する場合は、加算モジュール５０１と同様に逆変換部でその他の群の「部分群」において離散対数問題を解くとしてもよい。
【０１４４】
（５）加算モジュール２４３において、ｇは、ｍｏｄ  ｐi （ｉ＝１，２，…，ｋ）において原始元としたが、原始元でなくてもよい。
その場合は、ｇmi ＝１  ｍｏｄ  ｐi （ｍi ＞０）となるｍi に対し、
Ｌ＝ｍ1 ×ｍ2 ×…×ｍk とする。
（６）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を１個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
【０１４５】
（７）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Large Scale Integration：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。
【０１４６】
（８）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【０１４７】
（９）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０１４８】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【０１４９】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１０）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
（１１）以上説明したように、本発明によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。したがって、本技術を用いた難読化ソフトウェアをＩＣカード等の機器に組み込むことは有用である。
【産業上の利用可能性】
【０１５０】
本発明を構成する各装置、各方法及び各コンピュータプログラムは、情報を安全かつ確実に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置、各方法及び各コンピュータプログラムは、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
【図面の簡単な説明】
【０１５１】
【図１】コンテンツ配信システム１０の構成を示す構成図である。
【図２】コンテンツサーバ装置１００の構成を示すブロック図である。
【図３】コンテンツ配信プログラム１３１の内容を説明するフローチャートである。
【図４】コンテンツ暗号プログラム１３２の内容を説明するフローチャートである。
【図５】暗号プログラム１３３の構成を示す構成図である。
【図６】暗号制御モジュール１４１の内容を説明するフローチャートである。図７へ続く。
【図７】暗号制御モジュール１４１の内容を説明するフローチャートである。図６から続く。
【図８】パーソナルコンピュータ２００の構成を示すブロック図である。
【図９】コンテンツ受信プログラム２３１の内容を説明するフローチャートである。
【図１０】コンテンツ復号プログラム２３２の内容を説明するフローチャートである。
【図１１】復号プログラム２３４の構成を示す構成図である。
【図１２】復号制御モジュール２４１の内容を説明するフローチャートである。図１３へ続く。
【図１３】復号制御モジュール２４１の内容を説明するフローチャートである。図１２から続く。
【図１４】加算モジュール２４３の構成を示す構成図である。
【図１５】加算モジュール２４３による加算の動作を示すフローチャートである。
【図１６】加算モジュール５０１の構成を示す構成図である。
【図１７】加算モジュール５０１による加算の動作を示すフローチャートである。
【図１８】加算モジュール６０１の構成を示す構成図である。
【図１９】加算モジュール６０１による加算の動作を示すフローチャートである。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2005098795.tif 000021
【図２】
2005098795.tif 000022
【図３】
2005098795.tif 000023
【図４】
2005098795.tif 000024
【図５】
2005098795.tif 000025
【図６】
2005098795.tif 000026
【図７】
2005098795.tif 000027
【図８】
2005098795.tif 000028
【図９】
2005098795.tif 000029
【図１０】
2005098795.tif 000030
【図１１】
2005098795.tif 000031
【図１２】
2005098795.tif 000032
【図１３】
2005098795.tif 000033
【図１４】
2005098795.tif 000034
【図１５】
2005098795.tif 000035
【図１６】
2005098795.tif 000036
【図１７】
2005098795.tif 000037
【図１８】
2005098795.tif 000038
【図１９】
2005098795.tif 000039
【国際調査報告】
2005098795.tif 000040
2005098795.tif 000041
2005098795.tif 000042
2005098795.tif 000043
2005098795.tif 000044
2005098795.tif 000045