(57)【特許請求の範囲】
【請求項１】
信号を入力する手段と、プログラムを格納する格納部と、所定の計算結果を格納する格納手段と、プログラムに従い所定のデータ処理を行う演算部と、信号を出力する手段と、を少なくとも有し、前記格納部に格納されたプログラムは演算部に実行の指示を与える一つ以上のデ−タ処理命令を有し、前記データを入力する手段より入力された信号をデータ処理するに際し、前記データ処理命令の少なくとも一つが、伝達情報たる信号Ａと鍵情報たる信号ｋとをもって行うＡ^ｋ（但し、ここでＡ^ｋ＝Ａ○Ａ○…○Ａ（ｋ個）とし、○は演算を示す、以下同様）を計算する際に、ｋをｋ＝ｋ[１]＋ｋ[２]＋ｋ[３]＋…＋ｋ[ｎ]を満たすｋ[１]、ｋ[２]、ｋ[３]、…、ｋ[ｎ]（但し、ｎは整数）と任意に分割し、前記信号Ａと前記ｋ[１]、ｋ[２]、ｋ[３]、…、ｋ[ｎ]とを用いてｈ[１]＝Ａ^ｋ[１]、ｈ[２]＝Ａ^ｋ[２]、…、ｈ[ｎ]＝Ａ^ｋ[ｎ]をそれぞれ個別に計算した後、この各個別計算結果を用いての演算、Ａ^ｋ＝ｈ[１] ○ｈ[２] ○…○ｈ[ｎ]（但し、ｎは１以上の整数）として計算結果を求めるステップを有することを特徴とする情報処理装置。
【請求項２】
情報伝達する送信側の平文および当該情報の受信側における鍵情報を、各々当該情報処理方法にて採用される半群Ｓ’におけるの元Ａおよびｋとなし、このＡとｋとのＡ^ｋ（但し、ここでＡ^ｋ ＝Ａ△Ａ△…△Ａ（ｋ個）とし、△は半群Ｓ’における演算である） を計算する際に、ｋをｋ ＝ ｋ[１] ＋ｋ[２] ＋ ｋ[３] ＋…＋ ｋ[ｎ] を満たすｋ[１] 、ｋ[２] 、ｋ[３] 、… … 、 ｋ[ｎ] （但し、ｎは整数）と任意に分割し、前記平文Ａと前記ｋ[１] 、ｋ[２] 、ｋ[３] 、…、ｋ[ｎ]とを用いて、ｈ[１] ＝ Ａ^ｋ[１]、 ｈ[２] ＝ Ａ^ｋ[２] 、…、ｈ[ｎ] ＝ Ａ^ｋ[ｎ]をそれぞれ個別に計算した後、Ａ^ｋ ＝ ｈ[１] △ｈ[２] △…△ｈ[ｎ] （ 但し、△は半群Ｓ’における演算であり、ｎは１以上の整数である）としてＡ^ｋを求めるステップを有することを特徴とする情報処理方法。
【請求項３】
前記Ｓ、Ｓ’、あるいはＳ”が法Ｎ（正の整数）に関する剰余類のなす可換環（半群でもある）であり、和演算＋が法Ｎにおける和であり、上記積演算○、演算△、あるいは演算◇が、法Ｎによる乗算剰余演算、Ａ＋Ｂ ＝ （Ａ＋ Ｂ ） ｍｏｄ Ｎ、 Ａ○Ｂ ＝ Ａ＊Ｂ ｍｏｄ Ｎ、あるいはＡ＋Ｂ ＝ （Ａ＋ Ｂ ） ｍｏｄ Ｎ、Ａ△Ｂ ＝ Ａ＊Ｂ ｍｏｄ Ｎ、あるいはＡ＋Ｂ ＝ （Ａ ＋ Ｂ ） ｍｏｄ Ｎ、Ａ◇Ｂ ＝ Ａ＊Ｂ ｍｏｄ Ｎのいずれかであることを特徴とする請求項２に記載の情報処理方法。
【請求項４】
信号を入力する手段と、プログラムを格納する格納部と、所定の計算結果を格納する格納手段と、プログラムに従い所定のデータ処理を行う演算部と、信号を出力する手段と、を少なくとも有し、前記格納部に格納されたプログラムは演算部に実行の指示を与える一つ以上のデ−タ処理命令を有し、前記データを入力する手段より入力された信号をデータ処理するに際し、前記データ処理命令の少なくとも一つが、伝達情報たる信号Ａと鍵情報たる信号ｋとをもって行うＡ^ｋ（但し、ここでＡ^ｋ＝Ａ○Ａ○…○Ａ（ｋ個）とし、○は演算を示す、以下同様）を計算する際に、ｋをｋ＝ｋ[１]＋ｋ[２]＋ｋ[３]＋…＋ｋ[ｎ]を満たすｋ[１]、ｋ[２]、ｋ[３]、…、ｋ[ｎ]（但し、ｎは整数）と任意に分割し、前記信号Ａと前記ｋ[１]、ｋ[２]、ｋ[３]、…、ｋ[ｎ]とを用いてｈ[１]＝Ａ^ｋ[１]、ｈ[２]＝Ａ^ｋ[２]、…、ｈ[ｎ]＝Ａ^ｋ[ｎ]をそれぞれ個別に計算した後、この各個別計算結果を用いての演算、Ａ^ｋ＝ｈ[１] ○ｈ[２] ○…○ｈ[ｎ]（但し、ｎは１以上の整数）として計算結果を求めるステップを有することを特徴とするカード部材。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本願発明は、高いセキュリティを持つ耐タンパ−情報処理装置に関するものである。 本願発明は、わけてもＩＣカ−ドなどカード部材に適用して極めて効果的である。
【０００２】
【従来の技術】
ＩＣカ−ドは、勝手に書き換えることが許されないような個人情報の保持や、秘密情報である暗号鍵を用いたデ−タの暗号化や、或いは暗号文の復号化を行う装置である。ＩＣカ−ド自体は電源を持っておらず、ＩＣカ−ド用のリ−ダライタに差し込まれると、電源の供給を受け、動作可能となる。ＩＣカードは動作可能になると、リ−ダライタから送信されるコマンドを受信し、そのコマンドに従って、デ−タの転送等の処理を行う。
【０００３】
ＩＣカ−ドの基本概念は、図１に示すように、カ−ド１０１の上に、ＩＣカ−ド用チップ１０２を搭載したものである。図に示すように、一般にＩＣカ−ドは、所定位置に、供給電圧端子Ｖｃｃ、グランド端子ＧＮＤ、リセット端子ＲＳＴ、入出力端子Ｉ／Ｏ、クロック端子ＣＬＫ及び、を有する。この端子の位置は、IＳO７８１６の規格に定められている。これらの諸端子を通して、リ−ダ−ライタから電源の供給やリ−ダライタとのデ−タの通信を行う。こうしたＩＣカ−ドを用いた通信に関しては、例えばＷ．Ｒａｎｋl Ａｎd Ｅｆｆｉｎg : ＳＭＡＲＴＣＡＲＤ  ＨＡＮＤＢＯＯＫ、 Ｊｏｈｎ Ｗｉlｅｙ & Ｓｏｎｓｓ、 １９９７、ＰＰ.４１などに見られる。
【０００４】
ＩＣカ−ドに搭載される半導体チップの構成は、基本的には通常のマイクロコンピュ−タと同じ構成である。図２はＩＣカ−ドに搭載される半導体チップの基本的構成を示すブロック図である。図２に見られるように、カード部材用の半導体チップは、中央処理装置（ＣＰＵ）２０１、記憶装置２０４、入出力（Ｉ／Ｏ）ポ−ト２０７、コ・プロセッサ２０２を有する。システムによってはコ・プロセッサはない場合もある。ＣＰＵ２０１は、論理演算や算術演算などを行う装置であり、記憶装置２０４は、プログラムやデ−タを格納する装置である。入出力ポ−トは、リ−ダライタと通信を行う装置である。コ・プロセッサは、暗号処理そのもの、または、暗号処理に必要な演算を高速に行う装置である。これには、例えば、ＲＳＡ暗号の剰余演算を行う為の特別な演算装置や、ＤＥＳ暗号のラウンド処理を行う暗号装置などがある。ＩＣカ−ド用プロセッサの中には、コ・プロセッサを持たないものも多くある。デ−タバス２０３は、各装置を接続するバスである。
【０００５】
記憶装置２０４は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｕｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などを有する。ＲＯＭは、記憶情報を変更できないメモリであり、主にプログラムを格納するメモリである。ＲＡＭは自由に書き換えができるメモリであるが、電源の供給が中断されると、記憶している内容は消滅する。ＩＣカ−ドがリ−ダライタから抜かれると電源の供給が中断されるため、ＲＡＭの内容は、保持されなくなる。ＥＥＰＲＯＭは、電源の供給が中断されてもその内容を保持することができるメモリである。このＥＥＰＲＯＭは記憶情報を書き換える必要があり、ＩＣカ−ドがリ−ダライタから抜かれても、保持が可能なデ−タを格納するために使われる。例えば、プリペイドカ−ドでのプリペイドの度数などは、使用するたびに書き換えられ、かつリ−ダライタか抜かれてもデ−タを保持する必要があるため、ＥＥＰＲＯＭに保持される。
【０００６】
【発明が解決しようとしている課題】
本願発明は、高いセキュリティを持つカ−ド部材などの耐タンパ−情報処理装置を提供するものである。
【０００７】
本願発明の技術的な課題は、カ−ド部材、例えばＩＣカ−ド用チップでのデ−タ処理と消費電流との関連性を減らすことである。消費電流とチップの処理との関連性が減れば、観測した消費電流の波形からＩＣカ−ド用チップ内での処理や暗号鍵を推測することが困難になる。即ち、本願発明は、カード部材等に高いセキュリティを持たせんとするものである。
【０００８】
ＩＣカ−ドは、プログラムや重要な情報がＩＣカ−ド用チップの中に密閉されているため、重要な情報を格納したり、カ−ドの中で暗号処理を行うために用いられる。従来、ＩＣカ−ドでの暗号を解読する難しさは、暗号アルゴリズムの解読の困難さと同じと考えられていた。しかし、ＩＣカ−ドが暗号処理を行っている時の消費電流を観測し、解析することにより、暗号アルゴリズムの解読より容易に暗号処理の内容や暗号鍵が推定される可能性が示唆されている。消費電流は、リ−ダライタから供給されている電流を測定することにより観測することができ、この攻撃法の詳細は、例えば、Ｊｏｈｎ  Ｗｉｌｅｙ  ＆  Ｓｏｎｓ社、Ｗ．  Ｒａｎｋｌｅ  ＆   Ｗ．  Ｆｆｆｉｎｇ著 「ＳＭＡＲＴ  ＣＡＲＤ  ＨＡＮＤＢＯＯＫ」の８.５.１.１ Ｐａｓｓｉｖｅ  Ｐｒｏｔｅｃｔｉｖｅ  Ｍｅｃｈａｎｉｓｍｓ（２６３ペ−ジ）にこのような危険性が記載されている。それは次のような理由による。  ＩＣカ−ド用チップを構成しているＣＭＯＳは、出力状態が１から０あるいは０から１に変わった時に電流を消費する。特に、デ−タバス２０３においては、バスドライバ−の電流や、配線及び、配線に接続されているトランジスタの静電容量のため、バスの値が１から０あるいは０から１に変わると、大きな電流が流れる。そのため、消費電流を観測すれば、ＩＣカ−ド用チップの中で、何が動作しているか分かる可能性がある。
【０００９】
図３は、ＩＣカ−ド用チップの１サイクルでの消費電流の波形を示したものである。処理しているデ−タに依存して、電流波形が３０１や３０２のように異なる。このような差は、バス２０３を流れるデ−タや中央演算装置２０１で処理しているデ−タに依存して生じる。
【００１０】
コ・プロセッサ２０２は、ＣＰＵと並列に、例えば、５１２ビットの剰余演算を行うことができる。そのため、ＣＰＵの消費電流とは異なった消費電流波形の長時間の観測が可能である。その特徴的な波形を観測することにより、コ・プロセッサの動作回数を容易に測定することができる。コ・プロセッサの動作回数が暗号鍵と何らかの関係があるならば、コ・プロセッサの動作回数から暗号鍵を推定できる可能性がある。
【００１１】
また、コ・プロセッサでの演算内容が、暗号鍵に依存した偏りがあると、その偏りが消費電流から求められ、暗号鍵が推定される可能性がある。
【００１２】
ＣＰＵでも同様の事情が存在する。暗号鍵のビット値は決まっている。この為、処理するデ−タを変更して、消費電流を観測することにより、暗号鍵のビット値の影響が観測できる可能性がある。これらの消費電流の波形を統計的に処理することにより、暗号鍵を推定できる可能性がある。
【００１３】
【課題を解決するための手段】
本願発明の着眼点は、ＩＣカ−ド用チップでの処理手順をアタッカ−に推定されないように分割することや、ダミ−処理を挿入することである。こうした方法によって、消費電流の波形から、処理や暗号鍵の推測を困難にするものである。
【００１４】
ＩＣカ−ドチップに代表される耐タンパ−装置は、プログラムを格納するプログラム格納部、デ−タを保存するデ−タ格納部を持つ記憶装置と、プログラムに従って所定の処理を実行しデ−タ処理を行う中央演算装置（ＣＰＵ）を有し、プログラムは、ＣＰＵに実行の指示を与える処理命令から構成される一つ以上のデ−タ処理手段からなる情報処理装置として捉えることができる。
【００１５】
本願発明において、処理しているデ−タとＩＣカ−ド用チップの消費電流の関連性を撹乱する一つの方法は、本来の演算処理に用いるデ−タを直接用いずに、これを分割し、最終的に正しい値が求まるような新たな演算処理を行うことにより、本来の処理がどこで行われているかが一定でなくなる方法である。
【００１６】
具体的には、まず、撹乱用のデ−タＲ１、Ｒ２、…、Ｒｎを作成し、該撹乱デ−タを用いて、デ−タＤ１を分割し、諸デ−タＤ１[１]、 Ｄ１[２]、…、 Ｄ１[ｎ]を作成する。
【００１７】
撹乱デ−タＲ１、Ｒ２等による分割の方法は、例えば、（１）論理積演算、（２）ｘ[１]＝０、ｘ[２]＝ｘ―ｖとなす方法、（３）ｘ[１]＝ｘ  Ａｎｄ  Ｒ、ｘ[１]＝ｘ  Ａｎｄ  ~Ｒ（但し、~ＲはＲの反転値である）なす方法などをあげることが出来る。
【００１８】
即ち、Ｒ１とＲ２を用いて、Ｄ１を、Ｄ２[１]＝ Ｄ１[１]  Ａｎｄ  Ｒ１、 Ｄ２[２]＝ Ｄ１[２]  Ａｎｄ  Ｒ２、 … 、 Ｄ２[ｎ]＝ Ｄ１[ｎ]  Ａｎｄ  Ｒｎ と分割する。但し、ｎは整数である。この際、Ｄ２[１]＋Ｄ２[２]＋…＋Ｄ２[ｎ]＝Ｄ１が成り立つ。この他に、通常の和や差などを用いることもできる。これらの値に対して、それぞれ、環上の積を計算し、最後に環上の和をとることによって、正しい値を求める。本来は、分割を行わずに直接Ｄ１を用いて処理を行うのであるが、ランダムに分割されたデ−タＤ２[１]、Ｄ２[２]、…、Ｄ２[ｎ]を用いているため、観測される電流波形に現れる部分情報からだけでは元のデ−タＤ１を特定することが困難である。統計処理を行う場合は、ランダムな波形を平均化するのと同じことになり、波形の特徴は消滅するため、さらに効果は顕著である。尚、ここで、前記ランダムな分割は疑似乱数を用いた分割でも良い。
【００１９】
デ−タ処理と消費電流の関連性を減らす別の方法は、処理するデ−タの値を、最終的に同一の結果を与える別の処理を与えるように変形することにより、処理途中の消費電流が、デ−タの値が正しい場合のものと異なるようにする方法である。
【００２０】
具体的には、まず、撹乱用のランダムなスカラ−デ−タＲを作成し、演算結果を不変に保つ特殊な元Ｖを用いて、本来の元 ｘ を、ｘ ＋ Ｒ＊Ｖ（ここでの演算は通常の和演算と積演算、以下同様）のように変形し、これを指数や、スカラ−として用いることにより、消費電流波形デ−タの観測値の統計処理を撹乱することができる。尚、前記元Ｖは、積においては１、和においては、０と同じ働きをする元である。例えばＲＳＡ暗号では、公開鍵のモジュラスがＮ＝ｐｑの場合、（ｐ−１）（ｑ−１）の倍数、楕円曲線上のベ−スポイントのスカラ−倍においては、ベ−スポイントの位数の倍数が、この元Ｖである。
【００２１】
また、分割後の処理をランダムな順序で行えば、デ−タ処理と消費電流の関連性を見定めることは、より一層困難になる。
【００２２】
また、これらを組み合わせることは、さらに、デ−タ処理と消費電流の関連性を減らすために有効である。
【００２３】
本発明は、特に、ＲＳＡ暗号での、乗算剰余演算や、べき乗剰余演算及び、楕円曲線暗号での、定義体上での乗算や、除算、ベ−スポイントのスカラ−倍などの情報隠蔽に利用することができる。乗算剰余演算においては、上述した論理積演算をデ−タ分割に用い、分配法則を用いて最終的に正しい答を得ること、べき乗剰余演算やベ−スポイントのスカラ−倍においては、通常の差を利用して、指数を分割し、分割した指数に対してべき乗剰余演算を行い、最終的にこれらの積をとることによって正しい答を得ることは、有効な処理方法の一つである。尚、前記乗算剰余演算とは素体上での乗算を含むものである。
【００２４】
【発明の実施の形態】
本願は多岐にわたる発明の諸形態が考慮されるので、具体的な実施の形態を説明するに先立って、先ず、本願の多岐にわたる発明思想の理解を容易となす為、代表的なＲＡＳ暗号化方式を例にとって、本願発明の発明思想の骨子を略述する。次いで、本願発明の主な諸形態の概要を列挙する。これら諸形態の更に詳細な説明は後述される。
【００２５】
伝送するデータ（平文）の暗号化の基本は、一般的なＲＡＳ暗号化である。
【００２６】
即ち、ｙ＝Ｒe  ｍｏｄ  Ｎ、ここで、ｙは暗号文、Ｒは平文、ｅは公開鍵（ｐｕｂｌｉｃ  ｅｘｐｏｎｅｎｔ）、Ｎは公開鍵（ｐｕｂｌｉｃ  ｍｏｄｕｌｕｓ）である。ｅに対しては、ｅｘ  ｍｏｄ  Ф（Ｎ）＝１、であり、Φ（Ｎ）＝（ｐ−１）（ｑ−１）、オイラー関数である。
【００２７】
そして、この暗号文の受け取り側は、次のように復号化する。
【００２８】
即ち、Ｒ＝ｙx  ｍｏｄ  Ｎ、ここで、ｙは暗号文、ｘは秘密鍵（ｓｅｃｒｅｔ  ｅｘｐｏｎｅｎｔ）、Ｎは公開鍵（ｐｕｂｌｉｃ  ｍｏｄｕｌｕｓ）である。ここで、前記秘密鍵はカード部材の内部、即ち、カード部材に搭載されたＩＣチップ内に保持されている。
【００２９】
本願発明の基本思想は、情報の送信側が前記平文Ｒ、あるいは指数ｅ、あるいはその両者を、一旦分割し、攪乱の計算を行った後、元の平文にもどして、送信用の暗号文ｙを作成するものである。本願発明はこの平文Ｒあるいは指数ｅなる諸データの分割、および攪乱の諸方法を提示するものである。こうして送信された暗号文ｙは、受信側では送信側で行った演算を同様の演算を行ってもとの平文Ｒを得ることが出来る。
【００３０】
本願発明の骨子をより具体的に例示すれば、大別して、次ぎのように分類することが出来る。
【００３１】
次に本願発明の諸形態の概要を列挙する。
【００３２】
本願の第１の形態は、信号を入力する手段と、プログラムを格納する格納部と、プログラムに従い所定のデータ処理を行う演算部と、信号を出力する手段と、を少なくとも有し、前記格納部に格納されたプログラムは演算部に実行の指示を与える一つ以上のデ−タ処理命令を有し、前記データを入力する手段より入力された信号をデータ処理するに際し、前記データ処理命令の少なくとも一つが、信号Ａとデータ処理における所望計算に用いる信号Ｂとをもって行うＡ○Ｂ （但し、○は所望の演算を示す。以下同様）の計算を、ＡをＡ ＝ Ａ[１] ＋ Ａ[２]＋ … ＋Ａ[ｎ] （但し、ｎは１以上の整数）を満たすＡ[１]、 Ａ[２]、…、Ａ[ｎ]と任意に分割し、前記Ａ[１]、Ａ[２]、…、Ａ[ｎ]と前記データ処理における所望計算に用いる信号Ｂとを用いてＢ[１]＝ Ａ[１]○Ｂ、 Ｂ[２] ＝ Ａ[２]○Ｂ、…、Ｂ[ｎ] ＝ Ａ[ｎ]○Ｂをそれぞれ個別に計算した後、この各個別計算結果を用いての和演算、Ｂ[１]＋Ｂ[２]＋… ＋Ｂ[ｎ] （但し、ｎは１以上の整数）として、計算結果を求めるステップを有することを特徴とする情報処理装置である。
【００３３】
本願の第２の形態は、信号を入力する手段と、プログラムを格納する格納部と、所定の計算結果を格納する格納手段と、プログラムに従い所定のデータ処理を行う演算部と、信号を出力する手段と、を少なくとも有し、前記格納部に格納されたプログラムは演算部に実行の指示を与える一つ以上のデ−タ処理命令を有し、前記データを入力する手段より入力された信号をデータ処理するに際し、前記データ処理命令の少なくとも一つが、信号Ａとデータ処理における所望計算に用いる信号Ｂとをもって行うＡ○Ｂ （但し、○は所望の演算を示す。以下同様）の計算を、ＢをＢ＝Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ] （但し、ｎは整数）を満たすＢ[１]、Ｂ[２]、… Ｂ[ｎ]と任意に分割し、前記信号Ａと前記Ｂ[１]、Ｂ[２]、…、Ｂ[ｎ]とを用いてＡ[１] ＝ Ａ○Ｂ[１]、 Ａ[２] ＝ Ａ○Ｂ[２] 、…、Ａ[ｎ] ＝ Ａ○Ｂ[ｎ]をそれぞれ個別に計算した後、この各個別計算結果を用いての和演算、Ａ[１]＋Ａ[２]＋…＋Ａ[ｎ] （但し、ｎは整数）として、計算結果を求めるステップを有することを特徴とする情報処理装置である。
【００３４】
更に、本願発明の別な第３の形態では、前記第１および第２の基本思想を合わせ用いることが出来る。即ち、信号Ａと信号ＢとをもってＡ○Ｂの計算を行うに際し、ＡおよびＢの両者を分割、所望の演算を行う。
【００３５】
即ち、Ａ○Ｂ＝（Ａ[１]＋Ａ[２]＋…＋Ａ[ｍ]）○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）として計算するものである。この演算は次のようになる。
【００３６】
（Ａ[１]＋Ａ[２]＋…＋Ａ[ｍ]）○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
＝Ａ[１]○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
＋Ａ[２]○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
・・・・・・
＋Ａ[ｍ]○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
＝Ａ[１]○Ｂ[１]＋Ａ[１]○Ｂ[２]＋・・・Ａ[１]○Ｂ[ｎ]
＋Ａ[２]○Ｂ[１]＋Ａ[２]○Ｂ[２]＋・・・Ａ[２]○Ｂ[ｎ]
・・・・・・
＋Ａ[ｍ]○Ｂ[１]＋Ａ[ｍ]○Ｂ[２]＋・・・Ａ[ｍ]○Ｂ[ｎ]
従って、この演算は、ΣＡ[ｉ]○Ｂ[ｊ]（但し、ｉ＝１・・・ｍ、ｊ＝１・・・ｎ）の結果となる。この方法は、ｎあるいはｍの値を比較的小さな値とした場合、有利な方法である。それは、信号Ａ及び信号Ｂを共に分割する為、その演算工程が長くなることが考慮されるからである。勿論、このことはｎあるいはｍ等の具体的値の選択によることは言うまでもない。尚、ＡあるいはＢの双方を分割する場合、ｉ≠１、ｊ≠１の条件となることは言うまでもない。
【００３７】
前記第１、第２の形態および第３の形態等において、カード部材を用いた通信では、信号Ａは伝達情報、いわゆる平文、信号Ｂは鍵情報の相当する。以下の諸形態でも特にことわりのない場合、信号Ａ及び信号Ｂは、各々カード部材における平文、および鍵情報に相当する。
【００３８】
前記第１、第２の形態および第３の形態等において、和演算＋および積演算○は、代数学の教える所によれば、可換環Ｓにおける演算が極めて実際的なものである。可換環Ｓには二つの演算があり、これらが和演算＋および積演算○である。更には、前記演算は整数演算が実際的なものである。
【００３９】
以下、本例によらず、本願明細書において種々の演算に言及した個所は、数学、なかんずく代数学において用いられている概念、用語を指している。  次には、鍵情報の分割の諸形態である。
【００４０】
本願の第４の形態は、信号を入力する手段と、プログラムを格納する格納部と、所定の計算結果を格納する格納手段と、プログラムに従い所定のデータ処理を行う演算部と、信号を出力する手段と、を少なくとも有し、前記格納部に格納されたプログラムは演算部に実行の指示を与える一つ以上のデ−タ処理命令を有し、前記データを入力する手段より入力された信号をデータ処理するに際し、前記データ処理命令の少なくとも一つが、信号Ａとデータ処理における所望計算に用いる信号ｋとをもって行うＡ^ｋ（ 但し、ここで^ｋ ＝Ａ○Ａ○…○Ａ（ｋ個）とし、○は演算を示す、以下同様）を計算する際に、ｋをｋ ＝ ｋ[１] ＋ ｋ[２] ＋ ｋ[３] ＋ … ＋ｋ[ｎ] を満たすｋ[１] 、ｋ[２] 、ｋ[３] 、… 、ｋ[ｎ] （但し、ｎは整数）と任意に分割し、前記信号Ａと前記ｋ[１] 、ｋ[２] 、ｋ[３] 、… 、ｋ[ｎ]とを用いてｈ[１] ＝ Ａ^ｋ[１]、ｈ[２] ＝ Ａ^ｋ[２] 、…、ｈ[ｎ] ＝ Ａ^ｋ[ｎ]をそれぞれ個別に計算した後、この各個別計算の結果を用いての演算、Ａ^ｋ ＝ ｈ[１] ○ｈ[２] ○…○ｈ[ｎ] として計算結果を求めるステップを有することを特徴とする情報処理装置である。
【００４１】
本形態における、前記演算○は、代数学の教える所によれば、半群Ｓにおける演算が実際的なものである。半群では演算は一つである。更には、前記演算は整数演算が実際的なものである。以下、本願明細書において、本例と類似の演算に言及した個所は、代数学的には同様に考察することが出来る。  本願の第５の形態は、信号を入力する手段と、プログラムを格納する格納部と、所定の計算結果を格納する格納手段と、プログラムに従い所定のデータ処理を行う演算部と、信号を出力する手段と、を少なくとも有し、前記格納部に格納されたプログラムは演算部に実行の指示を与える一つ以上のデ−タ処理命令を有し、前記データを入力する手段より入力された信号をデータ処理するに際し、前記データ処理命令の少なくとも一つが、信号Ａとデータ処理における所望計算に用いる信号ｘとをもって行うＡ^ｘ（ 但し、ここでＡ^ｘ ＝Ａ○Ａ○…○Ａ（ｘ個）とし、○は演算を示す）を計算する際に、演算Ａ^ｘ に代えて、Ａ^Ｔ ＝ ｅを満たすＴを用いて、Ａ^（ｘ＋Ｔ）を計算するステップを有すること特徴とする情報処理装置である。
【００４２】
本形態における、前記演算○は、代数学の教える所によれば、モノイドＳにおける演算が実際的なものである。モノイドは単位元ｅを持つ半群である。更には、前記演算は整数演算が実際的なものである。以下、本願明細書において、本例と類似の演算に言及した個所は、代数学的には同様に考察することが出来る。
【００４３】
次に、本願に係わる情報処理方法について言及する。
【００４４】
本願の第６の形態は、情報信号を入力する入力手段と、所定演算のプログラムを記憶する記憶手段と、計算結果の出力部とを少なくとも有し、前記入力手段から入力された情報信号Ａと、信号Ｂとをもって行うＡ○Ｂ（但し、○は積演算である）の計算を、前記記憶手段に記憶されたステップに従って、前記情報信号ＡをＡ＝ Ａ[１]＋Ａ[２]＋ … ＋Ａ[ｎ] を満たすＡ[１]、Ａ[２]、…Ａ[ｎ]（但し、ｎは整数）と任意に分割し、前記Ａ[１]、Ａ[２]、… Ａ[ｎ]の各々と前記信号Ｂとを用いてＢ[１] ＝ Ａ[１]○Ｂ、Ｂ[２] ＝Ａ[２] ○Ｂ、…、Ｂ[ｎ] ＝ Ａ[ｎ] ○Ｂ（但し、ｎは１以上の整数）をそれぞれ個別に計算した後、Ａ○Ｂ ＝ Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]（但し、＋は和演算）として、Ａ○Ｂを求めるステップを有することを特徴とする情報処理方法である。
【００４５】
尚、上記信号Ｂは情報信号Ａの変形計算に用いる信号である。
【００４６】
本願の第７の形態は、伝達される信号を入力する入力手段と、所定演算のプログラムを記憶する記憶手段と、計算結果の出力部とを少なくとも有し、前記入力手段から入力された情報信号Ａと、信号Ｂとをもって行うＡ○Ｂ （但し、○は積演算である）の計算を、前記記憶手段に記憶されたステップに従って、前記変形計算に用いる信号ＢをＢ＝ Ｂ[１] ＋ Ｂ[２]＋ … ＋Ｂ[ｎ] を満たすＢ[１]、Ｂ[２]、…Ｂ[ｎ]（但し、ｎは整数）と任意に分割し、前記情報信号Ａと前記Ｂ[１]、Ｂ[２]、…、Ｂ[ｎ]とを用いて
Ａ[１] ＝ Ａ○Ｂ[１]、 Ａ[２] ＝ Ａ○Ｂ[２]、…、Ａ[ｎ] ＝ Ａ○Ｂ[ｎ] （但し、ｎは整数）をそれぞれ個別に計算した後、Ａ○Ｂ ＝ Ａ[１]＋Ａ[２]＋…＋Ａ[ｎ]（但し、○は積演算であり、＋は和演算）として、Ａ○Ｂを求めるステップを有することを特徴とする情報処理方法である。
【００４７】
本願発明の第８の形態では、前記第６および第７の基本思想を合わせ用いることが出来る。即ち、信号Ａと信号ＢとをもってＡ○Ｂの計算を行うに際し、ＡおよびＢの両者を分割、所望の演算を行う。
【００４８】
即ち、Ａ○Ｂ＝（Ａ[１]＋Ａ[２]＋…＋Ａ[ｎ]）○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）として計算するものである。この演算は次のようになる。
【００４９】
（Ａ[１]＋Ａ[２]＋…＋Ａ[ｍ]）○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
＝Ａ[１]○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
＋Ａ[２]○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
・・・・・・
＋Ａ[ｍ]○（Ｂ[１]＋Ｂ[２]＋…＋Ｂ[ｎ]）
＝Ａ[１]○Ｂ[１]＋Ａ[１]○Ｂ[２]＋・・・Ａ[１]○Ｂ[ｎ]
＋Ａ[２]○Ｂ[１]＋Ａ[２]○Ｂ[２]＋・・・Ａ[２]○Ｂ[ｎ]
・・・・・・
＋Ａ[ｍ]○Ｂ[１]＋Ａ[ｍ]○Ｂ[２]＋・・・Ａ[ｍ]○Ｂ[ｎ]
従って、この演算は、ΣＡ[ｉ]○Ｂ[ｊ]（但し、ｉ＝１・・・ｎ、ｊ＝１・
・・ｍ）の結果となる。従って、ｉ＝１あるいはｊ＝１の場合は、ＡあるいはＢのいずれか一方のみを分割した例に相当することとなる。
【００５０】
この方法は、ｎあるいはｍの値を比較的小さな値とした場合、有利な方法である。それは、信号Ａ及び信号Ｂを共に分割する為、その演算工程が長くなることが考慮されるからである。勿論、このことはｎあるいはｍ等の具体的値の選択によることは言うまでもない。
【００５１】
本願の第９の形態は、情報伝達する送信側の情報および信号ｋを、各々当該情報処理方法にて採用される半群Ｓ’におけるの元Ａおよびｋとなし、このＡとｋとのＡ^ｋ（ 但し、ここでＡ^ｋ ＝Ａ△Ａ△…△Ａ（ｋ個）とし、△は半群Ｓ’における演算である） を計算する際に、ｋをｋ ＝ ｋ[１] ＋ ｋ[２] ＋ ｋ[３] ＋ … … ＋ ｋ[ｎ] を満たすｋ[１] 、ｋ[２] 、ｋ[３] 、…、 ｋ[ｎ] （但し、ｎは１以上の整数）と任意に分割し、前記平文Ａと前記ｋ[１] 、ｋ[２] 、ｋ[３] 、… … 、 ｋ[ｎ]とを用いてｈ[１] ＝ Ａ^ｋ[１]、 ｈ[２] ＝ Ａ^ｋ[２] 、…、 ｈ[ｎ] ＝ Ａ^ｋ[ｎ]をそれぞれ個別に計算した後、Ａ^ｋ ＝ ｈ[１] △ｈ[２] △…△ｈ[ｎ] （ 但し、△は半群Ｓ’における演算である）としてＡ^ｋを求めるステップを有することを特徴とする情報処理方法である。
【００５２】
本願の第１０の形態は、情報伝達する送信側の情報および信号ｋを、各々当該情報処理方法にて採用されるモノイドＳ″（単位元ｅを持つ半群）におけるの元Ａおよびｘとなし、このＡとｘとのＡ^ｘ（但し、ここでＡ^ｘ ＝Ａ◇Ａ◇…◇Ａ（ｘ個）とし、◇はモノイドＳ″における演算である） を計算する際に、演算Ａ^ｘ に代えて、Ａ^Ｔ ＝ ｅを満たすＴを用いて、Ａ^（ｘ＋Ｔ）を計算するステップを有すること特徴とする情報処理方法である。
【００５３】
本願の第１１の形態は、前記Ｓ、 Ｓ’、あるいはＳ″が法Ｎ（正の整数）に関する剰余類のなす可換環（半群でもある）であり、和演算＋が法Ｎにおける和であり、上記積演算○、演算△、あるいは演算◇（本項で以下、代表して演算○と記す）が、法Ｎによる乗算剰余演算、Ａ＋Ｂ ＝ （Ａ ＋ Ｂ ） ｍｏｄ Ｎ、 Ａ○Ｂ ＝ Ａ＊Ｂ ｍｏｄ Ｎであることを特徴とする前項１、２、３、および４のいずれかに記載の情報処理方法である。
【００５４】
本願の第１２の形態は、前記Ｓ、 Ｓ’、あるいはＳ″が標数ｐ（素数）の有限体Ｆｑ（但し、ｑ＝ｐ^ｎ）上の楕円曲線Ｅに対するモ−デル・ヴェイユ群Ｇ（Ｅ/Ｆｑ）であり、前記演算△あるいは演算◇がＧ（Ｅ/Ｆｑ）における加法であることを特徴とする前記形態６あるいは７のいずれかに記載の情報処理方法である。
【００５５】
以下に、上述した信号Ａないし信号Ｂの分割の方法の具体的な形態の例に言及する。尚、以下の列挙に際しては、その特徴に対して、情報処理方法および情報処理装置の両者を合わせて示すこととする。それは明細書の記述の簡略化の為である。
【００５６】
本願の第１３の形態は、前記実施の形態１１において、整数 Ｒ とそのビット反転値 ~Ｒを用いて、乗算剰余演算Ａ＊Ｂ ｍｏｄ Ｎ
の際のＢの分割を、Ｂ[１] ＝ Ｂ ＡＮＤ Ｒ、 Ｂ[２] ＝ Ｂ ＡＮＤ ~Ｒ、 Ｂ[３] ＝ ０、… 、Ｂ[ｎ] ＝ ０
と分割することを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００５７】
本願の第１４の形態は、前記実施の形態１１において、Ｂ以下の整数Ｖを用いて、乗算剰余演算Ａ＊Ｂ  ｍｏｄ  Ｎの際のＢの分割を、
Ｂ[１] ＝ Ｖ、Ｂ[２] ＝ Ｂ − Ｖ、Ｂ[３] ＝ ０、… 、Ｂ[ｎ] ＝ ０（但し、ｎは整数）と分割することを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００５８】
本願の第１５の形態は、前記実施の形態１１において、整数 Ｒ とそのビット反転置 ~Ｒを用いて、乗算剰余演算Ａ^ｘ ｍｏｄ Ｎ
の際のｘの分割を、ｘ[１] ＝ ｘ ＡＮＤ Ｒ、 ｘ[２] ＝ ｘ ＡＮＤ~Ｒ、 ｘ[３] ＝ ０、…、ｘ[ｎ] ＝ ０（但し、ｎは整数）と分割することを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００５９】
本願の第１６の形態は、前記実施の形態１１において、Ａ^ｘ ｍｏｄ Ｎの際のｘの分割を、ｘ以下の乱数Vを用いて、ｘ[１] ＝ Ｖ、ｘ[２] ＝ ｘ −Ｖ、 ｘ[３] ＝ ０、…、ｘ[ｎ] ＝ ０（但し、ｎは整数）と分割することを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００６０】
本願の第１７の形態は、前記実施の形態１３、１４、１５、及び１６において、整数ＲまたはＶを、処理の度に毎回変化させることを特徴とする情報処理方法および情報処理装置である。即ち、条件判断の後、計算を分岐させて行うに際し、この分岐後の計算に用いる整数ＲまたはＶを毎回変化させるのである。こうして、よりセキュリティを増すことが出来る。
【００６１】
本願の第１８の形態は、前記実施の形態５において、Ｓとして、法Ｎ（正の整数）に関する剰余類のなす群をとり、演算○として、法Ｎによる乗算剰余演算としたもの、すなわち、Ａ○Ｂ＝Ａ＊Ｂ  ｍｏｄ  Ｎと定め、Ｔとして、オイラ−関数ｆ（Ｎ）（１、２、３、…、ＮのうちＮと互いに素となるものの個数を表す関数）の非負整数Ｓの倍数Ｓf（Ｎ）をとることを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００６２】
本願の第１９の形態は、前記実施の形態１８において、非負整数Ｓの値を処理の度に毎回変化させることを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。即ち、条件判断の後、計算を分岐させて行うに際し、この分岐後の計算に用いる非負整数Ｓの値を毎回変化させるのである。こうして、よりセキュリティを増すことが出来る。
【００６３】
次は、楕円曲線を用いる諸例である。
【００６４】
本願の第２０の形態は、前記実施の形態１２において、整数 Ｒ とそのビット反転値 ~Ｒを用いて、楕円曲線Ｅ上の点Ｐに対し、整数ｋによるスカラ−倍ｋＰを計算する際の、ｋを、ｋ ＝ ｋ[１]＋ｋ[２]＋ｋ[３]＋…＋ｋ[ｎ]、そしてｋ[１] ＝ ｋ ＡＮＤ Ｒ、 ｋ[２] ＝ ｋ ＡＮＤ  ~Ｒ、 ｋ[３] ＝ ｋ[４] ＝…＝ ｋ[ｎ] ＝ ０と分割することを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。但し、ｎは整数である。
【００６５】
本願の第２１の形態は、前記実施の形態１２において、ｋ以下の整数Ｖを用いて、楕円曲線Ｅ上の点Ｐに対し、整数ｋによるスカラ−倍ｋＰを計算する際の、ｋを、
ｋ ＝ ｋ[１]＋ｋ[２]＋ｋ[３]＋…＋ｋ[ｎ]、そしてｋ[１] ＝ Ｖ、 ｋ[２] ＝ ｋ−Ｖ、ｋ[３]＝ｋ[４] ＝…＝ ｋ[ｎ]＝０（但し、ｎは１以上の整数）と分割することを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００６６】
本願の第２２の形態は、前記実施の形態１２において、Ｓとして、標数ｐ（素数）の有限体Fｑ（ｑ＝ｐ^ｎ）上の楕円曲線Ｅに対するモ−デル・ヴェイユ群Ｇ（Ｅ/Ｆｑ）をとり、演算○として、Ｇ（Ｅ/Ｆｑ）における加法と定め、Ｅ上の点Ｐの整数ｋ倍点 ｋＰ を計算する際に、点Ｐの位数Ｒ（ＲＰ＝０となる点（０は無限遠点））の整数Ｓ倍の値ＳＲＰを用いて、ｋＰ＝（ｋ＋ＳＲ）Ｐと計算するとを特徴とする情報処理方法および情報処理装置である。
【００６７】
更に、本願発明においては、変形計算の為の諸情報を、この計算の或る条件分岐に従ってなされる各計算処理工程毎に変化させるのが、更に、好ましい形態である。そして、この変化は、各一つの計算処理工程毎、毎回変化させるのが、代表的な形態である。勿論、或処理のみ変化させることも可能である。変形計算の為の諸情報の変化のさせ方は、情報自体を変化させること、あるいは計算の順序を変化させるなどの方法はが考えられる。以下、この形態を示す。
【００６８】
本願の第２３の形態は、前記形態２０、２１において、整数ＲまたはＶの値を処理で変化させることを特徴とする情報処理方法およびこうした特徴を有する情報処理装置である。
【００６９】
本願の第２４の形態は、前記形態２３において、整数Ｓの値を処理で変えることを特徴とする情報処理方法および情報処理装置である。
【００７０】
本願の第２５の形態は、前記実施の形態１、２、及び３において、Ｂを分離したＢ[１]、Ｂ[２]、Ｂ[３]、…、Ｂ[ｎ]の各々の各計算処理工程において、この工程内の諸計算を行う順序を前記各計算処理工程で変えることを特徴とする情報処理方法および情報処理装置である。
【００７１】
本願の第２６の形態は、前記実施の形態４において、ｋを分離した ｋ[１].ｋ[２]、ｋ[３]、…、ｋ[ｎ]の処理を行う順序を、各処理毎、即ち、計算工程中の諸計算をその計算工程毎に変えることを特徴とする情報処理方法および情報処理装置である。
【００７２】
本願の第２７の形態は、前記実施の形態２５において、Ｓとして、法Ｎ（正の整数）に関する剰余類のなす可換環（半群でもある）をとり、和演算＋を法Ｎにおける和とし、演算○として、法Ｎによる乗算剰余演算としたもの、すなわち、Ａ＋Ｂ ＝ （Ａ ＋ Ｂ ） ｍｏｄ Ｎ、
Ａ○Ｂ ＝ Ａ＊Ｂ ｍｏｄ Ｎとすることを特徴とする情報処理方法および情報処理装置である。
【００７３】
本願の第２７の形態は、前記実施の形態２６において、Ｓとして、法Ｎ（正の整数）に関する剰余類のなす可換環（半群でもある）をとり、和演算＋を法Ｎにおける和とし、演算○として、法Ｎによる乗算剰余演算としたもの、すなわち、Ａ＋Ｂ ＝ （Ａ ＋ Ｂ ） ｍｏｄ Ｎ、
Ａ○Ｂ ＝ Ａ＊Ｂ ｍｏｄ Ｎとする
ことを特徴とする情報処理方法および情報処理装置である。
【００７４】
本願の第２８の形態は、前記実施の形態２６において、Ｓとして、標数Ｐ（素数）の有限体Ｆｑ（ｑ＝Ｐ^ｎ）上の楕円曲線Ｅに対するモ−デル・ヴェイユ群Ｇ（Ｅ/Ｆｑ）をとり、演算○として、Ｇ（Ｅ/Ｆｑ）における加法を用いることを特徴とする情報処理方法および情報処理装置である。
【００７５】
本願の情報処理装置及び情報処理方法の代表的な適用はＩＣカードに代表されるカード部材である。上記の諸形態を適用することが出来る。
【００７６】
以上、本願の主な諸形態の概要を説明したが、次に、カード部材の具体的な適用方法の例について概説する。
【００７７】
上述した情報処理装置を内臓する半導体集積回路装置を、カード部材に適用して、高セキュリティのカード部材を提供することが出来る。カード部材としては接触型と非接触型があるが、本願発明は、勿論いずれの方式にも当然適用することが出来る。
【００７８】
そして、前記チップはこれらの信号を外部から、即ち、例えば端末機から、供給されることによって稼動する。
【００７９】
尚、前記端末機自体は基本的に通例のカード・システムのものを用いて十分である。以下、簡単にカード・システムの動作を例示する。図２１はこのカード・システムの概念を例示する。
【００８０】
ＩＣカード５２の中にはチップ５１があって、リーダライタ５３とデータのやりとりを行う例を示している。リーダライタのなかには、コントロールプロセッサ５４およびデータベースとなる磁気ディスク５５などが存在する。まず、リーダライタ５３からＩＣカード５２に対して、ＩＤの問い合わせが行われる。まず、リーダライタ５３からＩＣカード５２に対して、ＩＤ（ＩＤＥＮＴＩＦＩＣＡＴＩＯＮ）、例えば、当該カードの管理責任者を特定する為の氏名コードまたは認識コードの問い合わせが行われる。図２１にはこの状態を（１）として示した。この氏名コードまたは認識コードはＩＣチップの中にある所定のエリアに格納されている。 ＩＣカードは氏名コードをリーダライタに返答する。図２１にはこの状態を（２）として示した。リーダライタはデータベース５３にある氏名コードを検索して、データベース上の鍵コードを獲得する。
【００８１】
リーダライタは乱数をＩＣカードに送る。この乱数は、例えばリーダライタ内のＭＰＵで回路的に発生される。ＬＡＮ等でサーバ側から乱数を供給することも出来る。ＩＣカードは、乱数を受け取った時点で、コマンドによってリーダライタから指示を受け、乱数を鍵コード発生部に従って発生した鍵コードによって暗号化した乱数を作成する。
【００８２】
一方、リーダライタはＩＣカードと同様にデータベースから得た鍵コードを使用して、ＩＣカードへ送ったのと同じ乱数を暗号化する。これによって得られた暗号化された乱数の結果と先のＩＣカードからの暗号化された乱数を照合して、一致がとれれば、ＩＣカードとリーダライタの相互認識が完了して、ＩＣカードの正当性が認められる。
【００８３】
このようにして、本システムでは、この鍵コードがリーダライタに伝えられるとリーダライタは磁気ディスクの中のＩＤを検索して、正しく登録された鍵コードによるＩＤであると認識する。
【００８４】
生成されたＩＣカードの鍵コード（ＩＤコード）は、氏名コードまたは認識コードとともにデータベースに格納される。
【００８５】
生成された鍵コードは電子マネーとしてＩＣカードが使用される時の本人認証や偽造チェックやＩＣカードとリーダライタの相互認証に使用することが出来る。
【００８６】
上記システムは、例えば、一般商店での支払や、チケットの購入、定期券での改札、免許証のチェック、テレフォンカードによる電話等々多くの分野に応用することが出来る。
【００８７】
以上のようなカード部材ならびにカード・システムは、以下に述べる発明の諸形態を用いて実施可能なことは言うまでもない。
【００８８】
次に、本願発明の実施の諸形態を具体的に説明する。
【００８９】
本実施例では、公開鍵暗号（非対称鍵暗号）の代表例である、ＲＳＡ暗号、楕円曲線暗号を例にとる。これは、他の暗号にも用いることができる。
【００９０】
尚、ＲＳＡ暗号一般については、岡本栄司著「暗号理論入門」（共立出版）や、Ａ．Ｊ．Ｍｅｎｅｚｅｓ、  Ｐ．Ｃ．  Ｖａｎ  Ｏｏｒｓｃｈｏｔ、Ｓ． Ａ． Ｖａｎｓｔｏｎｅ著、ＨａｎｄＢｏｏｋ ｏｆ Ａｐｐｌｉｅｄ Ｃｒｙｐｔｏｇｒａｐｈｙ、（ＣＲＣ−ＰＲＥＳＳ）などに詳しく記載されている。楕円曲線暗号一般については、考案者の一人が書いたＮ．コブリツ著（櫻井幸一訳）「数論アルゴリズムと楕円暗号理論入門」（シュプリンガ−フェアラ−ク東京）、楕円曲線上の演算については、I.H.シルバ−マン・Ｊ.テイト著「楕円曲線論入門」（シュプリンガ−フェアラ−ク東京）、又、群、環、体等の代数系一般については、松坂和夫著「代数系入門」（岩波書店）に詳しい説明がある。
【００９１】
一般に公開鍵暗号（非対称鍵暗号）においては、秘密鍵情報が、公開鍵の中に含まれているが、公開鍵から秘密鍵情報を取り出すことが、計算時間の点で著しく現実性を欠くということ（計算量的安全性）を根拠にして暗号が構成されている。計算量的安全性を持つ問題の代表的なものとして、素因数分解と、群上の離散対数問題が挙げられる。前者を利用したものがＲＳＡ暗号であり、後者を楕円曲線上の群に適用して利用しているものが、楕円曲線暗号である。
【００９２】
＜ＲＡＳ暗号への適用例＞
先ず、簡単に基本となる通例のＲＳＡ暗号を説明する。
【００９３】
ＲＳＡ暗号では、大きな素数、例えば５１２ビットの２つの素数ｐ、ｑの積 ｎ ＝ ｐｑ と ｎと互いに素な数ｅをとり、これを公開鍵として公開鍵簿に登録する。ＩＣカ−ドでは、ｎと互いに素な前述の数 ｅは、３や、６５５３７が用いられることが多い。
【００９４】
デ−タ（平文）の暗号化は次の通りに行われる。
【００９５】
前記公開鍵の持ち主Ａに、送信者Ｂは、１以上Ｎ−１以下の数で表現されたデ−タ（平文） ｙ を、
Ｒ ＝ ｙ^ｅ ｍｏｄ ｎ
として暗号化して、この暗号文Ｒ送信する。ここで、ｙ^ｅはｙのｅ乗を表す記号とする。
【００９６】
この暗号文Ｒを受け取ったＡは、ｘｅ ｍｏｄ （ｐ−１）（ｑ−１） ＝ １となる秘密鍵 ｘ を用いて
Ｒ^ｘ ｍｏｄ ｎ
を計算する。尚、秘密鍵 ｘは、一般には、カード部材、即ち、カード部材に搭載された半導体チップに記憶、内蔵されている。
【００９７】
ここで、（ｐ−１）（ｑ−１）は、Ｎのオイラ−関数の値ｆ（Ｎ）である。これは、Ｎと互いに素な自然数の個数に等しい。オイラ−の定理によれば、
Ｒ^（（ｐ−１）（ｑ−１）） ｍｏｄ ｎ ＝ １
が成りたつ。一方で、ｘｅ ＝ １ ＋ ｋ（ｐ−１）（ｑ−１）（ｋは整数）と書くことができるので、
0003926532.tif 000002
が成り立つ。
【００９８】
従って、Ｒ^ｘ ｍｏｄ ｎを計算することで、公開鍵の持ち主Ａは、送信者Ｂの平文ｙを復号することができる。
【００９９】
この際、秘密鍵ｘを計算するのに、ｎの素因数ｐ、ｑが用いられており、現在のところ、素因数分解を介さないで、ｘを計算する方法は知られていない。従って、大きな素数の積を因数分解することは、現実的でない時間が必要である。この因数分解は事実上不可能といって良い。この為、前述の二つの素数の積ｎが公開されても、公開鍵の持ち主Ａの秘密鍵は安全である。
【０１００】
ＲＳＡ暗号の計算で用いられている演算は、ｎを法とする整数の剰余環Ｚｎ上の演算とみなすことができる。
【０１０１】
ＲＳＡ暗号の暗号化／復号化操作で用いられる演算は、べき乗剰余計算と呼ばれる。図４に、このべき乗剰余計算の計算機上で、通常、実装されるアルゴリズムの例を示す。図４はべき乗剰余計算のフロ−チャ−トである。このｙ^ｘ ｍｏｄ ｎの計算手順の骨子は次ぎの通りである。尚、以下、フロ−チャ−トでの各手順を＜  ＞で囲まれた符号にて示す。
【０１０２】
本例の暗号化の計算がスタートされる。＜０４０１＞
（１）秘密鍵 ｘ のビットを、所望ビット毎、例えば２ビット毎に区切り、上位から読んでいき、それが、００、０１、１０、１１のいずれであるかに応じて、Ａ[０] ＝ １、 Ａ[１] ＝ ｙ、 Ａ[２] ＝ ｙ^２ ｍｏｄ ｎ、 Ａ[３] ＝ ｙ^３ ｍｏｄ ｎ を対応させる。
【０１０３】
（２）これらの乗算剰余計算を行う。
【０１０４】
前述のように秘密鍵 ｘ のビットを２ビット毎に区切ることは説明の便宜のための一例である。実際には秘密鍵 ｘ のビットを１ビット、３ビット、４ビットをまとめて計算することもある。その際も計算手法の基本的な考え方は全く同じである。ｘはｊビット毎に区切る場合は、２＾ｊ乗の計算を行うこととなる。このｘをｊビット毎に区切ることをｗｉｎｄｏｗの幅を通称されている。
【０１０５】
以下に示す本願発明の諸実施形態においても、特にことわりはしないが、この計算方法についての考え方は変わらない。
【０１０６】
この計算の際、四乗の計算＜０４０２＞は、ｘのビットと無関係に行われる。一方、その次に行われる乗算剰余計算においては、ｘのビット（この例では、２ビット分を指す）値に応じて、条件分岐＜０４０３＞、＜０４０４＞、＜０４０５＞、＜０４０６＞が行われる。そして、それぞれのビットに応じて、＜０４０７＞、＜０４０８＞、＜０４０９＞、＜０４１０＞の乗算剰余計算が行われる。この乗算剰余計算の際、各ビットによって異なるのは、テ−ブル＜０４０１＞の値、即ち、Ａ[０]、Ａ[１]、Ａ[２]、Ａ[３]である。
【０１０７】
一般に乗算剰余計算は処理が重く、その際、発生する電流は非常に大きい。特に、多桁計算の際に、Ａ[０]、Ａ[１]、Ａ[２]、Ａ[３]のうち、どれが処理されているかがわかることがある。簡単のため、１６ビットの計算を考える。例えば、ｙ ＝ ５８９８１、 ｎ ＝ ５９９８９（＝２３９＊２５１）として、Ａ[０]、Ａ[１]、Ａ[２]、Ａ[３]を２進数表現すると、以下のようなビット列となる。
【０１０８】
Ａ[０] ＝ ０００００００００００００００１
Ａ[１] ＝ ００１１００１０１００１１０００
Ａ[２] ＝ １０１１００１０１１００１１１０
Ａ[３] ＝ １００１１１１１１００１０１０１
この為、当該ＩＣカ−ドの消費電流を測定すると、各ビット列の違いに対応して、異なる電流波形が生ずる。このような電流波形の違いから、例えば、電流波形パタ−ンが４種類に分類できれば、秘密鍵のビットパタ−ンを見つけることができる。即ち、４種類の電流波形に基づき、その４つの順列のパタ−ン数 ４!＝２４通りを試せば良い。法ｎのビット数が増えた場合も、事情は同様である。
【０１０９】
尚、実装面からは、この乗算剰余計算は処理が重いので、多くのＩＣカ−ドでは、内蔵されるＣＰＵではなく、乗算剰余処理専用のコ・プロセッサが用いられることが多い。
【０１１０】
この攻撃方法は、特にｎのビット数が増加したときに、著しい効果を発揮する。例えば、ｎが２０４８ビットの場合、現在のところ、事実上因数分解を行うのは不可能である。しかし、オシロスコ−プを用いてＩＣチップの消費電流を見ることができれば、秘密鍵のビットパタ−ンを見つけることができる。例えば、ｘ（２０００ビット程度）の値を知るには、次のような手順がある。先ず、２０００ビット程度の消費電流の波形の塊（２ビット毎に区切っていれば、約１０００個の塊）を４通りに分類する。分類された４通りそれぞれについて、別の計算機を用いて、べき乗剰余計算を実行する。そして、この各べき乗剰余計算の結果をＩＣチップから出力される結果と比較して、その両者が一致しているものを探し出せばよい。この検証は高々２４通りにすぎない。従って、デ−タ（平文） ｙ を、Ｒ ＝ ｙ^ｅ ｍｏｄ ｎと暗号化し、且つ秘密鍵 ｘを用いる方法のみでは、十分、デ−タの解読される可能性を有している。
【０１１１】
こうした攻撃から秘密鍵を守る為に、本願発明がなされたことは前述した通りである。
【０１１２】
入力の分割
本願発明の係る入力の分割による方法の第１の例を説明する。
【０１１３】
第１の例は、次ぎのような入力の分割による方法である。
【０１１４】
尚、以下に計算のアルゴリズムと共に主要な実装について例示する。実装についてはここに例示した以外の方策があるものもある。本願明細書において、以下に示す諸実施の形態においても、本例に準じて実装の形態を考えれば十分である。
【０１１５】
秘密鍵を用いた暗号文の交換は、通例の方法による。即ち、暗号を送ってもらうＢが、所定の暗号法で鍵を２つ作成する。一つは自分自身Ｂが保存し、暗号の解読に使用する解読専用の鍵、「秘密鍵」、２つ目は暗号を送ってもらう送信者Ａに送る「公開鍵」である。Ｂは送信者Ａに公開鍵を送るか、事前に公開しておく。Ｂは前記秘密鍵で、送信された暗号の解読を行う。この暗号文の交換法は後述する本願発明の各形態においても同様である。  本例では、例えば、この秘密鍵ｘは、半導体チップの記憶手段、例えば、記憶部のＥＥＰＲＯＭに記憶されている。
【０１１６】
図５に本例の暗号化、復号化に関するフローチャートを示す。
【０１１７】
前述の一般的説明で述べたように、送信者Ａはデ−タｙを、ｙ^ｅ ｍｏｄ ｎ（＝Ｒ）と暗号化して、受信者Ｂに送信する。
【０１１８】
この暗号文Ｒを受け取った受信者Ｂは、秘密鍵ｘを用いてＲ^ｘ  ｍｏｄ  ｎ（＝ｙ）を計算する。尚、この例での秘密鍵ｘは、例えばｘ^ｅ  ｍｏｄ  （ｐ−１）（ｑ−１）＝１を満足するｘを採用する。ここで、暗号化と復号化の計算方法は、同様の計算手法によることが理解される。図５にはデータｙの暗号化の演算のフローチャートを示す。一方、復号化に当っても、全く同様の手法によって、送信された暗号データＲを復号化する。
【０１１９】
本例の暗号化の計算をスタートする。＜０５００＞
（１）予め知られている秘密鍵ｘのビットを所望ビット数に応じて区切る。ビット毎区切られた秘密鍵ｘのビットを、所定の乗算剰余演算によってテ−ブルを作成する。この乗算剰余演算は、例えば、Ａ[０] ＝ １、 Ａ[１] ＝ ｙ、 Ａ[２]＝ ｙ^２ ｍｏｄ ｎ、 Ａ[３] ＝ ｙ^３ ｍｏｄ ｎである。この例は前述したものと同様である。：＜０５０１＞
上記の各演算は、ＩＣの中央演算装置（ＣＰＵ）あるいはコ・プロセッサ等で行われる。この演算結果は、記憶手段、通例、例えばデ−タ格納部のＲＡＭに格納される。これらの格納された諸データは必要に応じて取り出され、諸計算に供される。
【０１２０】
（２）演算結果Ｓを１として、計算を初期化（ｉｎｉｔｉａｌｉｚａｔｉｏｎ）する。：＜０５１４＞
（３）撹乱用の乱数Ｒを発生する。この場合、乱数は疑似乱数でも良い。尚、このＲはｎと同程度のビット数を持つようにする。：＜０５０３＞
この乱数Ｒは一般にＣＰＵで作成される。ＩＣの他の特別の領域で作成されるようになされていることもある。この作成された乱数は一般にデ−タ格納部に格納される。作成された乱数を直接当該演算に用いる場合もある。乱数の発生および計算への採用は、こうした演算方式は暗号化において通例用いている方法によって十分である。
【０１２１】
（４）Ｓの４乗演算を実施する。即ち、この演算はＳ＝Ｓ^４  ｍｏｄ  ｎである。ここでは、秘密鍵ｘのビットの値には依存せずに行われる。：＜０５０２＞（５）ビット毎区切られた秘密鍵ｘのビットが分岐の条件のいずれでであるかの判断を行う。即ち、ｘのビット値が００、０１、１０、あるいは１１のいずれであるのかを判断する。：＜０５０４＞、＜０５０５＞、＜０５０６＞、＜０５０７＞
（６）撹乱用の乱数Ｒを用いて、テ−ブル値の変形計算を行う。
【０１２２】
前述の分岐の条件に応じて、テ−ブル値、Ａ[０]、Ａ[１]、Ａ[２] 、およびＡ[３]を、各々Ｂ[０]、Ｂ[１]への変形計算を行う。
【０１２３】
即ち、
ｘのビット値が００の場合、その変形計算は、Ｂ[０]＝Ａ[０]  ａｎｄ  Ｒ、およびＢ[１]＝Ａ[０]  ａｎｄ  ~Ｒである。：＜０５０９＞
ｘのビット値が０１の場合、その変形計算は、Ｂ[０]＝Ａ[１]  ａｎｄ  Ｒ、およびＢ[１]＝Ａ[０]  ａｎｄ  ~Ｒである。：＜０５１０＞
ｘのビット値が１０の場合、その変形計算は、Ｂ[０]＝Ａ[２]  ａｎｄ  Ｒ、およびＢ[１]＝Ａ[２]  ａｎｄ  ~Ｒである。：＜０５１１＞
ｘのビット値が１１の場合、その変形計算は、Ｂ[０]＝Ａ[３]  ａｎｄ  Ｒ、およびＢ[１]＝Ａ[３]  ａｎｄ  ~Ｒである。：＜０５１２＞
上記の各演算は、ＩＣの中央演算装置（ＣＰＵ）あるいはコ・プロセッサ等で行われる。この演算結果は、記憶手段、通例、例えばデ−タ格納部のＲＡＭに格納される。これらの格納された諸データは必要に応じて取り出され、諸計算に供される。
【０１２４】
図５に示した各変形計算＜０５０９＞、＜０５１０＞、＜０５１１＞、＜０５１２＞により、元の処理デ−タＡ[ｊ]（ｊ＝０、１、２、３、４）は、ランダムに分割される。このランダムな分割は疑似乱数によるランダムな分割をも用いることが出来る。
【０１２５】
先の例と同じく、例えば、ｙ ＝ ５８９８１、 ｎ ＝ ５９９８９（＝２３９＊２５１）とすると、各テ−ブル値は２進数表現で次のようになる。
【０１２６】
Ａ[０] ＝ ０００００００００００００００１
Ａ[１] ＝ ００１１００１０１００１１０００
Ａ[２] ＝ １０１１００１０１１００１１１０
Ａ[３] ＝ １００１１１１１１００１０１０１
これに対して、Ｒ＝１００１１００１１００１０１０１とするとき、ｘのビットが、１０（２進数）であったとすると、Ａ[２]が選択され、その変形計算値は次の通りとなる。
【０１２７】
Ｂ[０]＝１００１００００１００００１００
Ｂ[１]＝０１１００１１００１１０１０１０
Ａ[０]に対しては、撹乱の効果が薄いので、１の代わりに １＋ｎを用いることもある。
【０１２８】
（７）こうして得られたＢ[０]、Ｂ[１]を用いて、＜０５０８＞の処理：
Ｓ１ ＝ Ｓ＊Ｂ[０] ｍｏｄ ｎ
Ｓ２ ＝ Ｓ＊Ｂ[１] ｍｏｄ ｎ
を行う。
【０１２９】
この計算過程では消費電流が大きいことが多いので、電流観測者は、この値を手掛かりに秘密鍵を読もうとするが、ランダムに分割されているため、本来の波形とは異なる波形を見ることになり、混乱する。特に、統計的に処理して波形をより正確に見ようとした場合、乱数が毎回変化するため、さらに効果的である。
【０１３０】
（８）送信されたデ−タの最終的な解読
これまで述べてきた各処理を行っても、Ｂ[０]＋Ｂ[１]＝Ａ[２]である。従って、最終的に、図５に例示した＜０５１３＞の処理
Ｓ１＋Ｓ２ ｍｏｄ ｎ ＝ Ｓ＊（Ｂ[０]＋Ｂ[１]） ｍｏｄ ｎ ＝ Ｓ＊Ａ[２] ｍｏｄ ｎが行われる。
【０１３１】
（９）前記の分岐条件の各ビットが最後までなされたことを判断し＜０５１５＞、この演算を終了＜０５１６＞する。こうして、この計算結果は、正しい結果を与えた送信用のデータとなる。
【０１３２】
こうして得られた暗号化された送信用のデータは、通例、一旦、例えば、ＲＡＭに格納される。そして、必要に応じて、このデータは入出力ポートより出力される。カードに対する入出力に関するカード・システムの概要については、図２１を用いて先に説明したところである。
【０１３３】
尚、受信者が復号化するに当っては、前述の通り全く同様の手法によって、送信された暗号データＲが、Ｒ^ｘ  ｍｏｄ  ｎ（＝ｙ）として復号化される。
【０１３４】
尚、上述の入力データの分割方法では信号Ａのみを分割した例を例示したが、信号Ａ及び信号Ｂの双方を分割して演算を行うことも可能である。即ち、ΣＡ[ｉ]○Ｂ[ｊ]（但し、ｉ＝１・・・ｍ、ｊ＝１・・・ｎ）の計算を行うものである。
【０１３５】
次に、入力データのランダムな分割の別な方法を例示する。
【０１３６】
入力の分割による方法の第２の例を説明する。図６Ａ及び図６Ｂは入力の分割による別の方式を示すフロチャ−ト図である。尚、図６Ａ及び図６Ｂは一連のッフローチャートを示し、図中の（Ａ）及び（Ｂ）で繋がっている。この方法は乱数Ｒの値の範囲を制限する操作を用いるものである。尚、前述の第１の例と異なる手順の部分を主に説明する。
【０１３７】
この例でも、送信者Ａはデ−タｙを、Ｒ＝ｙ^ｅ ｍｏｄ ｎと暗号化して、受信者Ｂに送信する。この暗号文Ｒを受け取った受信者Ｂは、秘密鍵ｘを用いてＲ^ｘ  ｍｏｄ  ｎを計算する。尚、この例での秘密鍵ｘは、例えばｘｅ  ｍｏｄ
（ｐ−１）（ｑ−１）＝１を満足するｘを採用する。
【０１３８】
図６Ａ及び図６Ｂに例示した処理は、計算のスタート＜０６００＞と共に、図５の例と同様に、（１）テ−ブル＜０６０１＞を用意し、（２）計算の初期化＜０６１８＞、（３）撹乱用の乱数Ｒ（ｎと同程度のビット数を持つ）を発生する。：＜０６０３＞、（４）四乗の処理Ｓ＝Ｓ^４  ｍｏｄ  ｎ ＜０６０２＞を行う。ここまでは、秘密鍵ｘのビットの値には依存せずに行われる。
【０１３９】
（５）ｘのビットの値に応じて、条件分岐の判断を行う。即ち、ｘのビット値が００、０１、１０、あるいは１１のいずれであるのかを判断する。：＜０６０４＞、＜０６０５＞、＜０６０６＞、＜０６０７＞
次いで、撹乱用の乱数Ｒを用いて、テ−ブル値の変形計算を行う。即ち、この第２の例の場合は、この変形計算は、次のような操作である。
【０１４０】
（６）分岐の条件に応じて、乱数Ｒの値の範囲を制限する操作を行う。
【０１４１】
ｘのビットの値が００の場合は、乱数ＲをＡ[０]以下に制限した値Ｔ、ｘのビットの値が０１の場合は、乱数ＲをＡ[１]以下に制限した値Ｔ、ｘのビットの値が１０の場合は、乱数ＲをＡ[２]以下に制限した値Ｔ、ｘのビットの値が１１の場合は、乱数ＲをＡ[３]以下に制限した値Ｔ、を各々求める。：＜０６０９＞、＜０６１０＞、＜０６１１＞、＜０６１２＞
（７）次に、前述の分岐の条件に応じて、次の操作がなされる。
【０１４２】
制限された値をＴとした時、このＴを用いて、Ａ[ｊ]（ｊ＝０、１、２、３）の値をランダム分割する処理、Ｂ[０] ＝ Ａ[ｊ] − Ｔ、Ｂ[１] ＝ Ｔ
を行う。：＜０６１４＞、＜０６１５＞、＜０６１６＞、＜０６１７＞
（８）こうして得られたＢ[０]、Ｂ[１]を用いて、＜０６０８＞の処理：
Ｓ１ ＝ Ｓ＊Ｂ[０] ｍｏｄ ｎ
Ｓ２ ＝ Ｓ＊Ｂ[１] ｍｏｄ ｎ  を行う。
【０１４３】
この際の電流が大きいことが多いので、電流観測者は、この値を手掛かりに秘密鍵を読もうとするが、ランダム（疑似乱数によるランダムを含む）に分割されている。従って、本来の消費電流の波形とは異なる波形を見ることになり、混乱する。特に、統計的に処理して消費電流の波形をより正確に見ようとした場合、乱数が毎回変化するため、混乱の度合いはさらに効果的である。
【０１４４】
（９）最終的な＜０６１３＞の処理、Ｓ１＋Ｓ２ ｍｏｄ ｎ ＝ Ｓ＊（Ｂ[０]＋Ｂ[１]） ｍｏｄ ｎ  ＝ Ｓ＊Ａ[ｊ] ｍｏｄ ｎを行う。 このような処理を行っても、Ｂ[０]＋Ｂ[１]＝Ａ[ｊ]であるので、計算結果は、最終的に、正しい結果を与えた送信用のデータを与えている。
【０１４５】
尚、復号化に当っては、前述の通り全く同様の手法によって、送信された暗号データＲを、Ｒ^ｘ  ｍｏｄ  ｎ（＝ｙ）として復号化すれば良い。
【０１４６】
秘密鍵の分割
次に、入力の分割ではなく、秘密鍵を分割する方式の例を説明する。秘密鍵を分割する方式では、直接観測する方式、即ち、単独の消費電流波形を観測する方式には効果がないが、たくさんの波形を集めて統計処理する場合に情報の隠蔽効果があるものである。
【０１４７】
まず、最初に、基本的にＲＳＡ暗号の場合を説明する。先に見たようにＲＳＡ暗号の暗号化/復号化の操作は、図４のように行われる。
【０１４８】
本願発明では、統計処理を行って秘密鍵を読む場合、秘密鍵ｘのビットの値は常に同一でなければならないことに注目して、これをランダム（疑似乱数によるランダムを含む）に分割する。この処理のフロ−チャ−トを図７Ａおよび図７Ｂに示す。尚、図７Ａ及び図７Ｂは一連のフローチャートを示し、図中の（Ａ）で繋がっている。
【０１４９】
図７Ａ及び図７Ｂの処理においては、
（１）前述の処理（図４）と同様に、計算をスタートする＜０７００＞と、先ず、秘密鍵を２ビット毎に区切って処理するためのテ−ブルを用意する。：＜０７０１＞
（２）その後、初期化を行う。即ち、Ｓ１＝１およびＳ２＝１とする。その各々Ｓ１およびＳ２が、２つに分割された秘密鍵の計算結果に対応する。：＜０７１４＞
（３）撹乱用の乱数Ｒを用意する。この場合、乱数は疑似乱数でも良い。：＜０７０２＞
（４）撹乱用の乱数Ｒを用いて、次のように、秘密鍵ｘを二つに分割する。＜０７０３＞
ｔ[０] ＝ ｘ Ａｎｄ Ｒ
ｔ[１] ＝ ｘ Ａｎｄ ~Ｒ   ここで、~ＲはＲのビット反転値である。
【０１５０】
この２つの分割された秘密鍵を用いて、それぞれにべき乗剰余計算を行う。このべき乗剰余計算の過程は、通常の処理と同様である。
【０１５１】
（５）まず、四乗の処理、Ｓ１＝Ｓ１＾４ ｍｏｄ ｎ、 Ｓ２＝Ｓ２＾４ ｍｏｄｎが行われる。＜０７０４＞、＜０７０５＞
（６）前記ｔ[０]およびｔ[１]の上位のビットから２ビット毎、順々に、００、０１、１０、および１１のいずれかを条件として分岐する。＜０７０６＞、＜０７０７＞、＜０７０８＞、＜０７０９＞、＜０７１０＞、＜０７１１＞、＜０７１２＞、＜０７１３＞
（７）前記Ｓ１およびＳ２とテ−ブル０７０１の値との乗算剰余計算を行う。それらは、Ｓ１＝Ｓ１＊Ａ[ｊ] ｍｏｄ ｎ、但し、ｊ＝０、１、２、３、および Ｓ２＝Ｓ２＊Ａ[ｊ] ｍｏｄ ｎ、但し、ｊ＝０、１、２、３である。＜０７１４＞、＜０７１５＞、＜０７１６＞、＜０７１７＞、＜０７１８＞、＜０７１９＞、＜０７２０＞、＜０７２１＞
（８）これが最後のビットまで行われれば、計算を処理を終了し、Ｓ１、Ｓ２を得る。＜０７２３＞、＜０７２４＞
（９）最後に、Ｓ１＊Ｓ２ ｍｏｄ ｎを計算し、終了する。＜７０２５＞、＜７０２６＞
Ｔ[０]＋Ｔ[１]＝ｘであるので、Ｓ１＊Ｓ２ ｍｏｄ ｎ ＝ ｙ^ｘ ｍｏｄ ｎに等しくなり、送信デ−タの正しい答となっている。
【０１５２】
電流波形の統計処理においては、秘密鍵の各ビットの値は、何回処理を行っても同一であるということが必要である。最も簡単な統計処理の例は、波形に乗っているノイズ成分の除去の為に行う平均化である。これは広く利用されているノイズ除去手法である。実際、多くのデジタルオシロスコ−プでは、波形の平均化機能が装備されている。図４に例示した通常の処理では、同一の入力を繰り返し行うことにより、ノイズ成分以外は全て全く同一の電流値が出力される。従って、これを多数収集して、平均をとれば、ノイズが除去される。これは、独立かつ同一の分布に従う確率変数の多数の標本に対する標本平均は、各標本に対する理論的平均値に近いという、いわゆる「大数の法則」に基づくものである。実際、オシロスコ−プで測定した電流値は、本来の電流値に平均０の電流ノイズが加わっていると考えることができる。平均が０であると仮定できる理由は、もしも、ノイズ成分の平均値が０でないとすると、本来の電流値以外に直流成分が含まれていることになるからである。
【０１５３】
一方、図７Ａ及び図７Ｂに示した対策を行ったという事実を電流観測者が知っていた場合、Ｓ１、Ｓ２の系列に対してＴ[０]、Ｔ[１]を求め、最後にその和をとれば、正しい鍵を求めることができる。しかし、一般には電流ノイズをハ−ドウエアによって完全に除去することは困難であり、単一の電流波形の観測だけでは、鍵Ｔ[０]、Ｔ[１]を完全に特定することは困難である。従って、確実性を向上させるためには、複数の波形の採取が必要である。ところが、図７Ａ及び図７Ｂに示した処理においては、測定するたびに、乱数Ｒの値が変化し、それによりＴ[０]、Ｔ[１]の値が変化してしまうので、平均化操作を行うと、各ビットの値が平均化されてしまい、本来のビット値００、０１、１０、１１が、得られず、これらの平均電流となり、差が見えなくなる。
【０１５４】
更に本願における指数を分割する別な方法を説明する。
【０１５５】
この処理のフロ−チャ−トを図８Ａ及び図８Ｂに示す。両図は（Ａ）でが繋がっており、一つのフロー・チャートとなる。
【０１５６】
図８Ａ及び図８Ｂに示す処理においては、計算がスタートする＜０８００＞と次の工程を経て、計算される。
【０１５７】
（１）前述の処理（図４）と同様に、秘密鍵を２ビット毎に区切って処理するためのテ−ブルを用意する。：＜０８０１＞
（２）その後、初期化を行う。即ち、Ｓ１＝１およびＳ２＝１とする。その各々Ｓ１及びＳ２が２つに分割された指数、即ち、分割された秘密鍵情報に対応する。：＜０８２３＞
（３）撹乱用の乱数Ｒを用意する。この場合、乱数は疑似乱数でも良い。：＜０８０２＞
（４）指数ｘを二つに分割する。＜０８０３＞
ｔ[０]＝Ｖ
ｔ[１]＝ｘ−Ｖ
（５）この２つの分割された秘密鍵を用いて、それぞれにべき乗剰余計算を行う。この過程は、通常の処理と同様である。
【０１５８】
まず、ｔ（０）、ｔ（１）の各々に対して、四乗の処理、Ｓ１＝Ｓ１＾４ ｍｏｄ ｎ、 Ｓ２＝Ｓ２＾４ ｍｏｄ ｎが行われる。＜０８０４＞、＜０８０５＞
（６）前記ｔ[０]およびｔ[１]の上位のビットから２ビット毎、順々に、００、０１、１０、および１１のいずれかを条件として分岐する。＜０８０６＞、＜０８０７＞、＜０８０８＞、＜０８０９＞、＜０８１０＞、＜０８１１＞、＜０８１２＞、＜０８１３＞
（７）前記Ｓ１およびＳ２とテ−ブル＜０８０１＞の値との乗算剰余計算を行う。それらは、Ｓ１＝Ｓ１＊Ａ[ｊ] ｍｏｄ ｎ、但し、ｊ＝０、１、２、３、および Ｓ２＝Ｓ２＊Ａ[ｊ] ｍｏｄ ｎ、但し、ｊ＝０、１、２、３である。＜０８１４＞、＜０８１５＞、＜０８１６＞、＜０８１７＞、＜０８１８＞、＜０８１９＞、＜０８２０＞、＜０８２１＞
（８）これが最後のビットまで行われれば、計算を処理を終了し、Ｓ１、Ｓ２を得る。＜０８２４＞、＜０８２５＞
（９） 最後に、Ｓ１＊Ｓ２ ｍｏｄ ｎを計算する。
【０１５９】
ｔ[０]＋ｔ[１]＝ｘであるので、Ｓ１＊Ｓ２ ｍｏｄ ｎ ＝ ｙ^ｘ ｍｏｄ ｎに等しくなっている。送信デ−タの正しい答が得られる。＜０８２６＞
消費電流波形の統計処理においては、秘密鍵の各ビットの値は、何回処理を行っても同一であるということが必要である。最も簡単な統計処理の例は、波形に乗っているノイズ成分の除去の為に行う平均化である。これは広く利用されているノイズ除去手法であり、実際、多くのデジタルオシロスコ−プでは、波形の平均化機能が装備されている。通常の処理（図４）では、同一の入力を繰り返し行うことにより、ノイズ成分以外は全て全く同一の電流値が出力される。従って、これを多数収集して、平均をとれば、ノイズが除去される。
【０１６０】
一方、図８Ａ、図８Ｂに示した対策を行ったという事実を電流観測者が知っていた場合、Ｓ１、Ｓ２の系列に対してＴ[０]、Ｔ[１]を求め、最後にその和をとれば、正しい鍵を求めることができる。
【０１６１】
しかし、一般には電流ノイズをハ−ドウエアによって完全に除去することは困難である。従って、単一の電流波形の観測だけでは、鍵Ｔ[０]、Ｔ[１]を完全に特定することは困難である。この為、確実性を向上させるためには、複数の波形の採取が必要である。ところが、図８Ａ、図８Ｂに示した処理においては、測定するたびに、乱数Ｒの値が変化し、それによりＴ[０]、Ｔ[１]の値が変化してしまうので、平均化操作を行うと、各ビットの値が平均化されてしまい、本来のビット値００、０１、１０、１１が、得られず、これらの平均電流となり、差が見えなくなる。
【０１６２】
秘密鍵の撹乱の別な方法の例を説明する。
【０１６３】
鍵の撹乱の別な方法として、オイラ−関数 f（ｎ）＝（ｐ−１）（ｑ−１） を用いる方法を挙げることができる。
【０１６４】
べき乗剰余演算を用いた場合、ｙとｎとが互いに素な自然数であえば、オイラ−の定理により、
ｙ^f（ｎ） ｍｏｄ ｎ ＝１
となることが知られている。この事実を利用すると、
ｙ^ｘ ｍｏｄ ｎ ＝ ｙ^（ｘ＋Ｓf（Ｎ）） ｍｏｄ ｎ
という関係が成り立つ。
【０１６５】
この場合の処理の流れを図９に示す。これは、図４に示した通常のべき乗剰余処理とほぼ同じ構成をとっている。
【０１６６】
（１）まず、入力値を２ビット毎に処理するためにテ−ブル０９０１を作成する。このテーブルは図５の例と同様である。＜０９０１＞
（２）演算結果の初期化を行う。＜０９０４＞
（３）撹乱用の乱数Ｒを生成する。この場合、前記乱数は疑似乱数でも良い。＜０９０２＞
（４）指数ｘを ｕ ＝ ｘ ＋ Ｒf（ｎ）に交換する。＜０９０３＞
この後の処理は、通常のべき乗剰余演算と同様にである。
【０１６７】
（５）前記ｕのビットパタ−ンを頭から読んでいき、四乗剰余演算、Ｓ＝Ｓ^４
ｍｏｄ  ｎを行う。＜０９０４＞
（６）そのｕのビット値が、００、 ０１、 １０、 １１のいずれかの判断を行い処理を分岐する。＜０９０５＞、＜０９０６＞、＜０９０７＞、＜０９０８＞
（７）前記のビット値の従った分岐に応じて、Ｓ＝Ｓ＊Ａ[ｊ]  ｍｏｄ  ｎ、但し、ｊ＝０、１、２、３の乗算剰余演算を行う。ここで、Ａ[０]＝１、 Ａ[１]＝ｙ、 Ａ[２]＝ｙ^２ ｍｏｄ ｎ、 Ａ[３]＝ｙ^３ ｍｏｄ ｎである。＜０９０９＞、＜０９１０＞、 ＜０９１１＞、＜０９１２＞
（８）これを指数のビット長まで繰り返して処理を終わる。＜０９１４＞、＜０９１５＞
例えば、Ｎ ＝ １８７（＝１１＊１７）のとき、f（Ｎ）＝（１１−１）＊（１７−１）＝１６０である。従って、指数が、ｘ ＝ ３８ ＝ （１００１１０）（２進数表現）であれば、
ｘ＋ｆ（Ｎ）＝ ３８ ＋ １６０ ＝ １９８ ＝ （１１０００１１０） （２進数表現）
ｘ＋２ｆ（Ｎ）＝３８ ＋ ３２０ ＝ ３５８ ＝ （１０１１００１１０） （２進数表現）
等のように異なるビットパタ−ンを生ずる。
【０１６８】
このように、元のｘとは異なる条件分岐を行い、該当する波形が撹乱される。
【０１６９】
しかし、ｘ＋Ｓｆ（Ｎ）は、ｘとは異なるビットパタ−ンを持つが、上に見たように、法Ｎの剰余類においては、ｘと同等のものである。従って、一回の電流観測によってｘ＋Ｓｆ（Ｎ）のビットパタ−ンを知ることができれば、秘密鍵 ｘ を盗み出したのと同じことになる。一方、電流の観測においては、電流ノイズが避けられず、波形の平均化をしなければならないことが多い。その際、図９の例のように、Ｓの値をべき乗剰余演算毎に変化、特にランダムにさせれば、波形を多く観測しても、指数該当部の波形が平均化されてしまい、ビットの特徴を撹乱される。尚、前記ランダムにさせることは、乱数の外に疑似乱数をも用いることが出来る。
【０１７０】
次に、上記の考え方を楕円曲線暗号に対して適用することを考察する。
【０１７１】
まず、楕円曲線暗号自体について、簡単に説明する。
【０１７２】
楕円曲線とは、体Ｋの上で定義された、３次多項式の零点集合である。
【０１７３】
Ｋの標数が２でない場合は、
ｙ^２ ＝ ｘ^３ ＋ Ａｘ^２ ＋ Ｂｘ ＋c
という標準形を持つ。標数が２の体の上では、
ｙ^２ ＋ cｙ ＝ ｘ^３ ＋ Ａｘ ＋ Ｂ 又は、
ｙ^２ ＋ ｘｙ ＝ ｘ^３ ＋ Ａｘ ＋ Ｂ
という標準形を持つ曲線である。いずれの場合も、後に説明する無限遠点０を含めて考える。図１０に楕円曲線の形状の例を示す。横軸はＸ軸、縦軸はＹ軸で、各々任意単位である。図１０における曲線１００および１０１が楕円曲線の例である。本発明において、標数が２であるか否かは、本質的ではないので、以下、簡単のため、標数が２でない場合について説明する。又、暗号で必要なのは、有限体の場合のみであるので、その場合に限って説明する。有限個の元からなる体を有限体又はガロア体といい、その構造はよく知られている。その最も単純な構成法は以下の通りである。
【０１７４】
まず、素数ｐを法とする整数環の剰余環 Ｚｐを考える。Ｚｐにおいては、０以外の元は逆を持つので、体の構造を持っている。これを素体といい、Ｆｐと書く。これが最も原始的な有限体の例である。
【０１７５】
次に、Ｆｐの元を係数に持つ多項式ｆ（Ｘ）を考え、その零点のうち、ＦＰに含まれないものをＦｐに添加することによって、新しい体を構成することができる。これを、Ｆｐの有限次代数拡大体という。ＦＰの有限次代数拡大体の元の個数は、ｐのべきになっていることが知られている。その元の個数をｑと書くとき、有限次代数拡大体をＦｑなどと表示することがある。
【０１７６】
楕円曲線上の点の間には、演算を定めることができる。前述の図１０を用いて楕円曲線上の加法の考え方を示す。楕円曲線上の二つの点、Ｐ、Ｑがあるとき、この二点を通る直線を引き、この直線が再び楕円曲線と交わる点Ｓをｘ軸に関して対称に折り返した点は、曲線の対称性から、再び楕円曲線上の点となる。この点をＰ＋Ｑと書き、ＰとＱの「和」と定義する。尚、Ｐ＝Ｑの場合、前記二点を通る直線は、この点での接線を用いる。交わる点がない場合は、架空の点として無限遠点というものを考え、この架空の点で交わっているものとみなす。無限遠点を０と書く。また、楕円曲線上の点Ｐとｘ軸に関して対称な位置にある点をＰの逆元といい、−Ｐで表す。Ｇ（Ｅ／Ｆｑ）における一点Ｐをｋ個加えたものを、ｋＰ、−Ｐをｋ個加えたものを−ｋＰと書いて、Ｐのスカラ−倍という。これらの座標は、Ｐ、Ｑの座標の有理式で表すことができ、従って、一般の体の上でこの演算を考えることができる。この「加法」は、通常の加法と同様に、結合法則、交換法則が成立し、この加法に関して、無限遠点０は、通常の数での演算と同様にゼロの役割を果たす。−Ｐは、Ｐと加えると、０になる。これは楕円曲線上の加法演算が、可換群（ア−ベル群）の構造を持つことを示している。これをモ−デル・ヴェイユ群ということがある。楕円曲線Ｅ、定義体Fｑを固定したときのモ−デル・ヴェイユ群を、 Ｇ（Ｅ／Ｆｑ） と書くことがある。 Ｇ（Ｅ／Ｆｑ） の構造は非常に単純で、巡回群か、または二つの巡回群の直積と同型になることが知られている。
【０１７７】
一般に、ｋＰ＝Ｑの値がわかっても、逆にｋの値を知るのは計算量が膨大になるため、容易でない。これを楕円曲線上の離散対数問題という。楕円曲線暗号では、楕円曲線上の離散対数問題が困難であることを利用している。
【０１７８】
次に、本願の係わる楕円曲線を利用した暗号方式を説明する。楕円曲線を利用した暗号方式には種々のものがある。これらを例示すれば、楕円ＥｌＧａｍａｌ方式、楕円ＥＳＡ（Ｅｌｅｃｔｒｉｃ  Ｓｉｇｎａｔｕｒｅ  Ａｌｇｏｒｉｔｈｍ）などである。ここでは、特に、楕円ＥｌＧａｍａｌ方式を説明する。本方法は楕円曲線上で点のスカラー倍を用いる暗号方式については全く同様に適用することが出来る。
【０１７９】
楕円曲線Ｅとその上の一点Ｐが公開されているものとする。この点Ｐは、一般に大きな位数を持つ点であり、これをベ−スポイントと呼ぶ。
【０１８０】
Ａ氏が、Ｂ氏に秘密情報Ｍを送信することを考える。秘密情報Ｍは、楕円曲線上の点で表現される。尚、平文（暗号文）の楕円曲線上の埋め込みについては、Ｎ.コブリッツ、櫻井幸一訳「数論アルゴリズムと楕円暗号入門」シュプリンガ−フェアラ−ク Ｐ.２５３に説明されている。
【０１８１】
＜ＳＴＥＰ １＞受信者Ｂ氏は、正整数 ｘ[Ｂ] を選び、これを秘密鍵として保持し、Ｙ[Ｂ] ＝ ｘ[Ｂ]Ｐを公開鍵簿に登録する。
【０１８２】
＜ＳＴＥＰ ２＞送信者 Ａ氏は、乱数 Ｒ を用いて、Ｃ１ ＝ ＲＰおよびＣ２ ＝ Ｍ＋ ＲＹ[Ｂ]をＢ氏に送信する。
【０１８３】
＜ＳＴＥＰ ３＞ 受信者Ｂ氏は、Ｃ１、Ｃ２を受け取り、自分の秘密鍵ｘ[Ｂ]を用いて、Ｃ２ − ｘ[Ｂ]Ｃ１ ＝ ＭとしてＭを復元する。
【０１８４】
楕円ＥｌＧａｍａｌ暗号に限らず、楕円曲線暗号においては、楕円曲線上の点のスカラ−倍を計算する必要がある。
【０１８５】
楕円曲線上の点のスカラ−倍を求めるアルゴリズムは、べき乗剰余計算のアルゴリズムに類似している。図１１は、Ｐのスカラー倍、ｋＰ（但し、ｋは正整数）を計算する標準的なアルゴリズムをべき乗剰余計算と同様に２ビットづつまとめて処理する例のフローチャートである。
【０１８６】
（１）まず、２ビットの処理を一度に行う為に、ベ−スポイントＰのテ−ブルを作る。べき乗剰余演算においては、ｍｏｄ ｎでの０乗、１乗、２乗、３乗に対応して、O（無限遠点）、Ｐ、２Ｐ、３Ｐを用意する。即ち、Ｐ[０]＝０、Ｐ[１]＝Ｐ、Ｐ[２]＝２Ｐ、Ｐ[３]＝３Ｐである。＜１２００＞、＜１２０１＞
べき乗剰余演算とは異なり、このテ−ブルは毎回書き換える必要はなく、あらかじめ用意しておくことができる。
【０１８７】
（２）計算用の点の値を初期化する。＜１２０２＞
（３）前記の点の四倍、Ｓ＝４Ｓを計算する。＜１２０３＞
（４）２ビット毎にｋのビットの値を見て、その各々が００、０１、１０、１１の何れの条件であるか判断する。＜１２０４＞、＜１２０５＞、＜１２０６＞、＜１２０７＞ここで、秘密鍵ｋはＩＣチップ内、例えば、そのＥＥＰＲＯＭ内に納められている。
【０１８８】
（５）前記の条件に応じて、計算を分岐して、これらに対応して、各々に点Ｐ[０]、Ｐ[１]、Ｐ[２]、Ｐ[３]を加える。即ち、Ｓ＝Ｓ＋Ｐ[ｊ]（但し、ｊ＝０、１、２、３）である。＜１２０８＞、＜１２０９＞、＜１２１０＞、＜１２１１＞
（６）この処理をｋのビットが尽きるまで続けることにより、ｋＰを計算することができる。そして、計算を終了する。＜１２１３＞、＜１２１４＞
この計算はｋの上位から２ビットづつ区切って見て計算する方式である。べき乗剰余計算と、数学的には同一の構造をしていることがわかる。後に再び説明するが、ＲＳＡにおけるべき乗剰余演算、楕円曲線上の加法演算は、それぞれ、Ｚｎ、Ｇ（Ｅ／Ｆｑ）という代数系の上で行われる演算と考えることができ、これらを、より一般の代数系に拡張することが出来る。その際の計算機演算の方法も、基本的には、ここで述べたアルゴリズムにより処理される。
【０１８９】
一方で、マイクロコンピュ−タが内部のプログラムを実行する際、動作時の内部消費電力が漏洩する可能性があるため、このプロセスをマイクロコンピュータで実現する場合、秘密鍵の処理が漏洩し、危険に曝されることになる。例えば、ｋのビットの違いにより、分岐が行われるので、もしも、その処理が消費電流の差として現れれば、電流波形からｋのビットを特定することができる可能性がある。この例ではｋは２ビット毎の違いである。
【０１９０】
先に見たように楕円曲線暗号の暗号化／復号化の操作は、前記の図１１のフローチャートに示した手順で行われる。
【０１９１】
統計処理を行って秘密鍵を読む場合、秘密鍵ｋのビットの値は常に同一でなければならないことに注目して、これをランダムに分割する。
【０１９２】
即ち、この方法はスカラー倍におけるスカラーを分割する方式である。尚、この場合、前記ランダムなる分割は、疑似乱数によるランダムを含んで良い。この処理のフローチャートを図１２Ａ及び図１２Ｂに示す。両図は（Ａ）でが繋がっており、一つのフロー・チャートとなる。
【０１９３】
（１）図１２Ａ、図１２Ｂの処理例では、秘密鍵ｋを２ビット毎に区切って処理するためのテ−ブルを用意する。この処理は図１１に示される処理と同様である。＜１３００＞、＜１３０１＞
（２）計算用の点の値を初期化する。即ち、Ｓ１＝０、Ｓ２＝０となす。＜１３２３＞
（３）撹乱用の乱数Ｒを用意する。＜１３０２＞
（４）撹乱用の乱数Ｒを用いて、次のように、秘密鍵ｋを二つに分割する。＜１３０３＞
ｔ[０] ＝ ｋ ａｎｄ Ｒ
ｔ[１] ＝ ｋ ａｎｄ ~Ｒ
ここで、~ＲはＲのビット反転値である。
【０１９４】
この２つに分割された秘密鍵を用いて、それぞれにべき乗剰余計算を行う。この過程は、通常の処理と同様である。
【０１９５】
（５）まず、４倍の処理、Ｓ１＝４Ｓ１およびＳ２＝４Ｓ２の処理を行う。＜１３０４＞、＜１３０５＞
（６）ｔ[０]、ｔ[１]の各々について、上位のビットから２ビットづつ順々に００、０１、１０、１１のいずれかの判断を行う。＜１３０６＞、＜１３０７＞、＜１３０８＞、＜１３０９＞、＜１３１０＞、＜１３１１＞、＜１３１２＞、＜１３１３＞
（７）前記の分岐条件に従って、テ−ブル１３０１の値との乗算剰余計算、Ｓ１＝Ｓ１＋Ａ[ｊ]（但し、ｊ＝０、１、２、３）、Ｓ２＝Ｓ２＋Ａ[ｊ]（但し、ｊ＝０、１、２、３）を行う。＜１３１４＞、＜１３１５＞、＜１３１６＞、＜１３１７＞、＜１３１８＞、＜１３１９＞、＜１３２０＞、＜１３２１＞
（８）これが最後のビットまで行われれば、処理を終了し、Ｓ１、Ｓ２を得る。＜１３２５＞、＜１３２４＞
（９）最後に、Ｓ１＋Ｓ２、即ち楕円曲線上の和を計算する。ｔ[０]＋ｔ[１]＝ｋであるので、Ｓ１＋Ｓ２＝ｋＰに等しくなり、正しい答となっている。＜１３２２＞、＜１３２６＞
尚、上記の例では、鍵情報ｋを２ビット毎区切る例である。しかし、この鍵情報の区切りは、他のビット数、例えば、３ビットあるいは４ビットをまとめて計算を行うことが出来る。この場合、ｋをｊビット毎区切る場合、２＾ｊ倍の計算を行うこととなる。これは先に説明した剰算剰余計算の場合と類似する考え方である。
【０１９６】
電流波形の統計処理においては、秘密鍵の各ビットの値は、何回処理を行っても同一であるということが必要である。最も簡単な統計処理の例は、波形に乗っているノイズ成分の除去の為に行う平均化である。これは広く利用されているノイズ除去手法であり、実際、多くのデジタルオシロスコ−プでは、波形の平均化機能が装備されている。通常の処理（図１１）では、同一の入力を繰り返し行うことにより、ノイズ成分以外は全て全く同一の電流値が出力される。従って、これを多数収集して、平均をとれば、ノイズが除去される。
【０１９７】
一方、図１２Ａ及び図１２Ｂに例示した対策を行ったという事実を電流観測者が知っていた場合、Ｓ１、Ｓ２の系列に対してｔ[０]、ｔ[１]を求め、最後にその和をとれば、正しい鍵を求めることができる。しかし、一般には電流ノイズをハ−ドウエアによって完全に除去することは困難であり、単一の電流波形の観測だけでは、鍵ｔ[０]、ｔ[１]を完全に特定することは困難である。従って、確実性を向上させるためには、複数の波形の採取が必要である。
【０１９８】
ところが、図１２Ａ及び図１２Ｂの処理においては、電流波形を測定するたびに、乱数Ｒの値が変化し、それによりｔ[０]、ｔ[１]の値が変化してしまうので、平均化操作を行うと、各ビットの値が平均化されてしまう。従って、本来のビット値００、０１、１０、１１が、得られない。この為、平均化操作を行った電流波形は、各単一電流波形の平均電流となり、差が見えなくなる。
【０１９９】
ＲＳＡ暗号におけるべき乗剰余演算の場合と類似の方法を用いて、秘密鍵の別の分割方法を考えることができる。この例を図１３Ａおよび図１３Ｂに例示する。両図は図中の（Ａ）において繋がって、一つのフロー・チャートを形成する。
【０２００】
図１３Ａおよび図１３Ｂに例示する処理においては、図１１に示す通常の処理と同様に、計算をスタートする＜１４００＞と、（１）秘密鍵ｋを２ビット毎に区切って処理するためのテ−ブル＜１４０１＞を用意する。即ち、Ｐ[０]＝０、Ｐ[１]＝Ｐ、 Ｐ[２]＝２Ｐ、 Ｐ[３]＝３Ｐである。
【０２０１】
（２）その後、計算結果の初期化を行い＜１４２３＞、（３）撹乱用の乱数Ｒを用意する。この場合、乱数Ｒは疑似乱数でも良い。＜１４０２＞
（４）ｋ以下の値しかとらない撹乱用の乱数Ｖを用いて、次のように、秘密鍵ｋを二つに分割する＜１４０３＞。
【０２０２】
ｔ[０] ＝ Ｖ
ｔ[１] ＝ ｋ − Ｖ
（５）この２つの分割された秘密鍵を用いて、それぞれにべき乗剰余計算を行う。この過程は、通常の処理と同様である。まず、各値、Ｓ１およびＳ２の４倍の処理が行われる。＜１４０４＞、＜１２０５＞
（６）ｔ[０]、およびｔ[１]の上位のビットから２ビットづつ順々に００、０１、１０、１１のいずれかの条件であるか判断する。＜１４０６＞、＜１４０７＞、＜１４０８＞、＜１４０９＞、＜１４１０＞、＜１４１１＞、＜１４１２＞、＜１４１３＞、
（７）前記条件に応じて、計算を分岐して、テーブルの値との乗算剰余計算を行う。＜１４１４＞、＜１４１５＞、＜１４１６＞、＜１４１７＞、＜１４１８＞、＜１４１９＞、＜１４２０＞、＜１４２１＞
（８）この計算が最後のビットまで行われれば、処理を終了し、Ｓ１、Ｓ２を得る。＜１４２４＞、＜１４２５＞
（９）最後に、Ｓ１＋Ｓ２を計算する。＜１４２２＞、＜１４２６＞
ｔ[０]＋ｔ[１]＝ｋであるので、Ｓ１＋Ｓ２ ＝ ｋＰに等しくなり、正しい答となっている。＜１４２０＞
電流波形の統計処理においては、秘密鍵の各ビットの値は、何回処理を行っても同一であるということが必要である。最も簡単な統計処理の例は、波形に乗っているノイズ成分の除去の為に行う平均化である。これは広く利用されているノイズ除去手法であり、実際、多くのデジタルオシロスコ−プでは、波形の平均化機能が装備されている。通常の処理（図１1）では、同一の入力を繰り返し行うことにより、ノイズ成分以外は全て全く同一の電流値が出力される。従って、これを多数収集して、平均をとれば、ノイズが除去される。
【０２０３】
一方、図１３Ａおよび図１３Ｂに例示した対策を行ったという事実を電流観測者が知っていた場合、Ｓ１、Ｓ２の系列に対してｔ[０]、ｔ[１]を求め、最後にその和をとれば、正しい鍵を求めることができる。しかし、一般には電流ノイズをハ−ドウエアによって完全に除去することは困難である。この為、単一の電流波形の観測だけでは、鍵ｔ[０]、ｔ[１]を完全に特定することは困難である。従って、確実性を向上させるためには、複数の波形の採取が必要である。
【０２０４】
ところが、図１３Ａおよび図１３Ｂに例示した処理においては、電流波形を測定するたびに、乱数Ｒの値が変化し、それによりｔ[０]、ｔ[１]の値が変化してしまうので、平均化操作を行うと、各ビットの値が平均化されてしまう。従って、本来のビット値００、０１、１０、１１が、得られない。この為、平均化操作を行った電流波形は、各単一電流波形の平均電流となり、差が見えなくなる。
【０２０５】
次に楕円曲線の場合と類似の方法を用いた場合の例を例示する。
【０２０６】
Ｇ（Ｅ/Ｆｑ）においては、全ての元（それは、楕円曲線上の点に相当する）Ｐに対して、ｍＰ＝０となるような正の整数ｍが存在する。このうち最小のものをＰの位数（oｒdｅｒ）といい、oｒd（Ｐ）などと書く。
【０２０７】
定義より、oｒd（Ｐ）Ｐ ＝ ０が成り立つ。従って、任意の整数 Ｓ に対して、
（ ｋ ＋ Ｓ＊oｒd（Ｐ））Ｐ ＝ ｋＰが成り立つ。これは、べき乗剰余計算において、ｙ^（ｘ＋Ｓf（ｎ）） ｍｏｄ ｎ ＝ ｙ^ｘ ｍｏｄ ｎ
が成り立つことの楕円曲線における類似である。
【０２０８】
この性質を用いれば、ｋとはビットパタ−ンの異なる鍵 ｋ ＋ Ｓ＊oｒd（Ｐ） が得られる。これを利用して統計処理による電流解析を撹乱するアルゴリズムを、図１４に示す。
【０２０９】
まず、計算を開始する＜１５００＞と、（１）入力値を２ビット毎に処理するためにテ−ブル＜１５０１＞を作成する。即ち、Ｐ[０]＝０、Ｐ[１]＝Ｐ、Ｐ[２]＝２Ｐ、Ｐ[３]＝３Ｐである。
【０２１０】
（２）次に、計算結果を初期化、Ｓ＝０とした後＜１５１０＞、（３）撹乱用の乱数Ｒを生成し＜１５０２＞する。この場合、乱数Ｒは疑似乱数でも良い。
【０２１１】
次いで、スカラ−を、ｋから ｕ＝ｋ＋Ｒ＊oｒd（Ｐ）に交換する＜１５０３＞。
【０２１２】
この後の処理は、通常のべき乗剰余演算と同様に、（４）ｕのビットパタ−ンを頭から読んでいき、４倍計算、Ｓ＝４Ｓ、＜１５０４＞を行う。
【０２１３】
（５）そのｕの値が、００、 ０１、 １０、 １１のいずれかの条件であるか判断する。＜１５０５＞、＜１５０６＞、＜１５０７＞、＜１５０８＞
（６）前記条件に応じて、計算を分岐して楕円曲線上での加算を行う。、Ｐ[０]＝Ｏ（無限遠点）、 Ｐ[１]＝Ｐ、 Ｐ[２]＝２Ｐ、 Ｐ[３]＝３Ｐと、Ｓとの楕円曲線上での加算を行う。＜１５０９＞
（７）これをスカラ−ｋのビット長まで繰り返して処理を終わる。＜１５１１＞、＜１５１２＞
べき乗剰余演算の場合と同様に、ｋとｋ＋Ｒ＊oｒd（Ｐ）は異なるビットパタ−ンを生ずる。従って、元のｘとは異なる条件分岐を行い、該当する波形が撹乱される。
【０２１４】
しかし、ｋ＋Ｓ＊oｒd（Ｐ）は、ｋとは異なるビットパタ−ンを持つが、上に見たように、楕円曲線Ｅにおいては、ｋと同等のものである。従って、一回の電流観測によってｋ＋Ｓ＊oｒd（Ｐ）のビットパタ−ンを知ることができれば、秘密鍵 ｋ を盗み出したのと同じことになる。一方、電流の観測においては、電流ノイズが避けられず、波形の平均化をしなければならないことが多い。その際、図１４のように、Ｓの値をべき楕円曲線上の点のスカラ−倍演算毎に変化、特にランダム（疑似乱数を含む）させれば、波形を多く観測しても、指数該当部の波形が平均化されてしまう。従って、ビットの特徴を撹乱される。尚、前記ランダムの変形に際しては疑似ランダムなる分割を用いても良い。
【０２１５】
次に、以上の電流撹乱処理をさらに効果的にする方法を提案する。それは、入力信号ないしは指数の分割を行った後、次のステップの演算を更に計算の順序等を変化させるのである。この手法は、これまで述べてきた諸実施の形態においても適用できるものである。
【０２１６】
まず、べき乗剰余計算ｙ^ｘ ｍｏｄ ｎにおいて、入力の分割を行って処理する際に、分割後の計算の順序を毎回変化させる方法を図１５Ａおよび図１５Ｂに示す。両図は図中の（Ａ）及び（Ｂ）で繋がって、一つのフローチャートを形成する。この例は、例えば、前述の図５の例の更なる変形計算と見ることが出来る。
【０２１７】
まず、計算を開始すると＜１６００＞、（１）２ビットづつ処理するためのテ−ブルを作成する。即ち、Ａ[０]＝１、 Ａ[１]＝ｙ、 Ａ[２]＝ｙ＾２ ｍｏｄ ｎ、 Ａ[３]＝ｙ＾３ ｍｏｄ ｎ である。＜１６０１＞
（２）次いで、計算結果を初期化、即ちＳ＝１を行う。＜１６２４＞
（３）次に、入力撹乱用の乱数Ｒ及び、ランダム分岐を行うための乱数 ｖ（０又は１） を生成する。この場合、前記乱数およびランダム分岐は、疑似乱数あるいは疑似ランダムなる変形でも良い。＜１６０３＞
（４）ｘのビット列の終わりまで行っているかどうかを判定し＜１６０４＞、ｘのビット列が、００、０１、１０、１１のいずれであるかの判断を行う。＜１６０５＞、＜１６０６＞、＜１６０７＞、＜１６０８＞。そして、前記判断のぞれぞれに応じて、Ａ[０]、Ａ[１]、Ａ[２]、Ａ[３]のいずれを分解するかを決定する。
【０２１８】
（５）さらに、 v の値が１か否かに応じて、その後の復元処理の順序を反転するか否かを決定する。＜１６０９＞、＜１６１０＞、＜１６１１＞、＜１６１２＞
（６）前述の各ビットの条件分岐の判断、およびｖの値の判断に応じて、復元処理、即ち、Ｂ[０]＝Ａ[ｊ] ａｎｄ Ｒ、 Ｂ[１]＝Ａ[ｊ] ａｎｄ ~Ｒ、（但し、ｊ＝０、１、２、３）を行う。＜１６１３＞、＜１６１４＞、＜１６１５＞、＜１６１６＞、＜１６１７＞、＜１６１８＞、＜１６１９＞、＜１６２０＞
（７）そして、演算結果Ｓ＝Ｓ＊Ｂ[０]  ｍｏｄ  ｎ＜１６２１＞、及びＳ＝Ｓ＊Ｂ[１]  ｍｏｄ  ｎ＜１６２２＞、更に、その和演算、Ｓ＝Ｓ１＋Ｓ２  ｍｏｄ  ｎ＜１６２３＞を得る。
【０２１９】
（８）ｘの最後のビットまで実行したことを確認し＜１６０４＞、計算を終了する。＜１６２４＞
この処理により、消費電流を見て内部処理を推定するために必要な情報が増加し、推定がより困難になる。
【０２２０】
指数もまた分離後に処理順序をランダム化することによって、電流撹乱の効果を高めることができる。図１６Ａおよび図１６Ｂにその一例を示す。両図は図中の（Ａ）、（Ｂ）、（Ｃ）で繋がり一つのフローチャートの構成する。順序を変更する方法には種々のものがあるので、後に他の方法も示す。
【０２２１】
図１６Ａおよび図１６Ｂの処理では次の計算がなされる。この例は、例えば、図７Ａ及び図７Ｂに示した例の更なる変形計算と見られる。
【０２２２】
（１）計算が開始されると＜１７００＞、２ビット処理のテ−ブル作成する。＜１７０１＞
（２）初期化、Ｓ[０]＝１、 Ｓ[１]＝１、＜１７１２＞される。これまでの計算は、既に説明した処理である。
【０２２３】
（３）指数ｘを分割するための撹乱要の乱数Ｒ（疑似乱数でもよい）を発生する。＜１７０２＞
（４）指数ｘを、ｔ[０] ＝ ｘ Ａｎｄ Ｒ、 ｔ[１] ＝ ｘ Ａｎｄ ~Ｒに分離する＜１７０３＞。尚、 ~ＲはＲの反転値である。又、この部分は、すでに示したように、Ｔ[０]をｘ以下の乱数としてｔ[１]＝ｘ−ｔ[０]と求めることによっても行うことができることは言うまでもない。
【０２２４】
（５）ｘの全ての処理が終了したかどうかを判定する。＜１７０４＞
（６）もし、 ｘの全ての処理が終了していなければ、分岐用の乱数ｖ（ｖ＝０又は１）を発生する＜１７０２＞。
【０２２５】
（７）この分岐用の乱数ｖの値が０か、１かを判断し＜１７０６＞する。
【０２２６】
（８）このｖの値によって、次に行われる処理の順序を入れ替える。＜１７０７＞、＜１７０９＞
即ち、 v＝０の場合、ｔ[０]の処理が先に行われ＜１７０７＞、次にＴ[１]の処理が行われる＜１７０８＞。逆に、v＝１の場合、ｔ[１]が先に処理され＜１７０９＞、次にＴ[０]が先に処理される＜１７１０＞。
【０２２７】
（９）いずれの場合も、最後のビットまで処理された後のＳ[０]、Ｓ[１]の乗算剰余、即ち、Ｓ[０]＊Ｓ[１] ｍｏｄ ｎを求める。＜１７１１＞
（１０）この計算結果は暗号化データの正しい答えとなっている。＜１７１３＞
尚、図１６Ｂにおける２ビット毎の乗算剰余処理ル−チンを図１７に示す。
【０２２８】
信号が入力される＜１８００＞、Ｓ[ｊ]＝ Ｓ[ｊ]＾４  ｍｏｄ  ｎの計算を行うが、次の条件によって、分岐して計算がなされる。
【０２２９】
即ち、入力ｔ（ｊ）の２ビットが、００であるか、０１であるか、１０であるか、１１であるかに応じて、それぞれ、Ａ[０]、Ａ[１]、Ａ[２]、Ａ[３]とＳ[ｊ]（ｊ＝０ oｒ １）との乗算剰余演算、Ｓ[ｊ]＝Ｓ１*Ａ[ｊ] ｍｏｄ ｎ（但し、ｊ＝０、１、２、３）が行われる。そして、この計算結果Ｓ（ｊ）が出力される。この処理によって、消費電流波形の順序の予測ができなくなる為、電流からｘのビット列を推定することが困難になる。
【０２３０】
分離後の指数の処理順序を撹乱する別の方法を図１８に示す。この方法は図１６Ａ，図１６Ｂの例とは別な例である。
【０２３１】
図１８の処理は次のようになされる。
【０２３２】
（１）計算が開始されると＜１９００＞、２ビット処理の為のテ−ブル作成される。＜１９０１＞
（２）計算結果が初期化される。＜１９０２＞
これまでのステップは既に説明した処理である。
【０２３３】
（３）指数ｘを分割するためのｘ以下の乱数Ｒを発生し＜１９０３＞する。ここで、乱数Ｒは疑似乱数でも良い。
【０２３４】
（４）指数ｘをｔ[０] ＝ Ｒ 、ｔ[１] ＝ ｘ − Ｒに分離する＜１９０４＞。
この部分は、すでに示したように、Ｒを乱数としたときに指数ｘをｔ[０] ＝ ｘＡｎd Ｒ、 ｔ[１] ＝ ｘ Ａｎd ~Ｒのように分解することによっても行うことができることは言うまでもない。
【０２３５】
（５）ｘの全ての処理が終了したかどうかを判定する。＜１９０５＞
（６）もし終了していなければ、さらに、ｔ[０]の処理が終了したか、ｔ[１]の処理が終了したかどうかを判定する。一方、ｔ[０]の処理が終了していれば、ｔ[１]の処理を行い、ｔ[１]の処理が終了していれば、ｔ[０]の処理を行い、いずれも終了していなければランダム分岐処理に進む。＜１９０６＞
（７）分岐用の乱数ｖ（＝０又は１）を発生し＜１９０７＞、この値が０か１かを判定する＜１９０８＞。
【０２３６】
（８）もしも、０ならば、ｔ[０]を処理し＜１９０９＞、１ならば、ｔ[１]を処理する＜１９１０＞。
【０２３７】
（９）いずれの場合も、最後のビットまで処理された後のＳ[０]、Ｓ[１]の乗算剰余、即ち、Ｓ[０]＊Ｓ[１] ｍｏｄ ｎを求める。＜１９１１＞
（１０）この計算結果は暗号化データの正しい答えとなっている。＜１９１２＞
先に示した順序のランダム化においては、ｔ[０]の処理とｔ[１]の処理はｖの値によらず隣り合っていたが、本実施例においては、そのようなせ制限はないという点が大きな違いである。
【０２３８】
尚、図１８における２ビット毎の乗算剰余処理ル−チンは、先と同様に図１７と同様である。
【０２３９】
この処理によって、消費電流波形順序の予測ができないため、電流からｘのビット列を推定することが困難になる。
【０２４０】
次に楕円曲線上の点Ｐのスカラ−倍ｋＰについて、上述したべき乗剰余演算の処理の類似を考える。図１９に、図１８のアルゴリズムの類似を示す。しかし、本例は図１６で示した実施例の類似を構成することも全く同様に行うことができることは言うまでもない。
【０２４１】
図１９の処理においては、（１）２ビット処理の為のテ−ブル作成＜２００１＞、（２）初期化＜２００２＞までは、既に説明した処理である。
【０２４２】
（３）指数ｘを分割するためのｋ以下の乱数Ｒを発生する。ここで、 Ｒは疑似乱数でもよい。＜２００３＞
（４）スカラ−ｋをｔ[０] ＝ Ｒ 、ｔ[１] ＝ｋ−Ｒに分離する＜２００４＞。
尚、この部分は、すでに示したように、Ｒを乱数としたときにスカラ−ｋをｔ[０] ＝ ｋ Ａｎd Ｒ、 ｔ[１] ＝ ｋ Ａｎd ~Ｒのように分解することによっても行うことができることは言うまでもない。ここで、~ＲはＲの反転値である。
【０２４３】
（５）ｋの全ての処理が終了したかどうかを判定する。＜２００５＞
（６）今、もし、 ｋの全ての処理が終了していなければ、さらに、ｔ[０]の処理が終了したか、ｔ[１]の処理が終了したかどうかを判定する。＜２００６＞
（７）ｔ[０]の処理が終了していれば、ｔ[１]の処理を行う。一方、ｔ[１]の処理が終了していれば、ｔ[０]の処理を行い、いずれも終了していなければランダム分岐処理に進む。＜２００６＞
（８）分岐用の乱数ｖ（＝０又は１）を発生し＜２００７＞、（９）この値が０か１かを判定する＜２００８＞。
【０２４４】
（１０）もしも、乱数ｖの値が０ならば、ｔ[０]を処理し＜２００９＞、乱数ｖの値が１ならば、ｔ[１]を処理する＜２０１０＞。
【０２４５】
（１１）いずれの場合も、最後のビットまで処理された後のＳ[０]、Ｓ[１]の乗算剰余を求める。＜２０１１＞
（１２）この計算結果は暗号化データの正しい答えとなっている。＜２０１２＞
図１９に示された２ビット毎のスカラ−倍処理ル−チンを図２０に示す。
【０２４６】
即ち、入力ｔ[ｊ]の２ビットが、００であるか、０１であるか、１０であるか、１１であるかに応じて、それぞれ、Ｐ[０]、Ｐ[１]、Ｐ[２]、Ｐ[３]とＳ[ｊ]（ｊ＝０  oｒ  １）との楕円曲線上の加法演算が行われる。そして、この計算結果Ｓ（ｊ）が出力される。
【０２４７】
この処理によって、消費電流波形順序の予測ができないため、電流からｋのビット列を推定することが困難になる。
【０２４８】
以上に示したように、本発明請求項１９の本質は、指数やスカラ−のビット列の処理を分割することによってビット列順序を入れ替えることを可能にし、結果的に電流観測を行った場合にビット列がランダムであるように見えるということである。
【０２４９】
処理順序の入換えの方法は、ここに述べた方法の他にもある。例えば、実施例では、指数やスカラ−を２つにしか分離していないが、これを３通り、４通り等に分離することや、乱数として、準周期数列やカオス的数列を用いることもできる。又、これまで何回か述べてきた疑似乱数は、大きな周期を持つ周期列とみなすことができることが多いが、周期の短いものも利用することができる。
【０２５０】
以上に見たように、べき乗剰余演算、楕円曲線上の加算に対する本発明の思想は抽象レベルでは全く同一のものであって、これらを、実際のインプリメントを超えて抽象化することは自然なことである。
【０２５１】
請求項１、２、３についても、これまで示してきた法ｎにおけるべき乗剰余演算や、楕円曲線上の加算における実施例において、積又は和の演算を○と書けば全く同様のフロ−チャ−トが構成できる。これらは、上記のべき乗剰余演算及び、楕円曲線上の点のスカラ−倍を含み、さらに同様の代数構造を持つ処理に対しても有効である。
【０２５２】
以上詳細に説明したように、本発明によれば、ＩＣカ−ドチップにおいて、デ−タを分割して処理し、最後に分割処理された結果を統合して正しい結果を求めたり、結果に影響を与えない鍵の変形を行うことにより、消費電流の波形から、処理や暗号鍵の推測を行うことが困難になる。
【０２５３】
【発明の効果】
本願発明は、高いセキュリティを持つＩＣカ−ドなどの耐タンパ−情報処理装置を提供することが出来る。
【図面の簡単な説明】
【図１】図１はＩＣカ−ドの概観及び端子の例を示す平面図である。
【図２】 図２はマイクロコンピュ−タの基本構成を示すブロック図である。
【図３】 図３はＩＣカードにおける消費電流の波形の例を示す図である。
【図４】 図４はべき乗剰余計算の例を示すフローチャートである。
【図５】 図５は入力の分割による電流対策を行う例を示すフローチャートである。
【図６Ａ】 図６Ａは入力の分割による電流対策を行う別な例を示すフローチャートの一部である。
【図６Ｂ】 図６Ｂは入力の分割による電流対策を行う別な例を示すフローチャートの残部である。
【図７Ａ】 図７Ａは鍵の分割による電流対策を行う例を示すフローチャートに一部である。
【図７Ｂ】 図７Ｂは鍵の分割による電流対策を行う例を示すフローチャートに残部である。
【図８Ａ】 図８Ａは鍵の分割による電流対策を行う別な例を示すフローチャートの一部である。
【図８Ｂ】 図８Ｂは鍵の分割による電流対策を行う別な例を示すフローチャートの残部である。
【図９】 図９はビットパタ−ンの異なる指数を利用した電流撹乱法の例を示すフローチャートである。
【図１０】 図１０は楕円曲線上での加法を説明する図である。
【図１１】 図１１は楕円曲線上の点Ｐのスカラ−倍の計算の例を示すフローチャートである。
【図１２Ａ】 図１２Ａは楕円曲線上の点のスカラ−倍に関するスカラ−分割方式の例を示すフローチャートの一部である。
【図１２Ｂ】 図１２Ｂは楕円曲線上の点のスカラ−倍に関するスカラ−分割方式の例を示すフローチャートの残部である。
【図１３Ａ】 図１３Ａは楕円曲線上の点のスカラ−倍に関するスカラ−分割方式の別な例を示すフローチャートの一部である。
【図１３Ｂ】 図１３Ｂは楕円曲線上の点のスカラ−倍に関するスカラ−分割方式の別な例を示すフローチャートの残部である。
【図１４】 図１４はビットパタ−ンの異なるスカラ−を利用した電流撹乱法の例を示すフローチャートである。
【図１５Ａ】 図１５Ａは入力の分割の処理順序のランダム化の例を示すフローチャートの一部である。
【図１５Ｂ】 図１５Ｂは入力の分割の処理順序のランダム化の例を示すフローチャートの残部である。
【図１６Ａ】 図１６Ａは指数分割後の処理順序のランダム化の例を示すフローチャートの一部である。
【図１６Ｂ】 図１６Ｂは指数分割後の処理順序のランダム化の例を示すフローチャートの残部である。
【図１７】 図１７は２ビット毎の乗算剰余処理ル−チンの例を示すフローチャートである。
【図１８】 図１８は指数分割後の処理順序のランダム化の別な例を示すフローチャートである。
【図１９】 図１９はスカラ−分割後の処理順序のランダム化の例を示すフローチャートである。
【図２０】 図２０は２ビット毎のスカラ−倍処理ル−チンを示すフローチャートである。
【図２１】図２１はカード・システムの概要を示す構成図である。
【符号の説明】
０５００：開始、０５０１：４乗処理の為のテーブル作成工程、０５１４：初期化工程、０５１５：処理を最後まで行ったかの判断工程、０５０２：４乗処理工程、０５０３：乱数あるいは疑似乱数の発生工程、０５０４、０５０５、０５０６、０５０７：ビットの値による分岐条件の判断工程、０５０９、０５１０、０５１１、０５１２：変形処理工程、０５０８：乗算剰余計算、０５１３：各分岐条件に応じた最終の乗算剰余計算
【図１】
0003926532.tif 000003
【図２】
0003926532.tif 000004
【図３】
0003926532.tif 000005
【図４】
0003926532.tif 000006
【図５】
0003926532.tif 000007
【図６Ａ】
0003926532.tif 000008
【図６Ｂ】
0003926532.tif 000009
【図７Ａ】
0003926532.tif 000010
【図７Ｂ】
0003926532.tif 000011
【図８Ａ】
0003926532.tif 000012
【図８Ｂ】
0003926532.tif 000013
【図９】
0003926532.tif 000014
【図１０】
0003926532.tif 000015
【図１１】
0003926532.tif 000016
【図１２Ａ】
0003926532.tif 000017
【図１２Ｂ】
0003926532.tif 000018
【図１３Ａ】
0003926532.tif 000019
【図１３Ｂ】
0003926532.tif 000020
【図１４】
0003926532.tif 000021
【図１５Ａ】
0003926532.tif 000022
【図１５Ｂ】
0003926532.tif 000023
【図１６Ａ】
0003926532.tif 000024
【図１６Ｂ】
0003926532.tif 000025
【図１７】
0003926532.tif 000026
【図１８】
0003926532.tif 000027
【図１９】
0003926532.tif 000028
【図２０】
0003926532.tif 000029
【図２１】
0003926532.tif 000030