JPWO2005098795A1 - コンピュータシステム、コンピュータプログラム及び加算方法 - Google Patents

コンピュータシステム、コンピュータプログラム及び加算方法 Download PDF

Info

Publication number
JPWO2005098795A1
JPWO2005098795A1 JP2006511988A JP2006511988A JPWO2005098795A1 JP WO2005098795 A1 JPWO2005098795 A1 JP WO2005098795A1 JP 2006511988 A JP2006511988 A JP 2006511988A JP 2006511988 A JP2006511988 A JP 2006511988A JP WO2005098795 A1 JPWO2005098795 A1 JP WO2005098795A1
Authority
JP
Japan
Prior art keywords
group
addition
unit
instruction
mod
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
JP2006511988A
Other languages
English (en)
Inventor
山道 将人
将人 山道
布田 裕一
裕一 布田
大森 基司
基司 大森
啓樹 静谷
啓樹 静谷
雅浩 満保
雅浩 満保
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Publication of JPWO2005098795A1 publication Critical patent/JPWO2005098795A1/ja
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/723Modular exponentiation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

演算の内容を解析しにくくするコンピュータシステムを提供する。 べき乗演算部262は、入力データa、bに対し、 ga=gamod n,gb=gbmodnを計算する。 次に、乗算部264は、ga及びgbに対し、 gab=ga×gbmod nを計算する。 次に、離散対数計算部266は、 gab=gcimod pi(i=1,2,…,k)となるcimod pi−1を求める。次に、CRT部267は、中国人剰余定理(CRT)により、ci=c mod pi−1(i=1,2,…,k)となるcを求める。

Description

本発明は、コンピュータプログラムの解析を困難にする耐タンパーソフト技術に関する。
従来より、コンピュータプログラムに従って動作するプロセッサを備えるコンピュータシステムにおいて、秘密の通信や相手の認証をする際に、暗号プログラム(暗号ソフトウェア)が用いられる。
このとき、鍵や暗号アルゴリズムなどを含む暗号ソフトウェアをコンピュータシステムにそのまま実装すると、実装された暗号ソフトウェアを解析された場合に、簡単に不正な使用がされてしまう。このような問題点を解決するために、特許文献1は、演算及びデータの領域を変換することにより、元の演算及びデータを推測困難にする技術を開示している。
例えば、入力データa、bに対し、加算を施して、加算結果a+bを出力する加算プログラムを想定する。
予め、整数k、kを保持し、これらを用いて、入力データa、bを、それぞれt=k×a+k,t=k×b+kに変換する。ここで、「×」は、乗算を示す演算子である。
次にt,tに対して、tab=t+tを計算する。
さらに、tabに対して、c=(tab−2k)/kを計算する。
次に、演算結果cを出力する。
上記のように処理すると、
ab=t+t
=k×a+k+k×b+k
=k×(a+b)+2kより、
(tab−2k)/k=a+bが成り立つ。
従って、c=a+bとなり、加算プログラムによりaとbの加算結果が得られる。
米国特許第6594761号公報 日本国特許第3402441号特許公報 日本国特許第2760799号特許公報 岡本龍明、山本博資、「現代暗号」、産業図書(1997年) Henri Cohen,"A Course in Computational Algebraic Number Theory″,GTM 138,Springer−Verlag,1993,pp.19−20 I.Blake,G.Seroussi and N.Smart,"Elliptic Curves in Cryptography″,CAMBRIDGE UNIVERSITY PRESS,1999 N.Kunihiro and K.Koyama,"Two Discrete Log Algorithms for Super−Anomalous Elliptic Curves″,SCIS’99,1999,pp.869−874
上記従来例の方式によると、変換後の領域においても通常の加算と同じ加算を行うため、変換後の演算を解析することにより、変換前の演算が加算であることが推測される可能性があるという問題点がある。プログラムにおいて、加算をしている箇所が、解析者により知られた場合に、その前後の部分がさらに集中して解析されると、どのような変換を行っているか知られてしまう恐れがある。ゆえに、可能な限り、変換前の演算を知られないようにした方がよい。
本発明は、演算の内容を解析しにくくすることができるコンピュータシステム、コンピュータプログラム、加算方法及び記録媒体を提供することを目的とする。
上記目的を達成するために、本発明は、2個以上の整数を加算するコンピュータシステムであって、複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、前記記憶手段に記憶されている前記コンピュータプログラムから1個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、前記コンピュータプログラムは、各整数に、群G上の冪演算を施すことにより、群Gに属する元を生成する変換命令群と、生成された全ての前記元に対して、前記加算とは異なる群G上の基本演算を施して、演算値を生成する演算命令群と、群G又は群Gに真に含まれる部分群Sにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含むことを特徴とする。
この構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。
ここで、前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いるとしてもよい。
この構成によると、セキュリティ処理における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記群Gは、剰余整数環の乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。
ここで、前記群Gは、2つの素数p,qと正整数mを用いて表される
n=p×qに対し、Z/nZの乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。
ここで、前記部分群Sは、アノマラス楕円曲線の群であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。また、前記群Gは、二つのアノマラス楕円曲線の群の直積であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。
これらの構成によると、変換後に施される演算は、楕円曲線上の加算であり、整数の加算と異なるので、演算を隠蔽することができる。
ここで、さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求めるとしてもよい。
この構成によると、逆変換命令群による逆算が容易である。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。
この構成によると、暗号化又は復号における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。
この構成によると、デジタル署名又は署名検証における加算において、使用する値及び演算を隠蔽することができる。
以上説明したように、本発明の構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができ、その価値は大きい。
コンテンツ配信システム10の構成を示す構成図である。 コンテンツサーバ装置100の構成を示すブロック図である。 コンテンツ配信プログラム131の内容を説明するフローチャートである。 コンテンツ暗号プログラム132の内容を説明するフローチャートである。 暗号プログラム133の構成を示す構成図である。 暗号制御モジュール141の内容を説明するフローチャートである。図7へ続く。 暗号制御モジュール141の内容を説明するフローチャートである。図6から続く。 パーソナルコンピュータ200の構成を示すブロック図である。 コンテンツ受信プログラム231の内容を説明するフローチャートである。 コンテンツ復号プログラム232の内容を説明するフローチャートである。 復号プログラム234の構成を示す構成図である。 復号制御モジュール241の内容を説明するフローチャートである。図13へ続く。 復号制御モジュール241の内容を説明するフローチャートである。図12から続く。 加算モジュール243の構成を示す構成図である。 加算モジュール243による加算の動作を示すフローチャートである。 加算モジュール501の構成を示す構成図である。 加算モジュール501による加算の動作を示すフローチャートである。 加算モジュール601の構成を示す構成図である。 加算モジュール601による加算の動作を示すフローチャートである。
1.コンテンツ配信システム10
本発明に係る第1の実施の形態としてのコンテンツ配信システム10について説明する。
1.1 コンテンツ配信システム10の構成
コンテンツ配信システム10は、図1に示すように、コンテンツサーバ装置100、配信サーバ装置300a、放送装置300b、BD製造装置300c、パーソナルコンピュータ200、デジタル放送受信装置200a及びBD再生装置200bから構成されている。
コンテンツサーバ装置100は、映像データ及び音データから構成される映画のコンテンツを記憶しており、配信サーバ装置300aからの要求に応じて、記憶しているコンテンツを暗号化して暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線21を介して接続されている配信サーバ装置300aへ送信する。配信サーバ装置300aは、暗号化コンテンツを受信し、インターネット20を介して接続されているパーソナルコンピュータ200へ暗号化コンテンツを送信する。パーソナルコンピュータ200は、暗号化コンテンツを受信し、受信した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
また、コンテンツサーバ装置100は、上記と同様に、放送装置300bからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線22を介して接続されている放送装置300bへ送信する。放送装置300bは、暗号化コンテンツを受信し、受信した暗号化コンテンツを放送波に乗せて放送し、デジタル放送受信装置200aは、放送波を受信し、受信した放送波から前記暗号化コンテンツを抽出し、抽出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
さらに、コンテンツサーバ装置100は、上記と同様に、BD製造装置300cからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線23を介して接続されているBD製造装置300cへ送信する。BD製造装置300cは、暗号化コンテンツを受信し、受信した暗号化コンテンツを記録媒体400に書き込む。暗号化コンテンツが書き込まれた記録媒体400は、販売されて利用者が購入する。利用者により、記録媒体400が装着されたBD再生装置200bは、記録媒体400から前記暗号化コンテンツを読み出し、読み出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
1.2 コンテンツサーバ装置100
コンテンツサーバ装置100は、図2に示すように、マイクロプロセッサ101、ハードディスク部102、メモリ部103、入力制御部104、表示制御部105及び通信ユニット106などから構成されるコンピュータシステムである。入力制御部104及び表示制御部105は、それぞれ、キーボード107及びモニタ108に接続されている。また、通信ユニット106は、専用回線21、22及び23を介して、それぞれ、配信サーバ装置300a、放送装置300b及びBD製造装置300cに接続されている。
ハードディスク部102及びメモリ部103には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ101が、前記コンピュータプログラムに従って動作することにより、コンテンツサーバ装置100は、その一部の機能を達成する。
(1)ハードディスク部102
ハードディスク部102は、図2に示すように、コンテンツ120、コンテンツ121、コンテンツ122、・・・、鍵123、鍵124、鍵125、・・・、及び図示していないその他のコンピュータプログラムを記憶している。また、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・を記憶するための領域を備えている。
コンテンツ120、コンテンツ121、コンテンツ122、・・・は、それぞれ、鍵123、鍵124、鍵125、・・・、に対応しており、また、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・に対応している。
コンテンツ120、コンテンツ121、コンテンツ122、・・・は、それぞれ、映像データ及び音データが高効率に圧縮符号化された圧縮データである。
鍵123、鍵124、鍵125、・・・は、それぞれ、コンテンツ120、コンテンツ121、コンテンツ122、・・・に、暗号化アルゴリズムを施して、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・を生成する際に使用される暗号鍵であり、それぞれ、64ビット長のデータである。ここで、前記暗号化アルゴリズムについては、後述する。
暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・は、それぞれ、コンテンツ120、コンテンツ121、コンテンツ122、・・・に、前記暗号化アルゴリズムが施されて生成された暗号化データである。
(2)メモリ部103
メモリ部103は、図2に示すように、コンテンツ配信プログラム131、コンテンツ暗号プログラム132、暗号プログラム133、送信プログラム134及び図示していないその他のプログラムを記憶している。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ101により解読され実行される形式である。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
(a)コンテンツ配信プログラム131
コンテンツ配信プログラム131は、図3に示すように、命令コード群S101、S102、S103及びS104を含んで構成されており、これらの命令コード群は、コンテンツ配信プログラム131内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S101は、コンテンツサーバ装置100の管理者からコンテンツの指定を受け付け、又はコンテンツの配信先の装置からコンテンツの指定を受け取ることを示す複数の命令コードを含む。
命令コード群S102は、コンテンツの配信先の装置の指定を受け取ることを示す複数の命令コードを含む。
命令コード群S103は、受け付けた指定又は受け取った指定により示されるコンテンツを指定して、コンテンツ暗号プログラム132を呼び出し、次に、コンテンツ暗号プログラム132により生成された暗号化コンテンツを暗号化コンテンツ126としてハードディスク部102へ書き込むことを示す複数の命令コードを含む。
命令コード群S104は、受け取った指定による配信先の装置と、生成されハードディスク部102に書き込まれた暗号化コンテンツとを指定して、送信プログラム134を呼び出すことを示す複数の命令コードを含む。命令コード群S104が実行されることにより、受け取った指定により示される配信先の装置へ、生成された暗号化コンテンツが送信される。
(b)コンテンツ暗号プログラム132
コンテンツ暗号プログラム132は、図4に示すように、命令コード群S111、S112、S113、S114、S115及びS116を含んで構成されており、これらの命令コード群は、コンテンツ暗号プログラム132内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S111は、指定を受け付けたコンテンツ内におけるデータの位置をビットにより示す読出しポイントに、初期値として値「−64」を代入し、指定を受け付けたコンテンツに対応する鍵をハードディスク部102から読み出すことを示す複数の命令コードを含む。ここで、値「−64」を有する読出しポイントは、前記コンテンツ外の位置を示しているが、読出しポイントに初期値として値「−64」を代入するのは、後述する命令コード群S112の最初の実行において、読出しポイントが、前記コンテンツの先頭の位置を示すようにするためである。後述する命令コード群S112の最初の実行において、前記読出しポイントに64ビットが加算され、読出しポイントは、値「0」を有することになり、この読出しポイントは、前記コンテンツの先頭の位置を示している。
命令コード群S112は、前記読出しポイントに64ビットを加算し、次に、前記コンテンツにおいて、加算された読出しポイントにより示される位置から1ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記コンテンツ内であるならば、当該位置から1ブロック分のデータを読み出し、読出しポイントにより示される位置が前記コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含む。ここで、1ブロックは、64ビット長のデータである。
命令コード群S113は、命令コード群S112から終了コードが出力された場合には、コンテンツ暗号プログラム132による処理を終了し、終了コードが出力されていない場合には、次の命令コード群S114に制御を移すことを示す複数の命令コードを含む。
命令コード群S114は、読み出された前記鍵及び読み出された前記1ブロックを伴って、暗号プログラム133を呼び出すことを示す複数の命令コードを含む。
命令コード群S115は、暗号プログラム133により生成された1個の暗号化ブロックを、ハードディスク部102に対して、暗号化コンテンツ126の一部として書き込むことを示す複数の命令コードを含む。
命令コード群S116は、次に、制御を命令コード群S112へ移すことを示す命令コードを含む。
(c)暗号プログラム133
暗号プログラム133は、図5に示すように、暗号制御モジュール141、拡張鍵生成モジュール142及びローテーションモジュールA143、ローテーションモジュールB144、ローテーションモジュールC145及びローテーションモジュールD146から構成されている。
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ101により解読され実行される形式である。
(拡張鍵生成モジュール142)
拡張鍵生成モジュール142は、呼出し元のプログラムから、64ビットの鍵Kを受け取り、受け取った鍵Kを用いて、8個の拡張鍵K1、K2、K3、・・・、K8を生成し、生成した8個の拡張鍵K1、K2、K3、・・・、K8を呼出し元のプログラムへ出力する複数の命令コードを含む。
なお、拡張鍵を生成する方法については、特許文献3に記載されているため、説明を省略する。
(ローテーションモジュールA143)
ローテーションモジュールA143は、呼出し元のプログラムから32ビットのデータXを受け取り、データXに対して、Rot2(X)+X+1を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot2(X)は、32ビットのデータXを左へ2ビット循環シフトすることを示す。なお、32ビットのデータXを左へ2ビット循環シフトするとは、データXを最上位2ビットX1と最下位30ビットX2に分け、X2を、データXの最上位30ビットにシフトし、X1をデータXの最下位2ビットにシフトすることを言う。
(ローテーションモジュールB144)
ローテーションモジュールB144は、呼出し元のプログラムから32ビットのデータXを受け取り、データXに対して、Rot4(X)XOR Xを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot4(X)は、データXを左へ4ビット循環シフトすることを示し、XORは、排他的論理和を示す。なお、32ビットのデータXを左へ4ビット循環シフトするとは、データXを最上位4ビットX1と最下位28ビットX2に分け、X2を、データXの最上位28ビットにシフトし、X1をデータXの最下位4ビットにシフトすることを言う。
(ローテーションモジュールC145)
ローテーションモジュールC145は、呼出し元のプログラムから32ビットのデータXを受け取り、データXに対して、Rot8(X)XOR Xを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot8(X)は、データXを左へ8ビット循環シフトすることを示す。なお、32ビットのデータXを左へ8ビット循環シフトするとは、データXを最上位8ビットX1と最下位24ビットX2に分け、X2を、データXの最上位24ビットにシフトし、X1をデータXの最下位8ビットにシフトすることを言う。
(ローテーションモジュールD146)
ローテーションモジュールD146は、呼出し元のプログラムから32ビットのデータX及び32ビットのデータYを受け取り、データX及びデータYに対して、Rot16(X)+(X AND Y)を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot16(X)は、データXを、左へ16ビット循環シフトすることを示し、ANDは、論理積を示す。なお、32ビットのデータXを左へ16ビット循環シフトするとは、データXを最上位16ビットX1と最下位16ビットX2に分け、X2を、データXの最上位16ビットにシフトし、X1をデータXの最下位16ビットにシフトすることを言う。
(暗号制御モジュール141)
暗号制御モジュール141は、図6及び図7に示すように、命令コード群S121〜命令コード群S140を含んで構成されており、これらの命令コード群は、暗号制御モジュール141内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含む。
命令コード群S121は、暗号制御モジュール141の呼出し元のプログラムから、1ブロックの平文M及び鍵Kを受け取ることを示す複数の命令コードを含む。ここで、1ブロックは、64ビット長のデータである。
命令コード群S122は、受け取った鍵Kを伴って、拡張鍵生成モジュール142を呼び出すことを示す複数の命令コードを含む。命令コード群S122が実行されると、その結果、8個の拡張鍵K1、K2、K3、・・・、K8が生成される。
命令コード群S123は、データM1を定義する命令コード及びデータM2を定義する命令コードを含む。データM1は、受け取った平文Mの最上位の32ビットのデータであり、データM2は、受け取った平文Mの最下位の32ビットのデータである。
命令コード群S124は、データM1とデータM2とに排他的論理和XORを施し、その演算結果を変数TMP1に格納することを示す複数の命令コードを含む。
TMP1=M1 XOR M2
命令コード群S125は、変数TMP1と拡張鍵K1とに加算を施し、その演算結果を変数TMP2に格納することを示す複数の命令コードを含む。
TMP2=TMP1 + K1
命令コード群S126は、変数TMP2を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP3に格納することを示す複数の命令コードを含む。
TMP3=Rot2(TMP2)+TMP2+1
命令コード群S127は、変数TMP3を伴って、ローテーションモジュールB144を呼び出し、その演算結果を変数TMP4に格納することを示す複数の命令コードを含む。
TMP4=Rot4(TMP3) XOR TMP3
命令コード群S128は、変数TMP4とデータM1とに排他的論理和XORを施し、その演算結果を変数TMP5に格納することを示す複数の命令コードを含む。
TMP5=TMP4 XOR M1
命令コード群S129は、変数TMP5と拡張鍵K2とに加算を施し、その演算結果を変数TMP6に格納することを示す複数の命令コードを含む。
TMP6=TMP5 + K2
命令コード群S130は、変数TMP6を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP7に格納することを示す複数の命令コードを含む。
TMP7=Rot2(TMP6)+TMP6+1
命令コード群S131は、変数TMP7を伴って、ローテーションモジュールC145を呼び出し、その演算結果を変数TMP8に格納することを示す複数の命令コードを含む。
TMP8=Rot8(TMP7)XOR TMP7
命令コード群S132は、変数TMP8と拡張鍵K3とに加算を施し、その演算結果を変数TMP9に格納することを示す複数の命令コードを含む。
TMP9=TMP8 + K3
命令コード群S133は、変数TMP9を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP10に格納することを示す複数の命令コードを含む。
TMP10=Rot2(TMP9)+TMP9+1
命令コード群S134は、変数TMP7及び変数TMP10を伴って、ローテーションモジュールD146を呼び出し、その演算結果を変数TMP11に格納することを示す複数の命令コードを含む。
TMP11=Rot16(TMP10)+(TMP10 AND TMP7)
命令コード群S135は、変数TMP11と変数TMP1とに排他的論理和XORを施し、その演算結果を変数TMP12に格納することを示す複数の命令コードを含む。
TMP12=TMP11 XOR TMP1
命令コード群S136は、変数TMP12と拡張鍵K4とに加算を施し、その演算結果を変数TMP13に格納することを示す複数の命令コードを含む。
TMP13=TMP12 + K4
命令コード群S137は、変数TMP13を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP14に格納することを示す複数の命令コードを含む。
TMP14=Rot2(TMP13)+TMP13+1
命令コード群S138は、変数TMP14と変数TMP4とに排他的論理和XORを施し、その演算結果を変数TMP15に格納することを示す複数の命令コードを含む。
TMP15=TMP14 XOR TMP4
命令コード群S139は、変数TMP15と変数TMP12とに排他的論理和XORを施し、その演算結果を変数TMP16に格納することを示す複数の命令コードを含む。
TMP16=TMP15 XOR TMP12
命令コード群S140は、変数TMP15を最上位32ビット、変数TMP16を最下位32ビットとする64ビットの整数を暗号文Cとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。
(d)送信プログラム134
送信プログラム134(図示していない)は、複数の命令コードが並べられて構成されており、呼出し元のプログラムから、データの指定及び配信先の装置の指定を受け取り、通信ユニット106を制御して、指示されたデータを指定された配信先の装置へ送信することを示す複数の命令コードを含む。
1.3 パーソナルコンピュータ200
パーソナルコンピュータ200は、図8に示すように、マイクロプロセッサ201、ハードディスク部202、メモリ部203、入力制御部204、表示制御部205及び通信ユニット206などから構成されるコンピュータシステムである。入力制御部204及び表示制御部205は、それぞれ、キーボード707及びモニタ208に接続されている。また、通信ユニット206は、インターネット20に接続されている。
ハードディスク部202及びメモリ部203には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ201が、各コンピュータプログラムに従って動作することにより、パーソナルコンピュータ200は、その一部の機能を達成する。
なお、デジタル放送受信装置200a及びBD再生装置200bは、パーソナルコンピュータ200と同様の構成を有しているので、これらの装置についての説明を省略する。
(1)ハードディスク部202
ハードディスク部202は、図8に示すように、鍵222を記憶しており、また暗号化コンテンツ221を記憶するための領域を備えている。暗号化コンテンツ221と鍵222とは、対応している。
暗号化コンテンツ221及び鍵222は、それぞれ、コンテンツサーバ装置100のハードディスク部102に記憶されている暗号化コンテンツ126及び鍵123と同じものである。
(2)メモリ部203
メモリ部203は、図8に示すように、コンテンツ受信プログラム231、コンテンツ復号プログラム232、再生プログラム233、復号プログラム234及び加算プログラム235を記憶している。また、メモリ部203は、復号コンテンツ領域236を含む。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ201により解読され実行される形式である。
復号コンテンツ領域236には、暗号化コンテンツが復号されて生成された復号コンテンツが一時的に書き込まれる。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
(a)コンテンツ受信プログラム231
コンテンツ受信プログラム231は、図9に示すように、命令コード群S201、S202、S203及びS204を含んで構成されており、これらの命令コード群は、コンテンツ受信プログラム231内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S201は、パーソナルコンピュータ200の利用者からコンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群S202は、指定を受け付けた前記コンテンツを識別するコンテンツ識別子を取得し、取得したコンテンツ識別子を、通信ユニット206及びインターネット20を介して、配信サーバ装置300aへ送信することを示す複数の命令コードを含んでいる。
命令コード群S203は、配信サーバ装置300aから、インターネット20及び通信ユニット206を介して、暗号化コンテンツを受信することを示す複数の命令コードを含んでいる。ここで、受信する前記暗号化コンテンツは、前記コンテンツ識別子により識別されるものである。
命令コード群S204は、受信した暗号化コンテンツをハードディスク部202へ、暗号化コンテンツ221として書き込むことを示す複数の命令コードを含んでいる。
(b)コンテンツ復号プログラム232
コンテンツ復号プログラム232は、図10に示すように、命令コード群S211、S212、S213、S214、S215、S216、S217及びS218を含んで構成されており、これらの命令コード群は、コンテンツ復号プログラム232内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S211は、パーソナルコンピュータ200の利用者から、ハードディスク部202に記憶されているいずれかの暗号化コンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群S212は、メモリ部203に記憶されている再生プログラム233を呼び出すことを示す複数の命令コードを含んでいる。命令コード群S212が実行されることにより、その結果、コンテンツ復号プログラム232と再生プログラム233とが並行して実行される。
命令コード群S213は、指定を受け付けた暗号化コンテンツ内におけるデータの位置をビットにより示す読出しポイントに初期値として値「−64」を代入し、次に、指定を受け付けた暗号化コンテンツに対応する鍵をハードディスク部202から読み出すことを示す複数の命令コードを含んでいる。
命令コード群S214は、前記読出しポイントに64ビットを加算し、次に、前記暗号化コンテンツにおいて、加算された読出しポイントにより示される位置から1ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記暗号化コンテンツ内であるならば、当該位置から1ブロック分のデータを読み出し、読出しポイントにより示される位置が前記暗号化コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含んでいる。ここで、1ブロックは、64ビット長のデータである。
命令コード群S215は、命令コード群S214から終了コードが出力された場合には、コンテンツ復号プログラム232による処理を終了し、終了コードが出力されていない場合には、次の命令コード群S216に制御を移すことを示す複数の命令コードを含んでいる。
命令コード群S216は、読み出された前記鍵及び読み出された前記1ブロックを伴って、復号プログラム234を呼び出すことを示す複数の命令コードを含んでいる。
命令コード群S217は、復号プログラム234により生成された1個の復号ブロックを、メモリ部203の復号コンテンツ領域236へ書き込むことを示す複数の命令コードを含んでいる。
命令コード群S218は、次に制御を命令コード群S214へ移すことを示す命令コードを含んでいる。
(c)再生プログラム233
再生プログラム233は、図10に示すように、命令コード群S218、S219及びS220を含んで構成されており、これらの命令コード群は、再生プログラム233は内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S218は、メモリ部203が有する復号コンテンツ領域236から1個以上の復号ブロックを読み出すことを示す複数の命令コードを含んでいる。
命令コード群S219は、読み出した前記復号ブロックから映像データ及び音データを生成し、生成した映像データ及び音データを映像信号及び音信号に変換して、表示制御部205を介して、モニタ208へ出力することを示す複数の命令コードを含んでいる。
命令コード群S220は、次に制御を命令コード群S218へ移すことを示す命令コードを含んでいる。
(d)復号プログラム234
復号プログラム234は、図11に示すように、復号制御モジュール241、拡張鍵生成モジュール242、加算モジュール243、ローテーションモジュールA244、ローテーションモジュールB245、ローテーションモジュールC246及びローテーションモジュールD247から構成されている。
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ201により解読され実行される形式である。
拡張鍵生成モジュール242、ローテーションモジュールA244、ローテーションモジュールB245、ローテーションモジュールC246及びローテーションモジュールD247は、それぞれ、図5に示す拡張鍵生成モジュール142、ローテーションモジュールA143、ローテーションモジュールB144、ローテーションモジュールC145及びローテーションモジュールD146と同じであるので、説明を省略する。
(復号制御モジュール241)
復号制御モジュール241は、図12及び図13に示すように、命令コード群S221〜命令コード群S240を含んで構成されており、これらの命令コード群は、復号制御モジュール241内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含む。
命令コード群S221は、復号制御モジュール241の呼出し元のプログラムから、1ブロックの暗号文M及び鍵Kを受け取ることを示す複数の命令コードを含む。ここで、1ブロックは、64ビット長のデータである。
命令コード群S222は、受け取った鍵Kを伴って、拡張鍵生成モジュール242を呼び出すことを示す複数の命令コードを含む。命令コード群S222が実行されると、その結果、8個の拡張鍵K1、K2、K3、・・・、K8が生成される。
命令コード群S223は、データM1を定義する命令コード及びデータM2を定義する命令コードを含む。データM1は、受け取った暗号文Mの最上位の32ビットのデータであり、データM2は、受け取った暗号文Mの最下位の32ビットのデータである。
命令コード群S224は、データM1とデータM2とに排他的論理和XORを施し、その演算結果を変数TMP1に格納することを示す複数の命令コードを含む。
TMP1=M1 XOR M2
命令コード群S225は、変数TMP1と拡張鍵K1とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP2に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP2=TMP1 + K1が算出される。
命令コード群S226は、変数TMP2を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP3に格納することを示す複数の命令コードを含む。
TMP3=Rot2(TMP2)+TMP2+1
命令コード群S227は、変数TMP3を伴って、ローテーションモジュールB245を呼び出し、その演算結果を変数TMP4に格納することを示す複数の命令コードを含む。
TMP4=Rot4(TMP3) XOR TMP3
命令コード群S228は、変数TMP4とデータM1とに排他的論理和XORを施し、その演算結果を変数TMP5に格納することを示す複数の命令コードを含む。
TMP5=TMP4 XOR M1
命令コード群S229は、変数TMP5と拡張鍵K2とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP6に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP6=TMP5 + K2が算出される。
命令コード群S230は、変数TMP6を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP7に格納することを示す複数の命令コードを含む。
TMP7=Rot2(TMP6)+TMP6+1
命令コード群S231は、変数TMP7を伴って、ローテーションモジュールC246を呼び出し、その演算結果を変数TMP8に格納することを示す複数の命令コードを含む。
TMP8=Rot8(TMP7)XOR TMP7
命令コード群S232は、変数TMP8と拡張鍵K3とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP9に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP9=TMP8 + K3が算出される。
命令コード群S233は、変数TMP9を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP10に格納することを示す複数の命令コードを含む。
TMP10=Rot2(TMP9)+TMP9+1
命令コード群S234は、変数TMP7及び変数TMP10を伴って、ローテーションモジュールD247を呼び出し、その演算結果を変数TMP11に格納することを示す複数の命令コードを含む。
TMP11=Rot16(TMP10)+(TMP10 AND TMP7)
命令コード群S235は、変数TMP11と変数TMP1とに排他的論理和XORを施し、その演算結果を変数TMP12に格納することを示す複数の命令コードを含む。
TMP12=TMP11 XOR TMP1
命令コード群S236は、変数TMP12と拡張鍵K4とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP13に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP13=TMP12 + K4が算出される。
命令コード群S237は、変数TMP13を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP14に格納することを示す複数の命令コードを含む。
TMP14=Rot2(TMP13)+TMP13+1
命令コード群S238は、変数TMP14と変数TMP4とに排他的論理和XORを施し、その演算結果を変数TMP15に格納することを示す複数の命令コードを含む。
TMP15=TMP14 XOR TMP4
命令コード群S239は、変数TMP15と変数TMP12とに排他的論理和XORを施し、その演算結果を変数TMP16に格納することを示す複数の命令コードを含む。
TMP16=TMP15 XOR TMP12
命令コード群S240は、変数TMP15を最上位32ビット、変数TMP16を最下位32ビットとする64ビットの整数を復号文Cとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。
(加算モジュール243)
加算モジュール243は、入力データa、bに対し、データa+bを演算し、データa+bを出力するコンピュータプログラムであり、図14に示すように、変換部251、主要演算部252及び逆変換部253から構成されており、変換部251は、パラメタ格納部261及びべき乗演算部262を含み、主要演算部252は、パラメタ格納部263及び乗算部264を含み、逆変換部253は、パラメタ格納部265、離散対数計算部266及びCRT(Chinese Remainder Theorem)部267を含む。
(i)各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール243で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
(i=1,2,…,k)を、それぞれ異なる素数とする。例えば、p
(i=1,2,…,k)は、p=3、p=5、p=7、p=13、・・・などのように、それぞれ小さい素数である。また、例えば、k=17である。また、それらの積p×p×…×pをnとする。ここで、×は乗算を示す。nは、例えば、64ビット程度で表現できる数である。例えば、k=17のとき、n=p×p×…×p>264となる。
(i=1,2,…,k)は、逆変換部253により保持され、nは、変換部251及び主要演算部252により保持されている。
加算モジュール243では、mod nの整数から構成される剰余整数環Z/nZの乗法群の演算を用いる。gは、その乗法群に属する予め与えられた数であり、p(i=1,2,…,k)に対して原始元とする。
原始元とは、mを1,2,…と動かしたとき、初めてg=1 mod pとなるmの値が、p−1であるようなgである。
L=LCM(p−1,p−1,…,p−1)とする。ここで、LCM(p−1,p−1,…,p−1)は、p−1,p−1,…,p−1の最小公倍数(Least Common Multiple)を示す。
入力データa、bは、それぞれ、L/2より小さい非負整数とする。
(ii)変換部251の構成
変換部251は、パラメタ格納部261及びべき乗演算部262を含む。
パラメタ格納部261は、nとgとを格納している。
べき乗演算部262は、入力データa、bを受け取り、受け取った入力データa、bに対し、
=gmod n,及び
=gmod nを計算し、得られたg及びgを主要演算部252へ出力する。
(iii)主要演算部252の構成
主要演算部252は、パラメタ格納部263及び乗算部264を含む。
パラメタ格納部263は、nを格納している。
乗算部264は、べき乗演算部262からg及びgを受け取り、受け取ったg及びgに対し、
ab=g×gmod nを計算し、得られたgabを逆変換部253へ出力する。
(iv)逆変換部253の構成
逆変換部253は、パラメタ格納部265、離散対数計算部266及びCRT部267を含む。
パラメタ格納部265は、p、p、・・・、pを格納している。
離散対数計算部266は、乗算部264からgabを受け取り、
受け取ったgabについて、g mod pに対するgabmod p(i=1,2,…,k)の離散対数cmod p−1(i=1,2,…,k)を計算する。
つまり、gab=gcimod p(i=1,2,…,k)となるcmod p−1(i=1,2,…,k)を求める。次に、得られたcmod p−1(i=1,2,…,k)をCRT部267へ出力する。
離散対数計算部266によるci mod pi−1の計算方法については、様々なものがあるが、以下にその一例を示す。
wを1,2,3,…と順番に動かして、g=gabmod pとなるwを求める。そのwをcとする。なお、各pに関し、g,g,…,
(pi−2)mod piを計算した結果をテーブルとして保持し、そのテーブルの値から、gabmod pと一致するgを探す、としてもよい。
CRT部267は、離散対数計算部266からcmod p−1(i=1,2,…,k)を受け取り、中国人剰余定理(CRT)により、受け取ったcmod p−1(i=1,2,…,k)から、gabmod nのg mod nに対する離散対数c mod Lを求める。つまり、中国人剰余定理により、c=c mod p−1(i=1,2,…,k)となるcを求める。
離散対数cmod p−1(i=1,2,…,k)から、中国人剰余定理を用いて、c modL(ここで、L=LCM(p−1,p−1,…,p−1))を求めるには、次に示すようにする。
ここで、式が複雑になるのを避けるために、m=p−1とおく。
=m×(m −1mod(m/GCD(m1,)))×(c−c)+cを計算する。
ここで、GCD(a,b,c,・・・)は、a,b,c,・・・の最大公約数(Greatest Common Divisor)を示す。
次に、
=(m×m)×((m×m−1mod(m/GCD(m,m,m)))×(c−u)+u
を計算し、
=(m×m×m)×((m×m×m−1mod(m/GCD(m,m,m,m)))
×(c−u)+uを計算し、
以下順に、同様に、u,u,・・・,uk−1を計算し、
=(m×m×m×・・・×mk−1)×((m×m×m・・・×mk−1−1
mod(m/GCD(m,m,m,m・・・,mk−1)))×(c−uk−1)+uk−1を計算する。
次に、c=uとする。こうして、cが得られる。
なお、CRT部267よるc(i=1,2,...,k)から,
c mod p−1=cを満たすc mod Lを計算する方法については、非特許文献2に詳しく述べられている。
次に、CRT部267は、得られたcを加算モジュール243の呼び出し元のプログラムへ出力する。
(v)の加算モジュール243による加算の動作
加算モジュール243による加算の動作について、図15に示すフローチャートを用いて説明する。
べき乗演算部262は、加算モジュール243の呼び出し元のプログラムから入力データa、bを受け取り(ステップS301)、受け取った入力データa、bに対し、g=gmod n,g=gmod nを計算する(ステップS302〜S303)。
次に、乗算部264は、g及びgに対し、gab=g×gmod nを計算する(ステップS304)。
次に、離散対数計算部266は、gab=gcimod p(i=1,2,…,k)となるcmod p−1を求め(ステップS305)、CRT部267は、中国人剰余定理(CRT)により、c=c mod p−1(i=1,2,…,k)となるcを求め(ステップS306)、次に、得られたcを加算モジュール243の呼び出し元のプログラムへ出力する(ステップS307)。
(vi)加算モジュール243による加算の動作の検証
以下で、加算モジュール243が、入力データa、bに対し、データa+bを出力していることを検証する。
変換部251において、入力データa、bに対し、g=gmod n,
=gmod nを計算し、主要演算部252において、
ab=g×gmod nを計算する。このとき、gab=g(a+b)mod nを満たすことは明らかである。
逆変換部253では、gとgabからgab=gcimod p(i=1,2,…,k)を満たすcを計算し、その結果を用いて、c=cmod p−1を満たすc mod Lを計算する。このとき、cはgab=g
mod nを満たす。なぜなら、a+b=c mod Lより、g(a+b+c)=1 mod nとなるためである。したがって、g(a+b)mod n=gmod nを満たすため、a+b=c mod((p1−1)×(p2−1)×…×(pk−1))を満たす。a<L/2,b<L/2よりa+b<Lであるので、加算モジュール243は、入力データaと入力データbとの加算結果であるデータa+bを出力していることになる。
1.4 第1の実施の形態の効果
加算モジュール243は、加算を行う値を変換している。変換部251及び逆変換部253が解析困難な場合であっても、解析者はg,g,gabの値を知り、g,gからgabを計算する処理を知る可能性がある。このような場合であっても、変換後の値g,gから変換前の値a,bを推測することは困難である。さらに、加算モジュール243は、主要演算部252において、乗算を行っており、この乗算という演算から加算モジュール243が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、第1の実施の形態は有効である。
復号制御モジュール241は、鍵と他のデータとの加算において、加算モジュール243を利用している。そのため、加算の対象となる値、すわなち、鍵の値を推測することが困難になる。また、解析者が暗号アルゴリズムを知っている場合においても、鍵加算部分が、鍵との「加算」を行っていると推測しにくい。そのため、解析者が、暗号アルゴリズムの特徴である鍵加算部分をプログラム内から探し出す攻撃をした場合でも、鍵加算部分を探し出すことが困難なため、攻撃も困難となる。このように、解析者の攻撃が困難になり、本実施の形態は有効である。
2.変形例(1)
第1の実施の形態における加算モジュール243の代わりに、加算モジュール501を採用するとしてもよい。ここでは、加算モジュール501について説明する。
2.1 加算モジュール501の構成
加算モジュール501は、加算モジュール243と同様に、入力データa、bに対し、データa+bを演算し、データa+bを出力するコンピュータプログラムであり、図16に示すように、変換部511、主要演算部512及び逆変換部513から構成されており、変換部511は、パラメタ格納部521、乱数発生部522及びべき乗演算部523を含み、主要演算部512は、パラメタ格納部524及び乗算部525を含み、逆変換部513は、パラメタ格納部526、離散対数計算部527及び還元部528を含む。
2.2 各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール501で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
p,qを素数とし、n=p×qとする。p,qは、逆変換部513により保持され、nは、それぞれ、変換部511及び主要演算部512により保持される。
加算モジュール501では、mod nの整数から構成される剰余整数環Z/nZの乗法群の演算を用いる。gは、その乗法群に属する予め与えられた数でありg(p−1)mod pの位数がpである数とする。また、
=g(p−1)mod pと定義する。
入力データa、bは、p/2より小さい非負整数とする。
2.3 変換部511の構成
変換部511は、パラメタ格納部521、乱数発生部522及びべき乗演算部523から構成されている。
パラメタ格納部521は、nとgとを記憶している。
乱数発生部522は、n以下の乱数R1,R2を生成する。
べき乗演算部523は、入力データa、bに対し、乱数発生部522により生成された乱数R1,R2を用いて、
=g^(a+n×R1)mod n、
=g^(b+n×R2)mod nを計算する。
なお、本明細書において、記号「^」は、べき乗を示す演算子である。例えば、a^b=aである。本明細書において、表現上の都合により、a^b及び
の両方の表記を使い分けている。
次に、べき乗演算部523は、計算結果g,gを主要演算部512へ出力する。
2.4 主要演算部512の構成
主要演算部512は、パラメタ格納部524及び乗算部525から構成されている。
パラメタ格納部524は、nを記憶している。
乗算部525は、べき乗演算部523から計算結果g,gを受け取り、受け取ったg,gに対し、
ab=g×gmod nを計算し、計算結果gabを逆変換部513へ出力する。
2.5 逆変換部513の構成
逆変換部513は、パラメタ格納部526、離散対数計算部527及び還元部528から構成されている。
パラメタ格納部526は、pを格納している。
離散対数計算部527は、乗算部525から計算結果gabを受け取り、受け取ったgabに対し、パラメタ格納部526に格納されているpを用いて、
=gab (p−1)mod pを計算し、次に、cを還元部528へ出力する。
還元部528は、離散対数計算部527からcを受け取り、
受け取ったcを用いて、mod pにおけるgに対するcの離散対数cを計算し、計算して得られたcを、呼び出し元のプログラムへ出力する。
還元部528におけるcの計算方法については、特許文献2に詳しく述べられている。具体的には、以下のように行う。
に対し、c=(c−1)/(g−1)mod pとしてcを求める。
2.6 加算モジュール501による加算の動作
加算モジュール501による加算の動作について、図17に示すフローチャートを用いて説明する。
べき乗演算部523は、呼び出し元のプログラムから入力データa、bを受け取り(ステップS311)、乱数発生部522は、n以下の乱数R1,R2を生成し(ステップS312)、べき乗演算部523は、
=g^(a+n×R1)mod n、
=g^(b+n×R2)mod nを計算する(ステップS313〜S314)。
なお、本明細書において、記号「^」は、べき乗を示す演算子であり、例えば、a^b=aである。本明細書では、場合によって、「a^b」及び「a」の両方の表記を使い分けている。
次に、乗算部525は、gab=g×gmod nを計算する(ステップS315)。
次に、離散対数計算部527は、c=gab (p−1)mod pを計算し(ステップS316)、還元部528は、c=(c−1)/(g−1)mod pとしてcを求め(ステップS317)、次に、c(=a+b)を呼び出し元のプログラムへ出力する(ステップS318)。
2.7 加算モジュール501による加算の動作の検証
以下において、加算モジュール501が、入力データa、bに対し、a+bを出力していることを検証する。
変換部511において、a,bに対し、
=g^(a+n×R1)mod n、
=g^(b+n×R2)mod nを計算し、
主要演算部512において、gab=g×g mod nを計算する。このとき、gab=g^(a+b+n×(R1+R2))mod nを満たすことは明らかである。逆変換部513では、まず、
=gab (p−1)−g^(a+b+n×(R1+R2))mod pとなり、
=1 mod pより、
=1 mod pであるため、
=g (a+b)mod pとなる。
逆変換部513では、さらに、mod pにおけるgに対するcの離散対数cを求める。すなわち、
=g mod pが成り立つ。したがって、
c=a+b mod pであり、a<p/2,b<p/2より、a+b<pであるため、加算モジュール501は、入力データaとbの加算結果a+bを出力していることになる。
2.8 加算モジュール501による効果
加算モジュール501は、第1の実施の形態1の加算モジュール243と同様に、加算を行う値を変換しており、変換部511及び逆変換部513が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。さらに、加算モジュール501は、主要演算部512において、乗算を行っており、この乗算という演算から加算モジュール501が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、この発明は有効である。
2.9 その他(1)
加算モジュール501では、剰余整数環Z/nZの乗法群における冪乗演算を変換部511で行い、その乗法群の部分群である剰余整数環Z/pZの乗法群における離散対数問題を逆変換部513で解いている。ここで、もし、解析者がp,qは分からないが、変換部511で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部513のみが解析者により解析困難である場合である。この場合においても、nの大きさが素因数分解が困難なぐらい、例えば、1024ビットぐらいであれば、nの素因数分解結果であるp,qを得ることが困難になる。また、p,qが得られなければ、剰余整数環Z/nZの乗法群における離散対数問題を解くことが困難になる。一般に乗法群の大きさ(元の数)が1024ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール501では、pが既知の場合は逆変換部513における逆変換の方法によって、Z/pZの乗法群における離散対数問題を容易に解けるようになる。加算モジュール501における変換はこのように、pが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、加算モジュール2431と異なる。
2.10 その他(2)
加算モジュール501は、次のように構成してもよい。
p,qを素数とし、n=p×qとする。mは、正整数である。また、加算モジュール501では、mod nの整数から構成される剰余整数環Z/nZの乗法群の演算を用いる。gは、その乗法群に属する予め与えられた数でありg(p−1)mod pの位数がpである数とする。また、g=g(p−1)mod pと定義する。
離散対数計算部527は、乗算部525から計算結果gabを受け取り、受け取ったgabに対し、パラメタ格納部526に格納されているpを用いて、
=gab (p−1)mod pを計算し、次に、cを還元部528へ出力する。
還元部528は、離散対数計算部527からcを受け取り、
受け取ったcを用いて、mod pにおけるgに対するcの離散対数cを計算し、計算して得られたcを、呼び出し元のプログラムへ出力する。
3.変形例(2)
第1の実施の形態における加算モジュール243の代わりに、加算モジュール601を採用するとしてもよい。ここでは、加算モジュール601について説明する。加算モジュール601は、楕円曲線上のスカラ倍演算を利用している。楕円曲線については、非特許文献3に詳しく説明されている。
3.1 加算モジュール601の構成
加算モジュール601は、加算モジュール243と同様に、入力データa、bに対し、データa+bを演算し、データa+bを出力するコンピュータプログラムであり、図18に示すように、変換部611、主要演算部612及び逆変換部613から構成されており、変換部611は、パラメタ格納部621及びスカラ倍演算部622を含み、主要演算部612は、パラメタ格納部623及び楕円曲線加算部624を含み、逆変換部613は、パラメタ格納部625、還元部626及び離散対数計算部627を含む。
3.2 各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール601で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
p、qを素数とし、n=p×qとする。p、qは、逆変換部613により保持され、nは、それぞれ、変換部611及び主要演算部612により保持されている。
楕円曲線Eの方程式を
=x+A×x+Bとする。ここで、A、Bは、楕円曲線Eのパラメータである。
G=(x,y)mod nを楕円曲線E上の点とする。すなわち、
=x +A×x+B mod nを満たす。
A、B、Gは、変換部611、主要演算部612、逆変換部613により保持される。
楕円曲線Eの方程式をもつ体GF(p)上の楕円曲線の点から構成される群をE(GF(p))と表現する。同様に、楕円曲線Eの方程式をもつ体GF(q)上の楕円曲線の点から構成される群をE(GF(q))と表現する。
Z/nZ上の楕円曲線の群を
E(GF(p))とE(GF(q))との
直積E(GF(p))×E(GF(q))で表す。なお、Z/nZは体ではなく、環であるため、数学的には楕円曲線とは呼べないが、ここでは便宜上、その直積Z/nZ上の楕円曲線の群とよぶ。
E(GF(p))上の点G=(xgp,ygp)mod pと、
E(GF(q))上の点G=(xgq,ygq)mod qとに対応するZ/nZ上の楕円曲線E(GF(p))×E(GF(q))の
点G=(x,y)mod nについて、

mod p=xgp及び
mod q=xgqを満たす数と定義し、

mod p=ygp及び
mod q=xgqを満たす数と定義する。
この定義より、
E(GF(p))×E(GF(q))上の点G=(x,y)mod nに対応するE(GF(p))上の点G
=(xgp,ygp)mod pとし、
E(GF(q))上の点GをG=(xgq,ygq)とすることで、
E(GF(p)),E(GF(q))をE(GF(p))×E(GF(q))の部分群とみなす。
加算部601においては、上記楕円曲線Eは、mod pでの楕円曲線の位数、すなわち、点の個数が、pであるとする。このような体GF(p)上の楕円曲線をアノマラス(Anomalous)楕円曲線とよぶ。
さらに、mod qでの楕円曲線の位数がqである、すなわち、GF(q)上でもアノマラス楕円曲線であるとする。
このとき、Z/nZ上の楕円曲線を、スーパーアノマラス(Super−Anomalous)楕円曲線とよぶ。スーパーアノマラス楕円曲線については非特許文献4に詳しく説明されている。
このとき、Z/nZ上の楕円曲線の群はE(GF(p))×E(GF(q))であるので、楕円曲線の位数は、
n(=p×q)となる。
入力データa、bは、p/2より小さい非負整数とする。
3.3 変換部611の構成
変換部611は、パラメタ格納部621及びスカラ倍演算部622から構成されている。
パラメタ格納部621は、n、A、B、Gを記憶している。
スカラ倍演算部622は、呼び出し元のプログラムから、入力データa、bを受け取り、受け取った入力データa、bに対し、パラメータ格納部621に格納されているn、A、B、Gを用いて、
=a*G mod n及び
=b*G mod nを計算する。
ここで、a*Gは、Gをa回、楕円曲線の加算により足し合わせて得られる点である。また、a*G mod nは、a*Gの各座標に、mod nを施したものである。
スカラ倍演算部622は、計算結果G,Gを主要演算部612へ出力する。
3.4 主要演算部612の構成
主要演算部612は、パラメタ格納部623及び楕円曲線加算部624から構成されている。
パラメタ格納部623は、n、A、Bを記憶している。
楕円曲線加算部624は、スカラ倍演算部622から計算結果G,Gを受け取り、パラメタ格納部623に記憶されているn、A、Bを用いて、G及びGに対して、楕円曲線加算を実行して、
ab=G+Gmod n
を計算し、その計算結果Gabを逆変換部613へ出力する。
3.5 逆変換部613の構成
逆変換部613は、パラメタ格納部625、還元部626及び離散対数計算部627から構成されている。
パラメタ格納部625は、p,A,B,G mod pを記憶している。
還元部626は、楕円曲線加算部624から計算結果Gabを受け取り、受け取ったGabに対し、パラメタ格納部625に格納されているpを用いて、
abp=Gabmod pを計算し、計算結果を離散対数計算部627へ出力する。
離散対数計算部627は、G mod pに対するGabpの離散対数c mod pを計算する。つまり、Gabp=c*G mod pのcを求める。次に、cを呼び出し元のプログラムへ出力する。
ここで、楕円離散対数計算部627におけるcは、アノマラス楕円曲線上の離散対数問題の解である。アノマラス楕円曲線上の離散対数問題を解く方法については、非特許文献3の88〜91ページに詳しく説明されている。計算方法はこの文献に記載されているため、ここでは説明を省略する。
3.6 加算モジュール601の動作
加算モジュール601の動作について、図19に示すフローチャートを用いて説明する。
スカラ倍演算部622は、呼び出し元のプログラムから、入力データa、bを受け取り(ステップS321)、受け取った入力データa、bに対し、パラメータ格納部621に格納されているn、A、B、Gを用いて、
=a*G mod n及び
=b*G mod nを計算する(ステップS322〜S323)。
次に、楕円曲線加算部624は、
ab=G+Gmod nを計算する(ステップS324)。
次に、還元部626は、
abp=Gabmod pを計算し(ステップS325)、
離散対数計算部627は、G mod pに対するGabpの離散対数cを計算し(ステップS326)、次に、cを呼び出し元のプログラムへ出力する(ステップS327)。
3.7 加算モジュール601の動作検証
以下において、加算モジュール601が、入力データa,bに対し、a+bを計算して出力していることを検証する。
変換部611において、a,bに対し、
=a*G mod n,
=b*G mod nを計算し、
主要演算部612において、
Gab=Ga+Gb mod nを計算する。
このとき、Gab=(a+b)*G mod nを満たすことは明らかである。
逆変換部613において、まず、
abp=Gab mod pを計算し、
G mod pに対するGabpの離散対数cを求める。
すなわち、Gabp=c*G mod pが成り立つ。
従って、c=a+b mod pであり、a<p/2,b<p/2より、a+b<pであるため、加算モジュール601は、入力データaとbとの加算結果a+bを出力していることになる。
3.8 加算モジュール601の効果
加算モジュール601は、加算モジュール243及び、加算モジュール501と同様に、加算を行う値を変換しており、変換部611及び逆変換部613が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。
さらに、加算モジュール601は、主要演算部612において、楕円曲線加算を行っており、この楕円曲線加算という演算から加算モジュール601が整数の加算を実現していることを推測することは困難である。
従って、整数の加算を行う入力の値の隠蔽だけではなく、整数の加算という演算自体も隠蔽できることになり、加算モジュール601は、有効である。
3.9 その他
加算モジュール601では、Z/nZ上の楕円曲線の群E(GF(p))×E(GF(q))のスカラ倍演算を変換部で行い、その部分群であるE(GF(p))における離散対数問題を逆変換部で解いている。
ここで、もし、解析者がp,qは分からないが、変換部で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部のみが解析者により解析困難である場合である。
この場合においても、nの大きさが素因数分解が困難なぐらい、例えば、1024ビットぐらいであれば、nの素因数分解結果であるp,qを得ることが困難になる。また、p,qが得られなければ、Z/nZ上の楕円曲線の群E(GF(p))×E(GF(q))における離散対数問題を解くことが困難になる。
一般に群の大きさ(元の数)が1024ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール601では、pが既知の場合は逆変換モジュールにおける逆変換の方法によって、楕円曲線の群E(GF(p))における離散対数問題を容易に解けるようになる。加算モジュール601における変換はこのように、pが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、第1の実施の形態と異なる。
4.その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)加算モジュール243、501及び601において、2個の非負整数a及びbの加算を行うとしているが、各加算モジュールは、3個、又はそれ以上の個数の非負整数の加算を行うとしてもよい。この場合に、各加算モジュールの変換部は、それぞれの非負整数を変換し、加算モジュール243及び501の主要演算部は、それぞれの変換結果に対して乗算を施し、加算モジュール601の主要演算部は、それぞれの変換結果に対して、楕円曲線加算を施す。
(2)復号制御モジュール241において、鍵加算部分のみに加算モジュール243、501又は601を使用するとしているが、他の加算部分において、各加算モジュールを使用するとしてもよい。
(3)第1の実施の形態では、各加算モジュールを復号制御モジュール241に適用するとしているが、上記の暗号制御モジュール141や、他の暗号プログラム、復号プログラム、デジタル署名を生成する署名生成プログラムに適用するとしてもよい。このように、加算による演算が出現する情報処理演算であれば、どのようなものであっても適用することができる。
(4)加算モジュール243、501及び601において、剰余整数環の乗法群、楕円曲線上の群を利用したが、その他の群を利用するとしてもよい。
また、加算モジュール243及び501においては、冪乗演算を行って、整数を変換し、加算モジュール601においては、楕円曲線のスカラ倍演算を行って、整数を変換するとしているが、その他の群の冪演算を行うことにより変換するとしてもよい。
ここで、冪演算とは、群の基本演算、すなわち、剰余整数環では乗算を、また楕円曲線上の群では楕円曲線加算を、整数回行った結果を求める演算である。
したがって、剰余整数環の乗法群の冪演算は冪乗演算、楕円曲線上の群の冪演算は楕円曲線のスカラ倍演算である。
加算モジュール501では、剰余整数環Z/nZの乗法群の「部分群」である、剰余整数環Z/pZの乗法群において離散対数問題を解いている。その他の群を使用する場合は、加算モジュール501と同様に逆変換部でその他の群の「部分群」において離散対数問題を解くとしてもよい。
(5)加算モジュール243において、gは、mod p(i=1,2,…,k)において原始元としたが、原始元でなくてもよい。
その場合は、gmi=1 mod p(m>0)となるmに対し、
L=m×m×…×mとする。
(6)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を1個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
(7)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。
(8)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
(9)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(10)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
(11)以上説明したように、本発明によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。したがって、本技術を用いた難読化ソフトウェアをICカード等の機器に組み込むことは有用である。
本発明を構成する各装置、各方法及び各コンピュータプログラムは、情報を安全かつ確実に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置、各方法及び各コンピュータプログラムは、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
本発明は、コンピュータプログラムの解析を困難にする耐タンパーソフト技術に関する。
従来より、コンピュータプログラムに従って動作するプロセッサを備えるコンピュータシステムにおいて、秘密の通信や相手の認証をする際に、暗号プログラム(暗号ソフトウェア)が用いられる。
このとき、鍵や暗号アルゴリズムなどを含む暗号ソフトウェアをコンピュータシステムにそのまま実装すると、実装された暗号ソフトウェアを解析された場合に、簡単に不正な使用がされてしまう。このような問題点を解決するために、特許文献1は、演算及びデータの領域を変換することにより、元の演算及びデータを推測困難にする技術を開示している。
例えば、入力データa、bに対し、加算を施して、加算結果a+bを出力する加算プログラムを想定する。
予め、整数k1 、k2 を保持し、これらを用いて、入力データa、bを、それぞれta =k1×a+k2 ,tb =k1 ×b+k2 に変換する。ここで、「×」は、乗算を示す演算子である。
次にta ,tb に対して、tab=ta +tbを計算する。
さらに、tabに対して、c=(tab−2k2 )/k1 を計算する。
次に、演算結果cを出力する。
上記のように処理すると、
ab=ta +tb
=k1 ×a+k2 +k1 ×b+k2
=k1 ×(a+b)+2k2 より、
(tab−2k2 )/k1 =a+bが成り立つ。
従って、c=a+bとなり、加算プログラムによりaとbの加算結果が得られる。
米国特許第6594761号公報 日本国特許第3402441号特許公報 日本国特許第2760799号特許公報 岡本龍明、山本博資、「現代暗号」、産業図書(1997年) 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
上記従来例の方式によると、変換後の領域においても通常の加算と同じ加算を行うため、変換後の演算を解析することにより、変換前の演算が加算であることが推測される可能性があるという問題点がある。プログラムにおいて、加算をしている箇所が、解析者により知られた場合に、その前後の部分がさらに集中して解析されると、どのような変換を行っているか知られてしまう恐れがある。ゆえに、可能な限り、変換前の演算を知られないようにした方がよい。
本発明は、演算の内容を解析しにくくすることができるコンピュータシステム、コンピュータプログラム、加算方法及び記録媒体を提供することを目的とする。
上記目的を達成するために、本発明は、2個以上の整数を加算するコンピュータシステムであって、複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、前記記憶手段に記憶されている前記コンピュータプログラムから1個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、前記コンピュータプログラムは、各整数に、群G上の冪演算を施すことにより、群Gに属する元を生成する変換命令群と、生成された全ての前記元に対して、前記加算とは異なる群G上の基本演算を施して、演算値を生成する演算命令群と、群G又は群Gに真に含まれる部分群Sにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含むことを特徴とする。
この構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。
ここで、前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いるとしてもよい。
この構成によると、セキュリティ処理における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記群Gは、剰余整数環の乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。
ここで、前記群Gは、2つの素数p,qと正整数mを用いて表される
n=pm ×qに対し、Z/nZの乗法群であり、前記変換命令群は、各整数に冪乗を施し、演算命令群は、前記元に対して、乗算を施すとしてもよい。
この構成によると、変換後に施される演算は、乗算であり、加算と異なるので、演算を隠蔽することができる。
ここで、前記部分群Sは、アノマラス楕円曲線の群であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。また、前記群Gは、二つのアノマラス楕円曲線の群の直積であり、前記変換命令群は、各整数に楕円曲線上の乗算を施し、演算命令群は、前記元に対して、楕円曲線上の加算を施すとしてもよい。
これらの構成によると、変換後に施される演算は、楕円曲線上の加算であり、整数の加算と異なるので、演算を隠蔽することができる。
ここで、さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求めるとしてもよい。
この構成によると、逆変換命令群による逆算が容易である。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。
この構成によると、暗号化又は復号における加算において、使用する値及び演算を隠蔽することができる。
ここで、前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施すとしてもよい。
この構成によると、デジタル署名又は署名検証における加算において、使用する値及び演算を隠蔽することができる。
以上説明したように、本発明の構成によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができ、その価値は大きい。
1.コンテンツ配信システム10
本発明に係る第1の実施の形態としてのコンテンツ配信システム10について説明する。
1.1 コンテンツ配信システム10の構成
コンテンツ配信システム10は、図1に示すように、コンテンツサーバ装置100、配信サーバ装置300a、放送装置300b、BD製造装置300c、パーソナルコンピュータ200、デジタル放送受信装置200a及びBD再生装置200bから構成されている。
コンテンツサーバ装置100は、映像データ及び音データから構成される映画のコンテンツを記憶しており、配信サーバ装置300aからの要求に応じて、記憶しているコンテンツを暗号化して暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線21を介して接続されている配信サーバ装置300aへ送信する。配信サーバ装置300aは、暗号化コンテンツを受信し、インターネット20を介して接続されているパーソナルコンピュータ200へ暗号化コンテンツを送信する。パーソナルコンピュータ200は、暗号化コンテンツを受信し、受信した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
また、コンテンツサーバ装置100は、上記と同様に、放送装置300bからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線22を介して接続されている放送装置300bへ送信する。放送装置300bは、暗号化コンテンツを受信し、受信した暗号化コンテンツを放送波に乗せて放送し、デジタル放送受信装置200aは、放送波を受信し、受信した放送波から前記暗号化コンテンツを抽出し、抽出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
さらに、コンテンツサーバ装置100は、上記と同様に、BD製造装置300cからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線23を介して接続されているBD製造装置300cへ送信する。BD製造装置300cは、暗号化コンテンツを受信し、受信した暗号化コンテンツを記録媒体400に書き込む。暗号化コンテンツが書き込まれた記録媒体400は、販売されて利用者が購入する。利用者により、記録媒体400が装着されたBD再生装置200bは、記録媒体400から前記暗号化コンテンツを読み出し、読み出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
1.2 コンテンツサーバ装置100
コンテンツサーバ装置100は、図2に示すように、マイクロプロセッサ101、ハードディスク部102、メモリ部103、入力制御部104、表示制御部105及び通信ユニット106などから構成されるコンピュータシステムである。入力制御部104及び表示制御部105は、それぞれ、キーボード107及びモニタ108に接続されている。また、通信ユニット106は、専用回線21、22及び23を介して、それぞれ、配信サーバ装置300a、放送装置300b及びBD製造装置300cに接続されている。
ハードディスク部102及びメモリ部103には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ101が、前記コンピュータプログラムに従って動作することにより、コンテンツサーバ装置100は、その一部の機能を達成する。
(1)ハードディスク部102
ハードディスク部102は、図2に示すように、コンテンツ120、コンテンツ121、コンテンツ122、・・・、鍵123、鍵124、鍵125、・・・、及び図示していないその他のコンピュータプログラムを記憶している。また、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・を記憶するための領域を備えている。
コンテンツ120、コンテンツ121、コンテンツ122、・・・は、それぞれ、鍵123、鍵124、鍵125、・・・、に対応しており、また、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・に対応している。
コンテンツ120、コンテンツ121、コンテンツ122、・・・は、それぞれ、映像データ及び音データが高効率に圧縮符号化された圧縮データである。
鍵123、鍵124、鍵125、・・・は、それぞれ、コンテンツ120、コンテンツ121、コンテンツ122、・・・に、暗号化アルゴリズムを施して、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・を生成する際に使用される暗号鍵であり、それぞれ、64ビット長のデータである。ここで、前記暗号化アルゴリズムについては、後述する。
暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・は、それぞれ、コンテンツ120、コンテンツ121、コンテンツ122、・・・に、前記暗号化アルゴリズムが施されて生成された暗号化データである。
(2)メモリ部103
メモリ部103は、図2に示すように、コンテンツ配信プログラム131、コンテンツ暗号プログラム132、暗号プログラム133、送信プログラム134及び図示していないその他のプログラムを記憶している。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ101により解読され実行される形式である。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
(a)コンテンツ配信プログラム131
コンテンツ配信プログラム131は、図3に示すように、命令コード群S101、S102、S103及びS104を含んで構成されており、これらの命令コード群は、コンテンツ配信プログラム131内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S101は、コンテンツサーバ装置100の管理者からコンテンツの指定を受け付け、又はコンテンツの配信先の装置からコンテンツの指定を受け取ることを示す複数の命令コードを含む。
命令コード群S102は、コンテンツの配信先の装置の指定を受け取ることを示す複数の命令コードを含む。
命令コード群S103は、受け付けた指定又は受け取った指定により示されるコンテンツを指定して、コンテンツ暗号プログラム132を呼び出し、次に、コンテンツ暗号プログラム132により生成された暗号化コンテンツを暗号化コンテンツ126としてハードディスク部102へ書き込むことを示す複数の命令コードを含む。
命令コード群S104は、受け取った指定による配信先の装置と、生成されハードディスク部102に書き込まれた暗号化コンテンツとを指定して、送信プログラム134を呼び出すことを示す複数の命令コードを含む。命令コード群S104が実行されることにより、受け取った指定により示される配信先の装置へ、生成された暗号化コンテンツが送信される。
(b)コンテンツ暗号プログラム132
コンテンツ暗号プログラム132は、図4に示すように、命令コード群S111、S112、S113、S114、S115及びS116を含んで構成されており、これらの命令コード群は、コンテンツ暗号プログラム132内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S111は、指定を受け付けたコンテンツ内におけるデータの位置をビットにより示す読出しポイントに、初期値として値「−64」を代入し、指定を受け付けたコンテンツに対応する鍵をハードディスク部102から読み出すことを示す複数の命令コードを含む。ここで、値「−64」を有する読出しポイントは、前記コンテンツ外の位置を示しているが、読出しポイントに初期値として値「−64」を代入するのは、後述する命令コード群S112の最初の実行において、読出しポイントが、前記コンテンツの先頭の位置を示すようにするためである。後述する命令コード群S112の最初の実行において、前記読出しポイントに64ビットが加算され、読出しポイントは、値「0」を有することになり、この読出しポイントは、前記コンテンツの先頭の位置を示している。
命令コード群S112は、前記読出しポイントに64ビットを加算し、次に、前記コンテンツにおいて、加算された読出しポイントにより示される位置から1ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記コンテンツ内であるならば、当該位置から1ブロック分のデータを読み出し、読出しポイントにより示される位置が前記コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含む。ここで、1ブロックは、64ビット長のデータである。
命令コード群S113は、命令コード群S112から終了コードが出力された場合には、コンテンツ暗号プログラム132による処理を終了し、終了コードが出力されていない場合には、次の命令コード群S114に制御を移すことを示す複数の命令コードを含む。
命令コード群S114は、読み出された前記鍵及び読み出された前記1ブロックを伴って、暗号プログラム133を呼び出すことを示す複数の命令コードを含む。
命令コード群S115は、暗号プログラム133により生成された1個の暗号化ブロックを、ハードディスク部102に対して、暗号化コンテンツ126の一部として書き込むことを示す複数の命令コードを含む。
命令コード群S116は、次に、制御を命令コード群S112へ移すことを示す命令コードを含む。
(c)暗号プログラム133
暗号プログラム133は、図5に示すように、暗号制御モジュール141、拡張鍵生成モジュール142及びローテーションモジュールA143、ローテーションモジュールB144、ローテーションモジュールC145及びローテーションモジュールD146から構成されている。
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ101により解読され実行される形式である。
(拡張鍵生成モジュール142)
拡張鍵生成モジュール142は、呼出し元のプログラムから、64ビットの鍵Kを受け取り、受け取った鍵Kを用いて、8個の拡張鍵K1、K2、K3、・・・、K8を生成し、生成した8個の拡張鍵K1、K2、K3、・・・、K8を呼出し元のプログラムへ出力する複数の命令コードを含む。
なお、拡張鍵を生成する方法については、特許文献3に記載されているため、説明を省略する。
(ローテーションモジュールA143)
ローテーションモジュールA143は、呼出し元のプログラムから32ビットのデータXを受け取り、データXに対して、Rot2(X)+X+1を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot2(X)は、32ビットのデータXを左へ2ビット循環シフトすることを示す。なお、32ビットのデータXを左へ2ビット循環シフトするとは、データXを最上位2ビットX1と最下位30ビットX2に分け、X2を、データXの最上位30ビットにシフトし、X1をデータXの最下位2ビットにシフトすることを言う。
(ローテーションモジュールB144)
ローテーションモジュールB144は、呼出し元のプログラムから32ビットのデータXを受け取り、データXに対して、Rot4(X) XOR Xを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot4(X)は、データXを左へ4ビット循環シフトすることを示し、XORは、排他的論理和を示す。なお、32ビットのデータXを左へ4ビット循環シフトするとは、データXを最上位4ビットX1と最下位28ビットX2に分け、X2を、データXの最上位28ビットにシフトし、X1をデータXの最下位4ビットにシフトすることを言う。
(ローテーションモジュールC145)
ローテーションモジュールC145は、呼出し元のプログラムから32ビットのデータXを受け取り、データXに対して、Rot8(X) XOR Xを演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot8(X)は、データXを左へ8ビット循環シフトすることを示す。なお、32ビットのデータXを左へ8ビット循環シフトするとは、データXを最上位8ビットX1と最下位24ビットX2に分け、X2を、データXの最上位24ビットにシフトし、X1をデータXの最下位8ビットにシフトすることを言う。
(ローテーションモジュールD146)
ローテーションモジュールD146は、呼出し元のプログラムから32ビットのデータX及び32ビットのデータYを受け取り、データX及びデータYに対して、Rot16(X)+(X AND Y)を演算し、演算結果を呼出し元のプログラムへ出力する複数の命令コードを含む。
ここで、Rot16(X)は、データXを、左へ16ビット循環シフトすることを示し、ANDは、論理積を示す。なお、32ビットのデータXを左へ16ビット循環シフトするとは、データXを最上位16ビットX1と最下位16ビットX2に分け、X2を、データXの最上位16ビットにシフトし、X1をデータXの最下位16ビットにシフトすることを言う。
(暗号制御モジュール141)
暗号制御モジュール141は、図6及び図7に示すように、命令コード群S121〜命令コード群S140を含んで構成されており、これらの命令コード群は、暗号制御モジュール141内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含む。
命令コード群S121は、暗号制御モジュール141の呼出し元のプログラムから、1ブロックの平文M及び鍵Kを受け取ることを示す複数の命令コードを含む。ここで、1ブロックは、64ビット長のデータである。
命令コード群S122は、受け取った鍵Kを伴って、拡張鍵生成モジュール142を呼び出すことを示す複数の命令コードを含む。命令コード群S122が実行されると、その結果、8個の拡張鍵K1、K2、K3、・・・、K8が生成される。
命令コード群S123は、データM1を定義する命令コード及びデータM2を定義する命令コードを含む。データM1は、受け取った平文Mの最上位の32ビットのデータであり、データM2は、受け取った平文Mの最下位の32ビットのデータである。
命令コード群S124は、データM1とデータM2とに排他的論理和XORを施し、その演算結果を変数TMP1に格納することを示す複数の命令コードを含む。
TMP1=M1 XOR M2
命令コード群S125は、変数TMP1と拡張鍵K1とに加算を施し、その演算結果を変数TMP2に格納することを示す複数の命令コードを含む。
TMP2=TMP1 + K1
命令コード群S126は、変数TMP2を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP3に格納することを示す複数の命令コードを含む。
TMP3=Rot2(TMP2)+TMP2+1
命令コード群S127は、変数TMP3を伴って、ローテーションモジュールB144を呼び出し、その演算結果を変数TMP4に格納することを示す複数の命令コードを含む。
TMP4=Rot4(TMP3) XOR TMP3
命令コード群S128は、変数TMP4とデータM1とに排他的論理和XORを施し、その演算結果を変数TMP5に格納することを示す複数の命令コードを含む。
TMP5=TMP4 XOR M1
命令コード群S129は、変数TMP5と拡張鍵K2とに加算を施し、その演算結果を変数TMP6に格納することを示す複数の命令コードを含む。
TMP6=TMP5 + K2
命令コード群S130は、変数TMP6を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP7に格納することを示す複数の命令コードを含む。
TMP7=Rot2(TMP6)+TMP6+1
命令コード群S131は、変数TMP7を伴って、ローテーションモジュールC145を呼び出し、その演算結果を変数TMP8に格納することを示す複数の命令コードを含む。
TMP8=Rot8(TMP7) XOR TMP7
命令コード群S132は、変数TMP8と拡張鍵K3とに加算を施し、その演算結果を変数TMP9に格納することを示す複数の命令コードを含む。
TMP9=TMP8 + K3
命令コード群S133は、変数TMP9を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP10に格納することを示す複数の命令コードを含む。
TMP10=Rot2(TMP9)+TMP9+1
命令コード群S134は、変数TMP7及び変数TMP10を伴って、ローテーションモジュールD146を呼び出し、その演算結果を変数TMP11に格納することを示す複数の命令コードを含む。
TMP11=Rot16(TMP10)+(TMP10 AND TMP7)
命令コード群S135は、変数TMP11と変数TMP1とに排他的論理和XORを施し、その演算結果を変数TMP12に格納することを示す複数の命令コードを含む。
TMP12=TMP11 XOR TMP1
命令コード群S136は、変数TMP12と拡張鍵K4とに加算を施し、その演算結果を変数TMP13に格納することを示す複数の命令コードを含む。
TMP13=TMP12 + K4
命令コード群S137は、変数TMP13を伴って、ローテーションモジュールA143を呼び出し、その演算結果を変数TMP14に格納することを示す複数の命令コードを含む。
TMP14=Rot2(TMP13)+TMP13+1
命令コード群S138は、変数TMP14と変数TMP4とに排他的論理和XORを施し、その演算結果を変数TMP15に格納することを示す複数の命令コードを含む。
TMP15=TMP14 XOR TMP4
命令コード群S139は、変数TMP15と変数TMP12とに排他的論理和XORを施し、その演算結果を変数TMP16に格納することを示す複数の命令コードを含む。
TMP16=TMP15 XOR TMP12
命令コード群S140は、変数TMP15を最上位32ビット、変数TMP16を最下位32ビットとする64ビットの整数を暗号文Cとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。
(d)送信プログラム134
送信プログラム134(図示していない)は、複数の命令コードが並べられて構成されており、呼出し元のプログラムから、データの指定及び配信先の装置の指定を受け取り、通信ユニット106を制御して、指示されたデータを指定された配信先の装置へ送信することを示す複数の命令コードを含む。
1.3 パーソナルコンピュータ200
パーソナルコンピュータ200は、図8に示すように、マイクロプロセッサ201、ハードディスク部202、メモリ部203、入力制御部204、表示制御部205及び通信ユニット206などから構成されるコンピュータシステムである。入力制御部204及び表示制御部205は、それぞれ、キーボード707及びモニタ208に接続されている。また、通信ユニット206は、インターネット20に接続されている。
ハードディスク部202及びメモリ部203には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ201が、各コンピュータプログラムに従って動作することにより、パーソナルコンピュータ200は、その一部の機能を達成する。
なお、デジタル放送受信装置200a及びBD再生装置200bは、パーソナルコンピュータ200と同様の構成を有しているので、これらの装置についての説明を省略する。
(1)ハードディスク部202
ハードディスク部202は、図8に示すように、鍵222を記憶しており、また暗号化コンテンツ221を記憶するための領域を備えている。暗号化コンテンツ221と鍵222とは、対応している。
暗号化コンテンツ221及び鍵222は、それぞれ、コンテンツサーバ装置100のハードディスク部102に記憶されている暗号化コンテンツ126及び鍵123と同じものである。
(2)メモリ部203
メモリ部203は、図8に示すように、コンテンツ受信プログラム231、コンテンツ復号プログラム232、再生プログラム233、復号プログラム234及び加算プログラム235を記憶している。また、メモリ部203は、復号コンテンツ領域236を含む。これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ201により解読され実行される形式である。
復号コンテンツ領域236には、暗号化コンテンツが復号されて生成された復号コンテンツが一時的に書き込まれる。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、フローチャートにより各コンピュータプログラムの内容を表現し、フローチャートを用いて、各コンピュータプログラムを説明する。
(a)コンテンツ受信プログラム231
コンテンツ受信プログラム231は、図9に示すように、命令コード群S201、S202、S203及びS204を含んで構成されており、これらの命令コード群は、コンテンツ受信プログラム231内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S201は、パーソナルコンピュータ200の利用者からコンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群S202は、指定を受け付けた前記コンテンツを識別するコンテンツ識別子を取得し、取得したコンテンツ識別子を、通信ユニット206及びインターネット20を介して、配信サーバ装置300aへ送信することを示す複数の命令コードを含んでいる。
命令コード群S203は、配信サーバ装置300aから、インターネット20及び通信ユニット206を介して、暗号化コンテンツを受信することを示す複数の命令コードを含んでいる。ここで、受信する前記暗号化コンテンツは、前記コンテンツ識別子により識別されるものである。
命令コード群S204は、受信した暗号化コンテンツをハードディスク部202へ、暗号化コンテンツ221として書き込むことを示す複数の命令コードを含んでいる。
(b)コンテンツ復号プログラム232
コンテンツ復号プログラム232は、図10に示すように、命令コード群S211、S212、S213、S214、S215、S216、S217及びS218を含んで構成されており、これらの命令コード群は、コンテンツ復号プログラム232内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S211は、パーソナルコンピュータ200の利用者から、ハードディスク部202に記憶されているいずれかの暗号化コンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群S212は、メモリ部203に記憶されている再生プログラム233を呼び出すことを示す複数の命令コードを含んでいる。命令コード群S212が実行されることにより、その結果、コンテンツ復号プログラム232と再生プログラム233とが並行して実行される。
命令コード群S213は、指定を受け付けた暗号化コンテンツ内におけるデータの位置をビットにより示す読出しポイントに初期値として値「−64」を代入し、次に、指定を受け付けた暗号化コンテンツに対応する鍵をハードディスク部202から読み出すことを示す複数の命令コードを含んでいる。
命令コード群S214は、前記読出しポイントに64ビットを加算し、次に、前記暗号化コンテンツにおいて、加算された読出しポイントにより示される位置から1ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記暗号化コンテンツ内であるならば、当該位置から1ブロック分のデータを読み出し、読出しポイントにより示される位置が前記暗号化コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含んでいる。ここで、1ブロックは、64ビット長のデータである。
命令コード群S215は、命令コード群S214から終了コードが出力された場合には、コンテンツ復号プログラム232による処理を終了し、終了コードが出力されていない場合には、次の命令コード群S216に制御を移すことを示す複数の命令コードを含んでいる。
命令コード群S216は、読み出された前記鍵及び読み出された前記1ブロックを伴って、復号プログラム234を呼び出すことを示す複数の命令コードを含んでいる。
命令コード群S217は、復号プログラム234により生成された1個の復号ブロックを、メモリ部203の復号コンテンツ領域236へ書き込むことを示す複数の命令コードを含んでいる。
命令コード群S218は、次に制御を命令コード群S214へ移すことを示す命令コードを含んでいる。
(c)再生プログラム233
再生プログラム233は、図10に示すように、命令コード群S218、S219及びS220を含んで構成されており、これらの命令コード群は、再生プログラム233は内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
命令コード群S218は、メモリ部203が有する復号コンテンツ領域236から1個以上の復号ブロックを読み出すことを示す複数の命令コードを含んでいる。
命令コード群S219は、読み出した前記復号ブロックから映像データ及び音データを生成し、生成した映像データ及び音データを映像信号及び音信号に変換して、表示制御部205を介して、モニタ208へ出力することを示す複数の命令コードを含んでいる。
命令コード群S220は、次に制御を命令コード群S218へ移すことを示す命令コードを含んでいる。
(d)復号プログラム234
復号プログラム234は、図11に示すように、復号制御モジュール241、拡張鍵生成モジュール242、加算モジュール243、ローテーションモジュールA244、ローテーションモジュールB245、ローテーションモジュールC246及びローテーションモジュールD247から構成されている。
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ201により解読され実行される形式である。
拡張鍵生成モジュール242、ローテーションモジュールA244、ローテーションモジュールB245、ローテーションモジュールC246及びローテーションモジュールD247は、それぞれ、図5に示す拡張鍵生成モジュール142、ローテーションモジュールA143、ローテーションモジュールB144、ローテーションモジュールC145及びローテーションモジュールD146と同じであるので、説明を省略する。
(復号制御モジュール241)
復号制御モジュール241は、図12及び図13に示すように、命令コード群S221〜命令コード群S240を含んで構成されており、これらの命令コード群は、復号制御モジュール241内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含む。
命令コード群S221は、復号制御モジュール241の呼出し元のプログラムから、1ブロックの暗号文M及び鍵Kを受け取ることを示す複数の命令コードを含む。ここで、1ブロックは、64ビット長のデータである。
命令コード群S222は、受け取った鍵Kを伴って、拡張鍵生成モジュール242を呼び出すことを示す複数の命令コードを含む。命令コード群S222が実行されると、その結果、8個の拡張鍵K1、K2、K3、・・・、K8が生成される。
命令コード群S223は、データM1を定義する命令コード及びデータM2を定義する命令コードを含む。データM1は、受け取った暗号文Mの最上位の32ビットのデータであり、データM2は、受け取った暗号文Mの最下位の32ビットのデータである。
命令コード群S224は、データM1とデータM2とに排他的論理和XORを施し、その演算結果を変数TMP1に格納することを示す複数の命令コードを含む。
TMP1=M1 XOR M2
命令コード群S225は、変数TMP1と拡張鍵K1とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP2に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP2=TMP1 + K1が算出される。
命令コード群S226は、変数TMP2を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP3に格納することを示す複数の命令コードを含む。
TMP3=Rot2(TMP2)+TMP2+1
命令コード群S227は、変数TMP3を伴って、ローテーションモジュールB245を呼び出し、その演算結果を変数TMP4に格納することを示す複数の命令コードを含む。
TMP4=Rot4(TMP3) XOR TMP3
命令コード群S228は、変数TMP4とデータM1とに排他的論理和XORを施し、その演算結果を変数TMP5に格納することを示す複数の命令コードを含む。
TMP5=TMP4 XOR M1
命令コード群S229は、変数TMP5と拡張鍵K2とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP6に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP6=TMP5 + K2が算出される。
命令コード群S230は、変数TMP6を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP7に格納することを示す複数の命令コードを含む。
TMP7=Rot2(TMP6)+TMP6+1
命令コード群S231は、変数TMP7を伴って、ローテーションモジュールC246を呼び出し、その演算結果を変数TMP8に格納することを示す複数の命令コードを含む。
TMP8=Rot8(TMP7) XOR TMP7
命令コード群S232は、変数TMP8と拡張鍵K3とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP9に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP9=TMP8 + K3が算出される。
命令コード群S233は、変数TMP9を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP10に格納することを示す複数の命令コードを含む。
TMP10=Rot2(TMP9)+TMP9+1
命令コード群S234は、変数TMP7及び変数TMP10を伴って、ローテーションモジュールD247を呼び出し、その演算結果を変数TMP11に格納することを示す複数の命令コードを含む。
TMP11=Rot16(TMP10)+(TMP10 AND TMP7)
命令コード群S235は、変数TMP11と変数TMP1とに排他的論理和XORを施し、その演算結果を変数TMP12に格納することを示す複数の命令コードを含む。
TMP12=TMP11 XOR TMP1
命令コード群S236は、変数TMP12と拡張鍵K4とを伴って、加算モジュール243を呼び出し、その演算結果を変数TMP13に格納することを示す複数の命令コードを含む。この結果、加算モジュール243により、TMP13=TMP12 + K4が算出される。
命令コード群S237は、変数TMP13を伴って、ローテーションモジュールA244を呼び出し、その演算結果を変数TMP14に格納することを示す複数の命令コードを含む。
TMP14=Rot2(TMP13)+TMP13+1
命令コード群S238は、変数TMP14と変数TMP4とに排他的論理和XORを施し、その演算結果を変数TMP15に格納することを示す複数の命令コードを含む。
TMP15=TMP14 XOR TMP4
命令コード群S239は、変数TMP15と変数TMP12とに排他的論理和XORを施し、その演算結果を変数TMP16に格納することを示す複数の命令コードを含む。
TMP16=TMP15 XOR TMP12
命令コード群S240は、変数TMP15を最上位32ビット、変数TMP16を最下位32ビットとする64ビットの整数を復号文Cとして、呼出し元のプログラムへ出力することを示す複数の命令コードを含む。
(加算モジュール243)
加算モジュール243は、入力データa、bに対し、データa+bを演算し、データa+bを出力するコンピュータプログラムであり、図14に示すように、変換部251、主要演算部252及び逆変換部253から構成されており、変換部251は、パラメタ格納部261及びべき乗演算部262を含み、主要演算部252は、パラメタ格納部263及び乗算部264を含み、逆変換部253は、パラメタ格納部265、離散対数計算部266及びCRT(Chinese Remainder Theorem)部267を含む。
(i)各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール243で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
i (i=1,2,…,k)を、それぞれ異なる素数とする。例えば、pi
(i=1,2,…,k)は、p1 =3、p2 =5、p3 =7、p4 =13、・・・などのように、それぞれ小さい素数である。また、例えば、k=17である。また、それらの積p1×p2 ×…×pk をnとする。ここで、×は乗算を示す。nは、例えば、64ビット程度で表現できる数である。例えば、k=17のとき、n=p1×p2 ×…×pk >264となる。
i (i=1,2,…,k)は、逆変換部253により保持され、nは、変換部251及び主要演算部252により保持されている。
加算モジュール243では、mod nの整数から構成される剰余整数環Z/nZの乗法群の演算を用いる。gは、その乗法群に属する予め与えられた数であり、pi(i=1,2,…,k)に対して原始元とする。
原始元とは、mを1, 2, …と動かしたとき、初めてgm =1 mod pi となるmの値が、pi−1であるようなgである。
L=LCM(p1 −1,p2 −1,…,pk −1)とする。ここで、LCM(p1−1,p2 −1,…,pk −1)は、p1 −1,p2 −1,…,pk−1の最小公倍数(Least Common Multiple)を示す。
入力データa、bは、それぞれ、L/2より小さい非負整数とする。
(ii)変換部251の構成
変換部251は、パラメタ格納部261及びべき乗演算部262を含む。
パラメタ格納部261は、nとgとを格納している。
べき乗演算部262は、入力データa、bを受け取り、受け取った入力データa、bに対し、
a =ga mod n,及び
b =gb mod nを計算し、得られたga 及びgb を主要演算部252へ出力する。
(iii )主要演算部252の構成
主要演算部252は、パラメタ格納部263及び乗算部264を含む。
パラメタ格納部263は、nを格納している。
乗算部264は、べき乗演算部262からga 及びgb を受け取り、受け取ったga 及びgbに対し、
ab =ga ×gb mod nを計算し、得られたgabを逆変換部253へ出力する。
(iv)逆変換部253の構成
逆変換部253は、パラメタ格納部265、離散対数計算部266及びCRT部267を含む。
パラメタ格納部265は、p1 、p2 、・・・、pk を格納している。
離散対数計算部266は、乗算部264からgabを受け取り、
受け取ったgabについて、g mod pi に対するgab mod pi(i=1,2,…,k)の離散対数ci mod pi −1(i=1,2,…,k)を計算する。
つまり、gab =gci mod pi (i=1,2,…,k)となるcimod pi −1(i=1,2,…,k)を求める。次に、得られたci mod pi −1(i=1,2,…,k)をCRT部267へ出力する。
離散対数計算部266によるci mod pi−1の計算方法については、様々なものがあるが、以下にその一例を示す。
wを1,2,3,…と順番に動かして、gw =gab mod pi となるwを求める。そのwをciとする。なお、各pi に関し、g1 ,g2 ,…,
(pi-2) mod piを計算した結果をテーブルとして保持し、そのテーブルの値から、gab mod piと一致するgw を探す、としてもよい。
CRT部267は、離散対数計算部266からci mod pi −1(i=1,2,…,k)を受け取り、中国人剰余定理(CRT)により、受け取ったcimod pi −1(i=1,2,…,k)から、gab mod nのg mod nに対する離散対数c mod Lを求める。つまり、中国人剰余定理により、ci=c mod pi −1(i=1,2,…,k)となるcを求める。
離散対数ci mod pi −1(i=1,2,…,k)から、中国人剰余定理を用いて、c mod L (ここで、L=LCM(p1−1,p2 −1,…,pk −1))を求めるには、次に示すようにする。
ここで、式が複雑になるのを避けるために、mi =pi −1とおく。
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 を計算する。
次に、c=uk とする。こうして、cが得られる。
なお、CRT部267よるci (i=1,2,...,k)から,
c mod pi −1=ci を満たすc mod Lを計算する方法については、非特許文献2に詳しく述べられている。
次に、CRT部267は、得られたcを加算モジュール243の呼び出し元のプログラムへ出力する。
(v)加算モジュール243による加算の動作
加算モジュール243による加算の動作について、図15に示すフローチャートを用いて説明する。
べき乗演算部262は、加算モジュール243の呼び出し元のプログラムから入力データa、bを受け取り(ステップS301)、受け取った入力データa、bに対し、ga=ga mod n,gb =gb mod nを計算する(ステップS302〜S303)。
次に、乗算部264は、ga 及びgb に対し、gab =ga ×gb mod nを計算する(ステップS304)。
次に、離散対数計算部266は、gab =gci mod pi (i=1,2,…,k)となるcimod pi −1を求め(ステップS305)、CRT部267は、中国人剰余定理(CRT)により、ci =c mod pi−1(i=1,2,…,k)となるcを求め(ステップS306)、次に、得られたcを加算モジュール243の呼び出し元のプログラムへ出力する(ステップS307)。
(vi)加算モジュール243による加算の動作の検証
以下で、加算モジュール243が、入力データa、bに対し、データa+bを出力していることを検証する。
変換部251において、入力データa、bに対し、ga =ga mod n,
b =gb mod nを計算し、主要演算部252において、
ab=ga ×gb mod nを計算する。このとき、gab=g(a+b)mod nを満たすことは明らかである。
逆変換部253では、gとgabからgab=gci mod pi (i=1,2,…,k)を満たすciを計算し、その結果を用いて、c=ci mod pi −1を満たすc mod Lを計算する。このとき、cはgab=gc
mod nを満たす。なぜなら、a+b=c mod Lより、g(a+b-c) =1 mod nとなるためである。したがって、g(a+b) mod n=gcmod nを満たすため、a+b=c mod ((p1−1)×(p2−1)×…×(pk−1))を満たす。a<L/2,b<L/2よりa+b<Lであるので、加算モジュール243は、入力データaと入力データbとの加算結果であるデータa+bを出力していることになる。
1.4 第1の実施の形態の効果
加算モジュール243は、加算を行う値を変換している。変換部251及び逆変換部253が解析困難な場合であっても、解析者はga ,gb,gabの値を知り、ga ,gb からgabを計算する処理を知る可能性がある。このような場合であっても、変換後の値ga,gb から変換前の値a,bを推測することは困難である。さらに、加算モジュール243は、主要演算部252において、乗算を行っており、この乗算という演算から加算モジュール243が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、第1の実施の形態は有効である。
復号制御モジュール241は、鍵と他のデータとの加算において、加算モジュール243を利用している。そのため、加算の対象となる値、すわなち、鍵の値を推測することが困難になる。また、解析者が暗号アルゴリズムを知っている場合においても、鍵加算部分が、鍵との「加算」を行っていると推測しにくい。そのため、解析者が、暗号アルゴリズムの特徴である鍵加算部分をプログラム内から探し出す攻撃をした場合でも、鍵加算部分を探し出すことが困難なため、攻撃も困難となる。このように、解析者の攻撃が困難になり、本実施の形態は有効である。
2.変形例(1)
第1の実施の形態における加算モジュール243の代わりに、加算モジュール501を採用するとしてもよい。ここでは、加算モジュール501について説明する。
2.1 加算モジュール501の構成
加算モジュール501は、加算モジュール243と同様に、入力データa、bに対し、データa+bを演算し、データa+bを出力するコンピュータプログラムであり、図16に示すように、変換部511、主要演算部512及び逆変換部513から構成されており、変換部511は、パラメタ格納部521、乱数発生部522及びべき乗演算部523を含み、主要演算部512は、パラメタ格納部524及び乗算部525を含み、逆変換部513は、パラメタ格納部526、離散対数計算部527及び還元部528を含む。
2.2 各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール501で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
p,qを素数とし、n=p2 ×qとする。p,qは、逆変換部513により保持され、nは、それぞれ、変換部511及び主要演算部512により保持される。
加算モジュール501では、mod nの整数から構成される剰余整数環Z/nZの乗法群の演算を用いる。gは、その乗法群に属する予め与えられた数でありg(p-1) mod p2 の位数がpである数とする。また、
p =g(p-1) mod p2 と定義する。
入力データa、bは、p/2より小さい非負整数とする。
2.3 変換部511の構成
変換部511は、パラメタ格納部521、乱数発生部522及びべき乗演算部523から構成されている。
パラメタ格納部521は、nとgとを記憶している。
乱数発生部522は、n以下の乱数R1,R2を生成する。
べき乗演算部523は、入力データa、bに対し、乱数発生部522により生成された乱数R1,R2を用いて、
a =g^(a+n×R1) mod n、
b =g^(b+n×R2) mod nを計算する。
なお、本明細書において、記号「^」は、べき乗を示す演算子である。例えば、a^b=ab である。本明細書において、表現上の都合により、a^b及び
b の両方の表記を使い分けている。
次に、べき乗演算部523は、計算結果ga ,gb を主要演算部512へ出力する。
2.4 主要演算部512の構成
主要演算部512は、パラメタ格納部524及び乗算部525から構成されている。
パラメタ格納部524は、nを記憶している。
乗算部525は、べき乗演算部523から計算結果ga ,gb を受け取り、受け取ったga ,gbに対し、
ab=ga ×gb mod nを計算し、計算結果gabを逆変換部513へ出力する。
2.5 逆変換部513の構成
逆変換部513は、パラメタ格納部526、離散対数計算部527及び還元部528から構成されている。
パラメタ格納部526は、pを格納している。
離散対数計算部527は、乗算部525から計算結果gabを受け取り、受け取ったgabに対し、パラメタ格納部526に格納されているpを用いて、
p =gab (p-1) mod p2 を計算し、次に、cpを還元部528へ出力する。
還元部528は、離散対数計算部527からcp を受け取り、
受け取ったcp を用いて、mod p2 におけるgp に対するcp の離散対数cを計算し、計算して得られたcを、呼び出し元のプログラムへ出力する。
還元部528におけるcの計算方法については、特許文献2に詳しく述べられている。具体的には、以下のように行う。
p に対し、c=(cp −1)/(gp −1) mod pとしてcを求める。
2.6 加算モジュール501による加算の動作
加算モジュール501による加算の動作について、図17に示すフローチャートを用いて説明する。
べき乗演算部523は、呼び出し元のプログラムから入力データa、bを受け取り(ステップS311)、乱数発生部522は、n以下の乱数R1,R2を生成し(ステップS312)、べき乗演算部523は、
a =g^(a+n×R1)mod n、
b =g^(b+n×R2)mod nを計算する(ステップS313〜S314)。
なお、本明細書において、記号「^」は、べき乗を示す演算子であり、例えば、a^b=ab である。本明細書では、場合によって、「a^b」及び「ab」の両方の表記を使い分けている。
次に、乗算部525は、gab=ga ×gb mod nを計算する(ステップS315)。
次に、離散対数計算部527は、cp =gab (p-1) mod p2を計算し(ステップS316)、
還元部528は、c=(cp −1)/(gp −1) mod pとしてcを求め(ステップS317)、次に、c(=a+b)を呼び出し元のプログラムへ出力する(ステップS318)。
2.7 加算モジュール501による加算の動作の検証
以下において、加算モジュール501が、入力データa、bに対し、a+bを出力していることを検証する。
変換部511において、a,bに対し、
a =g^(a+n×R1)mod n、
b =g^(b+n×R2)mod nを計算し、
主要演算部512において、gab=ga ×gb mod nを計算する。このとき、gab=g^(a+b+n×(R1+R2))mod nを満たすことは明らかである。逆変換部513では、まず、
p =gab (p-1) =gp^(a+b+n×(R1+R2))mod p2 となり、
p p =1 mod p2 より、
p n =1 mod p2 であるため、
p =gp (a+b) mod p2 となる。
逆変換部513では、さらに、mod p2 におけるgp に対するcp の離散対数cを求める。すなわち、
p =gp c mod p2 が成り立つ。したがって、
c=a+b mod pであり、a<p/2,b<p/2より、a+b<pであるため、加算モジュール501は、入力データaとbの加算結果a+bを出力していることになる。
2.8 加算モジュール501による効果
加算モジュール501は、第1の実施の形態1の加算モジュール243と同様に、加算を行う値を変換しており、変換部511及び逆変換部513が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。さらに、加算モジュール501は、主要演算部512において、乗算を行っており、この乗算という演算から加算モジュール501が加算を実現していることを推測することは困難である。したがって、加算を行う入力の値の隠蔽だけではなく、加算という演算自体も隠蔽できることになり、この発明は有効である。
2.9 その他(1)
加算モジュール501では、剰余整数環Z/nZの乗法群における冪乗演算を変換部511で行い、その乗法群の部分群である剰余整数環Z/p2 Zの乗法群における離散対数問題を逆変換部513で解いている。ここで、もし、解析者がp,qは分からないが、変換部511で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部513のみが解析者により解析困難である場合である。この場合においても、nの大きさが素因数分解が困難なぐらい、例えば、1024ビットぐらいであれば、nの素因数分解結果であるp,qを得ることが困難になる。また、p,qが得られなければ、剰余整数環Z/nZの乗法群における離散対数問題を解くことが困難になる。一般に乗法群の大きさ(元の数)が1024ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール501では、pが既知の場合は逆変換部513における逆変換の方法によって、Z/p2Zの乗法群における離散対数問題を容易に解けるようになる。加算モジュール501における変換はこのように、pが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、加算モジュール2431と異なる。
2.10 その他(2)
加算モジュール501は、次のように構成してもよい。
p,qを素数とし、n=pm ×qとする。mは、正整数である。また、加算モジュール501では、mod nの整数から構成される剰余整数環Z/nZの乗法群の演算を用いる。gは、その乗法群に属する予め与えられた数でありg(p-1) mod pm の位数がpである数とする。また、gp =g(p-1) mod pmと定義する。
離散対数計算部527は、乗算部525から計算結果gabを受け取り、受け取ったgabに対し、パラメタ格納部526に格納されているpを用いて、
p =gab (p-1) mod pm を計算し、次に、cpを還元部528へ出力する。
還元部528は、離散対数計算部527からcp を受け取り、
受け取ったcp を用いて、mod pm におけるgp に対するcp の離散対数cを計算し、計算して得られたcを、呼び出し元のプログラムへ出力する。
3.変形例(2)
第1の実施の形態における加算モジュール243の代わりに、加算モジュール601を採用するとしてもよい。ここでは、加算モジュール601について説明する。加算モジュール601は、楕円曲線上のスカラ倍演算を利用している。楕円曲線については、非特許文献3に詳しく説明されている。
3.1 加算モジュール601の構成
加算モジュール601は、加算モジュール243と同様に、入力データa、bに対し、データa+bを演算し、データa+bを出力するコンピュータプログラムであり、図18に示すように、変換部611、主要演算部612及び逆変換部613から構成されており、変換部611は、パラメタ格納部621及びスカラ倍演算部622を含み、主要演算部612は、パラメタ格納部623及び楕円曲線加算部624を含み、逆変換部613は、パラメタ格納部625、還元部626及び離散対数計算部627を含む。
3.2 各種パラメータ及び記号の定義、並びに入力データの条件
ここで、加算モジュール601で使用する各種パラメータ及び記号の定義、並びに入力データの条件について説明する。
p、qを素数とし、n=p×qとする。p、qは、逆変換部613により保持され、nは、それぞれ、変換部611及び主要演算部612により保持されている。
楕円曲線Eの方程式を
2 =x3 +A×x+Bとする。ここで、A、Bは、楕円曲線Eのパラメータである。
G=(xg ,yg ) mod nを楕円曲線E上の点とする。すなわち、
g 2 =xg 3 +A×xg +B mod nを満たす。
A、B、Gは、変換部611、主要演算部612、逆変換部613により保持される。
楕円曲線Eの方程式をもつ体GF(p)上の楕円曲線の点から構成される群をE(GF(p))と表現する。同様に、楕円曲線Eの方程式をもつ体GF(q)上の楕円曲線の点から構成される群をE(GF(q))と表現する。
Z/nZ上の楕円曲線の群を
E(GF(p))とE(GF(q))との
直積E(GF(p))×E(GF(q))で表す。なお、Z/nZは体ではなく、環であるため、数学的には楕円曲線とは呼べないが、ここでは便宜上、その直積Z/nZ上の楕円曲線の群とよぶ。
E(GF(p))上の点Gp =(xgp,ygp) mod pと、
E(GF(q))上の点Gq =(xgq,ygq) mod qとに対応するZ/nZ上の楕円曲線E(GF(p))×E(GF(q))の
点G=(xg ,yg ) mod nについて、
g
g mod p=xgp及び
g mod q=xgqを満たす数と定義し、
g
g mod p=ygp及び
g mod q=xgqを満たす数と定義する。
この定義より、
E(GF(p))×E(GF(q))上の点G=(xg ,yg ) mod nに対応するE(GF(p))上の点Gp
p =(xgp,ygp ) mod pとし、
E(GF(q))上の点Gq をGq =(xgq,ygq)とすることで、
E(GF(p)),E(GF(q))をE(GF(p))×E(GF(q))の部分群とみなす。
加算部601においては、上記楕円曲線Eは、mod pでの楕円曲線の位数、すなわち、点の個数が、pであるとする。このような体GF(p)上の楕円曲線をアノマラス(Anomalous)楕円曲線とよぶ。
さらに、mod qでの楕円曲線の位数がqである、すなわち、GF(q)上でもアノマラス楕円曲線であるとする。
このとき、Z/nZ上の楕円曲線を、スーパーアノマラス(Super-Anomalous)楕円曲線とよぶ。スーパーアノマラス楕円曲線については非特許文献4に詳しく説明されている。
このとき、Z/nZ上の楕円曲線の群はE(GF(p))×E(GF(q))であるので、楕円曲線の位数は、
n(=p×q)となる。
入力データa、bは、p/2より小さい非負整数とする。
3.3 変換部611の構成
変換部611は、パラメタ格納部621及びスカラ倍演算部622から構成されている。
パラメタ格納部621は、n、A、B、Gを記憶している。
スカラ倍演算部622は、呼び出し元のプログラムから、入力データa、bを受け取り、受け取った入力データa、bに対し、パラメータ格納部621に格納されているn、A、B、Gを用いて、
a =a*G mod n 及び
b =b*G mod nを計算する。
ここで、a*Gは、Gをa回、楕円曲線の加算により足し合わせて得られる点である。また、a*G mod nは、a*Gの各座標に、mod nを施したものである。
スカラ倍演算部622は、計算結果Ga ,Gb を主要演算部612へ出力する。
3.4 主要演算部612の構成
主要演算部612は、パラメタ格納部623及び楕円曲線加算部624から構成されている。
パラメタ格納部623は、n、A、Bを記憶している。
楕円曲線加算部624は、スカラ倍演算部622から計算結果Ga ,Gb を受け取り、パラメタ格納部623に記憶されているn、A、Bを用いて、Ga及びGb に対して、楕円曲線加算を実行して、
ab =Ga +Gb mod n
を計算し、その計算結果Gabを逆変換部613へ出力する。
3.5 逆変換部613の構成
逆変換部613は、パラメタ格納部625、還元部626及び離散対数計算部627から構成されている。
パラメタ格納部625は、p,A,B,G mod pを記憶している。
還元部626は、楕円曲線加算部624から計算結果Gabを受け取り、受け取ったGabに対し、パラメタ格納部625に格納されているpを用いて、
abp =Gab mod p を計算し、計算結果を離散対数計算部627へ出力する。
離散対数計算部627は、G mod pに対するGabp の離散対数c mod pを計算する。つまり、Gabp =c*G mod pのcを求める。次に、cを呼び出し元のプログラムへ出力する。
ここで、楕円離散対数計算部627におけるcは、アノマラス楕円曲線上の離散対数問題の解である。アノマラス楕円曲線上の離散対数問題を解く方法については、非特許文献3の88〜91ページに詳しく説明されている。計算方法はこの文献に記載されているため、ここでは説明を省略する。
3.6 加算モジュール601の動作
加算モジュール601の動作について、図19に示すフローチャートを用いて説明する。
スカラ倍演算部622は、呼び出し元のプログラムから、入力データa、bを受け取り(ステップS321)、受け取った入力データa、bに対し、パラメータ格納部621に格納されているn、A、B、Gを用いて、
a =a*G mod n 及び
b =b*G mod nを計算する(ステップS322〜S323)。
次に、楕円曲線加算部624は、
ab =Ga +Gb mod nを計算する(ステップS324)。
次に、還元部626は、
abp =Gab mod p を計算し(ステップS325)、
離散対数計算部627は、G mod pに対するGabp の離散対数cを計算し(ステップS326)、次に、cを呼び出し元のプログラムへ出力する(ステップS327)。
3.7 加算モジュール601の動作検証
以下において、加算モジュール601が、入力データa,bに対し、a+bを計算して出力していることを検証する。
変換部611において、a,bに対し、
a =a*G mod n,
b =b*G mod nを計算し、
主要演算部612において、
Gab=Ga+Gb mod nを計算する。
このとき、Gab=(a+b)*G mod nを満たすことは明らかである。
逆変換部613において、まず、
abp =Gab mod pを計算し、
G mod pに対するGabp の離散対数cを求める。
すなわち、Gabp =c*G mod pが成り立つ。
従って、c=a+b mod pであり、a<p/2,b<p/2より、
a+b<pであるため、加算モジュール601は、入力データaとbとの加算結果a+bを出力していることになる。
3.8 加算モジュール601の効果
加算モジュール601は、加算モジュール243及び、加算モジュール501と同様に、加算を行う値を変換しており、変換部611及び逆変換部613が解析困難な場合に、変換後の値から変換前の値を推測することは困難である。
さらに、加算モジュール601は、主要演算部612において、楕円曲線加算を行っており、この楕円曲線加算という演算から加算モジュール601が整数の加算を実現していることを推測することは困難である。
従って、整数の加算を行う入力の値の隠蔽だけではなく、整数の加算という演算自体も隠蔽できることになり、加算モジュール601は、有効である。
3.9 その他
加算モジュール601では、Z/nZ上の楕円曲線の群E(GF(p))×E(GF(q))のスカラ倍演算を変換部で行い、その部分群であるE(GF(p))における離散対数問題を逆変換部で解いている。
ここで、もし、解析者がp,qは分からないが、変換部で冪乗演算を行っていることを解析できた場合を考える。このケースは、すなわち、逆変換部のみが解析者により解析困難である場合である。
この場合においても、nの大きさが素因数分解が困難なぐらい、例えば、1024ビットぐらいであれば、nの素因数分解結果であるp,qを得ることが困難になる。また、p,qが得られなければ、Z/nZ上の楕円曲線の群E(GF(p))×E(GF(q))における離散対数問題を解くことが困難になる。
一般に群の大きさ(元の数)が1024ビットの数のように大きい場合は、それ上の離散対数問題も困難になる。加算モジュール601では、pが既知の場合は逆変換モジュールにおける逆変換の方法によって、楕円曲線の群E(GF(p))における離散対数問題を容易に解けるようになる。加算モジュール601における変換はこのように、pが既知であれば逆変換が容易であるが、既知でなければ困難であることを利用している点が、第1の実施の形態と異なる。
4.その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)加算モジュール243、501及び601において、2個の非負整数a及びbの加算を行うとしているが、各加算モジュールは、3個、又はそれ以上の個数の非負整数の加算を行うとしてもよい。この場合に、各加算モジュールの変換部は、それぞれの非負整数を変換し、加算モジュール243及び501の主要演算部は、それぞれの変換結果に対して乗算を施し、加算モジュール601の主要演算部は、それぞれの変換結果に対して、楕円曲線加算を施す。
(2)復号制御モジュール241において、鍵加算部分のみに加算モジュール243、501又は601を使用するとしているが、他の加算部分において、各加算モジュールを使用するとしてもよい。
(3)第1の実施の形態では、各加算モジュールを復号制御モジュール241に適用するとしているが、上記の暗号制御モジュール141や、他の暗号プログラム、復号プログラム、デジタル署名を生成する署名生成プログラムに適用するとしてもよい。このように、加算による演算が出現する情報処理演算であれば、どのようなものであっても適用することができる。
(4)加算モジュール243、501及び601において、剰余整数環の乗法群、楕円曲線上の群を利用したが、その他の群を利用するとしてもよい。
また、加算モジュール243及び501においては、冪乗演算を行って、整数を変換し、加算モジュール601においては、楕円曲線のスカラ倍演算を行って、整数を変換するとしているが、その他の群の冪演算を行うことにより変換するとしてもよい。
ここで、冪演算とは、群の基本演算、すなわち、剰余整数環では乗算を、また楕円曲線上の群では楕円曲線加算を、整数回行った結果を求める演算である。
したがって、剰余整数環の乗法群の冪演算は冪乗演算、楕円曲線上の群の冪演算は楕円曲線のスカラ倍演算である。
加算モジュール501では、剰余整数環Z/nZの乗法群の「部分群」である、剰余整数環Z/p2 Zの乗法群において離散対数問題を解いている。その他の群を使用する場合は、加算モジュール501と同様に逆変換部でその他の群の「部分群」において離散対数問題を解くとしてもよい。
(5)加算モジュール243において、gは、mod pi (i=1,2,…,k)において原始元としたが、原始元でなくてもよい。
その場合は、gmi =1 mod pi (mi >0)となるmi に対し、
L=m1 ×m2 ×…×mk とする。
(6)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を1個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
(7)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。
(8)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
(9)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(10)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
(11)以上説明したように、本発明によると、演算に使用する値の隠蔽だけでなく、演算そのものを隠蔽することができる。したがって、本技術を用いた難読化ソフトウェアをICカード等の機器に組み込むことは有用である。
本発明を構成する各装置、各方法及び各コンピュータプログラムは、情報を安全かつ確実に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置、各方法及び各コンピュータプログラムは、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
コンテンツ配信システム10の構成を示す構成図である。 コンテンツサーバ装置100の構成を示すブロック図である。 コンテンツ配信プログラム131の内容を説明するフローチャートである。 コンテンツ暗号プログラム132の内容を説明するフローチャートである。 暗号プログラム133の構成を示す構成図である。 暗号制御モジュール141の内容を説明するフローチャートである。図7へ続く。 暗号制御モジュール141の内容を説明するフローチャートである。図6から続く。 パーソナルコンピュータ200の構成を示すブロック図である。 コンテンツ受信プログラム231の内容を説明するフローチャートである。 コンテンツ復号プログラム232の内容を説明するフローチャートである。 復号プログラム234の構成を示す構成図である。 復号制御モジュール241の内容を説明するフローチャートである。図13へ続く。 復号制御モジュール241の内容を説明するフローチャートである。図12から続く。 加算モジュール243の構成を示す構成図である。 加算モジュール243による加算の動作を示すフローチャートである。 加算モジュール501の構成を示す構成図である。 加算モジュール501による加算の動作を示すフローチャートである。 加算モジュール601の構成を示す構成図である。 加算モジュール601による加算の動作を示すフローチャートである。

Claims (22)

  1. 2個以上の整数を加算するコンピュータシステムであって、
    複数のコンピュータ命令が組み合わされて構成されるコンピュータプログラムを記憶しているメモリ部と、
    前記記憶手段に記憶されている前記コンピュータプログラムから1個ずつコンピュータ命令を読み出し、解読し、その解読結果に応じて動作するプロセッサとを備え、
    前記コンピュータプログラムは、
    各整数に、群G上の冪演算を施すことにより、群Gに属する元を生成する変換命令群と、
    生成された全ての前記元に対して、前記加算とは異なる群G上の基本演算を施して、演算値を生成する演算命令群と、
    群G又は群Gに真に含まれる部分群Sにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
    ことを特徴とするコンピュータシステム。
  2. 前記コンピュータシステムは、対象情報を安全かつ確実に扱う情報セキュリティ装置であって、
    前記コンピュータプログラムは、さらに、対象情報にセキュリティ処理を施すセキュリティ命令群を含み、
    前記セキュリティ命令群は、加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いる
    ことを特徴とする請求項1に記載のコンピュータシステム。
  3. 前記群Gは、剰余整数環の乗法群であり、
    前記変換命令群は、各整数に冪乗を施し、
    演算命令群は、前記元に対して、乗算を施す
    ことを特徴とする請求項2に記載のコンピュータシステム。
  4. 前記群Gは、複数個の相異なる素数p,p,…,p(k>1)の積n=p×p×…×pに対し、Z/nZの乗法群であり、
    ×は、乗算を示す演算子であり、Zは、整数環であり、Z/nZは、mを法とし整数と合同である値から構成される剰余整数環である
    ことを特徴とする請求項3に記載のコンピュータシステム。
  5. 前記逆変換命令群は、前記素数p,p,…,pを用いたZ/pZ、Z/pZ、…、Z/pZの乗法群における離散対数問題を解く命令を含む
    ことを特徴とする請求項4に記載のコンピュータシステム。
  6. 前記逆変換命令群は、前記素数p,p,…,pを用いたZ/pZ,Z/pZ,…,Z/pZの乗法群における離散対数問題の解に対し、中国人の剰余定理を用いる命令を含む
    ことを特徴とする請求項5に記載のコンピュータシステム。
  7. 前記群Gは、2つの素数p,qと正整数mを用いて表されるn=p×qに対し、Z/nZの乗法群であり、
    前記変換命令群は、各整数に冪乗を施し、
    演算命令群は、前記元に対して、乗算を施す
    ことを特徴とする請求項2に記載のコンピュータシステム。
  8. 前記部分群Sは、Z/p Zの乗法群である
    ことを特徴とする請求項7に記載のコンピュータシステム。
  9. 前記正整数mは、2である
    ことを特徴とする請求項7に記載のコンピュータシステム。
  10. 前記部分群Sは、アノマラス楕円曲線の群であり、
    前記変換命令群は、各整数に楕円曲線上の乗算を施し、
    演算命令群は、前記元に対して、楕円曲線上の加算を施す
    ことを特徴とする請求項2に記載のコンピュータシステム。
  11. 前記群Gは、二つのアノマラス楕円曲線の群の直積であり、
    前記変換命令群は、各整数に楕円曲線上の乗算を施し、
    演算命令群は、前記元に対して、楕円曲線上の加算を施す
    ことを特徴とする請求項2に記載のコンピュータシステム。
  12. さらに、前記逆変換命令群は、複数の冪数と、各冪数による冪乗値又は冪倍値とを対応付けて記憶しており、その対応付けを検索することにより、冪演算の逆算を求める
    ことを特徴とする請求項2に記載のコンピュータシステム。
  13. さらに、前記逆変換命令群は、前記群Gに属する元を前記部分群Sに属する元に還元する還元部を備える
    ことを特徴とする請求項2に記載のコンピュータシステム。
  14. 前記情報セキュリティ装置は、鍵情報に基づいて対象情報を暗号化し又は復号し、
    前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報を暗号化し又は復号し、暗号化又は復号において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、
    前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施す
    ことを特徴とする請求項2に記載のコンピュータシステム。
  15. 前記暗号化又は復号は、共通鍵方式の暗号化又は復号アルゴリズムである
    ことを特徴とする請求項14に記載のコンピュータシステム。
  16. 前記情報セキュリティ装置は、鍵情報に基づいて対象情報にデジタル署名を施し又は署名検証を施し、
    前記セキュリティ命令群は、前記鍵情報に基づいて、対象情報にデジタル署名を施し又は署名検証を施し、デジタル署名又は署名検証において、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報との加算演算が含まれ、
    前記加算演算において、前記変換命令群、前記演算命令群及び前記逆変換命令群を用いて、鍵情報又は鍵情報から得られる二次鍵情報と、対象情報又は対象情報から得られる二次対象情報とに、加算を施す
    ことを特徴とする請求項2に記載のコンピュータシステム。
  17. 前記コンピュータシステムは、前記メモリ部と前記プロセッサとが高密度に集積された集積回路を含むICカードである
    ことを特徴とする請求項2に記載のコンピュータシステム。
  18. メモリ部とプロセッサとを備えるコンピュータシステムにおいて用いられ、2個以上の整数を加算する加算方法であって、
    各整数に、群G上の冪演算を施すことにより、群Gに属する元を生成する変換ステップと、
    生成された全ての前記元に対して、前記加算とは異なる群G上の基本演算を施して、演算値を生成する演算ステップと、
    群G又は群Gに真に含まれる部分群Sにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換ステップとを含む
    ことを特徴とする加算方法。
  19. 2個以上の整数を加算するコンピュータプログラムであって、
    各整数に、群G上の冪演算を施すことにより、群Gに属する元を生成する変換命令群と、
    生成された全ての前記元に対して、前記加算とは異なる群G上の基本演算を施して、演算値を生成する演算命令群と、
    群G又は群Gに真に含まれる部分群Sにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
    ことを特徴とするコンピュータプログラム。
  20. 前記コンピュータプログラムは、コンピュータ読み取り可能な記録媒体に記録されている
    ことを特徴とする請求項19に記載のコンピュータプログラム。
  21. 前記コンピュータプログラムは、搬送波に乗せられて送信される
    ことを特徴とする請求項19に記載のコンピュータプログラム。
  22. 2個以上の整数を加算するコンピュータプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
    前記コンピュータプログラムは、
    各整数に、群G上の冪演算を施すことにより、群Gに属する元を生成する変換命令群と、
    生成された全ての前記元に対して、前記加算とは異なる群G上の基本演算を施して、演算値を生成する演算命令群と、
    群G又は群Gに真に含まれる部分群Sにおいて、前記演算値に対して、前記変換命令群により施される冪演算の逆算を施すことにより、前記整数の加算値を生成する逆変換命令群とを含む
    ことを特徴とする記録媒体。
JP2006511988A 2004-03-31 2005-03-22 コンピュータシステム、コンピュータプログラム及び加算方法 Ceased JPWO2005098795A1 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2004107778 2004-03-31
JP2004107778 2004-03-31
PCT/JP2005/005136 WO2005098795A1 (ja) 2004-03-31 2005-03-22 整数を加算するコンピュータシステム

Publications (1)

Publication Number Publication Date
JPWO2005098795A1 true JPWO2005098795A1 (ja) 2008-02-28

Family

ID=35125300

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006511988A Ceased JPWO2005098795A1 (ja) 2004-03-31 2005-03-22 コンピュータシステム、コンピュータプログラム及び加算方法

Country Status (7)

Country Link
US (1) US7434898B2 (ja)
EP (1) EP1732052B1 (ja)
JP (1) JPWO2005098795A1 (ja)
KR (1) KR20060134992A (ja)
CN (1) CN100585670C (ja)
DE (1) DE602005025615D1 (ja)
WO (1) WO2005098795A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8280039B2 (en) * 2005-12-28 2012-10-02 Panasonic Corporation Signature generating device, signature generating method and signature generating program
JP5133973B2 (ja) * 2007-01-18 2013-01-30 パナソニック株式会社 難読化支援装置、難読化支援方法、プログラムおよび集積回路
EP2242032B1 (en) * 2008-01-21 2013-10-02 Nippon Telegraph and Telephone Corporation Secure computing system, secure computing method, secure computing apparatus and program therefor
US20100290503A1 (en) * 2009-05-13 2010-11-18 Prime Photonics, Lc Ultra-High Temperature Distributed Wireless Sensors
US20110087861A1 (en) * 2009-10-12 2011-04-14 The Regents Of The University Of Michigan System for High-Efficiency Post-Silicon Verification of a Processor
EP2720403A1 (en) * 2012-10-12 2014-04-16 Thomson Licensing Aggregator-oblivious encryption of time-series data
JP5596835B2 (ja) * 2013-08-14 2014-09-24 日本電信電話株式会社 離散対数計算装置、事前計算装置、離散対数計算方法、事前計算方法、プログラム
CN106716345A (zh) 2014-09-30 2017-05-24 皇家飞利浦有限公司 用于执行混淆算术的电子计算设备
JP6368051B2 (ja) 2014-12-12 2018-08-01 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 電子生成装置
US10579337B1 (en) * 2015-06-18 2020-03-03 Chorus Call, Inc. Method, software and apparatus for computing discrete logarithms modulo a prime
WO2018135566A1 (ja) * 2017-01-20 2018-07-26 日本電信電話株式会社 秘密計算システム、秘密計算装置、秘密計算方法、プログラム
KR102336535B1 (ko) * 2021-10-05 2021-12-08 (주) 가온칩스 테일러 급수를 이용한 제곱근 연산 방법 및 이를 이용한 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000155789A (ja) * 1998-11-19 2000-06-06 Nec Software Ltd 電子投票システム、方法、及び記録媒体
JP2001522167A (ja) * 1997-10-24 2001-11-13 クゥアルコム・インコーポレイテッド 暗号化ストリーム暗号を生成させる方法および装置
JP3402441B2 (ja) * 1997-12-17 2003-05-06 日本電信電話株式会社 公開鍵暗号化装置、公開鍵暗号復号装置及び復号プログラム記録媒体

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5073935A (en) * 1990-12-17 1991-12-17 Jose Pastor Method for secure communication
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
DE69840959D1 (de) * 1997-12-17 2009-08-20 Nippon Telegraph & Telephone Verschlüsselungs- und Entschlüsselungsvorrichtungen für Kryptosysteme mit öffentlichem Schlüssel und Aufzeichnungsmedium mit darauf gespeicherten zugehörigen Verarbeitungsprogrammen.
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US7164765B2 (en) * 2001-04-11 2007-01-16 Hitachi, Ltd. Method of a public key encryption and a cypher communication both secure against a chosen-ciphertext attack
JP2005049925A (ja) 2003-07-29 2005-02-24 Nara Institute Of Science & Technology プログラム難読化装置、プログラム難読化プログラム及びプログラム難読化方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001522167A (ja) * 1997-10-24 2001-11-13 クゥアルコム・インコーポレイテッド 暗号化ストリーム暗号を生成させる方法および装置
JP3402441B2 (ja) * 1997-12-17 2003-05-06 日本電信電話株式会社 公開鍵暗号化装置、公開鍵暗号復号装置及び復号プログラム記録媒体
JP2000155789A (ja) * 1998-11-19 2000-06-06 Nec Software Ltd 電子投票システム、方法、及び記録媒体

Also Published As

Publication number Publication date
EP1732052A1 (en) 2006-12-13
EP1732052A4 (en) 2009-07-08
CN100585670C (zh) 2010-01-27
US20070192622A1 (en) 2007-08-16
US7434898B2 (en) 2008-10-14
EP1732052B1 (en) 2010-12-29
WO2005098795A1 (ja) 2005-10-20
CN1938740A (zh) 2007-03-28
DE602005025615D1 (de) 2011-02-10
KR20060134992A (ko) 2006-12-28

Similar Documents

Publication Publication Date Title
JPWO2005098795A1 (ja) コンピュータシステム、コンピュータプログラム及び加算方法
JP2020530577A (ja) 暗号文に対する近似演算を行う装置及び方法
US20140233727A1 (en) Method for secure substring search
JP4611305B2 (ja) 情報伝達システム、暗号装置及び復号装置
KR20150122513A (ko) 암호화 장치, 암호화 방법 및 컴퓨터 판독가능 기록매체
JP2018502320A (ja) 公開鍵暗号化システム
JP2011147074A (ja) 暗号化された情報のためのキーワード検索システム、キーワード検索方法、検索要求装置、検索代行装置、プログラム、記録媒体
JP2010049213A (ja) 暗号化装置、復号装置、暗号通信システム、方法及びプログラム
JP2006311383A (ja) データ管理方法、データ管理システムおよびデータ管理装置
KR101533950B1 (ko) 브로드캐스트 암호화 방법 및 시스템
JP5730805B2 (ja) 格子問題に基づく階層型内積暗号システム,格子問題に基づく階層型内積暗号方法,装置
JPWO2015008623A1 (ja) 鍵保管装置、鍵保管方法、及びそのプログラム
KR101440680B1 (ko) 중국인 나머지 정리에 기반한 준동형 암복호화 방법 및 이를 이용한 장치
US8731187B2 (en) Computing genus-2 curves using general isogenies
WO2022137447A1 (ja) 秘匿情報処理システムおよび秘匿情報処理方法
JP5300374B2 (ja) 表現変換装置、演算装置、表現変換方法及びプログラム
JP2013172178A (ja) 署名鍵難読化システム、署名鍵難読化方法、難読化された署名鍵を用いた暗号化署名システム、難読化された署名鍵を用いた暗号化署名方法、装置とプログラム
CN113890759A (zh) 文件传输方法、装置、电子设备和存储介质
JP5103407B2 (ja) 暗号化数値二進変換システム、暗号化数値二進変換方法、暗号化数値二進変換プログラム
JP2010049211A (ja) 代数的トーラスを用いたデータ圧縮処理を行う装置およびプログラム
JP2007171412A (ja) 鍵生成装置、暗号化装置、復号化装置、乗法型ナップザック暗号システム、乗法型ナップザック暗号復号方法およびプログラム
JP5880173B2 (ja) 暗号処理方法、システム及び情報処理装置
JP4485175B2 (ja) 鍵共有システム、共有鍵生成装置及び共有鍵復元装置
JP2023156635A (ja) 暗号化装置、復号装置、暗号変換装置、暗号化方法、復号方法及びプログラム
CN114547645A (zh) 浮点数处理方法、装置、终端以及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080107

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101221

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110214

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110308

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110519

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110524

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110705

A313 Final decision of rejection without a dissenting response from the applicant

Free format text: JAPANESE INTERMEDIATE CODE: A313

Effective date: 20111010

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20111028