IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特開-演算装置 図1
  • 特開-演算装置 図2
  • 特開-演算装置 図3
  • 特開-演算装置 図4
  • 特開-演算装置 図5
  • 特開-演算装置 図6
  • 特開-演算装置 図7
  • 特開-演算装置 図8
  • 特開-演算装置 図9
  • 特開-演算装置 図10
  • 特開-演算装置 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022146493
(43)【公開日】2022-10-05
(54)【発明の名称】演算装置
(51)【国際特許分類】
   G09C 1/00 20060101AFI20220928BHJP
【FI】
G09C1/00 650A
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2021047484
(22)【出願日】2021-03-22
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】松井 一
(57)【要約】
【課題】より高速にスカラー倍算処理をする。
【解決手段】演算装置のコントローラは、2以上2(1<w)未満の1つ以上の整数aと、特定点の座標値Pとを乗算したaPを算出し、mビットのビット列である乗算値kを最上位ビットから最下位ビットの順で最大wビットずつ読み出して、最大w+1ビットの符号付奇数dの列を生成し、先頭の符号付奇数dと、前記座標値Pとを乗算したdPを算出して変数に入力し、変数を2倍算した値を変数へ入力する倍算処理と、2番目以降の符号付奇数dと、座標値Pとを乗算したdPを算出し、当該dPと前記変数とを加算した結果を変数に入力する処理を所定回数ループ処理し、乗算値kの下位2ビットに基づいた値と座標値Pとを乗算した値を算出し、算出した値と、変数とを加算した値をkPとして出力する。
【選択図】図2
【特許請求の範囲】
【請求項1】
コントローラを備える演算装置であって、
前記コントローラは、
2以上2(wは、1<wを満たす整数)未満の1つ以上の整数aと、特定点の座標値Pとを乗算したaPを算出し、
m(mは整数)ビットのビット列である乗算値kを最上位ビットから最下位ビットの順で最大wビットずつ読み出して、最大w+1ビットの符号付奇数dの列を生成し、
先頭の符号付奇数dと、前記座標値Pとを乗算したdPを算出して変数に入力し、
前記変数を2倍算した値を前記変数へ入力する倍算処理と、2番目以降の符号付奇数dと、前記座標値Pとを乗算したdPを算出し、当該dPと前記変数とを加算した結果を前記変数に入力する処理を所定回数ループ処理し、
前記乗算値kの下位2ビットに基づいた値と前記座標値Pとを乗算した値を算出し、算出した値と、前記変数とを加算した値をkPとして出力する、演算装置。
【請求項2】
前記コントローラは、
前記整数aに関して、事前に、aPおよび2aPを算出しておき、
前記dPと前記変数とを加算する際、前記dPと前記変数とが同一の点を示す場合、加算結果として、2dPを選択する、請求項1に記載の演算装置。
【請求項3】
前記座標値Pは、斉次座標およびヤコビ座標の何れかで示される、請求項1に記載の演算装置。
【請求項4】
前記コントローラは、
前処理として、前記aPのZ座標について有限体上の逆元を計算し、当該Z座標が単位元となるように正規化処理を実行する、請求項3に記載の演算装置。
【請求項5】
前記コントローラは、
前記kPとして出力した座標値を用いて署名処理をする、請求項1に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、演算装置に関する。
【背景技術】
【0002】
従来、楕円曲線暗号の主演算として、スカラー倍算処理がある。スカラー倍算処理は、有理点とスカラー値との乗算をする。このスカラー倍算処理において、スカラー値の最上位ビットから最下位ビット方向に演算処理をする技術がある。このスカラー倍算処理は、デジタル署名に用いられることから、高速に処理することが望まれる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2005-316038号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、高速にスカラー倍算処理をする演算装置を提供することを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、演算装置のコントローラは、2以上2(1<w)未満の1つ以上の整数aと、特定点の座標値Pとを乗算したaPを算出し、mビットのビット列である乗算値kを最上位ビットから最下位ビットの順で最大wビットずつ読み出して、最大w+1ビットの符号付奇数dの列を生成し、先頭の符号付奇数dと、座標値Pとを乗算したdPを算出して変数に入力し、変数を2倍算した値を変数へ入力する倍算処理と、2番目以降の符号付奇数dと、座標値Pとを乗算したdPを算出し、当該dPと前記変数とを加算した結果を変数に入力する処理を所定回数ループ処理し、乗算値kの下位2ビットに基づいた値と座標値Pとを乗算した値を算出し、算出した値と、変数とを加算した値をkPとして出力する。
【図面の簡単な説明】
【0006】
図1図1は、実施形態にかかる演算装置が適用されたメモリシステムの構成の一例を示す図である。
図2図2は、実施形態にかかるメモリシステム1の機能構成の一例を示すブロック図である。
図3図3は、スカラー倍算の計算をする疑似コードである。
図4図4は、実施形態にかかる変換部による変換処理の疑似コードを示す図である。
図5図5は、実施形態にかかるスカラー倍算の疑似コードを示す図である。
図6図6は、図4および図5に示した疑似コードを組み合わせた疑似コードを示す図である。
図7図7は、第1実施形態に係る処理手順を示すフローチャートである。
図8図8は、実施形態にかかる署名生成処理手順を示すフローチャートである。
図9図9は、実施形態にかかる署名検証処理手順を示すフローチャートである。
図10図10は、加算処理の疑似コードの例を示す図である。
図11図11は、実施形態にかかる加算処理の疑似コードの例を示す図である。
【発明を実施するための形態】
【0007】
以下では、一例として、実施形態にかかる演算装置が適用されたメモリシステムについて説明する。なお、実施形態にかかる演算装置を適用できる装置はメモリシステムだけに限定されない。実施形態にかかる演算装置は、コンピュータプログラムが格納されるメモリと、当該コンピュータプログラムを実行するプロセッサと、を備えた任意の装置に適用され得る。以下に添付図面を参照して、実施形態にかかる演算装置が適用されたメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【0008】
(実施形態)
図1は、実施形態にかかる演算装置が適用されたメモリシステムの構成の一例を示す図である。このメモリシステム1は、例えば、SSD(Solid State Drive)である。以下では、不揮発性メモリとしてNAND型のフラッシュメモリ(以下、NANDメモリという)を用いる場合を例に挙げる。
【0009】
メモリシステム1は、ホスト2と接続可能に構成されている。例えばCPU(Central Processing Unit)、パーソナルコンピュータ、携帯用情報機器、サーバ、等がホスト2に該当する。メモリシステム1とホスト2との間の通信のインタフェース規格としては、任意のインタフェース規格が採用可能である。2以上のホスト2がメモリシステム1に同時に接続されてもよい。ホスト2とメモリシステム1とは、ネットワークを介して接続されてもよい。
【0010】
メモリシステム1は、ホスト2からのアクセスコマンドに応じてホスト2との間でデータの送受信を実行する。
【0011】
メモリシステム1は、NANDメモリ12とメモリコントローラ10を含む。メモリコントローラ10は、ホストインタフェース部11、NANDメモリ12、NANDコントローラ13、RAM(Random Access Memory)14、および制御部15を備える。
【0012】
制御部15は、例えば、1以上のプロセッサを含んで構成される。制御部15は、予めメモリシステム1内の所定の位置に格納されているファームウェアを実行することによって、メモリシステム1の制御を実行する。プログラムの格納位置は任意に設計される。例えば、ファームウェアは、予めNANDメモリ12に格納され、起動時にRAM14にロードされる。制御部15は、RAM14にロードされたファームウェアを実行する。メモリシステム1の制御は、複数の処理によって構成される。制御部15が実行する複数の処理のうちの一部または全部はハードウェア回路によって実現されてもよい。また、制御部15を、ハードウェア回路である制御回路(Control Circuit)によって構成してもよい。制御部15が実行する各処理については後述する。
【0013】
ホストインタフェース部11は、メモリシステム1がホスト2と通信を行うためのインタフェース装置である。例えばホストインタフェース部11は、制御部15の制御下で、ホスト2とRAM14との間のユーザデータの転送を実行する。
【0014】
NANDコントローラ13は、NANDメモリ12に対するアクセスのためのインタフェース装置である。NANDコントローラ13は、制御部15による制御下で、RAM14とNANDメモリ12との間のユーザデータまたは管理情報の転送を実行する。詳細を省略するが、NANDコントローラ13は、誤り訂正処理行うことができる。
【0015】
NANDメモリ12は、ストレージとして機能する不揮発性の記憶媒体である。NANDメモリ12は、1以上のチップによって構成される。
【0016】
RAM14は、データを一時的に記憶するための記憶媒体である。RAM14は、メモリコントローラ10に内蔵されてもよいし、メモリコントローラ10の外部に搭載されてもよい。RAM14としては、例えば、NANDメモリ12よりも高速な種類の記憶媒体が採用可能である。RAM14としては、例えば、揮発性または不揮発性の記憶媒体が採用可能である。RAM14としては、例えば、DRAM(Dynamic RAM)、SRAM(Static RAM)、FeRAM(Ferroelectric RAM)、MRAM(Magnetoresistive RAM)、PRAM(Phase change RAM)などが採用可能である。
【0017】
図2は、実施形態にかかるメモリシステム1の機能構成の一例を示すブロック図である。図2に示すように、メモリシステム1は、記憶部30と、署名処理部31と、スカラー倍算部32(コントローラとも称される)とを備える。
【0018】
記憶部30は、各種情報を記憶する。記憶部30は、例えば、秘密鍵、公開鍵、曲線係数、座標値、メッセージ、および署名情報を記憶する。記憶部30は、RAM14、NANDメモリ12により実現する。
【0019】
署名処理部31は、乱数値と、座標値とを用いた署名処理をする。署名処理部31は、制御部15により実現する。署名処理部31は、乱数を生成し、当該乱数値である乗算値kと、特定の楕円曲線に含まれる特定点の座標値Pとをスカラー倍算部32に入力する。スカラー倍算部32は、例えば、メモリコントローラ10に含まれる。プロセッサが所定のプログラムを実行することでスカラー倍算部32による処理が実現されてもよいし、スカラー倍算部32が実行する処理のうちの一部または全部がハードウェア回路によって実現されてもよい。当該乗算値kは、mビットのビット列で表される。スカラーの各ビットをMSBからLSBの順にk(m-1)、k(m-2)、…、k(1)、k(0)で表すことにする。また、k(m-1)=1である。署名処理部31は、スカラー倍算部32から座標値kPを取得する。署名処理部31は、当該座標値kPを用いて署名生成したり、署名検証したりする。
【0020】
なお、上記座標値Pは、斉次座標(プロジェクティブ座標)およびヤコビ座標の何れかで示されるものでもよい。
【0021】
スカラー倍算部32は、特定の楕円曲線に含まれる特定点の座標値Pを乗算値kでスカラー倍算して得られる座標値kPを算出する。スカラー倍算部32は、制御部15により実現する。スカラー倍算部32は、署名処理部31から座標値Pと、乗算値kとを取得し、これらの値を用いて座標値kPを算出する。
【0022】
ここで、図3を用いて、一般的なスカラー倍算の方法を説明する。図3は、スカラー倍算の計算をする疑似コードである。図3に示すように、上位ビットから変数Qを倍算したり、k(j)の値に基づいて変数Qに座標値Pを加算したりする。
【0023】
この演算は、楕円曲線の点の加算や二倍算を反復計算する必要があり演算コストが非常に大きいものとなっている。また、スカラーの各ビットが0であるか1であるかに応じて点の加算を行うかどうかが決まるため、愚直な実装では全体の処理時間からスカラーに含まれる1の個数を推測することが可能になってしまうが、署名付与などのユースケースでは、スカラーの値は秘密情報であるため、セキュリティの観点からスカラーの値によらず定数時間で演算を行うことが求められる。
【0024】
また、高速かつ定数時間の処理を実現するため、スカラーを各桁が符号付非ゼロ整数となるような表現に変換するスカラー変換を行ってからスカラー倍算を行う方式が考えられる。特に、複数のビットをまとめて処理すると、高速な処理が可能である。
【0025】
スカラー変換、および、スカラー倍算では、スカラーの各ビットを順に走査するが、走査順がMSB→LSBであるか、LSB→MSBであるかが、手法ごとに異なっている。このとき、スカラー変換とスカラー倍算の走査順が同じであれば、スカラー変換とスカラー倍算を一度に行うことが可能であるが、走査順が異なっている場合は、スカラー変換を行って計算結果をすべて記憶したうえで改めてスカラー倍算を行うという2パスの処理が必要となる。
【0026】
また、スカラー倍算は、斉次座標やヤコビ座標で計算されることが多い。このときは走査順を図3に示した擬似コードのようにMSB→LSBとした手法においてはPのZ座標を1に固定できることを利用して、走査順をLSB→MSBとした手法よりも高速化を実現しやすい。したがって、スカラー変換とスカラー倍算とがともにMSB→LSBの走査順となるような手法を組み合わせることが望ましい。
【0027】
そこで、スカラー変換とスカラー倍算をMSB→LSBの走査順で複数ビットずつ処理することで、高速な処理を実現する。具体的に、スカラー倍算部32は、座標値Pを2倍算することで高速処理を実現する。ここで、wは、1<w<mを満たす整数であり、lはl×w≧mを満たす整数である。
【0028】
図2に戻り、スカラー倍算部32は、取得部321、前処理部322、変換部323、補正部324、楕円曲線演算部325、およびスカラー倍算出力部326を有する。
【0029】
取得部321は、座標値Pと、乗算値kとを署名処理部31から取得する。前処理部322は、楕円曲線の点の加算や二倍算の処理をするための値を事前に算出する。例えば、前処理部322は、2以上2未満の整数aと、特定点の座標値Pとを乗算したaPを算出する。
【0030】
変換部323は、乗算値kを最上位ビットから最下位ビットの順で最大wビット読み出して、最大w+1ビットの符号付奇数dを生成する。例えば、変換部323は、乗算値kをMSBから順にwビットずつ読み出して、非ゼロ整数の列d(l-1)、d(l-2)、…、d(1)、d(0)に変換する。
【0031】
補正部324は、乗算値kの下位2ビットに基づいた値eを算出する。また、補正部324は、当該値を用いた楕円曲線の点の演算処理をさせる。
【0032】
ここで、d(l-1)、d(l-2)、…、d(1)、d(0)、eを算出する疑似コードの例を図4に示す。図4は、実施形態にかかる変換部323による変換処理の疑似コードを示す図である。
【0033】
ただし、i≧mについてk(i)=0と定義する。l-1≧j≧0の各jについて、変換部323が、d(j)を計算する際、kから読み出すビットは最大wビットである。また、変換部323は、kの各ビットを最大1回しか読み出さない。変換部323がeを計算する際、kの下位2ビットを参照するが、d(0)を計算する際に読み出したk(1)の値を保持しておいて、eを計算する際は新たにk(0)のみを読み出すようにしてもよい。
【0034】
変換部323は、d(j)を計算する際、k(i)は0、1のいずれかの値をとるため、(1―k(i))はビット反転により計算可能である。すなわち、変換部323は、d(j)をkから最大wビット読み出していくつかのビットを反転するだけの簡単な計算によって求めることが可能である。
【0035】
楕円曲線演算部325は、楕円曲線の点の演算処理をする。例えば、楕円曲線演算部325は、変数を2倍算した値を変数へ入力する倍算処理をする。また、楕円曲線演算部325は、最上位から2ビット目以降の符号付奇数dと、座標値Pとを乗算したdPを算出し、当該dPと変数とを加算した結果を変数に入力する加算処理をする。スカラー倍算出力部326は、楕円曲線演算部325等が算出したkPを出力する。
【0036】
ここで、図5を用いて、スカラー倍算の計算例を説明する。図5は、実施形態にかかるスカラー倍算の疑似コードを示す図である。前提として、変換部323がd(j)を算出し、補正部324がeを算出しているものとする。
【0037】
前処理部322は、2Pを前計算し、さらに3以上2未満の各奇数aについてaPを前計算する。楕円曲線演算部325は、d(l-1)Pを算出し、算出した結果を変数Qに入力する。また、楕円曲線演算部325は、jが0以上である間、変数Qを2倍算し、変数Qとd(j)Pとを加算する。最後に、楕円曲線演算部325は、変数QとePとを加算して、処理を終了する。
【0038】
l-1≧j≧0の各jについてd(j)の絶対値は2未満の奇数となり、eは-3、-2、1、2のうちいずれかの値となるため、楕円曲線演算部325は、d(j)P、ePについては、Pと前計算した点とから選択すればよい。なお、楕円曲線上の演算の性質から、aPが前計算されている場合、Q+aPとQ+(-a)P=Q-aPは同一の処理時間で計算可能であるため、負の数のスカラー倍算を前計算しておく必要はない。すなわち、2および3≦a<2を満たす奇数に対するスカラー倍算を求めて、計2w-1個の点を前計算して保持しておく。
【0039】
Σm-1≧j≧0 k(j)×2=Σl-1≧j≧0 d(j)×2jw+eが成り立つことから、図3で示した疑似コードにより、kPを算出した場合と、図4および図5に示した疑似コードを組み合わせてkPを算出した場合とで計算結果が等しくなることが分かる。
【0040】
各奇数aに対するaPの計算は、P+2Pにより3Pを求め、3P+2Pにより5Pを求め、・・・、(2i-1)P+2Pにより(2i+1)Pを求め、というように、順次計算していってもよい。
【0041】
図2に示した疑似コードでkPを算出した場合、二倍算はm-2回、加算は最大m-2回であるのに対し、図4および図5に示した疑似コードを組み合わせた場合、二倍算は1+(l-2)w回、加算は2w-1-1+l-1回である。
【0042】
例えば、よく使用されるm=256に対して図2に示した疑似コードでkPを算出した場合、二倍算は254回、加算は最大254回である一方、w=2として、図4および図5に示した疑似コードを組み合わせてkPを算出した場合、二倍算は253回、加算は128回である。
【0043】
図4および図5に示した疑似コードを組み合わせて、図6に示す疑似コードのように計算してもよい。なお、図6に示した疑似コードに基づいたフローチャート(図7)については後述する。図4および図5に示した疑似コードを連続して実行する場合は、1個のdとeの値をメモリ領域に保持しておく必要があるが、図6に示した疑似コードを用いた場合はd、eの値をすぐ使用するため、そのようなメモリ領域は不要となる。
【0044】
続いて、図7を用いて、第1実施形態に係る処理フローを説明する。図7は、第1実施形態に係る処理手順を示すフローチャートである。また、図7に示すフローチャートは、図6に示した疑似コードに基づいたフローチャートである。
【0045】
まず、変換部323は、符号付奇数dを算出する際に必要となるlを、mおよびwに基づいて算出する(ステップS1)。続いて、前処理部322は、2Pおよび3以上2未満の各奇数aについてaPを計算する(ステップS2)。続いて、変換部323は、上位2ビットについて符号付奇数dを算出し、楕円曲線演算部325は、dPを算出し、当該dPを変数Qへ入力する(ステップS3)。
【0046】
そして、l-2をjに入力し(ステップS4)、楕円曲線演算部325は、変数Qの値を2倍算する(ステップS5)。jが0を上回る場合(ステップS6:Yes)、変換部323は、符号付奇数dを算出し、楕円曲線演算部325は、dPを算出し、当該dPと変数Qとを加算した値を変数Qへ入力する(ステップS7)。続いて、jをデクリメントし(ステップS8)、ステップS5へ進む。
【0047】
ステップS6で、jが0以下となった場合(ステップS6:No)、変換部323は、符号付奇数dを算出し、楕円曲線演算部325は、dPを算出し、当該dPと変数Qとを加算した値を変数Qへ入力する(ステップS10)。そして、補正部324は、eを算出し、楕円曲線演算部325は、ePを算出し、当該ePと変数Qとを加算した値を変数Qへ入力し、当該変数Qに入力されている値をkPとして出力する。(ステップS11)。
【0048】
(署名生成処理の説明)
続いて、図8を用いて、署名生成処理の手順を説明する。図8は、実施形態にかかる署名生成処理手順を示すフローチャートである。
【0049】
まず、署名処理部31は、記憶部30からメッセージを読み出す(ステップS21)。当該メッセージとは、署名処理対象をいい、例えば、制御部15が実行するファームウェアなどのコンピュータプログラムコードやメモリコントローラ10のシステム情報である。ここで、システム情報は、ベンダ名、モデル名、製造番号のいずれか、もしくは、すべてを含んでいてもよい。
【0050】
続いて、署名処理部31は、ハッシュ関数を用いて、メッセージのハッシュ値であるメッセージダイジェストを生成する(ステップS22)。当該ハッシュ関数とは、メッセージを入力とし、これを所定のビット長のデータに圧縮し、ハッシュ値として出力する関数である。
【0051】
続いて、署名処理部31は、秘密鍵、楕円曲線の係数、および楕円曲線上の特定点となる座標値Pを記憶部30から読み出す(ステップS23)。続いて、署名処理部31は、乱数である乗算値kを生成し、当該乗算値kと座標値Pとをスカラー倍算部32へ入力する。そして、署名処理部31は、スカラー倍算部32から座標値kPを取得して、ハッシュ値、秘密鍵、乗算値kおよび座標値kPを用いた公知技術を適用して署名データを生成する(ステップS24)。なお、署名処理部31は、座標値Pの位数や係数をさらに用いて署名データを生成するようにしてもよい。続いて、署名処理部31は、当該署名データを記憶部30に出力する。上述の署名処理は、定数時間の処理であるため、秘密鍵の値によらず処理時間は一定となる。
【0052】
(署名検証の説明)
続いて、図9を用いて署名検証の手順を説明する。図9は、実施形態にかかる署名検証処理手順を示すフローチャートである。
【0053】
まず、署名処理部31は、記憶部30からメッセージを読み出す(ステップS31)。
【0054】
続いて、署名処理部31は、ハッシュ関数を用いて、メッセージのハッシュ値であるメッセージダイジェストを生成する(ステップS32)。
【0055】
続いて、署名処理部31は、署名データ、公開鍵、楕円曲線の係数、および楕円曲線上の特定点となる座標値Pを記憶部30から読み出す(ステップS33)。
【0056】
続いて、署名処理部31は、署名検証をする。具体的に、署名処理部31は、署名データおよびハッシュ値に基づいて算出した値である乗算値kと、座標値Pとをスカラー倍算部32へ入力し、スカラー倍算部32により出力された座標値kPに基づいて、公知技術を適用して署名検証する(ステップS34)。署名処理部31は、署名が一致したか否かを示す署名検証結果を出力する(ステップS35)。
【0057】
上述の署名検証の処理では、スカラー倍算部32による処理を高速に処理するため、起動時の署名検証を高速に処理可能することができ、起動時間の短縮に寄与することができる。また、署名検証においてスカラーは秘密情報でないため、定数時間処理をそのまま用いてもよいし、整数列が0を含むことを許容するようにスカラー変換の処理を変形してさらなる高速化を図ってもよい。
【0058】
上述の実施形態では、メモリシステム1のスカラー倍算部32は、2以上2未満の整数aと、特定点の座標値Pとを乗算したaPを算出し、mビットのビット列である乗算値kを最上位ビットから最下位ビットの順で最大wビット読み出して、最大w+1ビットの符号付奇数dを生成し、当該符号付奇数dと、座標値Pとを乗算したdPを算出して変数Qに入力し、変数Qを2倍算した値を変数Qへ入力する倍算処理と、最上位から2ビット目以降の符号付奇数dと、座標値Pとを乗算したdPを算出し、当該dPと変数Qとを加算した結果を変数Qに入力する処理を所定回数ループ処理し、乗算値kの下位2ビットに基づいた値と座標値Pとを乗算した値を算出し、算出した値と、変数Qとを加算した値をkPとして出力する。
【0059】
この場合、スカラー倍算部32は、スカラー変換とスカラー倍算をMSB→LSBの走査順で複数ビットずつ処理する。このように、スカラー倍算部32は、複数ビットずつ処理することで、高速な処理が可能である。また、スカラー倍算部32は、走査順が同じであるため、変換後のスカラーの値を保持するメモリ領域が不要となって小メモリで計算が可能である。
【0060】
(第2実施例)
第1実施例におけるQ+dPあるいは、Q+ePの計算を一般化してQ+cPと表す。Qが無限遠点Oとなる可能性がある場合、および、QとcPとが等しくなる可能性がある場合は特別な扱いが必要となる。ここで、図10に、加算処理の疑似コードの例を示す。図10に示す疑似コードは、この両方の可能性がある場合のQ=Q+cPの計算例である。EC_ADDは楕円曲線の点加算を表しており、同一点の加算は行うことができないものである。
【0061】
Q=Q+cPの計算を図10に示した疑似コードで行うと、どの条件式が成り立つかによって実行時間が変わってしまう可能性がある。そのような場合は、図11に示す疑似コードを用いてもよい。図11は、実施形態にかかる加算処理の疑似コードの例を示す図である。R=Q+cPである。Q_eq_O,Q_eq_cPはQ==OおよびQ==cPの判定結果であり、EC_ADDの計算過程で得ることができる。
【0062】
このように、第2実施例にかかるスカラー倍算部32は、2cPの取りうる値はすべて前計算しておき、dPと変数Qとを加算する際、dPと変数Qとが同一の点を示す場合、加算結果として、2dPを選択することで、定数時間処理を実現できる。すなわち、第1実施例では、「2Pおよび、各奇数aに対するaP」を前計算していたが、本実施例ではさらに「各奇数aに対する2aP」も前計算しておく。
【0063】
また、その変形として、2aPを前計算するのではなく、2aPを計算するために必要となる中間値を前計算しておき、その中間値に基づいた2aPの計算はEC_ADDの計算の一部を使って行うようにしてもよい。中間変数として例えば、aPにおける楕円曲線の接線の傾きを前計算しておくことにしてもよい。
【0064】
(第3実施例)
第3実施例にかかるスカラー倍算部32は、いくつかのスカラー倍算を前計算する。スカラー倍算の計算で、斉次座標やヤコビ座標を用いる場合、各点はX、Y、Zの3つの値で構成されることになる。
【0065】
本実施例では、前処理部322が、前計算の際にZの値が単位元となるように正規化処理を行う。すなわち、斉次座標であれば(X,Y,Z)→(X・Z-1,Y・Z-1,1)の変換を行い、ヤコビ座標であれば(X,Y,Z)→(X・(Z-1,Y・(Z-1)3,1)の変換を行う。このために、前処理部322は、有限体上の逆元Z-1を計算するための逆元演算機能を具備する。
【0066】
また、モンゴメリ乗算を利用するために、各座標をモンゴメリ表現で保持してもよい。この場合、単位元は2nであって、正規化処理は、斉次座標であれば(X・2,Y・2,Z・2)→(X・Z-1・2,Y・Z-1・2,2)、ヤコビ座標であれば(X・2,Y・2,Z・2)→(X・(Z-・2,Y・(Z-1・2,2)となる。
【0067】
これによれば、スカラー倍算部32は、各点についてX,Y2つの値のみを保持しておけばよく、メモリ使用量を低減することができる。また、Q=Q+cPの計算において、cPのZ座標が単位元であることを仮定できるため、点加算を効率よく計算できるようになり、全体の処理速度を高速化することが可能となる。
【0068】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0069】
1 メモリシステム、2 ホスト、11 ホストインタフェース部、12 NANDメモリ、13 NANDコントローラ、14 RAM、15 制御部、30 記憶部、31 署名処理部、32 スカラー倍算部、321 取得部、322 前処理部、323 変換部、324 補正部、325 楕円曲線演算部、326 スカラー倍算出力部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11