(57)【要約】本発明は、ｑ＝ａ  ｄｉｖ  ｂおよびｒ＝ａ  ｍｏｄ  ｂというタイプの整数除算を含む暗号化方法に関する。ここで、ａはｍビットの数であり、ｂはｎビットの数であり、ｎはｍより小さいか等しく、ｂｎ−１がゼロでなく、数ｂの最上位ビットである。さらに、１とｍ−ｎ＋１の範囲内で変化するｉという添え字を含むループの各反復の際に、商ｑの１つのビットを入手するために、数ｂによる数ａのｎビットの語Ａの部分的除算を含む。本発明によれば、入手した上記商のビットの値が何であっても、各反復の度に同じ演算が行われる。本発明の他の実施形態の場合には、各反復の度に、下記の演算、すなわち、語Ａへの／からの数ｂの加算および減算、語Ａへの数ｂまたはｂの補数￣ｂの加算、または更新データ（ｂまたは￣ｂ）またはダミー・データ（ｃまたは￣ｃ）の２ｎのところでの補数演算、その後の語Ａで更新したデータの加算のうちの１つも実行される。【特許請求の範囲】
【請求項１】
ｑ＝ａ  ｄｉｖ  ｂおよびｒ＝ａ  ｍｏｄ  ｂというタイプの整数除算を実行する暗号化方法であって、ｑが商であり、ａがｍビットの数であり、ｂがｎビットの数であり、ｎがｍより小さいか等しく、ｂｎ−１がゼロでない数ｂの最上位ビットであり、１とｍ−ｎ＋１の範囲内で変化するｉという添え字を含むループの各反復の際に、前記商ｑのビットを入手するために、前記数ｂによる前記数ａのｎビットの語Ａの部分的除算が行われる方法であって、
得られた前記商のビットの値が何であっても、各反復の度に同じ演算が行われることを特徴とする方法。
【請求項２】
各反復の際に、前記語Ａへの前記数ｂの加算、および前記語Ａからの前記数ｂの減算が行われることを特徴とする請求項１に記載の方法。
【請求項３】
下記のすべてのステップ：
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）；σ’＜−１
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
Ａ＜−（σ’）ＳＵＢｎ（Ａ，ｂ）＋（¬σ’）ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
σ’＜−σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
を実行することを特徴とする請求項１または２に記載の方法。
【請求項４】
各反復の際に、前記数ｂまたは前記数ｂの補数である数￣ｂの前記語Ａに対する加算が行われることを特徴とする請求項１に記載の方法。
【請求項５】
各反復毎に、下記の反復中、得られた前記商のビット（ｌｓｂ（ａ））により、前記語Ａへ前記数ｂまたは前記数￣ｂを加算しなければならないかどうかを示す第１の変数（σ’）の更新が行われることを特徴とする請求項４に記載の方法。
【請求項６】
下記のすべてのステップ：
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）；σ’＜−１；￣ｂ＜−ＣＰＬ２n（ｂ）
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
ｄａｄｄｒ＜−ｂａｄｄｒ＋σ’（￣ｂａｄｄｒ−ｂａｄｄｒ）
Ａ＜−ＡＤＤｎ（Ａ，ｄ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
σ’＜−σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
を実行することを特徴とする請求項４または５に記載の方法。
【請求項７】
各反復の際に、更新したデータ項目（ｂまたは￣ｂ）または概念上のデータ項目（ｃまたは￣ｃ）の２ｎの補数の演算が実行され、次に前記語Ａへの前記更新したデータ項目の加算が行われることを特徴とする請求項１に記載の方法。
【請求項８】
各反復の際に、以降の反復中に、前記更新したデータ項目または概念上のデータ項目に対して２ｎの補数の演算が行わなければならないかどうかを示す第２の変数（δ）の更新が行われることを特徴とする請求項７に記載の方法。
【請求項９】
各反復の際に、前記更新したデータ項目が、前記データ項目ｂまたはその２ｎの補数に等しいかどうかを示す第３の変数（β）を更新することを特徴とする請求項７または８に記載の方法。
【請求項１０】
また、下記のすべてのステップ：
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
σ’＜−１；β＜−１，γ＜−１；Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
δ＜−σ’／β
ｄａｄｄｒ＜−ｂａｄｄｒ＋δ（ｃａｄｄｒ−ｂａｄｄｒ）
ｄ＜−ＣＰＬ２ｎ（ｄ）
Ａ＜−ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
β＜−¬σ’；γ＜−γ／δ；σ’＜−σ
ｌｓｂ（ａ）＝σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
を実行することを特徴とする請求項７乃至９のいずれかに記載の方法。
【請求項１１】
最後に、下記の演算：
ｉｆ  （¬β＝ＴＲＵＥ）  ｔｈｅｎ  ｂ＜−ＣＰＬ２ｎ（ｂ）
ｉｆ  （¬γ＝ＴＲＵＥ）  ｔｈｅｎ  ｃ＜−ＣＰＬ２ｎ（ｃ）
を実行することを特徴とする請求項１０に記載の方法。
【請求項１２】
請求項１乃至１１のいずれかに記載の方法を実施するようにプログラムされている計算手段を備える電子構成要素であって、前記計算手段が特に前記データａおよびｂを記憶するためのいくつかのレジスタを備えるメモリに関連する中央ユニットを備える電子構成要素。
【請求項１３】
請求項１２に記載の集積回路を備えるチップ・カード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カバート・チャネル・タイプの攻撃に対して安全な整数除算方法に関する。本発明は、特に、例えば、秘密鍵または公開鍵暗号化方法のようなもっと一般的な暗号化方法で除算を行うために有利である。このような暗号化方法は、例えば、チップ・カードのような電子デバイスで実施することができる。
【背景技術】
【０００２】
暗号化方法のセキュリティは、機密データまたは暗号化方法が操作する機密データから入手したデータを秘匿状態に維持する機能に依存する。
悪意のあるユーザは、おそらく暗号化方法を実行している計算デバイスが実行した処理動作の際に含まれ、また操作した特定の機密データ内で発見しようとして攻撃を行うこともあり得る。
【０００３】
最もよく知られている攻撃としては、単純または差分カバート・チャネル攻撃等がある。カバート・チャネル攻撃という用語は、デバイスの外部から測定することができる物理量に基づく攻撃を意味し、その直接分析（単純攻撃）または統計的方法による分析（差分攻撃）により、デバイス内で行われた処理演算中に含まれ、操作されたデータを発見することができる。Ｐａｕｌ  Ｋｏｃｈｅｒが、特にこれらの攻撃について開示している（「暗号学における進歩−ＣＲＹＰＴＯ’９９」（Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ−ＣＲＹＰＴＯ'９９）、コンピュータ科学（Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ）における講義ノート、第１６６６巻、３８８乃至３９７ページ、Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ、１９９９年）。
【０００４】
これらの目的のために使用することができる物理量としては、実行時間、消費電流、計算を実行するために使用した構成要素の一部が発生する電磁場等がある。これらの攻撃は、ある方法の実行中には、ビットの操作、すなわち特定の命令によるその処理は、このビットの値により、および／または命令により、当該物理量上に特定の痕跡を残すという事実に基づいている。
【０００５】
基本演算としてＹ＝ＸＤ（ここで、Ｘ，ＹおよびＤは整数である）というタイプのモジュラ累乗演算を使用する暗号化方法は、過去数年間の間に非常に幅広く研究されてきた。これらの研究としては、ＲＳＡ法、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎによる鍵交換またはＤＳＡ署名法等がある。カバート・チャネル攻撃からこれらの方法を保護するという点で有意の進歩が行われた。
【０００６】
一方、基本演算として、ｑ＝ａ  ｄｉｖ  ｂおよびｒ＝ａ  ｍｏｄ  ｂ（ここで、ａおよびｂは２つのオペランドであり、ｑおよびｒは、それぞれｂによるａの整数除算の商と余りである）というタイプの整数除算を使用する安全な暗号化方法の作成については何の研究も行われなかった。ａおよび／またはｂは、例えば、この方法の鍵の要素である秘密データである。例えば、Ｂａｒｒｅｔｔの方法（Ｐ．Ｂａｒｒｅｔの、「標準デジタル信号処理上でのＲＳＡ公開鍵暗号化アルゴリズムの実施」（Ｉｍｐｌｅｍｅｎｔｉｎｇ  ｔｈｅ  ＲＳＡ  ｐｕｂｌｉｃ  ｋｅｙ  ｅｎｃｒｙｐｔｉｏｎ  ａｌｇｏｒｉｔｈｍ  ｏｎ  ａ  ｓｔａｎｄａｒｄ  ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ）、コンピュータ科学（Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ）における講義ノート、第２６３巻、３１１乃至３２３ページ、Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ、１９８７年）、Ｑｕｉｓｑｕａｔｅｒの方法（１９９２年１１月出願の米国特許第５，１６６，９７８号）または中国人剰余定理により実施したＲＳＡ法（Ｊ．Ｊ．ＱｕｉｓｑｕａｔｅｒおよびＣ．Ｃｏｕｖｒｅｕｒの、「ＲＳＡ公開鍵暗号化システム用の高速解読アルゴリズム」（Ｆａｓｔ  ｄｅｃｉｐｈｅｒｍｅｎｔ  ａｌｇｏｒｉｔｈｍ  ｆｏｒ  ＲＳＡ  ｐｕｂｌｉｃ  ｋｅｙ  ｃｒｙｐｔｏｓｙｓｔｅｍ）、Ｅｌｅｃｔｒｏｎｉｃｓ  Ｌｅｔｔｅｒ、第１８巻、９０５乃至９０７ページ、１９８２年１０月）が、整数除算を基本演算として使用している暗号化方法である。
【０００７】
整数除算を実施する周知の方法は、いわゆる「紙／鉛筆」方法である。この方法は、実際に、手でこのような演算を行う場合に使用する方法を反復する。この方法については以下に説明する。
２つのデータ項目、すなわち、ｍビットのａ＝（ａｍ−１，  ．．．，ａ０）およびｎビットのｂ＝（ｂｎ−１，  ．．．，ｂ０）であり、ｎがｍより小さいかまたは等しく、ｂｎ−１  γ  ０の場合には、いわゆる「紙／鉛筆」除算法は、商、すなわちｑ＝ａ  ｄｉｖ  ｂおよび余り、すなわちｒ＝ａ  ｄｉｖ  ｂを計算する。この目的のために、この方法は、ｎビットの整数ｂにより、ｎ＋１ビットの整数Ａを数回連続的に除算する。実際には、０［Ａ／ｂ＜２にならなければならず、ｂｎ−１  γ  ０の場合にはこのようになる。
【０００８】
余りｒは、ｎビット未満の数である。何故なら、ｒ＜ｂであるからである。この部分に対する商ｑは、ｍ−ｎ＋１ビット以下の数である。何故なら、ｑ＝ａ  ｄｉｖ  ｂ［ａ  ｄｉｖ  （ｂｎ−１＊２ｎ−１）＝ａ  ｄｉｖ  ２ｎ−１＝（ａｍ−１，  ．．．，ａｎ−１）であるからであり、何故なら、ｂ  μ  ｂｎ−１＊２ｎ−１および（ａｍ−１，  ．．．，  ａｎ−１）は、ｍ−ｎ＋１ビットの数であるからである。この除算法の最後に、商ｑは、最初に、数ａを含んでいるレジスタのｍ−ｎ＋１の最下位ビットに記憶される。余りｒの最上位ビットは、計算中にけた上げとして使用された１−ビット・レジスタに記憶され、余りｒのｎ−１の最下位ビットは、最初に数字ａを含んでいるレジスタのｎ−１の最上位ビット内に記憶される。
【０００９】
この作業は基数２で行われるので、整数除算Ａ  ｄｉｖ  ｂの商ビットは、２つの可能な値、すなわち０または１しか有することができない。それ故、演算Ａ  ｄｉｖ  ｂを行う簡単な方法は、Ａからｂを引き、次に結果を試験する方法である。Ａ−ｂの結果が正の数であれば、Ａ  ｄｉｖ  ｂ＝１であり、Ａ−ｂの結果が狭義に負の数である場合には、Ａ  ｄｉｖ  ｂ＝０である。
【００１０】
それ故、完全な除算方法は下記のように表すことができる。
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）
Fｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
Ａ＜−ＳＵＢｎ（Ａ，ｂ）；σ＜−σ  ＯＲ  ｃａｒｒｙ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
ｉｆ  ｎｏｔ  ｌｓｂ（ａ）＝１
Ｅｎｄ  ｆｏｒ
【００１１】
方法１
この方法の場合、および下記の説明全体を通して下記の表記方法を使用する。
記号「＜−」および表記ｙ＜−ｘは、データ項目ｘを含むレジスタの内容をその内容がｙと呼ばれるレジスタにロードするのを示すために使用される。
Ａは、最初にデータ項目ａを含んでいるレジスタのｎ個の最上位ビットの内容に対応するｎビット語である。Ａは、もちろん、反復の度に修正される。
σは、減算がうまくいったのかいかなかったのか（すなわち、商ビットは０または１に等しくなければならないかどうか）を示す。
¬σは変数σの１に対する補数である（否定とも呼ばれる）。ＴＲＵＥは、ある例の場合には１に等しい定数である。
ｌｓｂ（ａ）は、数ａの最下位加重ビットであり、ａの最下位ビットとも呼ばれる。
ＳＨＬｍ＋１（ａ，１）は、データ項目ａを含んでいるｍ＋１ビットのレジスタ内での１ビットだけ左へのシフトである。レジスタから出るこのビットは、可変けた上げ内に記憶され、０に等しいビットは、最初にデータａを含んでいるレジスタの最下位ビットとして入力される。
ＡＤＤｎ（Ａ，ｂ）は、語Ａのｎビットへの数ｂのｎビットの加算である。演算ＳＨＬｎ（ａ，１）は、演算ＡＤＤｎ（ａ，ａ）に等しいことが分かるだろう。もちろん、加算ＡＤＤｎ（ａ，ｂ）は、適当な加算回路で、Ａおよびｂをそれぞれ含んでいる２つのレジスタの内容を加算することにより行われる。
ＳＵＢｎ（Ａ，ｂ）は、語Ａからの数ｂの減算である。もちろん、減算ＳＵＢｎ（Ａ，ｂ）は、適当な回路で、語Ａを含んでいるレジスタの内容から、データ項目ｂを含んでいるレジスタの内容を引くことにより行われる。
【００１２】
最後に、良い方法とはいわないが、はっきりさせるために、レジスタおよびその内容を表すために同じ名前を使用する。それ故、レジスタＡは、実際に、データ項目Ａを含むレジスタである。
【００１３】
要するに、方法１は下記のステップを実行する。
・ａ＜−ＳＨＬｍ＋１（ａ，１）によりけた上げ（σ＝ｃａｒｒｙ＝１）が生じた場合には、ａｍ＝１（シフト前）およびそれ故そのｂをＡから引かなければならないことを意味する。
・ａｍ＋１＝０（シフト前）であり、Ａ＜−ＳＵＢｎ（Ａ，ｂ）によりけた上げ（ｃａｒｒｙ＝１）が生じた場合には、減算の前はＡ−ｂ  μ  ０であり、それ故、ｂをＡから引かなければならないことを意味する。
・ａ＜−ＳＨＬｍ＋１（ａ，１）がけた上げを生じないで、またＡ＜−ＳＵＢｎ（Ａ，ｂ）もけた上げを生じない場合（すなわち、σを更新した後で、σが偽である、つまり¬σがＴＲＵＥである場合には、減算を行う前、Ａ−ｂ＜０であり、それ故、ｂをＡから引く必要がないことを意味する。この場合には、この方法は、Ａの値を復元するために加算Ａ＜−ＡＤＤｎ（Ａ，ｂ）を実行する。
【００１４】
方法１は、カバート・チャネル攻撃に弱い。何故なら、方法１の場合には、反復の度に、σの値により、すなわち現在の反復中に、入手される商ビットの値により、加算ＡＤＤｎ（Ａ，ｂ）が行われたり行われなかったりするからである。それ故、１回の反復中に実行される演算の回数は、上記反復中に入手した結果ビットにより異なる。しかし、各反復および／または各反復の持続時間中の電流消費量は、行った演算の回数により異なる。例えば、方法を実行した場合に構成要素が残した痕跡を測定し、研究することにより、ビット毎に結果ビットの値を決定することができる。
【００１５】
整数除算を実行するための同様に周知のもう１つの方法は、特に「Ｊ．Ｊ．Ｆ．Ｃａｖａｎａｇｈの、「デジタル・コンピュータ演算」（Ｄｉｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ）、ＭｃＧｒａｗ−Ｈｉｌｌ社、１９８４年」に記載の「非復元」（ｎｏｎ−ｒｅｓｔｏｒｉｎｇ）「非復元２進除算アルゴリズム」（Ｎｏｎ−Ｒｅｓｔｏｒｉｎｇ  Ｂｉｎａｒｙ  Ｄｉｖｉｓｉｏｎ  Ａｌｇｏｒｉｔｈｍ）と呼ばれる「紙／鉛筆」法を修正したものである。
【００１６】
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
σ’＜−１；Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）
ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
ｉｆ  （σ’＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＳＵＢｎ（Ａ，ｂ）
σ＜−σ  ＯＲ  ｃａｒｒｙ
ｉｆ  ｎｏｔ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
σ＜−σ  ＡＮＤ  ｃａｒｒｙ
ｉｆ  （σ＝ＴＲＵＥ）  ｔｈｅｎ  ｌｓｂ（ａ）＝１
σ’＜−σ
Ｅｎｄ  Ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００１７】
方法２
方法１と比較すると、この方法は前の反復で入手したσの値を保存するために新しい変数σ’を使用する。この場合、値σに従って、加算または減算が行われる。すなわち、反復中、Ａからｂが正しく引かれなかった場合には、方法１の場合のように現在の反復の最後にではなく、次の反復中にＡの値が復元される。
【００１８】
ある反復中のσの値が何であっても、この方法は各反復中に同じ回数だけ演算を行う。しかし、この予防措置は、この方法をカバート・チャネル攻撃から保護するのに十分ではない。何故なら、各反復毎に、シフト動作、ａ＜−ＳＨＬｍ＋１（ａ，１）が行われ、次にσの値により加算Ａ＜−ＡＤＤｎ（Ａ，ｂ）または減算Ａ＜−ＳＵＢｎ（Ａ，ｂ）が行われるからである。
【００１９】
しかし、減算の実行は、加算の実行と比較すると、もっと長い時間がかかりもっと多くのエネルギーを消費する。何故なら、通常、この方法を実施するために使用する計算手段は、減算回路を含んでいないからである。減算は、最初に、￣ｂで表すｂの２ｎの補数を計算し、次にＡに￣ｂを加算することにより行われる。この場合、加算の任意のけた上げは可変けた上げに記憶される。減算を行うこの方法は、￣ｂ，ｂ＋￣ｂ＝２ｎの定義により正当化される。それ故、これにより、Ａ−ｂ＝Ａ＋￣ｂ−２ｎ＝Ａ＋￣ｂ  ｍｏｄ  （２ｎ）という結果になる。ｍｏｄ（２ｎ）は換算モジュロ２ｎである。それ故、２つの演算、すなわち２ｎの補数の演算および加算は、実際に減算を行うために必要である。
【００２０】
周知の整数除算法はカバート・チャネル攻撃から保護されていないので、それ故、周知の整数除算方法を使用する任意の暗号化方法は、このようなカバート・チャネル攻撃から保護されない。
さらに、統計的には、除算により得られた商のビットの５０％は０に等しい。このことは、統計的にこの方法が正しく行われなかった２回の減算のうちの１回の減算が補償されることを意味する。それ故、方法１の実行時間は、統計的にはある点において、方法２の実行時間より５倍長い。
【００２１】
【特許文献１】米国特許第５，１６６，９７８号
【非特許文献１】Ｐａｕｌ  Ｋｏｃｈｅｒの、「暗号学における進歩−ＣＲＹＰＴＯ’９９」（Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ−ＣＲＹＰＴＯ'９９）、コンピュータ科学（Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ）における講義ノート、第１６６６巻、３８８乃至３９７ページ、Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ、１９９９年
【非特許文献２】Ｐ．Ｂａｒｒｅｔの、「標準デジタル信号処理上でのＲＳＡ公開鍵暗号化アルゴリズムの実施」（Ｉｍｐｌｅｍｅｎｔｉｎｇ  ｔｈｅ  ＲＳＡ  ｐｕｂｌｉｃ  ｋｅｙ  ｅｎｃｒｙｐｔｉｏｎ  ａｌｇｏｒｉｔｈｍ  ｏｎ  ａ  ｓｔａｎｄａｒｄ  ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ）、コンピュータ科学（Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ）における講義ノート、第２６３巻、３１１乃至３２３ページ、Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ、１９８７年
【非特許文献３】Ｊ．Ｊ．ＱｕｉｓｑｕａｔｅｒおよびＣ．Ｃｏｕｖｒｅｕｒの、「ＲＳＡ公開鍵暗号化システム用の高速解読アルゴリズム」（Ｆａｓｔ  ｄｅｃｉｐｈｅｒｍｅｎｔ  ａｌｇｏｒｉｔｈｍ  ｆｏｒ  ＲＳＡ  ｐｕｂｌｉｃ  ｋｅｙ  ｃｒｙｐｔｏｓｙｓｔｅｍ）、Ｅｌｅｃｔｒｏｎｉｃｓ  Ｌｅｔｔｅｒ、第１８巻、９９、９０５乃至９０７ページ、１９８２年１０月
【非特許文献４】Ｊ．Ｊ．Ｆ．Ｃａｖａｎａｇｈの、「デジタル・コンピュータ演算」（Ｄｉｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ）、ＭｃＧｒａｗ−Ｈｉｌｌ社、１９８４年
【発明の開示】
【発明が解決しようとする課題】
【００２２】
現在の暗号化方法のこれらの問題から見た場合、本発明の本質的な目的は、カバート・チャネル攻撃から保護されている整数除算を実行するための新規な方法である。
本発明の補助的な目的は、その実行時間が非常に短い整数除算の実行方法である。
本発明の補助的な目的は、また、最初にデータ項目ａを含んでいるレジスタだけが修正される商および結果により置換される整数除算の実行方法である。メモリのすべての他のレジスタ（および特に最初にデータ項目ｂを含んでいるレジスタ）は、この方法の実行の最後の時点で変化していない。
【課題を解決するための手段】
【００２３】
この主な目的およびこれらの補助的な目的を念頭において、本発明はｑ＝ａ  ｄｉｖ  ｂおよびｒ＝ａ  ｍｏｄ  ｂというタイプの整数除算が行われる暗号化方法を提案する。ここで、ａはｍビットの数であり、ｂはｎビットの数であり、ｎはｍより小さいかまたは等しく、ｂｎ−１はゼロではないｂの最上位ビットである。ある方法の場合、１とｍ−ｎ＋１の間で変化するｉという添え字を有するループの各反復において、商ｑのビットを入手するために、数ｂによる数ａのｎビットの語ａの部分的な除算が行われる。
本発明によれば、入手した商のビットの値が何であっても、各反復毎に同じ演算が行われる。
それ故、本発明の方法を使用すれば、本発明の方法の実行中に残った痕跡から結果のビットを決定することはもはやできない。
【発明を実施するための最良の形態】
【００２４】
本発明の方法の第１の実施形態によれば、各反復毎に、語Ａからの数ｂの加算および語Ａからの数ｂの減算が行われる。
この第１の実施形態によれば、この方法は好適には下記のすべてのステップを含むことが好ましい。
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
σ’＜−１；Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
Ａ＜−（σ’）ＳＵＢｎ（A，ｂ）＋（¬σ’）ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
σ’＜−σ
Ｅｎｄ  Ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００２５】
この実施形態の場合、上記変数のけた上げは、σ’が１に等しい場合に演算ＳＵＢｎ（Ａ，ｂ）から得たけた上げを示し、またσ’が０に等しい場合に演算ＡＤＤｎ（Ａ，ｂ）から得たけた上げを示す。
【００２６】
本発明の方法の第２の実施形態によれば、各反復毎に、数ｂ、または語Ａによる数ｂを補足する数￣ｂの加算が行われる。
好適には、各反復中、得られた商のビットにより、第１の変数（σ’）の更新を行うことが好ましい。上記第１の変数（σ’）は、以降の反復中、数ｂまたは数￣ｂを語Ａに加算しなければならないかどうかを示す。
【００２７】
好適には、この場合も、この実施形態により、この方法は下記のすべてのステップを含むことが好ましい。
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）；σ’＜−１；￣ｂ＜ＣＰＬ２ｎ（ｂ）
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
ｄａｄｄｒ＜−ｂａｄｄｒ＋σ’（￣ｂａｄｄｒ―ｂａｄｄｒ）
Ａ＜−ＡＤＤｎ（Ａ，ｄ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
σ’＜−σ
Ｅｎｄ  Ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００２８】
本発明の方法の第３の実施形態によれば、各反復毎に、更新したデータ項目（ｂまたは￣ｂ）または概念上のデータ項目（ｃまたは￣ｃ）の２ｎの補数の演算が行われ、次に語Ａよる更新したデータ項目の加算が行われる。
【００２９】
好適には、各反復中、得られた商のビットにより、第２の変数（δ）の更新を各反復のところで行うことが好ましい。上記第２の変数（δ）は、以降の反復中、更新したデータ項目または概念上のデータ項目について、２ｎの補数の演算を行わなければならないかどうかを示す。
好適には、この場合も、各反復中、更新したデータ項目が数ｂまたは補数￣ｂに等しいかどうかを示す第３の変数（β）を更新することが好ましい。
【００３０】
好適には、この場合も、この実施形態により、この方法は、下記のすべてのステップを含むことが好ましい。
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
σ’＜−１；β＜−１，γ＜−１；Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）
ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
δ＜−σ’／β
ｄａｄｄｒ＜−ｂａｄｄｒ＋δ（ｃａｄｄｒ−ｂａｄｄｒ）
ｄ＜−ＣＰＬ２ｎ（ｄ）
Ａ＜−ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
β＜−¬σ’；γ＜−γ／δ；σ’＜−σ
ｌｓｂ（ａ）＝σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬β＝ＴＲＵＥ）  ｔｈｅｎ  ｂ＜−ＣＰＬ２ｎ（ｂ）
ｉｆ  （¬γ＝ＴＲＵＥ）  ｔｈｅｎ  ｃ＜−ＣＰＬ２ｎ（ｃ）
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００３１】
本発明は、また、上記方法を実施するようにプログラムされている計算手段を備える電子構成要素に関する。上記計算手段は、特にデータａおよびｂを記憶するためのいくつかのレジスタを備えるメモリに関連する中央ユニットを備える。
最後に、本発明は、また上記の集積回路を備えるチップ・カードに関する。
【００３２】
本発明による整数除算方法の例示としての実施形態の下記の説明を読めば、本発明および他の特徴および利点をよりよく理解することができるだろう。
本発明の実施態様の第１の例の場合には、カバート・チャネル攻撃に対して安全な方法は、方法２のテスト動作（ｉｆ．．．ｔｈｅｎ．．．ｏｔｈｅｒｗｉｓｅ．．．というタイプの）、それ故その存在の結果を除去することにより実施される。
【００３３】
本発明によれば、方法２の場合、ｉｆ．．．ｔｈｅｎ．．．ｏｔｈｅｒｗｉｓｅというステップは、下記の３つのステップにより置き換えられる。
Ａ＜−σ’ＳＵＢｎ（Ａ，ｂ）＋（¬σ’）ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
このようにして、本発明による下記の方法が得られる。
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）；σ’＜−１
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
Ａ＜−（σ’）ＳＵＢｎ（Ａ，ｂ）＋（¬σ’）ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
σ’＜−σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００３４】
方法３
方法３は、同じ入力データａおよびｂから同じ結果が得られるという点で方法２と同じものである。何故なら、方法２の場合、σ’＝１である時、演算Ａ＜−ＳＵＢｎ（Ａ，ｂ）が実行され、σ’＝０の時、演算Ａ＜−ＡＤＤｎ（Ａ，ｂ）が実行されるからである。方法３の場合にも同じことがいえる。何故なら、σ’＝¬（¬σ’）であるからである。さらに、方法２の場合、σ’＝１の時、演算σ＜−σ  ＯＲ  ｃａｒｒｙが実行され、σ’＝０の時、演算σ＜−σ  ＡＮＤ  ｃａｒｒｙが実行される。このことは下記のように表すことができる。
σ＜−（σ’）（σ  ＯＲ  ｃａｒｒｙ）＋（¬σ’）（σ  ＡＮＤ  ｃａｒｒｙ）
これは論理的には下記の表現と同じである。
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
【００３５】
最後に、方法２の場合、演算ａ＜−ＳＨＬｍ＋１（ａ，１）を実行することにより、ａの最下位ビットが０に固定され（すなわち、ｌｓｂ（ａ）＝０になり）、次に、現在の反復の終わりにσ＝１である場合には、演算ｌｓｂ（ａ）＝１が実行され、そうでない場合で、σ＝０である場合には、ｌｓｂ（ａ）は修正されない。それ故、σの値が何であっても、演算｛ｉｆ  σ＝１、ｌｓｂ（ａ）＝１｝を演算ｌｓｂ（ａ）＝σで容易に置き換えることができる。
【００３６】
方法３は方法２と同じではないが、カバート・チャネル攻撃に対して安全である。何故なら、この方法は、ｉｆ．．．．ｔｈｅｎ．．．．ｏｔｈｅｒｗｉｓｅというタイプのテスト動作を含んでいないで、使用した入力データのビットおよび／または反復中に得られた結果のビットが何であっても、各反復の際に同じ演算が実行されるからである。それ故、構成要素が残した痕跡から種々の反復を分離し、入力データおよび／または出力データのビットを決定することができない。
【００３７】
本発明の実施態様の第２の例の場合には、本発明による方法３は、さらに、この方法の実行時間を制限することにより修正される。
【００３８】
すでに説明したように、減算Ａ＜−ＳＵＢｎ（Ａ，ｂ）を実行するために、実際には、数ｂの２ｎの補数の演算￣ｂ＝ＣＰＬ２ｎ（ｂ）が実行され、次にＡ＜−ＡＤＤｎ（Ａ、￣ｂ）というタイプの加算が行われる。
このことは、方法３の場合には、各反復毎に、Ａ＜−ＡＤＤｎ（Ａ，ｂ）の加算またはＡ＜−ＡＤＤｎ（Ａ、￣ｂ）の加算の他に、２ｎの補数の演算が行われることを意味する。
【００３９】
実行時間を短縮するために、２ｎ￣ｂ＜−ＣＰＬ２ｎ（ｂ）の補数の演算の回数が制限され、追加のメモリ空間がこの方法のスタート時に￣ｂの値を記憶するために使用される。この場合、このことはＡ＜−ＳＵＢｎ（Ａ，ｂ）を実行するために、Ａに￣ｂを加算するのに十分であり、Ａ＜−ＡＤＤｎ（Ａ，ｂ）を実行するために、Ａにｂを加算するのに十分である。また、これにより、反復により１回の加算を実行することができ、そのため実行速度がさらに増大する。
【００４０】
この場合、データｂおよび￣ｂをそれぞれ記憶するために、アドレスｂａｄｄｒおよび￣ｂａｄｄｒを有する２つのレジスタｂおよび￣ｂが使用される。所与の反復中、その内容がレジスタＡの内容に加算されるレジスタはｄと呼ばれ、そのアドレスはｄａｄｄｒと呼ばれる。実際には、各反復毎に、レジスタｄは、ｂを含んでいるレジスタであるか、￣ｂを含んでいるレジスタである。方法３の場合のように、変数σ’は、所与の反復中に起こったこの痕跡を保持し、以降の反復の場合に加算または減算を行う必要があるのかどうかを決定するために使用される。全部をグループ分けすることにより、下記の方法４が最後に得られる。
【００４１】
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）；σ’＜−１；￣ｂ＜−ＣＰＬ２ｎ（ｂ）
Ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
ｄａｄｄｒ＜−ｂａｄｄｒ＋σ’（￣ｂａｄｄｒ−ｂａｄｄｒ）
Ａ＜−ＡＤＤｎ（Ａ，ｄ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
ｌｓｂ（ａ）＜−σ
σ’＜−σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００４２】
方法４
本発明による実施態様の第３の例の場合には、本発明による方法４は、この方法を実施するために使用するメモリ空間を制限することにより修正される。
この目的のために、ｂの補数である￣ｂの値、すなわち演算ＣＰＬ２ｎ（ｂ）の結果は、同じレジスタ内のｂの最初の値の代わりに記憶される。ｂを同じレジスタ内のその補数￣ｂにより置換し、次にＡに上記レジスタの内容を加算することにより減算が行われる。
【００４３】
さらに、￣ｂの不必要な値の計算を行うのを避ける（これは２つの連続している反復ｊおよびｊ＋１の両方が、同じ加算Ａ＜−Ａ＋ｂまたはＡ＜−Ａ＋￣ｂを使用する場合である）。この目的のために、最初にｂを含んでいるレジスタの内容を置き換える必要がない場合（すなわち、２つの連続している反復がｂまたは￣ｂを使用している場合）、無関係なまたは概念上のその内容が２ｎのその補数により置換されるもう１つのレジスタｃが使用される。実際には、レジスタｃは、ｂを含むレジスタと同じサイズであるが、最初にａまたはｂを含むレジスタとは異なるメモリの任意のレジスタである。レジスタｃは、また、他の演算を実行するために使用することができる。本発明の方法の最後のところで、レジスタｃは、その最初の値、すなわちこの方法を実行する前の値を含んでいる。レジスタｃの内容の最初の値は完全に無関係である。何故なら、この値は本発明による方法のコンテキストで実際には使用されないからである。
【００４４】
ｄａｄｄｒは、現在の反復中に２ｎのその補数により置換される値を含んでいるレジスタのアドレスである。ｄａｄｄｒは、最初にｂを含んでいるレジスタの内容を２ｎに補足する場合にはｂａｄｄｒであり、そうでない場合にはｃａｄｄｒになる。ｄは、そのアドレスがｄａｄｄｒであるレジスタの内容を示す。
【００４５】
また、アドレスｂａｄｄｒおよびｃａｄｄｒのところに位置するレジスタ内に含まれる値の状態の痕跡を維持するために、変数レジスタβおよびγが使用される。この状態は、元の値か２ｎに補足した元の値である。アドレスｂａｄｄｒ（またはそれぞれｃａｄｄｒ）のところに位置する値が元の値である場合には、β＝１（またはそれぞれγ＝１）が選択され、アドレスｂａｄｄｒ（またはそれぞれｃａｄｄｒ）のところに位置する値が元の値の２ｎの補数である場合には、β＝０（またはそれぞれγ＝０）が選択される。変数σ’は、前の反復の際の変数σの値の痕跡を維持するために使用される。今までのように、σ’＝０は、前の反復の際に不必要な減算（Ａ＜−ＳＵＢｎ（Ａ，ｂ）＝ＡＤＤｎ（Ａ，￣ｂ））が行われたこと、および補償するために現在の反復中に加算Ａ＜−ＡＤＤｎ（Ａ，ｂ）を行わなければならないことを意味する。逆に、σ’＝１は、前の反復中に間違った減算が行われなかったこと、および現在の反復中に減算を行わなければならないことを意味する。
【００４６】
下記の真理値表が得られる。
前の値              更新した値
σ’  β    γ    ｜    β    γ
０    ０    ０    ｜    １    ０
０    ０    １    ｜    １    １
０    １    ０    ｜    １    １
０    １    １    ｜    １    ０
１    ０    ０    ｜    ０    １
１    ０    １    ｜    ０    ０
１    １    ０    ｜    ０    ０
１    １    １    ｜    ０    １
【００４７】
これから下記の結果が得られる。
β＜−¬σ’
γ＜−γ／σ’／β
【００４８】
全体をグループ分けすることにより、下記の方法５が得られる。
入力：ａ＝（０，ａｍ−１，  ．．．，ａ０）
ｂ＝（ｂｎ−１，  ．．．，ｂ０）
出力：ｑ＝ａ  ｄｉｖ  ｂ  および  ｒ＝ａ  ｍｏｄ  ｂ
σ’＜−１；β＜−１，γ＜−１；Ａ＝（０，ａｍ−１，  ．．．，ａｍ−ｎ＋１）
ｆｏｒ  ｊ＝１  ｔｏ  （ｍ−ｎ＋１），ｄｏ：
ａ＜−ＳＨＬｍ＋１（ａ，１）；σ＜−ｃａｒｒｙ
δ＜−σ’／β
ｄａｄｄｒ＜−ｂａｄｄｒ＋δ（ｃａｄｄｒ−ｂａｄｄｒ）
ｄ＜−ＣＰＬ２ｎ（ｄ）
Ａ＜−ＡＤＤｎ（Ａ，ｂ）
σ＜−（σ  ＡＮＤ  σ’）／（σ  ＡＮＤ  ｃａｒｒｙ）／（σ’  ＡＮＤ  ｃａｒｒｙ）
β＜−¬σ’；γ＜−γ／δ；σ’＜−σ
ｌｓｂ（ａ）＝σ
Ｅｎｄ  ｆｏｒ
ｉｆ  （¬β＝ＴＲＵＥ）  ｔｈｅｎ  ｂ＜−ＣＰＬ２ｎ（ｂ）
ｉｆ  （¬γ＝ＴＲＵＥ）  ｔｈｅｎ  ｃ＜−ＣＰＬ２ｎ（ｃ）
ｉｆ  （¬σ＝ＴＲＵＥ）  ｔｈｅｎ  Ａ＜−ＡＤＤｎ（Ａ，ｂ）
【００４９】
方法５
一般的にいって、同じ演算を行う他の周知の方法と比較した場合の本発明の本質的な利点は、カバート・チャネル攻撃、特にＳＰＡタイプの攻撃に対して安全であることである。さらに、実施のために、本発明による方法は、周知の保護されていない整数除算方法以外のリソース（特に実行時間およびメモリ空間の点で）を必要としない。
【国際調査報告】
2006506676.tif 000002
2006506676.tif 000003