(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024153313
(43)【公開日】2024-10-29
(54)【発明の名称】演算装置
(51)【国際特許分類】
G06F 17/14 20060101AFI20241022BHJP
【FI】
G06F17/14 C
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023067125
(22)【出願日】2023-04-17
(71)【出願人】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(71)【出願人】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(71)【出願人】
【識別番号】520124752
【氏名又は名称】株式会社ミライズテクノロジーズ
(74)【代理人】
【識別番号】110000028
【氏名又は名称】弁理士法人明成国際特許事務所
(72)【発明者】
【氏名】笹田 裕太
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA01
5B056BB13
5B056FF04
(57)【要約】
【課題】少ないハードウェアリソースでも数論変換を実行可能な演算装置を提供する。
【解決手段】数論変換を行うための演算装置100は、2つの入力データのバタフライ演算を行うように構成された演算ユニット50を1つまたは並列に複数備え、2つ以上の入力データと同数の出力データを出力する、演算部40と、出力データを予め定められた順番に並び替えた並び替えデータを生成し、並び替えデータの一部または全部を入力データとして繰り返し演算部に入力する、並び替え部30と、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
数論変換を行うための演算装置(100)であって、
2つの入力データのバタフライ演算を行うように構成された演算ユニット(50)を1つまたは並列に複数備え、2つ以上の前記入力データと同数の出力データを出力する、演算部(40)と、
前記出力データを予め定められた順番に並び替えた並び替えデータを生成し、前記並び替えデータの一部または全部を前記入力データとして繰り返し前記演算部に入力する、並び替え部(30)と、を備える、
演算装置。
【請求項2】
請求項1に記載の演算装置であって、
前記入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータである、
演算装置。
【請求項3】
請求項2に記載の演算装置であって、
前記演算装置は、車両に搭載される、
演算装置。
【請求項4】
請求項3に記載の演算装置であって、
前記入力データは、前記車両の外部に存在する通信装置の正当性を検証するための認証データに含まれるデータであり、
前記車両が、前記通信装置と通信する場合に、前記演算部に前記入力データが入力される、
演算装置。
【請求項5】
請求項3に記載の演算装置であって、
前記入力データは、前記車両を制御するプログラムの正当性を検証するための認証データに含まれるデータであり、
前記車両が前記プログラムを実行する場合に、前記演算部に前記入力データが入力される、
演算装置。
【請求項6】
請求項3に記載の演算装置であって、
前記入力データは、前記車両に搭載されたデバイスの正当性を検証するための認証データに含まれるデータであり、
前記デバイス同士が通信する場合に、前記演算部に前記入力データが入力される、
演算装置。
【請求項7】
請求項1に記載の演算装置であって、
前記演算ユニットは、
1つの前記入力データである第1入力データが入力される第1入力部と、
前記第1入力データとは異なる1つの前記入力データである第2入力データが入力される第2入力部と、
入力された値に予め定められた係数を乗算した値を出力する乗算器と、
1つの前記出力データである第1出力データを出力する第1出力部と、
前記第1出力データとは異なる1つの前記出力データである第2出力データを出力する第2出力部と、を備え、
前記第1出力部は、前記第1入力データと前記第2入力データを加算した値を前記第1出力データとして出力し、
前記第2出力部は、前記第1入力データから前記第2入力データを減算した値に、前記係数を乗算した値を、前記第2出力データとして出力する、
演算装置。
【請求項8】
請求項1に記載の演算装置であって、
前記演算ユニットは、
数論変換および逆数論変換のバタフライ演算を実行可能に設けられており、
入力された値、または、入力された値にシフト演算を行った値を選択的に出力するシフト演算部と、
前記バタフライ演算に含まれる乗算を実行する位置を選択可能に設けられ、入力された値に予め定められた係数を乗算した値を出力する、乗算器と、を備え、
前記演算ユニットが数論変換のバタフライ演算を実行する場合に、
前記シフト演算部は、入力された値を出力し、
前記乗算器は、前記出力データが出力される直前に前記乗算を実行し、
前記演算ユニットが逆数論変換のバタフライ演算を実行する場合に、
前記シフト演算部は、入力された値に前記シフト演算を行った値を出力し、
前記乗算器は、前記入力データが入力された直後に前記乗算を実行する、
演算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、演算装置に関する。
【背景技術】
【0002】
例えば、特許文献1には、ポスト量子暗号化の演算を高速に実行可能なコプロセッサが開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2022/0171885号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
近年では、量子コンピュータによって暗号が解読されることを抑制するために、ポスト量子暗号の暗号化演算を実行可能な演算装置を車両等に組み込むことが求められている。ポスト量子暗号の一つである格子暗号の演算では、演算量の多い数論変換が実行される。数論変換を実行する演算装置を車両等に組み込む場合、組み込み可能なハードウェアリソースに限りがある。そのため、少ないハードウェアリソースでも数論変換を実行可能な演算装置が望まれている。
【課題を解決するための手段】
【0005】
本開示は、以下の形態として実現することが可能である。
【0006】
本開示の一形態によれば、数論変換を行うための演算装置が提供される。この演算装置は、2つの入力データのバタフライ演算を行うように構成された演算ユニット(50)を1つまたは並列に複数備え、2つ以上の前記入力データと同数の出力データを出力する、演算部(40)と、前記出力データを予め定められた順番に並び替えた並び替えデータを生成し、前記並び替えデータの一部または全部を前記入力データとして繰り返し前記演算部に入力する、並び替え部(30)と、を備える。
【0007】
この形態によれば、演算装置は、同じ演算ユニットを繰り返し使用して2つの入力データのバタフライ演算を行うことで、数論変換を実行する。そのため、少ないハードウェアリソースでも数論変換を実行できる。
【図面の簡単な説明】
【0008】
【
図1】第1実施形態における演算装置の概略構成を示す説明図。
【
図3】8個のデータの数論変換のバタフライ演算を説明する図。
【
図4】第1実施形態における数論変換処理の工程図。
【
図5】第1実施形態における1段目のNTTバタフライ演算処理の工程図。
【
図6】第1実施形態における2段目のNTTバタフライ演算処理の工程図。
【
図7】第1実施形態における3段目のNTTバタフライ演算処理の工程図。
【
図8】第1実施形態の数論変換処理における、各演算ユニットの入力データと出力データを説明する図。
【
図9】第2実施形態における演算装置の概略構成を示す説明図。
【
図10】第2実施形態における1段目のNTTバタフライ演算処理の工程図。
【
図11】第2実施形態における2段目のNTTバタフライ演算処理の工程図。
【
図12】第2実施形態における3段目のNTTバタフライ演算処理の工程図。
【
図13】第2実施形態の数論変換処理における、各演算ユニットの入力データと出力データを説明する図。
【
図14】第3実施形態における演算装置の概略構成を示す説明図。
【
図15】第3実施形態における1段目のNTTバタフライ演算処理の工程図。
【
図16】第3実施形態における2段目のNTTバタフライ演算処理の工程図。
【
図17】第3実施形態における3段目のNTTバタフライ演算処理の工程図。
【
図18】第3実施形態の数論変換処理における、各演算ユニットの入力データと出力データを説明する図。
【
図19】第4実施形態における演算ユニットの構成を説明する図。
【
図20】8個のデータの逆数論変換のバタフライ演算を説明する図。
【
図21】第4実施形態における逆数論変換処理の工程図。
【
図22】第4実施形態における1段目のINTTバタフライ演算処理の工程図。
【
図23】第4実施形態における2段目のINTTバタフライ演算処理の工程図。
【
図24】第4実施形態における3段目のINTTバタフライ演算処理の工程図。
【
図25】第4実施形態の逆数論変換処理における、各演算ユニットの入力データと出力データを説明する図。
【
図26】第5実施形態における演算ユニットの構成を説明する図。
【発明を実施するための形態】
【0009】
A.第1実施形態:
図1に示す演算装置100は、数論変換を行うための装置である。演算装置100は、車両に搭載される。本実施形態では、車両は、自動車である。演算装置100は、例えば、車両が、車両の外部の通信相手と通信する場合や、車両を制御するプログラムを実行する場合等に、数論変換のバタフライ演算を行うことで、データの暗号化または復号を行う。数論変換を、NTT(Number Theoretic Transform)とも呼ぶ。車両は、例えば、オートバイであってもよい。
【0010】
演算装置100は、CPU10と、メモリ20と、並び替え部30と、演算部40と、を備える。メモリ20には、数論変換のバタフライ演算によって暗号化または復号が行われるデータに含まれるデータが記憶される。なお、メモリ20を記憶部とも呼ぶ。
【0011】
並び替え部30は、メモリ20から取得したデータ、または、後述する演算部40から出力された出力データを、予め定められた順番に並び替える。以下では、並び替え部30によって並び替えられたデータを、並び替えデータと呼ぶ。すなわち、並び替え部30は、並び替えデータを生成する。並び替え部30は、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)などの回路によって実現される。また、並び替え部30は、並び替えデータをバッファする。並び替え部30は、並び替えデータの一部または全部を、入力データとして繰り返し演算部40に入力する。
【0012】
演算部40は、第1演算ユニット41と、第2演算ユニット42と、第3演算ユニット43と、第4演算ユニット44と、を備える。第1演算ユニット41は、2つの入力データの数論変換のバタフライ演算を行うように構成されている。第1演算ユニット41は、FPGAやASICなどの回路によって実現される。
【0013】
図2に示すように、第1演算ユニット41は、第1入力部51と、第2入力部52と、乗算器53と、第1出力部54と、第2出力部55と、を備える。第1入力部51には、1つの入力データである第1入力データが入力される。第2入力部52には、第1入力データとは異なる1つの入力データである第2入力データが入力される。乗算器53には、予め定められた係数が入力される。乗算器53は、乗算器53に入力された値に予め定められた係数を乗算した値を出力する。第1出力部54は、1つの出力データである第1出力データを出力する。第2出力部55は、第1出力データとは異なる1つの出力データである第2出力データを出力する。
【0014】
第1出力部54は、第1入力データと第2入力データを加算した値を第1出力データとして出力する。第2出力部55は、第1入力データから第2入力データを減算した値に、乗算器53に入力される係数を乗算した値を、第2出力データとして出力する。すなわち、第1演算ユニット41は、第1入力部51に入力される値と、第2入力部52に入力される値と、乗算器53に入力される係数との間で行われるバタフライ演算の結果を、第1出力部54および第2出力部55から出力する。第1入力部51に値Aが入力され、第2入力部52に値Bが入力され、乗算器53に係数Cが入力された場合、第1出力部54は値Xを出力し、第2出力部55は値Yを出力する。ここで、値Xと値Yは、それぞれ以下の式(1)と式(2)で表される。
X=A+B・・・式(1)
Y=(A-B)×C・・・式(2)
【0015】
第2演算ユニット42と、第3演算ユニット43と、第4演算ユニット44は、第1演算ユニット41と同じ構成である。そのため、これらの詳細な説明は省略する。以下において各演算ユニットを区別なく呼ぶときは、単に、演算ユニット50と呼ぶ。本実施形態では、演算部40は、4つの演算ユニット50を並列に備える。
【0016】
本実施形態では、演算部40には、8個の入力データが入力される。8個の入力データは、各演算ユニット50の第1入力部51と第2入力部52に、それぞれ1つずつ入力される。また、演算部40は、入力データと同数の出力データを並び替え部30に出力する。演算部40は、各演算ユニット50の第1出力部54と第2出力部55から、出力データをそれぞれ1つずつ出力する。
【0017】
以下では、演算装置100が8個のデータの数論変換のバタフライ演算を行う場合について説明する。
図3に示すように、8個のデータの数論変換のバタフライ演算では、まず、x0からx7の8個のデータのバタフライ演算によって、A0からA7の8個のデータが算出される。次に、A0からA7の8個のデータのバタフライ演算によって、B0からB7の8個のデータが算出される。最後に、B0からB7の8個のデータのバタフライ演算によって、X0からX7の8個のデータが算出される。
図3に示すW
8は法P(Pは正の整数)における1の原始8乗根であり、W
4は法Q(Qは正の整数)における1の原始4乗根である。x0からx7は数論変換が行われる前のデータであり、X0からX7は数論変換が行われた後のデータである。本明細書では、x0からx7の8個のデータから、A0からA7の8個のデータを算出するバタフライ演算を、1段目のNTTバタフライ演算とも呼ぶ。また、A0からA7の8個のデータから、B0からB7の8個のデータを算出するバタフライ演算を、2段目のNTTバタフライ演算とも呼ぶ。また、B0からB7の8個のデータから、X0からX7の8個のデータを算出するバタフライ演算を、3段目のNTTバタフライ演算とも呼ぶ。
【0018】
図4に示す数論変換処理では、8個のデータの数論変換のバタフライ演算が実行される。演算装置100は、数論変換処理を実行することで、4つの演算ユニット50を使い回して、8個のデータの数論変換のバタフライ演算を実行する。
【0019】
図4のステップS10において、並び替え部30は、数論変換のバタフライ演算が行われる8個のデータをメモリ20から取得する。並び替え部30は、
図3に示すx0からx7の8個のデータを取得する。ここで取得されたデータは、x0,x1,x2,x3,x4,x5,x6,x7の順に並んでいる。
【0020】
ステップS20において、演算装置100は、1段目のNTTバタフライ演算処理を実行する。以下では、
図5を参照して、1段目のNTTバタフライ演算処理について説明する。
【0021】
図5のステップS101において、並び替え部30は、メモリ20から取得したデータを、ビットリバースした順に並び替える。具体的には、並び替え部30は、x0,x1,x2,x3,x4,x5,x6,x7の順に並んでいるデータを、x0,x4,x2,x6,x1,x5,x3,x7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0022】
ステップS102において、並び替え部30は、ステップS101でバッファした8個の並び替えデータを、演算部40に入力する。並び替え部30は、
図8に示すように、x0を第1演算ユニット41の第1入力部51に入力し、x4を第1演算ユニット41の第2入力部52に入力し、x2を第2演算ユニット42の第1入力部51に入力し、x6を第2演算ユニット42の第2入力部52に入力し、x1を第3演算ユニット43の第1入力部51に入力し、x5を第3演算ユニット43の第2入力部52に入力し、x3を第4演算ユニット44の第1入力部51に入力し、x7を第4演算ユニット44の第2入力部52に入力する。また、ステップS102において、第1演算ユニット41の乗算器53には係数W
8
0が、第2演算ユニット42の乗算器53には係数W
8
2が、第3演算ユニット43の乗算器53には係数W
8
1が、第1演算ユニット41の乗算器53には係数W
8
3が、それぞれ入力される。
【0023】
ステップS103において、各演算ユニット50は、第1入力部51に入力された値と、第2入力部52に入力された値と、乗算器53に入力された係数との間でバタフライ演算を実行し、その結果を第1出力部54および第2出力部55から出力する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55、第3演算ユニット43の第1出力部54、第3演算ユニット43の第2出力部55、第4演算ユニット44の第1出力部54、第4演算ユニット44の第2出力部55は、それぞれ、出力データとして、A0,A4,A2,A6,A1,A5,A3,A7を並び替え部30に出力する。以上で説明したようにして、1段目のNTTバタフライ演算処理が実行される。
【0024】
図4のステップS30において、演算装置100は、2段目のNTTバタフライ演算処理を実行する。以下では、
図6を参照して、2段目のNTTバタフライ演算処理について説明する。
【0025】
図6のステップS111において、並び替え部30は、
図5のステップS103で出力された出力データを並び替える。具体的には、並び替え部30は、A0,A4,A2,A6,A1,A5,A3,A7の順に並んでいる出力データを、A0,A2,A1,A3,A4,A6,A5,A7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0026】
ステップS112において、並び替え部30は、ステップS111でバッファした8個の並び替えデータを、演算部40に入力する。並び替え部30は、
図8に示すように、A0を第1演算ユニット41の第1入力部51に入力し、A2を第1演算ユニット41の第2入力部52に入力し、A1を第2演算ユニット42の第1入力部51に入力し、A3を第2演算ユニット42の第2入力部52に入力し、A4を第3演算ユニット43の第1入力部51に入力し、A6を第3演算ユニット43の第2入力部52に入力し、A5を第4演算ユニット44の第1入力部51に入力し、A7を第7演算ユニットの第2入力部52に入力する。また、ステップS112において、第1演算ユニット41および第3演算ユニット43の乗算器53には係数W
4
0が、第2演算ユニット42および第4演算ユニット44の乗算器53には係数W
4
1が、それぞれ入力される。
【0027】
ステップS113において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55、第3演算ユニット43の第1出力部54、第3演算ユニット43の第2出力部55、第4演算ユニット44の第1出力部54、第4演算ユニット44の第2出力部55は、それぞれ、出力データとして、B0,B2,B1,B3,B4,B6,B5,B7を並び替え部30に出力する。以上で説明したようにして、2段目のNTTバタフライ演算処理が実行される。
【0028】
図4のステップS40において、演算装置100は、3段目のNTTバタフライ演算処理を実行する。以下では、
図7を参照して、3段目のNTTバタフライ演算処理について説明する。
【0029】
図7のステップS121において、並び替え部30は、
図6のステップS113で出力された出力データを並び替える。具体的には、並び替え部30は、B0,B2,B1,B3,B4,B6,B5,B7の順に並んでいる出力データを、B0,B1,B2,B3,B4,B5,B6,B7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0030】
ステップS122において、並び替え部30は、ステップS121でバッファした8個の並び替えデータを、演算部40に入力する。並び替え部30は、
図8に示すように、B0を第1演算ユニット41の第1入力部51に入力し、B1を第1演算ユニット41の第2入力部52に入力し、B2を第2演算ユニット42の第1入力部51に入力し、B3を第2演算ユニット42の第2入力部52に入力し、B4を第3演算ユニット43の第1入力部51に入力し、B5を第3演算ユニット43の第2入力部52に入力し、B6を第4演算ユニット44の第1入力部51に入力し、B7を第7演算ユニットの第2入力部52に入力する。また、ステップS122において、全ての演算ユニット50の乗算器53には、係数1が入力される。
【0031】
ステップS123において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55、第3演算ユニット43の第1出力部54、第3演算ユニット43の第2出力部55、第4演算ユニット44の第1出力部54、第4演算ユニット44の第2出力部55は、それぞれ、出力データとして、X0,X4,X2,X6,X1,X5,X3,X7を並び替え部30に出力する。以上で説明したようにして、3段目のNTTバタフライ演算処理が実行される。
【0032】
図4のステップS50において、CPU10は、
図7のステップS123で演算部40から出力された出力データを、メモリ20に記憶させる。以上で説明したようにして、数論変換処理が実行される。
【0033】
演算装置100は、車両が、車両の外部に存在する通信装置と通信する場合や、車両を制御するプログラムを実行する場合、車両に搭載されたデバイス同士が通信する場合等に、数論変換処理を実行する。
【0034】
具体的には、演算装置100は、例えば、車両がインターネットを経由して車両の外部に設置されているサーバやスマートフォン等の通信装置と情報の送受信を行う場合に、数論変換処理を実行する。上述した情報は、車両の制御プログラムを更新するためのデータや、車両のドアの鍵を解錠するためのデータ等である。この場合、演算部40には、車両の外部に存在する通信装置の正当性を検証するための認証データに含まれるデータが、入力データとして入力される。車両の外部に存在する通信装置の正当性を検証するための認証データとは、例えば、車両が通信しようとするサーバやスマートフォン等の通信装置が、本当に車両が通信しようとする通信装置であることを証明するデータである。演算装置100は、数論変換処理を実行することで、例えば、暗号化された上記認証データの復号を行う。
【0035】
また、演算装置100は、例えば、車両が、車両の発進や停止等の、車両の動作を制御するプログラムを実行する場合に、数論変換処理を実行する。この場合、演算部40には、車両が実行するプログラムの正当性を検証するための認証データに含まれるデータが、入力データとして入力される。車両が実行するプログラムの正当性を検証するための認証データとは、例えば、車両が実行するプログラムが、信頼できる作成元によって作成された正規のプログラムであることを証明するデータである。演算装置100は、数論変換処理を実行することで、例えば、暗号化された上記認証データの復号を行う。
【0036】
また、演算装置100は、例えば、車両に搭載された、車両の駆動力を制御するECU(Electronic Control Unit)や車両のブレーキを制御するECU等の、ECU同士が互いに通信する場合に、数論変換処理を実行する。この場合、演算部40には、車両に搭載されたECU等のデバイスの正当性を検証するための認証データに含まれるデータが、入力データとして入力される。デバイスの正当性を検証するための認証データとは、例えば、デバイスが通信しようとする別のデバイスが、本当に通信しようとするデバイスであることを証明するデータである。演算装置100は、数論変換処理を実行することで、上記認証データの暗号化または復号を行う。
【0037】
以上で説明した第1実施形態によれば、演算装置100は、数論変換処理を実行することで、同じ演算ユニット50を繰り返し使用してバタフライ演算を行い、8個のデータの数論変換のバタフライ演算を実行する。そのため、演算装置100は、少ないハードウェアリソースでも数論変換を実行できる。したがって、数論変換を実行できる演算装置100を小型化でき、車両に組み込みやすくできる。
【0038】
また、本実施形態では、演算部40に入力される入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータである。そのため、演算装置100が数論変換のバタフライ演算を実行することで、データの暗号化または復号ができる。
【0039】
また、本実施形態では、演算装置100は、車両が、車両の外部に存在する通信装置と通信する場合に、数論変換処理を実行する。演算装置100は、例えば、車両の外部に存在する通信装置の正当性を検証するための認証データに含まれるデータを入力データとして演算部40に入力し、暗号化された認証データを復号する。そのため、車両の外部に存在する通信装置が、正当な通信装置であるか否かを確認できる。
【0040】
また、本実施形態では、演算装置100は、車両が、車両を制御するプログラムを実行する場合に、数論変換処理を実行する。演算装置100は、例えば、車両が実行するプログラムの正当性を検証するための認証データに含まれるデータを入力データとして演算部40に入力し、暗号化された認証データを復号する。そのため、車両が実行するプログラムが正当なプログラムであるか否かを確認できる。
【0041】
また、本実施形態では、演算装置100は、車両に搭載されたデバイス同士が通信する場合に、数論変換処理を実行する。演算装置100は、車両に搭載されたデバイスの正当性を検証するための認証データに含まれるデータを入力データとして演算部40に入力し、上記認証データを暗号化、または、暗号化された上記認証データを復号する。そのため、デバイスが通信しようとする別のデバイスが、正当なデバイスであるか否かを確認できる。
【0042】
また、本実施形態では、並び替え部30および演算ユニット50は、FPGAやASICなどの回路によって実現される。そのため、CPU10がメモリ20に記憶されたプログラムを実行することで並び替え部30および演算部40として機能する場合に比べて、数論変換のバタフライ演算を高速に実行できる。
【0043】
B.第2実施形態:
図9に示すように、第2実施形態では、演算部40は、第1演算ユニット41と、第2演算ユニット42と、を備える。すなわち、演算部40は、2つの演算ユニット50を並列に備える。演算部40以外の演算装置100の各部の構成は、第1実施形態と同じである。第2実施形態では、演算装置100は、数論変換処理を実行することで、2つの演算ユニット50を使い回して、8個のデータの数論変換のバタフライ演算を実行する。第2実施形態では、1段目のNTTバタフライ演算処理と、2段目のNTTバタフライ演算処理と、3段目のNTTバタフライ演算処理が、第1実施形態と異なる。
図10に示す第2実施形態での1段目のNTTバタフライ演算処理では、
図5に示す第1実施形態での1段目のNTTバタフライ演算処理と同じ処理が実行される部分については、同一の符号を付記し、説明を省略する。
【0044】
図10のステップS202において、並び替え部30は、ステップS101でバッファした並び替えデータのうち4個のデータを、演算部40に入力する。並び替え部30は、
図13に示すように、x0を第1演算ユニット41の第1入力部51に入力し、x4を第1演算ユニット41の第2入力部52に入力し、x2を第2演算ユニット42の第1入力部51に入力し、x6を第2演算ユニット42の第2入力部52に入力する。また、ステップS202において、第1演算ユニット41の乗算器53には係数W
8
0が、第2演算ユニット42の乗算器53には係数W
8
2が、それぞれ入力される。
【0045】
ステップS203において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55は、それぞれ、出力データとして、A0,A4,A2,A6を並び替え部30に出力する。
【0046】
ステップS204において、並び替え部30は、ステップS203で出力された出力データをバッファする。
【0047】
ステップS205において、並び替え部30は、ステップS101でバッファした並び替えデータのうち、ステップS202で演算部40に入力されなかった4個のデータを、演算部40に入力する。並び替え部30は、
図13に示すように、x1を第1演算ユニット41の第1入力部51に入力し、x5を第1演算ユニット41の第2入力部52に入力し、x3を第2演算ユニット42の第1入力部51に入力し、x7を第2演算ユニット42の第2入力部52に入力する。また、ステップS205において、第1演算ユニット41の乗算器53には係数W
8
1が、第2演算ユニット42の乗算器53には係数W
8
3が、それぞれ入力される。
【0048】
ステップS206において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55は、それぞれ、出力データとして、A1,A5,A3,A7を並び替え部30に出力する。
【0049】
ステップS207において、並び替え部30は、ステップS206で出力された出力データをバッファする。以上で説明したようにして、1段目のNTTバタフライ演算処理が実行される。
【0050】
図11のステップS211において、並び替え部30は、
図10のステップS204およびステップS207でバッファした出力データを並び替える。具体的には、並び替え部30は、A0,A4,A2,A6,A1,A5,A3,A7の順に並んでいる出力データを、A0,A2,A1,A3,A4,A6,A5,A7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0051】
ステップS212において、並び替え部30は、ステップS211でバッファした並び替えデータのうち4個のデータを、演算部40に入力する。並び替え部30は、
図13に示すように、A0を第1演算ユニット41の第1入力部51に入力し、A2を第1演算ユニット41の第2入力部52に入力し、A1を第2演算ユニット42の第1入力部51に入力し、A3を第2演算ユニット42の第2入力部52に入力する。また、ステップS212において、第1演算ユニット41の乗算器53には係数W
4
0が、第2演算ユニット42の乗算器53には係数W
4
1が、それぞれ入力される。
【0052】
ステップS213において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55は、それぞれ、出力データとして、B0,B2,B1,B3を並び替え部30に出力する。
【0053】
ステップS214において、並び替え部30は、ステップS213で出力された出力データをバッファする。
【0054】
ステップS215において、並び替え部30は、ステップS211でバッファした並び替えデータのうち、ステップS212で演算部40に入力されなかった4個のデータを、演算部40に入力する。並び替え部30は、
図13に示すように、A4を第1演算ユニット41の第1入力部51に入力し、A6を第1演算ユニット41の第2入力部52に入力し、A5を第2演算ユニット42の第1入力部51に入力し、A7を第2演算ユニット42の第2入力部52に入力する。また、ステップS215において、第1演算ユニット41の乗算器53には係数W
4
0が、第2演算ユニット42の乗算器53には係数W
4
1が、それぞれ入力される。
【0055】
ステップS216において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55は、それぞれ、出力データとして、B4,B6,B5,B7を並び替え部30に出力する。
【0056】
ステップS217において、並び替え部30は、ステップS216で出力された出力データをバッファする。以上で説明したようにして、2段目のNTTバタフライ演算処理が実行される。
【0057】
図12のステップS221において、並び替え部30は、
図11のステップS214およびステップS217でバッファした出力データを並び替える。具体的には、並び替え部30は、B0,B2,B1,B3,B4,B6,B5,B7の順に並んでいる出力データを、B0,B1,B2,B3,B4,B5,B6,B7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0058】
ステップS222において、並び替え部30は、ステップS221でバッファした並び替えデータのうち4個のデータを、演算部40に入力する。並び替え部30は、
図13に示すように、B0を第1演算ユニット41の第1入力部51に入力し、B1を第1演算ユニット41の第2入力部52に入力し、B2を第2演算ユニット42の第1入力部51に入力し、B3を第2演算ユニット42の第2入力部52に入力する。また、ステップS222において、第1演算ユニット41および第2演算ユニット42の乗算器53には、係数1が入力される。
【0059】
ステップS223において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55は、それぞれ、出力データとして、X0,X4,X2,X6を並び替え部30に出力する。
【0060】
ステップS224において、並び替え部30は、ステップS223で出力された出力データをバッファする。
【0061】
ステップS225において、並び替え部30は、ステップS221でバッファした並び替えデータのうち、ステップS222で演算部40に入力されなかった4個のデータを、演算部40に入力する。並び替え部30は、
図13に示すように、B4を第1演算ユニット41の第1入力部51に入力し、B5を第1演算ユニット41の第2入力部52に入力し、B6を第2演算ユニット42の第1入力部51に入力し、B7を第2演算ユニット42の第2入力部52に入力する。また、ステップS225において、第1演算ユニット41および第2演算ユニット42の乗算器53には、係数1が入力される。
【0062】
ステップS226において、各演算ユニット50は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55は、それぞれ、出力データとして、X1,X5,X3,X7を並び替え部30に出力する。
【0063】
ステップS227において、並び替え部30は、ステップS226で出力された出力データをバッファする。以上で説明したようにして、3段目のNTTバタフライ演算処理が実行される。
【0064】
第2実施形態では、
図4に示す数論変換処理のステップS50において、CPU10は、
図12のステップS224およびステップS227でバッファされた出力データを、メモリ20に記憶させる。
【0065】
以上で説明した第2実施形態によれば、演算装置100は、数論変換処理を実行することで、同じ演算ユニット50を繰り返し使用してバタフライ演算を行い、8個のデータの数論変換のバタフライ演算を実行する。そのため、演算装置100は、少ないハードウェアリソースでも数論変換を実行できる。したがって、数論変換を実行できる演算装置100を車両に組み込みやすくできる。
【0066】
C.第3実施形態:
図14に示すように、第3実施形態では、演算部40は、第1演算ユニット41を備える。すなわち、演算部40は、1つの演算ユニット50を備える。演算部40以外の演算装置100の各部の構成は、第1実施形態と同じである。第3実施形態では、演算装置100は、数論変換処理を実行することで、1つの演算ユニット50を使い回して、8個のデータの数論変換のバタフライ演算を実行する。第3実施形態では、1段目のNTTバタフライ演算処理と、2段目のNTTバタフライ演算処理と、3段目のNTTバタフライ演算処理が、第1実施形態と異なる。
図15に示す第3実施形態での1段目のNTTバタフライ演算処理では、
図5に示す第1実施形態での1段目のNTTバタフライ演算処理と同じ処理が実行される部分については、同一の符号を付記し、説明を省略する。
【0067】
図15のステップS302において、並び替え部30は、ステップS101でバッファした並び替えデータのうち2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、x0を第1演算ユニット41の第1入力部51に入力し、x4を第1演算ユニット41の第2入力部52に入力する。また、ステップS302において、第1演算ユニット41の乗算器53には係数W
8
0が入力される。
【0068】
ステップS303において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、A0とA4を並び替え部30に出力する。
【0069】
ステップS304において、並び替え部30は、ステップS303で出力された出力データをバッファする。
【0070】
ステップS305において、並び替え部30は、ステップS101でバッファした並び替えデータのうち、ステップS302で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、x2を第1演算ユニット41の第1入力部51に入力し、x6を第1演算ユニット41の第2入力部52に入力する。また、ステップS305において、第1演算ユニット41の乗算器53には係数W
8
2が入力される。
【0071】
ステップS306において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、A2とA6を並び替え部30に出力する。
【0072】
ステップS307において、並び替え部30は、ステップS306で出力された出力データをバッファする。
【0073】
ステップS308において、並び替え部30は、ステップS101でバッファした並び替えデータのうち、ステップS302とステップS305で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、x1を第1演算ユニット41の第1入力部51に入力し、x5を第1演算ユニット41の第2入力部52に入力する。また、ステップS308において、第1演算ユニット41の乗算器53には係数W
8
1が入力される。
【0074】
ステップS309において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、A1とA5を並び替え部30に出力する。
【0075】
ステップS310において、並び替え部30は、ステップS309で出力された出力データをバッファする。
【0076】
ステップS311において、並び替え部30は、ステップS101でバッファした並び替えデータのうち、ステップS302、ステップS305、ステップS308で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、x3を第1演算ユニット41の第1入力部51に入力し、x7を第1演算ユニット41の第2入力部52に入力する。また、ステップS311において、第1演算ユニット41の乗算器53には係数W
8
3が入力される。
【0077】
ステップS312において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、A3とA7を並び替え部30に出力する。
【0078】
ステップS313において、並び替え部30は、ステップS312で出力された出力データをバッファする。以上で説明したようにして、1段目のNTTバタフライ演算処理が実行される。
【0079】
図16のステップS321において、並び替え部30は、
図15のステップS304、ステップS307、ステップS310、およびステップS313でバッファした出力データを並び替える。具体的には、並び替え部30は、A0,A4,A2,A6,A1,A5,A3,A7の順に並んでいる出力データを、A0,A2,A1,A3,A4,A6,A5,A7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0080】
ステップS322において、並び替え部30は、ステップS321でバッファした並び替えデータのうち2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、A0を第1演算ユニット41の第1入力部51に入力し、A2を第1演算ユニット41の第2入力部52に入力する。また、ステップS322において、第1演算ユニット41の乗算器53には係数W
4
0が入力される。
【0081】
ステップS323において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、B0とB2を並び替え部30に出力する。
【0082】
ステップS324において、並び替え部30は、ステップS333で出力された出力データをバッファする。
【0083】
ステップS325において、並び替え部30は、ステップS321でバッファした並び替えデータのうち、ステップS322で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、A1を第1演算ユニット41の第1入力部51に入力し、A3を第1演算ユニット41の第2入力部52に入力する。また、ステップS325において、第1演算ユニット41の乗算器53には係数W
4
1が入力される。
【0084】
ステップS326において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、B1とB3を並び替え部30に出力する。
【0085】
ステップS327において、並び替え部30は、ステップS326で出力された出力データをバッファする。
【0086】
ステップS328において、並び替え部30は、ステップS321でバッファした並び替えデータのうち、ステップS322とステップS325で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、A4を第1演算ユニット41の第1入力部51に入力し、A6を第1演算ユニット41の第2入力部52に入力する。また、ステップS328において、第1演算ユニット41の乗算器53には係数W
4
0が入力される。
【0087】
ステップS329において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、B4とB6を並び替え部30に出力する。
【0088】
ステップS330において、並び替え部30は、ステップS329で出力された出力データをバッファする。
【0089】
ステップS331において、並び替え部30は、ステップS321でバッファした並び替えデータのうち、ステップS322、ステップS325、ステップS328で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、A5を第1演算ユニット41の第1入力部51に入力し、A7を第1演算ユニット41の第2入力部52に入力する。また、ステップS331において、第1演算ユニット41の乗算器53には係数W
4
1が入力される。
【0090】
ステップS332において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、B5とB7を並び替え部30に出力する。
【0091】
ステップS333において、並び替え部30は、ステップS332で出力された出力データをバッファする。以上で説明したようにして、2段目のNTTバタフライ演算処理が実行される。
【0092】
図17のステップS341において、並び替え部30は、
図16のステップS324、ステップS327、ステップS330、およびステップS333でバッファした出力データを並び替える。具体的には、並び替え部30は、B0,B2,B1,B3,B4,B6,B5,B7の順に並んでいる出力データを、B0,B1,B2,B3,B4,B5,B6,B7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0093】
ステップS342において、並び替え部30は、ステップS341でバッファした並び替えデータのうち2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、B0を第1演算ユニット41の第1入力部51に入力し、B1を第1演算ユニット41の第2入力部52に入力する。また、ステップS342において、第1演算ユニット41の乗算器53には係数1が入力される。
【0094】
ステップS343において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、X0とX4を並び替え部30に出力する。
【0095】
ステップS344において、並び替え部30は、ステップS343で出力された出力データをバッファする。
【0096】
ステップS345において、並び替え部30は、ステップS341でバッファした並び替えデータのうち、ステップS342で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、B2を第1演算ユニット41の第1入力部51に入力し、B3を第1演算ユニット41の第2入力部52に入力する。また、ステップS345において、第1演算ユニット41の乗算器53には係数1が入力される。
【0097】
ステップS346において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、X2とX6を並び替え部30に出力する。
【0098】
ステップS347において、並び替え部30は、ステップS346で出力された出力データをバッファする。
【0099】
ステップS348において、並び替え部30は、ステップS341でバッファした並び替えデータのうち、ステップS342とステップS345で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、B4を第1演算ユニット41の第1入力部51に入力し、B5を第1演算ユニット41の第2入力部52に入力する。また、ステップS348において、第1演算ユニット41の乗算器53には係数1が入力される。
【0100】
ステップS349において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、X1とX5を並び替え部30に出力する。
【0101】
ステップS350において、並び替え部30は、ステップS349で出力された出力データをバッファする。
【0102】
ステップS351において、並び替え部30は、ステップS341でバッファした並び替えデータのうち、ステップS342、ステップS345、ステップS348で演算部40に入力されなかった2個のデータを、演算部40に入力する。並び替え部30は、
図18に示すように、B6を第1演算ユニット41の第1入力部51に入力し、B7を第1演算ユニット41の第2入力部52に入力する。また、ステップS351において、第1演算ユニット41の乗算器53には係数1が入力される。
【0103】
ステップS352において、第1演算ユニット41は、バタフライ演算を実行する。第1演算ユニット41の第1出力部54と第2出力部55は、それぞれ、出力データとして、X3とX7を並び替え部30に出力する。
【0104】
ステップS353において、並び替え部30は、ステップS354で出力された出力データをバッファする。以上で説明したようにして、3段目のNTTバタフライ演算処理が実行される。
【0105】
第3実施形態では、
図4に示す数論変換処理のステップS50において、CPU10は、
図17のステップS344、ステップS347、ステップS350、およびステップS353でバッファされた出力データを、メモリ20に記憶させる。
【0106】
以上で説明した第3実施形態によれば、演算装置100は、数論変換処理を実行することで、同じ演算ユニット50を繰り返し使用してバタフライ演算を行い、8個のデータの数論変換のバタフライ演算を実行する。そのため、演算装置100は、少ないハードウェアリソースでも数論変換を実行できる。したがって、数論変換を実行できる演算装置100を車両に組み込みやすくできる。
【0107】
D.第4実施形態:
第4実施形態では、演算ユニット50bの構成が、第1実施形態と異なる。演算ユニット50b以外の演算装置100の各部の構成は、第1実施形態と同じである。第4実施形態では、演算ユニット50bは、数論変換および逆数論変換のバタフライ演算を実行可能に構成されている。逆数論変換を、INTT(Inverse Number Theoretic Transform)とも呼ぶ。メモリ20には、数論変換のバタフライ演算によって暗号化または復号が行われるデータに含まれるデータと、逆数論変換のバタフライ演算によって暗号化または復号が行われるデータに含まれるデータが記憶される。演算装置100は、逆数論変換のバタフライ演算を行うことで、数論変換によって暗号化されたデータの復号を行う。また、演算装置100は、数論変換のバタフライ演算を行うことで、逆数論変換によって暗号化されたデータの復号を行う。
【0108】
図19に示すように、第4実施形態の演算ユニット50bは、第1入力部51と、第2入力部52と、第1出力部54と、第2出力部55と、乗算器56と、第1シフト演算部57と、第2シフト演算部58と、を備える。
【0109】
乗算器56には、予め定められた係数Cが入力される。乗算器56は、セレクタを有し、乗算器56に入力された値、または、乗算器56に入力された値に係数Cを乗算した値のいずれかを出力する。乗算器56は、バタフライ演算に含まれる乗算を実行する位置を選択可能に設けられている。乗算器56は、乗算器第1入力部61と、乗算器第1出力部62と、乗算器第2入力部63と、乗算器第2出力部64と、を備える。
【0110】
第1シフト演算部57は、第1シフト演算部57に入力された値、または、第1シフト演算部57に入力された値にシフト演算を行った値を、選択的に出力する。第1シフト演算部57は、シフト演算を実行することにより、第1シフト演算部57に入力された値に係数Dを乗算した値を出力可能に設けられている。ここで、係数Dは、2のk乗(kは整数)である。第2シフト演算部58は、第2シフト演算部58に入力された値、または、第2シフト演算部58に入力された値にシフト演算を行った値を、選択的に出力する。第2シフト演算部58は、シフト演算を実行することにより、第2シフト演算部58に入力された値に係数Eを乗算した値を出力可能に設けられている。ここで、係数Eは、2のk乗である。第1シフト演算部57と第2シフト演算部58を、まとめてシフト演算部とも呼ぶ。
【0111】
以下では、演算ユニット50bが2つの入力データの数論変換のバタフライ演算を行う場合について説明する。第1入力部51に値Aが入力され、第2入力部52に値Bが入力された場合、乗算器第1入力部61には、値Bが入力される。乗算器第1出力部62は、値Bを出力する。乗算器第2入力部63には、値(A-B)が入力される。乗算器第2出力部64は、値(A-B)×Cを出力する。シフト演算部は、シフト演算部に入力された値を出力する。この場合、演算ユニット50bが出力する値Xと値Yは、それぞれ上述した式(1)と式(2)で表される。すなわち、乗算器56は、出力データが出力される直前に、バタフライ演算に含まれる乗算を実行する。第4実施形態では、演算装置100は、
図4に示す第1実施形態の数論変換処理と同様にして、8個のデータの数論変換のバタフライ演算を実行する。
【0112】
以下では、演算ユニット50bが2つの入力データの逆数論変換のバタフライ演算を行う場合について説明する。第1入力部51に値Aが入力され、第2入力部52に値Bが入力された場合、乗算器第1入力部61には、値Bが入力される。乗算器第1出力部62は、値(B×C)を出力する。乗算器第2入力部63には、値(A-(B×C))が入力される。乗算器第2出力部64は、値(A-(B×C))を出力する。シフト演算部は、シフト演算部に入力された値にシフト演算を行った値を出力する。この場合、演算ユニット50bが出力する値Xと値Yは、それぞれ以下の式(3)と式(4)で表される。すなわち、乗算器56は、入力データが入力された直後に、バタフライ演算に含まれる乗算を実行する。
X=(A+(B×C))×D・・・式(3)
Y=(A-(B×C))×E・・・式(4)
【0113】
以下では、演算装置100が8個のデータの逆数論変換のバタフライ演算を行う場合について説明する。
図20に示すように、8個のデータの逆数論変換のバタフライ演算では、まず、X0からX7の8個のデータのバタフライ演算によって、C0からC7の8個のデータが算出される。次に、C0からC7の8個のデータのバタフライ演算によって、D0からD7の8個のデータが算出される。最後に、D0からD7の8個のデータのバタフライ演算によって、x0からx7の8個のデータが算出される。X0からX7は逆数論変換が行われる前のデータであり、x0からx7は逆数論変換が行われた後のデータである。言い換えれば、x0からx7は数論変換が行われる前のデータであり、X0からX7は数論変換が行われた後のデータである。本明細書では、X0からX7の8個のデータから、C0からC7の8個のデータを算出するバタフライ演算を、1段目のINTTバタフライ演算とも呼ぶ。また、C0からC7の8個のデータから、D0からD7の8個のデータを算出するバタフライ演算を、2段目のINTTバタフライ演算とも呼ぶ。また、D0からD7の8個のデータから、x0からx7の8個のデータを算出するバタフライ演算を、3段目のINTTバタフライ演算とも呼ぶ。
【0114】
図21に示す逆数論変換処理では、8個のデータの逆数論変換のバタフライ演算が実行される。演算装置100は、逆数論変換処理を実行することで、4つの演算ユニット50bを使い回して、8個のデータの逆数論変換のバタフライ演算を実行する。
【0115】
図21のステップS410において、並び替え部30は、逆数論変換のバタフライ演算が行われる8個のデータをメモリ20から取得する。並び替え部30は、
図20に示すX0からX7の8個のデータを取得する。ここで取得されたデータは、X0,X4,X2,X6,X1,X5,X3,X7の順に並んでいる。
【0116】
ステップS420において、演算装置100は、1段目のINTTバタフライ演算処理を実行する。以下では、
図22を参照して、1段目のINTTバタフライ演算処理について説明する。
【0117】
図22のステップS501において、並び替え部30は、メモリ20から取得したデータをバッファする。
【0118】
ステップS502において、並び替え部30は、ステップS501でバッファしたデータを、演算部40に入力する。並び替え部30は、
図25に示すように、X0を第1演算ユニット41の第1入力部51に入力し、X4を第1演算ユニット41の第2入力部52に入力し、X2を第2演算ユニット42の第1入力部51に入力し、X6を第2演算ユニット42の第2入力部52に入力し、X1を第3演算ユニット43の第1入力部51に入力し、X5を第3演算ユニット43の第2入力部52に入力し、X3を第4演算ユニット44の第1入力部51に入力し、X7を第7演算ユニットの第2入力部52に入力する。また、ステップS502において、全ての演算ユニット50bの乗算器56には係数1が入力される。シフト演算部は、シフト演算を実行しない。すなわち、シフト演算部は、入力された値に係数1を乗算した値を出力する。
【0119】
ステップS503において、各演算ユニット50bは、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55、第3演算ユニット43の第1出力部54、第3演算ユニット43の第2出力部55、第4演算ユニット44の第1出力部54、第4演算ユニット44の第2出力部55は、それぞれ、出力データとして、C0,C1,C2,C3,C4,C5,C6,C7を並び替え部30に出力する。以上で説明したようにして、1段目のINTTバタフライ演算処理が実行される。
【0120】
図21のステップS430において、演算装置100は、2段目のINTTバタフライ演算処理を実行する。以下では、
図23を参照して、2段目のINTTバタフライ演算処理について説明する。
【0121】
図23のステップS511において、並び替え部30は、
図22のステップS503で出力された出力データを並び替える。具体的には、並び替え部30は、C0,C1,C2,C3,C4,C5,C6,C7の順に並んでいる出力データを、C0,C2,C1,C3,C4,C6,C5,C7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0122】
ステップS512において、並び替え部30は、ステップS511でバッファした8個の並び替えデータを、演算部40に入力する。並び替え部30は、
図25に示すように、C0を第1演算ユニット41の第1入力部51に入力し、C2を第1演算ユニット41の第2入力部52に入力し、C1を第2演算ユニット42の第1入力部51に入力し、C3を第2演算ユニット42の第2入力部52に入力し、C4を第3演算ユニット43の第1入力部51に入力し、C6を第3演算ユニット43の第2入力部52に入力し、C5を第4演算ユニット44の第1入力部51に入力し、C7を第7演算ユニットの第2入力部52に入力する。また、ステップS512において、第1演算ユニット41および第3演算ユニット43の乗算器56には係数W
4
0が、第2演算ユニット42および第4演算ユニット44の乗算器56には係数W
4
-1が、それぞれ入力される。シフト演算部は、シフト演算を実行しない。
【0123】
ステップS513において、各演算ユニット50bは、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55、第3演算ユニット43の第1出力部54、第3演算ユニット43の第2出力部55、第4演算ユニット44の第1出力部54、第4演算ユニット44の第2出力部55は、それぞれ、出力データとして、D0,D2,D1,D3,D4,D6,D5,D7を並び替え部30に出力する。以上で説明したようにして、2段目のINTTバタフライ演算処理が実行される。
【0124】
図21のステップS440において、演算装置100は、3段目のINTTバタフライ演算処理を実行する。以下では、
図24を参照して、3段目のINTTバタフライ演算処理について説明する。
【0125】
図24のステップS521において、並び替え部30は、
図23のステップS513で出力された出力データを並び替える。具体的には、並び替え部30は、D0,D2,D1,D3,D4,D6,D5,D7の順に並んでいる出力データを、D0,D4,D2,D6,D1,D5,D3,D7の順に並び替える。並び替え部30は、上述した順に並び替えた並び替えデータをバッファする。
【0126】
ステップS522において、並び替え部30は、ステップS521でバッファした8個の並び替えデータを、演算部40に入力する。並び替え部30は、
図25に示すように、D0を第1演算ユニット41の第1入力部51に入力し、D4を第1演算ユニット41の第2入力部52に入力し、D2を第2演算ユニット42の第1入力部51に入力し、D6を第2演算ユニット42の第2入力部52に入力し、D1を第3演算ユニット43の第1入力部51に入力し、D5を第3演算ユニット43の第2入力部52に入力し、D3を第4演算ユニット44の第1入力部51に入力し、D7を第4演算ユニット44の第2入力部52に入力する。また、ステップS522において、第1演算ユニット41の乗算器56には係数W
8
0が、第2演算ユニット42の乗算器56には係数W
8
-2が、第3演算ユニット43の乗算器56には係数W
8
-1が、第1演算ユニット41の乗算器56には係数W
8
-3が、それぞれ入力される。シフト演算部は、シフト演算を実行する。シフト演算部は、入力された値に1/8を乗算した値を出力する。
【0127】
ステップS523において、各演算ユニット50bは、バタフライ演算を実行する。第1演算ユニット41の第1出力部54、第1演算ユニット41の第2出力部55、第2演算ユニット42の第1出力部54、第2演算ユニット42の第2出力部55、第3演算ユニット43の第1出力部54、第3演算ユニット43の第2出力部55、第4演算ユニット44の第1出力部54、第4演算ユニット44の第2出力部55は、それぞれ、出力データとして、x0,x4,x2,x6,x1,x5,x3,x7を並び替え部30に出力する。
【0128】
ステップS524において、並び替え部30は、ステップS523で出力された出力データを並び替える。具体的には、並び替え部30は、x0,x4,x2,x6,x1,x5,x3,x7の順に並んでいる出力データを、x0,x1,x2,x3,x4,x5,x6,x7の順に並び替える。以上で説明したようにして、3段目のNTTバタフライ演算処理が実行される。
【0129】
図21のステップS450において、CPU10は、
図24のステップS524で並び替え部30が並び替えた並び替えデータをメモリ20に記憶させる。以上で説明したようにして、逆数論変換処理が実行される。
【0130】
以上で説明した第4実施形態によれば、演算装置100は、逆数論変換処理を実行することで、同じ演算ユニット50bを繰り返し使用してバタフライ演算を行い、8個のデータの逆数論変換のバタフライ演算を実行する。また、演算装置100は、第1実施形態と同様に、数論変換処理を実行することで、8個のデータの数論変換のバタフライ演算を実行する。そのため、演算装置100は、少ないハードウェアリソースでも数論変換および逆数論変換を実行できる。したがって、数論変換および逆数論変換を実行できる演算装置100を小型化でき、数論変換および逆数論変換を実行できる演算装置100を車両に組み込みやすくできる。
【0131】
E.第5実施形態:
第5実施形態では、演算装置100は、逆数論変換のバタフライ演算を行う装置である。演算装置100は、例えば、車両が、車両の外部に存在する通信装置と通信する場合や、車両を制御するプログラムを実行する場合等に、逆数論変換のバタフライ演算を行うことで、データの暗号化または復号を行う。
【0132】
第5実施形態では、演算ユニット50cの構成が、第1実施形態と異なる。演算ユニット50c以外の演算装置100の各部の構成は、第1実施形態と同じである。第5実施形態では、演算ユニット50cは、2つの入力データの逆数論変換のバタフライ演算を実行可能に構成されている。メモリ20には、逆数論変換のバタフライ演算によって暗号化または復号が行われるデータに含まれるデータが記憶される。
【0133】
図26に示すように、第5実施形態の演算ユニット50cは、第1入力部51と、第2入力部52と、乗算器53と、第1出力部54と、第2出力部55と、第1シフト演算部57と、第2シフト演算部58と、を備える。第5実施形態の演算ユニット50cは、第1実施形態の演算ユニット50と異なり、乗算器53が、第2出力部55の手前ではなく、第2入力部52の直後に設けられている。また、第1シフト演算部57と第2シフト演算部58は、それぞれ、第1出力部54と第2出力部55の手前に設けられている。第1入力部51に値Aが入力され、第2入力部52に値Bが入力され、乗算器53に係数Cが入力された場合に、第1出力部54から出力される値Xと、第2出力部55から出力される値Yは、それぞれ上述した式(3)と式(4)で表される。第5実施形態では、演算装置100は、
図21に示す第4実施形態の逆数論変換処理と同様にして、8個のデータの逆数論変換のバタフライ演算を実行する。
【0134】
以上で説明した第5実施形態によれば、演算装置100は、逆数論変換処理を実行することで、同じ演算ユニット50を繰り返し使用してバタフライ演算を行い、8個のデータの逆数論変換のバタフライ演算を実行する。そのため、演算装置100は、少ないハードウェアリソースでも逆数論変換を実行できる。したがって、逆数論変換を実行できる演算装置100を小型化でき、逆数論変換を実行できる演算装置100を車両に組み込みやすくできる。
【0135】
F.他の実施形態:
(F-1)第1実施形態では、演算部40は4個の演算ユニット50を備える。第2実施形態では、演算部40は2個の演算ユニット50を備える。第3実施形態では、演算部40は1個の演算ユニット50を備える。また、第1実施形態から第3実施形態では、演算部40には8個の入力データが入力される。これに対して、演算部40は、2のj乗個(jは3以上の整数)の演算ユニット50を備えてもよい。すなわち、演算部40は、2のm乗個(mは0以上の整数)の演算ユニット50を備えてもよい。演算部40が2のm乗個の演算ユニット50を備える場合、演算部40には、2のn乗個(nはn>mを満たす整数)の入力データが入力される。すなわち、演算装置100は、2のn乗個のデータのバタフライ演算を行う。
【0136】
(F-2)上記実施形態では、入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータであるが、入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータでなくてもよい。
【0137】
(F-3)上記実施形態では、演算装置100は、車両に搭載されているが、演算装置100は、車両に搭載されていなくてもよい。
【0138】
G.他の形態:
本開示は、上述した実施形態に限られるものではなく、その趣旨を逸脱しない範囲において種々の形態で実現することができる。例えば、本開示は、以下の形態によっても実現可能である。以下に記載した各形態中の技術的特徴に対応する上記実施形態中の技術的特徴は、本開示の課題の一部又は全部を解決するために、あるいは、本開示の効果の一部又は全部を達成するために、適宜、差し替えや、組み合わせを行うことが可能である。また、その技術的特徴が本明細書中に必須なものとして説明されていなければ、適宜、削除することが可能である。
【0139】
<形態1>数論変換を行うための演算装置(100)は、2つの入力データのバタフライ演算を行うように構成された演算ユニット(50)を1つまたは並列に複数備え、2つ以上の前記入力データと同数の出力データを出力する、演算部(40)と、前記出力データを予め定められた順番に並び替えた並び替えデータを生成し、前記並び替えデータの一部または全部を前記入力データとして繰り返し前記演算部に入力する、並び替え部(30)と、を備える。
【0140】
<形態2>上記形態1の演算装置において、前記入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータであってもよい。
【0141】
<形態3>上記形態1の演算装置において、前記演算装置は、車両に搭載されてもよい。
【0142】
<形態4>上記形態3の演算装置において、前記入力データは、前記車両の外部に存在する通信装置の正当性を検証するための認証データに含まれるデータであり、前記車両が、前記通信装置と通信する場合に、前記演算部に前記入力データが入力されてもよい。
【0143】
<形態5>上記形態3の演算装置において、前記入力データは、前記車両を制御するプログラムの正当性を検証するための認証データに含まれるデータであり、前記車両が前記プログラムを実行する場合に、前記演算部に前記入力データが入力されてもよい。
【0144】
<形態6>上記形態3の演算装置において、前記入力データは、前記車両に搭載されたデバイスの正当性を検証するための認証データに含まれるデータであり、前記デバイス同士が通信する場合に、前記演算部に前記入力データが入力されてもよい。
【0145】
<形態7>上記形態1の演算装置において、前記演算ユニットは、1つの前記入力データである第1入力データが入力される第1入力部と、前記第1入力データとは異なる1つの前記入力データである第2入力データが入力される第2入力部と、入力された値に予め定められた係数を乗算した値を出力する乗算器と、1つの前記出力データである第1出力データを出力する第1出力部と、前記第1出力データとは異なる1つの前記出力データである第2出力データを出力する第2出力部と、を備え、前記第1出力部は、前記第1入力データと前記第2入力データを加算した値を前記第1出力データとして出力し、前記第2出力部は、前記第1入力データから前記第2入力データを減算した値に、前記係数を乗算した値を、前記第2出力データとして出力してもよい。
【0146】
<形態8>上記形態1の演算装置において、前記演算ユニットは、数論変換および逆数論変換のバタフライ演算を実行可能に設けられており、入力された値、または、入力された値にシフト演算を行った値を選択的に出力するシフト演算部と、前記バタフライ演算に含まれる乗算を実行する位置を選択可能に設けられ、入力された値に予め定められた係数を乗算した値を出力する、乗算器と、を備え、前記演算ユニットが数論変換のバタフライ演算を実行する場合に、前記シフト演算部は、入力された値を出力し、前記乗算器は、前記出力データが出力される直前に前記乗算を実行し、前記演算ユニットが逆数論変換のバタフライ演算を実行する場合に、前記シフト演算部は、入力された値に前記シフト演算を行った値を出力し、前記乗算器は、前記入力データが入力された直後に前記乗算を実行してもよい。
【符号の説明】
【0147】
10…CPU、20…メモリ、30…並び替え部、40…演算部、41…第1演算ユニット、42…第2演算ユニット、43…第3演算ユニット、44…第4演算ユニット、50…演算ユニット、51…第1入力部、52…第2入力部、53…乗算器、54…第1出力部、55…第2出力部、56…乗算器、57…第1シフト演算部、58…第2シフト演算部、61…乗算器第1入力部、62…乗算器第1出力部、63…乗算器第2入力部、64…乗算器第2出力部、100…演算装置