JP2007187908A - サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 - Google Patents
サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 Download PDFInfo
- Publication number
- JP2007187908A JP2007187908A JP2006006307A JP2006006307A JP2007187908A JP 2007187908 A JP2007187908 A JP 2007187908A JP 2006006307 A JP2006006307 A JP 2006006307A JP 2006006307 A JP2006006307 A JP 2006006307A JP 2007187908 A JP2007187908 A JP 2007187908A
- Authority
- JP
- Japan
- Prior art keywords
- calculation
- modular
- multiplication
- unit
- exponent
- 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.)
- Withdrawn
Links
Images
Abstract
【課題】公開鍵暗号におけるモジュラーべき乗算計算方法において、利用可能なリソース内で最適な実装が可能で、サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算方法を提供する。
【解決手段】公開鍵暗号において、べき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算装置において、べき指数を0及び正の整数からなる数値列に変換し、その数値列を用いてモジュラー乗算を行う。
【選択図】図6
【解決手段】公開鍵暗号において、べき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算装置において、べき指数を0及び正の整数からなる数値列に変換し、その数値列を用いてモジュラー乗算を行う。
【選択図】図6
Description
本発明はセキュリティ技術に関し、特に、スマートカード等の暗号機器上への、RSA(Rivest、Shamir、Adeleman)等の公開鍵暗号系の暗号アルゴリズムの安全な実装技術に関する。
電子商取引の普及に伴い、公開鍵暗号系への注目も増大している。公開鍵暗号系、特にディジタル署名は、電子商取引において根源的な要素を成す。
最も有名で、おそらく最も研究されている公開鍵暗号系はRSA暗号系であり、デファクトスタンダードとなっている。RSA暗号系は事前認証の無い二者間における安全な通信を可能とする。この二者をアリスとボブと呼ぶことにする。
アリスは二つの鍵を有している。一つは公開鍵であり、二つの整数(eA,NA)により構成され、もう一つは秘密鍵dAである。NAは暗号系の法(モジュラス)と呼ばれ、二つの大きな素数の積である。さらに、eA、dAは等式eA*dA=1 mod Φ(NA)を満たす。ただし、Φはオイラー関数であり、Φ(NA)はNAを法とする乗法群の位数を示す。すなわち、Φ(NA)=(pA−1)(qA−1)である。公開鍵は誰でも容易に利用できる一方で、秘密鍵はアリスが秘密裏に保持する。ボブがメッセージMを暗号化する場合、暗号文Cは、C=MeA mod NAにより計算される。アリスが暗号文Cを復号する場合、メッセージMは、M=CdA mod NAにより計算される。結果として、アリスは秘密鍵を公開することなく、ボブはアリスに安全にメッセージを送ることができる。
RSA暗号系などの有限体上の離散対数問題を利用した暗号系における主要な演算はモジュラーべき乗算である。モジュラーべき乗算は、通常バイナリ法と呼ばれるアルゴリズムを用いて計算される。バイナリ法はべき指数をバイナリ表現で表し、ビットの値が0であるか1であるかによって2乗算、乗算を振り分けて、べき乗算を計算する。メモリが利用可能な場合、べき乗計算を行う前に、事前計算した値をテーブルに格納しておくことができる。ウィンドウ法は、計算コストを削減するために、この事前計算テーブルを利用し、べき乗算を計算する。
近年、数学以外の攻撃により、暗号系の実装が脆弱となる例が見つかった。特に、サイドチャネル情報と呼ばれる漏洩情報を利用するサイドチャネル攻撃は強力な攻撃である。サイドチャネル情報には、計算時間、電力消費量、電磁波などがある。実際、スマートカードなどの装置ではバッテリーを搭載していないため、電力はカードリーダーから供給される。そのため、スマートカードの電力消費量は簡単に計測することができる。電力消費量は、装置が実行する演算と深い関係があり、その演算は秘密鍵によって定まる。サイドチャネル攻撃は、このサイドチャネル情報と秘密鍵との相関関係を利用している。
サイドチャネル攻撃は、解析手法により二つに分類できる。一つはSPA(Simple Power Analysis)攻撃である。この場合、攻撃者は電力消費量を一回のみ計測し、秘密鍵(そのもの、もしくはその部分情報)を推測する。もう一つはDPA(Differential Power Analysis)攻撃であり、攻撃者は複数回電力消費量を計測し、統計的な解析により秘密鍵を推測する。これ以外にも、フォールト攻撃と呼ばれる攻撃手法もあり、規定外電圧供給やレーザー光の照射などにより、計算中に作為的に不正な値を発生させ、不正な計算結果をモニタすることにより秘密鍵を推測する。さらに洗練された攻撃であるセーフエラー攻撃と呼ばれる攻撃手法もある。本攻撃は、ダミー演算をターゲットとし、ダミー演算の有無により秘密鍵を推測する。したがって、高セキュリティを要求するようなアプリケーションにおいては、ダミー演算を避けたほうがよい。
RSA暗号やDSA(Digital Signature Algorithm)署名などにおいて、DPA攻撃を無効化する防御法が数多く知られている一方で、SPA攻撃については十分な研究はなされていない。SPA攻撃に対する防御法としての最初の試みは、ダミー演算を挿入するものであったが、この場合、計算量が増大する。さらに、ダミー演算を挿入することで対応する実装は、上述のようにセーフエラー攻撃に対して脆弱となる。
SPAの防御法のひとつであるサイドチャネル原子性(Atomicity)法が非特許文献1に記載されている。サイドチャネル原子性法は、ダミー演算をよりうまく利用する。すなわち、本防御法では、各演算を識別不能ないわゆる原子ブロックと呼ばれる単位を用いて実装する。例えば、演算AはA=α|α|α、演算BはB=α|αなどのように、各演算が原子ブロックαの列により実装される。本防御法によれば、電力消費量により、原子ブロックαの列を特定することは可能であるが、それが演算Aであるか演算Bであるのかまでは特定することはできない。しかしながら、一般的に、サイドチャネル原子性法をそのまま実装することは困難である。本防御法を実装するにあたり、原子ブロックを構成するためにダミー演算が挿入される。先と同様に、ダミー演算を挿入することによりセーフエラー攻撃に対して脆弱となる。さらに、サイドチャネル原子性法の別の問題点は、攻撃者は依然として、原子ブロックの数を数えることができ、秘密情報(の一部)を特定することができることである。
SPA攻撃を防ぐための別のアプローチには、演算列のランダム化(ランダム化アルゴリズムと呼ぶ。)がある。すなわち、ランダム化アルゴリズムでは、アルゴリズム中の条件分岐を、秘密情報だけで定まるものとせず、ランダムな選択も追加的に行われるよう構成する。近年、そのようなランダム化アルゴリズムに基づく防御法、例えばHa−Moon法(もともとは楕円曲線暗号用に開発された)などが、RSA暗号やDSA署名などの暗号系に適用されている。このHa−Moon法の改良手法が非特許文献2に記載されている。しかしながら、Ha−Moon法には脆弱性が示されている。このため、Ha−Moon法の適用は、セキュリティ的には問題がある。すなわち、安全性を実現するためには、他の防御法を併用する必要があり、オーバーヘッドがその分大きくなる。
また、楕円曲線暗号におけるSPA攻撃への防御法が非特許文献3に記載されている。
B. Chevallier, M. Ciet, M. Joye, "Low−Cost Solutions for Preventing Simple Side−Channel Analysis: Side Channel Atomicity", Cryptology ePrint Archive Report 2003/237, (2003).[平成18年1月5日検索]インターネット<URL : http://eprint.iacr.org/2003/237.pdf>
S.M. Yen, C.N. Chen, S.J. Moon, J.C. Ha, "Improvement on Ha−Moon Randomized Exponentiation Algorithm", Information Security and Cryptology −ICISC 2004, LNCS 3506, (2004), pp.154−167.
K. Okeya, T. Takagi, C. Vuillaume, "On the Exact Flexibility of the Flexible Countermeasure against Side Channel Attacks", the 9th Australasian Conference on Information Security and Privacy (ACISP 2004), LNCS 3108, (2004), pp.466−477.
スマートカードなどのリソースが限られた機器上に暗号アルゴリズムの実装を行う場合、利用可能なリソースが少ない中で最適な実装を行い、サイドチャネル攻撃に対する耐性を高める必要がある。上述のように、有限体上の離散対数問題を利用した暗号系における主要な演算はモジュラーべき乗算である。従って、モジュラーべき乗算が、具体的には以下の6項目を満たすものである必要がある。
(a)SPA攻撃に耐性を有すること(SPAにより得た情報が攻撃者にとって役立たないものとすること。)
(b)ダミー演算を用いないこと(セーフエラー攻撃に対して安全なものとするためである。)
(c)効率的な演算処理が可能であること(メモリ使用量や計算量が、通常レベルの脆弱性を有するモジュラーべき乗算計算方法と同程度であること。)
(d)メモリ使用量と計算量とのトレードオフが自在であること
(e)RSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用が可能であること
(f)任意のDPA攻撃に対する防御法と結合可能であること
上記非特許文献1の技術は、(a)のSPA攻撃への耐性については考慮されているが、(b)のダミー演算の不使用については十分に考慮されていない。
(a)SPA攻撃に耐性を有すること(SPAにより得た情報が攻撃者にとって役立たないものとすること。)
(b)ダミー演算を用いないこと(セーフエラー攻撃に対して安全なものとするためである。)
(c)効率的な演算処理が可能であること(メモリ使用量や計算量が、通常レベルの脆弱性を有するモジュラーべき乗算計算方法と同程度であること。)
(d)メモリ使用量と計算量とのトレードオフが自在であること
(e)RSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用が可能であること
(f)任意のDPA攻撃に対する防御法と結合可能であること
上記非特許文献1の技術は、(a)のSPA攻撃への耐性については考慮されているが、(b)のダミー演算の不使用については十分に考慮されていない。
また、上記非特許文献2の技術は、(e)のRSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用については考慮されているが、(a)の安全性や(c)の効率性については十分考慮されていない。
また、上記非特許文献3の技術は、(d)のメモリ使用量と計算量とのトレードオフの可能性について考慮されているが、(e)のRSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用については計算量の重い逆元計算を必要とするため、十分考慮されていいない。
本発明は上記事情に鑑みてなされたもので、公開鍵暗号におけるモジュラーべき乗算計算方法において、上記諸項目を満たすモジュラーべき乗算計算方法、すなわち、利用可能なリソース内で最適な実装が可能で、サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算方法を提供することを目的とする。
本発明は、公開鍵暗号において、べき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算装置において、べき指数を0及び正の整数からなる同値表現の数値列に変換し、その数値列を用いてモジュラー乗算を行う。
本発明は、公開鍵暗号において、べき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算装置であって、上記変換べき指数dを固定パターンを有する数値列にエンコードし、予め作成した上記ベース元gの前計算テーブルを用い、上記エンコードした数値列のモジュラーべき乗算を計算する。
具体的には、公開鍵暗号において、数値列で表されるべき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算装置であって、前記べき指数dを所定のビット長毎に0を非0に置き換えることにより得られる同値表現である他の数値列、および、前記ベース元gのi乗(gi、iは予め定められた値以下の自然数)それぞれのモジュラー乗算結果を格納する前計算テーブルを用いて前記モジュラーべき乗算を計算する実計算手段、を備えることを特徴とするモジュラーべき乗算計算装置を提供する。
本発明によれば、公開鍵暗号におけるモジュラーべき乗算計算方法において、利用可能なリソース内で最適な実装が可能で、サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算方法を実現することができる。
以下、本発明の実施の形態を図面を用いて詳細に説明する。
<<第一の実施形態>>
図1は、本発明を適用した本実施形態の暗号化通信システムのシステム構成図である。本図に示すように、本実施形態の暗号化通信システムは、本実施形態のモジュラーべき乗算方法を適用したコンピュータA101およびコンピュータB121がネットワーク142により接続されている。コンピュータA101は、メッセージの暗号化を行い、コンピュータB121は、暗号化されたメッセージの復号を行う。
図1は、本発明を適用した本実施形態の暗号化通信システムのシステム構成図である。本図に示すように、本実施形態の暗号化通信システムは、本実施形態のモジュラーべき乗算方法を適用したコンピュータA101およびコンピュータB121がネットワーク142により接続されている。コンピュータA101は、メッセージの暗号化を行い、コンピュータB121は、暗号化されたメッセージの復号を行う。
コンピュータA101では、メッセージMの暗号化を、C=Me mod Nを計算することにより行い、コンピュータB121では、暗号文Cの復号を秘密鍵dおよび暗号文CからM=Cd mod Nを計算することにより行う。ここでMはメッセージ、Cは暗号文、dは秘密鍵を示す定数、e、Nは公開鍵を示す定数である。ネットワーク142上には、暗号文Cのみ送出され、CからメッセージMを復元するためには、秘密鍵dが必要である。ところが、秘密鍵dはネットワーク142上には送出されないため、秘密鍵dを保持しているものだけが、Mを復元できることになる。
コンピュータA101は、記憶部102および処理部112を備える。また、処理部112は、入力されたメッセージMの暗号化を行う暗号化部113およびモジュラーべき乗算計算部116を備える。ここで、モジュラーべき乗算計算部116は、暗号化部112で暗号化する際に必要なパラメタを計算する。記憶部102は、定数104(例えば、公開鍵やモジュラスのビット長)、秘密情報105(例えば、秘密鍵)などを記憶している。
コンピュータA101は、CPU114やコプロセッサ115などの演算装置、RAM103、EEPROM106、ROM107や外部記憶装置108などの記憶装置、コンピュータ外部とのデータ入出力を行なう入出力インタフェース111を装備し、外部にはコンピュータA101をユーザが操作するためのディスプレイ109、キーボード110、着脱可能な可搬型記憶媒体の読み書き装置などが接続される。
コンピュータA101は、RAM103、ROM107、EEPROM106や外部記憶装置108(例えばフラッシュメモリ、ハードディスク、磁気/光学記憶メディア)などの記憶装置によって、記憶部102を実現し、CPU114やコプロセッサ115などの演算装置が、記憶部102に格納されたプログラムを実行することにより、暗号化部112およびモジュラーべき乗算計算部116を実現する。例えば、記憶部102を構成するEEPROM106ないしはROM107に、プログラムやスマートカードごとに異なる情報(公開鍵、秘密鍵)や定数を格納し、RAM103には暗号化部113の行う計算の中間データ、変数等を格納する。また、コプロセッサ115は特殊用途用の計算装置であり、モジュラー乗算などの算術演算を行う。
コンピュータB121は、コンピュータA101と同様に、記憶部112および処理部132を備え、処理部132は、復号化部133およびモジュラーべき乗算計算部136を備える。また、コンピュータA101と同様に、コンピュータB121は、CPU134やコプロセッサ135などの演算装置、RAM123、EEPROM126、ROM127や外部記憶装置128などの記憶装置、コンピュータ外部とのデータ入出力を行なう入出力インタフェース131を装備し、外部にはコンピュータB121をユーザが操作するためのディスプレイ129、キーボード130、着脱可能な可搬型記憶媒体の読み書き装置などが接続される。
コンピュータB121においても、RAM123、ROM127、EEPROM126や外部記憶装置128(例えばフラッシュメモリ、ハードディスク、磁気/光学記憶メディア)などの記憶装置によって、記憶部122を実現し、CPU134やコプロセッサ135などの演算装置が、記憶部122に格納されたプログラムを実行することにより、復号化部133およびモジュラーべき乗算計算部136を実現する。例えば、記憶部122を構成するEEPROM126ないしはROM127に、プログラムやスマートカードごとに異なる情報(公開鍵、秘密鍵)や定数を格納し、RAM123には復号化部133の行う計算の中間データ、変数等を格納する。また、コプロセッサ135は特殊用途用の計算装置であり、モジュラー乗算などの算術演算を行う。
なお、コンピュータA101およびコンピュータB121内の各プログラムは、予め各コンピュータA101、B121内の記憶部102、122に格納されていてもよいし、必要なときに、各コンピュータA101、B121が入出力インタフェースを介して接続するコンピュータ、または当該コンピュータが利用可能な媒体を介して上記記憶部に導入されてもよい。ここで、媒体とは、たとえば各コンピュータA101およびB121に着脱可能な記憶媒体、または通信媒体(すなわちネットワークまたはネットワークを伝搬する搬送波やディジタル信号)を指す。
以下、例として、図1の暗号化通信システムにおいて、コンピュータB121の復号化部133が行う復号化処理を、図2を参照して説明する。図2は、データが入力された際のコンピュータB121の各処理部が行う情報の受け渡しの様子を示すシーケンス図である。コンピュータA101の暗号化部113が行う暗号化処理も基本的には同様である。なお、以下においてコンピュータB121の各処理部は、秘密鍵、公開鍵に係る情報は、明示の記載がなくてもシステムパラメータとして処理に利用可能である。
復号化部133は、入出力インタフェース131を介して暗号化されたメッセージを受け取る(204)。また、記憶部122から秘密鍵、公開鍵、ビット長の情報を受け取る(205)。復号化部133は、暗号化されたメッセージを受け取ると、暗号化されたメッセージのビット長が予め定めたビット長か否かを判断する。予め定めたビット長より長い場合には、予め定めたビット長となるように暗号化されたメッセージを区切る。以下、所定のビット長に区切られた後の部分メッセージ(以下、単にメッセージともいう。)を用いて説明する。
コンピュータB121の処理部132は、暗号化されたメッセージのビット列によって表される数値を整数としてモジュラスNによる剰余Cを計算する。
すなわち、復号化部133は、記憶部122に格納されている秘密情報125から取得したべき指数dと、暗号化されたメッセージCを基にして構成したベース元gと、利用可能なメモリ容量に基づいて算出したウィンドウ幅wとを、モジュラーべき乗計算部136へ送る(206)。ここで、ウィンドウ幅wは正の整数であり、計算時間を優先する場合はwを大きな値とし、メモリ使用量を小さくする場合はwを小さな値とする。なお、ウィンドウ幅wは利用可能なメモリ容量内で後述する前計算テーブルのサイズが最大になるよう算出する。ウィンドウ幅wが1増加すると、前計算テーブルのサイズは2倍になる。ウィンドウ幅wは、初期値2から前計算テーブルのサイズが利用可能なメモリ容量を超えないところまで1ずつ増加させることにより算出する。そして、モジュラーべき乗計算部136は、べき指数d、ベース元g、ウィンドウ幅wから、モジュラーべき乗算gd mod Nを計算し、計算結果のgd mod Nを復号化部133へ送る(207)。
復号化部133は、送られたモジュラーべき乗計算結果を用いて、入力された暗号化されたメッセージを復号する。例えば、通常のRSAでは、M=gd mod N(からパディング部分を取り除いたもの)を復号されたメッセージとして出力する。
コンピュータB121は、復号化部133で復号された部分メッセージから平文メッセージを組み立て、入出力インタフェース131を介して、ディスプレイ129などから出力する(208)。
次に、コンピュータB121が、復号化処理を行う場合の、モジュラーべき乗算計算部136の処理を詳細に説明する。すなわち、モジュラーべき乗算計算部136が、べき指数d、ベース元g、ウィンドウ幅wから、モジュラーべき乗算gd mod Nを計算する手順を説明する。コンピュータA101のモジュラーべき乗算計算部116も基本的に同様の構成で、同様の手順で処理を行う。
図3は、本実施形態のモジュラーべき乗算計算部136の機能ブロック図である。本図に示すように、モジュラーべき乗算計算部136は、エンコード部301、べき指数変換部302、前計算部303、実計算部304、の各モジュールを備える。また、エンコード部301は、キャリー判定部311、剰余変換部312、繰り返し判定部313を備える。べき指数変換部302は、閾値判定部321、位数加算部322を備える。前計算部303は、モジュラー乗算部331、繰り返し判定部332を備える。実計算部304は、ビット値判定部341、モジュラー乗算部342、繰り返し判定部343を備える。各機能の詳細は以下に処理手順に沿って説明する。
エンコード部301は、べき指数dの同値表現変換を行い固定パターン表現にする。具体的には、d=u0+u12+u222+…+un+12n+1を満たすuiを計算する。ここで、uiは0または正の整数から選び、nはモジュラスNのビット長である。本実施形態では、固定パターンを有する表現に変換することより、実計算部304の行う演算パターンを固定化し、演算順序から攻撃者にとって有益な情報を引き出すことを阻害する。SPAは、ゼロである桁と非ゼロである桁とを識別できることを利用している。そのため、本実施形態では、ゼロである桁を消去し、非ゼロの値(例えば、2)を有する桁に置き換えることにより、演算パターンの固定化を達成する。
より具体的には、実際0*2i=−1*2i+1+2*2iという関係を利用し、0である桁を非ゼロの2に置き換える。すなわち、上記式に示すように、左辺のi番目の桁の値(2iの係数)0を、右辺に従って2に置き換え、(i+1)番目の桁にキャリー−1を発生させる。同様に、−1*2i=−1*2i+1+1*2iという関係を利用し、−1の桁を1および次の桁のキャリー−1とに置き換えることができる。なお、キャリー−1は、正の値を持つ桁に出会うことにより、キャンセルされる。
べき指数変換部302は、べき指数dを別のべき指数d’に変換する。ただし、dとd’は、gd=gd’ mod Nの関係を満たし、特にd’の上位2ビットが10となるべき指数を選択する。べき指数変換により上位2ビットの値を10に固定化することにより、攻撃者による変換後のビット長からの最上位ビットの値の特定を回避することができ、より安全性が高まる。なお、このべき指数の変換は、行わないよう構成してもよい。また、予め行っても良い。予め行うことにより、変換に伴う演算を隠すことができるので、より耐性が増す。以降簡単のため、変換されたべき指数もdとして表すことにする。
次に、本実施形態におけるモジュラーべき乗算を計算する際のモジュラーべき乗算計算部136を構成する各モジュール間のデータの流れについて説明する。図4は、モジュラーべき乗算計算部136の各モジュール間のデータの流れを示すシーケンス図である。
モジュラーべき乗算計算部136が、べき指数d、ベース元g、ウィンドウ幅wを受け取る(401)。モジュラーべき乗算計算部136は、べき指数dをべき指数変換部302に送る(402)。べき指数変換部302は、べき指数dを変換べき指数dに変換する。べき指数変換部302は、変換べき指数dをエンコード部301に送る(403)。モジュラーべき乗算計算部136は、ウィンドウ幅wをエンコード部301に送る(404)。エンコード部301は、変換べき指数dとウィンドウ幅wとからエンコード列を計算する。エンコード部301は、エンコード列を実計算部304に送る(405)。モジュラーべき乗算計算部136は、ベース元gとウィンドウ幅wとを前計算部303に送る(406)。前計算部303は、ベース元gとウィンドウ幅wとから前計算テーブルを作成する。前計算テーブルは、gi(i=1、2、…、2w)で構成される。前計算部303は、前計算テーブルを実計算部304に送る(407)。実計算部304は、エンコード列と前計算テーブルからモジュラーべき乗算を行う。実計算部304は、モジュラーべき乗算の演算結果をモジュラーべき乗算計算部136に送る(408)。モジュラーべき乗算計算部136は、モジュラーべき乗算の演算結果を出力する(409)。
なお、各モジュール間のデータの受け渡しには、データを直接転送する以外にも、記憶部122にデータを書き込み、転送先モジュールが記憶部122にアクセスし、データを読み出すよう構成してもよい。
また、べき指数変換部302の行うべき指数変換は、予め変換を行っておき、変換後のべき指数dを記憶部122に格納するよう構成してもよい。その際、モジュラーべき乗算計算部136には、変換後のべき指数dが入力される。そして、上記ステップ402および403の代わりに、モジュラーべき乗算計算部136から直接エンコード部301に変換べき指数dが送られる。
エンコード部301が受け取る変換べき指数dとウィンドウ幅wとは、エンコード部301がエンコード列の計算を始める前であれば、受け取る順番は問わない。例えば、ウィンドウ幅wを受け取った後に変換べき指数dを受け取るよう構成してもよい。
実計算部304が受け取るエンコード列と前計算テーブルとは、実計算部304がモジュラーべき乗算を行う前であれば、受け取る順番は問わない。例えば、前計算部303が前計算テーブルを作成し、その後、エンコード部301がエンコード列の計算を行うよう構成してもよい。
前計算部303の行う前計算テーブル作成は、ベース元gとウィンドウ幅wとが予め定まっている場合、前計算テーブルを事前に作成し、記憶部122に格納しておいてもよい。その場合、ステップ406および407の処理の代わりに、実計算部304が直接記憶部122にアクセスし、前計算テーブルを読み出す。
次にエンコード部301、べき指数変換部302、前計算部303、実計算部304の行う各処理について、それぞれが備える上記各機能部の働きとともに詳細に説明する。
まず、べき指数変換部302が、べき指数dを変換されたべき指数dに変換する処理であるべき指数変換処理について説明する。図5は、べき指数変換処理の処理フローである。
べき指数変換部302は、べき指数dおよびモジュラスNに対するΦ(N)の値を入力として受け取る(501)。
閾値判定部は321、条件:d+Φ(N)<3*2n+1が成立するかどうかを判定する。本条件が成立する場合、ステップ512へ行く。本条件が成立しない場合、ステップ521へ行く(511)。
ステップ511で条件が成立した場合、位数加算部322は、べき指数dをd+Φ(N)に置き換え、ステップ511へと戻る(512)。
ステップ511で条件が成立しなかった場合、べき指数変換部302は、d=(10dn−1…d0)を変換べき指数dとして出力する(521)。
以上、べき指数変換処理について説明した。なお、べき指数変換部302の受け取るΦ(N)は、予め記憶部122に格納しておき、べき指数変換部302が記憶部122にアクセスし、Φ(N)を読み出してもよい。
次に、エンコード部301が、ウィンドウ幅wを用いて、べき指数変換部302によって変換されたべき指数dをエンコード列un+1、…、u0(各uiは正の値(1、2、…、2w)または0である。)にエンコードするエンコード処理について説明する。図6は、エンコード処理の処理フローである。なお、変換されたべき指数dではなく、モジュラーべき乗算計算部136に入力されたべき指数dを用いる場合も、処理は基本的に同様である。
エンコード部301は、べき指数変換部302が変換したべき指数dおよびウィンドウ幅wを入力として受け取る(601)。
エンコード部301は、変数iに初期値0を、carryに0を代入し、ステップ611へ行く(602)。
繰り返し判定部313は、条件:i+w<n−1が成立するか否かを判定する。条件が成立する場合、ステップ612へ行く。条件が成立しない場合、ステップ621へ行く(611)。
ステップ611で条件が成立した場合、剰余変換部312は、数値(di+w−1…di)2−carryを計算し、その結果をuiとする(612)。
キャリー判定部311は、条件:ui<=0が成立するかどうかを判定する。条件が成立する場合、ステップ615へ行く。条件が成立しない場合、ステップ614へ行く(613)。
ステップ613で条件が成立しなかった場合、エンコード部301は、carryに0を代入し、ステップ616へ行く(614)。
ステップ613で条件が成立した場合、剰余変換部312は、uiをui+2wに置き換え、エンコード部301は、carryに1を代入する(615)。
剰余変換部312は、ui+w−1、…、ui+1をそれぞれ0とする(616)。
エンコード部301は、変数iの値をwインクリメントし(iをi+wに置き換え)、ステップ611へと戻る(617)。
ステップ611で条件が成立しなかった場合、剰余変換部312は、数値(dn−1…di)2−carryを計算し、その結果をuiとする(621)。
キャリー判定部311は、条件:ui<=0が成立するか否かを判定する。条件が成立する場合、ステップ623へ行く。条件が成立しない場合、ステップ624へ行く(622)。
ステップ622で条件が成立した場合、剰余変換部312は、uiをui+2wに置き換え、エンコード部301は、carryに1を代入し、ステップ625へ行く(623)。
ステップ622で条件が成立しなかった場合、エンコード部301は、carryに0を代入する(624)。
剰余変換部312は、数値(dn−1、…、di)2−carryを計算し、その結果をuiに格納する。また、un−1、…、ui+1をそれぞれ0とする(625)。
剰余変換部312は、un+1を0、unを2−carryとする(626)。
エンコード部301は、un+1、…、u0をべき指数dのエンコード結果として出力する(631)。
以上、本実施形態のエンコード処理を説明した。
次に、前計算部303がベース元gおよびウィンドウ幅wから、前計算テーブルを作成する前計算テーブル作成処理、および、実計算部304が、エンコード部301がエンコードしたエンコード列uおよび前計算部303が作成した前計算テーブルから、モジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算処理について説明する。なお、前計算テーブルには、ベース元gi毎のgi mod N(ただし、i = 1,2, …, 2w)、すなわち、g[i]=gi mod Nが格納される。
図7は、前計算テーブル作成処理およびモジュラーべき乗算計算処理の処理フローである。
前計算部303はベース元gおよびウィンドウ幅wを、実計算部304はエンコード列un+1、…、u0を、それぞれ入力として受け取る(701)。
前計算部303は、g[1]にベース元gを、変数iに2を代入する(702)。
繰り返し判定部332は、条件:i<=2wが成立するか否かを判定する。条件が成立する場合、ステップ704へ行く。条件が成立しない場合、ステップ711へ行き、前計算テーブル作成処理は終了する(703)。
ステップ703で条件が成立した場合、モジュラー乗算部331は、モジュラー乗算g[i−1]*g mod Nを計算し、その計算結果をg[i]に格納する。その後、前計算部303は、変数iを1インクリメントし(i=i+1)、ステップ703へと戻る(704)。
ステップ703で条件が成立しなかった場合、実計算部304は、中間データrに1を、変数iにn+1を代入する(711)。
ビット値判定部341および繰り返し判定部343は、条件:ui=0、かつ、i>=0が成立するか否かを判定する。条件が成立する場合、ステップ722へ行く。条件が成立しない場合、ステップ731へ行く(721)。
ステップ721で条件が成立した場合、実計算部304は、変数iを1デクリメントし(i=i−1)、ステップ721へと戻る(722)。
ステップ721で条件が成立しなかった場合、繰り返し判定部343は、条件:i>=0が成立するか否かを判定する。条件が成立する場合、ステップ732へ行く。条件が成立しない場合、ステップ741へ行く(731)。
ステップ731で条件が成立した場合、モジュラー乗算部342は、中間データrのモジュラー2乗、すなわち、r2 mod Nを計算し、計算結果を中間データrに格納する(732)。
そして、ビット値判定部341は、条件:ui>0が成立するか否かを判定する。条件が成立する場合、ステップ734へ行く。条件が成立しない場合、ステップ735へ行く(733)。
ステップ733で条件が成立した場合、モジュラー乗算部342は、事前計算したg[ui]と中間データrとのモジュラー乗算g[ui]*r mod Nを計算し、計算結果を中間データrに格納する(734)。ステップ733で条件が成立しなかった場合は、本処理は行わない。
そして、実計算部304は、変数iを1デクリメントし(i=i−1)、ステップ731へと戻る(735)。
ステップ731で条件が成立しなかった場合、実計算部304は、中間データrを、モジュラーべき乗算の演算結果(gd mod N)として出力する(741)。
以上、本実施形態の前計算テーブル作成処理およびモジュラーべき乗算計算処理を説明した。
なお、上記のモジュラー乗算は、モジュラー乗算を行うコプロセッサ135を用いて高速化してもよい。また、モンゴメリ乗算を用いてモジュラー乗算を行うことにより、高速化を図ってもよい。
また、ステップ731からステップ735間の処理において、ステップ732で中間データrのモジュラー2乗を計算し、ステップ734で前計算テーブルに格納されているg[ui]とのモジュラー乗算をする処理を繰り返す。ここで、1回目の繰り返しでは、中間データrには1が格納されている。従って、前計算テーブルに格納されているg[ui]を中間データrにコピーすることにより、ステップ732のモジュラー2乗算およびステップ734のモジュラー乗算を削除し、高速化を図ってもよい。
次に、具体的にd=144=(10010000)2の場合を例にとり、図6のエンコード処理を解説する。ウィンドウ幅wは2とする。
1回目のステップ612では、u0にdの下位2ビット00を示す数値0が格納される。u0が0であるため、613の条件を満たし、ステップ615に進み、u0に2w(=4)が加算され、キャリーが発生する(キャリーそのものは−1であるが、アルゴリズムでは「carry」をマイナスする値を格納する変数として絶対値の1を格納している。)。
ステップ611に戻り、2回目のステップ612では、u2に次の2ビット00を示す数値0からキャリーを引いた値である−1が格納される。u2が−1であるため、613の条件を満たし、ステップ615に進み、正の値とするために2w(=4)が加算され、u2=3となり、キャリーが発生する。
また、ステップ611に戻り、3回目のステップ612では、u4に次の2ビット01を示す数値1からキャリーを引いた値である0が格納される。u4が0であるため、613の条件を満たし、ステップ615に進み、2w(=4)が加算され、u4=4となり、キャリーが発生する。
また、ステップ611に戻り、4回目のステップ612では、u6に次の2ビット10を示す数値2からキャリー1を引いた値である1が格納される。u6が1であるため、613の条件を満たさず、u6の値はこのまま保持され、キャリーも発生しない。
次にステップ611にもどると、ここでは、条件を満たさず、ステップ621へ進む。
結果として、エンコード結果は、(u7u6u5…u0)=(01040304)となる。実際、(u7u6u5…u0)=(01040304)を用いて、d=u727+u626+…+u020を計算すると、その値は144となり、d=144=u727+u626+…+u020を満たす。
前計算テーブルには、エンコードに用いる正整数1、2、3、4に対し、g1 mod N、g2 mod N、g3 mod N、g4 mod Nを格納しておく。
実計算部304は、このエンコードされた数値列および前計算テーブルを用いて、0に対して2乗し、0以外の値に対して2乗と乗算とを行うことにより、エンコードされた数値列のモジュラーべき乗算を行う。
Sをモジュラー2乗算、Mをモジュラー乗算を表すものとすると、上記のd=144の場合、そのエンコード結果は(01040304)であり、その演算列はSM SSM SSM SSM となる。ただし、左端の0に対しては2乗算を行わないため、左端に0に対応するSは出現しない。このように、本実施形態のエンコード処理によれば、モジュラーべき乗算計算時に固定された演算パターンを有する演算列SSMが得られる。
このときの実計算部304での計算の様子を図8に示す。本図には、エンコード結果の数値列2001から前計算テーブルに格納されている各値(g、g2、g3、g4)2002を用いてモジュラーべき乗算を行う様子を示す。右側への矢印はモジュラー2乗算を、下側への矢印はモジュラー乗算を示す。モジュラー乗算の際、下矢印の終点位置と同位置の前計算テーブルに格納されている値と演算を行う。
なお、本実施形態によれば、上記の同値表現変換のアルゴリズムから明かなように、連続して発生するSSの個数はウィンドウ幅wの値となり、出現するパターンはべき指数dの値とは無関係となる。
以上説明したように、本実施形態のエンコード部301によるエンコード処理によれば、実計算部304が行うモジュラーべき乗算計算処理において演算列は固定されたパターンを持つこととなる。従って、SPAにより得た情報が攻撃者には役立たないものとなり、
(a)SPAに対して耐性があるものといえる。
(a)SPAに対して耐性があるものといえる。
さらに、上述のように、本実施形態のモジュラーべき乗算計算によれば、ダミー演算は用いられない。従って、ダミー演算を用いないため、
(b)セーフエラー攻撃に対して安全なものとなる。
(b)セーフエラー攻撃に対して安全なものとなる。
また、実計算部304の行うモジュラーべき乗算計算処理では、n回のモジュラー2乗算と、n/w回のモジュラー乗算を行う。一方、通常レベルの脆弱性を有するモジュラーべき乗算の計算方法では、n回のモジュラー2乗算、n/2回のモジュラー乗算を行う。従って、ウィンドウ幅wが2以上であれば、前者は後者に比べて計算回数が少なくて済む。従って、
(c)効率的な演算処理が可能であるといえる。また、
(d)ウィンドウ幅wを変更することにより、メモリ量と高速性のトレードオフを利用した調整を行うことが出来る。
(c)効率的な演算処理が可能であるといえる。また、
(d)ウィンドウ幅wを変更することにより、メモリ量と高速性のトレードオフを利用した調整を行うことが出来る。
また、本実施形態はモジュラーべき乗算計算方法の改良であるため、モジュラーべき乗算を用いる、
(e)RSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用が可能である。しかも、上述のように、本実施形態では、同値表現変換によりべき指数の0の桁を非0の桁に置き換えて演算パターンの固定化を実現するにあたり、正の値を持つ桁に変換している。従って、前計算テーブルに保持する前計算値は、ベース元gの正の整数乗のモジュラー乗算の結果に限られ、計算量の大きい負の整数乗のモジュラー乗算は不要である。このため計算コストを削減するために事前計算テーブルを利用してべき乗算を計算するウィンドウ法が一般的に用いられているRSA暗号系の処理には特に適している。
(e)RSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用が可能である。しかも、上述のように、本実施形態では、同値表現変換によりべき指数の0の桁を非0の桁に置き換えて演算パターンの固定化を実現するにあたり、正の値を持つ桁に変換している。従って、前計算テーブルに保持する前計算値は、ベース元gの正の整数乗のモジュラー乗算の結果に限られ、計算量の大きい負の整数乗のモジュラー乗算は不要である。このため計算コストを削減するために事前計算テーブルを利用してべき乗算を計算するウィンドウ法が一般的に用いられているRSA暗号系の処理には特に適している。
上述のように、本実施形態のモジュラーべき乗算計算方法は、秘密のべき指数dをエンコードすることによりSPAによる攻撃を防ぐよう構成されている。従って、
(f)ベース元gをランダム化する一般的なDPAの防御方法と自由に組合せることができる。
(f)ベース元gをランダム化する一般的なDPAの防御方法と自由に組合せることができる。
以上の通り、本実施形態の暗号化通信システムのモジュラーべき乗算計算方法は、先に記載した6項目(a)−(f)のそれぞれを満たす。従って、スマートカードなどのリソースが限られた機器上に暗号アルゴリズムを実装するにあたり、サイドチャネル攻撃に対して耐性が高く、かつ、効率的な暗号化通信システムを得ることができる。
<<第二の実施形態>>
本発明を適用した第二の実施形態について説明する。上記第一の実施形態では、メモリ量と高速性とのトレードオフを利用した調整をウィンドウ幅wを用いて実現していた。しかし、本実施形態では、テーブルサイズkを導入し、本調整をさらにきめ細かに行うことを実現するものである。なお、テーブルサイズkは、前計算テーブルに格納する元の数である。
本発明を適用した第二の実施形態について説明する。上記第一の実施形態では、メモリ量と高速性とのトレードオフを利用した調整をウィンドウ幅wを用いて実現していた。しかし、本実施形態では、テーブルサイズkを導入し、本調整をさらにきめ細かに行うことを実現するものである。なお、テーブルサイズkは、前計算テーブルに格納する元の数である。
本実施形態の暗号化通信システムのシステム構成は、基本的に第一の実施形態と同様である。このため、以下においては、異なる部分のみ説明する。
本実施形態では、第一の実施形態のモジュラーべき乗算計算部136の代わりにモジュラーべき乗算計算部136−2を備える。図9は、本実施形態のモジュラーべき乗算計算部136−2の機能ブロック図である。本図に示すように、本実施形態のモジュラーべき乗算計算部136−2は、エンコード部801と、べき指数変換部802と、前計算部803と、実計算部804と、分数ウィンドウ生成部805と、の各モジュールを備える。
エンコード部801は、第一の実施形態と同様に、キャリー判定部811、繰り返し判定部813を備え、さらに、剰余候補生成部812、剰余選択部814、乱数生成部815、を備える。べき指数変換部802は、閾値判定部821、位数加算部822を備え、これらは、第一の実施形態の同名の機能部と同様の機能を有する。前計算部831は、第一の実施形態と同様に、モジュラー乗算部831、繰り返し判定部832を備え、さらに、格納候補判定部833を備える。実計算部804は、第一の実施形態と同様に、ビット値判定部841、モジュラー乗算部842、繰り返し判定部843を備える。また、分数ウィンドウ生成部805は、格納候補選択部851、繰り返し判定部852、乱数生成部853を備える。各機能の詳細は以下に処理手順に沿って説明する。
本実施形態では、モジュラーべき乗算計算部136−2が、べき指数d、ベース元g、テーブルサイズkから、モジュラーべき乗算gd mod N を計算する。以下、本実施形態での計算手順について説明する。
まず、本実施形態におけるモジュラーべき乗算計算時のモジュラーべき乗算計算部136−2を構成する各モジュール間のデータの流れについて説明する。図10は、本実施形態のモジュラーべき乗算計算部136−2の各モジュール間のデータの流れを示すシーケンス図である。以下においても、第一の実施形態と同様に、変換後のべき指数もdで表す。本実施形態においても、第一の実施形態と同様に、べき指数の変換は行わなくてもよい。また、予め変換したべき指数dを用いるよう構成してもよい。
モジュラーべき乗算計算部136−2が、べき指数d、ベース元g、テーブルサイズkを受け取る(901)。モジュラーべき乗算計算部136−2は、べき指数dをべき指数変換部802に送る(902)。べき指数変換部802は、べき指数dを変換べき指数dに変換する。べき指数変換部802は、変換べき指数dをエンコード部801に送る(903)。
モジュラーべき乗算計算部136−2は、テーブルサイズkを分数ウィンドウ生成部805に送る(904)。分数ウィンドウ生成部805は、テーブルサイズkに対応する分数ウィンドウ(テーブルサイズk、ウィンドウ幅w、テーブル格納候補B)を生成する。分数ウィンドウ生成部805は、分数ウィンドウ(k、w、B)をエンコード部801および前計算部803に送る(905、906)。
エンコード部801は、変換べき指数dと分数ウィンドウ(k、w、B)からエンコード列を計算する。エンコード部801は、エンコード列を実計算部804に送る(907)。モジュラーべき乗算計算部136−2は、ベース元gを前計算部803に送る(908)。前計算部803は、ベース元gと分数ウィンドウ(k、w、B)から前計算テーブルを作成する。前計算テーブルは、元gi mod N(i=1、2、…、2w)のうちのk個のgi mod Nで構成される。前計算部803は、前計算テーブルを実計算部804に送る(909)。
実計算部804は、エンコード列と前計算テーブルからモジュラーべき乗算を行う。実計算部804は、モジュラーべき乗算の演算結果をモジュラーべき乗算計算部136−2に送る(910)。モジュラーべき乗算計算部136−2は、モジュラーべき乗算の演算結果を出力する(911)。
なお、各モジュール間のデータの受け渡しには、データを直接転送する以外にも、記憶部122にデータを書き込み、転送先モジュールが記憶部122にアクセスし、データを読み出してもよい。
また、べき指数変換部802の行うべき指数変換は、予め変換を行っておき、変換後のべき指数dを記憶部122に格納しておいてもよい。その際、モジュラーべき乗算計算部136−2には、変換後のべき指数dが入力される。そして、上記ステップ902および903の代わりに、モジュラーべき乗算計算部136−2から直接エンコード部801に変換べき指数dが送られる。
エンコード部801が受け取る変換べき指数dと分数ウィンドウ(k、w、B)とは、エンコード部801がエンコード列の計算を始める前であれば、受け取る順番は問わない。例えば、分数ウィンドウ(k、w、B)を受け取った後に変換べき指数dを受け取るよう構成してもよい。
実計算部804が受け取るエンコード列と前計算テーブルは、実計算部804がモジュラーべき乗算を行う前であれば、受け取る順番は問わない。例えば、前計算部803が前計算テーブルを作成し、その後、エンコード部801がエンコード列の計算を行うよう構成してもよい。
前計算部803の行う前計算テーブル作成は、ベース元gとウィンドウ幅wとが予め定まっている場合、ウィンドウ幅wに対応する分数ウィンドウ(k、w、B)を作成し、その分数ウィンドウ(k、w、B)を用いて前計算テーブルを事前に作成し、記憶部122に格納しておいてもよい。その場合、上記ステップ908および909の処理の代わりに、実計算部804が直接記憶部122にアクセスし、前計算テーブルを読み出す。
次にエンコード部801、べき指数変換部802、前計算部803、実計算部804、分数ウィンドウ生成部805の行う各処理について、それぞれが備える上記各機能部の働きとともに詳細に説明する。なお、べき指数変換部802がべき指数dから変換べき指数dに変換する処理は、第一の実施形態と同様であるため、ここでは説明しない。
分数ウィンドウ生成部805が、テーブルサイズkに対応する分数ウィンドウ(テーブルサイズk、ウィンドウ幅w、テーブル格納候補B)を生成する分数ウィンドウ生成処理について説明する。図11は、分数ウィンドウ生成処理の処理フローである。
分数ウィンドウ生成部805は、テーブルサイズkを入力として受け取る(1001)。
分数ウィンドウ生成部805は、CEIL(log2(k))を計算し、ウィンドウ幅としてwに格納する(1002)。ただし、log2は底が2の対数、CEIL(a)はa以上の整数のうち最も小さな整数を表す。
格納候補選択部851は、B[1]に1、B[2]に2、…B[2w−1]に2w−1を、それぞれ格納する(1003)。
格納候補選択部851は、B[2w−1+1]、B[2w−1+2]、…、B[2w]にそれぞれ0を格納し、初期化する(1004)。
分数ウィンドウ生成部805は、変数iに初期値2w−1を代入する(1005)。
繰り返し判定部852は、条件:i<kが成立するか否かを判定する。条件が成立する場合、ステップ1012へ行く。条件が成立しない場合、ステップ1021へ行く(1011)。
ステップ1011で条件が成立した場合、乱数生成部853は、w−1ビットの乱数を生成し、変数rndに格納する(1012)。
そして、格納候補選択部851は、条件:B[2w−1+rnd+1]=0が成立するか否かを判定する。条件が成立する場合、ステップ1014へ行く。条件が成立しない場合、既に選択されていることを意味するため、ステップ1012へと戻る(1013)。ステップ1012では、新たな乱数を生成し、処理を繰り返す。
ステップ1013で条件が成立した場合、格納候補選択部851は、B[2w−1+rnd+1]に、選択したことを示す数値である1を格納し、変数iを1インクリメントし、ステップ1011へと戻る(1014)。
ステップ1011で条件が成立しなかった場合、分数ウィンドウ生成部805は、変数iに2w−1+1、変数jに2w−1+1を、それぞれ代入する(1021)。
繰り返し判定部852は、条件:j<=kが成立するか否かを判定する。条件が成立する場合、ステップ1023へ行く。条件が成立しない場合、ステップ1031へ行く(1022)。
ステップ1022で条件が成立した場合、格納候補選択部851は、条件:B[i]=1が成立するか否かを判定する。条件が成立する場合、ステップ1024へ行く。条件が成立しない場合、ステップ1024の処理を飛ばし、ステップ1025へ行く(1023)。
ステップ1023で条件が成立した場合、格納候補選択部851は、B[i]にjを代入する。分数ウィンドウ生成部805は、変数jを1インクリメントする(j=j+1)(1024)。
分数ウィンドウ生成部805は、変数iを1インクリメント(i=i+1)し、ステップ1022へと戻る(1025)。
ステップ1022で条件が成立しなかった場合、分数ウィンドウ生成部805は、テーブル格納候補Bとウィンドウ幅wとを出力し処理を終了する(1031)。
以上、本実施形態の分数ウィンドウ生成処理を説明した。
次に、エンコード部301が、分数ウィンドウ生成処理で生成された分数ウィンドウ(k、w、B)とべき指数変換部802によって変換されたべき指数dまたはモジュラーべき乗算計算部136−2に入力されたべき指数dとを用いて、エンコード列un+1、…、u0(各uiは正の値(1、2、…、2w)である)にエンコードする本実施形態のエンコード処理について説明する。図12は、本実施形態のエンコード処理の処理フローである。なお、変換されたべき指数dではなく、モジュラーべき乗算計算部136−2に入力されたべき指数dを用いる場合も、処理は基本的に同様である。
エンコード部801は、べき指数変換部302が変換したべき指数d、および分数ウィンドウ生成部805が生成した分数ウィンドウ(k、w、B)を入力として受け取る。また、エンコード部801は、変数iに初期値0を、carryに0を代入し、ステップ1111へ行く(1101)。
繰り返し判定部813は、条件:i<n−w+1が成立するか否かを判定する。条件が成立する場合、ステップ1112へ行く。条件が成立しない場合、ステップ1141へ行く(1111)。
ステップ1111で条件が成立した場合、剰余候補生成部812は、数値(di+w−1…di)2−carryおよび(di+w−2…di)2−carryを計算し、その結果をそれぞれ変数x,変数yに代入する(1112)。
キャリー判定部811は、条件:x<=0が成立するか否かを判定する。条件が成立する場合、ステップ1115へ行く。条件が成立しない場合、ステップ1114へ行く(1113)。
ステップ1113で条件が成立した場合、剰余候補生成部812は、xにx+2wを代入し、エンコード部801は、変数x側のキャリーを示す変数carryxに1を代入し、ステップ1116へ行く(1114)。一方、ステップ1113で条件が成立しなかった場合、エンコード部801は、変数y側のキャリーを示す変数carryxに0を代入する(1115)。
次に、キャリー判定部811は、条件:y<=0が成立するか否かを判定する。条件が成立する場合、ステップ1117へ行く。条件が成立しない場合、ステップ1118へ行く(1116)。
ステップ1116で条件が成立した場合、剰余候補生成部812は、yにy+2wを代入し、エンコード部801は、carryyに1を代入し、ステップ1121へ行く(1117)。一方、ステップ1116で条件が成立しなかった場合、エンコード部801は、carryyに0を代入し、ステップ1121へ行く(1118)。
剰余選択部814は、条件:x<=2w−1が成立するか否かを判定する。条件が成立する場合、ステップ1122へ行く。条件が成立しない場合、ステップ1124へ行く(1121)。
ステップ1121で条件が成立した場合、乱数生成部815は、w−1ビットの乱数を生成し、変数rndに格納する(1122)。
剰余選択部814は、条件:rnd<k−2w−1が成立するか否かを判定する。条件が成立する場合、ステップ1131へ行く。条件が成立しない場合、ステップ1132へ行く(1123)。
ステップ1121で条件が成立しなかった場合、剰余選択部814は、条件:B[x]=0が成立するか否かを判定する。条件が成立する場合、ステップ1132へ行く。条件が成立しない場合、ステップ1131へ行く(1124)。
剰余選択部814は、変数xの値を剰余として選択し、uiに格納する。エンコード部801は、carryxをcarryに、wを中間データrにそれぞれ代入し(1131)、ステップ1133へ行く。
剰余選択部814は、変数yの値を剰余として選択し、uiに格納する。エンコード部801は、carryyをcarryに、w−1を中間データrにそれぞれ代入し(1132)、ステップ1133へ行く。
剰余選択部814は、ui+r−1、…、ui+1にそれぞれ0を代入する。エンコード部801は、変数iを中間データrの値分インクリメントし(i=i+r)、ステップ1112へと戻る(1133)。
ステップ1111で条件が成立しなかった場合、繰り返し判定部813は、条件:i<n−1が成立するか否かを判定する。条件が成立する場合、ステップ1142へ行く。条件が成立しない場合、ステップ1151へ行く(1141)。
ステップ1141で条件が成立した場合、剰余候補生成部812は、数値(di+w−1…di)2−carryを計算し、その結果を変数yに代入する(1142)。
キャリー判定部811は、条件:y<=0が成立するか否かを判定する。条件が成立する場合、ステップ1144へ行く。条件が成立しない場合、ステップ1145へ行く(1143)。
ステップ1143で条件が成立した場合、剰余候補生成部812は、変数yを2Wインクリメント(y=y+2w)し、エンコード部801は、carryに1を代入し、ステップ1146へ行く(1144)。一方、ステップ1143で条件が成立しなかった場合、エンコード部801は、carryに0を代入する(1145)。
剰余選択部814は、変数yの値を剰余として選択し、uiに格納する。また、un−1、…、ui+1にそれぞれ0を代入し、ステップ1151へ行く(1146)。
剰余選択部814は、un+1に0を、unに2−carryをそれぞれ代入する(1151)。
エンコード部801は、un+1、…、u0に格納された値を、それぞれべき指数dのエンコード結果として出力する(1152)。
以上、本実施形態のエンコード処理を説明した。
なお、上述のように、本実施形態では、エンコード部801は、べき指数dの下位の桁からwビットごとに読み出し、第一の数値列(x)と第二の数値列(y)とに変換し、xとyとを一定確率でランダムに選択することにより安全性を確保する。yはいかなる場合にも選択が可能であるが、xは前計算テーブルに値が格納されている場合にのみ選択可能である。このため、ステップ1121でxが2w−1より大きいか否かにより振り分け、xが2w−1より大きい場合、ステップ1124で前計算テーブルに格納されているか(B[x]≠0)否かを判定し、格納されている場合xを選択する。一方、xが2w−1以下の場合、x、yともに選択可能であり、乱数により一定確率でいずれかを選択する。
次に、前計算部803がベース元gおよび分数ウィンドウ生成部805が生成した分数ウィンドウ(k、w、B)から、前計算テーブルを作成する本実施形態の前計算テーブル作成処理、および、実計算部804が、エンコード部801がエンコードしたエンコード列uおよび前計算部803が作成した前計算テーブルから、モジュラーべき乗算gd mod Nを計算する本実施形態のモジュラーべき乗算計算処理について説明する。なお、前計算テーブルには、ベース元gi毎のgi mod N(i=1、2、…、2w)のうちのk個のgi mod Nが、iの小さい順に、g[1]、g[2]、…、g[k]に対応づけて格納される。図13は、本実施形態の前計算テーブル作成処理およびモジュラーべき乗算計算処理の処理フローである。
前計算部803はベース元g、テーブルサイズk、ウィンドウ幅w、テーブル格納候補Bを、実計算部804は、エンコード列un+1、…、u0を、それぞれ入力として受け取る(1201)。
前計算部803は、g[1]にベース元gを、変数iに2を代入する(1202)。
繰り返し判定部832は、条件:i<=2w−1が成立するか否かを判定する。条件が成立する場合、ステップ1212へ行く。条件が成立しない場合、ステップ1221へ行く(1211)。
ステップ1211で条件が成立した場合、モジュラー乗算部831は、モジュラー乗算g[i−1]*g mod Nを計算し、その計算結果をg[i]に格納する。その後、前計算部803は、変数iを1インクリメントし(i=i+1)、ステップ1211へと戻る(1212)。
ステップ1211で条件が成立しなかった場合、繰り返し判定部832は、条件:i<=2wが成立するか否かを判定する。条件が成立する場合、ステップ1222へ行く。条件が成立しない場合、ステップ1231へ行き、前計算テーブル作成処理は終了する(1221)。
ステップ1221で条件が成立した場合、格納候補判定部833は、条件:B[i]≠0が成立するか否かを判定する。条件が成立する場合、ステップ1223へ行く。条件が成立しない場合、ステップ1223を飛ばし、ステップ1224へ行く(1222)。
ステップ1222で条件が成立した場合、モジュラー乗算部831は、モジュラー乗算g[i−2w−1]*g[2w−1] mod Nを計算し、その計算結果をg[j]に格納する(1223)。
前計算部803は、変数iを1インクリメント(i=i+1)し、ステップ1221へと戻る(1224)。
前計算テーブル作成処理が終了すると、実計算部804は、中間データrに1を、変数iにn+1を代入する。
ビット値判定部841および繰り返し判定部843は、条件:ui=0かつi>=0が成立するか否かを判定する。条件が成立する場合、ステップ1233へ行く。条件が成立しない場合、ステップ1241へ行く(1232)。
ステップ1232で条件が成立した場合、実計算部841は、変数iを1デクリメント(i=i−1)し、ステップ1232へと戻る(1233)。
ステップ1232で条件が成立しなかった場合、繰り返し判定部843は、条件:i>=0が成立するか否かを判定する。条件が成立する場合、ステップ1242へ行く。条件が成立しない場合、ステップ1251へ行く(1241)。
ステップ1241で条件が成立した場合、モジュラー乗算部842は、中間データrのモジュラー2乗r2 mod Nを計算し、中間データrに計算結果を格納する(1242)。
ビット値判定部841は、条件:ui>0が成立するか否かを判定する。条件が成立する場合、ステップ1244へ行く。条件が成立しない場合、すて覆う1244を飛ばし、ステップ1245へ行く(1243)。
ステップ1243で条件が成立した場合、モジュラー乗算部842は、事前計算したg[B[ui]]と中間データrとのモジュラー乗算g[B[ui]]*r mod Nを計算し、中間データrに計算結果を格納する(1244)。
実計算部804は、変数iを1デクリメント(i=i−1)し、ステップ1241へと戻る(1241)。
ステップ1241で条件が成立しなかった場合、実計算部804は、中間データrを、モジュラーべき乗算の演算結果gd mod Nとして出力し(1251)、処理を終了する。
以上、本実施形態の前計算テーブル作成処理およびモジュラーべき乗算計算処理を説明した。なお、本実施形態においても、第一の実施形態同様、上記のモジュラー乗算は、モジュラー乗算を行うコプロセッサ135を用いて高速化してもよいし、また、モンゴメリ乗算を用いてモジュラー乗算を行い高速化を図ってもよい。
なお、本実施形態においても、第一の実施形態同様、ステップ1241からステップ1245の間の繰り返し処理において、中間データrに1が格納されている1回目の繰り返しにおいて、前計算テーブルに格納されている値g[B[ui]]を中間データrにコピーすることにより、モジュラー2乗算、モジュラー乗算を削減し、高速化を図るよう構成してもよい。
次に、d=134=(10000110)2の場合を例にとり、図12のエンコード処理を解説する。ここでは、テーブルサイズkを3、テーブル格納候補Bを、B=[1、2、3、0]とする。すなわち、g、g2、g3を前計算テーブルに格納する。また、ウィンドウ幅wは2とする。
1回目のステップ1112では、xにdの下位2ビット10を示す数値2が格納され、yにdの下位1ビット0を示す数値0が格納される。x=2であるためキャリーは発生せず、ステップ1114でcarryxに0が格納される。一方、y=0であるため、ステップ1117で2w−1(=2)がyに加算され、キャリーが発生し、carryyに1が格納される(第一の実施形態と同様に、キャリーそのものは−1であるが、アルゴリズムではその絶対値の1を格納している)。ここでは、x<=2w−1(=2)であるので、x、y双方の値を選択可能である。ステップ1122でw−1(=1)ビットの乱数rndを生成する。この乱数rndが0であったとすると、rnd<k−2w−1(=1)であるのでxを選択する。すなわち、u0に2、u1に0を格納する。
2回目のステップ1112では、xに次の2ビットを示す数値1が格納され、yには次の1ビットを示す数値1が格納される。x、y双方ともキャリーは発生せず、carryx、carryyそれぞれに0が格納される。x<=2であるので、ステップ1122で乱数rndを生成する。今回はrnd=1であったとすると、rnd>=1であるため、yを選択する。すなわち、u2に1を格納する。
3回目のステップ1112では、xに4、carryxに1、yに2、carryyに1がそれぞれ格納される。x>2であり、B[4]=0である。ところが、g4 mod Nが前計算テーブルに格納されていないため、xを選択することはできない。そのため、ここでは、yを選択する。u3には2を格納し、キャリーが発生する。
同様に、4回目のステップ1112では、xに3、carryxに1、yに1、carryyに1がそれぞれ格納される。x>2であり、B[3]=3である。g3 mod Nは前計算テーブルに存在する。このため、xを選択する。u4に3を、u5に0を格納し、キャリーが発生する。
最後の2ビットに対しては、xに1、carryxに0、yに1、carryyに1が格納される。今回はrnd=0とすると、xを選択する。u6に1、u7に0を格納する。
結果として、エンコード結果は、(u7u6u5…u0)=(01032102)k=3となる。実際、(u7u6u5…u0)=(01032102)を用いて、d=u727+u626+…+u020を計算すると、その値は、134となり、d=134=u727+u626+…+u020を満たす。
前計算部803は、エンコードに用いる正整数1、2、3のそれぞれに対し、g1 mod N、g2 mod N、g3 mod Nを計算し、前計算テーブルに格納する。
実計算部804は、このエンコードした数値列および前計算テーブルを用いて、0に対して2乗し、0以外の値に対して2乗と乗算を行うことによりモジュラーべき乗算を行う。
Sをモジュラー2乗算、Mをモジュラー乗算を表すものとすると、上記d=134の場合、そのエンコード結果は(01032102)であり、その演算列はSM SSM SM SM SSM となる。ただし、左端の0に対しては2乗算を行わないため、左端に0に対応するSは出現しない。このように、本実施形態のエンコード処理によれば、モジュラーべき乗算計算時に固定された演算パターンを有する演算列SM、SSMが得られる。
このときの実計算部804での計算の様子を図14に示す。第一の実施形態同様、本図には、エンコード結果の数値列2101から前計算テーブルに格納されている各値(g、g2、g3)2102を用いてモジュラーべき乗算を行う様子を示す。右側への矢印はモジュラー2乗算を、下側への矢印はモジュラー乗算を示す。モジュラー乗算の際、下矢印の終点位置と同位置の前計算テーブルに格納されている値と演算を行う。
本実施形態の上記の演算列は、xが選択された場合はSSM、yが選択された場合はSMにより構成される。すなわち、べき指数dのバイナリ表現には依存せずに、確率(k−2w−1)/2w−1でxが選択されるため、SSM、SMの出現の仕方と秘密指数dとは因果関係がない。従って、SPAにより得た情報が攻撃者に役立たないものとなり、
(a)SPAに対して耐性があるものといえる。
(a)SPAに対して耐性があるものといえる。
さらに、上述のように、本実施形態のモジュラーべき乗算計算によれば、ダミー演算は用いられない。従って、ダミー演算を用いないため、
(b)セーフエラー攻撃に対して安全なものとなる。
(b)セーフエラー攻撃に対して安全なものとなる。
また、実計算部804の行うモジュラーべき乗算計算処理では、n回のモジュラー2乗算と、n/(w−1+(k/2w−1))回のモジュラー乗算を行う。通常レベルの脆弱性を有するモジュラーべき乗算の計算方法では、n回のモジュラー2乗算、n/2回のモジュラー乗算を行う。従って、本実施形態によれば、モジュラー乗算の計算回数が少なくて済む。従って、
(c)効率的な演算処理が可能であるといえる。また、
(d)テーブルサイズkを変更することにより、メモリ量と高速性のトレードオフを利用した調整をきめ細かく行うことが出来る。
(c)効率的な演算処理が可能であるといえる。また、
(d)テーブルサイズkを変更することにより、メモリ量と高速性のトレードオフを利用した調整をきめ細かく行うことが出来る。
また、本実施形態はモジュラーべき乗算計算方法の改良であるため、モジュラーべき乗算を用いる、
(e)RSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用が可能である。また、第一の実施形態と同様に、本実施形態においても、前計算テーブルに保持する前計算値はベース元gの正の整数乗のモジュラーべき乗算の結果に限られ、計算量の大きい負の整数乗のモジュラーべき乗算が不要となるため、RSA暗号系の処理には特に適している。
(e)RSA暗号アルゴリズム、DSA暗号アルゴリズムへの適用が可能である。また、第一の実施形態と同様に、本実施形態においても、前計算テーブルに保持する前計算値はベース元gの正の整数乗のモジュラーべき乗算の結果に限られ、計算量の大きい負の整数乗のモジュラーべき乗算が不要となるため、RSA暗号系の処理には特に適している。
上述のように、本実施形態のモジュラーべき乗算計算方法は、秘密のべき指数dをエンコードすることによりSPAによる攻撃を防ぐよう構成されている。従って、
(f)ベース元gをランダム化する一般的なDPAの防御法と自由に組合せることができる。
(f)ベース元gをランダム化する一般的なDPAの防御法と自由に組合せることができる。
以上の通り、本実施形態の暗号化通信システムのモジュラーべき乗算計算方法は、先に記載した6項目(a)−(f)のそれぞれを満たす。従って、スマートカードなどのリソースが限られた機器上に暗号アルゴリズムを実装するにあたり、サイドチャネル攻撃に対して耐性が高く、かつ、効率的な暗号化通信システムを得ることができる。
<<第三の実施形態>>
本発明を適用した第三の実施形態について説明する。本実施形態では、エンコード処理およびモジュラーべき乗算計算を同時に行う。このように構成することにより、本実施形態では、エンコード結果を一旦格納する必要がなく、エンコード結果を格納するためのメモリを節約でき、また、モジュラーべき乗算計算部がエンコード部を具備する必要がなく、構成を簡易化できる、といった効果がある。
本発明を適用した第三の実施形態について説明する。本実施形態では、エンコード処理およびモジュラーべき乗算計算を同時に行う。このように構成することにより、本実施形態では、エンコード結果を一旦格納する必要がなく、エンコード結果を格納するためのメモリを節約でき、また、モジュラーべき乗算計算部がエンコード部を具備する必要がなく、構成を簡易化できる、といった効果がある。
本実施形態の暗号化通信システムの構成は、基本的に前述の各実施形態と同様である。このため、以下においては、主として異なる部分のみ説明する。
本実施形態では、第一の実施形態のモジュラーべき乗算計算部136の代わりにモジュラーべき乗算計算部136−3を備える。図15は、本実施形態のモジュラーべき乗算計算部136−3の機能ブロック図である。本図に示すように、本実施形態のモジュラーべき乗算計算部136−3は、べき指数変換部1302と、前計算部1303と、実計算部1304との各モジュールを備える。
べき指数変換部1302は、閾値判定部1321、位数加算部1322、を備え、これらは、第一の実施形態の同名の機能部と同様の機能を有する。前計算部1303も、モジュラー乗算部1331、繰り返し判定部1332、を備え、これらは、第一の実施形態の同名の機能部と同様の機能を有する。実計算部1304は、キャリー判定部1341、剰余変換部1342、ビット値判定部1343、モジュラー乗算部1344、繰り返し判定部1345を備える。各機能の詳細は、以下に処理手順に沿って説明する。
本実施形態では、モジュラーべき乗算計算部136−3が、べき指数d、ベース元g、ウィンドウ幅wから、モジュラーべき乗算gd mod Nを計算する。以下、本実施形態での計算手順について説明する。
まず、本実施形態におけるモジュラーべき乗算計算時のモジュラーべき乗算計算部136−3を構成する各モジュール間のデータの流れについて説明する。図16は、本実施形態のモジュラーべき乗算計算部136−3の各モジュール間のデータの流れを示すシーケンス図である。以下においても、第一の実施形態と同様に変換後のべき指数もdで表す。本実施形態においても、前述の各実施形態と同様に、べき指数の変換は行わなくてもよい。また、予め変換したべき指数dを用いるよう構成してもよい。
モジュラーべき乗算計算部136−3が、べき指数d、ベース元g、ウィンドウ幅wを受け取る(1401)。モジュラーべき乗算計算部136−3は、べき指数dをべき指数変換部1302に送る(1402)。べき指数変換部1302は、べき指数dを変換べき指数dに変換する。べき指数変換部1302は、変換べき指数dを実計算部1304に送る(1403)。モジュラーべき乗算計算部136−3は、ベース元g、ウィンドウ幅wを前計算部1303に送る(1404)。前計算部1303は、ベース元gとウィンドウ幅wとを用いて前計算テーブルを作成する。前計算部1303は、前計算テーブルを実計算部1304に送る(1405)。モジュラーべき乗算計算部136−3は、ウィンドウ幅wを実計算部1304に送る(1406)。実計算部1304は、変換べき指数d、前計算テーブル、ウィンドウ幅wを用いてモジュラーべき乗算を行う。実計算部1304は、モジュラーべき乗算の演算結果をモジュラーべき乗算計算部136−3に送る(1407)。モジュラーべき乗算計算部136−3は、モジュラーべき乗算の演算結果を出力する(1408)。
なお、各モジュール間のデータの受け渡しには、データを直接転送する以外にも、記憶部122にデータを書き込み、転送先モジュールが記憶部122にアクセスし、データを読み出すよう構成してもよい。
また、べき指数変換部1302の行うべき指数変換は、予め変換を行っておき、変換後のべき指数記憶部122に格納するよう構成してもよい。その際、モジュラーべき乗算計算部136−3には、変換後のべき指数dが入力される。そして、上記ステップ1402および1403の代わりに、モジュラーべき乗算計算部136−3から直接実計算部1304に変換べき指数dが送られる。
実計算部1304が受け取る変換べき指数d、前計算テーブル、ウィンドウ幅wは、実計算部1304がモジュラーべき乗算を行う前であれば、受け取る順番は問わない。例えば、前計算部1303が前計算テーブルを作成し、その後、べき指数変換部1302がべき指数変換を行うよう構成してもよい。
前計算部1303の行う前計算テーブル作成は、ベース元gとウィンドウ幅wが予め定まっている場合、前計算テーブルを事前に作成し、記憶部122に格納しておいてもよい。その場合、ステップ1405と1406の処理の代わりに、実計算部1304が直接記憶部122にアクセスし、前計算テーブルを読み出す。
次に本実施形態の、べき指数変換部1302、前計算部1303、実計算部1304の行う各処理について、それぞれが備える上記各機能部の働きとともに詳細に説明する。
なお、べき指数変換部1302がべき指数dを変換されたべき指数dに変換す処理であるべき指数変換処理、および、前計算部1303がベース元gおよびウィンドウ幅wから前計算テーブルを作成する前計算テーブル作成処理は、第一の実施形態と同様であるため、ここでは説明しない。
実計算部1304が、べき指数変換部302によって変換されたべき指数dおよび前計算部303が作成した前計算テーブルから、モジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算処理を説明する。図17は、本実施形態のモジュラーべき乗算計算処理の処理フローである。
実計算部1304は、べき指数変換部302が変換したべき指数d、および前計算部303が作成した前計算テーブルを入力として受け取る(1501)。前計算テーブルには、ベース元gi毎のgi mod N(i=1、2,…、2w)、すなわち、g[i]=gi mod Nが格納される。
実計算部1304は、中間データrに1を、変数iにn+1を代入する(1531)。
繰り返し判定部1345は、条件:i>wが成立するか否かを判定する。条件が成立する場合、ステップ1541へ行く。条件が成立しない場合、ステップ1591へ行く(1532)。
ステップ1532で条件が成立した場合、剰余変換部1342は、数値(di…di−w+1)2を計算し、その結果をuに代入する。また実計算部1304は、変数jにi−w+1を、変数kにwをそれぞれ代入する(1541)。
実計算部1304は、変数jの値を1デクリメント(j=j−1)し、変数kの値を1デクリメント(k=k−1)する(1542)。
繰り返し判定部1345は、条件:k=0またはj=0が成立するか否かを判定する。条件が成立する場合、ステップ1561へ行く。条件が成立しない場合、ステップ1552へ行く(1551)。
ステップ1551で条件が成立しなかった場合、ビット値判定部1343は、条件:dj=0が成立するか否かを判定する。条件が成立する場合、ステップ1542へと戻る。条件が成立しない場合、ステップ1581へ行く(1552)。
ステップ1551で条件が成立した場合、ビット値判定部1343および繰り返し判定部1345は、条件:dj=1かつj>0が成立するか否かを判定する。条件が成立する場合、ステップ1562へ行く。条件が成立しない場合、ステップ1571へ行く(1561)。
ステップ1561で条件が成立した場合、実計算部1304は、変数kにwを代入し、ステップ1542へと戻る(1562)。
ステップ1561で条件が成立しなかった場合、ビット値判定部1343は、条件:dj=0が成立するか否かを判定する。条件が成立する場合、ステップ1572へ行く。条件が成立しない場合、ステップ1581へ行く(1571)。
ステップ1571で条件が成立した場合、剰余変換部1342は、uにu−1を代入し、ステップ1581へ行く(1572)。
キャリー判定部1341は、条件:u<=0が成立するか否かを判定する。条件が成立する場合、ステップ1582へ行く。条件が成立しない場合、ステップ1583へ行く(1581)。
ステップ1581で条件が成立した場合、剰余変換部1342は、uにu+2wを代入する(1582)。
モジュラー乗算部1344は、中間データrのモジュラー2w乗r2w mod Nを計算し、中間データrに計算結果を格納する。この計算は、中間データrのモジュラー2乗r2 mod Nを計算し、中間データrに計算結果を格納し、この処理をw回繰り返すことにより達成できる。さらに、モジュラー乗算部1344は、中間データrと事前計算したg[u]とのモジュラー乗算r*g[u] mod Nを計算し、中間データrに計算結果を格納する。実計算部1304は、変数iをウィンドウ幅w分デクリメント(i=i−w)し、ステップ1532へと戻る(1583)。
ステップ1532で条件が成立しない場合、剰余変換部1342は、(di…d0)2を計算し、その結果をuに代入する(1591)。
キャリー判定部1341は、条件:u=0が成立するか否かを判定する。条件が成立する場合、ステップ1593へ行く。条件が成立しない場合、ステップ1594へ行く(1592)。
ステップ1592で条件が成立する場合、剰余変換部1342は、uにu+2wを代入する(1593)。
モジュラー乗算部1344は、中間データrのモジュラー2i+1乗であるr2i+1 mod Nを計算し、中間データrに計算結果を格納する。この計算は、中間データrのモジュラー2乗r2 mod Nを計算し、中間データrに計算結果を格納し、この処理をi+1回繰り返すことにより達成できる。さらに、モジュラー乗算部1344は、中間データrと事前計算したg[u]とのモジュラー乗算r*g[u] mod Nを計算し、中間データrに計算結果を格納する(1594)。
実計算部1304は、中間データrを、モジュラーべき乗算の演算結果gd mod Nとして出力する(1595)。
以上、本実施形態のモジュラーべき乗算計算処理を説明した。なお、本実施形態においても、上記各実施形態同様、上記のモジュラー乗算は、モジュラー乗算を行うコプロセッサ135を用いて高速化してもよいし、また、モンゴメリ乗算を用いてモジュラー乗算を行い高速化を図ってもよい。
また、本実施形態においても、前述の各実施形態同様、ステップ1532からステップ1583の間の繰り返し処理において、中間データrに1が格納されている1回目の繰り返しにおいて、前計算テーブルに格納されている値g[u]を中間データrにコピーすることにより、モジュラー2乗算、モジュラー乗算を削減し、高速化を図るよう構成してもよい。
また、上記では、第一の実施形態同様、モジュラーべき乗算計算部136−3が、べき指数d、ベース元g、ウィンドウ幅wを用いてモジュラーべき乗算gd mod Nを計算する構成を例にあげて説明した。しかし、本実施形態においても、第二の実施形態のモジュラーべき乗算計算手順、すなわち、モジュラーべき乗算計算部136−3が、べき指数d、ベース元g、テーブルサイズkを用いてモジュラーべき乗算gd mod Nを計算する構成も適用可能である。
以上説明したように、本実施形態のモジュラーべき乗算計算部136−3において行うモジュラーべき乗算計算のアルゴリズムは、基本的に前述の各実施形態と同じである。従って、本実施形態の暗号化通信システムのモジュラーべき乗算計算方法も、先に記載した6項目(a)−(f)のそれぞれを満たす。従って、スマートカードなどのリソースが限られた機器上に暗号アルゴリズムを実装するにあたり、サイドチャネル攻撃に対して耐性が高く、かつ、効率的な暗号化通信システムを得ることができる。
さらに、本実施形態では、エンコード処理およびモジュラーべき乗算計算を同時に行うため、エンコード結果を一旦格納するためのメモリが不要となり、また、モジュラーべき乗算計算部がエンコード部を独立して具備する必要がない。従って、前述の各実施形態に比べ、構成を簡易化できるといった効果がある。
なお、本実施形態では、上述のようにべき指数dを上位ビットから読み込んでエンコード処理を行う手法を例に挙げて説明した。一方、第一の実施形態および第二の実施形態では、べき指数dを下位ビットから読み込んでエンコード処理を行う手法を例に挙げて説明した。しかし、いずれの手法も上記いずれの実施形態にも適用可能である。
<<第四の実施形態>>
本発明を適用した第四の実施形態について説明する。本実施形態では、ベース元gが事前に定まっている場合、前計算テーブルを予め作成する。前計算テーブルを予め作成しておくことにより、より高速なモジュラーべき乗算の計算を実現することができる。
本発明を適用した第四の実施形態について説明する。本実施形態では、ベース元gが事前に定まっている場合、前計算テーブルを予め作成する。前計算テーブルを予め作成しておくことにより、より高速なモジュラーべき乗算の計算を実現することができる。
本実施形態の暗号化通信システムの構成は、基本的に前述の各実施形態と同様である。このため、以下においては、主として異なる部分のみ説明する。
本実施形態では、第一の実施形態のモジュラーべき乗算計算部136の代わりにモジュラーべき乗算計算部136−4を備える。図18は、本実施形態のモジュラーべき乗算計算部136−4の機能ブロック図である。本図に示すように、本実施形態のモジュラーべき乗算計算部136−4は、エンコード部1601と、実計算部1602との各モジュールを備える。
エンコード部1601は、位数加算部1611、キャリー判定部1612、剰余変換部1613、繰り返し判定部1614を備える。実計算部1602は、モジュラー乗算部1622、繰り返し判定部1623を備える。各機能の詳細は、以下処理手順に沿って説明する。
本実施形態では、モジュラーべき乗算計算部136−4が、べき指数d、ウィンドウ幅w、前計算テーブル、分割数vから、モジュラーべき乗算gd mod Nを計算する。なお、分割数vは、前計算テーブルに格納するベースの元gのべき乗の基数を定めるものである。
まず、前計算テーブルの構成を説明する。図19は、本実施形態の前計算テーブルを説明するための図である。
本図に示すように、分割数がvのとき、べき指数dをv個の部分(セグメント)に分割する。ここで、べき指数dのビット長をnとする。すなわち、2n/vを基数として(nがvで割り切れない場合もあるため、より正確にはt=CEIL((n+1)/(v*w))とし、2twを基数とする。)、べき指数dを2n/v進表現d=d(v−1)2(v−1)n/v+d(v−2)2(v−2)n/v+…+(1)2n/v+d(0)に展開する。
モジュラーべき乗計算の計算には、gv−1=g^{2(v−1)n/v} mod N、gv−2=g^{2(v−2)n/v} mod N、...、g1=g^{2n/v} mod N、g0=g mod Nとし、d(v−1)、...、d(0)に対するモジュラー多重べき乗計算gv−1 d(v−1)*gv−2 d(v−2)*...*g1 d(1)*g0 d(0) mod Nを計算することにより、モジュラーべき乗算を計算する。
前計算テーブルでは、gv−1、gv−2、…、g1、g0のべき積gv−1 jv−1*gv−2 jv−2*…*g1 j1*g1 j1 mod Nがg[jv−1、jv−2、…、j1、j0]に格納される(ここで、jv−1=0、1、…、2w、jv−2=1、2、…、2w、…、j1=1、2、…、2w、…、j0=1、2、…、2w)。すなわち、v個の各セグメントは、t個のブロックから成り、各ブロックはwビットの値により構成される。従って、前計算テーブルに格納される値は、各セグメントにつきwビットの値のべき乗(gt jt)を選び、全てのセグメントにわたって乗じた値となる。
以下、本実施形態の計算手順について説明する。まず、本実施形態におけるモジュラーべき乗算計算時のモジュラーべき乗算計算部136−4を構成する各モジュール間のデータの流れについて説明する。
図20は、本実施形態のモジュラーべき乗算計算部136−4の各モジュール間のデータの流れを示すシーケンス図である。
モジュラーべき乗算計算部136−4が、べき指数d、前計算テーブル、ウィンドウ幅w、分割数vを受け取る(1701)。モジュラーべき乗算計算部136−4は、べき指数d、ウィンドウ幅wをエンコード部1601に送る(1702)。エンコード部1601は、べき指数dとウィンドウ幅wとからエンコード列を計算する。エンコード部1601は、エンコード列を実計算部1602へ送る(1703)。モジュラーべき乗算計算部136−4は前計算テーブルとウィンドウ幅wと分割数vとを実計算部1602へ送る(1704)。実計算部1602は、エンコード列、前計算テーブル、ウィンドウ幅w、分割数vを用いてモジュラーべき乗算を行う。実計算部1602は、モジュラーべき乗算の演算結果をモジュラーべき乗算計算部136−4に送る(1705)。モジュラーべき乗算計算部136−4は、モジュラーべき乗算の演算結果を出力する(1706)。
なお、各モジュール間のデータの受け渡しには、データを直接転送する以外にも、記憶部122にデータを書き込み、転送先モジュールが記憶部122にアクセスし、データを読み出すよう構成してもよい。
また、エンコード部1601が受け取るべき指数dとウィンドウ幅wとは、エンコード部1601がエンコード列の計算を始める前であれば、受け取る順番は問わない。例えば、ウィンドウ幅wを受け取った後に変換べき指数dを受け取るよう構成してもよい。
実計算部1602が受け取るエンコード列、前計算テーブル、ウィンドウ幅w、分割数vは、実計算部1602がモジュラーべき乗算を行う前であれば、受け取る順番は問わない。例えば、実計算部1602がウィンドウ幅w、前計算テーブル、分割数vを受け取った後に、エンコード部1601がエンコード列の計算を行い、エンコード列を実計算部1602へ送るよう構成してもよい。
次にエンコード部1601、実計算部1602の行う各処理について、それぞれが備える上記各機能部の働きとともに詳細に説明する。
エンコード部1601が、ウィンドウ幅w、前計算テーブル、分割数vを用いて、べき指数dをエンコード列un+1、…、u0(各uiは正の値(1、2、…、2w)である。)にエンコードするエンコード処理、および、実計算部1602が、エンコード部1601がエンコードしたエンコード列u、前計算テーブル、ウィンドウ幅w、分割数vを用いてgd mod Nを計算するモジュラーべき乗算計算処理について説明する。図21は、エンコード処理およびモジュラーべき乗算計算処理の処理フローである。
エンコード部1601は、ビット長がnビットのべき指数dとウィンドウwを入力として受け取る。そして、実計算部1602は、分割数vとウィンドウ幅wと前計算テーブルg[0、1、…、1]、…、g[2w、2w、…、2w]とを入力として受け取る(1801)。
位数加算部1611は、べき指数dにd+Φ(N)を代入する。エンコード部1601は、変数iに初期値0を、carryに0を代入し、ステップ1811へ行く(1802)。
繰り返し判定部1614は、条件:i+w<n−1が成立するか否かを判定する。条件が成立する場合、ステップ1812へ行く。条件が成立しない場合、ステップ1821へ行く(1811)。
ステップ1811で条件が成立した場合、剰余変換部1613は、数値(di+w−1…di)2−carryを計算し、その結果をuiに代入する(1812)。
キャリー判定部1612は、条件:ui<=0が成立するか否かを判定する。条件が成立する場合、ステップ1815へ行く。条件が成立しない場合、ステップ1814へ行く(1813)。
ステップ1813で条件が成立しなかった場合、エンコード部1813は、carryに0を代入し、ステップ1816へ行く(1814)。
ステップ1813で条件が成立した場合、剰余変換部1613は、uiにui+2wを代入し、エンコード部1601は、carryに1を代入する(1815)。
ステップ1813で条件が成立した場合、剰余変換部1613は、uiにui+2wを代入し、エンコード部1601は、carryに1を代入する(1815)。
剰余変換部1613は、ui+w−1、…、ui+1にそれぞれ0を代入する。エンコード部1601は、変数iをウィンドウ幅w分インクリメント(i=i+w)し、ステップ1811へと戻る(1816)。
ステップ1811で条件が成立しなかった場合、剰余変換部1613は、数値(dn…di)2−carryを計算し、その結果をuiに代入する。エンコード列un+1、…、u0を出力し、エンコード処理は終了する(1821)。
実計算部1602は、CEIL((n+1)/(v*w))を計算し、変数tに代入する(1822)。
繰り返し判定部1623は、条件:i<t*v*wが成立するか否かを判定する。条件が成立する場合、ステップ1824へ行く。条件が成立しない場合、ステップ1831へ行く(1823)。
ステップ1823で条件が成立した場合、実計算部1602は、uiに0を、変数iを1インクリメント(i=i+1)し、ステップ1823へ戻る(1824)。
ステップ1823で条件が成立しなかった場合、実計算部1602は、変数iにt−1を、中間データrに1を代入し、ステップ1841へ行く(1831)。
繰り返し判定部1623は、条件:i>=0が成立するか否かを判定する。条件が成立する場合、ステップ1842へ行く。条件が成立しない場合、ステップ1851へ行く(1841)。
モジュラー乗算部1622は、中間データrのモジュラー2w乗r2w mod Nを計算し、中間データrに計算結果を格納する。なお、本計算は、中間データrのモジュラー2乗r2 mod Nを計算し、当該計算結果を中間データrにするという処理をw回繰り返すことにより達成できる。さらに、モジュラー乗算部1622は、中間データrと事前計算したg[u(v−1)tw+iw、u(v−2)tw+iw、…、utw+iw、uiw]とのモジュラー乗算r*g[u(v−1)tw+iw、u(v−2)tw+iw、…、utw+iw、uiw] mod Nを計算し、当該計算結果を中間データrに格納する(1842)。
実計算部1602は、変数iを1デクリメント(i=i−1)し、ステップ1841へと戻る(1843)。
ステップ1841で条件が成立しない場合、実計算部1602は中間データrを、モジュラーべき乗の演算結果gd mod Nとして出力し(1851)、処理を終了する。
なお、ステップ1802で用いるΦ(N)は、予め記憶部122に格納しておき、エンコード部1601が記憶部122にアクセスし、Φ(N)を読み出してもよい。
エンコード処理およびモジュラーべき乗算計算処理を説明した。なお、本実施形態においても、前述の各実施形態同様、上記のモジュラー乗算は、モジュラー乗算を行うコプロセッサ135を用いて高速化してもよいし、また、モンゴメリ乗算を用いてモジュラー乗算を行い高速化を図ってもよい。
また、本実施形態においても、前述の各実施形態同様、ステップ1841からステップ1843の間の繰り返し処理において、中間データrに1が格納されている1回目の繰り返し処理では、前計算テーブルに格納されている値を中間データrにコピーすることにより、モジュラー2乗算、モジュラー乗算を削減し、高速化を図るよう構成してもよい。
以上説明したように、本実施形態のモジュラーべき乗算計算部136−4において行うモジュラーべき乗算計算のアルゴリズムは、基本的に第一の実施形態と同様である。従って、本実施形態の暗号化通信システムのモジュラーべき乗算計算方法も、先に記載した6項目(a)−(f)のそれぞれを満たす。従って、スマートカードなどのリソースが限られた機器上に暗号アルゴリズムを実装するにあたり、サイドチャネル攻撃に対して耐性が高く、かつ、効率的な暗号化通信システムを得ることができる。
また、本実施形態は、上述のように、前計算テーブルを予め作成しておく。従って、より高速なモジュラーべき乗算の計算を実現することができる。
さらに、DSA暗号アルゴリズムでは、ベース元gがメッセージに依存しない。このため、初期設定時に1回前計算テーブルを生成しておけばよい。従って、DSA暗号アルゴリズムによる署名生成処理は、本実施形態の適用先として最適である。一般に、前計算テーブルを作成する前処理は計算負荷が高いが、本実施形態のように予め作成した前計算テーブルを利用することにより、システム全体の処理の計算負荷を高めることなく高速な処理を実現することができる。
なお、以上の各実施形態では、本発明を暗号化通信システムに適用した場合を例に挙げて説明した。しかし、本発明は、署名検証システムに適用してもよい。本発明を署名検証システムに適用する場合は、コンピュータB121が署名の生成を行い、コンピュータA101が、ネットワーク142を経由して送信された署名143の検証を行う。
この場合、コンピュータB121の復号化部133は、署名生成部として機能し、入力されたメッセージに対する署名の生成を行う。コンピュータA101の暗号化部113は、署名検証部として機能し、署名の検証を行う。メッセージMに対する署名を行う際には、C=Md mod Nを計算する。署名の検証を行う際にはM’=Ce mod Nを計算し、M=M’が成立する場合、その検証結果として「有効」を出力する。M=M’が不成立の場合、「無効」を出力する。
また、上記各実施形態における暗号化部113、復号化部133、署名生成部、署名検証部は、専用のハードウェアを用いて行って構成してもよい。また、モジュラーべき乗算計算部をコプロセッサまたはそれ以外の専用ハードウェアで実現しても良い。また、データ処理部は、上記暗号化処理、復号化処理、署名生成処理、署名検証処理のうち、任意の一つ以上の処理を行えるように構成してもよい。
101:コンピュータA,102:記憶部、103:RAM、104:定数、105:秘密情報、106:EEPROM,107:ROM、108:外部記憶装置、109:ディスプレイ、110:キーボード、111:入出力インタフェース、112:処理部、113:暗号化部、114:CPU,115:コプロセッサ、116:モジュラーべき乗算計算部、121:コンピュータA,122:記憶部、123:RAM、124:定数、125:秘密情報、126:EEPROM,127:ROM、128:外部記憶装置、129:ディスプレイ、130:キーボード、131:入出力インタフェース、132:処理部、133:暗号化部、134:CPU,135:コプロセッサ、136:モジュラーべき乗算計算部、141:データ、142:ネットワーク、301:エンコード部、302:べき指数変換部、303:前計算部、304:実計算部、311:キャリー判定部、312:剰余変換部、313:繰り返し判定部、321:閾値判定部、322:位数加算部、331:モジュラー乗算部、332:繰り返し判定部、341:ビット値判定部、342:モジュラー乗算部、343:繰り返し判定部、136−2:モジュラー乗算計算部、801:エンコード部、802:べき指数変換部、803:前計算部、804:実計算部、805:分数ウィンドウ生成部、811:キャリー判定部、812:剰余候補せい西部、813:繰り返し判定部、814:剰余選択部、815:乱数生成部、821:閾値判定部、822:位数加算部、831:モジュラー乗算部、832:繰り返し判定部、833:格納候補判定部、841:ビット値判定部、842:モジュラー乗算部、843:繰り返し判定部、851:格納候補選択部、852:繰り返し判定部、853:乱数生成部、136−3:モジュラー乗算計算部、1302:べき指数変換部、1303:前計算部、1304:実計算部、1321:閾値判定部、1322:位数加算部、1331:モジュラー乗算部、1332:繰り返し判定部、1341:キャリー判定部、1342:剰余変換部、1343:ビット値判定部、1344:モジュラー乗算部、1345:繰り返し判定部、136−4:モジュラー乗算計算部、1601:エンコード部、1602:実計算部、1611:位数加算部、1612:キャリー判定部、1613:剰余変換部、1614:繰り返し判定部、1622:モジュラー乗算部、1623:繰り返し判定部
Claims (12)
- 公開鍵暗号において、数値列で表されるべき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算装置であって、
前記べき指数dを所定のビット長毎に0を予め定めた範囲の非0の値に置き換えることにより得られる同値表現である他の数値列、および、前記ベース元gを用いて予め計算した値が格納される前計算テーブルを用いて前記モジュラーべき乗算を計算する実計算手段、を備えること
を特徴とするモジュラーべき乗算計算装置。 - 請求項1記載のモジュラーべき乗算計算装置であって、
前記ベース元gを用いて前記値を計算して格納することにより前記前計算テーブルを生成する前計算手段をさらに備えること
を特徴とするモジュラーべき乗算計算装置。 - 請求項2記載のモジュラーべき乗算計算装置であって、
前記実計算手段は、前記他の数値列を得るエンコード手段を備え、
前記エンコード手段は、
前記べき指数dを所定のビット長w毎に読み出し、それぞれ数値に変換する変換手段と、
前記変換手段において変換された各数値について、それぞれ0以下の値であるか否かを判定する判定手段と、
前記判定手段において0以下と判定された場合、当該数値を予め定めた規則に従って変換する再変換手段と、を備え、
前記前計算手段は、前記ベース元gのi乗(iは予め定められた値以下の自然数)それぞれのモジュラー乗算を行い、前記ベース元gを用いて計算した値として前記前計算テーブルに格納すること、
を特徴とするモジュラーべき乗算計算装置。 - 請求項2記載のモジュラーべき乗算計算装置であって、
予め与えられた前記前計算テーブルに格納する元の数kを用いて、前記所定のビット長wを計算するとともに前記前計算テーブルに格納する格納候補を作成する分数ウィンドウ生成手段と、をさらに備え、
前記実計算手段は、前記他の数値列を得るエンコード手段を備え、
前記エンコード手段は、
前記べき指数dを所定のビット長wおよびw−1毎に読み出し、それぞれ第一の数値と当該第一の数値に対応する第二の数値とに変換する変換手段と、
前記各第一の数値について、それぞれ0以下の値であるか否かを判定する第一の判定手段と、
前記第一の判定手段において0以下と判定された場合、当該第一の数値を予め定めた規則に従って変換する第一の再変換手段と、
前記各第二の数値について、それぞれ0以下の値であるか否かを判定する第二の判定手段と、
前記第二の判定手段において0以下と判定された場合、当該第二の数値を予め定めた規則に従って変換する第二の再変換手段と、
前記第一の数値が所定の値より大きい場合、前記所定のビット長wおよび前記格納候補に従って、第一の数値および当該第一の数値に対応する第二の数値のいずれかを選択する選択手段と、を備え、
前記前計算手段は、前記テーブルサイズkと前記所定のビット長wと前記格納候補とを用いて、前記ベース元gのi乗(iは予め定められた値以下の自然数)それぞれのモジュラー乗算計算を行い、当該計算結果のうちk個を前記ベース元gを用いて計算した値として前記前計算テーブルに格納すること、
を特徴とするモジュラーべき乗算計算装置。 - 請求項1から4のいずれか1項記載のモジュラーべき乗算計算装置であって、
前記べき指数dを前記他の数値列にエンコードする前に、前記べき指数dを変換し、変換後のべき指数を新たにべき指数dとするべき指数変換手段をさらに備えること
を特徴とするモジュラーべき乗算計算装置。 - 請求項1に記載のモジュラーべき乗算計算装置であって、
前記べき指数変換手段において変換された変換後のべき指数dは、上位2ビットが10であること
を特徴とするモジュラーべき乗算計算装置。 - データからディジタル署名データを生成する署名生成装置であって、
前記署名データ生成時のモジュラーべき乗算に、請求項1〜6記載のモジュラーべき乗算計算装置を用いること
を特徴とする署名生成装置。 - 暗号化されたデータを復号する復号化装置であって、
復号時のモジュラーべき乗算に、請求項1〜6記載のモジュラーべき乗算計算装置を用いること
を特徴とする復号化装置。 - 公開鍵暗号において、数値列で表されるべき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算方法であって、
前記べき指数dを所定のビット長w毎に0を予め定めた範囲の非0の値に置き換え、同値表現となる他の数値列にエンコードするエンコードステップと、
前記ベース元gの前記ベース元gのi乗(gi、iは2W以下の自然数)それぞれのモジュラー乗算結果を格納する前計算テーブルを生成する前計算ステップと、
前記他の数値列および前記前計算テーブルを用いて前記モジュラーべき乗算を計算する実計算ステップと、を備え、
前記エンコードステップは、
当該べき指数dから前記所定のビット長wを読み出し数値に変換する変換ステップと、
前記変換された数値が0以下の値であるか否かを判定する判定ステップと、
前記判定手段において0以下と判定された場合、当該数値を予め定めた規則に従って変換する再変換ステップと、を前記べき指数dの全桁にわたり繰り返すこと
を特徴とするモジュラーべき乗算計算方法。 - 公開鍵暗号において、数値列で表されるべき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算方法であって、
予め与えられた前計算テーブルに格納する元の数kを用いて、所定のビット長wを計算するとともに前記前計算テーブルに格納する格納候補を作成する分数ウィンドウ生成手段
前記べき指数dを前記所定のビット長wまたはw−1毎に0を予め定めた範囲の非0の値に置き換え、同値表現となる他の数値列にエンコードするエンコードステップと、
前記テーブルサイズkと前記所定のビット長wと前記格納候補とを用いて、前記ベース元gのi乗(gi、iは2W以下の自然数)それぞれのモジュラー乗算結果のうちk個を前記前計算テーブルに格納することによって前記前計算テーブルを生成する前計算ステップと、
前記他の数値列および前記前計算テーブルを用いて前記モジュラーべき乗算を計算する実計算ステップと、を備え、
前記エンコードステップは、
当該べき指数dから前記所定のビット長wを読み出し、第一の数値と第二の数値とに変換する変換ステップと、
前記第一の数値について、0以下の値であるか否かを判定する第一の判定ステップと、
前記第一の判定ステップにおいて0以下と判定された場合、当該第一の数値を予め定めた規則に従って変換する第一の再変換ステップと、
前記第二の数値について、0以下の値であるか否かを判定する第二の判定ステップと、
前記第二の判定ステップにおいて0以下と判定された場合、当該第二の数値を予め定めた規則に従って変換する第二の再変換ステップと、
前記第一の数値を所定の値と比較し、当該第一の数値が所定の値より大きい場合、前記所定のビット長wおよび前記格納候補に従って、当該第一の数値および前記第二の数値のいずれかを選択する選択ステップと、を前記べき指数dの全桁にわたり繰り返すこと
を特徴とするモジュラーべき乗算計算方法。 - 公開鍵暗号において、数値列で表されるべき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算方法であって、
前記ベース元gの前記ベース元gのi乗(gi、iは2W以下の自然数、wは予め定められたビット長)それぞれのモジュラー乗算結果を格納する前計算テーブルを生成する前計算ステップと、
前記べき指数dを所定のビット長w毎に0を予め定めた範囲の非0の値に置き換えて得られる同値表現となる他の数値列、および、前記前計算テーブルを用いて前記モジュラーべき乗算を計算する実計算ステップと、を備え、
前記実計算ステップは、
当該べき指数dから前記所定のビット長wを読み出し数値に変換する変換ステップと、
前記変換された数値が0以下の値であるか否かを判定する判定ステップと、
前記判定手段において0以下と判定された場合、当該数値を予め定めた規則に従って変換する再変換ステップと、
前記再変換ステップで変換後の数値と前記前計算テーブルを用いてモジュラーべき乗算を計算するモジュラーべき乗算計算ステップと、を前記べき指数dの全桁にわたり繰り返すこと
を特徴とするモジュラーべき乗算計算方法。 - 公開鍵暗号において、数値列で表されるべき指数d、公開モジュラスN、ベース元gからモジュラーべき乗算gd mod Nを計算するモジュラーべき乗算計算方法であって、
前記べき指数dを所定のビット長w毎に0を予め定めた範囲の非0の値に置き換え、同値表現となる他の数値列にエンコードするエンコードステップと、
前記他の数値列および前記ベース元gを用いて予め計算した値が格納される前計算テーブルを用いて前記モジュラーべき乗算を計算する実計算ステップと、を備え、
前記エンコードステップは、
当該べき指数dから前記所定のビット長wを読み出し数値に変換する変換ステップと、
前記変換された数値が0以下の値であるか否かを判定する判定ステップと、
前記判定手段において0以下と判定された場合、当該数値を予め定めた規則に従って変換する再変換ステップと、を前記べき指数dの全桁にわたり繰り返すこと
を特徴とするモジュラーべき乗算計算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006006307A JP2007187908A (ja) | 2006-01-13 | 2006-01-13 | サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006006307A JP2007187908A (ja) | 2006-01-13 | 2006-01-13 | サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007187908A true JP2007187908A (ja) | 2007-07-26 |
Family
ID=38343117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006006307A Withdrawn JP2007187908A (ja) | 2006-01-13 | 2006-01-13 | サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007187908A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009118795A1 (ja) * | 2008-03-28 | 2009-10-01 | 富士通株式会社 | サイドチャネル攻撃に対する耐タンパ性を有する暗号処理方法 |
JP2009267839A (ja) * | 2008-04-25 | 2009-11-12 | Ntt Data Corp | 暗号処理装置、暗号処理方法及びコンピュータプログラム |
JP2010072644A (ja) * | 2008-09-22 | 2010-04-02 | Thomson Licensing | 正の整数の正則なリコーディングの方法、装置及びコンピュータプログラム |
WO2012090288A1 (ja) * | 2010-12-27 | 2012-07-05 | 富士通株式会社 | 暗号処理装置、暗号処理方法、およびプログラム |
WO2019220531A1 (ja) * | 2018-05-15 | 2019-11-21 | 三菱電機株式会社 | 秘匿検索装置および秘匿検索方法 |
-
2006
- 2006-01-13 JP JP2006006307A patent/JP2007187908A/ja not_active Withdrawn
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8638927B2 (en) | 2008-03-28 | 2014-01-28 | Fujitsu Limited | Cryptographic processing method, computer readable storage medium, and cryptographic processing device |
WO2009118795A1 (ja) * | 2008-03-28 | 2009-10-01 | 富士通株式会社 | サイドチャネル攻撃に対する耐タンパ性を有する暗号処理方法 |
JP5182364B2 (ja) * | 2008-03-28 | 2013-04-17 | 富士通株式会社 | サイドチャネル攻撃に対する耐タンパ性を有する暗号処理方法 |
JP2009267839A (ja) * | 2008-04-25 | 2009-11-12 | Ntt Data Corp | 暗号処理装置、暗号処理方法及びコンピュータプログラム |
JP2010072644A (ja) * | 2008-09-22 | 2010-04-02 | Thomson Licensing | 正の整数の正則なリコーディングの方法、装置及びコンピュータプログラム |
JP5488718B2 (ja) * | 2010-12-27 | 2014-05-14 | 富士通株式会社 | 暗号処理装置、暗号処理方法、およびプログラム |
WO2012090288A1 (ja) * | 2010-12-27 | 2012-07-05 | 富士通株式会社 | 暗号処理装置、暗号処理方法、およびプログラム |
US9401805B2 (en) | 2010-12-27 | 2016-07-26 | Fujitsu Limited | Encrypting device, encrypting method, and recording medium |
US9749135B2 (en) | 2010-12-27 | 2017-08-29 | Fujitsu Limited | Encrypting device, encrypting method, and recording medium |
WO2019220531A1 (ja) * | 2018-05-15 | 2019-11-21 | 三菱電機株式会社 | 秘匿検索装置および秘匿検索方法 |
CN112074889A (zh) * | 2018-05-15 | 2020-12-11 | 三菱电机株式会社 | 隐匿检索装置和隐匿检索方法 |
US11431496B2 (en) | 2018-05-15 | 2022-08-30 | Mitsubishi Electric Corporation | Secret search device and secret search method |
CN112074889B (zh) * | 2018-05-15 | 2023-07-04 | 三菱电机株式会社 | 隐匿检索装置和隐匿检索方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Smart et al. | Fully homomorphic SIMD operations | |
KR101255393B1 (ko) | 타원 곡선 점 곱셈 | |
JP4575283B2 (ja) | 暗号装置、復号装置、プログラム及び方法 | |
CN107040362A (zh) | 模乘设备和方法 | |
JP2008252299A (ja) | 暗号処理システム及び暗号処理方法 | |
JP2011164607A (ja) | シンボルシーケンスの編集距離のプライバシーを保護した計算の方法およびシステム | |
JP2001337599A (ja) | 楕円曲線暗号におけるスカラー倍計算方法及び装置、並びに記憶媒体 | |
US8548161B2 (en) | Crytographically transforming data text | |
JP2019515353A (ja) | 暗号化べき乗アルゴリズムへのセーフ−エラーフォールトインジェクション攻撃に対する対策 | |
JP2010166463A (ja) | 復号処理装置、復号処理プログラム、復号処理方法 | |
US6480606B1 (en) | Elliptic curve encryption method and system | |
Abdullah et al. | Security improvement in elliptic curve cryptography | |
Vidhya et al. | Hybrid key generation for RSA and ECC | |
JP2014002230A (ja) | 認証暗号化装置、認証復号装置、およびプログラム | |
JP2007187908A (ja) | サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 | |
US8014520B2 (en) | Exponentiation ladder for cryptography | |
US11288985B2 (en) | Encryption device, decryption device, encryption method, decryption method, encryption program product, and decryption program product | |
JP2007041461A (ja) | 楕円曲線暗号におけるスカラー倍計算方法およびスカラー倍計算装置 | |
JP4423900B2 (ja) | 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム | |
US20220150064A1 (en) | Encryption device, decryption device, encryption method, decryption method, and computer program products | |
JP5323196B2 (ja) | 演算装置、方法およびプログラム | |
JP4836208B2 (ja) | 暗号化/復号化プログラム、暗号化/復号化装置及び拡大体の乗算装置 | |
KR20140028233A (ko) | 중국인 나머지 정리에 기반한 준동형 암복호화 방법 및 이를 이용한 장치 | |
JP3591857B2 (ja) | 擬似乱数生成方法及び装置、通信方法及び装置 | |
JP4502817B2 (ja) | 楕円曲線スカラー倍計算方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080815 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20110117 |