技術分野
本発明は、 通信データ用の符号演算装置に関し、 更に詳しくは、 ディジタ ル ·バケツトデータの送受信において必要となる誤り検出(訂正)符号の生成 明
とデータ暗号化 Z復号化処理のための符号演算装置に関する。
糸 mm.
背景技術
ディジタル通信装置では、 データの機密性保持おょぴネットワーク上での 信号誤りの発生に備えて、 バケツトデータの暗号化ノ復号化機能と誤り検出 (訂正)符号の生成機能が必要となる。 音声データやテキストデータの他に、 情報量の多い静止画像や動画像等の通信ニーズが増えるに従って、 ディジタ ル通信装置には、 データ転送速度の高速化に適した喑号化ノ復号化技術と誤 り検出(訂正)符号の生成技術が要求されてきている。
データパケットの誤り検出符号としては、 例えぱ、 誤り訂正は行わずに誤 り.検出のみを目的とした C R C (Cyclic Redundancy Check Codes : 巡回冗長 検查符号) がよく使われる。 C R C.演算式については、例えば、 Ramabadran, T. V. and Gaitonde S. S. "A Tutorial on CRC Computations" , IEEE Micro, vol. 8、 No. 4、 pp. 62-75, Aug. 1988に記載されている。
一方、 データの機密性を保持するために使用される暗号方式としては、 R S A暗号が有名である。 しかしながら、 R S Aでは、 暗号 Z復号鍵として 1 0 2 4ビットの長い符号を必要としているため、 最近では、—符号長が 1 6 0 ビット程度と短くて済む楕円曲線暗号 (ECC:Elliptic Curve Cryptography) が注目されている。 楕円曲線暗号処理に関する文献としては、 例えば、 Moon, .、 Park, J. and Lee, Y.、 Fast VLSI Arithmetic Algorithms
for High-Security Elliptic Curve Cryptographic Applications" IEEE Trans. Consumer Electronics^ vol.47、 No.3、 pp.700 - 708、 Aug.2001がある。 上記文献には、 楕円曲線暗号 (E C C) に必要な演算 式と、 E C C処理を実現した大規模集積回路の 1例について説明され ている。
: SAは、 桁上げ伝播が発生するモジュラー演算を採用しているため、 ハ 一ドウエア量が多くなる。これに対して、 E C Cは、以下に説明するように、 桁上げ伝播が発生しないガロア体 (有限体) をベースにしているため、 デー タの暗号/復号化をコンパクトなハードウェアで実現できる。
式 (1 ) が示すガロア体上の n次多項式 g(x)によるモジュラー演算 od) を考 ^る。
g(x) = xn + gn-!x"-1 + ··· + gjX + 1 (1)
この多項式のガロア体は、 般に G F (2 n)と表記される。 係数 の値は " 0 " または " 1 " であり、 gi e G F ( 2 )と表記される。 また、 G F (2)の係数項内では、 排他的論理和 (E O R) 演算(④)が行われる が、 本明細書では、 特に混乱しない限り (+) 演算子で代用する。 今、 長さ nのデータを表現する次の 3つの多項式について考える。
n— 1 n— 1 π— 1 a ) = J a.x1 , b ) 二 J b 1, c (x) = ^ c-x1 3 i=0 i=0 i-0
但し、 ai5 bt, Ci € G F (2 )
E C Cの場合、 共通鍵または秘密鐽と呼ばれる暗号鍵を示すデータ を多項式 a(x)とし、 この暗号鍵が適用される送受信データを多項式 b(X)とすると、 送信側における暗号化データ、 または受信側における 複号化データ (元の平文データ) は、 次式 (2 ) の演算結果 c(x)とし て得られる。
c x) ≡ a ) -b (x) mod g ) ( 2 )
式 (2 ) を詳しく書く と、 次式 (3 ) にょうになる。
文献: Mastrovito, E. D. , "VLSI Designs for Multiplication over Finite Fields GF(2
m) " 、 Proc. Sixth Int, 1 Conf. ("Applied Algebra, Algebraic Algorithms, and Error- Correcting Codes (AAECC- 6)」 pp.297- 309, Jul. 1988 と、 公開公報 TO 91/20028号 (発明の名称 「Universal Galois Field Multiplie ) において、 Mastrovitoは、 式 (3) を次の行列形式に変換 することを試みている。
c = M-b (5) 式(4) における n X nの行列 Μは、 Mastrovito行列と呼ばれており、 行列 Mの値は、多項式 a (X)と g(x)から前もって計算することができる。 一方、 CR Cの値は、 送信メッセージ (または受信メッセージ) の データを多項式 b(x)で示した場合に、次式(6)で示すように、 xn'b(x) を多項式 g(x)で割った時に得られる余り c(x)として算出される。
c (X) ≡ xD-b ) mod g (x) (6) ここで、 xn'b(x)は、 データ b(x)を nビット左シフトすることを意味 しており、 データの送信側では、 式 (6) で算出された CRCの値: 多項式 c(x)を送信データ b(x)に加算した形で、 伝送路に送出する。 データの受信側では、 CR C付きの受信データ b(x)に対して同様の 演算を行い、 演算結果 cO が 0となった場合、 極めて高い確率で受信
データ b(x)には誤りがないものと判定する。
式 (2.) と式 (6) とを比較すると、 CR Cと E C Cの演算式が極 めて類似していることがわかる。 両者の違いは、 CRCの場合、 デー タ b(x)に乗算される値が n次の χπであるのに対して、 E C Cの場合は、 η - 1次の多項式 a(x)となっている点にある。
Mas rovito行列について述べた上記文献では、 BCHや Reed-Solomonと 呼ばれる誤り訂正方式を式 (2) で一般的に取り扱おうとしているように思 われる。 しかしながら、 上記文献には、 これらの符号化方式を具体的にどの ようにして式 (2) に結びつけるかについて具体的な記載がない。 また、 後 述する本発明が着目した CRC符号の行列表現に関して、上記文献には何 ら示唆されていない。 発明の開示 ■ 本発明の目的は、 誤り検出処理と暗号/復号化処理に共用できる符号演算 装置を提供することにある。
本発明の他の目的は、 誤り検出処理と暗号/復号ィヒ処理に共用できるガロ ァ体 (有限体)符号演算装置を提供することにある。
本発明の更に他の目的は、 誤り検出処理用と暗号/復号化処理用の行列値 を同一の行列値演算部で算出し、 これらの行列値を選択的に利用して、 誤り 検出処理と暗号ノ複号化処理を行うようにした符号演算装置を提供すること にめ 。
本発明の更に他の目的は、 コンパクトなハードウェア構成で誤り検出処理 と暗号/"復号化処理を実行できるパケット通信装置を提供することにある。 これらの目的を達成するために、 本発明では、 ガロア体ベースの CRCと ECCの演算式の類似性に着目し、 C RC演算と EC C演算のためのハード ウェアを共通化することを特徴とする。
C R Cと楕円曲線暗号 E C Cの演算処理を共通化しようとした場合、 容易に考えられる解決方法の 1つは、 式 (2 ) で示した E C C演算で データ b(x)に乗算される多項式 a(x)の次数を n— 1次から n次に上げ ることによって、 式 (6 ) で示した CR C演算における xnの次数と一 致させておき、 CR C演算を行う場合は、 多項式 a(x)の n次の係数部 を使用する方法である。 しかしながら、 このように多項式 a(x)の次数 を増やす方法では、 本質的な解決策とはならない。
本発明では、 ガロア体モジュロ演算がもつ次の性質を利用して、 C R Cと E C Cの演算処理を共通化する。
すなわち、 式 (1 ) が示すように、 ガロア体モジュロ演算に適用さ れる既約多項式 g(x)は、 xnの係数 gnが " 1 " となっている。 そこで、 式 (6 ) が示す CR C演算に適用される n次以上の高次項 xnを g(x)で モジュロ演算し、 n— 1次以下の余りの項にリダクションすると、 次の 多項式 (7 ) が得られる。
x
n mod g(x) ≡
+ ··· + gj + 1 ( 7
ここで、 式 (7) の右辺を
g, (x) = 一1 + -" + gjX + 1 (8 )
と置き換えると、 式 (6 ) に示した C R Cの演算式は、 次式 (9 ) の ように変形され、 E C Cの演算式 (2) と同様に、 データ b(x)に乗算 される多項式の次数を n-1次にすることができる。
c (x) ≡ g (x) -b(x) mod g(x) ' (9ノ
C R Cの値は、 a(x)に代えて g' (x)の値をセットすることにより、式 (9)に従って算出できる。
また、 xnよりも更に高次の項 xn+1を g(x)でモジュロ演算すると、 式 (7)を利用して、 次式 (1 0 ) が示すように、 n - 1次以下の項にリダク シヨンできることが判る。
,η+1
mod g (x) ≡ gn— iXn + gn_2xn_1 + ·" + gjx2 + x
= gB-i (gn-iXn_1 + -" + gix + 1) + gn-2xn— 1 + … + gjX2 + x
= (gn-lgn- l+gn- 2)Xn_1+(gn- lgn- 2+gn- 3)Xn— 2 + ·'·
+ (gn-l 2+gl) X2+ (gn-lSl + D ^+Sn-l (1 0) 従って、 n次以上の高次項は、 n- 1次以下の項にリダクションした後、 の係数項間を比較することによって、 式 (4) または (5) の行列 値を得ることができる。
本発明の特徴の 1つは、 CRCの演算式を式(9) のように変形し、 次数を EC C演算式 (3) に適合させることによって、 同一の行列値 演算部を利用して、 E C C用行列値と C R C用行列値を計算できるよ うにしたことにある。 また、 本発明の他の特徴は、 予め計算された E C C用行列値と CR C用行列値を選択的に利用することによって、 同 一の積和演算部で、 E C C符号化 Z復号化演算と C R C演算を実行で きるようにしたことにある。 図面の簡単な説明
第 1図は、 本発明が適用される誤り検出機能と暗号処理機能を備え たバケツト通信装置の構成を示すブロック図。
第 2図は、 CRC誤り検出の符号化、 復号化処理を説明するための 図。
第 3図は、 ECC暗号化、 復号化処理を説明するための図。
第 4図は、 行列演算回路 30を備えた本発明による演算装置の 1実施 例を示すブロック図。
第 5図は、 行列演算回路 30で生成される行列 Mの計算値配列を説 明するための図。
第 6図は、 η X ηの行列 Μの計算値を複数の部分行列に分割して生
成する場合の説明図。
第 7図は、 E C C用の行列 Mを構成する部分行列と入出力データと の関係を説明するための図。
第 8図は、 C R Cと E C Cに共用される行列値演算部 3 0の 1実施 例を示す図。
第 9図は、 第 4図に示したコントローラ 7 0が実行する C R C行列 値生成ルーチン 1 0 0の 1実施例を示すフロ一チヤ一ト。
第 1 0図は、 コン トローラ 7 0が実行する E C C用行列値生成ルー チン 1 2 0の 1実施例を示すフロ一チヤ一ト。
第 1 1図は、 コン トローラ 7 0が実行する送信データ処理ルーチン
2 0 0と受信データ処理ルーチン 3 0 0を示すフロ一チヤ一ト。
第 1 2図は、 送信データ処理ルーチン 2 0 0における送信データ暗 号化 2 1 0の詳細を示すフローチヤ一ト。
第 1 3図は、 送信データ処理ルーチン 2 0 0における C R C生成 2
3 0の詳細を示すフローチヤ一ト。 発明を実施するための最良の形態
第 1図は、 本発明が適用されるデータ誤り検出機能と暗号処理機能を備え たパケット通信装置のプロック図を示す。
バケツト通信装置は、 コアプロセッサ (P- CORE) 1 0と、 送受信データ処理 部 2 0と、伝送路 1 3に接続された送信部 1 1および受信部 1 2とカゝらなる。 送信部 1 1と受信部 1 2は、 伝送路 1 3が無線の場合、 A/D DZA変換 器と、 R F (Radio Frequency)処理部とを含み、伝送路 1 3がアナ口グ有線回 線の場合は、 モデム処理部を含む。
送受信データ処理部 2 0は、 制御プロセッサ (P - C0NT) 2 1と、 暗号符号化 部 (ECC - ENC) 2 2、 誤り検出符号ィ匕部(CRC- ENC) 2 3、 誤り検出複号化部
(C C-DEC) 2 4、 喑号復号化部 (ECC-DEC) 2 5と、 パッファメモリ(BUF- MEM) 2 6、 メモリ(MEM) 2 7からなり、 これらの要素は、 內部バス 2 9 ( 2 9 A、 2 9 B ) によって相互接続されている。
コアプロセッサ 1 0から出力された送信メッセージ (平文データ) は、 パ ッファメモリ 2 6の送信パッファ領域に一時的に格納され、 送信データに機 密保持が必要な場合は、送信メッセージが暗号符号ィヒ部 2 2で暗号化される。 送信メッセージ (平文データまたは暗号化データ) は、 誤り検出符号化部 2 3で生成した誤り検出符号を付加した形で、 送信部 1 1から伝送路 1 3に送 出される。
逆に、 伝送路 1 3から受信した誤り検出符号付きの受信メッセージ (平文 データまたは暗号化データ) は、 受信部 1 2からバッファメモリ 2 6の受信 バッファ領域にー且格納され、 誤り検出復号化部 2 4で受信メッセージの誤 り検出符号の余り演算が行われる。 余りがゼロの場合、 受信データに誤りが ないものと判断し、 受信メッセージから誤り検出符号が除去される。 誤り検 出符号を取り除いた受信メッセージのデータが暗号文の場合、 暗号復号化部 2 5で平文に戻した後、 バッファメモリ 2 6を介してコアプロセッサ 1 0に 転送される。 誤り検出およびデータの喑号/複号化に必要な情報は、 メモリ
2 7から読み出.され、 暗号符号化部 2 2、 誤り検出符号化部 2 3、 誤り検出 復号化部 2 4、 暗号復号化部 2 5は、 制御プロセッサ 2 1に制御される。 第 2図は、誤り検出に C R Cを適用した場合の誤り検出符号化部 2 3と 誤り検出復号化部 2 4の動作を示す。
この場合、 誤り検出符号ィ匕部 2 3では、 送信データを nビット長 (n =
3 2ビット) のデータブロック b (x)に分割し、 データブロック毎に符 号化する。 先ず、 式 (6 ) が示すように、 データ b (x)を nビッ ト左へ シフト (xn ' b (x)の演算) した後、 これを予め指定された数値 g (x)で割 つて (モジュロ演算) 、 余り r (x)を求める。
r (x) ≡ xn*b (x) mod g (x) (1 1 ) 次に、 r(x)をデータ xn b(x)に加算、 すなわち、 w(x)=xn-b(x) Θ r (x) の演算を行う。 その結果、 元の nビットデータブロックは、 2 nビッ ト長のデータプロック w(x)に変換した形で伝送路に送出される。
一方、 受信側の誤り検出複号化部 24では、 伝送路から受信したデー タブ口ック w (X)二 xn'V (χ) θ τ (χ)に対して、 送信側と同一の数値 g(x)でモジュロ演算を実行して、 余りを求める。 伝送路上で誤りが発 生していなければ、 次式 (1 2) が成立し、 余り c(x)がゼロになる。
c (x) ≡ Lxn* ) Θ r ) mod g ) ]
二 x (x) Θ r' (x) (1 2 )
この場合、 受信データ ( から r' )を除去し、 nビット右シフト することによって、 元のデータプロック b(x) = b' (x)を復元できる。 尚、 伝送路からの受信メッセージ長が 2 nビットよりも長い場合は、 2 nビット長のデータブロック毎に、 上述した誤り検出複号化処理が繰 り返される。
第 3図は、暗号化に EC Cを適用した場合の暗号符号化部 2 2と暗号復 号化部 2 5の動作を示す。
喑号符号化部 2 2では、 送信データを nビッ トのデータプロックに 分割し、送信データプロックを多項式 b(x)、共通鍵を多項式 a(x)とし、 既約多項式 g(X)でモジュロ演算を実行することにより、 式(2)が示す 暗号化データ c(x)を生成する。
E C C暗号符号化データのプロック長 nは、 C R Cよりも長い 160 ビット程度になるため、 C R Cと同一ハードウエアを適用するために、 送信データプロック b(x)、共通鍵 a(x)、既約多項式 g(x)をそれぞれ C R Cビット長に合わせた複数のサブブロック分割して、 暗号化処理を 繰り返す。
誤り検出符号が付加された暗号化データは、受信側で誤り検出され、 もし、 誤りがなければ、 誤り検出符号を除去した暗号化データ c(x)に 戻される。 受信側の暗号複号化部 25では、 次式 (13) が示すように、 式(2)の a(x)、b(x)の代わりに秘密鍵 d(x)と受信データ c(x)を適用し、 既約多項式 g(x)によってモジュロ演算を実行することによって、 復号 化されたデータ b(x)を得る。
b(x) ≡ d(x) -c(x) mod g(x) (1 3) 本発明の特徴は、 上述した誤り検出符号化部 23、 誤り検出復号化部 2 4、 暗号符号^ ^部 22、 暗号複号化部 25に必要なハードウェアを共用する ことによって、 送受信データ処理部 20の構成を簡単化したことにある。 第 4図は、 本発明による送受信データ処理部 20の 1実施例を示す。 送受信データ処理部 (符号演算装置) 20は、 行列値演算部 (MAT- UNIT) 3 0、 積和演算部(CAL -環 IT) 40、 制御部(CONTROLLER) 70と、 バッファメモ リ(BUF - NEM) 26、 パラメータ格納用のメモリ 27、 行列値格納用のメモリ (MAT-MEM) 50、 行列値レジスタ(M- REG) 51、 演算結果保持メモリ(C - MEM) 52と、 パラメータレジスタ(A- REG、 G-REG) 201、 202、 デ一タレジス タ(B - REG) 203、 符号レジスタ(C- REG) 204と、 E0R加算回路 53と、一 致検出回路 54からなる。
メモリ 2 7は、 CRC演算で必要となるリダクションされた多項式 g' (X)の記憶領域(g'- CRC) 27 1 と、 E CC演算で必要となる既約多項 式 g(x)の記憶領域(g- ECC) 2 7 2、暗号鍵(公開键)の記憶領域(E- KEY) 2 7 3と、 復号鍵 (秘密鍵) の記憶領域(D- KEY) 2 74とを含む。
また、 ノ ッファメモリ 26には、 コアプロセッサ 1 0から供給され た送信メッセージの格納領域(Tx - BUF) 26 1 Α, 暗号化送信メッセー ジの格納領域(Tx - ENC) 26 2 Αと、 受信部から供給された C R C付の 受信メッセージの格納領域(Rx- CRC) 26 3 B、 CRC除去後の暗号化
受信メツヤージの格納領域(Rx - ENC) 2 6 2 B、 復号化された受信メッ セージの格納領域(Rx - BUF) 2 6 1 Bとが定義され、 コアプロセッサ 1 0と送受信データ処理部 2 0との間では、 Tx- BUF領域 2 6 1 Αと Rx - BUF 領域 2 6 1 Bを介してメッセージが送受信される。
本実施例で示した送受信データ処理部 (符号演算装置) 2 0の動作モー ドには、 行列値演算モードと、 送信データ暗号化モードと、 送信データ誤り 符号化モ ドと、 受信データ誤り検出モードと、 暗号データ複号化モードと がある。 これらの動作モードの切替えは、 制御部 7 0が行う。
行列値演算モードにおいて、例えば、 E C C暗号化用の行列値を生成する 場合は、 制御部 7 0力 メモリ領域 2 7 2から読み出した既約多項式 g(x)の 値を G- REG 2 0 2に設定し、メモリ領域 2 7 3から読み出した暗号鍵を A - REG 2 0 1に設定した状態で、 行列値演算部 3 0を起動する。 生成された行列値 は、 メモリ 5 0の暗号化用行列領域に保持される。 +
同様に、 E C C復号化用の行列値は、 メモリ領域 2 7 2から G- REG 2 0 2 に既約多項式 g (x)の値を設定し、メモリ領域 2 7 4から A - REG 2 0 1に復号 鍵を設定した状態で生成され、 行列値演算部 3 0で生成された行列値は、 メ モリ 5 0の復号用行列領域に保持される。
C R C用の行列値は、 A - REG 2 0 1と G - REG 2 0 2にメモリ領域 2 7 1力、 ら g' (x)の値を設定した状態で生成され、行列値演算部 3 0で生成された行 列値は、 メモリ 5 0の C R C用行列領域に保持される。
ここで、 A- REG 2 0 1と G - REG 2 0 2を、 例えば、 C R C演算用のパラメ ータ長に合わせて 3 2ビット長とした場合、 C R C用の行列値は、 これらの レジスタへの 1回のパラメータロードで計算できる。 しかしながら、 E C C 演算のパラメータは、 C R C演算用のパラメータよりも長いため、 E C C暗 号化用おょぴ復号ィヒ用の行列値は、 後述するように、 メモリ 2 7から既約多 項式 g(x)と暗号ィヒ鍵をそれぞれ 3 2ビット単位で分割して読み出し、 レジス
タ 2 0 1、 2 0 2の設定パラメータを切替えながら、 行列値演算を複数回繰 り返すことによって生成される。
送信データ暗号化モードでは、 バッファメモリの Tx- BUF領域から 3 2 ビットのサブプロック単位で読み出した送信データを Β- REG 2 0 3に 供給し、送信データ暗号化に必要な部分行列値をメモリ 5 0から M - REG 5 1にロードして、積和演算部 4 0を起動する。 この場合、 B-REG 2 0 3に設定された 1つのデータプロックに対して、 M - REG 5 0の内容を切 替えながら、 複数回の積和演算が繰り返される。
積和演算部 4 0の演算結果は、 C - REGレジスタ 2 0 4に出力される。 C-REGレジスタ 2 0 4に出力された演算結果は、 C- MEM 5 2に中間演算 値として保持される。 C- MEM 5 2は、 E C C符号長に応じたビッ ト数の 記憶容量を有し、 積和演算サイクル毎に、 E0R加算回路 5 3によって、 新たな演算結果が部分行列と対応した中間演算値に加算される。
E C C符号長に相当する複数サブプロック分の送信データについて 暗号化演算処理が完了すると、 C- MEM 5 2の内容が暗号化データとして 読み出され、パッファメモリ 2 6の Tx - ENC領域 2 6 2 Aに転送される。 上述した積和演算の繰り返しによって、 Tx- BUF領域に格納された 1 メッセージ分の暗号化処理が完了すると、 動作モードが送信データ誤り 符号化モード (C R C演算モード) に切り替えられる。
送信データ誤り符号化モードでは、 MAT- MW0 5 0から M- REG 5 1に C R C用の行列値を口一ドした状態で、バッファメモリ 2 6の Tx- ENC領 域 2 6 2 Aから、 3 2ビット単位で暗号化データプロックを読み出し、 B - REGレジスタ 2 0 3と送信部 1 1に転送する。伹し、送信データが暗 号化を必要としない場合は、バッファメモリ 2 6の Tx - BUF領域 2 6 1 Aから読み出されたデータプロックが B- REGレジスタ 2 0 3と送信部 1 1に供給される。
積和演算部 4 0は、 B - REGレジスタ 2 0 3のデータブロックと M- REG 5 1が示す C R C用行列値との積和演算を実行し、 演算結果を C - REG レジスタ 2 0 4に出力する。 この場合、 C- REGレジスタ 2 0 4に出力さ れた演算結果は、 既に供給済みのデータプロックに付加すべき C R C 符号として、 パス 2 9を介して送信部 1 0に転送される。
受信データ誤り検出モードでは、 バッファメモリ 2 6の Rx- CRC領域 2 6 3 Bから読み出した受信データを対象として、 積和演算部 4 0により、 B-REGレジスタ 2 0 3のデータブロックと M - REG 5 1の C R C用行列 値との積和演算を実行する。
この場合、 Rx- CRC領域 2 6 3 Bには、 3 2ビットのデータブロック毎に 3 2ビットの C R C符号プロックを付加した形で、 受信データが格納されて いる。 従って、 受信データの誤りの有無は、 例えば、 第 1サイクルで 3 2ビ ットのデータプロックを読み出して C R C :r (x〉を生成し、第 2サイクルで、. 上記データプロックに続く 3 2ビットの C R C符号プロックを読み出して C R C : r' (X)を生成し、 r' (x)と r (x)の一致を確認することによって判定 できる。
上記 r ( と r Oc)との一致検出は、一致検出回路 5 4で行われ、検出 結果が制御部 7 0に通知される。 制御部 7 0は、 誤り検出を終えたデ ータプロックをバッファメモリの RX - ENC領域 2 6 2 B (非暗号化デー タブロックの場合は Rx-BUF領域 2 6 1 B ) に転送し、 誤りのあるデ一 タブ口ックは廃棄する。
暗号データ復号化モードでは、 Rx-ENC領域 2 6 2 Bから読み出したデ 一タブロックを対象として、 積和演算部 4 0で送信データ暗号化モー ドと同様の演算を行う。復号化されたデータは、 C-MEM 5 2から Rx- BUF 領域 2 6 1 Bに転送される。
第 5図は、 行列値演算部 3 0で生成される行列 Mの 1例を示す。
第 4図の実施例では、 行列値演算部 30が 32X32サイズの行列を生 成するものとして説明したが、 ここでは、簡単化のために、 8 X 8の行列を 示す。 b。〜 b 7は、 B- REG 20 3に設定されるデータビット、 c。〜 c 7は、演算結果として OREG 204に出力される CRCまたは ECCの ビットを示している。
行列 Mの第 1列の値 (m。。〜m7。) は、 多項式 a (X)の各ビットの値 (a 0〜a 7) で決まる。
第 2列以降の値 (mQ 1〜m77) は、 基本的には
m (i, j)=m (i-1, j-1) + g (i)m(O, j) (1 4) の関係にあり、各列の第 1行目の値(m。い m。2、 m。3—m。7) は、 m(0, j) = g (0)m (max, j-1) (1 5) の関係にある。 ここで、 m(max,j-l 、 第 j-1列の最終行の行列値を 意味している。 .
ここで、多項式 g(x)'の値は、規格で定められた固定値となる。また、 E C C暗号化ノ複号化の場合、 多項式 a(x)は暗号鍵であり、 或る期間 内では固定の値 (半固定値) となる。 また、 誤り検出の場合に、 a(x) に代えて使用される多項式 g' (X)は、 完全な固定値である。 従って、 こ れらのパラメータから生成される行列 Mは、 固定または半固定値とな るため、 行列値演算部 30で一度算出しておけば、 演算結果を繰り返し て利用できる。
行列演算部 30と積和演算部 40の行列演算能力は、 ハードウェア の制約から、 例えば、 1 6 X 1 6または 3 2 X 3 2のように限られた サイズ (以下、 基本サイズと言う) となる。 基本サイズより大きい n X nサイズの行列 Mを扱うためには、 行列 Mを基本サイズをもつ複数 の部分行列に分割し、 部分行列毎の演算動作を繰り返す必要がある。 第 6図は、 n Xnの行列Mを部分行列M(0,0)〜M(I,J)に分割した
例を示す。
ここで、 例えば、 最初の部分行列 M (0,0)における第 2列 (データビ ット 列) の第 1行 (演算結果 c。の行) の行列値 m (0,l)は、 行列 M の左下に位置した部分行列 M (I,0)における第 1列 (データビッ ト b。 の列) の最終行の行列値 πι (η - 1,0)に依存している。 図面では省略され ている次の部分行列 Μ (1, 0)における第 2列第 1行の行列値 m (k, 1)は、 上記最初の部分行列 M (0, 0)における第 1列最終行の行列値 m (k- 1, 0) に依存している。 また、 行列 M全体における第 1列 (データビット b。 の列) を除いて、 各列では、 行列 Mの第 1行目 (演算結果 c。の行) の 値が後続する全ての行(演算結果 c 〜 c n の行)に反映されている。 従って、 行列演算部 3 0で部分行列毎に行列値を生成する場合は、 これらの境界条件を考慮したパラメータ設定が必要となる。
第 7図は、 1 6 0 X 1 6 0ビッ トの行列を 3 2 X 3 2の基本サイズ をもつ複数プロックに分割した場合の部分行列 M (0, 0)〜M (4, 4)の配 列と、 入力データ (B01〜B159) 、 出力符号(C01〜( 159)の関係を示す。
このような部分行列を扱う場合、 積和演算部 4 0には、 入力データ (B01〜B159) が 3 2ビット単位のデータブロック D- 0〜! )_4分割した 形で入力され、 出力符号(C01〜C159)が 3 2ビット単位の符号ブロック ECC- 0〜ECC- 4に分割した形で出力されることになる。
第 8図は、 E C C行列値を 3 2 X 3 2ビッ トの部分行列毎に生成す るようにした行列値演算部 3 0の 1実施例を示す。
行列値演算部 3 0は、 A - REG 2 0 1および G REG 2 0 2の各ビットと 対応して用意された複数の A N D回路 3 1— i、 第 1のセレクタ群 3 3— iおよぴ排他論理和(E0R)回路 3 2— i ( i = 0〜k、 k = 3 1 ) と、 これらの E0R回路の出力値を保持するための複数ビットの記憶領 域 3 5— i ( i = 0〜k ) をもつレジスタ 3 5とからなる。
EOR回路 3 2— iの第 1入力には、制御部 7 0からの制御信号 S 0で 制御されるセレクタ 3 3— iを介して、 A- REG 2 0 1の第 i ビットの値 a i と A N D回路 3 1 一 iの出力値の何れかが選択的に供給される。 最初の E0R回路 3 2— 0を除いて、 E0R回路 3 2— i ( i = l〜k ) に は、 レジスタ 3 5に保持された前列前行の行列値 m (i- 1, j- 1)が第 2入 力として供給される。 最初の E0R回路 3 2— 0の第 2入力には、 制御 部 7 0からの制御信号 S 2で制御されるセレクタ 3 7を介して、 固定 値 " 0 " またはレジスタ 3 5の最終ビッ ト記憶領域 3 5— kに保持さ れた前列最終行の行列値 m (31, j- 1)が供給される。
セレクタ 3 3— 0から出力される部分行列第 1行目の行列値は、 制 御部 7 0からの制御信号 S 3で指定される所定のタイミングで、 ラッ チ回路 3 4に保持される。
A N D回路 3 1— iには、 G - REG 2 0 2の第 i ビットの値 g iが第 1 入力として供給される。 最初の A N D回路 3 1— 0の第 2入力には、 セレクタ 3 6— 0を介して、 前列最終行の行列値 m (31, j-1)と上記ラ ツチ回路 3 4に保持された部分行列第 1行目の行列値の何れかが供給 される。 他の A N D回路 3 1— i ( i = l〜k ) の第 2入力には、 セ レクタ 3 6— iを介して、 セレクタ 3 3— 0の出力値またはラッチ回 路 3 4に保持された部分行列第 1行目の行列値の何れかが供給される c セレクタ 3 6— 0〜 3 6— kは第 2のセレクタ群を構成しており、 制 御部 7 0からの制御信号 S 1で制御される。
本実施例では、 C R C用行列演算と E C C用行列演算に共用するた めに、行列値演算部 3 0力 S、 E0R回路 3 2— iの出力ビッ トを保持する ためのシフ トレジスタ(SHIFT) 3 8— i と、 シフトレジスタ 3 8〜 iの 出力値とレジスタ領域 3 5 - iの出力値の何れかを選択して次行 EOR 回路 3 2—( i + 1 )に供給する第 3のセレクタ群 3 9— i ( i = 0〜
k) を備えている。 第 3のセレクタ群は、 制御信号 S1で制御される最 後のセレクタ 3 9— kを除いて、 制御信号 S4に応じて Aポート、 Bポ 一トの何れかの入力を選択する。
CR C用の行列値を生成する場合、 制御部 70は、 セレクタ 3 7と 第 2セレクタ群 36— 0〜 36— kと第 3のセレクタ群 38— 0〜 3 8— kが常時 Aポート入力を選択するように、 制御信号 Sl、 S2、 S4を 出力する。 また、 第 1セレクタ群 3 3— 0〜 3 3— kが、 行列 Mの第 1列目の行列値演算サイクルでは Aポート入力 (A- REG出力) 、 第 2列 〜第 k列 (k= 3 1) の行列値演算サイクルでは Bポート入力 (AN D回路 3 1— iの出力) を選択するように、 制御信号 SOが切替えられ る。
従って、 第 1列目の行列値演算サイクルでは、 E0R回路 32— i ( i = 0〜 k ) から、 A - REG 20 1が示す各ビットの値 a。〜 a 3 が生成さ れる。 これらのビッ ト値は、 レジスタ 3 5の各記憶領域 35— 0〜 3 5— kに設定された後、 MAT- MEM 50の CRC用行列領域、図示した例 では M (0, 0) の第 1列目に記憶される。
次の、 第 2列目の行列値演算サイクルでは、 第 1行目のセレクタ 3 3— 0力ゝら、 セレクタ 36— 0で選択された記憶領域 3 5— kが示す 前サイクル最終行の行列値 a 3 iと G - REG 20 2が示す第 1ビッ トの値 g。との間の論理積を示す値 (m0、 が出力され、 E0R回路 3 2— 0 に入力される。 上記値 m0、 は、 第 2のセレクタ群 3 6— i ( i = 1 〜k) を介して他の AND回路 3 1— iにも入力される。 従って、 第 1行目以降のセレクタ 3 3— iからは 「g m0、 J を示す値が出力 され、 E0R回路 32— iから式 (14) が示す行列値が出力される。 第 2列目〜第 k列目の各演算サイクルで、 上記と同様の演算動作を 繰り返すことによって、 。 じ用行列領域^^ (0,0) に式 (1 4) 、 ( 1
5) に従った行列値を生成することができる。
—方、 E C C用の行列値を生成する場合は、 第 3のレジスタ群 3 9 — i ( i = 0〜 k) に Bポート入力を選択させた状態で、 A- REG 201 の設定パラメータを入れ替えながら、 行列 Mの第 1列目の行列値演算 サイクルが繰り返される。 これらの演算サイクルで、 レジスタ 3 5に a0〜a31、 a32〜a63、 ·ι128〜&159の値が次々と生成され、 部分行列 Μ (0,0) 、 Μ (1,0) 、 (4, 0) の第 1列目に記憶される。
この時、 最初のシフトレジスタ 3 8— 0には、 a。、 a 32、 a 64、 a 96、 a 28のビッ ト値が保持され、 次のシフトレジスタ 38— 1に は、 aい a 33、 a 65、 a 97、 a 129のビッ ト値、 最後のシフトレジ スタ 3 8— kには、 a 3い a 63、 a 92、 a 127、 a 159のビッ ト値力 S 保持された状態となる。
第 1列目の行列値演算が終了すると、 制御信号 S 0と制御信号 S 2 によって、 第 1セレクタ群 3 3— i とセレクタ 3 7がそれぞれの Bポ —ト入力を選択するように切替える。 この時点では、 レジスタ 3 5の 記憶領域 3 5— kには、行列値 m3 〗 —丄としてパラメータ値" a 159" が設定されている。
以下、 G-REG 20 2の設定値を入れ替えながら、部分行列 M (0,0) 、 M (1, 0) 、 (4, 0) の第 1列目の行列値演算サイクルを繰り返す。
G-REG 202に第 1プロックのパラメータ値 g。〜 g 3 を設定した 演算サイクルでは、 制御信号 S 1の切替えによって、 第 2セレクタ群 3 6— i と、 第 2セレクタ群の最後のセレクタ 3 9— kに Aポート入 力を選択させ、 セレクタ 3 3— 0の出力値 "g。 · a 159" を他の行の AND回路 3 1一 iに入力する。 また、 制御信号 S 3で与えるラッチ 指令によって、 上記セレクタ 3 3— 0の出力値 "g。 · a 159" をラッ チ回路 3 に記憶する。 この時、 E0R回路 3 2— j には、 シフトレジス
タ 3 8—(j 1)から出力された前列前行のビット値 m(0, j- 1)が入力さ れるため、 式 (14) 、 (1 5) に従った第 2行目の行列値 ιη0, 〜 m3 iが生成され、 これらの値が、 シフトレジスタ 38— 0〜 3 8— kと MAT - MEM 5 0の E C C用部分行列 M (0, 0)の第 2列目に記憶される c G-REG 202に第 1ブロック (g 32〜 g 63) 〜第 4プロック (g 12
7〜g 159) のパラメータ値を設定した状態で行われる各演算サイクル では、制御信号 S 1 との切替えによって、第 2セレクタ群 36— i と、 第 3セレクタ群の最後のセレクタ 3 8— kに Bポート入力を選択させ る。 すなわち、 部分行列 M (1,0) 〜M (4,0) の行列値に、 上記ラッ チ回路 34に記憶された" g。 · a 159"を反映させる。 これによつて、 式 (14) 、 ( 15) に従った第 1行目の'行列値 (m32, 〜!!^^ ,) 〜 (n^ 27, 丄 〜 !!^ 5 9、 が次々と生成され、 MAT- MEM 50の部分行 列 M (1,0) 〜M (4, 0) の第 2列目に記憶される。 - 部分行列 M (0,0) 、 M (1, 0) 、 〜M (4,0) の第 3列目〜第 3 2列 目の行列値は、 上述した第 2列目と同様の手順を繰り返すことによつ て生成でされる。 残りの部分行列 M (0,1) 、 M (1,1) 、 (4, 4) では、 第 1列力ゝら第 3 2列までの全ての行列値演算に. G-REG 202の 設定値を利用し、 部分行列 M (0,0) 、 M (1,0) 、 (4,0) の第 2 列目以降の演算サイクルと同様の手順を繰り返す。
第 9図は、 第 8図に示した行列値演算部 3 0を制御対象として制御 部 70が実行する CRC行列値生成ルーチン 1 00の 1実施例を示す c
CRC行列値生成ルーチン 1 00では、 列を指定するためのパラメ —タ iを初期値 0、 最後の列を示すパラメータ jmaxの値を 「3 1」 に 設定(ステップ 10 1)した後、 メモリ領域 2 71から読み出した g, -CRCの値を A-REG 20 1と G-REG 202にロードする (ステップ 1 0 2、 1 0 3) 。 次に、 制御信号 S1〜S4の発生パターンを単一行列モ
ードに設定する。 ここで、 単一行列モードは、 行列値の演算が基本サ ィズ 3 2 X 3 2ビッ トの単一の部分行列で完了することを意味してお り、 このモードでは、 制御信号 Sl、 S2、 S4は、 第 2、 第 3のセレクタ 群 36— i、 3 9— i ( i = 0~k) とセレクタ 3 7に常時 Aポート 入力を選択させた状態となり、 制御信号 S3は、 ラッチ信号を全く発生 しない状態となる。
先ず、制御信号 SOによって、第 1セレクタ群 3 3— i ( i =0〜k) に A- REG 20 1の出力 (Aポート入力) を選択させ (1 0 5) 、 E0R 回路 3 2— i ( i = 0〜k) により第 j列の行列値を演算する (1 0 6)。 E0R回路から出力された第 j列の演算結果は、 レジスタ 3 5に保 持した後、 MAT -腿 M 50に定義された CRC用の行列領域に記憶する (1 0 7) 。 制御信号 SOの状態を切替えて、 第 1セレクタ群 3 3に G-REG 202の出力 (Bポート入力) を選択させる (1 08) 。
次に、 パラメータ j の値をィンクリメントし (1 0 9) 、 j の値を jmaxと比較する (1 1 0) 。 j > jmaxとなっていた場合は、 このノレ一 チンを終了し、 そうでなければ、 パラメータ が示す次列の行列値を E0R回路 32— iにより演算し (1 1 1) 、 第 j列の演算結果を CRC 用の行列領域に記憶する (1 1 2) 。 この後、 ステップ 10 9に戻り、 j 〉jmaxとなる迄、 同様の動作を繰り返す。
CR C用の行列 Mのサイズは、 行列値演算部 30が扱う基本サイズ となっているため、 上述したように、 j = 0〜jmaxの行列値の演算を 繰り返すことによって、 積和演算部 40が必要とする全ての行列値を 生成できる。
第 1 0図は、 第 8図に示した行列値演算部 3 0を制御対象として制 御部 70が実行する E C C行列値生成ルーチン 1 20の 1実施例を示 す。
E C C行列値生成ルーチン 1 20では、 図 7に示した部分行列 M (I, J)を特定するためのパラメータ I、 Jの値と、 部分行列 M(I,J)内 での列番号を指定するためのパラメータ j の値を初期値 0に設定し、 パラメータ I と Jの最大値 Imaxと Jmaxを 4、 j の最大値 jmaxを 3 1 に設定する (1 2 1) 。
次に、 制御信号 Sl、 S2、 S3、 S4の発生パターンを部分行列モードに 設定する。 ここで、 部分行列モードは、 行列値の演算が複数の部分行 列に分割して実行されることを意味しており、 このモードでは、 制御 信号 S1は、 第 2セレクタ群 36— i ( i =0〜k) とセレクタ 39— kが、 部分行列 M(0,J)の演算サイクルでは Aポート入力、 その他の部 分行列 M(I,J) (但し、 1 =:!〜 4) の演算サイクルでは Bポート入力 を選択するように切替えられ、 制御信号 S2は、 セレクタ 37が、 部分 行列 M(I,0) (但し、 1 =0〜4) の第 1列の演算サイクルでは Aポー ト入力、 その後は Bポート入力を選択するように切替えられる。
また、 制御信号 S3は、 部分行列 M(0,J)の各列の演算サイクルでラ ツチ信号を発生し、 ラツチ回路 34にセレクタ 3 3 _ 0の出力値を保 持させる。 ラッチ回路 34の出力値は、 部分行列 M(l, J)〜M(4, J)の 演算サイクルでは不変となる。 制御信号 S4は、 第 3セレクタ群 39— i ( i = 0〜k— l) に常時、 Aポート入力を選択させる。
先ず、制御信号 SOによって、第 1セレクタ群 33— i ( i = 0〜k) に A - REG 20 1の出力 (Aポート入力) を選択させ (1 23) 、 メモ リ 27の E- KEY領域 273力 ら A- REG 20 1に暗号鍵の第 Iプロック KEY (I)をロードする (1 24) 。 この時、 E0R回路 32 - i ( i = 0〜 k) は、 KEY (I)が示す 3 2ビッ トのパラメータに従って、 部分行列 M (I,J)の第 1列の行列値を演算する (1 25) 。 この演算結果は、 シフ トレジスタ 38とレジスタ 3 5に保持した後、 MAT - MEM 50に定義され
た EC C用部分行列領域 M(I, J)の第〗列に記憶される (1 26) 。 次に、 パラメータ Iの値をインクリメントし (1 2 7) 、 Iの値を Imaxと比較する (1 28) 。 I〉 Imaxでなければ、 ステップ 1 24に 戻って、 E - KEY領域 2 7 3から暗号鍵の次のブロック KEY (I)を A - REG 201にロードし、 同様の動作を繰り返す。
I >Imaxとなった場合は、制御信号 SOの状態を切替えて、第 1セレ クタ群 3 3に G-REG 20 2の出力 (Bポート入力) を選択させ ( 1 3 0) 、 パラメータ Iを初期値 0に戻し、 パラメータ j の値をィンク リ メントする (1 3 3) 。
次に、 パラメータ j の値を: imaxと比較し (1 34) 、 j >jmaxでな ければ、 メモリ 2 7の g -ECC領域 2 72力、ら A - REG 20 1に多項式 g (X)の第 Iプロック g- ECC(I)をロードする ( 1 3 5)。 これによつて、 E0R回路 3 2— i ( i = 0〜k) で、 · g- ECC(I)が示す 3 2ビッ トのパ ラメータに従った部分行列 M(I, J)の第 j列の行列値が演算される (1 3 6) 。 演算結果は、 レジスタ 35に保持した後、 MAT- MEM 50に定義 された E C C用部分行列領域 M(I, J)の第 j列に記憶される(1 3 7)。 次に、 パラメータ Iの値をインクリメントし (1 38) 、 Iの値を Imaxと比較する (1 3 9) 。 I〉 Imaxでなければ、 ステップ 1 3 5に 戻って、 E- KEY領域 2 73力 ら g 0 の次のプロック g_ECC(I)を A-REG 201にロードし、同様の動作を繰り返す。ステップ 1 3 9で I >Imax となった場合は、 ステップ 1 3 3に戻り、 パラメータ Iを初期値 0に 戻し、 パラメータ j の値をインクリメントして、 次列の行列値につい て上記と同様の手順を繰り返す。
ステップ 1 34で j > jmaxとなった場合、 ステップ 1 40に進み、 パラメータ j と Iの値を初期値 0に戻し、 パラメータ Jの値をィンク リメントする。 これによつて、 次列の部分行列 M(I,J)が演算対象とな
る。 パラメータ Jの値を Jmaxと比較し ( 1 4 1 ) 、 J > Jmaxとなって いた場合は、 このルーチンを終了する。 J〉 Jmaxでなければ、 ステツ プ 1 3 5に進む。 これによつて、 部分行列 M (0, J)〜M (4, J)内の第 1 列から第 3 2列について、上述した行列値の演算動作が繰り返される。
尚、 上記ステップ 1 3 3〜 1 4 1の実行過程で、 部分行列 M (0, J)の 各列の演算サイクルで、 制御信号 S3で与えるラッチ指令によって、 行 列 Mの第 1行目の行列値がラッチ回路 3 4に保持され、 この値が後続 する部分行列 M (l, J)〜M (4, J)の各演算サイクルで A N D回路 3 1 一 0〜 3 1— kに供給される。 また、 第 8図に示した第 1行の E0R回路 3 2— 0には、 レジスタ 3 5の最後の記憶領域 3 5— kから出力され る前列最終行の行列値が供給されているため、 第 6図で説明した部分 行列間の境界条件を満たすことができる。
. 以上、 E C C暗号化用の行列値生成ルーチンについて説明したが、 プロック KEY (I)として、 メモリ 2 7の D - KEY領域から読み出した復号 鍵を適用すれば、 ル一チン 1 2 0と同様の制御手順で E C C複号化用 の行列値を生成できる。
第 1 1図の (A ) と (B ) は、 積和演算部 4 0を制御対象として制 御部 7 0が実行する送信データ処理ルーチン 2 0 0と受信データ処理 ノレ一チン 3 0 0のフローチャートを示す。
送信データ処理ルーチン 2 0 0は、 バッファメモリ 2 6の Tx- BUF領 域 2 6 1 Αから読み出した送信データ (送信メッセージ) の暗号化処 理 (2 1 0 ) と、 Tx-ENC領域 2 6 2 Aから読み出した暗号化データに ついての C R C生成ノ送信処理 (2 3 0 ) とからなる。 伹し、 送信デ ータの暗号化が不要の場合は、 Tx-BUF領域 2 6 1 Aから読み出した送 信データを処理対象として、 1 生成 送信処理 (2 3 0 ) が実行 される。
一方、 受信データ処理ルーチ 300は、 バッファメモリ 26の Rx - CRC領域 263 Bに蓄積された受信データについての C R C生成処 理 (3 1 0') と、 CRCチェック (3 20) の結果、 誤りなしと判定 された受信データを対象とした復号化処理 ( 330) とからなる。 復 号化処理(3 3 0) では、受信データが暗号化データか否かを判定し、 暗号化データでなければ、受信データをそのまま Rx - BUF領域 1 6 1 B に転送し、 暗号化データの場合には、 これを複号化した後、 Rx- BUF領 域 1 6 1 Bに転送する。 CRCチェックの結果、 誤りが検出された受 信データについては、 例えば、 上位装置であるコアプロセッサ 1 0へ のエラー通知などのエラー処理 (3 50) が実行される。
上記送信データ処理ルーチン 200と受信データ処理ルーチン 30 0は、 メッセーシ単位で交互に実行される。
第 1 2図は、 送信データの暗号化処理 2 1 0の 1実施例を示すフロ 一チャートである。
制御部 70は、 Tx-BUF領域 2 6 1 Aから送信メッセージのへッダ部 を読み出し (21 1) 、 ヘッダ部が示すデータ長 から、 送信データ を暗号化データのプロック長、 この例では 1 60ビッ ト単位で分割し た場合のプロック数 Nmaxを計算し、暗号化処理の繰り返し回数を示す パラメータ nの値を初期値 1に設定する (2 1 2) 。 本実施例では、 ヘッダ部は暗号化の対象外とし、 Tx - ENC領域 26 2 Aに転送する (2 1 3) 0
先ず、 部分行列 M(I,J)を指定するためのパラメータ I、 Jの値を初 期値 0に設定し (2 14) 、 Tx - BUF領域 2 6 1 Αから、 送信データの n番目のデータプロックを 32ビット単位で読み出し、 B- REG 203に 転送する (2 1 5) 。 ここでは、 B - REG 20 3に読み出された 3 2ビッ トのデータプロックを D(n)-Jで表す。 最初に読み出されたデータプロ
ック D(n) - 0は、 第 7図におけるデータ D-0に相当し、 その次に読み出 されるデータプロック D(n)-1は、 データ D- 1に相当する。
次に、 メモリ 5 0から M - REG 5 1に暗号化用の部分行列 M (1, J)を口 ード (2 16) し、 積和演算部 40を起動すると (2 1 7) 、 C - REG 204に部分行列 M(I, J)とデータ D(n)- Jとの積和演算結果が出力さ れる。 部分行列 M(0,0)を使用した最初の積和演算では、 第 7図に示し た C0〜C31の値が求まる。 この値は、 E C C符号の部分計算値に過ぎ ないため、 C- MEM 5 2の ECC- 1領域の既演算値に EOR加算する (2 1 8) 。 C - MEM 5 2には、 部分行列 M(I,J)のパラメータ J と対応して、 3 2ビッ ト長の符号値記憶領域 ECC- 0〜ECC- 4が用意してあり、各領域 の初期値は 0となっている。
パラメータ Iの値をィンクリメントし (2 1 9) 、 I〉 4か否かを 判定する ( 220) 。 Iの値が 4以下であれば、 ステップ 2 1 6に戻 り、 上述した動作を繰り返す。 これによつて、 データ D - 0と部分行列 M(l,0)〜M(4,0)の積和演算が次々と実行され、 演算結果 C32 - C63 〜C128 - C159が C - MEM 5 2の ECC - 1〜ECC - 4の既演算値に E O R加算さ れる。
パラメータ Iをインクリメントした結果、 I > 4となった場合は、 Iの値を初期値 0に戻し、 Jの値をインクリメントして (22 1) 、 J > 4か否かを判定する (222) 。 Jの値が 4以下の場合は、 ステ ップ 2 1 5に戻って、 Tx- BUF領域 26 1 Αから B- REG 203に、 送信 データの次のブロック D(n)- Jを転送し、 ステップ 2 1 5〜 2 22の動 作を繰り返す。 Jの値が 4を超えるまで、 上述した動作を繰り返すこ とによって、 第 7図に示したデータ D-1と部分行列 M(0, 1)〜M(4, 1)、 データ D- 2と部分行列 M(0,2)〜?/ 1(4, 2)、データ D - 3と部分行列 M (0,3) 〜M(4,3)、 データ D - 4と部分行列 M(0, 4)〜M(4,4)の積和演算が次々と
実行され、各積和演算の結果が C- MEM 5 2の ECC - 0〜ECC- 4に次々と E OR加算される。
パラメータ Jの値が J > 4となった時、 C - MEM 5 2の内容 (ECC - 0〜 ECC-4) は、 1 6 0ビッ ト長送信データについての暗号化結果を示して いる。 従って、 C- MEM 5 2の内容をバッファメモリの Tx-ENC領域 2 6 2 Aに転送し ( 22 3) 、 C-MEM 5 2の ECC- 0〜ECC- 4をクリア ( 2 2 4) した後、 パラメータ nの値をィンクリメントする ( 2 25 ) 。 n の値を最大値 Nmaxと比較し (2 26) 、 n〉Nmaxでなければ、 ステツ プ 21 4に戻って、 次の 1 60ビット長の送信データ D(n)を対象とし て、 暗号化処理を繰り返す。 n >Nmaxとなった時点で、 1つの送信メ ッセージの暗号化が完了する。
第 1 3図は、 じ じ生成ノ送信処理 ( 230) の 1実施例を示すフ ローチャートである。 . CRC生成ノ送信処理 ( 23 0) では、 Tx - ENC領域 26,2 Aから 3 2ビット単位で暗号化データを読み出して、 CRCを生成する。 ここ では、 暗号化された送信データを対象として説明するが、 送信メッセ ージを暗号化することなく送出する場合は、 -81^領域26 1 Aのデ ータを C R Cの生成対象とすればよい。
先ず、 Tx - ENC領域 26 2 Αから送信メッセージのヘッダ部を読み出 し、 送信部 1 1に転送する (2 3 1) 。 次に、 喑号化データの長さ K を 3 2ビット単位で読み出した場合のデータプロック数 Nmaxを計算し. 処理の繰り返し回数を示すパラメータ nの値を初期値 " 1" に設定す る (2 3 2) 。
メモリ 50から M- REG 5 1に C R C用の行列値 Mを口一ド ( 23 3 ) した後、 Tx-ENC領域 26 2 Aから暗号化送信データの最初のデータブ ロック D(n)を読み出し、 送信部 1 1と B - REG 20 3に転送する (2 3
4) 。 この状態で積和演算部 40を起動すると (23 5) 、 C-REG 20 4に CRC用行列 Mとデータ D(n)との積和演算結果 C0〜C31が出力さ れる。
C R C生成の場合、 積和演算部 40の一回の起動でデータブロック D(n)に付加すべき CR C符号が生成できるため、 C-REG 204の内容を 送信部 1 1に送信し (2 3 6) 、 パラメータ nの値をィンクリメント して ( 23 7) 、 nの値を Nmaxと比較する ( 23 8) 。 nが Nmax以 下の場合はステップ 234に戻って、 Tx- ENC領域 26 2 Αから次のデ 一タブ口ック D(n)を読み出し、 上述した動作を繰り返し、 n >Nmaxと なった時、 1メッセージ分の CRC生成処理を終了する。
第 1 1図に示した受信データ処理ルーチン 300における CRC生 成処理 3 1 0は、 第 1 3図で説明した送信データの CRC生成ルーチ ンにおいて、読み出すべきデータブロックの記憶領域を Tx-ENC領域 2 6 2 Aから Rx - CRC領域 2 63 Bに変更し、ヘッダとデータブロックと C R Cの転送先を送信部 1 1からバッファメモリの Rx- ENC領域 26 2 B (平文受信データの場合は Tx- BUF領域 26 1 Β)に変更すればよい。 また、 受信データの復号化処理 3 30は、 Rx- ENC領域 26 2 Bから 読み出したデータプロックをメモリ 50から M- REG 5 1にロードした 復号化用の部分行列で積和演算処理すればよいため、 基本的には、 第 1 2図で説明した送信データ暗号化ルーチンと同様の手順となる。 以上の実施例では行列値演算部 3 0で生成した CRC用、 E CC用 の行列をメモリ (MAT-MEM) 50に格納しておき、 。 。生成と £0〇 暗号化/複号化処理を行う時、 積和演算部 40が必要とする行列の値 を MAT- MEM 50から M - REG 5 1に適宜ロードするようにしたが、 M- REG 5 1を CRC用、 E CC暗号化用、 復号化用の専用レジスタとして用 意しておき、 行列値演算部 30で生成した行列値をこれらの専用レジ
スタに直接ロードするようにしてもよい。 この場合、 積和演算部 4 0 に接続すべき M - REG 5 1を切替えることによって、 C R C生成と E C C暗号化ノ復号化処理を高速に行うことが可能になる。
また、 実施例では、 行列値演算部で生成する行列の基本サイズを 3 2 X 3 2としたが、 これを 8 X 8、 または 1 6 X 1 6のように小型化 した場合、 C R C用の行列も部分行列モードで生成することになる。 この場合、 C R C行列値生成ルーチン 1 0 0に、 第 1 0図で説明した E C C行列値生成ルーチン 1 2 0と同様の制御手法を採用すればよい c 本発明によれば、 予め用意した行列値を利用することによって、 送 受信データの誤り検出に必要な C R C符号を高速に生成できる。 また、 C R C用の行列を生成する行列値演算部を利用して、 E C C暗号化用 およぴ復号化用の行列値を迅速に生成できる。 従って、 安全性を高め るために暗号鍵を適宜変更したい場合に、 外部から暗号鍵データを与 えて、制御部 7 0に E C C行列生成ルーチンを実行させることにより、 暗号鍵に応じた新たな行列値を容易に生成することが可能となる。 産業上の利用可能性
本発明によれば、誤り検出符号生成と暗号化処理にハードウエア(行 列値演算部と積和演算部) を共用できるため、 コンパク トなパケッ ト 通信装置を提供できる。 また、 暗号化 Z復号化処理に必要な行列値を パケット通信装置内で生成できるため、 暗号鍵変更が容易であり、 送 受信データの安全性を向上できる。