JP2022117083A - 演算システム、演算方法およびプログラム - Google Patents

演算システム、演算方法およびプログラム Download PDF

Info

Publication number
JP2022117083A
JP2022117083A JP2021013578A JP2021013578A JP2022117083A JP 2022117083 A JP2022117083 A JP 2022117083A JP 2021013578 A JP2021013578 A JP 2021013578A JP 2021013578 A JP2021013578 A JP 2021013578A JP 2022117083 A JP2022117083 A JP 2022117083A
Authority
JP
Japan
Prior art keywords
remainder
elements
prime
extension field
integer
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.)
Pending
Application number
JP2021013578A
Other languages
English (en)
Inventor
洋平 土谷
Yohei Tsuchiya
一輝 長沼
Kazuki Naganuma
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ikutoku Gakuen School Corp
Original Assignee
Ikutoku Gakuen School Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ikutoku Gakuen School Corp filed Critical Ikutoku Gakuen School Corp
Priority to JP2021013578A priority Critical patent/JP2022117083A/ja
Publication of JP2022117083A publication Critical patent/JP2022117083A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Complex Calculations (AREA)

Abstract

【課題】 有理整数を使用する慣行の方法に比較して、1/2ビット長より小さい整数型メモリのみで、演算を実行することが可能となるシステム、方法、プログラムを提供すること。【解決手段】 演算システムは、有限個の要素からなる有限体間の演算を実行するシステムであり、有限体の位数に基づき、該有限体を、冪乗根を含む拡大次数が3以上の拡大体に変換する変換手段と、変換された拡大体の要素間の演算を実行する実行手段とを含む。【選択図】 図17

Description

本発明は、有限個の要素からなる有限体間の演算を実行するシステム、方法およびプログラムに関する。
一般に、加減乗除が行える集合は、体(たい)と呼ばれ、その体が有限個の要素からなるものは、有限体と呼ばれる。例えば、全ての整数を素数5で除算すると、その余りは{0、1、2、3、4}のいずれかを取り、5つのグループに分けることができる。このグループ間でも、加減乗除が成立し、特に除法における余りは上記の5つのうちのいずれかとなる。このときのグループ数は、位数と呼ばれる。このことから、この例におけるグループの集合は、位数が5(素数)の有限体と呼ばれる。
公開鍵暗号として用いられるRSA暗号や楕円曲線暗号(ECC)では、位数が素数である有限体を使用する。暗号は、位数が大きいほど安全になる。一方で、位数が大きくなると、扱う数のビット長が大きくなり、大きなメモリが必要となる。
近年、様々のものをインターネットに接続し、当該ものの制御等を行う技術(IoT)が普及し、自動車や作業用ロボット等のセンサや制御系への情報の送受信を安全に実施するために暗号技術の適用が望まれている。しかしながら、これらのセンサ等に搭載された小さなメモリで暗号化や復号を行うことは困難である。
そこで、RSA暗号やECCを少ないメモリで実行できる技術として、位数pの有限体を、ガウス整数を使用して各グループを代表するのに使う数(代表元)により表現し、この代表元を使用して加減乗除や開平(平方根を求めること)を実行する方法が提案されている(例えば、非特許文献1参照)。
長沼一輝、他3名、"ガウス整数による有限体上の楕円曲線暗号のExcel上への実装"、電子情報通信学会技術研究報告、一般社団法人 電子情報通信学会、2019年8月22日、Vol.119、No.185、p.17-22
上記の従来の方法は、有理整数を使用する慣行の方法に比較して、1/2ビット長の整数型メモリのみで、加減乗除および開平の5つの演算を実行することができる。しかしながら、1/2ビット長と、1/2ビット長より小さいビット長との間には、数学的な問題があり、1/2ビット長より小さい整数型メモリのみで演算を実行することはできないという問題があった。
本発明は、上記課題に鑑み、有限個の要素からなる有限体間の演算を実行するシステムであって、
有限体の位数に基づき、該有限体を、冪乗根を含む拡大次数が3以上の拡大体に変換する変換手段と、
変換された拡大体の要素間の演算を実行する実行手段と
を含む、演算システムが提供される。
本発明によれば、有理整数を使用する慣行の方法に比較して、1/2ビット長より小さい整数型メモリのみで、演算を実行することが可能となる。
公開鍵暗号を使用したメッセージの送受信の流れを例示した図。 RSA暗号を使用する場合における秘密鍵および公開鍵の作成処理、暗号化処理、復号処理の流れを示したフローチャート。 楕円曲線暗号を使用する場合における秘密鍵および公開鍵の作成処理、暗号化処理、復号処理の流れを示したフローチャート。 余剰類の導出の流れを示したフローチャート。 商の条件について説明する図。 代表元同士の除算処理の一例を示したフローチャート。 各条件で実行する演算のアルゴリズムの一例を示した図。 shift演算のアルゴリズムの一例を示した図。 代表元同士の乗算処理の一例を示したフローチャート。 平方根の演算処理の一例を示したフローチャート。 N(π)-1を展開した形を表現した図。 N(π)-1を展開し、各ブロックで表した図。 0個目のブロックと3個目のブロックについて2で除算する処理の一例を示したフローチャート。 1個目のブロックと2個目のブロックについて2で除算する処理の一例を示したフローチャート。 N(π)-1の素因数2の数を求める処理の一例を示したフローチャート。 演算システムの構成例を示した図。 演算システムの機能構成の一例を示した図。 演算システムにより実行される処理の一例を示したフローチャート。
本発明の演算システム、方法およびプログラムにより実行される演算の一例として、以下に公開鍵暗号を挙げて説明するが、これに限られるものでない。まず、公開鍵暗号および公開鍵暗号を使用したメッセージの送受信について説明する。
公開鍵暗号は、暗号化と復号化に別個の鍵を使用し、暗号化の鍵を公開できるようにした暗号方式である。鍵は、暗号アルゴリズムの手順を制御するためのデータである。
図1に、公開鍵暗号を使用したメッセージの送受信の流れを示す。メッセージの受信者は、暗号化と復号化に使用する2つの鍵として、ステップ100において、秘密鍵と公開鍵とを生成する。そして、送信者は、生成した公開鍵を公開する。
ステップ101において、送信者は、公開された送信者の公開鍵を取得する。ステップ102において、送信者は、受信者へ送りたいメッセージを用意し、取得した受信者の公開鍵で用意したメッセージを暗号化する。ステップ103において、送信者は、暗号化したメッセージを受信者へ送信する。
ステップ104において、受信者は、暗号化されたメッセージを送信者から受信する。ステップ105において、受信者は、秘密に管理している受信者の秘密鍵を使用し、暗号化されたメッセージを復号する。
公開鍵暗号としては、RSA暗号や楕円曲線暗号(ECC)等がある。ここでは、公開鍵暗号として、RSA暗号とECCを取り上げて説明する。
図2は、RSA暗号を使用する場合における秘密鍵および公開鍵の作成処理、暗号化処理、復号処理の流れを示したフローチャートである。図2(a)に示す鍵の作成処理は、ステップ200から開始し、ステップ201では、2つの素数p、qを用意する。ステップ202では、用意された2つの素数p、qを使用し、(p-1)(q-1)を計算し、(p-1)(q-1)と互いに素である(p-1)(q-1)より小さい数をeとする。
ステップ203では、次の式1に示す条件を満たす最小の正の整数をdとする。式1は、(p-1)(q-1)を法としてdeと1が合同であり、de-1が(p-1)(q-1)で割り切れること、もしくはdeを(p-1)(q-1)で除算した余りが1であることを意味する。
Figure 2022117083000002
ステップ204では、n=(p×q)、eを公開鍵とし、dを秘密鍵とし、ステップ205で終了する。
図2(b)に示す暗号化処理は、ステップ210から開始し、ステップ211では、整数mを入力し、入力した整数mを平文とする。平文は、暗号化されていないデータであり、ハッシュ値である。ハッシュ値は、テキストデータ、写真データ、音楽データ等をハッシュ関数により変換された値である。
ステップ212では、m(mod.n)を計算し、これを暗号文とし、ステップ213で終了する。ステップ212では、整数mをe乗し、e乗した整数mをnで除算した時の余りが暗号文となる。
図2(c)に示す復号処理は、ステップ220から開始し、ステップ221では、送信者から受信した整数cを暗号文とする。ステップ222では、c(mod.n)を計算し、暗号文を復号する。そして、ステップ223へ進み、復号を終了する。ステップ222では、受信者が秘密に管理する秘密鍵dを用い、整数cをd乗し、d乗した整数cをnで除算した時の余りが復号文となる。
図3は、楕円曲線暗号を使用する場合における秘密鍵および公開鍵の作成処理、暗号化処理、復号処理の流れを示したフローチャートである。図3(a)に示す鍵の作成処理は、ステップ300から開始し、ステップ301では、楕円曲線作成のためのいくつかの整数を用意する。ステップ302では、楕円曲線上の有理点Pを用意する。有理点Pは、座標の値が有理数(整数と分数の総称)である空間の点である。
ステップ303では、整数nを用意する。ステップ304では、nPを計算し、Pとともに公開鍵とする。また、nを秘密鍵とする。nPは、有理点Pをn回楕円加算する楕円乗算により算出される。楕円曲線暗号で用いられる楕円曲線は、次の式2に示す式を満たす点と、無限遠点O=(∞,∞)によって与えられる曲線である。
Figure 2022117083000003
上記式2中、a、bは、ある体Kに属する数である。その楕円曲線のK-有理点の集合E(K)は、次の式3に示すように定義される。
Figure 2022117083000004
無限遠点ではない任意の点P=(x,y)、Q=(x,y)は、E(K)に属し、その加算R=P+Q=(x,y)は、次の式4に示すように定義される。ちなみに、加算において無限遠点Oは、単位元となるため、P+O=O+P=Pとなる。
Figure 2022117083000005
上記のnPは、P+Pを上記式4により計算して2Pを得、2P+Pを上記式4により計算して3Pを得、Pがn回加算されるまでこれを繰り返すことにより算出される。このようにして公開鍵と秘密鍵が作成されたところで、ステップ305へ進み、作成処理を終了する。
図3(b)に示す暗号化処理は、ステップ310から開始し、ステップ311では、楕円曲線上の有理点Mを平文とする。ステップ312では、整数kを用意する。
ステップ313では、kBを楕円乗算により計算し、これを暗号文Cとし、kPを楕円乗算により計算し、MとkPの楕円加算を行い、その結果を暗号文Cとし、ステップ314で暗号化処理を終了する。
図3(c)に示す復号処理は、ステップ320から開始し、ステップ321では、送信者から受信した暗号文C、Cを受信する。そして、CからnCの楕円減算を行い、暗号文を復号する。楕円減算は、楕円加算の逆演算である。暗号文を復号したところで、ステップ322へ進み、復号処理を終了する。
RSA暗号では、dを求める際、暗号文を作成する際、暗号文を復号する際等に、剰余類の導出が必要になる。また、楕円曲線暗号では、上記式2の左辺に(mod.p)が付くため、有理点P、Mの算出や、楕円加算、楕円乗算、楕円減算を行う際に剰余類の導出が必要になる。なお、この楕円曲線暗号におけるpは、任意の素数を意味する。
図4は、剰余類の導出の流れを示したフローチャートである。ステップ400から開始し、ステップ401では、被除数をaとし、除数をbとし、商をq、剰余をrとした場合、aをbで除算し、商qを計算する。ステップ402では、bとqを乗算し、aからb×qを減算し、剰余rを計算する。剰余rの計算が終了したところで、ステップ403で、剰余類の導出を終了する。
例えば、除数として素数5を選択する。すると、全ての整数を素数5で除算すると、何らかの商が得られ、剰余(余り)が0、1、2、3、4のいずれかとなる。これは、余りが0のグループ、1のグループ、2のグループ、3のグループ、4のグループのように5つのグループに分けられることを意味する。これらの5つのグループ間では、四則演算(加減乗除)が成立する。
具体的には、余りが2の数と余りが4の数を加算すると余りが1の数となり、加算が成立し、余りが1の数から余りが4の数を減算すると余りが2の数となり、減算が成立する。また、余りが3の数に余りが3の数を乗算すると余りが4の数となり、乗算も成立する。また、この例では除法(分数の概念)も成立する。例えば、余りが4の数を余りが3の数で割ると、余りが3の数となる。これは、4/3=3を意味する。他の例としては、余りが3の数を余りが2の数で除算すると、余りが4の数となる。これは、3/2=4を意味する。整数を、任意の整数で割ってできる余りグループの間では常に、加減乗除を行うことができるが、除法(分数)が存在するとは限らない。しかしながら、整数を素数で割ってできる余りグループの間では、常に除法も可能となることが知られている。
このような加減乗除が行える集合が体(たい)であり、有限個の要素からなる体が有限体である。整数を素数5で除算する場合、整数は無限に存在するが、その余りのグループの数は5つしか存在しない。このグループの数が位数であり、余りの集合{0、1、2、3、4}は、位数が5の有限体となる。
有限体の位数は必ず素数の冪乗であることが知られているので、位数がpの有限体Kは、通常下記式5のように表記される。
Figure 2022117083000006
上記式5は、慣習に従ってn=1とすると、K=Fpとなる。なお、式5中ではFの字体が中抜き文字とされている。これは、以下で説明するZも同様である。
RSA暗号は、暗号文で得られる余りをd乗して復号することから、乗法群K×を利用する暗号である。楕円曲線暗号は、K上の楕円曲線の加法定理が作る部分乗法群を利用する暗号である。これらの暗号では、アルゴリズムを細かく分割すると、K上の加減乗除の演算が必要となる。楕円曲線暗号では、さらに、y=(xの3次式)で表される楕円曲線において、両辺の平方根をとることで座標yを算出するため、平方根の算出(開平)も必要となる。しかしながら、RSA暗号では、加減乗除の4つの演算以外、楕円曲線暗号では、加減乗除と開平の5つの演算以外の演算は必要としない。
ところで、RSA暗号や楕円曲線暗号では、Kの位数が大きいほど暗号強度が上がることが知られている。したがって、安全に通信を行うためには、出来るだけ大きい位数のKを使用することが望ましい。しかしながら、位数を大きくすると、扱う数のビット長が大きくなり、使用するメモリも、大きいものを使用しなければならない。
ここで、位数が5の有限体の場合、5個の要素を有することになるが、その5個の要素を表現するために、どのくらいのメモリが必要になるかを考えてみる。余りが1の数を表現するため、7158431という数を使用してもよいが、このように桁数が多い(ビット長が大きい)数を使用することは好ましくない。
そこで、出来るだけ小さい数として、{0、1、2、3、4}の5つを代表として扱うことができる。このような代表として扱う数は、代表元と呼ばれる。しかしながら、これらの5つの数を代表元として扱う場合、最も大きい数である4は、2進数で表現すると「100」となり、3ビットが必要となる。そこで、絶対値がもう少し小さい数として、{-2、-1、0、1、2}を代表元として選ぶことができる。符号を除き、最も大きい数が2であり、2ビットで表現することができる。
このようにして位数が素数pの有限体で暗号アルゴリズムを実行しようとした場合、概ねp/2程度の絶対値をもつ整数を扱わなければならないと考えられる。実際、このような代表元を使用することが慣行の方法である。
そこで、慣行の方法を改良し、ガウス整数(m+ni)という複素数(m、nは整数)を使用して、暗号アルゴリズム全体を、慣行の方法の1/2のビット長のメモリで実現できるようにした方法が、上記の非特許文献1に記載の方法である。
この方法では、ガウス整数として1+2iを使用しても、余りがi、-i、0、1、-1の5つしかなく、これらを代表元とすると、整数を5で割ったときの代表元{-2、-1、0、1、2}よりさらに絶対値が小さい。
実際に、5は、(1+2i)(1-2i)と素因数分解することができ、1、2のビット長は、√5のビット長と同程度で済むことが分かる。つまり、√5=5^(1/2)であるから、素数5に比較してビット長が1/2で済むのである。
ビット長が1/2で済むのは、実部と虚部という2つの基底をもつ整数で考えたからであり、3つ以上の基底をもつ整数で考えれば、ビット長を1/2より小さくすることができると考えられる。
しかしながら、ビット長を1/2にするために使用した数字は、2次拡大体の理論と呼ばれ、整数論の中でも古典に属し、よく知られた理論である。ビット長を1/2より小さくするには、ビット長を1/3、1/4、…にすることであるから、3次以上の拡大体の理論となるが、これは確立した理論ではなく、現在でも研究が盛んな未知の領域である。
本発明では、冪乗根を含む拡大次数が3以上の拡大体を使用することで、ビット長を1/2より小さくできることを見出した。具体的には、2の3乗根(η)を使用し、a+bη+cη(a、b、cは整数)と表現される数をη整数とし、a’+b’η+c’η(a’、b’、c’は整数)と表現される数をη素数とし、η整数をη素数で割った余りを使って有限体を表現する。ここでは、3乗根を使用する場合について説明するが、4乗根や5乗根等を使用して表現してもよい。
整数を素数pで割った余りをZ/pZと表すと、適当なη整数の、素数に似た性質を満たす素元πが存在し、次の式6のようになることがある。
Figure 2022117083000007
例えば、素数pが89で、素元πが1+2η+3ηの場合や、素数が2423で、素元が3+4η+9ηの場合等である。素数が89の場合、89を表現するために7ビットが必要で、2423を表現するために12ビットが必要である。一方、素元が1+2η+3ηの各成分(1、2、3)は、最も大きい3で2ビットが必要で、素元が3+4η+9ηの各成分(3、4、9)は、最も大きい9で4ビットが必要である。すると、η整数をη素数で割った余りで表現するほうが、1/3程度のビット長で表現することができ、小さいメモリで表現できることになる。
素数pを89とし、整数を89で割った余りは、位数89の有限体となる。素元を1+2η+3ηとし、η整数を素元1+2η+3ηで割った余りも、89個しかなく、加減乗除が行え、位数89の有限体となる。しかしながら、89個の代表元をどのようにして見つけるかが問題となる。
慣行の方法では、整数をnとし、素数をpとすると、浮動小数点でn/pを計算し、四捨五入で整数にしたものをqとした場合、ユークリッド除法によりn/p=:q+r’となり、r’の絶対値は1/2以下となる。すると、n=:p×q+r(r=r’×p)となり、rの絶対値はp/2以下となる。rが取り得る数(整数)の個数は、pに等しい。このことから、代表元は{-(p-1)/2、…、0、…、(p-1)/2}と導出できる。これは、ビット長がp、すなわちbit(p)で表現することができることを意味する。ちなみに、記号「=:」は、等しいと定義することを意味する。
慣行の方法やガウス整数を使用する2次拡大体では、絶対値を使用し、代表元を導出することができた。拡大次数が3次以上の拡大体では、絶対値を定義することができないことから、絶対値に代替するものとしてノルムを使用する。ここで、ノルムは、整数をη整数に整拡大することに付随し、積を保つノルムN:Z[η]→Zという関数が自然に定義される。ノルムNは、次の式7のように定義され、式8、式9の性質を持つことが知られている。
Figure 2022117083000008
Figure 2022117083000009
Figure 2022117083000010
上記式7、8中、a,bは整数で、uは単数(unit)である。Z[η]/πZ[η]の位数はN(π)であることが知られている。
素数pのノルムは、上記式7のb、cが0で、aがpである場合に相当するため、N(p)=pである。素数pがp=αβという形に、η整数αとβの積に分解できるものとする。すると、上記式8から、N(p)=N(αβ)=N(α)N(β)と表される。このことから、N(α)は、1もしくはpの値を取り、N(β)は、pもしくはpの値を取る。N(α)が1の場合、αは上記式9により単数となり、pはZ[η]でも素元となる。また、N(α)がpの場合、αがZ[η]の素元となる。このことから、π=a+bη+cηと置いた場合、p=π×π(ただし、πの頂部に-が付く)と分解するとき、上記式6に示す関係が生じる。N(α)=(a、b、cの3次式)=pであることから、a、b、cが、pの1/3乗のオーダーの数であることが保証される。すなわち、a、b、cのビット長はpのビット長の約1/3である。
例えば、Z[η]に含まれるη整数をxと置き、x=x+xη+xηとする。x、x、xは、整数である。ここでは、x(i=0、1、2)で表し、xの第i成分と呼ぶ。
xをπで除算し、各成分を四捨五入で整数にしたものをκとした場合、x/π=:κ+ρ’となり、余りの各成分ρ’の代表元は、全てがmax(bit(a)、bit(b)、bit(c))以下で取れると考えられる。max(bit(a)、bit(b)、bit(c))以下とは、約bit(p)/3以下で、慣行の方法の約1/3のビット長で表現でき、約1/3のメモリで演算ができることを意味する。
各成分ρ’は、絶対値を取ると、1/2以下となるが、ρ’のノルムN(ρ’)の絶対値は、1より大きくなることがある。すると、α=:π×κ+ρとなり、N(ρ)の絶対値がN(π)の絶対値より大きくなることがある。
そこで、x/πではなく、x/πに係数を乗算したものを使用して代表元を取る。係数は、所定の整数であり、拡大次数が3の場合、係数を4とすることが望ましい。4x/πを計算し、各成分を四捨五入で整数にしたものを商κ’とし、その余りをρ’とすると、ρ’の絶対値は1/2以下となる。
4x/πは、分母と分子にπに共役な数π(ただし、頂部に-が付く)を乗算すると、分母が素数pとなる。したがって、4xπ(ただし、頂部に-が付く)/pにより計算することができる。
商κ’は、例えばq’+q’η+q’ηで表され、q’、q’、q’は、商κ’の成分である。そのときの余りをr’+r’η+r’ηで表すと、4x/πは、下記式10で表すことができる。式10中、r’、r’、r’は、余りの各成分の値である。
Figure 2022117083000011
上記式10を整理すると、下記式11のように表すことができる。
Figure 2022117083000012
上記式11において、商の(q’/4+q’η/4+q’η/4)が整数であるならば、余りのπ(r’/4+r’η/4+r’η/4)も整数となる。r’の絶対値は、1/8以下であることから、N(r’/4+r’η/4+r’η/4)が1以上となることはない。したがって、余りのノルムN(π(r’/4+r’η/4+r’η/4))は、上記式8によりN(π)N(r’/4+r’η/4+r’η/4)となり、N(r’/4+r’η/4+r’η/4)が1より小さいことから、余りが除数であるN(π)より必ず小さくなる。
上記式11を参照すると、商の各成分q’には、1/4が掛かっている。このため、q’が4の倍数になるように、任意の数を加算もしくは減算し、加算または減算した数を余りの対応する成分r’において減算もしくは加算することで、商の各成分を整数とする。このようにして、商の各成分を整数とした後の余りを、3次拡大体の要素である代表元として取ることができる。
商の各成分q’の数によって4の倍数にするための加算もしくは減算する数が異なるため、場合分けして考える。図5を参照して、商の条件である、case1からcase4の4つの場合に分けてどのように演算するかを説明する。
case1は、κ’の成分、すなわちq’、q’、q’の少なくとも1つに4の倍数が存在する場合である。この場合、4の倍数については加算もしくは減算しないで4の倍数のままとし、4の倍数より1大きい数に対しては1減算し、1小さい数に対しては1加算して4の倍数とする。また、4の倍数より2大きい数に対しては、余りが正負のいずれかによって符号を変え、余りが正の場合、2加算し、余りが負の場合、2減算する。
例えば、q’が5であったために1減算し、4とした場合、対応する余りの成分r’(iが同じ成分)に1加算し、整合性をとる。
case2は、q’、q’、q’の全ての成分が4の倍数より1大きい、もしくは1小さい数の場合である。この場合、case1と同様の演算を行う。
case3は、q’、q’、q’のうちの2つの成分が4の倍数より1大きい、もしくは1小さい数で、かつ1つの成分が4の倍数より2大きい数の場合である。この場合も、case1と同様の演算を行う。
case4は、q’、q’、q’のうちの1つの成分が4の倍数より1大きい、もしくは1小さい数で、かつ残りの2つの成分が4の倍数より2大きい数の場合である。この場合は、q’もしくはq’が4の倍数より1大きい、もしくは1小さい数であるとき、q’もしくはq’に対して1減算もしくは1加算して4の倍数とする。q’が4の倍数より1大きい、もしくは1小さい数であるとき、q’に対して1減算もしくは1加算し、q’およびq’に対して2減算もしくは2加算して4の倍数とする。
演算に必要なビット長について検討してみると、加算では1ビット増加する程度であるから、最もビット長が大きくなる演算は乗算である。4x/πの余りを計算する上で、余りρ’にπを乗算する必要があり、このときのビット長が最も大きくなる。例えば、π=a+bη+cηとし、ρ’=ρ’+ρ’η+ρ’ηとすると、その乗算した値は(aρ’+2bρ’+2cρ’)+(aρ’+bρ’+2cρ’)η+(cρ’+aρ’+bρ’)ηとなる。
πで除算したときの余りの成分ρ’の絶対値は、1/8以下であるが、商を4の倍数にするために任意の値を加算等し、調整を行うため、余りの成分ρ’の絶対値が変化する。成分ρ’の絶対値は、変化したとしても5/8よりは小さい。
上記の乗算した値は、整数部(aρ’+2bρ’+2cρ’)、η部(aρ’+bρ’+2cρ’)、η部(cρ’+aρ’+bρ’)から構成される。ρ’は、1/2程度で、ρ’と乗算するとビット長を1減らし、加算や2倍はビット長を1増加させる効果を有する。このことから、a、b、cの中で最も大きいビット長に1加算した程度のビット長で演算が実現できる。
例えば、素数89で割った余りの代表元は、bit(89)のビット長が必要である。bit(89)のビット長は、底を2とする89の対数の値を、小数点以下を切り上げて7ビットとなる。一方、対応する素元(1+2η+3η)で割った余りの代表元は、最も大きい成分が3であることから、bit(3)+1.5程度で実現できる。なお、数値実験を行ったところ、+1.5が不要で、bit(3)で実現できることが分かった。bit(3)は、2ビットであることから、1/3程度のビット長で実現できることが分かる。
以上のようにして、η整数に所定の係数として4を乗算し、それをη素数で除算して余りを計算する、特別なユークリッド関数を使用することで、3次以上の拡大体の代表元を取ることができる。
(0065)段落から(0086)段落で説明した方法は、有限体の要素同士で除法を行う際にも利用される。除法において商をどうやって求めるかは、どのように逆元を求めるか、という問題と考えられる。例えば、整数を5で割った余りの集合{0、1、2、3、4}において、4/3=3という右辺の3をどのようにして求めるかという問題である。4/3=4×(1/3)であるため、4/3を求めるには、1/3、すなわち3の逆元が分かればよい。
慣行の方法では、ユークリッドの互除法を使用する。ユークリッドの互除法により、互いに素な2つの整数a、bに対して、ax+by=1を満たす整数x、yの組を求めることができる。上記の例で言えば、3x+5y=1を満たす整数x、yを求めることができる。この式は、3xは1余るグループに属する数であることを意味している。したがって、xが属するグループは3が属するグループの逆元であると分かる(今の場合、x=2である。)。
この点に関しては、有限体をZ[η]/πZ[η]で表現する場合でも全く同様である。逆元は、ユークリッドの互除法を用いて求める。ただし、互除法を実行する際に用いるユークリッド関数は、余りグループを求める際に定義したユークリッド関数を用いる。例えば、整数を例にとると、3x+5y=1を満たす整数x、yを求める場合、互除法のアルゴリズムは5を3で割った余りを求めるところから始まる。同様に、Z[η]/πZ[η]における互除法も、2つのη整数の割り算の商と余りを求める操作で構成される。Z[η]のような、通常の整数以外の整数では、割り算の商と余りの定義が問題となる。特に余りが常に除数よりも、何らかの意味で小さくなるような割り算を備えていなければ、互除法のアルゴリズムは終了しないで無限に続いてしまう。この余りの大きさを評価する関数がユークリッド関数と呼ばれる。上述した方法は、ノルムをユークリッド関数に用いた除算が可能であること、およびその具体的な方法を示すものである。また、除算の手続き、すなわち互除法が、ビット長の制限を破らないことも示している。
したがって、整数型メモリでは小さいメモリしか使用しない。本発明では、整数型メモリを小さくすることを対象としている。しかしながら、メモリには、整数型メモリと小数型メモリがある。このため、小数型メモリについても簡単に触れておく。
小数型メモリは、指数部と仮数部とから構成される。例えば、2.35という小数は、235×10-2であり、仮数部(数字の列)を235、指数部(小数点の位置)を-2とし、2つの情報で格納される。
整数型メモリが7ビットであるCPUがある場合、小数型メモリも仮数部と指数部を合わせて7ビット程度と考えられる。例えば、112を89で除算する場合、1.25842…となるが、7ビットで格納しようとすると、1.2(仮数部12(4ビット)、指数部-1(2ビット))しか格納できない。しかしながら、計算上、四捨五入するとどういう整数になるかが必要になるだけであるため、小数点以下1ケタのみで十分である。
被除数が112よりもっと大きい値ではどうかという問題が発生するが、暗号アルゴリズムではこのような大きい値は登場しない。代表元が7ビット以下の89より小さい数だからである。したがって、整数型メモリとビット数が同等の小数型メモリで十分に演算を行うことが可能である。
この点につき、89等の素数ではなく、1+2η+3η等のη素数を素元として扱う本発明でも同様のことが言えるかどうかが問題となる。η整数をη素数で除算する場合、η整数×1/η素数とし、まず、η素数に共役な数を分子分母に掛け、分母を有理化し、小数にする。そして、η整数に、得られた小数をかける。このとき、制限ビット長を破る数が出てくるが、これらの数は小数型で表現され、全て近似値に置換される。例えば、89という値は、90に近似され、9×10として、仮数部9、指数部1で格納される。このような近似を行っても、四捨五入の結果が狂うような誤差が生じないからである。
η整数の仮数部と、得られた小数の仮数部の積が、η整数をη素数で除算したときの仮数部となり、η整数の指数部と、得られた小数の指数部の積が、η整数をη素数で除算したときの指数部となる。
暗号アルゴリズムでは、η整数とη素数のオーダーが同程度の場合しか登場しないため、指数部が結局のところ-1となり、仮数部は四捨五入を正確に行うために2ケタ格納されていれば十分である。そうすると、η整数の仮数部や1/η素数の仮数部も、2ケタ格納されていれば十分であり、また、1/η素数を有理化する場合も、仮数部が2ケタ格納されていれば十分である。このように、仮数部にはそれほど精度が必要ないことから、小数型メモリで考えても、小さなメモリで十分に演算を行うことが可能である。
次に、代表元同士の加減乗除および開平について説明する。代表元同士、すなわち3次以上の拡大体の要素(グループ)間の加算および減算については、慣行の方法と同様、単純に加算もしくは減算した結果とすることができ、結果が代表元の最も大きい数より大きい場合、素元の数を減算し、代表元の最も小さい数より小さい場合、素元の数を加算する。
代表元同士の乗除および開平は、慣行の方法を使用することができないため、各演算の方法について以下に詳細に説明する。最初に、代表元同士の除算について説明する。代表元の2つの数を余りとして持つη整数をα、βとし、α÷βの余りを求めるものとする。
図6にα÷βの演算処理の一例を示したフローを示し、図7にそのアルゴリズムを例示する。αは、a、a、aを各成分とするη整数で、βは、p、p、pを各成分とするη整数である。a、a、a、p、p、pは、いずれも整数である。
演算処理は、ステップ500から開始し、ステップ501では、αをβで除算するのではなく、上記の代表元を算出した場合と同様、係数4を乗算し、4αをβで除算し、各成分の小数点部分を切り捨て、それを商κとする。ステップ502では、κの条件に従ってκの成分を全て4の倍数にする。
ここで、κの条件は、以下の通りである。
条件1:κのどれか1つの成分が4で割り切れる、もしくはκの全ての成分が奇数である、もしくはκの成分の2つが奇数で残り1つが2で割ると奇数になる場合
条件2:条件1以外の状況でκの成分のどれか1つのみが奇数である場合、
条件3:条件1、条件2以外の場合
各条件で実行する演算は、図7に示すアルゴリズム内に示している。アルゴリズム中、κ(0)、κ(1)、κ(2)は、4α/βの商の小数点以下を切り捨てたときの各成分の数である。また、shift(k,r)については、図8にそのアルゴリズムを示す。
κの成分を4の倍数にする場合、その成分に任意の数を加算もしくは減算して4の倍数にするが、その加算もしくは減算した数だけ余りにおいて減算もしくは加算する。
再び図6を参照して、ステップ503において4の倍数としたκの各成分を4で除算し、余りの各成分も4で除算し、ステップ504で終了する。商κが整数であれば、余りも整数となる。演算中のビット長は、代表元を取る場合と同様、素数で割った余りを計算する場合に比較して、η素数で割った余りを計算する本方法では、ビット長を1/3程度に抑えることができる。
図9を参照して、代表元同士の乗算について説明する。代表元の2つの数を余りとして持つη整数をα、βとし、α×β(mod.π)を求める。αとβを乗算する場合、α、βの成分によって乗算した値のビット長が大きく変わる。例えば、6、7は、いずれもビット長が3であるが、乗算して得られた値42は、ビット長が6となる。このため、乗算において6ビット以上必要となる。
そこで、αとβのいずれか一方のη整数を変形する。πは、1+2η+3ηであり、ηは2の3乗根である。例えば、α=3+5η+7ηとすると、α=(1+2)+(1+4)η+(1+2+4)ηとし、η=2であることから、α=(1+η)+(1+η)η+(1+η+η)ηとなる。
η=1であることから、整理すると、α=1×η+1×η+1×η+1×η+0×η+1×η+0×η+1×η+1×ηとなる。ηの部分が2である場合、この表現は、2進数展開である。このため、ηを使用したこの表現を、η進数展開と呼ぶ。αをη進数展開すると、「11101011(η)」となる。「(η)」は、η進数展開であることを表す。
次に、β=2+3η+4ηとし、α×βを計算する。α×β=(2+3η+4η)(1×η+1×η+1×η+1×η+0×η+1×η+0×η+1×η+1×η)のように表すことができる。
ここで、整数の乗算について考えてみる。a=7、b=6とし、素数p=11とする。bを2進数展開すると、2+2+0となる。したがって、a×b=7×(2+2+0)=7×2+7×2+7×0となる。
次数の最も大きいものから順に考え、(7×2)は((7×2)×2)で表されることから、次数を1つ減じたときの係数(7×2)を取り出す。7×2=14で、素数11で除算すると、余りが3となる。a×bは、余り=3を用い、3×2+7×2+0=(3+7)×2+0で表すことができる。(3+7)×2=20を素数11で除算すると、余りが9となる。
通常の計算では、7×6=42を算出し、42を11で除算して余りを計算するため、42を表現するために6ビット長の大きさが少なくとも必要になる。しかしながら、上記の方法では、最大20という値しか出てこないため、5ビット長程度で済むことから、ビット長を抑えることができる。
このビット長を抑える方法を使用し、α×βを計算する。次数が最も大きいものは、ηであるから、次数を1つ減じたときの係数(1×η)を取り出し、βと乗算する。すなわち、η(2+3η+4η)である。この乗算では、最もビット長が大きいものがη×4η=4×η=4×2=8となり、4ビット長あれば表現できる。これをπで除算し、余りを計算する。余りの計算については既に説明したので、ここでは詳述しない。
余りを、例えば4+2η+3ηとすると、次の次数につき、次数を1つ減じたときの係数(1×η)を取り出し、余り4+2η+3ηと乗算し、その結果とβを乗算し、πで除算して余りを計算する。これを繰り返すことで、α×βをπで除算したときの余りを計算することができる。
この演算の内容を表したものが図9である。すなわち、ステップ600から開始し、ステップ601では、代表元の1つをσとし、σを余りρとして入力する。ステップ602では、αとρが異なるかどうかを判定する。異なる場合、ステップ603へ進み、αの成分の1つであるα(0)を2で除算した余りをrとする。すなわち、η進数展開をし、次数の最も大きいものの係数α(0)が1の場合、r=1となり、0の場合、r=0となる。
ステップ604では、r=1か否かを判定する。r=1の場合、ステップ605へ進み、係数α(0)の符号(正もしくは負)に応じてβを加算もしくは減算し、素元πで除算したときの余りをρとして計算する。一方、r=0の場合、ステップ606へ直接進む。
ステップ606では、βとηとを乗算してπで除算した余りをβとし、ステップ607では、ステップ603でα(0)を2で除算したことから、α(0)の成分がその商となり、それをπで除算したときの余りをαとして計算する。その後、ステップ602へ戻り、再びαとρが異なるかどうかを判定する。
ステップ602でαとρが等しくなった場合、ステップ608へ進み、そのときのρを余りとして出力し、ステップ609で乗算を終了する。
楕円曲線暗号では、上記式2に示すように、楕円曲線上の点を取った場合の座標yを計算する際、平方根を計算する必要がある。η整数をαとし、素元πで除算したときの余りの平方根を√α(mod.π)と表す。α=p+pη+pηとすると、ノルムN(π)は、上記式7より、N(π)=p +2p +4p -6pと表すことができる。
平方根は、ノルムN(π)-1を2で何回割れるか、すなわち割れる最大の数を求めると、その後は加減乗除だけを使用して求めることができる。これは、楕円曲線に関するトネリのアルゴリズムと呼ばれている。このことから、平方根は、N(π)-1が2で何回割れるかを考えるだけでよい。そして、割れる最大数を求めるためのアルゴリズムにおいてビット長が予め指定した制限ビット長を超えなければよい。制限ビット長は、慣行の方法の1/3程度のビット長である。
したがって、図10に示すように、平方根の演算は、ステップ700から開始し、ステップ701で、N(π)-1を2の奇数の形に分解する。ステップ702で、加減乗除を駆使して平方根を計算し、ステップ703で演算を終了する。
平方根を計算するにあたって、αの各成分p、p、pを、図11に示すようにp10、p11、p20、p21、p30、p31とmを用いて表し、上半分のビットと下半分のビットに分ける。pで言えば、上半分のビットがp10であり、下半分のビットがp11である。
具体的に説明すると、pが11である場合、ビット(2進数)で表すと、「1011」となる。これを「10」と「11」の2つに分け、「10」を上半分のビット、「11」を下半分のビットとする。
N(π)の各成分(項)は、上記式7により計算することができ、図11に示す形となる。すなわち、N(π)は、23mの項、22mの項、2の項、それ以外の項の4つの項で構成される。これを、図12に示すようにブロックで表し、それ以外の項を0個目のブロック、2の項を1個目のブロック、22mの項を2個目のブロック、23mの項を3個目のブロックとする。0個目のブロックと3個目のブロックは同じ形で表現され、1個目のブロックと2個目のブロックは同じ形で表現されているため、0個目のブロックと3個目のブロックは同じアルゴリズムを使用し、1個目のブロックと2個目のブロックも同じアルゴリズムを使用し、0個目のブロックもしくは3個目のブロックと1個目のブロックもしくは2個目のブロックは別のアルゴリズムを使用して、2で割ることを行う。
図13を参照して、0個目のブロックと3個目のブロックについて2で除算する処理について説明する。0個目のブロックと3個目のブロックは、a、b、c、dの4つの入力変数を有し、一般式としてf(a,b,c,d)=a+2b+4c-6abc+dのように表すことができる。
ステップ800から演算を開始し、ステップ801において変数a、b、c、dを入力し、2で割れた回数rを初期値0とする。ステップ802では、f(a,b,c,d)を2で割った余りremを計算する。
ステップ803で、rem=0か否かを判定する。rem=0の場合、さらに2で割れることを示す。このため、ステップ804へ進み、f(a,b,c,d)をさらに2で割る。そして、ステップ805でその余りremを計算し、rの値を1加算し、ステップ803に戻る。f(a,b,c,d)が2で割れる間は、ステップ803からステップ805の処理が繰り返される。
ステップ803で、rem=0でないと判定された場合、それ以上2で割れないことから、ステップ806で、rを2で割れた最大の数(ブロック内の素因数2の数)とし、ステップ807で演算を終了する。
図14を参照して、1個目のブロックと2個目のブロックについて2で除算する処理について説明する。1個目のブロックと2個目のブロックは、a、b、c、dの4つの入力変数を有し、一般式としてf(a,b,c,d)=a×a+b×b+c×c+dのように表すことができる。
ステップ900から演算を開始し、ステップ901において変数a、b、c、dを入力し、2で割れた回数rを初期値0とする。ステップ902では、f(a,b,c,d)を2で割った余りremを計算する。
ステップ903で、rem=0か否かを判定する。rem=0の場合、さらに2で割れることを示す。このため、ステップ904へ進み、f(a,b,c,d)をさらに2で割る。そして、ステップ905でその余りremを計算し、rの値を1加算し、ステップ903に戻る。f(a,b,c,d)が2で割れる間は、ステップ903からステップ905の処理が繰り返される。
ステップ903で、rem=0でないと判定された場合、それ以上2で割れないことから、ステップ906で、rを2で割れた最大の数(ブロック内の素因数2の数)とし、ステップ907で演算を終了する。
図15にN(π)-1の素因数2の数を求めるフローを示す。ステップ1000から開始し、ステップ1001においてi個目のブロックのi=0とし、素因数2の数cを初期値の0とする。
ステップ1002では、i個目のブロックから素因数2の数を数える。i個目のブロックの素因数2の数は、図13および図14に示したフローにより算出することができる。得られた数がrである場合、ステップ1003において、c+rをcとし、i+1をiとし、ステップ1004で、(N(π)-1)/cを計算し、その値が偶数か否かを判定する。偶数である場合、ステップ1005へ進み、iが3以下か否かを判定する。iが3以下である場合、数えるべきブロックが存在するため、ステップ1002へ戻る。
ステップ1004で、(N(π)-1)/cの値が奇数である場合、ステップ1005で、iが3を超える場合、ステップ1006へ進み、cを素因数2の数とし、ステップ1007で演算を終了する。
図16に、このような演算を行うシステムの構成例を示す。演算システムとしては、例えばPC(Personal Computer)等のコンピュータを挙げることができる。ここでは、PCとしてそのハードウェア構成について簡単に説明する。PCは、ハードウェアとして、CPU(Central Processing Unit)10と、ROM(Read Only Memory)11と、RAM(Random Access Memory)12と、HDD(Hard Disk Drive)13と、入出力I/F14と、入力装置15と、表示装置16と、通信I/F17と、バス18とを含む。
CPU10は、PC全体を制御し、これまでに説明したアルゴリズムに従って演算を実行する。ROM11は、PCを起動するプログラム等を記憶する。RAM12は、CPU10に対して作業領域を提供する。HDD13は、CPU10に対し、上記のアルゴリズムに従って演算を実行させるためのプログラムやその他のプログラム、データ等を記憶する。
入出力I/F14は、情報の入出力を制御するためのインターフェースである。入力装置15は、マウスやキーボード等の情報を入力し、複数の情報の中から選択するための装置である。表示装置16は、入力した情報や選択するための情報、演算の結果等を表示するための装置である。通信I/F17は、PCをネットワークに接続するためのインターフェースである。バス18は、CPU10、ROM11、RAM12、HDD13、入出力I/F14、通信I/F17を接続し、情報のやり取りを可能にする。
図17は、PCの機能構成の一例を示したブロック図である。PCは、CPU10がプログラムを実行することにより各機能部を生成し、各機能部により上記の演算の実行を実現する。ここでは、各機能部をCPU10によるプログラムの実行により実現しているが、これに限られるものではなく、演算の一部または全部を回路等のハードウェアで実現されていてもよい。
PCは、機能部として、有限体の要素の個数に基づき、該有限体を、冪乗根を含む拡大次数が3以上の拡大体に変換する変換部20と、変換された拡大体を構成する冪乗根を含む要素間の演算を実行する実行部21とを少なくとも含む。
変換部20は、上記の代表元を取る処理を実行する。有限体の要素の個数は、素数pである。有限体は、整数を素数pで割った余りの集合である。変換部20は、素数pを、冪乗根を含む数(例えばη素数)に分解し、整数を、冪乗根を含む数に整拡大し、整拡大した整数(例えばη整数)を、分解された数(例えばη素数)で除算した余りの集合を求め、拡大次数が3以上の拡大体に変換する。
実行部21は、拡大体の要素間、すなわち代表元同士の加減乗除の演算を行う。実行部21は、代表元同士の加減乗除のほか、必要に応じて開平(平方根を取る演算)を実行する。実行部21は、上記で説明したアルゴリズムに従い、演算を実行する。
変換部20および実行部21が実行する具体的な処理の内容については、既に説明したので、ここではその説明を省略する。すなわち、変換部20は、3次以上の拡大体に変換する処理を行い、実行部21は、3次以上の拡大体の要素を余りにもつη整数間の加減乗除および開平を実行する処理を行う。なお、上記に説明した処理を実現するために他の機能部を備えていてもよい。
図18は、図17に示した機能部により実行される処理の一例を示したフローチャートである。暗号化あるいは復号において、ある数を素数で割った剰余間の演算の要求を受け付けた場合にステップ1100から処理を開始する。ここでは、拡大次数を3として説明する。ステップ1101では、変換部20が素数をη素数に分解し、η整数をη素数で割った余りを計算し、整数を素数で割った余りの集合である有限体を3次拡大体に変換する。3次拡大体の要素は、代表元とされる。
ステップ1102では、実行部21が代表元同士の加減乗除および開平を実行する。これにより、平文が暗号化あるいは復号される。実行部21による演算が終了したところで、ステップ1103で演算を終了する。
以上に説明してきたように、本システムおよび本方法により、素数pの値は同じでも、慣行の方法の約1/3のビット長メモリでRSA暗号や楕円曲線暗号を実装することが可能となる。この方法を実現するためのアルゴリズムの抽象度は高いため、どのような言語、場面であっても利用が可能である。したがって、車や制御系のセンサ等、メモリが小さく、CPUが原始的なパーツと、中央処理系との情報のやり取り等に有効となる。
慣行の方法の約1/3のビット長で演算が実行できることは、例えば、整数型メモリの制約がnビットの元で、3nビットの情報を送受信する場合、3回に分けて送受信するのではなく、1回で3nビットの情報を送受信できることを意味する。このため、情報を分けること、すなわち送受信回数を多くすることで、安全性や効率性が損なわれるような場面に有効である。
例えば、自動車の通信制御系を司る通信プロトコルであるCAN(Controller Area Network)では、現在4ビット程度の符号文をミリ秒オーダーの通信頻度で制御信号を送受信している。このような通信条件であれば、本システムや本方法を適用することにより、他の機能を損なうことなく、3倍の12ビット程度まで暗号強度を上げることができる。要するに、CPUやメモリが貧弱あるいは特殊なパーツへの暗号の送受信に特に効果的である。
また、送金等の情報を小分けにせずに一度に送りたい場合に有効である。送金の情報は、送金額、送金元口座情報、送金者情報等の複数の情報を含むことから、本システムや本方法を用いることで、これらの情報を小分けにせずに1回で送ることが可能になる。
これまで本発明の演算システム、演算方法およびプログラムについて上述した実施形態をもって詳細に説明してきたが、本発明は、上述した実施形態に限定されるものではなく、他の実施形態や、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
10…CPU
11…ROM
12…RAM
13…HDD
14…入出力I/F
15…入力装置
16…表示装置
17…通信I/F
18…バス
20…変換部
21…実行部

Claims (11)

  1. 有限個の要素からなる有限体間の演算を実行するシステムであって、
    前記有限体の位数に基づき、該有限体を、冪乗根を含む拡大次数が3以上の拡大体に変換する変換手段と、
    変換された前記拡大体の要素間の演算を実行する実行手段と
    を含む、演算システム。
  2. 前記有限体は、整数を、指定された素数で除算した余りの集合であり、
    前記変換手段は、前記素数を、前記冪乗根を含む素元に分解し、前記整数を、前記冪乗根を含む数に整拡大し、整拡大した数に所定の係数を乗算し、前記所定の係数が乗算された数を前記素元で除算した余りの集合を計算することにより前記拡大体に変換する、請求項1に記載の演算システム。
  3. 前記実行手段は、前記拡大体の要素間の四則演算を実行する、請求項2に記載の演算システム。
  4. 前記実行手段は、前記拡大体の要素間の除算を実行する場合、前記拡大体の一方の要素を余りとする被除数に所定の係数を乗算し、前記拡大体の他方の要素を余りとする除数で除算し、設定された条件に従い、除算した得られた商を前記所定の係数の倍数にし、さらに前記所定の係数を除算して得られた余りを演算結果として出力する、請求項3に記載の演算システム。
  5. 前記実行手段は、前記拡大体の要素間の乗算を実行する場合、前記拡大体の一方の要素を余りとする乗数を、所定の種類の数を並べることにより数を表す位取り記数法により表現し、表現された数の位が高い数から順に前記拡大体の他方の要素を余りとする被乗数と乗算し、前記素元で除算して展開していき、得られた余りを演算結果として出力する、請求項3または4に記載の演算システム。
  6. 前記実行手段は、さらに、前記拡大体の要素の開平演算を実行する、請求項3~5のいずれか1項に記載の演算システム。
  7. 前記実行手段は、前記拡大体の要素の開平演算を実行する場合、前記拡大体の要素を余りとする被除数を除算する素元のノルムから1を減算し、減算して得られた値を2(nは0以上の整数)が乗算された形の奇数個のブロックに分解する、請求項6に記載の演算システム。
  8. 前記素元は、前記冪乗根の多項式の形で表現され、
    前記実行手段は、前記多項式の各項の係数を成分とし、各成分を2進法により表現し、上位半分と下位半分に分けて演算を行う、請求項7に記載の演算システム。
  9. 前記拡大次数は、3であり、前記冪乗根は、2の3乗根である、請求項1~8のいずれか1項に記載の演算システム。
  10. 有限個の要素からなる有限体間の演算を演算システムにより実行する方法であって、
    前記有限体の位数に基づき、該有限体を、冪乗根を含む拡大次数が3以上の拡大体に変換するステップと、
    変換された前記拡大体の要素間の演算を実行するステップと
    を含む、演算方法。
  11. 請求項10に記載の方法に含まれる各ステップをコンピュータに実行させるためのプログラム。
JP2021013578A 2021-01-29 2021-01-29 演算システム、演算方法およびプログラム Pending JP2022117083A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021013578A JP2022117083A (ja) 2021-01-29 2021-01-29 演算システム、演算方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021013578A JP2022117083A (ja) 2021-01-29 2021-01-29 演算システム、演算方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2022117083A true JP2022117083A (ja) 2022-08-10

Family

ID=82749625

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021013578A Pending JP2022117083A (ja) 2021-01-29 2021-01-29 演算システム、演算方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2022117083A (ja)

Similar Documents

Publication Publication Date Title
US7904498B2 (en) Modular multiplication processing apparatus
AU677269B2 (en) A cryptographic method
US8111826B2 (en) Apparatus for generating elliptic curve cryptographic parameter, apparatus for processing elliptic curve cryptograph, program for generating elliptic curve cryptographic parameter, and program for processing elliptic cyptograph
JP5190142B2 (ja) 楕円曲線上の新しいトラップドア1方向性関数と、その、より短い署名及び非対称暗号化への応用
CN109039640B (zh) 一种基于rsa密码算法的加解密硬件系统及方法
KR101269737B1 (ko) 암호 처리 장치 및 암호 처리 방법과 프로그램을 기록한 컴퓨터 판독 가능한 기록매체
JP4783382B2 (ja) モンゴメリ法用乗算剰余計算装置
EP0899907B1 (en) Apparatus for processing bivectors and encrypting system including the same
JP3542278B2 (ja) モンゴメリ・リダクション装置及び記録媒体
JP4690819B2 (ja) 楕円曲線暗号におけるスカラー倍計算方法およびスカラー倍計算装置
US20070053506A1 (en) Elliptic curve encryption processor, processing method of the processor using elliptic curves, and program for causing a computer to execute point scalar multiplication on elliptic curves
JP4177526B2 (ja) 乗算剰余演算方法および乗算剰余回路
JP3616897B2 (ja) モンゴメリ法による乗算剰余計算装置
JP2022117083A (ja) 演算システム、演算方法およびプログラム
JP3615405B2 (ja) 素体上楕円曲線上の点の演算方法およびその装置
JP7443217B2 (ja) 暗号化装置、復号装置、暗号方法、復号方法、暗号化プログラム及び復号プログラム
JP2000132096A (ja) スカラー倍算方法およびその装置
JP5253456B2 (ja) 共通鍵生成システム及び共通鍵生成方法
KR100326226B1 (ko) 행렬그룹공개키생성방법
CN1258051A (zh) 一种公开密钥加密体制和装置
JP4692022B2 (ja) 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム
KR20010000048A (ko) m진법 방식을 이용한 타원곡선상 다중 점의 상수고속연산 방법
Tripathy et al. An efficient and secure key managementscheme for hierarchical access control based on ecc
JP2006309201A (ja) 楕円曲線暗号における多重スカラー倍計算装置、署名検証装置、及び、それらのプログラム。
Banerjee et al. Improved Trial Division Technique for Primality Checking in RSA Algorithm