(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-29
(45)【発行日】2024-02-06
(54)【発明の名称】メモリ処理装置、メモリ検証装置、メモリ更新装置、メモリ保護システム、方法及びプログラム
(51)【国際特許分類】
G06F 12/14 20060101AFI20240130BHJP
G06F 21/79 20130101ALI20240130BHJP
【FI】
G06F12/14 510A
G06F21/79
(21)【出願番号】P 2022516561
(86)(22)【出願日】2020-04-23
(86)【国際出願番号】 JP2020017420
(87)【国際公開番号】W WO2021214922
(87)【国際公開日】2021-10-28
【審査請求日】2022-10-19
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【氏名又は名称】家入 健
(72)【発明者】
【氏名】向井 明子
(72)【発明者】
【氏名】峯松 一彦
(72)【発明者】
【氏名】本間 尚文
(72)【発明者】
【氏名】上野 嶺
【審査官】岸野 徹
(56)【参考文献】
【文献】特表2014-523020(JP,A)
【文献】米国特許出願公開第2004/0107341(US,A1)
【文献】特開2016-021224(JP,A)
【文献】国際公開第2013/065241(WO,A1)
【文献】米国特許出願公開第2019/0043600(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/14
G06F 21/79
(57)【特許請求の範囲】
【請求項1】
メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当てるメモリアドレス割り当て手段と、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するタグ生成手段と、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するノード生成手段と、
を備えるメモリ処理装置。
【請求項2】
前記ノード生成手段は、
前記平文と前記タグと前記ローカルカウンタとを組み合わせて前記木構造のリーフノードを生成するリーフノード生成手段と、
前記タグと前記ローカルカウンタとを組み合わせて前記木構造の中間ノードを生成する中間ノード生成手段と、
前記タグと前記ローカルカウンタとを組み合わせて前記木構造のルートノードを生成するルートノード生成手段と、
を備える、
請求項1に記載のメモリ処理装置。
【請求項3】
前記タグ生成手段は、前記部分更新可能タグを出力可能なメッセージ認証コードに前記ナンス及び複数の前記子ノードの前記定数を入力し、認証暗号に前記ナンス及び前記平文を入力することによって、検証対象の暗号文及び前記タグを生成し、
前記リーフノード生成手段は、前記暗号文と前記タグと前記ローカルカウンタとを組み合わせて前記リーフノードを生成する、
請求項2に記載のメモリ処理装置。
【請求項4】
前記部分更新可能タグを出力可能なメッセージ認証コードは、検証対象の平文が分割された平文ブロックそれぞれを、ブロック暗号の入力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る暗号化手法により暗号化し、平文ブロックのそれぞれの暗号化結果の排他的論理和を取ることで認証用タグを生成する部分更新可能タグを出力可能なメッセージ認証コードであり、
前記認証暗号は、暗号化対象の平文が分割された平文ブロックそれぞれを、ブロック暗号の入力と出力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る形の暗号化手法により暗号化して暗号文を生成し、平文ブロックを用いて平文のチェックサムを算出し、前記チェックサムを、ブロック暗号の入力及び出力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る形の暗号化手法により暗号化して認証用タグを生成する認証暗号である、
請求項3に記載のメモリ処理装置。
【請求項5】
前記部分更新可能タグを出力可能なメッセージ認証コードは、検証対象の平文が分割された平文ブロックそれぞれを、Tweakableブロック暗号のTweak部分にブロック毎に異なる定数を入力する形の暗号化手法により暗号化し、Tweakableブロック暗号のTweak部分にナンスを入力する形の暗号化手法により暗号化し、平文ブロックのそれぞれの暗号化結果とナンスの暗号化結果との排他的論理和を取ることで認証用タグを生成する部分更新可能タグを出力可能なメッセージ認証コードであり、
前記認証暗号は、暗号化対象の平文が分割された平文ブロックそれぞれを、Tweakableブロック暗号のTweak部分にナンスとブロック毎に異なる定数とを入力する形の暗号化手法により暗号化して暗号文を生成し、平文ブロックを用いて平文のチェックサムを算出し、前記チェックサムを、Tweakableブロック暗号のTweak部分にナンスとブロック毎に異なる定数とを入力する形の暗号化手法により暗号化して認証用タグを生成する認証暗号である、
請求項3に記載のメモリ処理装置。
【請求項6】
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力する入力手段と、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するタグ検証手段と、
を備えるメモリ検証装置。
【請求項7】
前記タグ検証手段は、前記木構造において、検証対象の暗号文が含まれる前記リーフノードから前記ルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有のメモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成し、前記ナンスと前記暗号文と前記検証に用いられるタグとを認証暗号に入力して、前記平文が改ざんされていないかを検証することにより、前記暗号文が改ざんされていないかを検証する、
請求項6に記載のメモリ検証装置。
【請求項8】
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力する入力手段と、
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するメモリ検証手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するカウンタ更新手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するタグ更新手段と、
を備えるメモリ更新装置。
【請求項9】
前記メモリ検証手段は、前記木構造において、更新対象の暗号文が含まれる前記リーフノードから前記ルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有のメモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成し、前記ナンスと前記暗号文と前記検証に用いられるタグとを認証暗号に入力して、前記平文が改ざんされていないかを検証することにより、前記暗号文が改ざんされていないかを検証して、検証結果及び前記パスを出力し、
前記タグ更新手段は、前記検証結果が改ざんの検知がないことを示す場合に、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力し、前記ナンスと更新対象の平文とを認証暗号に入力することで暗号文及び更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新する、
請求項8に記載のメモリ更新装置。
【請求項10】
メモリを保護するために構成される木構造の各ノードに、ノード固有のメモリアドレスを割り当てるメモリアドレス割り当て手段と、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するタグ生成手段と、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するノード生成手段と、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するタグ検証手段と、
を備えるメモリ保護システム。
【請求項11】
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入手することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するメモリ検証手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するカウンタ更新手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入手することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するタグ更新手段と、
をさらに備える請求項10に記載のメモリ保護システム。
【請求項12】
コンピュータが、
メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当て、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによって、タグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成し、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成する、
メモリ処理方法。
【請求項13】
コンピュータが、
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力し、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証する、
メモリ検証方法。
【請求項14】
コンピュータが、
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力し、
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力し、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新し、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新する、
メモリ更新方法。
【請求項15】
メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当てるステップと、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するステップと、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するステップと、
をコンピュータに実行させるプログラム。
【請求項16】
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力するステップと、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するステップと、
をコンピュータに実行させるプログラム。
【請求項17】
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力するステップと、
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するステップと、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するステップと、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するステップと、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ処理装置、メモリ検証装置、メモリ更新装置、メモリ保護システム、方法及びプログラムに関する。
【背景技術】
【0002】
様々なデバイスがネットワークに接続している昨今、デバイスの格納データの改ざん検知や秘匿などのメモリ保護技術が重要となっている。この技術に関連し、特許文献1、特許文献2、特許文献3、非特許文献1及び非特許文献2は、メモリ保護のために、対象メモリをリーフノードとした木構造を構成している。
【先行技術文献】
【特許文献】
【0003】
【文献】米国特許第4309569号明細書
【文献】米国特許第7451310号明細書
【文献】米国特許第9076019号明細書
【非特許文献】
【0004】
【文献】Shay Gueron: A Memory Encryption Engine Suitable for General Purpose Processors. IACR Cryptology ePrint Archive 2016: 204 (2016)
【文献】Intel SGX Tutorial (Reference Number: 332680-002) presented at ISCA 2015
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記の特許文献1にかかる技術では、木構造におけるハッシュ生成等について処理の並列化が不可能であるため、効率的な処理を行うことができないおそれがあるという課題がある。そして、上記の特許文献2、特許文献3、非特許文献1及び非特許文献2にかかる技術によって、この課題が解決され得る。しかしながら、並列化が可能になったとはいえ、メモリの読み出しや書き込みはより高速であることが望ましい。
【0006】
本開示の目的は、このような課題を解決するためになされたものであり、メモリ保護のために木構造を用いる構成において、メモリの書き込み時に必要な処理量を削減することが可能なメモリ処理装置、メモリ検証装置、メモリ更新装置、メモリ保護システム、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【0007】
本開示にかかるメモリ処理装置は、メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当てるメモリアドレス割り当て手段と、前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するタグ生成手段と、前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するノード生成手段と、を備える。
【0008】
本開示にかかるメモリ検証装置は、メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力する入力手段と、前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するタグ検証手段と、を備える。
【0009】
本開示にかかるメモリ更新装置は、メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力する入力手段と、前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するメモリ検証手段と、前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するカウンタ更新手段と、前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するタグ更新手段と、を備える。
【0010】
本開示にかかるメモリ保護システムは、メモリを保護するために構成される木構造の各ノードに、ノード固有のメモリアドレスを割り当てるメモリアドレス割り当て手段と、前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するタグ生成手段と、前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するノード生成手段と、前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するタグ検証手段と、を備える。
【0011】
本開示にかかるメモリ処理方法は、メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当て、前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成し、前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成する。
【0012】
本開示にかかるメモリ検証方法は、メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力し、前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証する。
【0013】
本開示にかかるメモリ更新方法は、メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力し、前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力し、前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新し、前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新する。
【0014】
本開示にかかるプログラムは、メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当てるステップと、前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するステップと、前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するステップと、をコンピュータに実行させる。
【0015】
本開示にかかるプログラムは、メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力するステップと、前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するステップと、をコンピュータに実行させる。
【0016】
本開示にかかるプログラムは、メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力するステップと、前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するステップと、前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するステップと、前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するステップと、をコンピュータに実行させる。
【発明の効果】
【0017】
本開示によれば、メモリ保護のために木構造を用いる構成において、メモリの書き込み時に必要な処理量を削減することが可能なメモリ処理装置、メモリ検証装置、メモリ更新装置、メモリ保護システム、方法及びプログラムを提供できる。
【図面の簡単な説明】
【0018】
【
図1】メモリ保護システムの構成例を示すブロック図である。
【
図2】メモリ構造初期化装置の構成例を示すブロック図である。
【
図3】メモリ検証装置の構成例を示すブロック図である。
【
図4】メモリ更新装置の構成例を示すブロック図である。
【
図5】メモリ構造初期化装置の動作を示すフローチャートである。
【
図6】メモリ検証装置の動作を示すフローチャートである。
【
図7】メモリ更新装置の動作を示すフローチャートである。
【
図8】第1の実施形態にかかるメモリ保護システムが構成する木構造の例を示す図である。
【
図9】第1の実施形態にかかるメモリ検証装置におけるタグ検証部によって生成されるパスの例を示す図である。
【
図10】Incremental MACの例を示す図である。
【
図11】第2の実施形態にかかるメモリ保護システムが構成する木構造の例を示す図である。
【
図12】第3の実施形態にかかるメモリ保護システムが構成する木構造の例を示す図である。
【
図13】第4の実施形態にかかるメモリ保護システムで用いられるMACの演算の概略を示す図である。
【
図14】第4の実施形態にかかるメモリ保護システムで用いられるAEの演算の概略を示す図である。
【
図15】第5の実施形態にかかるメモリ保護システムで用いられるMACの演算の概略を示す図である。
【
図16】第5の実施形態にかかるメモリ保護システムで用いるAEの演算の概略を示す図である。
【
図17】第6の実施形態にかかるメモリ処理装置の構成を示す図である。
【
図18】各実施形態に係る装置およびシステムを実現可能な計算処理装置のハードウェア構成例を概略的に示すブロック図である。
【発明を実施するための形態】
【0019】
(本開示にかかる実施形態の概要)
本開示の実施の形態の説明に先立って、本開示にかかる実施の形態の概要について説明する。なお、以下、本開示の実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0020】
IoT(Internet of Things)機器など、様々なデバイスがネットワークに接続している昨今、デバイスへの攻撃は、そのデバイスを踏み台にネットワークを経由することで、より大規模な攻撃に繋がる可能性がある。したがって、デバイスの格納データの改ざん検知や秘匿などのメモリ保護技術は、そのデバイスだけでなく、デバイスと繋がるネットワーク上の安全性を保つ上で重要である。
【0021】
加えて近年、不揮発性メモリの需要が増加しており、電源を遮断している間もメモリが攻撃に晒される可能性が高まっているという背景からも、更に、メモリ保護技術は、重要となっている。一方、メモリ保護技術においては、近年のメモリの大容量化に伴い、大規模データのごく一部分にアクセスする場合に、アクセス部分のみの改ざん検知を効率的に行うことが求められる。
【0022】
また、メモリ保護技術においては、メモリ上にOn-chipとOff-chipという2つの領域を仮定する。On-chipは、セキュアな領域である。したがって、On-chipに格納されたデータに対する、攻撃者による盗聴及び改ざんは不可能である。一方、Off-chipはセキュアではない領域である。したがって、Off-chipに格納されたデータに対する、攻撃者による盗聴及び改ざんは可能である。例えば、On-chipはCPU(Central Processing Unit)内のメモリ等により実現され、Off-chipは主記憶装置又は補助記憶装置等により実現される。ここで、Off-chipと比較してOn-chipの実現コストの方が圧倒的に大きいため、より少ないOn-chipで、大規模データの一部分の改ざん検知を行いたいという課題がある。
【0023】
この課題を解決するメモリ保護技術の例として、特許文献1、特許文献2、特許文献3、非特許文献1及び非特許文献2にかかる技術が挙げられる。上述したように、特許文献1、特許文献2、特許文献3、非特許文献1及び非特許文献2は、メモリ保護のために、対象メモリをリーフノードとした木構造を構成している。ここで、木構造を構成するにあたって用いられる要素技術として、メッセージ認証コード(Message Authentication Code;MAC)及び認証暗号(Authenticated Encryption;AE)が挙げられる。
【0024】
メッセージ認証コード(MAC)とは、通信を行う二者間で事前に共有された秘密鍵を用いて、平文メッセージに対して、改ざん検知用の認証タグ計算を行う技術である。通信路にMACを適用することにより、平文メッセージに対する不正な改ざんの検知が可能となる。木構造を用いたメモリ保護技術においては、On-chipに秘密鍵を格納し、Off-chipに平文メッセージと認証タグとを格納することで、平文メッセージの改ざん検知を行うことができる。
【0025】
認証暗号(AE)とは、通信を行う二者間で事前に共有された秘密鍵を用いて、平文メッセージに対して、暗号化及び改ざん検知用の認証タグ計算を行う技術である。通信路に認証暗号を適用することにより、盗聴に対する内容の秘匿と、暗号文に対する不正な改ざんの検知とが可能となり、結果として通信内容に対して強力な保護が実現される。木構造を用いたメモリ保護技術においては、MACと同様に、On-chipに秘密鍵を格納し、Off-chipに暗号文と認証タグとを格納することで、平文メッセージの秘匿と改ざん検知とを行うことができる。
【0026】
ここで、上述したように、特許文献1にかかる技術では、木構造におけるハッシュ生成等について処理の並列化が不可能であるという課題がある。そして、特許文献2、特許文献3、非特許文献1及び非特許文献2にかかる技術によって、この課題が解決され得る。しかしながら、上記の2つの特許文献と2つの非特許文献によって並列化が可能になったとはいえ、メモリの読み出しや書き込みはより高速であることが望ましい。更に、昨今のメモリ大容量化に伴い、木構造における分岐数が増える可能性が考えられる。そして分岐数が増えると、木構造の各ノードで必要な処理量が増大する、このため、並列化可能である特許文献2、特許文献3、非特許文献1及び非特許文献2の木構造においても、メモリの読み出しと書き込みに必要な処理量が更に増大するおそれがあると考えられる。一方、本実施の形態においては、以下に説明するように、上記のような課題を解決し、メモリの書き込み時に必要な処理量を削減することが可能となる。
【0027】
(第1の実施形態)
以下、実施の形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0028】
第1の実施形態では、メモリ保護システムで構成される木構造が、分岐数が2であり、深さがdの場合の例について説明する。つまり、第1の実施形態におけるリーフノードの数は、2^d個となる。また、ルートノードの深さは0、リーフノードの深さはdと定義する。本システムにおいて、ノードの個数及び各ノードのデータ量は、予め定められていると仮定する。
【0029】
図1は、メモリ保護システム1の構成例を示すブロック図である。メモリ保護システム1は、例えばコンピュータである。なお、メモリ保護システム1は、中央演算装置においてソフトウェアプログラムを実行することで、
図1に示す各構成要素を実現してもよい。また、メモリ保護システム1において実現される各構成要素は、個々の装置、又は機能部もしくは電子回路として実現してもよい。このことは、後述する他の実施形態についても同様である。
【0030】
図1に示すように、第1の実施形態にかかるメモリ保護システム1は、メモリ構造初期化装置10と、メモリ検証装置20と、メモリ更新装置30と、を備える。メモリ構造初期化装置10、メモリ検証装置20およびメモリ更新装置30は、物理的に一体であってもよいし、別個であってもよい。また、
図2~
図4を用いて後述する各装置の構成要素が、別の装置で実現されてもよい。メモリ保護システム1は、メモリの改ざん検知を行う。
【0031】
なお、後述する他の実施形態で参照する場合、メモリ保護システム1は、メモリ保護システム1a,1b,1c,1dと表記され得る。同様に、後述する他の実施形態で参照する場合、メモリ構造初期化装置10は、メモリ構造初期化装置10a,10b,10c,10dと表記され得る。同様に、後述する他の実施形態で参照する場合、メモリ検証装置20は、メモリ検証装置20a,20b,20c,20dと表記され得る。同様に、後述する他の実施形態で参照する場合、メモリ更新装置30は、メモリ更新装置30a,30b,30c,30dと表記され得る。なお、
図2~
図4で示す構成要素についても同様である。
【0032】
図2は、メモリ構造初期化装置10の構成例を示すブロック図である。
図3は、メモリ検証装置20の構成例を示すブロック図である。
図4は、メモリ更新装置30の構成例を示すブロック図である。また、
図5は、メモリ構造初期化装置10の処理手順の例を示すフローチャートである。
図6は、メモリ検証装置20の処理手順の例を示すフローチャートである。
図7は、メモリ更新装置30の処理手順の例を示すフローチャートである。
図2~
図7については後述する。
【0033】
メモリ保護システム1において、メモリ構造初期化装置10は、改ざん検知を行いたい平文(平文メッセージ)を入力として、初期状態の木構造と木構造における各ノードのメモリアドレス集合とを出力する。ただし、平文は2^d個の平文ブロックの結合で表す。つまり、以下の式1が成り立つ。
(式1)
M=M[1]||M[2]||・・・||M[2^d]
ここで、Mは平文を示し、M[]は平文ブロックを示す。また、「||」は連結を表す。また、1つの平文ブロックはBlockビットと定義する。
【0034】
メモリ検証装置20は、改ざんをチェックしたい平文ブロックの格納場所と木構造、および木構造における各ノードのメモリアドレスを入力として、そのメモリが改ざんされているか否かを検証する。メモリ更新装置30は、更新したい平文ブロックの格納場所とその更新内容、木構造、および木構造における各ノードのメモリアドレスを入力とする。そして、メモリ更新装置30は、更新後の木構造、または、改ざんを検知したことを表すエラーメッセージを出力する。
【0035】
図8は、第1の実施形態にかかるメモリ保護システム1が構成する木構造の例を示す図である。
図8には、d=3の場合の木構造が示されている。なお、Root,Inter,Leafについては後述する。
【0036】
また、メモリ保護システム1は、要素技術として、後述の特定の性質を持つようなメッセージ認証コード(MAC)を用いる。ここでは基本的なMACについて記述する。秘密鍵Kを用いたMAC関数MAC_Kは、ナンスN、および平文Mを入力として、認証タグTagを出力する。つまり、メモリ保護システム1は、以下の式2で表される計算を行う。
(式2)
MAC_K(N,M)=Tag
【0037】
また、メモリ保護システム1は、検証を行いたいナンスN’、平文M’、および認証タグTag’に対しては、MAC_K(N’,M’)を計算し、その計算結果とTag’の一致/不一致を検証する。もし両者が一致していればナンスN’と平文M’は改ざんされていないと判断され、不一致であれば改ざんされていると判断される。つまり、メモリ保護システム1は、以下の式3で表される計算を行う。
(式3)
MAC_K(N’,M’)=Tag’’
メモリ保護システム1は、Tag’’=Tag’であれば改ざんなし、Tag’’≠Tag’であれば改ざんありと判定できる。
【0038】
ここで、第1の実施形態で用いるMACは、部分更新可能タグを出力できる、部分更新可能MACである。つまり、第1の実施形態で用いるMACの出力タグは、部分更新可能である。ここで、MACの出力タグが部分更新可能であるとは、MACの入力のナンスと平文の一部分のみが更新された場合に、変更後のナンスと平文の全体を参照することなく、タグの更新を行うことができるということを指す。つまり、入力の変更が一部分であれば、部分更新可能MACを用いることによって、通常のMACよりもタグ更新を効率的に行うことができる。そのような部分更新可能MACを「Incremental MAC」と呼ぶ。
【0039】
Incremental MACは、式2及び式3で示した通常のMAC処理に加えて、部分更新可能タグを更新する処理を行う。ナンスN、及び平文M=M[1]||・・・||M[m]に対するタグをTagとし、ナンスNを新たなナンスN’に更新し、かつ1<=i<=mに対してM[i]をM’[i]に更新する場合の新たなタグTag’を求めると仮定する。このとき、秘密鍵Kを用いたIncremental MACにおけるタグ更新を以下の式4で定義する。
(式4)
IncMAC_K((1,i),(N,M[i]),(N’,M’[i]),Tag)=Tag’
【0040】
上記式4の第1引数(1,i)のiは、平文の更新部位を示す部分であり、平文ブロックのインデックスでもよいし、その他、更新箇所を特定できるような数字であればよい。更新箇所がナンスのみの場合は、以下の式5のように定義する。
(式5)
IncMAC_K((1,∞),(N,∞),(N’,∞),Tag)=Tag’
【0041】
図10は、Incremental MACの例を示す図である。例えば、Incremental MACの実現例として、
図10のPMAC(Parallelizable MAC)が挙げられる。
図10において、E_K(E
K)は秘密鍵Kを用いたnビット入出力のブロック暗号Eを表しており、これはAES(Advanced Encryption Standard)などにより実現される。AESの場合はn=128である。
図10は、平文MをPMACで処理し、認証タグTagを導出する方法を表している。但し、Mはm個のnビット平文ブロックM[1],・・・,M[m]の連結によって表されるとし、0^n(0
n)は0をn個並べたビット列と定義する。
【0042】
PMACがIncremental MACであることの根拠を以下に示す。まず、平文M=M[1]||・・・||M[m]に対し、PMAC_K(M)を計算することで認証タグTagを得る。次に、平文Mのうち、M[m-1]のみをM’[m-1]という異なる値に更新し、更新後のタグを求めたいと仮定する。このとき、Incremental性を持たない通常のMACであれば、M’=M[1]||・・・||M[m-2]||M’[m-1]||M[m]とし、PMAC_K(M’)を計算することにより更新後のタグTag’を得ることができるが、TagとTag’の導出にかかる計算量は同じとなる。一方、Incremental性を持つPMACの場合は、以下の式6のようにしてTag’を求めることができる。
(式6)
Δ=3^2・E_K(0^n)
Σ=D_K(Tag)
Σ’=Σ+E_K(M[m-1]+2^{m-1}Δ)+E_K(M’[m-1]+2^{m-1}Δ)
Tag’=E_K(Σ’)
【0043】
但し、「+」は排他的論理和(XOR)を表し、D_Kは秘密鍵Kを用いたE_Kの逆関数を表す。また、「・」は有限体GF(2^n)上の乗算を表す。上記の計算方法を用いると、平文ブロックの数によらないで、暗号化4回分の計算量のみでタグの更新ができ、効率的であると言える。
【0044】
[メモリ構造初期化装置の構成の説明]
図2は、メモリ構造初期化装置10の構成例を示すブロック図である。
図2に示すように、第1の実施形態にかかるメモリ構造初期化装置10は、平文入力部100と、メモリアドレス割り当て部101と、部分更新可能タグ生成部102と、を備える。また、メモリ構造初期化装置10は、リーフノード生成部103と、中間ノード生成部104と、ルートノード生成部105と、木構造出力部106と、メモリアドレス出力部107と、を備える。
【0045】
平文入力部100は、平文入力手段としての機能を有する。メモリアドレス割り当て部101は、メモリアドレス割り当て手段としての機能を有する。部分更新可能タグ生成部102は、タグ生成手段としての機能を有する。リーフノード生成部103は、リーフノード生成手段としての機能を有する。中間ノード生成部104は、中間ノード生成手段としての機能を有する。ルートノード生成部105は、ルートノード生成手段としての機能を有する。
木構造出力部106は、木構造出力手段としての機能を有する。メモリアドレス出力部107は、メモリアドレス出力手段としての機能を有する。
【0046】
メモリ構造初期化装置10は、例えばコンピュータである。なお、メモリ構造初期化装置10は、中央演算装置においてソフトウェアプログラムを実行することで、
図2に示す各構成要素を実現してもよい。また、メモリ構造初期化装置10において実現される各構成要素は、個々の装置、又は機能部もしくは電子回路として実現してもよい。このことは、後述する他の実施形態についても同様である。
【0047】
平文入力部100は、保護対象となる平文Mの入力を受け付ける。平文入力部100は、受け付けた平文Mを部分更新可能タグ生成部102に出力する。ここで、平文入力部100が平文Mの入力を受け付ける方法は、特定の方法に限定されない。例えば、平文入力部100が、キーボードなどの文字入力装置を備え、平文Mを入力するユーザ操作を受け付けるようにしてもよい。あるいは、平文入力部100が、他の装置から平文Mを受信するようにしてもよい。
【0048】
メモリアドレス割り当て部101は、木構造の各ノードに、ノード固有のメモリアドレス情報を割り当てる。そして、メモリアドレス割り当て部101は、メモリアドレス情報を、部分更新可能タグ生成部102及びメモリアドレス出力部107に出力する。ここで、ノードの個数及び各ノードのデータ量は予め定められているため、各ノードの中身の情報を定義する前にメモリアドレスを割り当てることが可能である。また、メモリアドレス情報は、その性質上、各ノードに対して一意に定まるものである。つまり、メモリアドレス情報は、各ノードに対して固有である。
【0049】
ここで、1<=i<=d,1<=j_i<=2^{i}のとき、深さiでj_i番目のノードに割り当てるメモリアドレスを、add(i,j_i)で表す。そして、木構造の全てのノードに割り当てられたメモリアドレス情報を、以下の式7のように記述する。
(式7)
Add=(add(0,1),add(1,1),add(1,2),add(2,1),add(2,2),・・・,add(d,2^d-1),add(d,2^d))
【0050】
ここで、「add(0,1)」は、ルートノードのメモリアドレスに対応する。また、「add(d,1),・・・,add(d,2^d)」は、複数のリーフノードのメモリアドレスに対応する。なお、その他は中間ノードのメモリアドレスに対応する。
【0051】
部分更新可能タグ生成部102は、平文入力部100が出力する平文Mと、メモリアドレス割り当て部101が出力するメモリアドレス集合Addと、秘密鍵Kとを用いて、改ざん検知用の部分更新可能タグを生成する。部分更新可能タグ生成にはIncremental MACを用いるとする。まず、部分更新可能タグ生成部102は、リーフノードで用いるタグとして、以下の式8で表されるデータを生成する。
(式8)
TagLeaf=((M[1],Tag(d,1)),(M[2],Tag(d,2)),・・・,(M[2^d],Tag(d,2^d)))
Tag(d,i)=MAC_K(add(d,i)||(0^{CTR-1}||1),M[i])
1<=i<=2^d
【0052】
但し、a||bはビット列aとビット列bとの連結を表す。また、CTRは各ノードに格納されるローカルカウンタ値のビット長であり、「0^{CTR-1}」は0がCTR-1個連結したビット列を表す。CTRの値は予め決定されていると仮定する。
【0053】
次に、部分更新可能タグ生成部102は、中間ノードで用いるタグとして、以下の式9で表されるデータを生成する。なお、IncMAC_Kは、秘密鍵Kを用いたIncremental MACの関数である。IncMAC_Kは、更新箇所(1,i),更新前のナンスと平文(N,M[i]),更新後のナンスと平文(N’,M’[i]),更新前のタグTagを入力とする。
(式9)
TagInter=(Tag(1,1),・・・,Tag(d-1,2^{d-1}))
Tag(1,1)=MAC_K(add(1,1)||(0^{CTR-1}||1),(0^{CTR-1}||1)||(0^{CTR-1}||1))
Tag(i,j_i)=IncMAC_K((1,∞),(add(1,1)||(0^{CTR-1}||1),∞),(add(i,j_i)||(0^{CTR-1}||1),∞),Tag(1,1))
1<=i<=d-1,1<=j_i<=2^i,(i,j_i)≠(1,1)
【0054】
次に、部分更新可能タグ生成部102は、ルートノードで用いるタグとして、以下の式10で表されるデータを生成する。
(式10)
TagRoot=(Tag(0,1))
Tag(0,1)=IncMAC_K((1,∞),(add(1,1)||(0^{CTR-1}||1),∞),(add(0,1)||(0^{CTR-1}||1),∞),Tag(1,1))
【0055】
式8,式9,式10から、各ノードに対応するタグは、自ノードのメモリアドレスと後述するローカルカウンタ値との連結をナンスとし、子ノードの複数のローカルカウンタ値の連結を平文とし、そのナンスと平文を入力としたMACの計算結果である。つまり、各ノードに対応するタグは、自ノードのメモリアドレスと定数との連結をナンスとし、子ノードの複数の定数の連結を平文とし、そのナンスと平文を入力としたMACの計算結果である。
【0056】
そして、部分更新可能タグ生成部102は、タグ集合TagLeafをリーフノード生成部103に出力する。また、部分更新可能タグ生成部102は、タグ集合TagInterを中間ノード生成部104に出力する。また、部分更新可能タグ生成部102は、タグ集合TagRootをルートノード生成部105に出力する。
【0057】
リーフノード生成部103は、部分更新可能タグ生成部102が出力するタグ集合TagLeafを用いて、木構造のリーフノードを生成する。1<=i<=2^dのとき、i番目のリーフノードは、以下の式11で示すように生成される。
(式11)
(ctr(d,i),M[i],Tag(d,i))
【0058】
但し、ctr(d,i)は、深さdにおけるi番目のリーフノードのカウンタ値を表しており、当該ノードが更新されるたびに1が足される。ここでは、全てのiに対してctr(d,i)=0^{CTR-1}||1と定義する。
【0059】
また、全てのリーフノードを以下の式12のように記述する。
(式12)
Leaf=((ctr(d,1),M[1],Tag(d,1)),・・・,(ctr(d,2^d),M[2^d],Tag(d,2^d)))
また、リーフノード生成部103は、生成されたリーフノード集合Leafを木構造出力部106に出力する。
【0060】
中間ノード生成部104は、部分更新可能タグ生成部102が出力するタグ集合TagInterを用いて、木構造の中間ノードを生成する。また、1<=i<=d-1,1<=j_i<=2^iのとき、深さiにおけるj_i番目の中間ノードは以下の式13で示すように生成される。
(式13)
(ctr(i,j_i),Tag(i,j_i))
但し、全てのi,j_iに対してctr(i,j_i)=0^{CTR-1}||1と定義する。
【0061】
また、全ての中間ノードを以下の式14のように記述する。
(式14)
Inter=((ctr(1,1),Tag(1,1)),(ctr(1,2),Tag(1,2)),・・・,(ctr(d-1,2^{d-1}),Tag(d-1,2^{d-1})))
また、中間ノード生成部104は、生成された中間ノード集合Interを木構造出力部106に出力する。
【0062】
ルートノード生成部105は、部分更新可能タグ生成部102が出力するタグTagRootを用いて、木構造のルートノードを生成する。ルートノードは以下の式15で示すように生成される。但し、ctr(0,1)=0^{CTR-1}||1と定義する。
(式15)
Root=(ctr(0,1),Tag(0,1))
また、ルートノード生成部105は、生成されたルートノードRootを木構造出力部106に出力する。
【0063】
木構造出力部106は、リーフノード生成部103が出力するリーフノード集合Leafと、中間ノード生成部104が出力する中間ノード集合Interと、ルートノード生成部105が出力するルートノードRootとを連結する。そして、木構造出力部106は、連結されたデータ列を、コンピュータディスプレイやプリンタなどへ出力する。
メモリアドレス出力部107は、メモリアドレス割り当て部101が出力するメモリアドレスAddをコンピュータディスプレイやプリンタなどへ出力する。
【0064】
[メモリ検証装置の構成の説明]
図3は、メモリ検証装置20の構成例を示すブロック図である。
図3に示すように、第1の実施形態にかかるメモリ検証装置20は、木構造入力部200と、メモリアドレス入力部201と、検証箇所入力部202と、タグ検証部203と、検証結果出力部204と、を備える。
【0065】
木構造入力部200は、木構造入力手段としての機能を有する。メモリアドレス入力部201は、メモリアドレス入力手段としての機能を有する。検証箇所入力部202は、検証箇所入力手段としての機能を有する。タグ検証部203は、タグ検証手段としての機能を有する。検証結果出力部204は、検証結果出力手段としての機能を有する。
【0066】
メモリ検証装置20は、例えばコンピュータである。なお、メモリ検証装置20は、中央演算装置においてソフトウェアプログラムを実行することで、
図3に示す各構成要素を実現してもよい。また、メモリ検証装置20において実現される各構成要素は、個々の装置、又は機能部もしくは電子回路として実現してもよい。このことは、後述する他の実施形態についても同様である。
【0067】
木構造入力部200は、検証対象となるメモリを保護するための木構造Treeの入力を受け付ける。そして、木構造入力部200は、木構造Treeをタグ検証部203に出力する。ここで、Treeは、リーフノード集合Leaf、中間ノード集合Inter、及び、ルートノードRootにより構成される。Treeは、木構造出力部106によって出力された、リーフノード集合Leafと中間ノード集合InterとルートノードRootとが連結されたデータ列であってもよい。
【0068】
メモリアドレス入力部201は、検証対象となるメモリを保護するための木構造に割り当てられているメモリアドレス集合Addの入力を受け付ける。そして、メモリアドレス入力部201は、メモリアドレス集合Addをタグ検証部203に出力する。なお、Addは以下の式16のように記述される。
(式16)
Add=(add(0,1),add(1,1),add(1,2),add(2,1),add(2,2),・・・,add(d,2^d-1),add(d,2^d))
但し、1<=i<=d,1<=j_i<=2^{i}のとき、深さiにおいてj_i番目のノードのメモリアドレスを、add(i,j_i)で表す。
【0069】
検証箇所入力部202は、メモリの検証箇所CheckNodeの入力を受け付ける。そして、検証箇所入力部202は、検証箇所CheckNodeをタグ検証部203に出力する。但し、CheckNodeは、1以上2^d以下の数値であり、検証箇所がリーフノードのCheckNode番目であることを表す。
【0070】
タグ検証部203は、木構造Treeと、メモリアドレス集合Addと、検証箇所CheckNodeと、秘密鍵Kを用いて、CheckNodeによって指定されるメモリが改ざんされていないか検証する。そして、タグ検証部203は、検証結果を検証結果出力部204に出力する。まず、タグ検証部203は、CheckNode番目のリーフノードからルートノードまでのパスPathを生成する。ここで、パスPathとは、当該リーフノードからルートノードまでのノードの道のりを示すもので、以下の式17で表される。
(式17)
Path=((d,p_d),(d-1,p_{d-1}),(d-2,p_{d-2}),・・・,(1,p_1),(0,p_0))
【0071】
ここで、1<=i<=d,1<=j_i<=2^{i}のとき、Pathの各要素(i,j_i)は、深さiにおいてj_i番目のノードを表す。但し、p_d=CheckNodeであり、0<=i<=d-1のとき、p_iは以下の式18で定義される。
(式18)
p_i=ceiling(p_{i+1}/2)
但し、ceiling(・)は天井関数を表す。また、p_0の値は必ず1となる。
【0072】
図9は、第1の実施形態にかかるメモリ検証装置20におけるタグ検証部203によって生成されるパスの例を示す図である。例えば、d=4、CheckNode=10のとき、
図9に示すように、Pathは以下のようになる。
Path=((4,10),(3,5),(2,3),(1,2),(0,1))
【0073】
次に、タグ検証部203は、メモリアドレス入力部201の出力であるAddと、木構造入力部200の出力であるTreeと、秘密鍵Kとを用いて以下の式19を計算する。
(式19)
PathTag’=(Tag’(d,p_d),Tag’(d-1,p_{d-1}),・・・,Tag’(0,p_0))
Tag’(d,p_d)=MAC_K(add(d,p_d)||ctr(d,p_d),M[p_d])
Tag’(i,p_i)=MAC_K(add(i,p_i)||ctr(i,p_i),ctr(i+1,2p_i-1)||ctr(i+1,2p_i))
0<=i<=d-1
【0074】
但し、MAC_Kは、第1の実施形態におけるメモリ構造初期化装置10の部分更新可能タグ生成部102で用いられている方式と実質的に同じであるので、説明を省略する。またTag’(i,p_i)は、MAC関数の入力のナンス部分に当該ノードのアドレスとローカルカウンタとの連結を入力し、平文部分に当該ノードの子ノードのローカルカウンタを2個連結して入力したものである。
【0075】
次に、タグ検証部203は、木構造入力部200の出力であるTreeから、以下の式20で表される値を取得する。
(式20)
PathTag=(Tag(d,p_d),Tag(d-1,p_{d-1}),・・・,Tag(0,p_0))
【0076】
そして、タグ検証部203は、自身が計算したPathTag’とTreeから取得したPathTagとが等しいか否かをチェックする。0<=i<=dのとき、全てのiに対して
Tag’(i,p_i)=Tag(i,p_i)
が成立する場合、タグ検証部203は検証結果をACKに設定する。ACKは、パスに関わるノードの情報が改ざんされていないことを示す。検証結果をBと表記し、検証結果がACKであることを、B=ACKと表記する。
【0077】
一方、0<=i<=dのとき、あるiに対して
Tag’(i,p_i)≠Tag(i,p_i)
が成立する場合、タグ検証部203は、検証結果をNCKに設定する。NCKは、パスに関わるノードの情報が改ざんされていることを示す。検証結果がNCKであることを、B=NCKと表記する。
【0078】
タグ検証部203は検証結果Bを検証結果出力部204に出力する。
検証結果出力部204は、タグ検証部203が出力する検証結果Bをコンピュータディスプレイやプリンタなどへ出力する。
【0079】
[メモリ更新装置の構成の説明]
図4は、メモリ更新装置30の構成例を示すブロック図である。
図4に示すように、第1の実施形態にかかるメモリ更新装置30は、木構造入力部300と、メモリアドレス入力部301と、更新箇所入力部302と、メモリ検証部303と、カウンタ更新部304と、部分更新可能タグ更新部305と、更新結果出力部306と、を備える。
【0080】
木構造入力部300は、木構造入力手段としての機能を有する。メモリアドレス入力部301は、メモリアドレス入力手段としての機能を有する。更新箇所入力部302は、更新箇所入力手段としての機能を有する。メモリ検証部303は、メモリ検証手段としての機能を有する。カウンタ更新部304は、カウンタ更新手段としての機能を有する。部分更新可能タグ更新部305は、タグ更新手段としての機能を有する。更新結果出力部306は、更新結果出力手段としての機能を有する。
【0081】
メモリ更新装置30は、例えばコンピュータである。なお、メモリ更新装置30は、中央演算装置においてソフトウェアプログラムを実行することで、
図3に示す各構成要素を実現してもよい。また、メモリ更新装置30において実現される各構成要素は、個々の装置、又は機能部もしくは電子回路として実現してもよい。このことは、後述する他の実施形態についても同様である。
【0082】
木構造入力部300は、更新対象となるメモリを保護するための木構造Treeの入力を受け付ける。そして、木構造入力部300は、
図4の一点鎖線で示すように、木構造Treeをメモリ検証部303及びカウンタ更新部304に出力する。但し、Treeは、リーフノード集合Leaf、中間ノード集合Inter、ルートノードRootにより構成される。なお、木構造入力部300の機能は、第1の実施形態にかかるメモリ検証装置20における木構造入力部200の機能と実質的に同じであるので、説明を省略する。
【0083】
メモリアドレス入力部301は、検証対象となるメモリを保護するための木構造に割り当てられているメモリアドレス集合Addの入力を受け付ける。そして、メモリアドレス入力部301は、
図4の実線で示すように、メモリアドレス集合Addを、メモリ検証部303及び部分更新可能タグ更新部305に出力する。なお、メモリアドレス入力部301の機能は、第1の実施形態にかかるメモリ検証装置20におけるメモリアドレス入力部201の機能と実質的に同じであるので、説明を省略する。
【0084】
更新箇所入力部302は、メモリの更新情報UpdateNodeの入力を受け付ける。そして、更新箇所入力部302は、
図4の点線で示すように、メモリの更新情報UpdateNodeを、メモリ検証部303及び部分更新可能タグ更新部305に出力する。但し、UpdateNode=(UpdateIndex,UpdateInfo)と定義する。UpdateIndexは、1以上2^d以下の数値であり、更新箇所がリーフノードのUpdateIndex番目であることを表す。UpdateInfoは、UpdateIndex番目のリーフに含まれる情報である平文ブロックM[UpdateIndex]を更新するBlockビットの情報を表す。
【0085】
メモリ検証部303は、Treeと、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、秘密鍵Kとを用いて、UpdateNodeが指定するメモリが改ざんされていないか検証する。メモリ検証部303が行う処理は、第1の実施形態のメモリ検証装置20におけるタグ検証部203の処理と実質的に同じであるが、出力結果のみ異なる。第1の実施形態のメモリ検証装置20におけるタグ検証部203は検証結果Bを出力するが、メモリ検証部303は、検証結果Bと共に、当該ノードからルートノードまでのパスPathも出力する。メモリ検証部303は、
図4の太い破線で示すように、検証結果Bを、カウンタ更新部304、部分更新可能タグ更新部305及び更新結果出力部306に出力する。また、メモリ検証部303は、
図4の太い実線で示すように、パスPathを、カウンタ更新部304及び部分更新可能タグ更新部305に出力する。
【0086】
Pathは以下の式21のように表される。
(式21)
Path=((d,p_d),(d-1,p_{d-1}),(d-2,p_{d-2}),・・・,(1,p_1),(0,p_0))
ここでは、メモリ検証部303が行う操作から、p_d=UpdateIndexとなることが分かる。
【0087】
カウンタ更新部304は、Treeと、検証結果Bと、パスPathとを用いて、Pathで指定されるノードの情報を更新する。B=ACKである場合、以下の処理を行う。まず、カウンタ更新部304は、Pathで指定されるノードのカウンタ値に1を足してカウンタ値を更新する。つまり、0<=i<=dに対して、カウンタ更新部304は以下の式22の計算を行う。
(式22)
ctr(i,p_i)←ctr(i,p_i)+1
但し、a←bはaをbで更新することを表す。そして、カウンタ更新部304は、更新結果の木構造NewTree’を、部分更新可能タグ更新部305に出力する。一方、B=NCKの場合は、カウンタ更新部304は処理を行わず、何も出力しない。
【0088】
部分更新可能タグ更新部305は、更新結果の木構造NewTree’と、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、検証結果BおよびパスPathと、秘密鍵Kとを用いて、Pathで指定されるノードのタグを更新する。B=ACKである場合、部分更新可能タグ更新部305は、0<=i<=d-1に対して、以下の式23の計算を行う。
(式23)
Tag(d,p_d)←MAC_K(add(d,p_d)||ctr(d,p_d),UpdateInfo)
Tag(i,p_i)←IncMAC_K((1,ind_{i+1}),((add(i,p_i)||(ctr(i,p_i)-1)),ctr(i+1,p_{i+1})-1),((add(i,p_i)||ctr(i,p_i)),ctr(i+1,p_{i+1})),Tag(i,p_i))
ind_{i+1}=((p_{i+1}-1)mod2)+1
【0089】
但し、MAC_KおよびIncMAC_Kは、第1の実施形態におけるメモリ構造初期化装置10の部分更新可能タグ生成部102や、メモリ検証装置20のタグ検証部203で用いられている方式と同じである。また、Tag(i,p_i)は、MAC関数の入力のナンス部分に当該ノードのアドレスとローカルカウンタとの連結を入力し、平文部分に当該ノードの子ノードのローカルカウンタを2個連結して入力したものである。また、ind_{i+1}は、(i+1,p_{i+1})というノードが、その親ノード(i,p_i)から見て何番目の子ノードであるか示す値である。そして、部分更新可能タグ更新部305は、更新結果の木構造NewTreeを、更新結果出力部306に出力する。一方、B=NCKの場合は、部分更新可能タグ更新部305は処理を行わず、何も出力しない。
【0090】
更新結果出力部306は、メモリ検証部303が出力する検証結果Bと、部分更新可能タグ更新部305が出力する木構造NewTreeを用いて、更新結果を出力する。B=ACKである場合、更新結果出力部306は、NewTreeをコンピュータディスプレイやプリンタなどへ出力する。一方、B=NCKである場合、更新結果出力部306は、検証結果B=NCKをコンピュータディスプレイやプリンタなどへ出力する。
【0091】
[動作の説明]
図5は、メモリ構造初期化装置10の動作(メモリ構造初期化方法)を示すフローチャートである。ステップS1において、平文入力部100は、保護対象となる平文Mの入力を受け付ける。ステップS2において、メモリアドレス割り当て部101は、木構造の各ノードにメモリアドレスを割り当て、メモリアドレス集合Addを生成する。ステップS3において、部分更新可能タグ生成部102は、平文Mとメモリアドレス集合Addを用いて、改ざん検知用のタグ集合(TagLeaf,TagInter,TagRoot)を生成する。
【0092】
ステップS4において、リーフノード生成部103は、部分更新可能タグ生成部102が出力するタグ集合TagLeafを用いて、木構造のリーフノード集合Leafを生成する。ステップS5において、中間ノード生成部104は、部分更新可能タグ生成部102が出力するタグ集合TagInterを用いて、木構造の中間ノード集合Interを生成する。ステップS6において、ルートノード生成部105は、部分更新可能タグ生成部102が出力するタグTagRootを用いて、木構造のルートノードRootを生成する。
【0093】
ステップS7において、木構造出力部106は、リーフノード集合Leafと、中間ノード集合Interと、ルートノードRootとを連結して、木構造を示す連結されたデータ列をコンピュータディスプレイやプリンタなどへ出力する。また、メモリアドレス出力部107は、メモリアドレス割り当て部101が出力するメモリアドレスAddをコンピュータディスプレイやプリンタなどへ出力する。ステップS7の後、メモリ構造初期化装置10は、
図5の処理を終了する。
【0094】
図6は、メモリ検証装置20の動作(メモリ検証方法)を示すフローチャートである。ステップS8において、木構造入力部200は、検証対象となるメモリを保護するための木構造Treeの入力を受け付ける。但し、Treeは、リーフノード集合Leaf、中間ノード集合Inter、及び、ルートノードRootにより構成される。また、メモリアドレス入力部201は、検証対象となるメモリを保護するための木構造に割り当てられているメモリアドレス集合Addの入力を受け付ける。さらに、検証箇所入力部202は、メモリの検証箇所CheckNodeの入力を受け付ける。
【0095】
ステップS9において、タグ検証部203は、Treeと、メモリアドレス集合Addと、CheckNodeとを用いて、CheckNodeが指定するメモリが改ざんされていないか否かの検証を行う。さらに、タグ検証部203は、受理(ACK)または不受理(NCK)を決定し、検証結果Bを出力する。ステップS10において、検証結果出力部204は、検証結果Bをコンピュータディスプレイやプリンタなどへ出力する。ステップS10の後、メモリ検証装置20は、
図6の処理を終了する。
【0096】
図7は、メモリ更新装置30の動作(メモリ更新方法)を示すフローチャートである。ステップS11において、木構造入力部300は、更新対象となるメモリを保護するための木構造Treeの入力を受け付ける。但し、Treeは、リーフノード集合Leaf、中間ノード集合Inter、ルートノードRootにより構成される。また、メモリアドレス入力部301は、検証対象となるメモリを保護するための木構造に割り当てられているメモリアドレス集合Addの入力を受け付ける。さらに、更新箇所入力部302は、メモリの更新情報UpdateNodeの入力を受け付ける。但し、UpdateNode=(UpdateIndex,UpdateInfo)と定義する。
【0097】
ステップS12において、メモリ検証部303は、Treeと、メモリアドレス集合Addと、メモリの更新情報UpdateNodeとを用いて、UpdateNodeが指定するメモリが改ざんされていないか否かの検証を行う。さらに、メモリ検証部303は、受理(ACK)または不受理(NCK)を決定し、検証結果Bを出力する。そして、検証結果B、及び、メモリ検証のために用いたパスPathを出力する。B=ACK、すなわちメモリ改ざんが検知されない場合(S12:B=ACK(受理)のとき)、処理はステップS14へ進む。B=NCK、すなわちメモリ改ざんが検知された場合(S12:B=NCK(不受理)のとき)、処理はステップS13へ進む。
【0098】
ステップS13において、更新結果出力部306は、メモリ検証部303が出力する検証結果Bをコンピュータディスプレイやプリンタなどへ出力する。ステップS13の後、メモリ更新装置30は、
図7の処理を終了する。
【0099】
ステップS14において、カウンタ更新部304は、木構造入力部300が出力するTreeと、メモリ検証部303が出力するパスPathを用いて、Pathで指定されるノードのカウンタを更新し、更新結果の木構造NewTree’を出力する。ステップS15において、部分更新可能タグ更新部305は、木構造NewTree’と、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、検証結果Bおよびパス特許文献2にかかる技術hとを用いて、特許文献2にかかる技術hで指定されるノードのタグを更新する。そして、部分更新可能タグ更新部305は、更新結果の木構造NewTreeを出力する。
【0100】
ステップS16において、更新結果出力部306は、部分更新可能タグ更新部305が出力する木構造NewTreeを出力する。ステップS16の後、メモリ更新装置30は、
図7の処理を終了する。
【0101】
[効果の説明]
第1の実施形態では、並列化可能な木構造でIncremental MACを用いることにより、効率的にタグを生成及び更新することが可能となる。つまり、メモリ構造初期化装置10における部分更新可能タグ生成部102やメモリ更新装置30における部分更新可能タグ更新部305において、特許文献2、特許文献3、非特許文献1及び非特許文献2よりも効率的にタグを生成及び更新することが可能となる。言い換えると、メモリ保護のために最初に行う必要のある木構造の構成、及びメモリの書き込みを、より効率的に行うことが可能となる。つまり、第1の実施形態では、メモリの書き込み時に必要な処理量を削減することが可能となる。そして、この効果は、ナンス長やカウンタ長が長くなるほどより強まる。
【0102】
(第2の実施形態)
次に、第2の実施形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。したがって、以下の説明では、上述した第1の実施形態と異なる箇所について主に説明する。第2の実施形態では、メモリ保護システムが構成する木構造の分岐数がbであり、深さがdである例について説明する。つまり、第2の実施形態におけるリーフノードの数はb^d個となる。
【0103】
図11は、第2の実施形態にかかるメモリ保護システムが構成する木構造の例を示す図である。
図11には、分岐数b=3、深さd=3の場合の木構造が示されている。なお、Root,Inter,Leafについては、上述した第1の実施形態の場合と実質的に同様である。
【0104】
第2の実施形態にかかるメモリ保護システム1aは、メモリ構造初期化装置10aと、メモリ検証装置20aと、メモリ更新装置30aと、を備える。メモリ保護システム1aは、メモリの改ざん検知を行う。メモリ保護システム1aでは、メモリ構造初期化装置10aが改ざん検知を行いたい平文を入力として、初期状態の木構造と木構造における各ノードのメモリアドレス集合を出力する。ただし、平文はb^d個の平文ブロックの結合で表す。つまり、以下の式24が成り立つ。
(式24)
M=M[1]||M[2]||・・・||M[b^d]
また、1つの平文ブロックはBlockビットと定義する。
【0105】
メモリ検証装置20aは、改ざんをチェックしたい平文ブロックの格納場所と木構造、および木構造における各ノードのメモリアドレスを入力として、そのメモリが改ざんされているか否かを検証する。メモリ更新装置30aは、更新したい平文ブロックの格納場所とその更新内容、木構造、および木構造における各ノードのメモリアドレスを入力とする。メモリ更新装置30aは、更新後の木構造、または、改ざんを検知したことを表すエラーメッセージを出力する。
【0106】
[メモリ構造初期化装置の構成の説明]
第2の実施形態にかかるメモリ構造初期化装置10aは、平文入力部100と、メモリアドレス割り当て部101aと、部分更新可能タグ生成部102aと、を備える。また、第2の実施形態にかかるメモリ構造初期化装置10aは、リーフノード生成部103aと、中間ノード生成部104aと、ルートノード生成部105と、木構造出力部106と、メモリアドレス出力部107と、を備える。なお、平文入力部100は、第1の実施形態のメモリ構造初期化装置10における平文入力部100と実質的に同じであるので、説明を省略する。
【0107】
メモリアドレス割り当て部101aは、木構造の各ノードにメモリアドレス情報を割り当てる。1<=i<=d,1<=j_i<=b^{i}のとき、深さiでj_i番目のノードに割り当てるメモリアドレスを、add(i,j_i)で表す。そして、木構造の全てのノードに割り当てられたメモリアドレス情報を、以下の式25のように記述する。
(式25)
Add=(add(0,1),add(1,1),add(1,2),・・・,add(1,b),add(2,1),add(2,2),・・・,add(d,b^d-1),add(d,b^d))
【0108】
部分更新可能タグ生成部102aは、平文入力部100が出力する平文Mと、メモリアドレス割り当て部101aが出力するメモリアドレス集合Addと、秘密鍵Kとを用いて、改ざん検知用のタグを生成する。まず、部分更新可能タグ生成部102aは、リーフノードで用いるタグとして、以下の式26で表されるデータを生成する。
(式26)
TagLeaf=((M[1],Tag(d,1)),(M[2],Tag(d,2)),・・・,(M[b^d],Tag(d,b^d)))
Tag(d,i)=MAC_K(add(d,i)||(0^{CTR-1}||1),M[i])
1<=i<=b^d
【0109】
但し、a||bはビット列aとビット列bの連結を表す。また、CTRは各ノードに格納されるローカルカウンタ値のビット長であり、0^{CTR-1}は0がCTR-1個連結したビット列を表す。CTRの値は予め決定されていると仮定する。
【0110】
次に、部分更新可能タグ生成部102aは、中間ノードで用いるタグとして、以下の式27で表されるデータを生成する。
(式27)
TagInter=(Tag(1,1),・・・,Tag(d-1,b^{d-1}))
Tag(1,1)=MAC_K(add(1,1)||(0^{CTR-1}||1),(0^{CTR-1}||1)^b)
Tag(i,j_i)=IncMAC_K((1,∞),(add(1,1)||(0^{CTR-1}||1),∞),(add(i,j_i)||(0^{CTR-1}||1),∞),Tag(1,1))
1<=i<=d-1,1<=j_i<=b^i,(i,j_i)≠(1,1)
但し、Tag(1,1)の導出部分において、MAC_Kの2つ目の入力(0^{CTR-1}||1)^bは、(0^{CTR-1}||1)をb個連結した値を表す。
【0111】
次に、部分更新可能タグ生成部102aは、ルートノードで用いるタグとして、以下の式28で表されるデータを生成する。
(式28)
TagRoot=(Tag(0,1))
Tag(0,1)=IncMAC_K((1,∞),(add(1,1)||(0^{CTR-1}||1),∞),(add(0,1)||(0^{CTR-1}||1),∞),Tag(1,1))
【0112】
式26,式27,式28から、各ノードに対応するタグは、自ノードのメモリアドレスとローカルカウンタ値との連結をナンスとし、b個の子ノードの複数のローカルカウンタ値の連結を平文とし、そのナンスと平文を入力としたMACの計算結果である。
そして、部分更新可能タグ生成部102aは、タグ集合TagLeafをリーフノード生成部103aに出力する。また、部分更新可能タグ生成部102aは、タグ集合TagInterを中間ノード生成部104aに出力する。また、部分更新可能タグ生成部102aは、タグ集合TagRootをルートノード生成部105に出力する。
【0113】
リーフノード生成部103aは、部分更新可能タグ生成部102aが出力するタグ集合TagLeafを用いて、木構造のリーフノードを生成する。1<=i<=b^dのとき、i番目のリーフノードは、以下の式29で示すように生成される。
(式29)
(ctr(d,i),M[i],Tag(d,i))
【0114】
但し、ctr(d,i)は、深さdにおけるi番目のリーフノードのカウンタ値を表しており、当該ノードが更新されるたびに1が足される。ここでは、全てのiに対してctr(d,i)=0^{CTR-1}||1と定義する。
【0115】
また、全てのリーフノードを以下の式30のように記述する。
(式30)
Leaf=((ctr(d,1),M[1],Tag(d,1)),・・・,(ctr(d,b^d),M[b^d],Tag(d,b^d)))
また、リーフノード生成部103aは、生成されたリーフノード集合Leafを木構造出力部106に出力する。
【0116】
中間ノード生成部104aは、部分更新可能タグ生成部102aが出力するタグ集合TagInterを用いて、木構造の中間ノードを生成する。また、1<=i<=d-1,1<=j_i<=b^iのとき、深さiにおけるj_i番目の中間ノードは以下の式31で示すように生成される。
(式31)
(ctr(i,j_i),Tag(i,j_i))
但し、全てのi,j_iに対してctr(i,j_i)=0^{CTR-1}||1と定義する。
【0117】
また、全ての中間ノードを以下の式32のように記述する。
(式32)
Inter=((ctr(1,1),Tag(1,1)),(ctr(1,2),Tag(1,2)),・・・,(ctr(d-1,b^{d-1}),Tag(d-1,b^{d-1})))
また、中間ノード生成部104aは、生成された中間ノード集合Interを木構造出力部106に出力する。
【0118】
ルートノード生成部105は、第1の実施形態のメモリ構造初期化装置10におけるルートノード生成部105と実質的に同じであるので、説明を省略する。木構造出力部106は、第1の実施形態のメモリ構造初期化装置10における木構造出力部106と実質的に同じであるので、説明を省略する。メモリアドレス出力部107は、第1の実施形態のメモリ構造初期化装置10におけるメモリアドレス出力部107と実質的に同じであるので、説明を省略する。
【0119】
[メモリ検証装置の構成の説明]
第2の実施形態にかかるメモリ検証装置20aは、木構造入力部200と、メモリアドレス入力部201aと、検証箇所入力部202aと、タグ検証部203aと、検証結果出力部204と、を備える。木構造入力部200は、第1の実施形態のメモリ検証装置20における木構造入力部200実質的に同じであるので、説明を省略する。
【0120】
メモリアドレス入力部201aは、検証対象となるメモリを保護するための木構造に割り当てられているメモリアドレス集合Addの入力を受け付ける。そして、メモリアドレス入力部201aは、メモリアドレス集合Addをタグ検証部203aに出力する。なお、Addは以下の式33のように記述される。
(式33)
Add=(add(0,1),add(1,1),add(1,2),・・・,add(1,b),add(2,1),add(2,2),・・・,add(d,b^d-1),add(d,b^d))
但し、1<=i<=d,1<=j_i<=b^{i}のとき、深さiにおいてj_i番目のノードのメモリアドレスを、add(i,j_i)で表す。
【0121】
検証箇所入力部202aは、メモリの検証箇所CheckNodeの入力を受け付ける。そして、検証箇所入力部202aは、検証箇所CheckNodeをタグ検証部203aに出力する。但し、CheckNodeは、1以上b^d以下の数値であり、検証箇所がリーフノードのCheckNode番目であることを表す。
【0122】
タグ検証部203aは、Treeと、メモリアドレス集合Addと、検証箇所CheckNodeと、秘密鍵Kを用いて、CheckNodeが指定するメモリが改ざんされていないか検証する。そして、タグ検証部203aは、検証結果を検証結果出力部204に出力する。まず、タグ検証部203aは、CheckNode番目のリーフノードからルートノードまでのパスPathを、以下の式34を計算することで生成する。
(式34)
Path=((d,p_d),(d-1,p_{d-1}),(d-2,p_{d-2}),・・・,(1,p_1),(0,p_0))
【0123】
ここで、1<=i<=d,1<=j_i<=b^{i}のとき、Pathの各要素(i,j_i)は、深さiにおいてj_i番目のノードを表す。但し、p_d=CheckNodeであり、0<=i<=d-1のとき、p_iは以下の式35で定義される。
(式35)
p_i=ceiling(p_{i+1}/b)
但し、ceiling(・)は天井関数を表す。また、p_0の値は必ず1となる。
【0124】
次にタグ検証部203aは、メモリアドレス入力部201aの出力であるAddと、木構造入力部200の出力であるTreeと、秘密鍵Kを用いて以下の式36を計算する。
(式36)
PathTag’=(Tag’(d,p_d),Tag’(d-1,p_{d-1}),・・・,Tag’(0,p_0))
Tag’(d,p_d)=MAC_K(add(d,p_d)||ctr(d,p_d),M[p_d])
Tag’(i,p_i)=MAC_K(add(i,p_i)||ctr(i,p_i),ctr(i+1,b・p_i-(b-1))||・・・||ctr(i+1,b・p_i-1)||ctr(i+1,b・p_i))
0<=i<=d-1
【0125】
但し、MAC_Kは、第2の実施形態におけるメモリ構造初期化装置10aの部分更新可能タグ生成部102aで用いられている方式と実質的に同じであるので、説明を省略する。また、Tag’(i,p_i)は、MAC関数の入力のナンス部分に当該ノードのアドレスとローカルカウンタとの連結を入力し、平文部分に当該ノードの子ノードのローカルカウンタをb個連結して入力したものである。
【0126】
次に、タグ検証部203aは、木構造入力部200の出力であるTreeから、以下の式37で表される値を取得する。
(式37)
PathTag=(Tag(d,p_d),Tag(d-1,p_{d-1}),・・・,Tag(0,p_0))
【0127】
そして、タグ検証部203aは、自身が計算したPathTag’とTreeから取得したPathTagとが等しいか否かをチェックする。0<=i<=dのとき、全てのiに対して
Tag’(i,p_i)=Tag(i,p_i)
が成立する場合、タグ検証部203aは、検証結果をACKに設定する。ACKは、パスに関わるノードの情報が改ざんされていないことを示す。検証結果をBと表記し、検証結果がACKであることを、B=ACKと表記する。
【0128】
一方、0<=i<=dのとき、あるiに対して
Tag’(i,p_i)≠Tag(i,p_i)
が成立する場合、タグ検証部203aは、検証結果をNCKに設定する。NCKは、パスに関わるノードの情報が改ざんされていることを示す。検証結果がNCKであることを、B=NCKと表記する。
【0129】
タグ検証部203aは検証結果Bを出力する。
検証結果出力部204は、第1の実施形態のメモリ検証装置20における検証結果出力部204と実質的に同じであるので、説明を省略する。
【0130】
[メモリ更新装置の構成の説明]
第2の実施形態にかかるメモリ更新装置30aは、木構造入力部300と、メモリアドレス入力部301aと、更新箇所入力部302aと、メモリ検証部303aと、カウンタ更新部304と、部分更新可能タグ更新部305aと、更新結果出力部306と、を備える。木構造入力部300は、第1の実施形態のメモリ更新装置30における木構造入力部300と実質的に同じであるので、説明を省略する。
【0131】
メモリアドレス入力部301aは、検証対象となるメモリを保護するための木構造に割り当てられているメモリアドレス集合Addの入力を受け付ける。そして、メモリアドレス入力部301aは、メモリアドレス集合Addを、メモリ検証部303a及び部分更新可能タグ更新部305aに出力する。メモリアドレス入力部301aの機能は、第2の実施形態のメモリ検証装置20aにおけるメモリアドレス入力部201aの機能と実質的に同じであるので、説明を省略する。
【0132】
更新箇所入力部302aは、メモリの更新情報UpdateNodeの入力を受け付ける。そして、更新箇所入力部302aは、メモリの更新情報UpdateNodeを、メモリ検証部303a及び部分更新可能タグ更新部305aに出力する。但し、UpdateNode=(UpdateIndex,UpdateInfo)と定義する。UpdateIndexは1以上b^d以下の数値であり、更新箇所がリーフノードのUpdateIndex番目であることを表す。UpdateInfoは、UpdateIndex番目のリーフに含まれる情報である平文ブロックM[UpdateIndex]を更新するBlockビットの情報を表す。
【0133】
メモリ検証部303aは、Treeと、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、秘密鍵Kとを用いて、UpdateNodeが指定するメモリが改ざんされていないか検証する。メモリ検証部303aが行う処理は、第2の実施形態のメモリ検証装置20aにおけるタグ検証部203aと同じであるが、出力結果のみ異なる。第2の実施形態のメモリ検証装置20aにおけるタグ検証部203aは検証結果Bを出力するが、メモリ検証部303aは、検証結果Bと共に、当該ノードからルートノードまでのパスPathも出力する。メモリ検証部303aは、検証結果Bを、カウンタ更新部304、部分更新可能タグ更新部305a及び更新結果出力部306に出力する。また、メモリ検証部303aは、パスPathを、カウンタ更新部304及び部分更新可能タグ更新部305aに出力する。
【0134】
Pathは以下の式38のように表される。
(式38)
Path=((d,p_d),(d-1,p_{d-1}),(d-2,p_{d-2}),・・・,(1,p_1),(0,p_0))
ここでは、メモリ検証部303aが行う操作から、p_d=UpdateIndexとなることが分かる。
【0135】
カウンタ更新部304は、第1の実施形態のメモリ更新装置30におけるカウンタ更新部304と実質的に同じであるので、説明を省略する。
【0136】
部分更新可能タグ更新部305aは、更新結果の木構造NewTree’と、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、検証結果BおよびパスPathと、秘密鍵Kとを用いて、Pathで指定されるノードのタグを更新する。B=ACKである場合、部分更新可能タグ更新部305aは、0<=i<=d-1に対して、以下の式39の計算を行う。
(式39)
Tag(d,p_d)←MAC_K(add(d,p_d)||ctr(d,p_d),UpdateInfo)
Tag(i,p_i)←IncMAC_K((1,ind_{i+1}),((add(i,p_i)||(ctr(i,p_i)-1)),ctr(i+1,p_{i+1})-1),((add(i,p_i)||ctr(i,p_i)),ctr(i+1,p_{i+1})),Tag(i,p_i))
ind_{i+1}=((p_{i+1}-1)mod(b))+1
【0137】
但し、MAC_KおよびIncMAC_Kは、第2の実施形態におけるメモリ構造初期化装置10aの部分更新可能タグ生成部102aや、メモリ検証装置20aのタグ検証部203aで用いられている方式と実質的に同じであるので、説明を省略する。また、ind_{i+1}は、(i+1,p_{i+1})というノードが、その親ノード(i,p_i)から見て何番目の子ノードであるか示す値である。そして、部分更新可能タグ更新部305aは、更新結果の木構造NewTreeを、更新結果出力部306に出力する。一方、B=NCKの場合は、部分更新可能タグ更新部305aは処理を行わず、何も出力しない。
【0138】
更新結果出力部306は、第1の実施形態のメモリ更新装置30における更新結果出力部306と実質的に同じであるので、説明を省略する。
【0139】
[効果の説明]
第2の実施形態が奏する効果は第1の実施形態が奏する効果と実質的に同じである。但し、第1の実施形態では、構成される木構造は2分木を仮定していたが、第2の実施形態では、木構造の分岐数を任意にしている。メモリ構造初期化装置10aにおける部分更新可能タグ生成部102a及びメモリ更新装置30aにおける部分更新可能タグ更新部305aで実現されるタグ更新は、ナンスのみの更新、又は、1つの子ノードのみにおけるカウンタ値更新である。したがって、分岐数の多い木構造ほど、Incremental MACを用いることによる効果がより強まる。詳細には、特許文献2、特許文献3、非特許文献1及び非特許文献2では、分岐数の増大に比例して、木構造の生成時や更新時におけるノードごとのMAC処理量が増大する。しかしながら、第2の実施形態では、木構造の生成時や更新時におけるノードごとのMAC処理量は、分岐数に依らず一定である。したがって、分岐数によらないで、処理量を削減することが可能となる。
【0140】
(第3の実施形態)
次に、第3の実施形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。したがって、以下の説明では、上述した第1の実施形態と異なる箇所について主に説明する。第3の実施形態では、メモリ検証に加えて、入力される平文を暗号化して秘匿するメモリ保護システムの例について説明する。但し、第3の実施形態にかかるメモリ保護システム1cが構成する木構造は、第1の実施形態と同様に、分岐数が2であり、深さがdであると定義する。
【0141】
図12は、第3の実施形態にかかるメモリ保護システムが構成する木構造の例を示す図である。
図12には、分岐数b=2、深さd=3の場合の木構造が示されている。なお、Root,Inter,Leafについては、上述した第1の実施形態の場合と実質的に同様である。
【0142】
第3の実施形態にかかるメモリ保護システム1cは、メモリ構造初期化装置10cと、メモリ検証装置20cと、メモリ更新装置30cと、を備える。メモリ保護システム1cは、メモリの改ざん検知および秘匿を行う。メモリ保護システム1cでは、メモリ構造初期化装置10cが改ざん検知および秘匿を行いたい平文を入力として、初期状態の木構造と木構造における各ノードのメモリアドレス集合を出力する。
【0143】
メモリ検証装置20cは、改ざんをチェックしたい暗号文ブロックの格納場所と木構造、および木構造における各ノードのメモリアドレスを入力として、そのメモリが改ざんされているかどうか検証する。メモリ更新装置30cは、更新したい暗号文ブロックの格納場所とその更新内容、木構造、および木構造における各ノードのメモリアドレスを入力とする。メモリ更新装置30cは、更新後の木構造か、または、改ざんを検知したことを表すエラーメッセージを出力する。
【0144】
第3の実施形態にかかるメモリ保護システム1cは、第1の実施形態におけるメモリ保護システム1で用いたMACに加えて、要素技術として認証暗号(AE)を用いる。秘密鍵Kを用いたAEは、暗号化関数AE.Enc_Kと、この暗号化関数AE.Enc_K対となる復号関数AE.Dec_Kとの2つの関数により定義される。AE.Enc_Kは、ナンスN、および平文Mを入力として、暗号文Cと認証タグTagとを出力する。暗号化関数を式で記述すると以下の式40のようになる。
(式40)
AE.Enc_K(N,M)=(C,T)
【0145】
AE.Enc_Kは、ナンスN、暗号文C、および認証タグの3つを入力として、改ざんが検知されない場合は復号結果の平文Mを出力し、改ざんが検知された場合はエラーメッセージ⊥を出力する。このことを式で記述すると以下の式41のようになる。
(式41)
AE.Dec_K(N,C,T)=M(改ざんが検知されない場合)
AE.Dec_K(N,C,T)=⊥(改ざんが検知された場合)
【0146】
[メモリ構造初期化装置の構成の説明]
第3の実施形態にかかるメモリ構造初期化装置10cは、平文入力部100と、メモリアドレス割り当て部101と、部分更新可能タグ生成部102cと、を備える。また、第3の実施形態にかかるメモリ構造初期化装置10cは、リーフノード生成部103cと、中間ノード生成部104と、ルートノード生成部105と、木構造出力部106と、メモリアドレス出力部107と、を備える。
【0147】
平文入力部100は、第1の実施形態のメモリ構造初期化装置における平文入力部100と実質的に同じであるので、説明を省略する。メモリアドレス割り当て部101は、第1の実施形態のメモリ構造初期化装置におけるメモリアドレス割り当て部101と実質的に同じであるので、説明を省略する。
【0148】
部分更新可能タグ生成部102cは、平文入力部100が出力する平文Mと、メモリアドレス割り当て部101が出力するメモリアドレス集合Addと、秘密鍵K_1,K_2とを用いて、改ざん検知用のタグおよび暗号文を生成する。中間ノードとルートノードのためのタグ生成にはMACを用いるとし、平文(リーフノード)の暗号化およびタグ生成には認証暗号(AE)を用いるとする。MACのアルゴリズムには、例えばPMACなどが挙げられ、AEのアルゴリズムには、例えばOCB(Offset CodeBook)などが挙げられる。
【0149】
まず、部分更新可能タグ生成部102cは、リーフノードで用いる暗号文とタグとして、以下の式42で表されるデータを生成する。
(式42)
TagLeaf=((C[1],Tag(d,1)),(C[2],Tag(d,2)),・・・,(C[2^d],Tag(d,2^d)))
(C[i],Tag(d,i))=AE.Enc_{K_1}(add(d,i)||(0^{CTR-1}||1),M[i])
1<=i<=2^d
【0150】
但し、AE.Enc_{K_1}(・,・)はAEの暗号化関数を表す。また、CTRは各ノードに格納されるローカルカウンタ値のビット長であり、0^{CTR-1}は0がCTR-1個連結したビット列を表す。CTRの値は予め決定されていると仮定する。
【0151】
次に、部分更新可能タグ生成部102cは、中間ノードで用いるタグとして、以下の式43で表されるデータを生成する。
(式43)
TagInter=(Tag(1,1),・・・,Tag(d-1,2^{d-1}))
Tag(1,1)=MAC_K(add(1,1)||(0^{CTR-1}||1),(0^{CTR-1}||1)||(0^{CTR-1}||1))
Tag(i,j_i)=IncMAC_K((1,∞),(add(1,1)||(0^{CTR-1}||1),∞),(add(i,j_i)||(0^{CTR-1}||1),∞),Tag(1,1))
1<=i<=d-1,1<=j_i<=2^i,(i,j_i)≠(1,1)
【0152】
次に、部分更新可能タグ生成部102cは、ルートノードで用いるタグとして、以下の式44で表されるデータを生成する。
(式44)
TagRoot=(Tag(0,1))
Tag(0,1)=IncMAC_K((1,∞),(add(1,1)||(0^{CTR-1}||1),∞),(add(0,1)||(0^{CTR-1}||1),∞),Tag(1,1))
【0153】
リーフノード生成部103cは、部分更新可能タグ生成部102cが出力する暗号文およびタグ集合TagLeafを用いて、木構造のリーフノードを生成する。1<=i<=2^dのとき、i番目のリーフノードは、以下の式45で示すように生成される。
(式45)
(ctr(d,i),C[i],Tag(d,i))
【0154】
但し、ctr(d,i)は、深さdにおけるi番目のリーフノードのカウンタ値を表しており、当該ノードが更新されるたびに1が足される。ここでは、全てのiに対してctr(d,i)=0^{CTR-1}||1と定義する。
【0155】
また、全てのリーフノードを以下の式46のように記述する。
(式46)
Leaf=((ctr(d,1),C[1],Tag(d,1)),・・・,(ctr(d,2^d),C[2^d],Tag(d,2^d)))
【0156】
中間ノード生成部104は、第1の実施形態のメモリ構造初期化装置10における中間ノード生成部104と実質的に同じであるので、説明を省略する。ルートノード生成部105は、第1の実施形態のメモリ構造初期化装置10におけるルートノード生成部105と実質的に同じであるので、説明を省略する。木構造出力部106は、第1の実施形態のメモリ構造初期化装置10における木構造出力部106と実質的に同じであるので、説明を省略する。メモリアドレス出力部107は、第1の実施形態のメモリ構造初期化装置10におけるメモリアドレス出力部107と実質的に同じであるので、説明を省略する。
【0157】
[メモリ検証装置の構成の説明]
第3の実施形態にかかるメモリ検証装置20cは、木構造入力部200と、メモリアドレス入力部201と、検証箇所入力部202と、タグ検証部203cと、検証結果出力部204と、を備える。木構造入力部200は、第1の実施形態のメモリ検証装置20における木構造入力部200と実質的に同じであるので、説明を省略する。メモリアドレス入力部201は、第1の実施形態のメモリ検証装置20におけるメモリアドレス入力部201と実質的に同じであるので、説明を省略する。検証箇所入力部202は、第1の実施形態のメモリ検証装置20における検証箇所入力部202と実質的に同じであるので、説明を省略する。
【0158】
タグ検証部203cは、Treeと、メモリアドレス集合Addと、検証箇所CheckNodeと、秘密鍵K_1,K_2とを用いて、CheckNodeが指定するメモリが改ざんされていないか検証する。まず、タグ検証部203cは、CheckNode番目のリーフノードからルートノードまでのパスPathを生成する。ここで、パスPathとは、当該リーフノードからルートノードまでのノードの道のりを示すもので、以下の式47で表される。
(式47)
Path=((d,p_d),(d-1,p_{d-1}),(d-2,p_{d-2}),・・・,(1,p_1),(0,p_0))
【0159】
ここで、1<=i<=d,1<=j_i<=2^{i}のとき、Pathの各要素(i,j_i)は、深さiにおいてj_i番目のノードを表す。但し、p_d=CheckNodeであり、0<=i<=d-1のとき、p_iは以下の式48で定義される。
(式48)
p_i=ceiling(p_{i+1}/2)
但し、ceiling(・)は天井関数を表す。また、p_0の値は必ず1となる。
【0160】
次に、タグ検証部203cは、メモリアドレス入力部201の出力であるAddと、木構造入力部200の出力であるTreeと、秘密鍵K_1,K_2とを用いて以下の式49を計算する。
(式49)
AE.Dec_{K_1}(add(d,p_d)||ctr(d,p_d),C[p_d],Tag(d,p_d))
【0161】
上記の計算結果がエラーメッセージ⊥の場合、タグ検証部203cは、検証結果BをB=NCKと定義し、Bを出力して処理を終了する。但し、AE.Dec_{K_1}(・,・,・)は、第3の実施形態におけるメモリ構造初期化装置10cの部分更新可能タグ生成部102cで用いられている方式AE.Enc_{K_1}の復号関数である。また、NCKは、パスに関わるノードの情報が改ざんされていることを示す。
【0162】
一方、上記の計算結果が平文M[p_d]として正しく復号されたことを示す場合、タグ検証部203cは、続けて以下の式50を計算する。
(式50)
PathTag’=(Tag’(d-1,p_{d-1}),・・・,Tag’(0,p_0))
Tag’(i,p_i)=MAC_{K_2}(add(i,p_i)||ctr(i,p_i),ctr(i+1,2p_i-1)||ctr(i+1,2p_i))
0<=i<=d-1
【0163】
但し、MAC_{K_2}(・)は、第3の実施形態におけるメモリ構造初期化装置10cの部分更新可能タグ生成部102cで用いられているMAC方式と実質的に同じであるので、説明を省略する。
【0164】
また、タグ検証部203cは、木構造入力部200の出力であるTreeから、以下の式51で表される値を取得する。
(式51)
PathTag=(Tag(d-1,p_{d-1}),・・・,Tag(0,p_0))
【0165】
そして、タグ検証部203cは、自身が計算したPathTag’とTreeから取得したPathTagとが等しいか否かをチェックする。0<=i<=d-1のとき、全てのiに対して
Tag’(i,p_i)=Tag(i,p_i)
が成立するなら、タグ検証部203cは検証結果をACKに設定する。ACKは、パスに関わるノードの情報が改ざんされていないことを示す。検証結果をBと表記し、検証結果がACKであることを、B=ACKと表記する。
【0166】
一方、0<=i<=dのとき、あるiに対して
Tag’(i,p_i)≠Tag(i,p_i)
が成立するなら、タグ検証部203は検証結果BをB=NCKと定義する。
【0167】
タグ検証部203は検証結果Bを出力する。
検証結果出力部204は、第1の実施形態のメモリ検証装置20における検証結果出力部204と実質的に同じであるので、説明を省略する。
【0168】
[メモリ更新装置の構成の説明]
第3の実施形態にかかるメモリ更新装置30cは、木構造入力部300と、メモリアドレス入力部301と、更新箇所入力部302と、メモリ検証部303cと、カウンタ更新部304と、部分更新可能タグ更新部305cと、更新結果出力部306と、を備える。木構造入力部300は、第1の実施形態のメモリ更新装置30における木構造入力部300と実質的に同じであるので、説明を省略する。メモリアドレス入力部301は、第1の実施形態のメモリ更新装置30におけるメモリアドレス入力部301と実質的に同じであるので、説明を省略する。更新箇所入力部302は、第1の実施形態のメモリ更新装置30における更新箇所入力部302と実質的に同じであるので、説明を省略する。
【0169】
メモリ検証部303cは、Treeと、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、秘密鍵K_1,K_2とを用いて、UpdateNodeが指定するメモリが改ざんされていないか検証する。メモリ検証部303cが行う処理は、第3の実施形態のメモリ検証装置20cにおけるタグ検証部203cと同じであるが、出力結果のみ異なる。第3の実施形態のメモリ検証装置20cにおけるタグ検証部203cは検証結果Bを出力するが、メモリ検証部303cは、検証結果Bと共に、当該ノードからルートノードまでのパスPathも出力する。メモリ検証部303cは、検証結果Bを、カウンタ更新部304、部分更新可能タグ更新部305c及び更新結果出力部306に出力する。また、メモリ検証部303cは、パスPathを、カウンタ更新部304及び部分更新可能タグ更新部305cに出力する。
【0170】
カウンタ更新部304は、第1の実施形態のメモリ更新装置30におけるカウンタ更新部304と実質的に同じであるので、説明を省略する。
【0171】
部分更新可能タグ更新部305cは、更新結果の木構造NewTree’と、メモリアドレス集合Addと、メモリの更新情報UpdateNodeと、検証結果BおよびパスPathと、秘密鍵K_1,K_2とを用いて、Pathで指定されるノードのタグを更新する。B=ACKである場合、部分更新可能タグ更新部305cは、0<=i<=d-1に対して、以下の式52の計算を行う。
(式52)
(C[p_d],Tag(d,p_d))←AE.Enc_{K_1}(add(d,p_d)||ctr(d,p_d),UpdateInfo)
Tag(i,p_i)←IncMAC_{K_2}((1,ind_{i+1}),((add(i,p_i)||(ctr(i,p_i)-1)),ctr(i+1,p_{i+1})-1),((add(i,p_i)||ctr(i,p_i)),ctr(i+1,p_{i+1})),Tag(i,p_i))
ind_{i+1}=((p_{i+1}-1)mod2)+1
【0172】
但し、AE.Enc_{K_1}(・,・)やMAC_{K_2}(・)、IncMAC_{K_2}は、第3の実施形態におけるメモリ構造初期化装置10cの部分更新可能タグ生成部102cや、メモリ検証装置20cのタグ検証部203cで用いられている方式と実質的に同じである。また、ind_{i+1}は、(i+1,p_{i+1})というノードが、その親ノード(i,p_i)から見て何番目の子ノードであるか示す値である。そして、部分更新可能タグ更新部305cは、更新結果の木構造NewTreeを出力する。一方、B=NCKの場合は、部分更新可能タグ更新部305cは処理を行わず、何も出力しない。
【0173】
更新結果出力部306は、第1の実施形態のメモリ更新装置30における更新結果出力部306と実質的に同じであるので、説明を省略する。
【0174】
[効果の説明]
第3の実施形態が奏する効果は、第1の実施形態が奏する効果に加えて、メモリの秘匿が可能であることである。第1の実施形態におけるメモリ構造初期化装置10の部分更新可能タグ生成部102、メモリ検証装置20のタグ検証部203、メモリ更新装置30の部分更新可能タグ更新部305では、平文メッセージの改ざん検知のためにMACを用いていた。これに対し、第3の実施形態では、平文メッセージにAE処理を施すことにより、改ざん検知に加えて平文メッセージの秘匿が可能となる。用いるAEが、OCBのようなレート1の方式、すなわち平文の暗号化と認証タグ生成を暗号化のみのコストで実現できるという性質を持つ方式であって、かつ、平文と暗号文のデータ量が同一になるような方式を採用できるとする。この場合、第1の実施形態と比較して、木構造全体のデータ量や、各装置で必要な計算量は、ほぼ変化しない。つまり、第3の実施形態は、第1の実施形態と同等のデータ量及び計算量で、改ざん検知に加えて秘匿も可能となる。また、第3の実施形態の木構造では2分木を仮定していたが、分岐数を増やした木構造を用いることも当然に可能である。第2の実施形態で述べたように、分岐数の多い木構造ほど、Incremental MACを用いることによる効果がより強まる。
【0175】
(第4の実施形態)
次に、第4の実施形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。したがって、以下の説明では、上述した第1の実施形態と異なる箇所について主に説明する。第4の実施形態では、第3の実施形態で用いるMACとAEが、128ビット入出力のブロック暗号を用いた方式で、かつ両者の安全性が64ビット安全性となる場合のメモリ保護システムの例について説明する。但し、メモリ保護システム1dが構成する木構造は、第3の実施形態と同様に、分岐数が2であり、深さがdと定義される。
【0176】
図13は、第4の実施形態にかかるメモリ保護システムで用いられるMACの演算の概略を示す図である。
図13で示されるMACは、以下のように定義される。秘密鍵をK、ナンスをN、平文をM=M[1]||・・・||M[m-1]||M[m]とし、秘密鍵Kを用いた128ビットブロック暗号を、E_Kと定義する。128ビット入出力のブロック暗号は、例えばAESなどで実現される。但し、ナンスを128ビットとし、1<=i<=mに対してM[i]を128ビットとする。
【0177】
第4の実施形態で用いられるMACは、以下の式53のようにして認証タグTagを導出する。
(式53)
Tag=E_K(M[1]+Δ_1)+E_K(M[2]+Δ_2)+・・・+E_K(M[m]+Δ_m)+E_K(N+Δ’_m)
【0178】
但し、マスク値Δ_1,Δ_2,・・・,Δ_m,Δ’_mは、例えば以下の式54のように定義される。
(式54)
Δ_1=L=2・E_K(0^{128})
Δ_i=Δ_{i-1}+L[ntz(i)] (2<=i<=m)
Δ’_m=Δ_m+E_K(0^{128})
【0179】
但し、ntz(i)は、number of training zeroの略で、10進数iを2進数に変換した場合に、最下位ビットから0が連続している数と定義される。例えば、ntz(7)を求める場合、7は2進数表現で「111」なので、ntz(7)=0である。同様に、ntz(8)=3である。また、L[j]は、有限体GF(2^n)上でのL・2^jという計算と定義する。また、+は排他的論理和(XOR)であり、0^{128}は0を128個連結させたビット列である。このようにして定義されたMACは、64ビット安全性を持ち、加えてIncremental性を有する。
【0180】
つまり、第4の実施形態にかかるメッセージ認証コード(MAC)は、以下の特徴を有する。検証対象の平文が分割された平文ブロックそれぞれを、ブロック暗号の入力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る暗号化手法により暗号化する。そして、平文ブロックのそれぞれの暗号化結果の排他的論理和を取ることで認証用タグを生成する。
【0181】
図14は、第4の実施形態にかかるメモリ保護システムで用いられるAEの演算の概略を示す図である。
図14で示されるAEは、以下のように定義される。秘密鍵をK、ナンスをN、平文をM=M[1]||・・・||M[m-1]||M[m]とし、秘密鍵Kを用いた128ビットブロック暗号を、E_Kと定義する。但し、ナンスを128ビットとし、1<=i<=mに対してM[i]を128ビットとする。
【0182】
第4の実施形態で用いられるAEは、以下の式55のようにして暗号文Cおよび認証タグTagを導出する。
(式55)
C[i]=E_K(M[i]+Δ_i)+Δ_i (1<=i<=m)
C=C[1]||C[2]||・・・||C[m]
Checksum=M[1]+M[2]+・・・+M[m]
Tag=E_K(Checksum+Δ’_m)+Δ’_m
【0183】
但し、マスク値Δ_1,Δ_2,・・・,Δ_m,Δ’_mは、例えば以下の式56のように定義される。
(式56)
L=2・E_K(0^{128})
Δ_1=E_K(N)+L
Δ_i=Δ_{i-1}+L[ntz(i)] (2<=i<=m)
Δ’_m=Δ_m+E_K(0^{128})
【0184】
このようにして定義されたAEは、64ビット安全性を持つ。また、このようにして定義されたAEは、レート1を達成する。つまり、暗号化のみの計算コストで暗号化と改ざん検知を実現できる。
【0185】
つまり、第4の実施形態にかかる認証暗号(AE)は、以下の特徴を有する。暗号化対象の平文が分割された平文ブロックそれぞれを、ブロック暗号の入力と出力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る形の暗号化手法により暗号化して暗号文を生成する。そして、平文ブロックを用いて平文のチェックサムを算出し、チェックサムを、ブロック暗号の入力及び出力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る形の暗号化手法により暗号化して認証用タグを生成する。
【0186】
第4の実施形態にかかるメモリ保護システム1cは、第3の実施形態におけるメモリ保護システム1cと実質的に同じであるので、説明を省略する。但し、要素技術として用いるMACとAEは、上記で定めたものであるとする。
【0187】
[効果の説明]
第4の実施形態が奏する効果は第3の実施形態が奏する効果と実質的に同じである。但し、第4の実施形態では、用いるMACおよびAEの性質から、以下の効果を奏する。まず、MACとAEのセキュリティレベルより、第4の実施形態におけるメモリ保護システム1dは、64ビット安全性を持つとしてよい。加えて、AEにレート1で、かつ平文と暗号文のデータ量が同一になる方式を用いることにより、第1の実施形態と比較して、木構造全体のデータ量や、各装置で必要な計算量はほぼ変化せずに、平文の秘匿を行うことができる。そして、第4の実施形態ではMACとAEで用いるプリミティブを同一のもの(例えばAESなど)としてよいため、実装の際に回路規模の削減を実現し得る。
【0188】
(第5の実施形態)
次に、第5の実施形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。第5の実施形態では、第3の実施形態で用いられるMACおよびAEが128ビット入出力のTweakableブロック暗号を用いた方式であり、かつ両者の安全性が128ビット安全性となる場合のメモリ保護システムの例について説明する。但し、メモリ保護システムが構成する木構造は、第3の実施形態と同様に、分岐数が2であり、深さがdと定義する。
【0189】
まず、Tweakableブロック暗号(TBC;Tweakable Block Cipher)を定義する。TBCは、ブロック暗号の拡張であり、ブロック暗号の入力にTweakと呼ばれる公開調整値を含めた鍵付き置換である。Tweakが異なるTBCは、それぞれ独立なブロック暗号とみなすことができる。入出力長がnビット、Tweak長がtwビットのTBCをTEと定義する。このとき、秘密鍵K、Tweak Twを用いて、平文MをTEによって暗号化してCを得る場合、以下の式57のように記述できる。
(式57)
TE_K(Tw,M)=C
【0190】
なお、第5の実施形態においては、n=128とする。Tweak長twは特に限定しないが、128ビット以上であると定義し、Tweak長よりも大きいビット長のTweakを入力したい場合は、所望の安全性を損ねないような適切な手段によって処理するとする。例えば、適切な手段の例としては、XTやXTXなどのTweak拡張方式が挙げられる。
【0191】
図15は、第5の実施形態にかかるメモリ保護システムで用いられるMACの演算の概略を示す図である。
図15で示されるMACは、以下のように定義される。秘密鍵をK、ナンスをN、平文をM=M[1]||・・・||M[m-1]||M[m]とし、秘密鍵Kを用いた128ビット入出力TBCを、TE_Kと定義する。128ビット入出力でTweak長が128ビットのTBCは、例えばSKINNYなどで実現される。但し、ナンスは128ビット、1<=i<=mに対してM[i]を128ビットとする。
【0192】
第5の実施形態で用いられるMACは、以下の式58のようにして認証タグTagを導出する。
(式58)
Tag=TE_K(1,M[1])+TE_K(2,M[2])+・・・+TE_K(m,M[m])+TE’_K(N,fix)
【0193】
但し、+は排他的論理和とする。また、fixは適当な固定値とし、例えば0^nなどとする。またTE’は、TEのTweakを適切に使い分けることによって実現されるTBCとする。例えば、平文部分で用いるTEでは、Tweakの最上位ビットに必ず0を立てておき、ナンス部分で用いるTE’では、Tweakの最上位ビットに必ず1を立てるなどすればよい。また、平文を処理する部分においてTweak入力に余裕がある場合は、その余ったTweak入力部分に更に平文を入力してもよい。このようにすることでMACの効率性を更に向上させることができる。このように定義されたMACは、128ビット安全性を有し、加えてIncremental性を有する。
【0194】
つまり、第5の実施形態にかかるメッセージ認証コード(MAC)は、以下の特徴を有する。検証対象の平文が分割された平文ブロックそれぞれを、Tweakableブロック暗号のTweak部分にブロック毎に異なる定数を入力する形の暗号化手法により暗号化する。そして、Tweakableブロック暗号のTweak部分にナンスを入力する形の暗号化手法により暗号化し、平文ブロックのそれぞれの暗号化結果とナンスの暗号化結果との排他的論理和を取ることで認証用タグを生成する。
【0195】
図16は、第5の実施形態にかかるメモリ保護システムで用いるAEの演算の概略を示す図である。
図16で示されるAEは、以下のように定義される。秘密鍵をK、ナンスをN、平文をM=M[1]||・・・||M[m-1]||M[m]とし、秘密鍵Kを用いた128ビット入出力TBCをTE_Kと定義する。但し、ナンスは128ビット、1<=i<=mに対してM[i]を128ビットとする。第5の実施形態で用いるAEは、以下の式59のようにして暗号文Cと認証タグTagを導出する。
(式59)
C[i]=TE_K((N,i),M[i]) (1<=i<=m)
C=C[1]||C[2]||・・・||C[m]
Checksum=M[1]+M[2]+・・・+M[m]
Tag=TE’_K((N,m),Checksum)
【0196】
但し、TE_KのTweak部分への入力(N,i)は、Nとiの両方を適切にTweak部分に入力することを表す。例えば、Tweak入力部分を、ナンスNを入力する部分と、ブロックインデックスiを入力する部分とに分けるように分割することで、(N,i)を入力してもよい。また、TE’は、第5の実施形態で用いられるMACの場合と同様に、TEのTweakを適切に使い分けることによって実現されるTBCとする。このようにして定義されたAEは、128ビット安全性を持つ。また、このようにして定義されたAEは、レート1を達成する。つまり、暗号化のみの計算コストで暗号化と改ざん検知を実現できる。
【0197】
なお、第5の実施形態にかかるメモリ保護システム1cは、第3の実施形態におけるメモリ保護システム1cと実質的に同じであるので、説明を省略する。但し、要素技術として用いるMACとAEは、上記で定めたものであるとする。
【0198】
[効果の説明]
第5の実施形態が奏する効果は第4の実施形態が奏する効果と実質的に同じである。但し、第4の実施形態におけるメモリ保護システムは64ビット安全性だったが、第5の実施形態におけるメモリ保護システムは128ビット安全性であるため、第5の実施形態の方が、より高い安全性を有する。
【0199】
(第6の実施形態)
次に、第6の実施形態について説明する。
図17は、第6の実施形態にかかるメモリ処理装置11の構成を示す図である。第6の実施形態にかかるメモリ処理装置11は、上述したメモリ構造初期化装置10に対応する。メモリ処理装置11は、メモリアドレス割り当て部12と、タグ生成部13と、ノード生成部14とを備える。メモリアドレス割り当て部12は、メモリアドレス割り当てとしての機能を有する。タグ生成部13は、タグ生成手段としての機能を有する。ノード生成部14は、ノード生成手段としての機能を有する。
【0200】
メモリアドレス割り当て部12は、上述したメモリアドレス割り当て部101が有している機能と実質的に同様の機能によって実現できる。タグ生成部13は、上述した部分更新可能タグ生成部102が有している機能と実質的に同様の機能によって実現できる。ノード生成部14は、上述したリーフノード生成部103、中間ノード生成部104、及びルートノード生成部105が有している機能と実質的に同様の機能によって実現できる。
【0201】
メモリアドレス割り当て部12は、メモリを保護するために構成される木構造の各ノードに、ノード固有のメモリアドレスを割り当てる。タグ生成部13は、木構造の各ノードについて、メモリアドレスと定数との連結をナンスとし、メッセージ認証コードに、ナンス及び改ざん検知の対象の平文、又は、ナンス及び各ノードの子ノードの複数の定数を入力することによって、タグを生成する。ここで、メッセージ認証コードは、部分更新可能タグを出力できる。また、タグ生成部13は、リーフノード及び特定のノード以外のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、ナンス、特定のノードのナンス、及び特定のノードのタグを入力することによって、タグを生成する。ノード生成部14は、定数をローカルカウンタとし、少なくともタグとローカルカウンタとを組み合わせて木構造の各ノードを生成する。このような構成によって、メモリ処理装置11は、メモリ保護のために木構造を用いる構成において、メモリの書き出し時に必要な処理量を削減することが可能となる。
【0202】
(ハードウェア構成例)
上述した各実施形態に係る装置およびシステムを、1つの計算処理装置(情報処理装置、コンピュータ)を用いて実現するハードウェア資源の構成例について説明する。但し、各実施形態に係る装置(メモリ処理装置、メモリ検証装置及びメモリ更新装置)は、物理的または機能的に少なくとも2つの計算処理装置を用いて実現されてもよい。また、各実施形態に係る装置は、専用の装置として実現されてもよいし、汎用の情報処理装置で実現されてもよい。
【0203】
図18は、各実施形態に係る装置およびシステムを実現可能な計算処理装置のハードウェア構成例を概略的に示すブロック図である。計算処理装置120は、CPU121、揮発性記憶装置122、ディスク123、不揮発性記録媒体124、及び、通信IF127(IF:Interface)を有する。したがって、各実施形態に係る装置は、CPU121、揮発性記憶装置122、ディスク123、不揮発性記録媒体124、及び、通信IF127を有しているといえる。計算処理装置120は、入力装置125及び出力装置126に接続可能であってもよい。計算処理装置120は、入力装置125及び出力装置126を備えていてもよい。また、計算処理装置120は、通信IF127を介して、他の計算処理装置、及び、通信装置と情報を送受信することができる。
【0204】
不揮発性記録媒体124は、コンピュータが読み取り可能な、たとえば、コンパクトディスク(Compact Disc)、デジタルバーサタイルディスク(Digital Versatile Disc)である。また、不揮発性記録媒体124は、USB(Universal Serial Bus)メモリ、ソリッドステートドライブ(Solid State Drive)等であってもよい。不揮発性記録媒体124は、電源を供給しなくても係るプログラムを保持し、持ち運びを可能にする。なお、不揮発性記録媒体124は、上述した媒体に限定されない。また、不揮発性記録媒体124の代わりに、通信IF127及び通信ネットワークを介して、係るプログラムが供給されてもよい。
【0205】
揮発性記憶装置122は、コンピュータが読み取り可能であって、一時的にデータを記憶することができる。揮発性記憶装置122は、DRAM(dynamic random Access memory)、SRAM(static random Access memory)等のメモリ等である。
【0206】
すなわち、CPU121は、ディスク123に格納されているソフトウェアプログラム(コンピュータ・プログラム:以下、単に「プログラム」と称する)を、実行する際に揮発性記憶装置122にコピーし、演算処理を実行する。CPU121は、プログラムの実行に必要なデータを揮発性記憶装置122から読み取る。表示が必要な場合、CPU121は、出力装置126に出力結果を表示する。外部からプログラムを入力する場合、CPU121は、入力装置125からプログラムを取得する。CPU121は、上述した
図1~
図4,
図17に示される各構成要素の機能(処理)に対応するプログラムを解釈し実行する。CPU121は、上述した各実施形態において説明した処理を実行する。言い換えると、上述した
図1~
図4,
図17に示される各構成要素の機能は、ディスク123又は揮発性記憶装置122に格納されたプログラムを、CPU121が実行することによって実現され得る。
【0207】
すなわち、各実施形態は、上述したプログラムによっても成し得ると捉えることができる。さらに、上述したプログラムが記録されたコンピュータが読み取り可能な不揮発性の記録媒体によっても、上述した各実施形態は成し得ると捉えることができる。
【0208】
(変形例)
なお、本発明は上記実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述したフローチャートにおいて、各処理(ステップ)の順序は、適宜、変更可能である。また、複数ある処理(ステップ)のうちの1つ以上は、省略されてもよい。
【0209】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD-ROM、CD-R、CD-R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM)を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0210】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0211】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当てるメモリアドレス割り当て手段と、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによってタグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するタグ生成手段と、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するノード生成手段と、
を備えるメモリ処理装置。
(付記2)
前記ノード生成手段は、
前記平文と前記タグと前記ローカルカウンタとを組み合わせて前記木構造のリーフノードを生成するリーフノード生成手段と、
前記タグと前記ローカルカウンタとを組み合わせて前記木構造の中間ノードを生成する中間ノード生成手段と、
前記タグと前記ローカルカウンタを組み合わせて前記木構造のルートノードを生成するルートノード生成手段と、
を備える、
付記1に記載のメモリ処理装置。
(付記3)
前記タグ生成手段は、前記部分更新可能タグを出力可能なメッセージ認証コードに前記ナンス及び複数の前記子ノードの前記定数を入力し、認証暗号に前記ナンス及び前記平文を入力することによって、検証対象の暗号文及び前記タグを生成し、
前記リーフノード生成手段は、前記暗号文と前記タグと前記ローカルカウンタとを組み合わせて前記リーフノードを生成する、
付記2に記載のメモリ処理装置。
(付記4)
前記部分更新可能タグを出力可能なメッセージ認証コードは、検証対象の平文が分割された平文ブロックそれぞれを、ブロック暗号の入力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る暗号化手法により暗号化し、平文ブロックのそれぞれの暗号化結果の排他的論理和を取ることで認証用タグを生成する部分更新可能タグを出力可能なメッセージ認証コードであり、
前記認証暗号は、暗号化対象の平文が分割された平文ブロックそれぞれを、ブロック暗号の入力と出力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る形の暗号化手法により暗号化して暗号文を生成し、平文ブロックを用いて平文のチェックサムを算出し、前記チェックサムを、ブロック暗号の入力及び出力にナンスと秘密鍵とブロック毎に異なる定数とから導出されるマスクの排他的論理和を取る形の暗号化手法により暗号化して認証用タグを生成する認証暗号である、
付記3に記載のメモリ処理装置。
(付記5)
前記部分更新可能タグを出力可能なメッセージ認証コードは、検証対象の平文が分割された平文ブロックそれぞれを、Tweakableブロック暗号のTweak部分にブロック毎に異なる定数を入力する形の暗号化手法により暗号化し、Tweakableブロック暗号のTweak部分にナンスを入力する形の暗号化手法により暗号化し、平文ブロックのそれぞれの暗号化結果とナンスの暗号化結果との排他的論理和を取ることで認証用タグを生成する部分更新可能タグを出力可能なメッセージ認証コードであり、
前記認証暗号は、暗号化対象の平文が分割された平文ブロックそれぞれを、Tweakableブロック暗号のTweak部分にナンスとブロック毎に異なる定数とを入力する形の暗号化手法により暗号化して暗号文を生成し、平文ブロックを用いて平文のチェックサムを算出し、前記チェックサムを、Tweakableブロック暗号のTweak部分にナンスとブロック毎に異なる定数とを入力する形の暗号化手法により暗号化して認証用タグを生成する認証暗号である、
付記3に記載のメモリ処理装置。
(付記6)
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力する入力手段と、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するタグ検証手段と、
を備えるメモリ検証装置。
(付記7)
前記タグ検証手段は、前記木構造において、検証対象の暗号文が含まれる前記リーフノードから前記ルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有のメモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成し、前記ナンスと前記暗号文と前記検証に用いられるタグとを認証暗号に入力して、前記平文が改ざんされていないかを検証することにより、前記暗号文が改ざんされていないかを検証する、
付記6に記載のメモリ検証装置。
(付記8)
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力する入力手段と、
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するメモリ検証手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するカウンタ更新手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するタグ更新手段と、
を備えるメモリ更新装置。
(付記9)
前記メモリ検証手段は、前記木構造において、更新対象の暗号文が含まれる前記リーフノードから前記ルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有のメモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成し、前記ナンスと前記暗号文と前記検証に用いられるタグとを認証暗号に入力して、前記平文が改ざんされていないかを検証することにより、前記暗号文が改ざんされていないかを検証して、検証結果及び前記パスを出力し、
前記タグ更新手段は、前記検証結果が改ざんの検知がないことを示す場合に、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力し、前記ナンスと更新対象の平文とを認証暗号に入力することで暗号文及び更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新する、
付記8に記載のメモリ更新装置。
(付記10)
メモリを保護するために構成される木構造の各ノードに、ノード固有のメモリアドレスを割り当てるメモリアドレス割り当て手段と、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによって、タグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するタグ生成手段と、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するノード生成手段と、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するタグ検証手段と、
を備えるメモリ保護システム。
(付記11)
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入手することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するメモリ検証手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するカウンタ更新手段と、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入手することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するタグ更新手段と、
をさらに備える付記10に記載のメモリ保護システム。
(付記12)
メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当て、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによって、タグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成し、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成する、
メモリ処理方法。
(付記13)
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力し、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証する、
メモリ検証方法。
(付記14)
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力し、
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力し、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新し、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新する、
メモリ更新方法。
(付記15)
メモリを保護するために構成される木構造の各ノードに、ノードに固有のメモリアドレスを割り当てるステップと、
前記木構造の各ノードについて、前記メモリアドレスと定数との連結をナンスとし、各リーフノード及び特定のノードについて、部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス及び改ざん検知の対象の平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記定数を入力することによって、タグを生成し、前記リーフノード及び前記特定のノード以外のノードについて、前記部分更新可能タグを出力可能なメッセージ認証コードに、前記ナンス、前記特定のノードの前記ナンス、及び前記特定のノードの前記タグを入力することによってタグを生成するステップと、
前記定数をローカルカウンタとし、少なくとも前記タグと前記ローカルカウンタとを組み合わせて前記木構造の各ノードを生成するステップと、
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
(付記16)
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力するステップと、
前記木構造において、検証対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証するステップと、
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
(付記17)
メモリを保護するために構成される木構造と、前記木構造に割り当てられているメモリアドレスとを入力するステップと、
前記木構造において、更新対象の平文が含まれるリーフノードからルートノードへのパスを生成し、前記パスにおける各ノードにおいて、各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されているローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス及び前記各ノードの複数の子ノードの前記ローカルカウンタを部分更新可能タグを出力可能なメッセージ認証コードに入力することで検証に用いられるタグを生成することにより、前記平文が改ざんされていないかを検証して、検証結果及び前記パスを出力するステップと、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードにおける前記ローカルカウンタの値を更新するステップと、
前記検証結果が改ざんの検知がないことを示す場合に、前記パスにおける各ノードで固有の前記メモリアドレスと各ノードにそれぞれ格納されている前記ローカルカウンタとの連結をナンスとし、前記ナンス及び前記平文、又は、前記ナンス、前記各ノードの1つ以上の子ノードの前記ローカルカウンタ、更新前の前記ナンス及び更新前の前記各ノードの1つ以上の子ノードの前記ローカルカウンタを前記部分更新可能タグを出力可能なメッセージ認証コードに入力することで更新に用いられるタグを生成し、前記パスにおける各ノードに格納されているタグの値を、前記更新に用いられるタグで更新するステップと、
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
【符号の説明】
【0212】
1 メモリ保護システム
10 メモリ構造初期化装置
20 メモリ検証装置
30 メモリ更新装置
100 平文入力部
101 メモリアドレス割り当て部
102 部分更新可能タグ生成部
103 リーフノード生成部
104 中間ノード生成部
105 ルートノード生成部
106 木構造出力部
107 メモリアドレス出力部
200 木構造入力部
201 メモリアドレス入力部
202 検証箇所入力部
203 タグ検証部
204 検証結果出力部
300 木構造入力部
301 メモリアドレス入力部
302 更新箇所入力部
303 メモリ検証部
304 カウンタ更新部
305 部分更新可能タグ更新部
306 更新結果出力部
11 メモリ処理装置
12 メモリアドレス割り当て部
13 タグ生成部
14 ノード生成部