(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022146258
(43)【公開日】2022-10-05
(54)【発明の名称】逆数算出方法、装置、およびプログラム
(51)【国際特許分類】
G06F 17/10 20060101AFI20220928BHJP
【FI】
G06F17/10 Z
【審査請求】有
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2021047134
(22)【出願日】2021-03-22
(11)【特許番号】
(45)【特許公報発行日】2021-12-01
(71)【出願人】
【識別番号】000005234
【氏名又は名称】富士電機株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】高務 健二
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA04
(57)【要約】 (修正有)
【課題】バイナリデータにおいて10進数の逆数を算出する性能を向上させる逆数算出方法、装置およびプログラムを提供する。
【解決手段】情報処理装置が実行する方法であって、2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
情報処理装置が実行する方法であって、
2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する方法。
【請求項2】
aの逆数をbとしたときに、
前記aおよび前記bは奇数であり、
前記aを2の冪乗倍した値を加算するか加算しないかを選択し、加算する場合には1とし加算しない場合には0としたビット列を前記bとする、請求項1に記載の方法。
【請求項3】
aの逆数をbとし、前記aと前記bの積をmとしたときに、前記aと、前記bと、前記mとのそれぞれを複数の配列として、2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する、請求項1または2に記載の方法。
【請求項4】
ホワイトボックス暗号方式のAESにおいて、2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する、請求項1から3のいずれか一項に記載の方法。
【請求項5】
プロセッサを備えた情報処理装置であって、
前記プロセッサは、2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する、情報処理装置。
【請求項6】
情報処理装置に、
2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する手順
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、逆数算出方法、装置、およびプログラムに関する。
【背景技術】
【0002】
従来、コンピュータによる種々のアルゴリズムにおいて、逆数の算出が用いられている(特許文献1)。
【0003】
例えば、ホワイトボックス暗号方式(White-Box Cryptography)では、暗号鍵の値とアルゴリズムで決められている演算をルックアップテーブルへと合成する。その際、連続する演算間の入出力の部分に任意の変換と逆変換を挟み込み、変換を前の演算のルックアップテーブルに、逆変換を後の演算のルックアップテーブルに、それぞれ合成することで暗号鍵を難読化している。この難読化に適用可能な任意の変換と逆変換の演算の1つとして、積算と逆数の積算がある。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、昨今のIoT(Internet of Things)の普及により見られる計算パワーの小さい組込機器等では、積算値に対する逆数の算出の負荷が大きい。さらに、RSA(Rivest, Shamir, Adleman)暗号等の素数を法とする剰余体上の積算では、積算後の値のビット数が積算前の値のビット数よりも増えるといった計算上の問題があった。
【0006】
そこで、本発明の一実施形態では、バイナリデータにおいて10進数の逆数を算出する性能を向上させることを目的とする。
【課題を解決するための手段】
【0007】
本発明の一実施形態に係る方法は、情報処理装置が実行する方法であって、2の冪乗を法とする剰余体上の積算において10進数の逆数を算出する。
【発明の効果】
【0008】
本発明の一実施形態によれば、バイナリデータにおいて10進数の逆数を算出する性能を向上させることができる。
【図面の簡単な説明】
【0009】
【
図1】本発明の一実施形態に係る逆数を算出する処理のフローチャートである。
【
図2】本発明の一実施形態に係る逆数の算出の一例である。
【
図3】本発明の一実施形態に係る逆数を算出する処理のフローチャートである。
【
図4】本発明の一実施形態に係るWhite-box AESへの適用例である。
【
図5】本発明の一実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【0010】
以下、図面に基づいて本発明の実施の形態を説明する。なお、情報処理装置1が、逆数を算出する処理を実行するものとする。
【0011】
<概略>
本発明では、2の冪乗を法とする剰余体上での逆数が存在する条件を満たすため、積算値を奇数に限定する。対象の奇数を、1倍、2倍、4倍、・・・と2の冪乗倍したものを加算するまたは加算しないを、加算した値の下位側のビットから0(ゼロ)となるように選択していき、加算する(1)または加算しない(0)をビット列としたものを逆数とする。
【0012】
積算値を奇数に限定した2の冪乗を法とする剰余体上の積算により以下が成り立つため、積算後の値は積算前の値と同じビット数で表現できる。
x×a=y
y×b=x (x,y,a,bは全てnビット。a,bは奇数)
【0013】
nビットの値xに対し、nビットの奇数aを積算し、元の値と同じnビットの値yに写像する。積算したnビットの奇数aの逆数bも同様にnビットであり、積算後の値yにさらにこの逆数bを積算することで、元のnビットの値xに逆変換される。積算値の逆数算出の計算量はO(n)と小さく(ユークリッドの互除法の計算量は、0(Log(2n)2)である)、ブロック暗号で一般的に使われる128ビットのデータであったとしても、組込機器でも少ない計算負荷で逆数を算出できる。
【0014】
<方法>
図1は、本発明の一実施形態に係る逆数を算出する処理のフローチャートである。
【0015】
値aの逆数bとの積をmとする。a、bはnビットの奇数であるとする(2の冪乗を法とする剰余体上で逆数が存在するためには、a、bは奇数である)。
【0016】
a*a-1mod2n=1(=m)
b=a-1=20b0+21b1+22b2+・・・ (bを2進数で表したものである)
b0=1 (固定(bは奇数であるので、b0=1である))
m=a*b=a*b0+2*a*b1+4*a*b2+8*a*b3・・・
【0017】
b0以外の係数(上記のb1の係数"2*a"、b2の係数"4*a"、b3の係数"8*a"、・・・)は最下位ビットが0(ゼロ)のため、m0はb0以外とは独立している。つまり、a0=b0=m0=1(固定)である。b0確定下で、b0、b1以外の係数は下位2ビットが0(ゼロ)のため、m1=0となるb1は一意に算出可能である。そのため、b0~b1確定下では、mi+1=0となるbi+1は一意に算出可能である。
【0018】
情報処理装置1は、mが最終的に"1d・・・d0・・・01"と下位nビットが最下位ビットを除いて0となるように、bの下位ビットから決定していく。なお、dは任意の値(0または1)であってよい。
【0019】
ステップ1(S1)において、情報処理装置1は、m=a,b0=1とする。
【0020】
ステップ2(S2)~ステップ5(S5)において、情報処理装置1は、miについて、i=1からn-1まで順番に、
mi=0の場合 bi=0
mi=1の場合 bi=1,m=m+2i*a
とmを更新しながらbを決めていく。なお、aが奇数であるので、m0=1である。
【0021】
例えば、m1=0の場合、m1を0にする値を加算する必要はなく、b1=0と決定することができる。m1=1の場合、m1を0にする値(aを2倍した値)を加算する必要があり、b1=1と決定することができる。
【0022】
<算出例>
図2は、本発明の一実施形態に係る逆数の算出の一例である。
【0023】
図2では、19(00010011)×27(00011011)=1mod256(8ビットデータ),a=19,b=27=a
-1の例を説明する。
図2の各行は、i=0~7のときの、乗算結果の計算過程、2
i×a、b
iを示す。逆数bの上位ビットは、乗算結果の下位ビットには影響を与えないので、最終の乗算結果が1となるよう、逆数の下位ビットから順に確定していく。
【0024】
[i=0のとき]
図2の(1)において、b
i(最下位)は、1で固定である。
図2の(2)において乗算の結果が1となるために、逆数の最下位ビットは1であることが必須である。そのため、a×1の加算が行われる。
【0025】
図2の(3)は、乗算結果の計算過程のiビット目(太字)と一致している。
【0026】
[i=1のとき]
図2の(4)において、乗算結果の1ビット目が0(ゼロ)となるよう、逆数の1ビット目は1を選択する。そのため、a×2の加算が行われる。
【0027】
[i=2のとき]
図2の(5)において、2ビット目は既に0(ゼロ)なので、逆数の2ビット目は0を選択する。そのため、a×4の加算は行われない。
【0028】
以下、同様に行われる。
【0029】
[i=3のとき]
乗算結果の3ビット目が0(ゼロ)となるよう、逆数の3ビット目は1を選択する。そのため、a×8の加算が行われる。
【0030】
[i=4のとき]
乗算結果の4ビット目が0(ゼロ)となるよう、逆数の4ビット目は1を選択する。そのため、a×16の加算が行われる。
【0031】
[i=5のとき]
5ビット目は既に0(ゼロ)なので、逆数の5ビット目は0を選択する。そのため、a×32の加算が行われない。
【0032】
[i=6のとき]
6ビット目は既に0(ゼロ)なので、逆数の6ビット目は0を選択する。そのため、a×64の加算が行われない。
【0033】
[i=7のとき]
7ビット目は既に0(ゼロ)なので、逆数の7ビット目は0を選択する。そのため、a×128の加算が行われない。
図2の(6)において、下位8ビットの10進数は1である。
【0034】
<レジスタでの演算>
図3は、本発明の一実施形態に係る逆数を算出する処理のフローチャートである。なお、
図1では本発明の概念を説明するために2のi乗を加算する形をとっているが、
図3では実際の処理を想定し、都度2の冪乗を計算する処理やそれを格納するメモリを削減する形をとっている。
【0035】
図1と同様に、値aの逆数bとの積をmとする。a、bは奇数であるとする。
図3では、レジスタが32ビット、値(a,b,m)が128ビットの場合を説明する。
図3では、a,b,mを32ビットの4つの配列として扱う。
【0036】
a=a[3](=a127,a126,・・・,a96),a[2](=a95,・・・,a64),a[1](=a63,・・・,a32),a[0](=a31,・・・,a0) なお、b,mも同様である。
【0037】
ステップ11(S11)において、情報処理装置1は、m=a,b0=1とする。
【0038】
ステップ12(S12)~ステップ16(S16)において、情報処理装置1は、miについて、i=1からn-1まで順番に、
a=a×2
mi=0の場合 bi=0
mi=1の場合 bi=1,m=m+a
とaおよびmを更新しながらbを決めていく。なお、aの初期値が奇数であるので、m0=1である。
【0039】
mに2の冪乗倍して加算するaについては、iの繰り返しにおいて都度2倍した値に更新しながらmに加算する。
【0040】
ステップ13(S13)において、以下のとおりである。
a=a*2:
a[3]=a[3]<<1 OR a[2]>>31
a[2]=a[2]<<1 OR a[1]>>31
a[1]=a[1]<<1 OR a[0]>>31
a[0]=a[0]<<1
【0041】
ステップ15(S15)において、レジスタ単位での加算時の桁溢れはキャリーフラグを用いる。
m=m+a:
cf=0
i=0~3で以下繰り返し。
cfn=(m[i]>>1+a[i]>>1+(m[i]ANDa[i]AND1))>>31
m[i]+=a[i]+cf
cf=cfn
【0042】
<逆変換の証明>
ここで、逆変換の証明について説明する。
【0043】
nビットの任意の値xに値aを積算し、その値にさらにaの逆数bを積算すると値xに戻ることを証明する。
【0044】
前提:
a*b=2n*D0+1
aにその逆数bを積算した値は、2の冪乗の剰余を計算すると1(Dは剰余計算で消える係数)となる。
【0045】
x*a=2n*D1+y
xにaを積算した値は、2の冪乗の剰余を計算するとyとなる。
【0046】
y*b=2n*D2+z
yに逆数bを積算した値は、2の冪乗の剰余を計算するとz(=x)となる。
【0047】
計算プロセス比較:
x*(a*b)=2n*D0*x+x
(x*a)*b=2n*D1*b+y*b
=2n*D1*b+2n*D2+z
=2n*(D1*b+D2)+z
xに(a*b)を乗算したものと、(x*a)にbを乗算したものは同じである。つまり、x=zである。
((x*a)mod2n)*b=y*b
=2n*D2+z
【0048】
(x*a)をnビットの変数に格納(=2の冪乗で剰余計算)した後でも、逆数bを積算した値に2の冪乗で剰余計算した値はzである。
【0049】
結論:計算過程で桁溢れが発生しても、積算・逆数積算の関係は成り立つ。
【0050】
<White-box AESへの適用>
図4は、本発明の一実施形態に係るWhite-box AESへの適用例である。
【0051】
図4に示されるように、本発明は、White-box AES(Advanced Encryption Standard)の変換gと逆変換g
-1へ適用することができる。
【0052】
図4の(A)は、入力値に逆数g
-1(難読化成分)を積算した値にMixColumns処理を行い、次の演算と対となる難読化成分を合成したルックアップテーブルである。
【0053】
図4の(B)は、AddRoundKey処理とSubBytes処理を行った後に積算値g(難読化成分)を積算した値を出力するルックアップテーブルである。
【0054】
<効果>
このように、従来の手法では、有効な逆数算出手段がない場合には逆数を全探索で求めていたが、本発明では、2の冪乗を法とする剰余体上で逆数を高速に算出可能である。また、本発明は暗号演算に適用可能であり、nビットのブロックデータにおいて、n-1ビットのデータ量(上記の値aの組み合わせ)の演算後のデータはnビットであり、ビット数が増えない。
【0055】
<ハードウェア構成>
図5は、本発明の一実施形態に係る情報処理装置1のハードウェア構成の一例を示すブロック図である。情報処理装置1は、CPU(Central Processing Unit)1001、ROM(Read Only Memory)1002、RAM(Random Access Memory)1003を有する。CPU1001、ROM1002、RAM1003は、いわゆるコンピュータを形成する。
【0056】
また、情報処理装置1は、補助記憶装置1004、表示装置1005、操作装置1006、I/F(Interface)装置1007、ドライブ装置1008を有することができる。なお、情報処理装置1の各ハードウェアは、バスBを介して相互に接続されている。
【0057】
CPU1001は、補助記憶装置1004にインストールされている各種プログラムを実行する演算デバイスである。
【0058】
ROM1002は、不揮発性メモリである。ROM1002は、補助記憶装置1004にインストールされている各種プログラムをCPU1001が実行するために必要な各種プログラム、データ等を格納する主記憶デバイスとして機能する。具体的には、ROM1002はBIOS(Basic Input/Output System)やEFI(Extensible Firmware Interface)等のブートプログラム等を格納する、主記憶デバイスとして機能する。
【0059】
RAM1003は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)等の揮発性メモリである。RAM1003は、補助記憶装置1004にインストールされている各種プログラムがCPU1001によって実行される際に展開される作業領域を提供する、主記憶デバイスとして機能する。
【0060】
補助記憶装置1004は、各種プログラムや、各種プログラムが実行される際に用いられる情報を格納する補助記憶デバイスである。
【0061】
表示装置1005は、情報処理装置1の内部状態等を表示する表示デバイスである。
【0062】
操作装置1006は、情報処理装置1の管理者が情報処理装置1に対して各種指示を入力する入力デバイスである。
【0063】
I/F装置1007は、ネットワークに接続し、他の装置と通信を行うための通信デバイスである。
【0064】
ドライブ装置1008は記憶媒体1009をセットするためのデバイスである。ここでいう記憶媒体1009には、CD-ROM、フレキシブルディスク、光磁気ディスク等のように情報を光学的、電気的あるいは磁気的に記録する媒体が含まれる。また、記憶媒体1009には、EPROM (Erasable Programmable Read Only Memory)、フラッシュメモリ等のように情報を電気的に記録する半導体メモリ等が含まれていてもよい。
【0065】
なお、補助記憶装置1004にインストールされる各種プログラムは、例えば、配布された記憶媒体1009がドライブ装置1008にセットされ、該記憶媒体1009に記録された各種プログラムがドライブ装置1008により読み出されることでインストールされる。あるいは、補助記憶装置1004にインストールされる各種プログラムは、I/F装置1007を介して、ネットワークよりダウンロードされることでインストールされてもよい。
【0066】
以上、本発明の実施例について詳述したが、本発明は上述した特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0067】
1001 CPU
1002 ROM
1003 RAM
1004 補助記憶装置
1005 表示装置
1006 操作装置
1007 I/F装置
1008 ドライブ装置
1009 記憶媒体
【手続補正書】
【提出日】2021-07-02
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
情報処理装置が実行する、10進数の値aの逆数である10進数の値bを算出する方法であって、前記aおよび前記bは奇数であり、
前記情報処理装置のプロセッサが、前記aをビット列にするステップと、
前記プロセッサが、2の冪乗を法とする剰余体上の積算において、前記aを2の冪乗倍した値を加算するか加算しないかを選択し、加算する場合には1とし加算しない場合には0としたビット列を前記bとするステップと、
前記プロセッサが、前記bを前記aの逆数として算出するステップと
を含む方法。
【請求項2】
前記aと前記bの積をmとしたときに、前記aと、前記bと、前記mとのそれぞれを複数の配列として、前記aの逆数である前記bを算出する、請求項1に記載の方法。
【請求項3】
ホワイトボックス暗号方式のAESにおいて、前記aの逆数である前記bを算出する、請求項1または2に記載の方法。
【請求項4】
プロセッサを備え、10進数の値aの逆数である10進数の値bを算出する情報処理装置であって、前記aおよび前記bは奇数であり、
前記プロセッサは、
前記aをビット列にし、
2の冪乗を法とする剰余体上の積算において、前記aを2の冪乗倍した値を加算するか加算しないかを選択し、加算する場合には1とし加算しない場合には0としたビット列を前記bとし、
前記bを前記aの逆数として算出する、情報処理装置。
【請求項5】
10進数の値aの逆数である10進数の値bを算出し、前記aおよび前記bは奇数である情報処理装置に、
前記aをビット列にする手順と、
2の冪乗を法とする剰余体上の積算において、前記aを2の冪乗倍した値を加算するか加算しないかを選択し、加算する場合には1とし加算しない場合には0としたビット列を前記bとする手順と、
前記bを前記aの逆数として算出する手順と
を実行させるためのプログラム。