(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-23
(45)【発行日】2022-05-31
(54)【発明の名称】暗号化装置、暗号化方法、復号化装置、及び復号化方法
(51)【国際特許分類】
G09C 1/00 20060101AFI20220524BHJP
【FI】
G09C1/00 610A
(21)【出願番号】P 2019535613
(86)(22)【出願日】2018-05-28
(86)【国際出願番号】 JP2018020342
(87)【国際公開番号】W WO2019031026
(87)【国際公開日】2019-02-14
【審査請求日】2021-05-21
(31)【優先権主張番号】P 2017156143
(32)【優先日】2017-08-10
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000002185
【氏名又は名称】ソニーグループ株式会社
(73)【特許権者】
【識別番号】504213249
【氏名又は名称】テクニカル ユニバーシティ オブ デンマーク
(74)【代理人】
【識別番号】110002147
【氏名又は名称】特許業務法人酒井国際特許事務所
(72)【発明者】
【氏名】五十部 孝典
(72)【発明者】
【氏名】ボグダノフ アンドレイ
【審査官】行田 悦資
(56)【参考文献】
【文献】米国特許出願公開第2017/0141911(US,A1)
【文献】特表2012-520589(JP,A)
【文献】特開2017-187724(JP,A)
【文献】米国特許出願公開第2016/0330019(US,A1)
【文献】BOGDANOV, A. and ISOBE, T.,White-box Cryptography Revisited: Space-Hard Ciphers,Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security,米国,ACM,2015年10月12日,Pages 1058-1069
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化する暗号化部と、
入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成する鍵生成部と、
を備える、暗号化装置。
【請求項2】
前記鍵生成部は、
入力値を順次に暗号化処理する複数のラウンド関数の少なくとも一部がテーブル化され、前記ラウンド関数の入出力値を外部から認識可能なホワイトボックスモデルにより暗号化するデータ暗号化部を備え、
複数の前記ラウンド関数のそれぞれは、入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化するテーブル化された暗号化関数を有する、請求項1に記載の暗号化装置。
【請求項3】
前記暗号化関数には、前記ラウンド関数へ入力されるビットのうちの一部が入力され、
前記暗号化関数は、前記暗号化関数へ入力可能なビットの一部を固定値とし、前記暗号化関数の出力値の一部を破棄することで、前記暗号化関数へ入力可能なビット数から前記暗号化関数へ入力されたビット数の差分に相当するビット数の出力値を出力する、請求項2に記載の暗号化装置。
【請求項4】
前記ラウンド関数は、前記ラウンド関数へ入力されるビットのうち前記暗号化関数に入力されなかったビットと、前記暗号化関数からの前記出力値のビットの排他論理和を演算する、請求項3に記載の暗号化装置。
【請求項5】
前記ラウンド関数は、前記暗号化関数へ入力されたビットの値と前記排他論理和により得られたビットの値を出力する、請求項4に記載の暗号化装置。
【請求項6】
前記ラウンド関数は、前記暗号化関数へ入力されたビットの値を前記排他論理和により得られたビットの値よりも下位ビットとして出力する、請求項5に記載の暗号化装置。
【請求項7】
前記ラウンド関数の出力と予め定められた所定値との排他論理和を演算し、得られた値を次のラウンド関数への入力又は前記データ暗号化部の出力とする、請求項2に記載の暗号化装置。
【請求項8】
1の前記ラウンド関数が複数の前記暗号化関数を有する、請求項2に記載の暗号化装置。
【請求項9】
複数の前記ラウンド関数において、後段のラウンド関数ほど前記暗号化関数に大きなビットの入力値が入力される、請求項3に記載の暗号化装置。
【請求項10】
1の前記ラウンド関数が複数の前記暗号化関数を有し、
前記ラウンド関数へ入力されるビットが分割されて複数の前記暗号化関数へ入力され、
複数の前記暗号化関数は非線形演算を行い、
前記ラウンド関数は、複数の前記暗号化関数による前記非線形演算の結果を線形変換演算して出力する、請求項2に記載の暗号化装置。
【請求項11】
複数の前記暗号化関数のそれぞれにおいて、入力されるビット数と出力されるビット数が同一である、請求項10に記載の暗号化装置。
【請求項12】
複数の前記暗号化関数のそれぞれに入力されるビット数が異なる、請求項10に記載の暗号化装置。
【請求項13】
前記暗号化関数は、前記データ暗号化部に対応する秘密鍵から生成される拡張鍵によって暗号化を行う、請求項2に記載の暗号化装置。
【請求項14】
入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにおいて暗号鍵を用いて入力値を暗号化することと、
入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記入力値を暗号化して前記暗号鍵を生成することと、
を備える、暗号化方法。
【請求項15】
入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化する暗号化部と、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成する鍵生成部と、による暗号化処理の逆演算により復号を行う、復号化装置。
【請求項16】
入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより暗号鍵を用いて入力値を暗号化することと、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記入力値を暗号化して前記暗号鍵を生成することと、を備える暗号化処理の逆演算により復号を行う、復号化方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、暗号化装置、暗号化方法、復号化装置、及び復号化方法に関する。
【背景技術】
【0002】
従来、例えば下記の非特許文献1,2には、既存のブロック暗号をホワイトボックスモデルにおいても安全であるように変換する方法が記載されている。非特許文献1,2に記載された方法は、既存のアルゴリズム(DES,AES)のホワイトボックス実装に関し、演算を大きなテーブル参照に変換し、秘密鍵をテーブルに埋め込むことで、内部演算が外部から見られても安全性を保障する技術に関する。
【0003】
非特許文献1,2に記載された方法では、秘密鍵の値はテーブルの中に含まれるため、鍵付のテーブルが生成される。そして、各テーブルの安全性を上げるために、テーブルの前後には、秘密の非線形関数が加えられる。また、暗号化アルゴリズムEの前後には、エクスターナルエンコーディング(External Encoding)として、関数INと関数OUTが加えられる。
【0004】
また、下記の非特許文献3,4には、ホワイトボックスモデルで安全な鍵生成関数を用いて、暗号処理毎に暗号鍵を変更する技術が記載されている。
【先行技術文献】
【非特許文献】
【0005】
【文献】S. Chow, P. Eisen, H. Johnson, P.C. van Oorschot “A white-box DESimplementation for DRM applications. ” DRM 2002
【文献】S. Chow, P. Eisen, H. Johnson, P.C. van Oorschot “White-BoxCryptography and an AES Implementation?” SAC 2002
【文献】A. Bogdanov and T. Isobe, “Whitebox Cryptgraphy Revisited:Space-hard Cipher”, ACM CCS 2015
【文献】P-A Fouque and P. Karpman and P. Kirchner and B. Minaud, “Efficientand Provable White-Box Primitives” ASIACRYPT2016
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、非特許文献1,2に記載された方法では、安全性を上げるために、暗号化関数Eの入出力にエクスターナルエンコーディングとして新たな関数を付加する必要があり、エクスターナルエンコーディングを無くすと安全性が大幅に低下する問題がある。また、オリジナルの暗号化関数Eとは異なる関数になる。さらに、例えエクスターナルエンコーディングを付加したとしても、Practicalな攻撃方法が提案されている。
【0007】
より具体的には、非特許文献1,2に記載された技術はAES,DESに対するホワイトボックス技術であるが、エクスターナルエンコーディングを用いた場合,ホワイトボックスモデルでの暗号化は、異なる暗号アルゴリズムになってしまう。このため、純粋な意味でAESのホワイトボックス実装とは言えず、異なる暗号アルゴリズムを本質的には実装していることになる。更に、エンコーディングされた平文を元に戻す際に、同一デバイス内の他のセキュアドメインでエンコーディングされた平文から正規の平文に戻す作業が必要である。つまり、ホワイトボックス実装が必要な環境において、セキュアに演算できる領域が必要ということであり、ホワイトボックスモデルとは矛盾しており、アプリケーションが限定される問題がある。また、エクスターナルエンコーディングを用いない場合は、一番初めと最後のラウンドにエクスターナルエンコーディングを一部用いることができず、安全性が大きく低下する問題がある。例えエクスターナルエンコーディングを付加したとしても、Practicalな攻撃方法が提案されている。
【0008】
非特許文献3に記載された方法では、ホワイトボックスモデルで安全になるように暗号を設計しているが、情報の一部が漏れた場合に、強い安全性(識別不可能性)を保証することは困難であり、暗号関数において平文の情報が漏れないことを保証できない。また、非特許文献4に記載された方法では、ホワイトボックスモデルで安全性を保証するためには、乱数が必要となる。しかし、ホワイトボックスモデルでは、攻撃者は乱数源を自由にコントロールできることを前提にしているため、安全性を保証することは困難である。
【0009】
以上のように、非特許文献1~4に記載された技術では、いずれもブラックボックスモデルに対しては安全であるが、非特許文献1,2に記載された技術では、ホワイトボックスモデルでは、暗号鍵を回復されてしまう可能性があり、この点で安全とはいえない。また、非特許文献3,4に記載された技術では、ホワイトボックスモデルで暗号鍵を回復される危険性は無いものの、非特許文献3に記載された技術では、平文の情報が漏れてしまう可能性があり、この点で安全とはいえない。また、非特許文献4に記載された技術では、平文の情報が漏れる危険性はないものの、乱数を必要としており、上述のようにホワイトボックスモデルでは攻撃者が乱数源を自由にコントロールできるため、安全性を確保することはできない。
【0010】
そこで、ホワイトボックスモデルにおいて、乱数を用いることなく強い安全性を確保することが望まれていた。
【課題を解決するための手段】
【0011】
本開示によれば、入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化する暗号化部と、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成する鍵生成部と、を備える、暗号化装置が提供される。
【0012】
また、本開示によれば、入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにおいて入力値を暗号化することと、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成することと、を備える、暗号化方法が提供される。
【0013】
また、本開示によれば、入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化する暗号化部と、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成する鍵生成部と、による暗号化処理の逆演算により復号を行う、復号化装置が提供される。
【0014】
また、本開示によれば、入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより暗号鍵を用いて入力値を暗号化することと、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記入力値を暗号化して前記暗号鍵を生成することと、を備える暗号化処理の逆演算により復号を行う、復号化方法が提供される。
【発明の効果】
【0015】
以上説明したように本開示によれば、ホワイトボックスモデルにおいて、乱数を用いることなく強い安全性を確保することが可能となる。
なお、上記の効果は必ずしも限定的なものではなく、上記の効果とともに、または上記の効果に代えて、本明細書に示されたいずれかの効果、または本明細書から把握され得る他の効果が奏されてもよい。
【図面の簡単な説明】
【0016】
【
図2】暗号化を行うブロック(暗号関数E)の内部構成を示す模式図である。
【
図5】共通鍵ブロック暗号によって構成されるブラックボックスモデルを示す模式図である。
【
図6】共通鍵ブロック暗号によって構成されるホワイトボックスモデルを示す模式図である。
【
図7】本実施形態に係る暗号化装置の構成を示す模式図である。
【
図8】鍵生成部の予測不可能性を示す模式図である。
【
図9】本実施形態に係る暗号化技術の概要を示す模式図である。
【
図10】具体例(B)、具体例(C)、具体例(D)、具体例(E)のそれぞれについいて、全体構成、F関数/S関数の種類、テーブルサイズ可変の可否、を示す模式図である。
【
図11】暗号タイプに応じた処理を示すフローチャートである。
【
図14】
図10において、n=n’=128、c=1、d=16の場合の全体構成を示す模式図である。
【
図16】
図10において、n=128、c=1、d=8の場合の全体構成を示す模式図である。
【
図17】
図10において、n=128、c=1、d=4の場合の全体構成を示す模式図である。
【
図18】
図10において、n=128、c=3、d=16の場合の全体構成を示す模式図である。
【
図19】1つのラウンド内に2つF関数がある例であって、n=128、d=4の例を示す模式図である。
【
図21】
図18に示したS関数のそれぞれの構成を示す模式図である。
【
図22】
図18において、n=128、d=8の場合を示す模式図である。
【
図25】本実施形態に係る暗号化による安全性を説明するための模式図である。
【
図26】本実施形態に係る暗号化による安全性を説明するための模式図である。
【
図27】著作権保護技術(DRM:Digital Rights Management)への適用例を示す模式図である。
【
図29】NFCのエミュレーションを利用した支払システムへの適用例を示す模式図である。
【
図31】メモリリークに対しても安全な方式を示す模式図である。
【
図32】サイドチャネル攻撃に対して安全な暗号化の例を示す模式図である。
【発明を実施するための形態】
【0017】
以下に添付図面を参照しながら、本開示の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【0018】
なお、説明は以下の順序で行うものとする。
1.共通鍵ブロック暗号技術について
2.本実施形態に係る暗号化装置の構成
3.ホワイトボックスモデルのブロック暗号について
4.具体的構成例
4.1.具体例(B)
4.2.具体例(C)
4.3.具体例(D)
4.4.具体例(E)
5.復号化のための構成例
6.既存技術との相違
6.1.既存技術1との違い
6.2.既存技術2との違い
7.本実施形態に係る暗号化による安全性について
8.本実施形態が適用されるアプリケーションの例
【0019】
1.共通鍵ブロック暗号技術について
暗号化と復号化に同じ鍵を用いる共通鍵ブロック暗号の技術が知られている。
図1は、共通鍵ブロック暗号を示す模式図であって、kビットの鍵長に対応したnビット共通鍵ブロック暗号アルゴリズムEを示している。暗号化の際には、平文P(nビット)からkビットの秘密鍵Kを用いて暗号関数Eにより暗号文C(nビット)が生成される。復号化の際には、暗号文C(nビット)からkビットの秘密鍵Kを用いて復号関数D(=E
-1)により平文P(nビット)が生成される。このような共通鍵ブロック暗号では、例えば
図1中に示すような通信路にデータが伝送される場合に、盗聴者(以下、攻撃者とも称する)に対して平文の秘匿性を実現できる。
【0020】
平文Pと暗号文Cのビット長をブロックサイズと称し、ここではnで表す。nは任意の整数値を取りうるが、通常、ブロック暗号アルゴリズムごとに予め1つに決められている。ブロック長がnのブロック暗号のことをnビットブロック暗号と称する場合がある。秘密鍵Kのビット長をkで表し、鍵のビット長kは任意の整数値を取りうる。共通鍵ブロック暗号アルゴリズムは、1つまたは複数の鍵サイズに対応することになる。例えば、あるブロック暗号アルゴリズムAはブロックサイズn=128であり、k=128、またはk=192、またはk=256の鍵サイズに対応するという構成もあり得る。
【0021】
暗号化アルゴリズムEに対応する復号アルゴリズムDは、暗号化アルゴリズムEの逆関数E-1と定義でき、入力として暗号文Cと鍵Kを受け取り、平文Pを出力する。
【0022】
図2は、暗号化を行うブロック(暗号関数E)の内部構成を示す模式図である。暗号関数Eは、鍵スケジュール部100とデータ暗号化部200とから構成される。鍵スケジュール部100は、秘密鍵Kを入力とし、ある定められたステップによりビット長を拡大してできた拡大鍵K’(ビット長k’)を出力する。データ暗号化部200は、平文Pを受け取り、鍵スケジュール部から拡大された拡大鍵K’を受け取ってデータの変換を行い、暗号文Cを出力する。データ暗号化部200は、拡大鍵K’から得られるラウンド関数を繰り返し処理することで、暗号化を行う。
【0023】
データ暗号化部200は、処理単位であるラウンド関数に分割できるものとする。ラウンド関数は入力として2つのデータを受け取り、内部で処理を施したのち、1つのデータを出力する。入力データの一方は暗号化途中のnビットデータであり、あるラウンドにおけるラウンド関数の出力が次のラウンド関数の入力として供給される。入力データの他方は鍵スケジュール部100から出力された拡大鍵K’の一部のデータであり、この鍵データのことをラウンド鍵と称する。また、ラウンド関数の総数を総ラウンド数と称する。総ラウンド数は、暗号アルゴリズムごとに予め定められている値である。ここでは、総ラウンド数をRで表す。データ暗号化部200の入力側から1ラウンド目の入力データをX
1とし、i番目のラウンド関数に入力されるデータをXi、ラウンド鍵をRKiとすると、データ暗号化部200の構成は
図2のように示される。
【0024】
ブロック暗号アルゴリズムに応じてラウンド関数はさまざまな形態を取り得る。ラウンド関数はその暗号アルゴリズムが採用する構造によって分類できる。代表的な構造として、ここではSPN構造、Feistel構造、拡張Feistel構造を例示する。
【0025】
図3は、Feistel構造を示す模式図である。また、
図4は、SPN構造を示す模式図である。
図3に示すFeistel構造の基本的な構成例では、各ラウンド関数において、nビットの入力データX
iが上位n/2ビットと下位n/2ビットに分割され、各ラインのデータのサイズはn/2ビットとなる。ここで、F関数には上位n/2ビットが入力されて、n/2ビットが出力される。この出力は下位n/2ビットにそれぞれ排他的論理和される。その後、データの左右を入れ替えたものを出力データX
i+1とする。F関数は非線形関数をもとに構成される。SPN構造とは異なり、F関数は置換である必要はない。一般的に、F関数は、ブロック暗号から生成されることはなく、計算の軽い非線形演算で生成されるが、本実施形態では、F関数をブロック暗号から生成する。
【0026】
拡張Feistel構造(一般化Feistel構造)は、Feistel構造ではデータ分割数が2であったものを3以上に分割する形に拡張したものである。分割数をdとすると、分割数dによって様々な拡張Feistel構造を定義することができる。F関数の入出力のサイズが相対的に小さくなるため、小型実装に向いている。また、各ラウンド関数において、複数のF関数を持つことができる。
【0027】
後述する
図17では、d=4であり、且つ1つのラウンド内に2つのF関数が並列に適用される場合の拡張Feistel構造の一例を示している。この例では、第1F関数と第2F関数の各々において、RK1
iとRK2
iを鍵入力とする。また、後述する
図14では、d=8であり、且つ1つのラウンド内に1つのF関数が適用される場合の拡張Feistel構造の一例を示している。この例では、F関数への入力サイズがn/8ビットであり、F関数からの出力サイズが7n/8ビットであり、出力は7つのn/8ビットのデータに分割され、残りの7つの16ビットデータに排他的論理和される。なお、n=128 bitとする。
【0028】
また、
図4に示すSPN構造の基本的な構成例では、nビットの入力データの全てに対して、ラウンド鍵との排他的論理和演算、非線形変換、線形変換処理などが適用される。非線形変換部をS層(Substitution-layer)、線形変換部をP層(Permutation-layer)と称し、それぞれは置換(全単射関数)である。各ラウンド関数において、nビットの入力データXiがd通りのデータに分割され、各ラインのデータのサイズはn/d[bit]となる。ここで、非線形変換演算をS関数と定義し、各データ毎にn/d[bit]の入出力の非線形変換演算S層(Substitution-layer)が実行される。その後、線形変換P層(Permutation-layer)としてnビットの入出力線形変換Lが実行される。なお、線形変換演算をL関数と定義する。
【0029】
ブロック暗号の安全性モデルとして、ブラックボックスモデルとホワイトボックスモデルがある。
図5は、共通鍵ブロック暗号によって構成されるブラックボックスモデルを示す模式図である。ブラックボックスモデルでは、秘密鍵を求めようとする攻撃者の能力が、ブロック暗号の入出力を認識して自由にコントロール可能であるが、攻撃者はブロック暗号の中間値は認識できない。つまり、ブラックボックスモデルは、攻撃者がブロック暗号アルゴリズムの入力、出力である平文P、暗号文Cにしかアクセスすることができない安全性モデルである。攻撃者による攻撃は、攻撃者が平文Pと暗号文Cのペアの値を知っているのみである既知平文暗号文攻撃と、これに加えて攻撃者が値自体を自由にコントロールできる選択平文暗号文攻撃に分けることができる。ブラックボックスモデルでは,暗号演算自体は安全に実行され、攻撃者が暗号の中間値を見たり、改ざんすることができないことを想定している。ハードウェアサポートなどを利用し、暗号演算の耐タンパ性が保障できている場合等が対応する。ブラックボックス用の暗号アルゴリズムの実装方法をブラックボックス実装と称する。このようなブラックボックスモデルでは、攻撃者に秘密鍵を知られないように安全に設計することが可能である。ブラックボックスモデルにおいては、ブロック暗号は、秘密鍵Kを求めることが計算量的に困難であり(鍵回復攻撃耐性)、ブロック暗号と擬似ランダム鍵付置換を識別するのが計算量的に困難である(識別攻撃耐性)ように設計される。ブラックボックスモデルで安全なブロック暗号は、例えば、AES,CLEFIA,PRESENT,Piccoloなどの暗号化技術により実現可能である。
【0030】
図6は、共通鍵ブロック暗号によって構成されるホワイトボックスモデルを示す模式図である。ホワイトボックスモデルは、ブラックボックスモデルよりも強い攻撃者を想定した安全性モデルであり、攻撃者がブロック暗号アルゴリズムの入力、出力である平文P、暗号文Cのみならず、演算の中間値にも自由にアクセスできる。ホワイトボックスモデルでは、攻撃者はブロック暗号の入力である平文P、暗号文Cを自由にコントロールでき、更に攻撃者が演算中の任意の中間値を見ることや、改ざんできることを想定している。ハードウェアのサポートがないオールソフトウェアなどの、実装上の制約により、耐タンパが保障できないケースに対応している。また、バッファオーバーフロー等の実装上の脆弱性やマルウェア等により中間値が漏れてしまう場合にも対応する。ホワイトボックス用の暗号アルゴリズムの実装方法をホワイトボックス実装と称する。ホワイトボックス実装によれば、ソフトウェアのみでブロック暗号を構成することも可能である。
【0031】
このように、ホワイトボックスモデルでは、攻撃者の能力が、ブロック暗号の入出力を認識して自由にコントロール可能であり、ブロック暗号の中間値を認識して自由にコントロール可能である。ホワイトボックスモデルにおいては、攻撃者が鍵Kを求めることは計算量的に困難であることが求められる。また、鍵Kを求める変わりにコード自体を直接用いて大きな鍵として用いる攻撃(code liftingと呼ばれる)に対しての耐性も求められる。ブロック暗号の中間値を攻撃者が認識可能なホワイトボックスモデルでは、このような攻撃に対して定量的な安全性をもつ必要がある。
【0032】
2.本実施形態に係る暗号化装置の構成
本実施形態では、上述したブラックボックスモデルにおいて安全な暗号鍵をホワイトボックスモデルで安全な暗号で守る方式に関する。ブラックボックスモデルで安全なブロック暗号Gの秘密鍵K
Bを、ブロック暗号Gへの入力を用いてホワイトボックスで安全なブロック暗号Eから生成する。
図7は、本実施形態に係る暗号化装置1000の構成を示す模式図である。
【0033】
図7に示すように、暗号化装置1000は、暗号化部1100と鍵生成部1200を有する。暗号化部1100は、ブラックボックスモデルで安全なブロック暗号Gによる暗号化を行うものであり、例えば、AES(AES-128/192/256),CLEFIA,PRESENT,Piccoloなどの暗号化技術により実現される。暗号化部1100は、ブラックボックスモデルで安全であり、鍵回復や鍵識別のための攻撃に対して安全である。暗号化部1100は、nビットの平文Pの入力を受けて、kビットの暗号鍵K
Bを用いて平文Pを暗号化し、nビットの暗号文Cを出力する。
【0034】
鍵生成部1200は、ホワイトボックスモデルで安全なブロック暗号Eによる暗号化により暗号鍵KBを生成する。鍵生成部1200は、nビットの平文Pの入力を受けて、k’ビットの暗号鍵K’により暗号鍵KBを生成する。上述のように暗号鍵KBは、暗号化部1100による平文Pの暗号化に用いられる。鍵生成部1200は、ホワイトボックスモデルで安全なブロック暗号Eを用いるため、鍵導出攻撃やテーブルのデコンポジション(decomposition;分解)に対して安全である。また、鍵生成部1200は、ホワイトボックスモデルで安全なブロック暗号Eにより暗号鍵KBを生成するため、圧縮できない(incompressible)特性を有する。なお、鍵生成部1200は、平文Pの代わりにカウント値の入力を受けて暗号鍵KBを生成するものであっても良い。
【0035】
また、鍵生成部1200は、ブラックボックスモデルの攻撃者が出力値(暗号鍵K
B)を予測できないという予測不可能性(Unpredictability)の特性を有する。
図8は、鍵生成部1200の予測不可能性を示す模式図である。予測不可能性とは、関数Fの入力が与えられたとき、出力の値をランダム推測よりも高い確率で求めることができないことをいう。例えば、
図8に示すように、関数Fに128ビットの平文Pの入力が与えられたとき、2
-128よりも高い確率で出力(暗号文C)の値を予測できないことをいう。つまり、関数Fが予測不可能性を有している場合、入力が与えられても暗号鍵が判らなければ出力を得ることはできない。
【0036】
以上のような構成によれば、ブラックボックスモデルとホワイトボックスモデルの両方おいて、安全性をブラックボックスモデルで安全な暗号(例えば、AES)に帰着可能となる。ブラックボックスモデルで安全なブロック暗号Gの暗号鍵KBは、鍵生成部1200の予測不可能性により攻撃者には漏れないため、ブロック暗号Gの安全性は保たれる。例えば、ブロック暗号GがAESであれば、暗号化装置1000はAESの安全性を有することになる。また、ホワイトボックスモデルで安全なブロック暗号Eの安全性は、後述するように、ブロック暗号EがAESで構成される場合は、AESの安全性に依存することになる。従って、ブラックボックスモデルとホワイトボックスモデルの両方おいて、安全性をブラックボックスモデルで安全な暗号に帰着可能である。また、ブラックボックスモデルで安全なAESなどの汎用的な暗号化方式を、より安全な暗号化方式にすることが可能となる。
【0037】
また、仮にコードの一部が漏れたとしても、強い安全性(識別不可能性)を保持することができる。ホワイトボックスモデル安全なブロック暗号Eが、予測不可能性を満たしている限り、ブラックボックスモデルでの識別不可能性は保持できる。なお、識別不可能性とは、ある関数fがランダムな関数と識別できないことを示す。暗号化関数や認証の安全性証明では、構成要素の関数が識別不可能性を有していることが前提となり、識別不可能性を有していない場合は安全性を保証することができない。また、識別不可能性を有していない場合は、平文の情報が洩れていないことを保証できない。
【0038】
3.ホワイトボックスモデルのブロック暗号について
以下では、上述したホワイトボックスモデルで安全なブロック暗号Eについて、詳細に説明する。特に、信頼できない実行環境において、安全に暗号復号を行う技術、秘密鍵を守る技術を説明する。信頼できない環境として、秘密鍵を安全に保管できない場合、暗号演算の中間値を攻撃者が認識できる場合が挙げられる。なお、ブラックボックスモデルで安全なブロック暗号Gについては、上述のようにAESなどの暗号化技術により実現可能である。
【0039】
図9は、本実施形態に係るブロック暗号Eの暗号化技術の概要を示す模式図であって、基本となる構成例(A)に係る暗号化装置を示している。ブロック暗号Eを複数のテーブル300から構成し、各テーブルをブラックボックスモデルで安全なブロック暗号E’(内部ブロック暗号)として構成する。これにより、安全なブロック暗号Eを構成することができる。ホワイトボックス実装では、ブロック暗号E’からなる部品の一部、または全てをテーブル化して実装する。ブロック暗号E’のアルゴリズムはユーザが自由に選択可能とする。なお、暗号化装置は、CPUなどの中央演算処理装置と、これを機能させるためのプログラムから構成することができる。この場合に、そのプログラムは、暗号化装置が備えるメモリなどの記録媒体に格納されることができる。また、ブロック暗号を構成するテーブルは、暗号化装置が備える記録媒体に格納されることができる。
【0040】
このように、本実施形態に係るブロック暗号Eの基本となる構成例(A)では、ブラックボックスモデルで安全なブロック暗号E’を構成要素(部品)として、ホワイトボックスモデルで安全なブロック暗号Eを構成する。内部ブロック暗号E’のアルゴリズムは、ユーザが自由に選択でき、入力として受け取る。ホワイトボックス実装では、内部ブロック暗号E’ベースの関数を鍵に依存させ、一部もしくは全てがテーブルで実装される。つまり、鍵スケジュール部100から出力された拡大鍵K’により内部ブロック暗号E’を生成してテーブル化する。テーブル化することにより、その都度暗号化演算が行われる場合と比較して、鍵の秘匿性を大幅に高めることできる。
【0041】
また、構成例(A)の具体例(B)として、ブロック暗号EがFeistel構造からなり、一種類の入出力サイズのF関数から構成され、F関数は内部ブロック暗号E’をもとに生成される。ここでF関数は、内部ブロック暗号E’の入力の一部を固定、出力の一部を破棄することによってE’から変換される。ホワイトボックス実装では、F関数すべてがテーブルで実装される。
【0042】
また、構成例(A)の具体例(C)として、ブロック暗号EがSPN構造からなり、一種類の入出力サイズのS関数から構成され、S関数は内部ブロック暗号E’をもとに生成される。ここでS関数は、同じサイズの内部ブロック暗号から構成される。ホワイトボックス実装では、S関数すべてがテーブルで実装される。
【0043】
また、構成例(A)の具体例(D)として、ブロック暗号Eが拡張Feistel構造からなり、複数種類の入出力サイズのF関数から構成され、F関数は内部ブロック暗号E’をもとに生成される。ここで、F関数は、内部ブロック暗号の入力の一部を固定、出力の一部を破棄することによって生成される。ホワイトボックス実装では、一部若しくは全てがテーブル実装される。
【0044】
また、構成例(A)の具体例(E)として、ブロック暗号EがSPN構造からなり、複数種類の入出力サイズのS関数から構成され、S関数は内部ブロック暗号E’をもとに生成する。ここで、S関数は、同じサイズの内部ブロック暗号から構成される。ホワイトボックス実装では、一部若しくは全てがテーブル実装される。
【0045】
図10は、具体例(B)、具体例(C)、具体例(D)、具体例(E)のそれぞれについいて、全体構成、F関数/S関数の種類、テーブルサイズ可変の可否、を示す模式図である。
【0046】
また、
図11は、暗号タイプに応じた処理を示すフローチャートである。
図11において、先ずステップS10では、内部ブロック暗号E’に鍵Kを依存させ、鍵付関数E’
Kを生成する。次のステップS12では、暗号タイプを判定し、Feistel構造の場合はステップS14へ進む。ステップS14では、F関数をE’
Kから生成する。次のステップS16では、F関数をテーブル化する。次のステップS18では、Feistel構成でテーブルを接続し、暗号関数Eを生成する。
【0047】
また、ステップS12でSPN構造の場合はステップS20へ進み、S関数をE’Kから生成する。次のステップS22では、S関数をテーブル化する。次のステップS24では、SPN構成でテーブルを接続し、暗号関数Eを生成する。ステップS18,S24の後はステップS26へ進み、テーブルベースの関数からコード生成を行う。これにより、ホワイトボックス暗号化コードが生成される。
【0048】
4.具体的構成例
以下では、具体例(B)、具体例(C)、具体例(D)、具体例(E)の構成例とその効果について詳細に説明する。ここで、内部ブロック暗号E’は、n’ビットブロック暗号であり、ブラックボックスモデルにおいて安全であるものとする。
【0049】
4.1.具体例(B)
図12は、具体例(B)を示す模式図であって、一般化Feistel構造による構成例を示している。
図12に示す例では、nビットの入力データXiがd通りのデータに分割され、各ラインのデータのサイズはn/dビットとなる。ここで、F関数はc×n/d bit入力、(d-c)×(n/d)(=n-(c×n/d))[bit]出力で、c通りのラインのデータが入力され、出力はd-c通りのn/d[bit]のデータに分割され、残りのd-c通りのラインにそれぞれ排他的論理和される。F関数は内部ブロック暗号E’をもとに構成される。ここでE’のブロックサイズn’が、n’>(d-c)×(n/d) かつ n’>c×(n/d)を満たすものとする(条件1)。
図12に示すように、ブロック暗号E’へ入力されたビットの値は、排他論理和により得られたビットの値よりも下位ビットとして出力される。
【0050】
図13は、F関数の構成を示す模式図である。n’ビットの内部ブロック暗号E’から、c×n/d[bit]入力、(d-c)×(n/d)[bit]出力のF関数の構成方法は以下の通りである。先ず、
図13に示すように、内部ブロック暗号E’の入力n’[bit]のうち、任意のn’-(c×n/d)[bit]を定数値(例えばall 0)に固定し、入力サイズをc×n/dにする。次に、出力の任意の(c×n/d)[bit]を破棄(disregard)することにより、出力サイズをn’-(c×n/d)にする。このような、内部ブロック暗号E’に対する一部の入力ビット固定、出力の一部破棄により、条件1を満たす任意の内部ブロック暗号E’からF関数を構成する。テーブル化により、F関数はn’ビットの入出力に対応するテーブルから構成される。例えば、8ビットの入出力の場合、入力値(0~255)に対して出力値を対応付けしたテーブルが生成される。このテーブルに対し、一部の入力ビット固定、出力の一部破棄を行うことで、8ビット入力、120ビット出力などの入出力ビット数の調整を行うことができる。ここで、各ラウンドにおいてF関数を変更するため、n’-(c×n/d)ビットの出力にラウンド固有の定数を排他論理和(XOR)する。例えば、ラウンド固有の定数は、例えばラウンド数とし、ラウンド数をXORする。ラウンド数4の場合は4をXORすることになる。但し、この排他論理和はテーブル参照後に行われるため、この演算自体はテーブルには含めない。これにより、一通りのF関数テーブルで、ラウンド毎に異なるF関数を表現することができる。従って、各ラウンド関数のF関数自体は共通に構成することも可能であり、テーブルを格納するメモリ領域を大幅に削減することができる。
【0051】
図14~
図18は、具体的な構成例を示す模式図である。
図14はn=n’=128、c=1、d=16の場合の全体構成を示しており、
図15は、
図14の例のF関数の構成を示している。また、
図16は、n=128、c=1、d=8の場合、
図17はn=128、c=1、d=4の場合、
図18はn=128、c=3、d=16の場合、をそれぞれ示している。
【0052】
図19は、1つのラウンド内に2つF関数がある例であって、n=128、d=4の例を示す模式図である。以上の全ての例において、F関数は、ホワイトボックス実装ではテーブル実装される。
図14、
図16、
図17、
図18の例において、テーブルサイズ(F関数のサイズ)は、それぞれ、約3.84[byte]、918[Kbyte]、51.5[Gbyte]、218[Mbyte]程度である。
【0053】
4.2.具体例(C)
図20は、具体例(C)を示す模式図であって、SPN構造による構成例を示している。
図20に示す例では、nビットの入力データXiがd通りのデータに分割され、各ラインのデータのサイズはn/d[bit]である。ここで、各データ毎にn/d[bit]の入出力のS関数による演算(非線形変換演算S層(Substitution-layer))が実行される。その後、L関数による演算(線形変換P層(Permutation-layer))としてn-bit入出力線形変換が実行される。ここで、S関数とL関数(入出力線形変換L)は全単射関数であり、L関数はラウンド定数演算を含む。S関数は、内部ブロック暗号E’をもとに構成されるが、S関数は全単射関数である必要があり、
図13のように内部ブロック暗号E’の入力ビット固定、出力の一部の破棄による変換では構成することができない。このため、n/d[bit]のブロック暗号を用いる必要がある。よって、内部ブロック暗号E’のブロックサイズn’の条件は、n’=n/dとなる(条件2)。
【0054】
図21は、
図20に示したS関数のそれぞれの構成を示す模式図である。
図21に示すように、S関数を構成する内部ブロック暗号E’の入出力のサイズは、共にn/d[bit]である。従って、例えば、8ビットの入出力の場合、入力値(0~255)に対して出力値を対応付けしたテーブルが生成され、このテーブルによりS関数の演算が行われる。線形変換演算を行うL関数は、例えば正方行列から構成される。S関数の入出力が8ビットの場合、S関数からの8ビットの出力がL関数に入力され、8ビットの値に対して8×8のマトリクスの正方行列を乗算することで、8ビットの値がL関数から出力される。このように、L関数は、S関数からの出力値を拡散する機能を有する。
【0055】
図22は、具体的な構成例を示す模式図であって、n=128、d=8の場合を示している。S関数は、ホワイトボックス実装ではテーブル実装される。
図22のテーブルサイズは約256[byte]程度である。S関数の場合も、
図13に示したF関数の場合と同様に、各S関数を変更するため、S関数の出力にラウンド固有の定数をXORすることができる。これにより、S関数自体を共通にすることができるため、テーブルを格納するメモリ領域を大幅に削減することができる。
【0056】
4.3.具体例(D)
図23は、具体例(D)を示す模式図であって、変形Feistel構造による構成例を示している。
図23に示す例では、nビットの入力データがd通りのデータに分割され、各ラインのデータのサイズはn/dであり、サイズの異なる4種類のF関数から構成されている。初めのラウンドではn/d[bit]入力、(n-n/d)[bit]出力のF関数、2番目のラウンドでは2n/d[bit]入力、(n-2n/d)[bit]出力のF関数、3番目のラウンドでは3n/d[bit]入力、(n-3n/d)[bit]出力のF関数、4番目のラウンドでは4n/d[bit]入力、(n-4n/d)[bit]出力のF関数が用いられる。この4ラウンドを基本として、任意ラウンド繰り返す。
図13で示した方法と同様に、任意のサイズのF関数は、内部ブロック暗号E’から生成され、出力にラウンド定数がXORされる。
【0057】
ホワイトボックス実装では、ユーザの求めるコード(テーブルサイズ)に応じて、これらのうちの一部若しくは全てがテーブルで実装される。n=128、d=16の場合は、それぞれのラウンドのF関数のテーブルサイズは、初めのラウンドでは約3.84[byte]、2番目のラウンドでは918[Kbyte]、3番目のラウンドでは218[Mbyte]、4番目のラウンドでは51.5[Gbyte]となる。ユーザの要求に応じて、どのF関数をテーブル実装するか選択することにより、全体のコードサイズを調整可能である。例えば、4番目のラウンド関数はテーブル化せずに関数演算をその都度行うようにすれば、全体のコードサイズを抑えることができる。
【0058】
4.4.具体例(E)
図24は、具体例(E)を示す模式図であって、変形SPN構造による構成例を示している。
図24に示す例では、nビットの入力データがd通りのデータに分割され、各ラインのデータのサイズはn/dであり、サイズの異なる3種類のS関数から構成されている。各ラウンドのS層は、n/d[bit]の入出力、2n/d[bit]の入出力、4n/d[bit]の入出力、のS関数が用いられる。ホワイトボックス実装では、ユーザの求めるコード(テーブルサイズ)に応じて、これらの一部若しくは全てがテーブルで実装される。例えば。n=128、d=8で、8[bit]、16[bit]、32[bit]のデータが実装されている場合を考える。それぞれのテーブルサイズは、256[byte]、132[Kbyte]、17.2[Gbyte]となる。ユーザの要求に応じて、どのS関数をテーブル実装するか選択することにより、全体のコードサイズを調整可能である。
【0059】
本実施形態に係るブロック暗号Eによれば、ホワイトボックスモデルにおいて、key extractionの安全性は内部ブロック暗号E’のブラックボックスモデルでの鍵回復問題の安全性に帰着する。これは、ホワイトボックス実装において、内部ブロック暗号E’がテーブル実装されていることによるもので、攻撃者はホワイトモデルにおいても、テーブルの入出力にしかアクセスできない。これは、内部ブロック暗号E’のブラックボックスモデルとマッチする。内部状態(内部ブロック暗号E’)に信頼性の高い暗号(例えばAES)を用ることで、ホワイトボックスモデルについても、内部ブロック暗号E’のブラックボックスモデルの鍵回復と同等の安全性を有することができる。
【0060】
また、攻撃者は、鍵を知らない限りテーブルサイズを小さくすることはできない(Space-hardness)。内部ブロック暗号E’の鍵の情報を知らない限り、攻撃者はE’をテーブル演算以外で計算することはできない。このため、与えられたテーブルより小さいものに変換することはできない。これは、攻撃者がcode lifting攻撃する際に、大容量のデータが必要なことを意味している。データサイズに比例してコード抜き取りに必要な時間は増加するため、code lifting作業を非常に時間のかかる作業にしている。更に、もしコード全体自体をとったとしても、そのサイズを圧縮することができず、コード配布の際に大容量のデータを送付する必要があり、配布のリスクを低減することが可能である。
【0061】
また、external encodingについても、External Encodingなしで安全性を保障可能である。
【0062】
更に、実装要求に応じた様々なサイズのテーブルを構成することが可能である。具体例(B)、具体例(C)によれば、分割数dの値を変更することにより、任意のテーブルサイズのアルゴリズムを構成することができる。また、具体例(D)、具体例(E)によれば、分割数dの値、又は使用するF関数、S関数のサイズを適切に複数選択することで、同じアルゴリズムで複数のテーブルサイズの実装が可能となる。
【0063】
また、ユーザは、内部ブロック暗号E’を自由に選択できる。内部ブロック暗号E’は、入出力サイズの条件(条件1、条件2)を満たす限り、自由に選択することが可能である。ブラックボックスで用いる場合、テーブル実装は不要で内部演算を直接演算できる。この場合、内部ブロック暗号E’を適切に選択することで、さまざまな実装ニーズに応えることが可能である。例えば、AESを内部ブロック暗号E’として使用し、AES-NIを用いることにより、ソフトウェアで非常に高速に実装でき、且つキャッシュタイミング攻撃に対しても安全に実装できる。また、ソフトウェアで軽量な暗号Piccolo,Prideを用いることにより、RAMサイズ等の実装制約が大きい環境でも実装可能である。
【0064】
5.復号化のための構成例
上述したように、暗号化アルゴリズムEに対応する復号アルゴリズムDは、暗号化アルゴリズムEの逆関数E
-1と定義でき、入力として暗号文Cと鍵Kを受け取り、平文Pを出力する。復号アルゴリズムDにおいても、ブラックボックス実装によりテーブルを構成することで、ブラックボックスモデルと同等の安全性を確保することが可能である。
図7に示した暗号化装置1000においても、鍵生成部1200の暗号化アルゴリズムEに対応する復号アルゴリズムDは、暗号化アルゴリズムEの逆関数E
-1と定義できる。また、暗号化部1100の暗号化アルゴリズムGに対応する復号アルゴリズムも暗号化アルゴリズムGの逆関数G
-1と定義できる。
【0065】
6.既存技術との相違
以下では、本実施形態に係るブロック暗号Eに係る技術と、前述した非特許文献1,2に記載された方法(既存技術1とする)、非特許文献3に記載された方法(既存技術2とする)、非特許文献4に記載された方法(既存技術3とする)との相違について説明する。
【0066】
6.1.既存技術1との違い
既存技術1は、既存のAES,DES等のアルゴリズムの実装方法であり、ホワイトボックス用暗号技術ではなく、ホワイトボックスモデルに対して安全ではないことが既に示されている。従って、ホワイトボックスモデルにおける安全性を大幅に向上した本実施形態に係るブロック暗号Eの技術とは相違する。
【0067】
本実施形態に係るブロック暗号Eでは、ブラックボックスモデルで安全なブロック暗号でも安全性を満たすことを示し、内部ブロック暗号E’は、入出力サイズの条件(条件1、条件2)を満たす限り、自由に選択することが可能である。
【0068】
これにより、ブラックボックス実装において、実装環境や求められる安全性に応じて、内部ブロック暗号E’を自由に選択可能となる。例えば、AESを内部ブロック暗号E’として使い、AES-NIを用いることにより、ソフトウェアで非常に高速な実装を行うことができ、且つキャッシュタイミング攻撃に対しても安全に実装できる。また、ソフトウェアで軽量な暗号Piccolo,Prideを用いることにより、RAMサイズ等の実装制約が大きい環境でも実装可能である。また、ASASA構造はホワイトボックスモデルにおいては安全ではないが、本実施形態に係るブロック暗号Eでは、ホワイトボックスモデルに対しても安全性を保障することが可能である。
6.2.既存技術2,3との違い
既存技術2では、ホワイトボックスモデルで安全になるように暗号を設計しているが、情報の一部が漏れた場合に、強い安全性(識別不可能性)を保証することは困難であり、暗号関数において平文の情報が漏れないことを保証できない。既存技術3は、ブラックボックスモデルで安全な暗号化方式の暗号鍵をホワイトボックスモデルで守ることを想定しているが、ホワイトボックスモデルで安全性を保証するためには、乱数が必要となる。しかし、ホワイトボックスモデルでは、攻撃者は乱数源を自由にコントロールできることを前提にしているため、安全性を保証することは困難である。
一方、本実施形態に係るブロック暗号Eによれば、乱数を用いることなく、暗号鍵の回復と識別不可能性に対する強い安全性を確保することができる。従って、攻撃者に対して暗号鍵の情報や平文の情報が漏れてしまうことを確実に回避できる。
【0069】
7.本実施形態に係るブロック暗号Eによる効果について
図25は、本実施形態に係るブロック暗号Eの暗号化による安全性を説明するための模式図であって、
図13に示したFeistel構造によるF関数をAESにより構成した例を示している。上述したように、ホワイトボックスモデルでは、攻撃者はテーブルの入出力にアクセス可能である。内部ブロック暗号E’のブラックボックスモデルと同じテーブルから鍵を求める問題(ホワイトボックスモデル)は、AESの鍵回復攻撃(ブラックボックスモデル)と等しい。従って、本実施形態に係るブロック暗号Eの暗号化によれば、AESの鍵回復攻撃(ブラックボックスモデル)と同等の安全性を確保することが可能である。ホワイトボックスモデルにおいて、安全性は内部ブロック暗号E’のブラックボックスモデルでの鍵回復問題の安全性に帰着する。攻撃者は、鍵を知らない限りテーブルサイズを小さくすることはできない(Space-hardness)。
【0070】
図26は、本実施形態に係るブロック暗号Eの暗号化による安全性を説明するための模式図であって、攻撃者が攻撃する際に必要となるデータ量を示している。攻撃のためには、非常に多くのデータを入手しなければ秘密鍵Kを取得することはできない。具体的には、128 bit鍵と比較した場合、10
4.4~10
10.5倍のデータ量が必要である。また、攻撃者がデータを入手できたとしても、圧縮することができないので、不正に配布する際に大容量のデータであるため抑止力になる。
【0071】
また、本実施形態ブロック暗号Eの暗号化によれば、実装要求に応じた様々なサイズのテーブルを構成することが可能である。具体例(B),(C)の構成では、分割数dの数を変更することにより、任意のテーブルサイズのアルゴリズムを構成することができる。また、具体例(D),(E)の構成では、分割数dの数や使われるF関数、S関数のサイズを適切に複数選択することで、同じアルゴリズムで複数のテーブルサイズの実装が可能である。更に、テーブルの内部演算をユーザが自由に選択可能であり、ブラックボックス実装において最適なものを選択することが可能である。
【0072】
8.本実施形態が適用されるアプリケーションの例
本実施形態の暗号化装置1000に係る技術は、
図1に示したような通信路におけるデータの秘匿性を実現する他、様々なアプリケーションに適用することができる。以下では、幾つかのアプリケーションの例を説明する。
【0073】
図27は、著作権保護技術(DRM:Digital Rights Management)への適用例を示す模式図である。
図27に示すように、クラウド上のコンテンツサーバ400で暗号化を行い、コンテンツ(暗号文C)がコンテンツサーバ400からユーザデバイス410へ配信される。ユーザデバイス410は、パーソナルコンピュータ(PC)、スマートフォンなどの電子機器である。コンテンツ(暗号文C)はユーザデバイス410において復号される。
【0074】
図28は、
図27をより詳細に示す模式図である。コンテンツサーバ400は、ホワイトボックス暗号化関数により映画、音楽などのコンテンツを暗号化する。また、コンテンツサーバ400では、ライセンス生成器402によりライセンスを生成し、暗号化されたコンテンツと共にユーザデバイス410へ送る。ユーザデバイス410は、送られたライセンスをライセンス検証器412により検証し、ライセンスの検証に成功した場合は、ホワイトボックス復号関数により、暗号化されたコンテンツを復号する。
【0075】
図27及び
図28に示したような著作権保護技術では、ユーザデバイス410でコンテンツを復号する必要がある。この場合、仮に鍵Kが露呈した場合、コンテンツの不正配布に繋がる。つまり、暗号化が安全でない環境では、ユーザデバイス410が信頼できない環境となる。本実施形態によれば、悪意のあるユーザがコンテンツの秘密鍵Kを取得することを、ホワイトボックス暗号化技術により確実に防止することが可能である。
【0076】
図29は、NFCのエミュレーションを利用した支払システムへの適用例を示す模式図である。
図29に示すように、このシステムでは、NFCの読取装置420にユーザデバイス430を近づけてエミュレーションを行う。ユーザデバイス430は、ホストCPU432、NFCコントローラ434、セキュアエレメント436を有する。
【0077】
図30は、
図29をより詳細に示す模式図である。クラウド上のサーバ440は、ユーザの証明用の情報(Credential information)と、支払情報(Payment information)を有する。ユーザデバイス430は、モバイル機器などの電子機器であり、サーバ440と暗号化通信を行い、証明用の情報をやり取りする。また、ユーザデバイス430は、読取装置420と暗号化通信を行い、証明用の情報をやり取りする。暗号化通信では、本実施形態に係る暗号化装置1000により暗号化が行われる。このため、ユーザデバイス430は、暗号関数、復号関数を備えている。暗号化装置1000により暗号化を行うことで、支払いに関する証明のデータを守ることができる。これにより、
図29の右側の図に示すように、ユーザデバイス430がセキュアエレメント436を備えていなくてもNFCのエミュレーションが可能となる。
【0078】
図31は、メモリリークに対しても安全な方式を示す模式図である。このシステムでは、ソフトウェアの脆弱性(buffer overflow, heart bleed)やマルウェアにより、メモリが攻撃者にリークした場合も、安全性を保障する。マルウェアやメモリリークの脆弱性のあるデバイス445において、ホワイトボックス暗号化方式が有するSpace hardnessの性質により、数キロバイト、数ギガバイト以上のデータが漏れない限り安全性は低下しない。
図31の例において、コードサイズをTとすると、T/4以上のデータが漏れない限り安全性は低下しない。なお、Space hardnessとは、一定以上のサイズのメモリが漏れない限り暗号の安全性を保障できる技術である。この方法は、内部ネットワークから外部ネットワークからの通信量を制限している場合に特に有効である。
【0079】
図32は、サイドチャネル攻撃に対して安全な暗号化の例を示す模式図である。ホワイトボックス暗号化方式は、通常はソフトウェア用であるが、Reconfigurable Hardware (FPGA)で実装することにより、ハードウェアでサイドチャネルに安全な暗号方式として使うことができる。例えば
図32に示すICカード450など、ハードウェアでサイドチャネル攻撃を受ける可能性のあるデバイスにおいて、特に有効である。
【0080】
以上、添付図面を参照しながら本開示の好適な実施形態について詳細に説明したが、本開示の技術的範囲はかかる例に限定されない。本開示の技術分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本開示の技術的範囲に属するものと了解される。
【0081】
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
【0082】
なお、以下のような構成も本開示の技術的範囲に属する。
(1) 入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化する暗号化部と、
入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成する鍵生成部と、
を備える、暗号化装置。
(2) 前記鍵生成部は、
入力値を順次に暗号化処理する複数のラウンド関数の少なくとも一部がテーブル化され、前記ラウンド関数の入出力値を外部から認識可能なホワイトボックスモデルにより暗号化するデータ暗号化部を備え、
複数の前記ラウンド関数のそれぞれは、入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化するテーブル化された暗号化関数を有する、前記(1)に記載の暗号化装置。
(3) 前記暗号化関数には、前記ラウンド関数へ入力されるビットのうちの一部が入力され、
前記暗号化関数は、前記暗号化関数へ入力可能なビットの一部を固定値とし、前記暗号化関数の出力値の一部を破棄することで、前記暗号化関数へ入力可能なビット数から前記暗号化関数へ入力されたビット数の差分に相当するビット数の出力値を出力する、前記(2)に記載の暗号化装置。
(4) 前記ラウンド関数は、前記ラウンド関数へ入力されるビットのうち前記暗号化関数に入力されなかったビットと、前記暗号化関数からの前記出力値のビットの排他論理和を演算する、前記(3)に記載の暗号化装置。
(5) 前記ラウンド関数は、前記暗号化関数へ入力されたビットの値と前記排他論理和により得られたビットの値を出力する、前記(4)に記載の暗号化装置。
(6) 前記ラウンド関数は、前記暗号化関数へ入力されたビットの値を前記排他論理和により得られたビットの値よりも下位ビットとして出力する、前記(5)に記載の暗号化装置。
(7) 前記ラウンド関数の出力と予め定められた所定値との排他論理和を演算し、得られた値を次のラウンド関数への入力又は前記データ暗号化部の出力とする、前記(2)~(6)のいずれかに記載の暗号化装置。
(8) 1の前記ラウンド関数が複数の前記暗号化関数を有する、前記(2)に記載の暗号化装置。
(9) 複数の前記ラウンド関数において、後段のラウンド関数ほど前記暗号化関数に大きなビットの入力値が入力される、前記(3)~(8)のいずれかに記載の暗号化装置。
(10) 1の前記ラウンド関数が複数の前記暗号化関数を有し、
前記ラウンド関数へ入力されるビットが分割されて複数の前記暗号化関数へ入力され、
複数の前記暗号化関数は非線形演算を行い、
前記ラウンド関数は、複数の前記暗号化関数による前記非線形演算の結果を線形変換演算して出力する、前記(2)に記載の暗号化装置。
(11) 複数の前記暗号化関数のそれぞれにおいて、入力されるビット数と出力されるビット数が同一である、前記(10)に記載の暗号化装置。
(12) 複数の前記暗号化関数のそれぞれに入力されるビット数が異なる、前記(10)又は(11)に記載の暗号化装置。
(13) 前記暗号化関数は、前記データ暗号化部に対応する秘密鍵から生成される拡張鍵によって暗号化を行う、前記(2)~(12)のいずれかに記載の暗号化装置。
(14) 入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにおいて暗号鍵を用いて入力値を暗号化することと、
入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記入力値を暗号化して前記暗号鍵を生成することと、
を備える、暗号化方法。
(15) 入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより入力値を暗号化する暗号化部と、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記暗号化部への入力値を暗号化して前記暗号化部の暗号鍵を生成する鍵生成部と、による暗号化処理の逆演算により復号を行う、復号化装置。
(16) 入出力値を外部から認識可能であり中間値は外部から認識できないブラックボックスモデルにより暗号鍵を用いて入力値を暗号化することと、入出力値及び中間値を外部から認識可能なホワイトボックスモデルにより前記入力値を暗号化して前記暗号鍵を生成することと、を備える暗号化処理の逆演算により復号を行う、復号化方法。
【符号の説明】
【0083】
100 データ暗号化部
300 テーブル
1100 暗号化部
1200 鍵生成部