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

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

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

<>
  • 特許-逆元演算装置及びメモリシステム 図1
  • 特許-逆元演算装置及びメモリシステム 図2
  • 特許-逆元演算装置及びメモリシステム 図3
  • 特許-逆元演算装置及びメモリシステム 図4
  • 特許-逆元演算装置及びメモリシステム 図5
  • 特許-逆元演算装置及びメモリシステム 図6
  • 特許-逆元演算装置及びメモリシステム 図7
  • 特許-逆元演算装置及びメモリシステム 図8
  • 特許-逆元演算装置及びメモリシステム 図9
  • 特許-逆元演算装置及びメモリシステム 図10
  • 特許-逆元演算装置及びメモリシステム 図11
  • 特許-逆元演算装置及びメモリシステム 図12
  • 特許-逆元演算装置及びメモリシステム 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-05
(45)【発行日】2024-01-16
(54)【発明の名称】逆元演算装置及びメモリシステム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240109BHJP
   G06F 17/10 20060101ALI20240109BHJP
【FI】
G09C1/00 650A
G06F17/10 Z
【請求項の数】 7
(21)【出願番号】P 2020153341
(22)【出願日】2020-09-11
(65)【公開番号】P2022047427
(43)【公開日】2022-03-24
【審査請求日】2023-03-10
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】松井 一
【審査官】金沢 史明
(56)【参考文献】
【文献】特開平11-282351(JP,A)
【文献】特表2007-520728(JP,A)
【文献】米国特許出願公開第2002/0095452(US,A1)
【文献】廣吉 慶,拡張2進GCD法+Lehmer法の改良,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2002年03月12日,Vol.101,No.728,pp.139-143
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/00- 9/40
G09C 1/00
G06F 7/72
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
互いに素な整数を示すX,Yに対してUX+VY=1を満たすU,Vを求める逆元演算処理に用いられるX,Yが入力され、X,Yの有効ビット長を示すm,nとm,nの合計に応じた回数閾値とを生成する初期設定部と、
X,Yが入力され、前記初期設定部で生成されたm,nが入力され、w,tを予め定められた整数とするとき、m,nに応じてX,Yの上位w+tビットr,sとX,Yの下位wビットa,bとを生成し、拡張バイナリGCD処理の近似計算のループとして、|r-s|の値が差分閾値以上である場合に、r,s,a,b,m,nの値が更新され更新行列Mが生成又は更新される第1のループを反復実行し、|r-s|の値が前記差分閾値より小さい場合に、前記第1のループに代えて、r,s,a,bの値及び更新行列Mが更新されずにm,nの値が更新される第2のループを反復実行可能であり、前記第1のループ及び前記第2のループの合計のループ回数がwに達した場合に前記拡張バイナリGCD処理のループを終了させるワード単位処理部と、
X,Yが入力され、前記ワード単位処理部で更新された更新行列Mが入力され、更新行列Mに基づいてX,Yの値を更新し、X,Yの正負に基づいてfを生成又は更新する第1の多倍長演算部と、
前記第1の多倍長演算部で更新されたX,Y,fと前記ワード単位処理部で更新された更新行列Mとが入力され、fに基づいて、X,Yの値が非負となるようにX,Y,Mを更新する補正部と、
前記補正部で更新された更新行列Mが入力され、更新行列Mに基づいてU,Vの値を更新する第2の多倍長演算部と、
前記初期設定部で生成された前記回数閾値が入力され、前記ワード単位処理部、前記第1の多倍長演算部、前記補正部、前記第2の多倍長演算部を順次動作させる前記逆元演算処理のループを反復実行し、前記逆元演算処理のループ回数が前記回数閾値に達した場合に、前記逆元演算処理のループを終了させる制御部と、
前記逆元演算処理のループが終了されたことに応じて、V=Y-1mod Xを剰余環Z/XZ上の逆元として出力する出力部と、
を備えた逆元演算装置。
【請求項2】
前記ワード単位処理部は、前記第1のループにおいて、a,bがともに奇数の場合に、r,sの大小関係を用いずにm,nの大小関係に基づいて、r,aを更新する
請求項1に記載の逆元演算装置。
【請求項3】
互いに素な整数を示すX,Yに対してUX+VY=1を満たすU,Vを求める逆元演算処理に用いられるX,Yが入力され、X,Yの有効ビット長を示すm,nとm,nの合計に応じた回数閾値とX,Yの正負を示すfとを生成する初期設定部と、
X,Yが入力され、前記初期設定部で生成されたm,n,fが入力され、w,tを予め定められた整数とするとき、m,nに応じてX,Yの上位w+tビットr,sとX,Yの下位wビットa,bとを生成し、fに基づいてr,s,a,bの値が非負となるようにr,s,a,b,Mを更新する補正処理を行い、拡張バイナリGCD処理の近似計算のループとして、|r-s|の上位ビットが0になる第1の閾値より|r-s|の値が大きい場合に、r,s,a,b,m,nの値が更新され更新行列Mが生成又は更新される第1のループを反復実行し、前記第1の閾値より|r-s|の値が小さい場合に、前記第1のループに代えて、r,s,a,bの値及び更新行列Mが更新されずにm,nの値が更新される第2のループを反復実行し、前記第1のループ及び前記第2のループの合計のループ回数がwに達した場合に前記拡張バイナリGCD処理のループを終了させるワード単位処理部と、
X,Yが入力され、前記ワード単位処理部で用いられたfと前記ワード単位処理部で更新された更新行列Mが入力され、更新行列Mに基づいてX,Yの値を更新し、X,Yの正負に基づいてfを更新する第1の多倍長演算部と、
前記ワード単位処理部で更新された更新行列Mが入力され、更新行列Mに基づいてU,Vの値を更新する第2の多倍長演算部と、
前記初期設定部で生成された前記回数閾値が入力され、前記ワード単位処理部、前記第1の多倍長演算部、前記第2の多倍長演算部を順次動作させる前記逆元演算処理のループを反復実行し、前記逆元演算処理のループ回数が前記回数閾値に達した場合に、前記逆元演算処理のループを終了させる制御部と、
前記逆元演算処理のループが終了されたことに応じて、V=Y-1mod Xを剰余環Z/XZ上の逆元として出力する出力部と、
を備えた逆元演算装置。
【請求項4】
前記ワード単位処理部は、fに基づいて、r,sのビット反転とa,bの符号反転とを行って、r,s,a,bを更新する
請求項3に記載の逆元演算装置。
【請求項5】
前記制御部は、前記ワード単位処理部と前記第2の多倍長演算部とを互いに並列に動作させる
請求項1から4のいずれか1項に記載の逆元演算装置。
【請求項6】
前記制御部は、前記第1の多倍長演算部の処理と前記第2の多倍長演算部の処理とを、共通の回路を時分割で利用して実行させる
請求項1から5のいずれか1項に記載の逆元演算装置。
【請求項7】
ファームウェアを格納するメモリと、
請求項1から6のいずれか1項に記載の逆元演算装置を含み、前記メモリから前記ファームウェアを読み出す際に、前記逆元演算装置による逆元の演算を含む署名検証処理を行うコントローラと、
を備えたメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、逆元演算装置及びメモリシステムに関する。
【背景技術】
【0002】
逆元演算装置を有するメモリシステムは、メモリからファームウェアを読み出す際に、逆元演算装置による逆元の演算を含む署名検証処理を行うことがある。このとき、逆元の演算を高速に行うことが望まれる。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2003-233309号公報
【非特許文献】
【0004】
【文献】Bernstein, D., & Yang, B.-Y. (2019). “Fast constant-time gcd computation and modular inversion”.
【発明の概要】
【発明が解決しようとする課題】
【0005】
一つの実施形態は、逆元の演算を高速に行うことができる逆元演算装置及びメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0006】
一つの実施形態によれば、初期設定部とワード単位処理部と第1の多倍長演算部と補正部と第2の多倍長演算部と制御部と出力部とを有する逆元演算装置が提供される。初期設定部は、X,Yが入力される。X,Yは、互いに素な整数を示す。X,Yは、逆元演算処理に用いられる。逆元演算処理は、X,Yに対してUX+VY=1を満たすU,Vを求める処理である。初期設定部は、m,nと回数閾値とを生成する。m,nは、X,Yの有効ビット長を示す。回数閾値は、m,nの合計に応じた閾値である。ワード単位処理部は、X,Yが入力される。ワード単位処理部は、初期設定部で生成されたm,nが入力される。ワード単位処理部は、w,tを予め定められた整数とするとき、m,nに応じてr,sとa,bとを生成する。r,sは、X,Yの上位w+tビットを示す。a,bは、X,Yの下位wビットを示す。ワード単位処理部は、拡張バイナリGCD処理の近似計算のループとして、|r-s|の値が差分閾値以上である場合に、第1のループを反復実行する。第1のループは、r,s,a,b,m,nの値が更新され更新行列Mが生成又は更新されるループである。ワード単位処理部は、|r-s|の値が差分閾値より小さい場合に、第1のループに代えて、第2のループを反復実行可能である。第2のループは、r,s,a,bの値及び更新行列Mが更新されずにm,nの値が更新されるループである。ワード単位処理部は、第1のループ及び第2のループの合計のループ回数がwに達した場合に拡張バイナリGCD処理のループを終了させる。第1の多倍長演算部は、X,Yが入力される。第1の多倍長演算部は、ワード単位処理部で更新された更新行列Mが入力される。第1の多倍長演算部は、更新行列Mに基づいてX,Yの値を更新する。第1の多倍長演算部は、X,Yの正負に基づいてfを生成又は更新する。補正部は、第1の多倍長演算部で更新されたX,Y,fとワード単位処理部で更新された更新行列Mとが入力される。補正部は、fに基づいて、X,Yの値が非負となるようにX,Y,Mを更新する。第2の多倍長演算部は、補正部で更新された更新行列Mが入力される。第2の多倍長演算部は、更新行列Mに基づいてU,Vの値を更新する。制御部は、初期設定部で生成された回数閾値が入力される。制御部は、逆元演算処理のループを反復実行する。逆元演算処理のループは、ワード単位処理部、第1の多倍長演算部、補正部、第2の多倍長演算部を順次動作させるループである。制御部は、逆元演算処理のループ回数が回数閾値に達した場合に、逆元演算処理のループを終了させる。出力部は、逆元演算処理のループが終了されたことに応じて、V=Y-1mod Xを剰余環Z/XZ上の逆元として出力する。
【図面の簡単な説明】
【0007】
図1図1は、第1の実施形態にかかる逆元演算装置を含むコントローラが適用されたメモリシステムの構成を示す図である。
図2図2は、第1の実施形態にかかる逆元演算装置の構成を示す図である。
図3図3は、第1の実施形態におけるワード単位処理部の構成を示す図である。
図4図4は、第1の実施形態における逆元演算処理の疑似コード(アルゴリズムA)を示す図である。
図5図5は、第1の実施形態における逆元演算処理を示すフローチャートである。
図6図6は、第1の実施形態におけるワード単位処理を示すフローチャートである。
図7図7は、第2の実施形態における逆元演算処理の疑似コード(アルゴリズムB)を示す図である。
図8図8は、第3の実施形態にかかる逆元演算装置の構成を示す図である。
図9図9は、第3の実施形態における逆元演算処理の疑似コード(アルゴリズムC)を示す図である。
図10図10は、第3の実施形態における逆元演算処理を示すフローチャートである。
図11図11は、第4の実施形態における逆元演算処理を示すシーケンス図である。
図12図12は、拡張バイナリGCD法に対応した逆元演算処理の疑似コード(アルゴリズムG)を示す図である。
図13図13は、証明用の中間変数が図4の疑似コードに追記された疑似コード(アルゴリズムA)を示す図である。
【発明を実施するための形態】
【0008】
以下に添付図面を参照して、実施形態にかかる逆元演算装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0009】
(第1の実施形態)
第1の実施形態にかかる逆元演算装置は、有限体上の逆元を演算する装置であり、SSD(Solid State Drive)等のメモリシステムにおけるファームウェアのデジタル署名に使用され得る。デジタル署名では、鍵生成アルゴリズム、署名生成アルゴリズム、署名検証アルゴリズムの3つが用いられる。鍵生成アルゴリズムは、公開鍵及び秘密鍵のペアを生成する。署名生成アルゴリズムは、ファームウェア及び秘密鍵を受けて、逆元の演算を含む署名生成処理を行って、署名を生成する。署名検証アルゴリズムは、ファームウェア、公開鍵、署名を受けて、逆元の演算を含む署名検証処理を行って、署名を検証する。
【0010】
例えば、逆元演算装置1を含むコントローラ100が適用されたメモリシステム300は、図1に示すように構成される。図1は、逆元演算装置1を含むコントローラ100が適用されたメモリシステム300の構成を示す図である。メモリシステム300は、コントローラ100及び半導体メモリ200を有する。コントローラ100は、主制御回路101、署名付与回路102、署名検証回路103及びバッファメモリ104を有する。署名検証回路103は、逆元演算装置1を含む。逆元演算装置1は、逆元演算回路として構成され得る。半導体メモリ200は、不揮発性の半導体メモリ(例えば、NAND型フラッシュメモリ)であり、ストレージ領域201及び管理情報格納領域202を有する。ストレージ領域201には、ユーザデータが格納され得る。管理情報格納領域202には、ファームウェア(FW)501及び署名502が格納されている。署名502は、デジタル署名である。署名502は、署名付与回路102で生成されたものであってもよいし、メモリシステム300の外部で生成されたものであってもよい。
【0011】
メモリシステム300において、コントローラ100は、ファームウェア501を起動する際に、ファームウェア501及び署名502をバッファメモリ104に一時的に格納し、署名検証回路103でファームウェア501の署名検証処理を行う。署名検証処理では、ファームウェア501のハッシュ値が求められるとともに、署名502から公開鍵に基づく値が抽出され、ファームウェア501のハッシュ値と抽出された値とを用いて所定の条件が満たされるか否かが判断される。
【0012】
例えば、署名検証回路103は、ECDSA(Elliptic Curve Digital Signature Algorithm)方式に従った署名検証処理を行ってもよい。署名502は、第1の部分及び第2の部分を有する。署名検証回路103は、ファームウェア501のハッシュ値を求める。署名検証回路103は、逆元演算装置1により署名502の第1の部分の逆元を求める。署名検証回路103は、ハッシュ値と署名502の第1の部分の逆元とを用いて、所定のパラメータを求める。署名検証回路103は、公開鍵と第1の部分の逆元と第2の部分と所定のパラメータとを用いて、楕円曲線上の点の座標値を求める。署名検証回路103は、所定の条件として、署名502の第2の部分と楕円曲線上の点の座標値とが一致することが満たされるか否かを判断する。
【0013】
署名検証回路103は、所定の条件が満たされれば、不正な改ざんが無いとして、承認の結果を出力する。これに応じて、コントローラ100は、ファームウェア501を起動し、例えばバッファメモリ104内にファームウェア501の機能モジュールを展開させる。署名検証回路103は、所定の条件が満たされなければ、不正な改ざんの可能性があるとして、拒否の結果を出力する。これに応じて、コントローラ100は、ファームウェア501を起動しない。この結果、メモリシステム300では、起動時にファームウェア501の不正な改ざんを検出・防止することができる。
【0014】
メモリシステム300において、ファームウェア501の起動を高速化するためには、起動の際に行われる署名検証処理を高速化することが求められる。署名検証処理を高速化するためには、署名検証処理における逆元の演算を高速化することが求められる。署名検証回路103は、ECDSAなどの方式に従ったデジタル署名の検証を行う際に、逆元演算装置1で有限体上の逆元を演算する。逆元の演算は、多倍長精度で反復処理を行う必要があり、演算コストが非常に大きいものとなってくる。ここで、ワード単位処理部はシフト演算器を持ち、多倍長演算部は乗算器を持つ。シフト演算器及び乗算器は同程度のビット長を有し、そのビット長を1ワード長(例えば、64ビット)とする。この場合、多倍長精度とは、乗算器を複数回使って演算される複数ワードの合計ビット長に相当する精度を意味する。
【0015】
逆元を演算する手法としては、拡張バイナリGCD法に基づく第1の手法が考えられる。第1の手法は、互いに素な2つの整数を入力変数として、大小比較、LSBの偶奇判定、シフト演算、減算が反復されるアルゴリズムである。第1の手法では、大小比較、シフト演算、減算に関しては、多倍長整数のビット長が長くなるにつれ処理時間が長くなってしまい、計算コストが高い。逆元の演算を高速化するためには、多倍長演算の回数をできるだけ減らすように工夫して計算することなど、計算コストの低減が要求される。
【0016】
それに対して、改良バイナリGCD法に基づく第2の手法が考えられる。改良バイナリGCD法は、拡張バイナリGCD法を改良した方法であり、多倍長整数の上位ワードを用いて拡張バイナリGCD法の近似計算を行う方法である。第2の手法では、改良バイナリGCD法に従い、多倍長整数に代えて1ワード長の整数で拡張バイナリGCD法の近似計算を行うので、多倍長演算の回数を減らすことができ、高速に逆元を演算できるようにも考えられる。
【0017】
しかし、第2の手法は、近似誤差が増える可能性がある。例えば、第2の手法では、近似計算において、互いに素な2つの多倍長整数を示す入力変数に対して、その上位ワードを近似変数とする。第2の手法では、近似変数に対して、大小比較、LSBの偶奇判定、シフト演算、減算が反復される。第2の手法では、大小比較の判定を間違える(すなわち、近似変数の大小比較の結果が入力変数の大小比較の結果と異なってしまう)ことがある。第2の手法では、大小比較の判定を間違えても、そのまま、近似変数に対する大小比較、LSBの偶奇判定、シフト演算、減算が反復されるため、近似誤差が増大していく可能性がある。
【0018】
第2の手法は、2つの入力変数の一方の値が0になることがその終了条件となることから、近似誤差が増えると、処理の反復回数が顕著に増加する可能性がある。そのため、第2の手法では、ワーストケースの反復回数を保証することが困難であり、演算を定数時間で行うように構成することが困難である。これにより、第2の手法の逆元の演算をメモリシステムに適用した場合、ファームウェアの起動時間を保証することが困難になり、場合によっては、ファームウェアの起動時間が長時間化する可能性がある。
【0019】
そこで、本実施形態では、逆元演算装置1は、2つの入力変数の有効ビット長の合計に応じた回数閾値を生成し、近似計算で近似変数及び有効ビット長を逐次更新しながら大小判定を間違えそうなときに近似変数の更新を停止しつつ有効ビット長の更新を継続する逆元演算処理のループを反復実行し、ループ回数が回数閾値に達したことに応じてループを終了させる。これにより、逆元演算処理について、近似誤差の増大の抑制と処理の定数回数化とが可能となる。
【0020】
具体的には、逆元演算装置1は、互いに素な整数を示すX,Yが入力され、X,Yに対して
UX+VY=1・・・数式1
を満たすU,Vを求める逆元演算処理を行い、
V=Y-1mod X・・・数式2
を剰余環Z/XZ上の逆元として出力する。逆元演算装置1は、ハードウェア構成として、図示しないが、1以上の比較器、1以上のシフト演算器、1以上の減算器を有する。比較器は、複数の変数の大小比較に用いられたり、変数の偶奇判定(LSBの偶奇判定)に用いられたりする。シフト演算器は、変数を2倍するのに用いられたり、変数を2で割るのに用いられたりする。減算器は、複数の変数の減算に用いられたり、変数の符号反転に用いられたりする。
【0021】
なお、本明細書において、1ワード長とは、演算器の処理単位のビット長を意味し、例えば、64ビットである。多倍長とは、複数のワードの合計ビット長を意味する。
【0022】
また、逆元演算装置1は、機能的に、図2に示すように構成され得る。図2は、逆元演算装置1の機能構成を示す図である。以下では、図2に示す各機能構成が逆元演算装置1内にハードウェアにより実装される場合を例示するが、図2に示す各機能構成は、ソフトウェアにより実装されてもよい。あるいは、図2に示す一部の機能構成がハードウェアにより実装され、図2に示す残りの機能構成がソフトウェアにより実装されてもよい。
【0023】
逆元演算装置1は、制御部2、入力部3、初期設定部4、ワード単位処理部5、第1の多倍長演算部6、補正部7、第2の多倍長演算部8、及び出力部9を有する。
【0024】
入力部3は、X,Yを外部から入力変数として受ける。X,Yは、互いに素な整数を示す入力変数であり、それぞれ、整数を示すビットパターンを有する。X,Yは、それぞれ、多倍長のビット長を有する。X,Yは、例えば、256ビット又は384ビットのビット長を有する。入力部3は、X,Yを初期設定部4及び第1の多倍長演算部6へそれぞれ供給する。
【0025】
初期設定部4は、入力部3からX,Yが入力される。初期設定部4は、X,Yに対して数式1を満たすU,Vを求めるためのU,Vの初期値を設定する。初期設定部4は、例えばVを剰余環Z/XZ上の逆元として求める場合(数式1,2参照)、U=0、V=1を初期値として設定する。初期設定部4は、それぞれが初期値を有するU,Vを第2の多倍長演算部8へ供給する。
【0026】
初期設定部4は、Xの有効ビット長を示すmを生成し、Xの有効ビット長の値をmの初期値とする。初期設定部4は、XにおけるMSBから連続する0の数を数えて、Xの有効ビット長の値を求めてもよい。初期設定部4は、Yの有効ビット長を示すnを生成し、Yの有効ビット長の値をnの初期値とする。初期設定部4は、YにおけるMSBから連続する0の数を数えて、Yの有効ビット長の値を求めてもよい。なお、m,nは、厳密な有効ビット長であってもよいし、有効ビット長以上の整数であってもよい。m,nが有効ビット長以上の整数である場合、Xのビット長をmの初期値としてもよく、Yのビット長をnの初期値としてもよい。初期設定部4は、初期値を有するX,Y,m,nをワード単位処理部5へ供給する。
【0027】
初期設定部4は、入力変数の有効ビット長を管理するパラメータとして、m,nの合計に応じた回数閾値dを生成する。初期設定部4は、次の数式1で示す回数閾値dを生成し得る。
【数1】
【0028】
数式1に示すように、dは、(m+n-1)/wの小数部分を切り上げて得られる整数である。wは、予め定められた整数であり、1ワード長のビット長であってもよい。初期設定部4は、m,nの合計から1を減算した値をwで除算した商の整数部分を回数閾値dとして求める。初期設定部4は、回数閾値dを制御部2へ供給する。
【0029】
制御部2は、回数閾値dが初期設定部4から入力される。制御部2は、ワード単位処理部5、第1の多倍長演算部6、補正部7、第2の多倍長演算部8を制御して、逆元演算処理のループを反復実行させる。逆元演算処理のループは、制御部2の制御に応じて、ワード単位処理部5、第1の多倍長演算部6、補正部7、第2の多倍長演算部8が順次動作されるループである。また、制御部2は、逆元演算処理のループ回数を管理する。制御部2は、逆元演算処理のループ回数と回数閾値dとを比較する。制御部2は、逆元演算処理のループ回数が回数閾値以下である場合に、逆元演算処理のループを反復実行させる。
【0030】
ワード単位処理部5は、逆元演算処理の初回のループにおいて、初期値を有するX,Y,m,nが初期設定部4から入力される。ワード単位処理部5は、逆元演算処理の2回目以降のループにおいて、更新後のX,Yが補正部7から入力される。ワード単位処理部5は、拡張バイナリGCD処理の近似計算のループとして、第1のループ又は第2のループを反復実行する。
【0031】
例えば、ワード単位処理部5は、図3に示すように構成され得る。図3は、ワード単位処理部5の構成を示す図である。ワード単位処理部5は、初期設定部54、第1のループ実行部51、第2のループ実行部52、及び回数管理部53を有する。
【0032】
初期設定部54は、X,Y,m,nを受ける。初期設定部54は、m,nに応じてX,Yの有効ビットの最上位ビット位置を特定する。それに応じて、初期設定部54は、Xの近似変数として、Xの上位w+tビットを示すrを生成し、下位wビットを示すaを生成する。tは、予め定められた整数であり、
【数2】
であってもよい。例えば、w=64であり、w+t=71である。初期設定部54は、Xの上位w+tビットの値をrの初期値とし、下位wビットの値をaの初期値とする。初期設定部54は、Yの近似変数として、Yの上位w+tビットを示すsを生成し、下位wビットを示すbを生成する。初期設定部54は、Yの上位w+tビットの値をsの初期値とし、下位wビットの値をbの初期値とする。
【0033】
このとき、初期設定部54は、X,Yの近似変数としてX,Yの上位ビットを取る際に、1ワード長のビット長より若干長いw+tビットを取って近似変数r,sとしている。これにより、ワード単位処理部5で近似変数r,sを用いた拡張バイナリGCD処理の近似計算を行う際における近似誤差の発生を抑制できる。
【0034】
初期設定部54は、初期値を有するr,s,a,b,m,nを第1のループ実行部51へ供給する。
【0035】
第1のループ実行部51は、|r-s|の値が差分閾値以上である場合に、第1のループを反復実行する。差分閾値は、|r-s|の上位ビットが0になるような閾値であり、r,sの値が互いに近いことを示す閾値である。差分閾値は、例えば、2である。第1のループ実行部51は、第1のループにおいて、a,bの偶奇判定又はr,sの大小判定を行い、その判定結果に応じて、r,s,a,b,m,nの値を更新し、更新行列Mを生成又は更新する。
【0036】
第1のループ実行部51は、比較判定部511、更新部512、及び中断部513を有する。
【0037】
比較判定部511は、|r-s|の値と差分閾値とを比較して、|r-s|の値が差分閾値以上であるか否かを判定する。比較判定部511は、|r-s|の値が差分閾値以上である場合、a,bのLSBを確認し、a,bの偶奇判定を行う。比較判定部511は、a,bのそれぞれについて、LSBが0であれば、偶数であると判定し、LSBが1であれば、奇数であると判定する。比較判定部511は、a,bがいずれも奇数である場合、r,sの大小を比較し、r,sの大小判定を行う。比較判定部511は、それらの判定結果を更新部512へ通知する。比較判定部511は、|r-s|の値が差分閾値より小さい場合、その判定結果を中断部513へ通知する。
【0038】
更新部512は、比較判定部511から判定結果を受けると、その判定結果に応じて、次の処理を行う。
【0039】
更新部512は、aが偶数である場合、a,rを2で除算し、mをディクリメントし、それに応じて、更新行列Mを更新する。すなわち、更新部512は、シフト演算器でa,rをそれぞれ1ビット右シフトし、減算器でmから1を減算する。更新部512は、a,rの除算に応じた更新行列Mを決め、現在の更新行列Mに新たに決めた更新行列Mを乗算器(シフト演算器)で乗算して、更新行列Mを更新する。
【0040】
更新部512は、bが偶数である場合、b,sを2で除算し、nをディクリメントするか0に置き換えられ、それに応じて、更新行列Mを更新する。すなわち、更新部512は、シフト演算器でb,sをそれぞれ1ビット右シフトし、減算器でnから1を減算する。更新部512は、b,sの除算に応じた更新行列Mを決め、現在の更新行列Mに新たに決めた更新行列Mを乗算器(シフト演算器)で乗算して、更新行列Mを更新する。
【0041】
更新部512は、a,bがいずれも奇数でr>sである場合、a,rを(a-b)/2,(r-s)/2に置き換え、mをディクリメントし、それに応じて、更新行列Mを更新する。すなわち、更新部512は、減算器でaからbを減算し、その減算結果をシフト演算器で1ビット右シフトし、減算器でmから1を減算する。更新部512は、aの(a-b)/2への置き換えに応じた更新行列Mを決め、現在の更新行列Mに新たに決めた更新行列Mを乗算器(シフト演算器)で乗算して、更新行列Mを更新する。
【0042】
更新部512は、a,bがいずれも奇数でr≦sである場合、b,sを(b-a)/2,(s-r)/2に置き換え、nをディクリメントし、それに応じて、更新行列Mを更新する。すなわち、更新部512は、減算器でbからaを減算し、その減算結果をシフト演算器で1ビット右シフトし、減算器でnから1を減算する。更新部512は、bの(b-a)/2への置き換えに応じた更新行列Mを決め、現在の更新行列Mに新たに決めた更新行列Mを乗算器(シフト演算器)で乗算して、更新行列Mを更新する。
【0043】
中断部513は、|r-s|の値が差分閾値より小さい旨の判定結果を受けると、その判定結果に応じて、第1のループを中断するように比較判定部511及び更新部512に要求する。比較判定部511は、要求に応じて、動作を停止する。更新部512は、要求に応じて、更新後のr,s,a,b,m,nの値を中断部513へ供給し、動作を停止する。中断部513は、r,s,a,b,m,nの値を第2のループ実行部52へ供給する。
【0044】
第2のループ実行部52は、|r-s|の値が差分閾値より小さい場合に、第1のループに代えて、第2のループを反復実行する。第2のループ実行部52は、第2のループにおいて、r,s,a,bの値を更新せずに、実質的に更新行列Mを更新せず、m,nの値を更新する。
【0045】
すなわち、ワード単位処理部5では、|r-s|の値が差分閾値より小さい場合、r,sの値が互いに近く、r,sの大小判定を間違える可能性があるとして、r,s,a,bの更新及び更新行列Mの更新が停止されつつm,nの値が更新される。これにより、間違った判定結果に応じてr,s,a,bが更新されることを抑制でき、近似誤差の増大を抑制できる。
【0046】
第2のループ実行部52は、比較判定部521、及び更新部522を有する。
【0047】
比較判定部521は、nの値と所定の閾値とを比較する。所定の閾値は、m,nのうち大きい方の値からwを引いた値である。比較判定部521は、nの値が所定の閾値より大きいか否かを判定し、その判定結果を更新部522へ通知する。
【0048】
更新部522は、nの値が所定の閾値より大きい場合、nをディクリメントし、更新行列Mを更新しない。すなわち、更新部522は、減算器でnから1を減算する。更新部512は、r,s,a,bの値を更新しないことに応じて更新行列Mを単位行列に決め、現在の更新行列Mに単位行列を乗算器(シフト演算器)で乗算して、更新行列Mを形式的に更新するが、実質的に更新行列Mを更新しない。
【0049】
更新部522は、nの値が所定の閾値以下である場合、mをディクリメントし、更新行列Mを更新しない。すなわち、更新部522は、減算器でmから1を減算する。更新部512は、r,s,a,bの値を更新しないことに応じて更新行列Mを単位行列に決め、現在の更新行列Mに単位行列を乗算器(シフト演算器)で乗算して、更新行列Mを形式的に更新するが、実質的に更新行列Mを更新しない。
【0050】
回数管理部53は、第1のループ及び第2のループの合計のループ回数を管理する。回数管理部53は、合計のループ回数がw回に達した場合に、拡張バイナリGCD処理のループを終了させる。
【0051】
第1のループ実行部51の更新部512は、r,s,a,b,m,nの値を更新するたびに、更新を行ったことを回数管理部53へ通知する。第2のループ実行部52の更新部522は、m,nの値を更新するたびに、更新を行ったことを回数管理部53へ通知する。回数管理部53は、ループ回数を管理するためのパラメータを保持し、更新部512又は更新部522から通知を受ける度に、パラメータの値をカウントアップする。
【0052】
回数管理部53は、パラメータの値に応じて、合計のループ回数がw回に達したと判断すると、次の動作を行う。
【0053】
更新部512が動作を停止し更新部522が動作中であれば、回数管理部53は、第2のループを終了するように更新部522に要求する。更新部512は、要求に応じて、実線の矢印で示すように、更新行列Mを第1の多倍長演算部6及び補正部7へ供給し、m,nを初期設定部54へ供給し、動作を停止する。
【0054】
更新部512が動作中であれば、回数管理部53は、第1のループを終了するように更新部512に要求する。更新部512は、要求に応じて、点線の矢印で示すように、更新行列Mを第1の多倍長演算部6及び補正部7へ供給し、m,nを初期設定部54へ供給し、動作を停止する。
【0055】
これにより、逆元演算処理の各ループにおいて、拡張バイナリGCD処理のループ回数が1ワード長に応じたw回行われ、m及びnの合計がw少なくなる。
【0056】
図2に示す第1の多倍長演算部6は、逆元演算処理の初回のループにおいて、入力部3からX,Yが入力される。逆元演算処理の2回目以降のループにおいて、補正部7からX,Yが入力される。第1の多倍長演算部6は、ワード単位処理部5から更新行列Mが入力される。第1の多倍長演算部6は、更新行列Mに基づいて、X,Yの値を更新する。すなわち、第1の多倍長演算部6は、更新行列MとX,Yを含むベクトルとを乗算器で乗算して、乗算結果を更新後のX,Yの値とする。第1の多倍長演算部6は、更新後のX,Yの正負に基づいてfを生成又は更新する。fは、X,Yの正負を示す変数であり、0の値で正を示し、1の値で負を示す。例えば、fを生成する際に、第1の多倍長演算部6は、fに初期値として0を設定する。第1の多倍長演算部6は、Yの値の正負を比較器で確認し、Yの値が正であれば、f=0に維持又は更新し、Yの値が負であれば、f=1に更新する。第1の多倍長演算部6は、更新後のX,Y,fを補正部7へ供給する。
【0057】
補正部7は、第1の多倍長演算部6から更新後のX,Y,fが入力され、ワード単位処理部5から更新行列Mが入力される。補正部7は、fに基づいて、X,Yの値が非負となるようにX,Y,Mを更新する。例えば、Xが正の値に維持される場合、補正部7は、Xを更新しない。補正部7は、fの値が0であれば、Yが正であるとして、Y及び更新行列Mを更新しない。補正部7は、fの値が0でなければ(すなわち、fの値が1であれば)、Yが負であるとして、Yの符号を反転させ、Yの符号を反転させる更新行列Mを決める。補正部7は、その更新行列Mを現在の更新行列Mに乗算器で乗算して、更新行列Mを更新する。補正部7は、更新後の更新行列Mを第2の多倍長演算部8へ供給する。
【0058】
第2の多倍長演算部8は、逆元演算処理の初回のループにおいて、初期値を有するU,Vが入力部3から入力される。第2の多倍長演算部8は、更新行列Mが補正部7から入力される。更新行列Mが入力されると、第2の多倍長演算部8は、更新行列Mに基づいてU,Vの値を更新する。すなわち、第1の多倍長演算部6は、更新行列MとU,Vを含むベクトルとを乗算器で乗算して、乗算結果を更新後のU,Vの値とする。
【0059】
制御部2は、第2の多倍長演算部8によるU,Vの更新が行われると、逆元演算処理のループ回数をインクリメントし、逆元演算処理のループ回数と回数閾値dとを比較する。制御部2は、逆元演算処理のループ回数が回数閾値d以下である場合に、再び、逆元演算処理のループを実行させる。制御部2は、逆元演算処理のループ回数が回数閾値dより大きい場合に、m,nの合計が1以下になったとして、逆元演算処理のループを終了させる。すなわち、制御部2は、ワード単位処理部5、第1の多倍長演算部6、補正部7、第2の多倍長演算部8のそれぞれに対して、動作を停止するように指示する。
【0060】
これに応じて、ワード単位処理部5、第1の多倍長演算部6、補正部7は、それぞれ、動作を停止する。第2の多倍長演算部8は、更新後のU,Vを出力部9へ供給し、動作を停止する。
【0061】
出力部9は、更新後のU,Vを第2の多倍長演算部8から受ける。更新後のU,Vを受けると、出力部9は、逆元演算処理のループが終了されたと判断する。出力部9は、逆元演算処理のループが終了されたことに応じて、V=Y-1mod Xを剰余環Z/XZ上の逆元として出力する。すなわち、m,nの合計が1以下になった状態では、近似的にX,Yの一方が0(この場合はX=0)になったと見なすことができ、更新後のU,Vが近似的に数式1を満たす。すなわち、数式1は
VY≡1mod X・・・数式3
と変形でき、VYがXを法として1に合同であるので、数式2が成り立ち、Vが剰余環Z/XZ上の逆元として求まったことになる。出力部9は、Vを外部(例えば、署名検証回路103)へ出力する。
【0062】
次に、逆元演算装置1の動作について図4を用いて説明する。図4は、逆元演算装置1の動作を示す疑似コードである。図4の疑似コードでは、図4(a)の記述の後に、図4(b)の記述が続く。
【0063】
図4の疑似コードは、互いに素な整数を示すX,Yに対して数式1を満たすU,Vを求める逆元演算処理を行うための手順を示している。記述11で逆元演算処理に対する初期設定が行われ、記述12で逆元演算処理のループ(loop_j)が実行され、記述13でloop_jで求められた逆元Vが出力される。
【0064】
記述12では、記述121で初期設定が行われ、記述122で拡張バイナリGCD処理の近似計算のループ(loop_i)が実行され、記述123でX,Yの更新が行われ、記述124でX,Yの補正が行われ、記述125でU,Vの更新が行われる。
【0065】
記述122では、e=0の間、記述1221で第1のループ(case_1)が実行される。|r-s|が差分閾値より小さくなり、r,sの大小比較がX,Yの大小比較と異なる可能性があると判定された場合、e=1となり、第2のループ(case_2)が実行される。
【0066】
具体的には、記述11において、逆元演算処理に対する初期設定が行われる。U=0、V=1を初期値として設定する。Xの有効ビット長を示すmを生成し、Yの有効ビット長を示すnを生成する。1ワード長を示すwを生成し、1ワード長に応じた追加のビット数を示すtを生成する。追加のビット数は、例えば、
【数3】
である。回数閾値として、m及びnの合計に応じた
【数4】
を生成する。
【0067】
記述12において、逆元演算処理のループ(loop_j)が実行される。逆元演算処理のループは、「for」文で記述され、jが初期値0からループの実行の度にインクリメントされていき、jがdを超えると終了する。
【0068】
すなわち、逆元演算処理のループは、終了条件が回数閾値dになっており、d回繰り返されたところで終了する。これにより、定数回数での処理を実現可能である。
【0069】
記述121では、拡張バイナリGCD処理の近似計算に対する初期設定が行われる。m,nの現在値がm,nとされ、m,nのうち大きい方がkとされる。kは、X,Yの有効ビットの最上位ビット位置を示す。k-(w+t)がhとされる。a=X[w-1:0]でXの下位wビットがaとされ、b=Y[w-1:0]でYの下位wビットがbとされる。r=X[k-1:h]でXの有効ビットにおける上位(w+t)ビットがrとされ、s=Y[k-1:h]でYの有効ビットにおける上位(w+t)ビットがsとされる。更新行列Mは、初期値として、単位行列が設定される。大小関係の判定を誤る可能性がある否かを示すパラメータeは、初期値として、0が設定される。
【0070】
記述122では、拡張バイナリGCD処理の近似計算のループ(loop_i)が実行される。近似計算のループは、「for」文で記述され、iが初期値0からループの実行の度にインクリメントされ、iがwを超えると終了する。
【0071】
すなわち、近似計算のループは、終了条件が回数閾値wになっており、w回繰り返されたところで終了する。これにより、定数回数での処理を実現可能である。
【0072】
記述1221では、第1のループ(case_1)の処理が行われる。case_1は、「if」文のe=0の条件部分として記述され、e=0の間、実行される。eの値(e)は、「k>w+tであること」と「a,bがいずれも奇数であること」と「|r-s|が差分閾値2より小さいこと」とがいずれも成り立つ場合に、r,sの大小判定を間違える可能性があるとして、1に設定される。それ以外の場合、eの値は、0に維持される。
【0073】
aが偶数である場合、case_Aの処理が行われる。a,rが2で除算され、mがディクリメントされ、それに応じて、更新行列Mが決められる。なお、case_Aでは、更新の際に、aとb、rとs、mとnが入れ替わっているが、実質的に、b,s,nは更新されていない。
【0074】
bが偶数である場合、case_Bの処理が行われる。b,sが2で除算され、nがディクリメントされた値と0とのうち大きい方の値に置き換えられ、それに応じて、更新行列Mが決められる。
【0075】
a,bがいずれも奇数でr>sである場合、case_Cの処理が行われる。a,rが(a-b)/2,(r-s)/2に置き換えられ、mがディクリメントされ、それに応じて、更新行列Mが決められる。なお、case_Cでは、更新の際に、aとb、rとs、mとnが入れ替わっているが、実質的に、b,s,nは更新されていない。
【0076】
a,bがいずれも奇数でr≦sである場合、case_Dの処理が行われる。b,sが(b-a)/2,(s-r)/2に置き換えられ、nがディクリメントされ、それに応じて、更新行列Mが決められる。
【0077】
記述1222では、第2のループ(case_2)の処理が行われる。case_2は、「if」文のe≠0の条件部分として記述され、e≠0になった際に、実行される。case_2では、r,s,a,bの値が更新されない。これに応じて、更新行列Mが単位行列に決められる。nの値と所定の閾値とが比較され、nの値が所定の閾値より大きい場合、nがディクリメントされる。nの値が所定の閾値以下である場合、mがディクリメントされる。
【0078】
記述1223では、現在の更新行列Mに、新たに決められた更新行列Mが乗算され、更新行列Mが更新される。また、現在のm,nの値(mi+1,ni+1)がm,nに設定される。
【0079】
記述123では、X,Yの更新とfの生成又は更新が行われる。更新後の更新行列Mに、現在のX,Yを要素として含むベクトルが乗算され、更新後のX,Yを要素として含むベクトルが生成される。また、Yの正負を示す変数fが、0を初期値として生成される。更新後のYの正負が確認され、Yが負である場合に、fの値が1に更新される。
【0080】
記述124では、Yが負になった場合に正にする補正処理が行われる。「if」文のf≠0の条件部分として記述され、f≠0の場合(すなわち、f=1の場合)に、Yが負であるとして、補正処理が行われる。補正処理では、Yが符号反転されて更新され、これに応じて、更新行列Mが更新される。
【0081】
記述125では、U,Vの更新が行われる。更新後の更新行列Mに、現在のU,Vを要素として含むベクトルが乗算され、更新後のU,Vを要素として含むベクトルが生成される。
【0082】
図4の処理では、e=0の間、第1のループ(case_1)が実行される。case_1におけるcase_A~case_Dの判定処理は改良バイナリGCD法に基づく第2の手法と同様である。ただし、有効ビット長m,nを管理している点、r,sの大小比較がX,Yの大小比較と異なる可能性があると判定された場合にe=1となって第2のループ(case_2)の処理を行う点において、異なっている。case_2においてはm,nの値が更新され、r,s,a,bの値は更新されない。すなわち、loop_iの反復で大小関係の判定を誤ってYの近似変数s,bの値が一時的に誤った値になることがあったとしても、その誤った値に基づいてそれ以降にX,Yの値が更新されるということはない。また、この誤った値は、正しい値に対して符号が反転しているだけなので、後から容易に補正可能である。
【0083】
図4の処理では、多倍長整数(入力変数)の上位1ワード(wビット)+tビットの近似変数を使って大小比較を行っているが、tはwに応じて決まる定数である。例えばtをlog(w+2)の小数部分を切り上げて得られる整数とすることで、近似誤差を発生させずに処理が完了することを証明可能である(後述するProof 1~Proof 4参照)。
【0084】
図4の処理では、逆元演算処理のループの反復回数が入力変数のビット長から決定され、入力変数の値そのものには依存していない。したがって、定数回数での処理を実現可能であり、ワーストケースを保証することが可能である。
【0085】
次に、逆元演算装置1の動作について図5を用いて説明する。図5は、逆元演算装置1の動作を示すフローチャートである。
【0086】
逆元演算装置1において、初期設定部4は、互いに素な整数を示すX,Yが入力部3から入力されると、記述11(図4参照)に対応した初期化の処理を行う(S1)。初期設定部4は、U,Vの初期値を設定して第2の多倍長演算部8へ供給する。初期設定部4は、X,Yの有効ビット長を示すm,nを生成してワード単位処理部5へ供給する。初期設定部4は、m,nの合計に応じた回数閾値dを生成して制御部2へ供給する。
【0087】
制御部2は、記述12に対応した逆元演算処理のループ(S10)をループ回数がd回に達するまで反復実行する。
【0088】
逆元演算処理のループ(S10)において、制御部2は、逆元演算処理のループ回数と回数閾値dとを比較する。制御部2は、ループ回数が回数閾値d以下である場合、S11~S14を行う。制御部2は、ワード単位処理部5を制御して、記述121,122に対応したワード単位処理を行わせる(S11)。
【0089】
ワード単位処理(S11)において、ワード単位処理部5は、図6に示すような処理を行う。図6は、ワード単位処理(S11)を示すフローチャートである。
【0090】
ワード単位処理部5は、記述121に対応したワード単位初期化を行う(S3)。ワード単位処理部5は、X,Yの上位w+tビットを示すr,sを生成し、X,Yの下位wビットを示すa,bを生成する。ワード単位処理部5は、拡張バイナリGCD処理の近似計算のループ(S20)をループ回数がw回に達するまで反復実行する。
【0091】
拡張バイナリGCD処理の近似計算のループ(S20)において、ワード単位処理部5は、近似計算のループ回数と回数閾値wとを比較する。制御部2は、ループ回数が回数閾値w以下である場合、S21~S26を行う。ワード単位処理部5は、大小関係の判定を誤る可能性がある否かを示すパラメータeを確認し、e=0であれば(S21でY)、大小関係の判定を誤る可能性があるかどうかの判定1(S22)を行う。判定1では、「k>w+tであること」と「a,bがいずれも奇数であること」と「|r-s|が差分閾値2より小さいこと」とがいずれも成り立つ場合、大小関係の判定を誤る可能性があると判定され、それらのいずれかが成り立たない場合、大小関係の判定を誤る可能性がないと判定される。ワード単位処理部5は、大小関係の判定を誤る可能性がないと判定されると(S22でN)、記述1221に対応した第1のループの更新処理1(S23)を行う。ワード単位処理部5は、大小関係の判定を誤る可能性があると判定されると(S22でY)、e=1に設定して(S24)、記述1221に対応した第1のループの更新処理1(S23)を行う。
【0092】
一方、ワード単位処理部5は、e≠0であれば(S21でN)、大小関係の判定を誤る可能性があるとして、記述1222に対応した第1のループの更新処理2(S25)を行う。
【0093】
ワード単位処理部5は、S23又はS25の後、記述1223に対応した更新処理3(S26)を行う。ワード単位処理部5は、ループ回数が回数閾値wを超える場合、ループ(S20)を抜ける。
【0094】
図5に戻り、制御部2は、第1の多倍長演算部6を制御して、記述123に対応した第1の多倍長演算を行わせる(S12)。制御部2は、補正部7を制御して、記述124に対応した補正処理を行わせる(S13)。制御部2は、第2の多倍長演算部8を制御して、記述124に対応した第2の多倍長演算を行わせる(S14)。制御部2は、ループ回数が回数閾値dを超える場合、ループ(S10)を抜けて、S10の終了を出力部9へ通知する。
【0095】
出力部9は、S10が終了されたことに応じて、記述13に対応した出力処理を行う(S2)。出力部9は、V=Y-1mod Xを剰余環Z/XZ上の逆元として出力する。
【0096】
以上のように、第1の実施形態において、逆元演算装置1は、2つの入力変数の有効ビット長の合計に応じた回数閾値を生成する。逆元演算装置1は、近似計算で近似変数及び有効ビット長を逐次更新しながら大小判定を間違えそうなときに近似変数の更新を停止しつつ有効ビット長の更新を継続する逆元演算処理のループを反復実行する。これにより、近似計算における近似誤差の増大を抑制できる。逆元演算装置1は、逆元演算処理のループ回数が回数閾値に達したことに応じて処理のループを終了させる。これにより、逆元演算処理について、近似誤差の増大を抑制しながら、処理を定数回数化できる。この結果、有限体上の多倍長逆元演算を、高速、かつ、定数時間で行うことが可能であり、逆元演算処理の反復回数についてワーストケースを保証することができる。したがって、逆元演算装置1をメモリシステム300におけるファームウェアの署名検証に適用した場合に、ファームウェアの起動時間を保証できる。
【0097】
なお、逆元演算装置1は、互いに素な整数を示すX,Yに対して数式1を満たすU,Vを求める逆元演算処理を行い、
U=X-1mod Y・・・数式4
を剰余環Z/YZ上の逆元として出力してもよい。この場合、初期設定部4は、U=1、V=0を初期値として設定して第2の多倍長演算部8へ供給する。また、出力部9は、逆元演算処理のループが終了されたことに応じて、数式4に示すUを剰余環Z/YZ上の逆元として出力する。すなわち、m,nの合計が1以下になった状態では、近似的にX,Yの一方が0(この場合はY=0)になったと見なすことができ、更新後のU,Vが近似的に数式1を満たす。すなわち、数式1は
UX≡1mod Y・・・数式5
と変形でき、UXがYを法として1に合同であるので、数式4が成り立ち、Uが剰余環Z/YZ上のXの逆元として求まったことになる。出力部9は、Uを外部(例えば、署名検証回路103)へ出力する。
【0098】
また、逆元演算装置1による逆元演算処理は、メモリシステム300におけるシステム情報の署名付与に用いられてもよい。システム情報は、例えば、ベンダ名、モデル名、製造番号、ファームウェアのバージョン、ハッシュ値、半導体メモリ200に保持された任意の値などであってもよい。この場合、図1に示す署名付与回路102は、逆元演算装置1を有していてもよい。メモリシステム300において、コントローラ100は、半導体メモリ200に格納すべきファームウェア501を受けると、ファームウェア501をバッファメモリ104に一時的に格納し、署名付与回路102でファームウェア501の署名付与処理を行う。署名検証処理では、ファームウェア501のハッシュ値が求められるとともに、ファームウェア501のハッシュ値から秘密鍵に基づいて署名502が生成され、ファームウェア501に署名502が付与される。
【0099】
例えば、署名付与回路102は、ECDSA(Elliptic Curve Digital Signature Algorithm)方式に従った署名付与処理を行ってもよい。署名502は、第1の部分及び第2の部分を有する。署名付与回路102は、ファームウェア501のハッシュ値を求める。署名付与回路102は、所定の整数を選択し、所定の整数に応じた楕円曲線上の点の座標値を求める。署名付与回路102は、楕円曲線上の点の座標値を用いて署名502の第2の部分を生成する。署名付与回路102は、逆元演算装置1により所定の整数の逆元を求める。署名付与回路102は、所定の整数の逆元とファームウェア501のハッシュ値に応じた値と署名502の第2の部分と秘密鍵とを用いて、署名502の第1の部分を生成する。署名付与回路102は、第1の部分及び第2の部分を有する署名502を生成するとファームウェア501とともに半導体メモリ200に格納する。
【0100】
メモリシステム300において、逆元演算装置1を署名付与処理に用いるユースケースでは、セキュリティの観点から、データの値によらず定数時間で演算を行うことが求められる。例えば、メモリシステム300は、逆元演算処理の処理時間のデータ依存性を利用して秘密鍵を導き出しファームウェア501を不正に書き換えようとするサイドチャネル攻撃を受ける可能性がある。これに対して、逆元演算装置1によれば、逆元演算処理について、近似誤差の増大を抑制しながら、処理を定数回数化できる。この結果、有限体上の多倍長逆元演算を、高速、かつ、定数時間で行うことが可能であり、サイドチャネル攻撃耐性を高めることができる。
【0101】
また、逆元演算装置1による逆元演算処理は、ECDSA方式等による暗号化処理、復号化処理に用いられてもよいし、逆元演算処理を含むような他の処理に用いられてもよい。
【0102】
(第2の実施形態)
次に、第2の実施形態にかかる逆元演算装置1について説明する。以下では、第1の実施形態と異なる部分を中心に説明する。
【0103】
第1の実施形態では、近似計算の第1のループ(loop_i)において、X,Yの大小判定をr,sの大小判定で近似させているが、第2の実施形態では、X,Yの大小判定をm,nの大小判定で近似させる。X,Yがバイナリであり、大小関係が有効ビット数の大小に反映されやすいので、X,Yの大小判定をm,nの大小判定で近似させることが可能である。
【0104】
このとき、m,nのビット数(例えば、7ビット)がr,sのビット数(例えば、70ビット)より小さいので、X,Yの大小判定をm,nの大小判定で近似させることで、大小判定の処理の負荷を軽減できる。これにより、クリティカルパス遅延を小さくできるため、r,sの大小判定を行う場合に比べて、全体のクリティカルパス遅延を削減でき、比較器の数を削減できることなどにより回路規模の削減を狙うことが可能である。すなわち、逆元演算装置1をハードウェアで実装する場合の回路規模を縮小できる。
【0105】
具体的には、逆元演算装置1において、ワード単位処理部5は、第1のループにおいて、a,bがともに奇数の場合に、r,sの大小関係を用いずにm,nの大小関係に基づいて、r,s,a,b,m,nを更新する。この動作を疑似コードで説明すると、第1の実施形態の図7(a)に示す記述部分1221cdが、第2の実施形態では、図7(b)に示す記述部分1221cfに変更される。図7(a)は、図4に示す第1の実施形態の疑似コードの一部を示す図である。図7(b)は、第2の実施形態の疑似コードの第1の実施形態の疑似コードからの変更部分を示す図である。
【0106】
記述部分1221cfでは、r,sの大小比較ではなくm,nの大小比較の結果に基づいて、近似変数r,aの更新の内容を切り替えている。記述部分1221cfのcase_C’及びcase_Eが記述部分1221cdのcase_Cに対応し、記述部分1221cfのcase_D’及びcase_Fが記述部分1221cdのcase_Dに対応している。
【0107】
a,bがいずれも奇数でm>nである場合、case_C’の処理が行われて更新行列Mの2段目(μ,μ)が決められ、case_Eの処理が行われて更新行列Mの1段目(μ,μ)が決められ、その後、1段目と2段目とが統合され、更新行列Mが決められる。
【0108】
a,bがいずれも奇数でm≦nである場合、case_D’の処理が行われて更新行列Mの2段目(μ,μ)が決められ、case_Fの処理が行われて更新行列Mの1段目(μ,μ)が決められ、その後、1段目と2段目とが統合され、更新行列Mが決められる。
【0109】
第2の実施形態の疑似コードは、記述部分1221cdが記述部分1221cfに変更される点以外は、図4に示す疑似コードと同様である。
【0110】
以上のように、第2の実施形態において、逆元演算装置1は、第1のループにおいて、a,bがともに奇数の場合に、r,sの大小関係を用いずにm,nの大小関係に基づいて、r,aを更新する。これにより、大小判定の処理の負荷を軽減でき、クリティカルパス遅延を小さくできるため、r,sの大小判定を行う場合に比べて、逆元演算装置1をハードウェアで実装する場合の回路規模を縮小できる。
【0111】
(第3の実施形態)
次に、第3の実施形態にかかる逆元演算装置1について説明する。以下では、第1の実施形態及び第2の実施形態と異なる部分を中心に説明する。
【0112】
第1の実施形態では、補正処理を多倍長単位の処理で行っているが、第3の実施形態では、補正処理をワード単位の処理で行う。複数の演算器間の繰り上がり又は繰り下がりのやり取りが発生し得る多倍長単位の処理をそのようなやり取りが発生しないワード単位の処理に置き換えることで、処理サイクル数を削減できる。これにより、逆元演算処理の負荷を軽減でき、全体の演算時間を短縮することが可能である。
【0113】
具体的には、逆元演算装置1は、図8に示すように、補正部7(図2参照)が省略され、初期設定部4、ワード単位処理部5に代えて、初期設定部4i、ワード単位処理部5iを有する。
【0114】
初期設定部4iは、X,Yの正負を示すfを生成する。fは、X,Yの正負を示す変数であり、0の値で正を示し、1の値で負を示す。例えば、fを生成する際に、初期設定部4iは、fに初期値として0を設定する。初期設定部4iは、fをワード単位処理部5iへ供給する。
【0115】
ワード単位処理部5iは、fに基づいてr,s,a,bの値が非負となるようにr,s,a,b,Mを更新する補正処理を行う。ワード単位処理部5iは、fに基づいて、r,sのビット反転とa,bの符号反転とを行って、r,s,a,bを更新する。ワード単位処理部5iは、f=0であれば、r,s,a,bを更新しない。ワード単位処理部5iは、f≠0であれば、r,sのビット反転とa,bの符号反転とを行って、r,s,a,bを更新し、それに応じて更新行列Mを決める。これにより、近似的に、r,s,a,bが非負となるように更新行列Mを決めることができる。また、ワード単位処理部5iは、拡張バイナリGCD処理のループをw回に達するまで反復実行し、その後、更新行列Mを更新する。ワード単位処理部5iは、更新後のM,fを第1の多倍長演算部6へ供給し、更新後のMを第2の多倍長演算部8へ供給する。
【0116】
第1の多倍長演算部6は、M,fがワード単位処理部5iから入力され、更新行列Mに基づいてX,Yの値を更新し、X,Yの正負に基づいてfを更新する。第1の多倍長演算部6は、更新後のX,Yと更新後のfとをワード単位処理部5iへ供給する。
【0117】
また、逆元演算装置1の動作を疑似コードで説明すると、図9(a)に示す記述124が、図9(b)に示す複数の記述124a,124bに分割され記述11”と記述12”中の記述121”とに分散して配置される。図9(a)は、図4に示す第1の実施形態の疑似コードを概略的に示す図である。図9(b)は、第3の実施形態の疑似コードを概略的に示す図であり、第3の実施形態の疑似コードの第1の実施形態の疑似コードからの変更部分を示す図である。
【0118】
記述11”における記述124aでは、X,Yの正負を示すfが生成されるとともに、fに初期値として0が設定される。
【0119】
記述12”中の記述121”における記述124bでは、Yが負になった場合に正にする補正処理が行われる。「if」文のf≠0の条件部分として記述され、f≠0の場合(すなわち、f=1の場合)に、Yが負であるとして、補正処理が行われる。補正処理では、r,sのビット反転とa,bの符号反転とが行われて、r,s,a,bが更新され、これに応じて、更新行列Mが更新される。r,sのビット反転された値は、近似的に、r,sの符号反転された値とみなすことができる。すなわち、記述124bでは、f≠0の場合に、近似的にYの符号反転を行うことに相当する処理を近似変数r,s,a,bで行うことができる。
【0120】
また、逆元演算装置1の動作について、図10に示すように、次の点で第1の実施形態と異なる処理が行われる。図10は、逆元演算装置1の動作を示すフローチャートである。
【0121】
逆元演算装置1において、初期設定部4iは、S1と同様の初期設定に加えて、X,Yの正負を示すfの生成及びその初期値の設定を行う(S101)。その後、制御部2は、記述12に対応した逆元演算処理のループ(S110)をループ回数がd回に達するまで反復実行する。逆元演算処理のループ(S110)において、制御部2は、逆元演算処理のループ回数と回数閾値dとを比較する。制御部2は、ループ回数が回数閾値d以下である場合、S111,S12,S14を行う。すなわち、S13に対応する補正処理は、S12の後に行われず、S111の中で行われる。
【0122】
ワード単位処理(S111)において、ワード単位処理部5は、記述121”(図9(b)参照)に対応したワード単位初期化を行う(S3”)。すなわち、S3(図6参照)と同様の初期化の処理に加えて、ワード単位処理部5iは、fに基づいてr,s,a,bの値が非負となるようにr,s,a,b,Mを更新する補正処理を行う。その後、ワード単位処理部5は、図6のS20と同様の処理を行う。
【0123】
以上のように、第3の実施形態において、逆元演算装置1は、補正処理をワード単位の処理で行う。これにより、処理サイクル数を削減でき、逆元演算処理の負荷を軽減できるので、全体の演算時間を短縮することが可能である。
【0124】
(第4の実施形態)
次に、第4の実施形態にかかる逆元演算装置1について説明する。以下では、第1の実施形態~第3の実施形態と異なる部分を中心に説明する。
【0125】
第1の実施形態~第3の実施形態では、ワード単位処理、第1の多倍長演算、第2の多倍長演算が逆元演算処理のループごとに順次に行われる動作が例示されているが、第4の実施形態では、あるループの第2の多倍長演算と次のループのワード単位処理とを並行させるパイプライン動作が行われる。
【0126】
このパイプライン動作を、図11(a)のシーケンス図で説明する。Nをdより小さい任意の非負の整数とするとき、N回目の逆元演算処理のループ(S10-N)においてワード単位処理(S11-N)、第1の多倍長演算(S12-N)、第2の多倍長演算(S14-N)が順次に行われる。図11(a)は、逆元演算処理を示すシーケンス図である。N+1回目の逆元演算処理のループ(S10-(N+1))においてワード単位処理(S11-(N+1))、第1の多倍長演算(S12-(N+1))、第2の多倍長演算(S14-(N+1))が順次に行われる。N+2回目の逆元演算処理のループ(S10-(N+2))においてワード単位処理(S11-(N+2))、第1の多倍長演算(S12-(N+2))、第2の多倍長演算(S14-(N+2))が順次に行われる。
【0127】
このとき、図11(a)に一点鎖線で囲って示すように、N+1回目の逆元演算処理のループのワード単位処理(S11-(N+1))と、N回目の逆元演算処理のループの第2の多倍長演算(S14-N)とが並行して行われる。同様に、N+2回目の逆元演算処理のループのワード単位処理(S11-(N+2))と、N+1回目の逆元演算処理のループの第2の多倍長演算(S14-(N+1))とが並行して行われる。
【0128】
これに応じて、図11(a)に点線の矢印で示すように、N回目の逆元演算処理の実行期間T-NとN+1回目の逆元演算処理の実行期間T-(N+1)とが部分的に重複する。N+1回目の逆元演算処理の実行期間T-(N+1)とN+2回目の逆元演算処理の実行期間T-(N+2)とが部分的に重複する。
【0129】
このパイプライン動作を、図4の疑似コードで説明すると、Nをdより小さい任意の整数とするとき、N回目の逆元演算処理のループ(loop_j)における記述125のU,Vの多倍長計算とN+1回目の逆元演算処理のループ(loop_j)における122の近似計算のループ(loop_i)とを並列に行う(図4)。すなわち、U,Vの計算結果は次のloop_iの処理に影響を与えないため、U,Vの計算完了を待たずに次のloop_iの処理を開始することが可能である。
【0130】
以上のように、第3の実施形態において、逆元演算装置1は、ある逆元演算処理のループの第2の多倍長演算と次の逆元演算処理のループのワード単位処理とを並行させるパイプライン動作を行う。これにより、ハードウエアを効率よく使用し、演算の高速化が可能であり、全体の処理時間を短縮することが可能である。
【0131】
なお、逆元演算装置1は、第1の多倍長演算と第2の多倍長演算とを、共通の回路を時分割で利用して実行させてもよい。すなわち、U,Vの多倍長計算(第1の多倍長演算)とX,Yの多倍長計算(第2の多倍長演算)とは、それぞれ、図11(b)、図11(c)に示す疑似コードの記述で示される。図11(b)、図11(c)に点線で囲った部分で示されるように、U,Vの多倍長計算とX,Yの多倍長計算とは、互いに処理内容が類似しているので、共通の乗算器(シフト演算器)を共用して、時分割で利用することで処理可能である。これにより、ハードウエアを効率よく使用し、回路規模の削減が可能である。
【0132】
なお、第1の実施形態~第3の実施形態の妥当性については、図12図13を用いて、以下のように証明できる。図12は、拡張バイナリGCD法に対応した逆元演算処理(アルゴリズムG)の疑似コードを示す図である。図13は、証明用の中間変数が図4の疑似コードに追記された疑似コード(アルゴリズムA)を示す図である。
【0133】
以下では、第1の実施形態の逆元演算処理(アルゴリズムA)が拡張バイナリGCD法に対応した逆元演算処理(アルゴリズムG)と等価であることを証明する。また、第2の実施形態の逆元演算処理(アルゴリズムB)、第3の実施形態の逆元演算処理(アルゴリズムC)も同様にして、アルゴリズムGと同等であることを概説する。
【0134】
まず、証明すべき、補助命題(Lemma 1)~(Lemma 3)及び命題(Theorem 4)~(Theorem 6)を示した後、それらを、証明(Proof 1)~(Proof 6)で証明していく。
【0135】
(Lemma 1)
δ=X’/2-r,|ε=Y’/2-sとする。
i<c に対して
・ L1.1 |δ-ε|<2
・ L1.2 e=0 and r>s⇒X’>Y’
・ L1.3 e=0 and r<s⇒X’<Y’
・ L1.4 e=0⇒M=M’
【0136】
【数5】
【0137】
(Lemma 2)
i<wに対して
・ L2.1 m+n>1⇒mi+1+ni+1=m+n-1
・ L2.2 min(mi+1,ni+1)≦min(m,n
l=min(m,n)とすると
・ L2.3 m+n=k+l-i
【0138】
(Lemma 3)
i≦c-eに対して
【0139】
【数6】
i=c,|e=1に対して
・ L3.3 0≦X<2
・ L3.4 |Y|<2k-w
i=wに対して
【0140】
【数7】
【0141】
(Theorem 4)
アルゴリズムA実行時のcの値を使ってアルゴリズムGを実行したとき、アルゴリズムAとアルゴリズムGの処理は等価である。すなわち、
・ L4.1 loop_j内の更新処理が等価である。
・ L4.2 loop_jの終了条件が等価である。
【0142】
(Theorem 5)
アルゴリズムBとアルゴリズムGの処理は等価である。
【0143】
(Theorem 6)
アルゴリズムCとアルゴリズムGの処理は等価である。
【0144】
(Proof 1)
iに関する帰納法で示す。
・ L1.1 |δ-ε|<2
i=0のとき
=X[k-1:h]なので、
0≦X-r・2<2
0≦X/2-r<1
0≦δ<1
【0145】
同様に
0≦ε<1
したがって
|δ-ε|<1
【0146】
i>0 のとき
アルゴリズムAにおいて
【数8】
アルゴリズムGにおいて
【数9】
【0147】
帰納法の仮定よりMi-1=M’i-1なので
【数10】
【0148】
このとき
【数11】
ノルムをとって、|δ|<1,|ε|<1に注意すると
【数12】
【0149】
したがって
【数13】
したがって、
【数14】
とすれば、|δ-ε|<2が成り立つ。
【0150】
・ L1.2 e=0 and r>s⇒X’>Y’
=0より|r-s|≧2、r>sよりr-s≧2、L1.1より|δ-ε|<2、すなわち、δ-ε>-2なので
【数15】
したがって、X’>Y’
【0151】
・ L1.3 e=0 and r<s⇒X’<Y’
=0より|r-s|≧2、r<sよりr-s≦-2、L1.1より|δ-ε|<2、すなわち、δ-ε<2なので
【数16】
したがって、X’<Y’
【0152】
・ L1.4 e=0⇒M=M’
帰納法の仮定より、先行する反復における判定がアルゴリズムGとアルゴリズムAで等しいとする。
X’のLSBとaのLSBは同じ値なので、case_Aとなる条件は等しい。
Y’のLSBとbのLSBは同じ値なので、case_Bとなる条件は等しい。
L1.2より、case_Cとなる条件は等しい。
L1.3より、case_Dとなる条件は等しい。
【0153】
以上より判定がすべて等しくなるので、M=M’が成り立つ。
【数17】
≠0のときは、case_C,case_Dの選択を誤る可能性がある。選択を誤らなかった場合はM=M’となり、誤った場合は
【数18】
となる。
【0154】
(Proof 2)
・ L2.1 m+n>1⇒mi+1+ni+1=m+n-1
・ L2.2 min(mi+1,|ni+1)≦min(m,|n
【0155】
,|nの更新式から、case_Bが選択されn=0の場合を除いてm+nの値が必ず1ずつ小さくなっていくこと、および、min(m,|n)の値が増加することがないことが分かる。
【0156】
case_Bが選択されn=0の場合は、m=1,n=0、すなわち、m+n=1となっている。なぜなら、mが偶数の場合はcase_Aが選択され、mが1以外の奇数の場合はXとYが1以外の公約数を持つことを意味し発生しえないからである。
【0157】
・ L2.3 m+n=k+l-i
【数19】
【0158】
(Proof 3)
【数20】
帰納法によって、示すことができる。
【0159】
・ L3.3 0≦X<2
・ L3.4 |Y|<2k-w
e=1より、i=c-1のときcase_C,case_Dのいずれかが選択されている。以下、case_Cと仮定しmc-1>nc-1として証明を進めるが、case_Dの場合も同様に証明可能である。
c-1>nc-1より、nc-1=min(mc-1,|nc-1
【0160】
Lemma 2より
min(mc-1,nc-1)≦min(mc-2,nc-2)≦…≦min(m,n)=l
なので、nc-1≦l
【0161】
L3.1より、
【数21】
なので
【数22】
【0162】
=(Xc-1-Yc-1)/2より
|Y|=|(Xc-1-Yc-1)/2|
=|2(rc-1-sc-1)+(δc-1-εc-1))/2|
≦2(|rc-1-sc-1)|+|δc-1-εc-1|)/2
<2(2+2)/2=2h+t=2k-w
【数23】
【0163】
e=0の場合はc=wとなりL3.1,L.3.2でカバーされているので、e=1の場合について証明する。以下、i=c-1のときcase_Cが選択されたものとするが、case_Dが選択された場合も同様に証明できる。
【0164】
case_2の更新式よりn≧k、L3.4より|Y|<2k-wなので、
【数24】
【0165】
-(w-c)≧k-wのとき、case_2の更新式よりm=m
【数25】
【0166】
-(w-c)<k-wのとき、case_2の更新式、および、L2.3により
=m-((w-c)-(n-(k-w)))
=m+n+c-k
=(k+l-c)+c-k
=l
【0167】
L3.3より、
【数26】
【0168】
(Proof 4)
・ L4.1 loop_j内の更新処理が等価である。
L1.4,L1.5よりM=M’もしくは
【数27】
が成り立つ。後者の場合、一時的にY=Y<0となるが、そのときはf=1となって、
【数28】
と補正されるため、更新処理は等価となる。
【0169】
・ L4.2 loop_jの終了条件が等価である。
【0170】
アルゴリズムAにおいては、L2.1にしたがってloop_jを反復するたびにm+nの値は、1より小さくならない範囲でwずつ小さくなる。そのため、loop_jをd回反復した後には必ずm+n=1となる。m,nの更新式でm=0となることはないので、m+n=1のときはn=0である。このとき、L3.2より0≦Y<2=2=1、すなわち、Y=0となる。d回反復する前にY=0となる場合もあるが、そのときはcase_Bが選択され続けてX,Yの値は変化しない。したがって、loop_jの終了条件は等価だといってよい。
【0171】
(Proof 5)
アルゴリズムBは、アルゴリズムAに対してcase_C,case_Dを変形している。これによりMのパターンは増えるが、すべて
【数29】
を満たしている。したがって、上記と同様にしてアルゴリズムGと同等であることを示すことができる。
【0172】
(Proof 6)
アルゴリズムCにおいては、アルゴリズムAとsの値が異なる場合がある。これによりε=1となる可能性があり、そのため、|δ-ε|≦i+2となる。したがって、この式に基づいてtを決定すれば、上記と同様にして拡張バイナリGCD法と同等であることを示すことができる。
【0173】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0174】
1,1i 逆元演算装置、2 制御部、3 入力部、4,4i 初期設定部、5,5i ワード単位処理部、6 第1の多倍長演算部、7 補正部、8 第2の多倍長演算部、9 出力部、100 コントローラ、200 半導体メモリ、300 メモリシステム。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13