XTS モードの実装性能調査

株式会社レピダム
2020 年 2 月

本評価結果の概要（エグゼクティブサマリー）
本調査では、ブロック暗号利用モードのひとつである XTS の実装性能評価を行い、その結果を報告する。現在、XTS は CRYPTREC 暗号リストへの追加候補として検討されているブロック暗号利用モードであり、2019 年に安全性の観点で峯松氏により評価 [1]が行われた。その結果、XTS は現実的に安全であると結論づけられ、CRYPTREC においてもCRYPTREC 暗号リストに追加するための要件を満たしていると判断された。本報告書は、現実的に安全であると結論づけられた XTS に対して、電子政府システム等で利用する用途において十分な実装性能を有するか判断するための判断根拠として調査を実施した。
本調査は大別して「XTS の市販品などでの実装採用状況」および「XTS の実装性能」の 2
つの観点から調査を実施した。
調査結果として、「XTS の市販品などでの実装採用状況」については、製品や OSS において XTS が広く採用されていることがわかった。代表的な製品としては、Microsoft 社のWindows においてディスク暗号化で用いられる BitLocker や Apple 社の macOS においてディスク暗号化で用いられる FileVault 2 などのストレージ暗号化製品が挙げられる。また、OSS においても、世界中で広く利用されている暗号ライブラリである OpenSSL や組み込み機器で利用される WolfCrypt や mbed TLS などでサポートされていることがわかった。
また、もう 1 つの調査観点である「XTS の実装性能」について、検索エンジンによる XTSの実装性能に関する公開情報による評価結果や、Windows 環境、macOS 環境およびLinux 環境における OpenSSL および WolfCrypt を用いた実環境での実装性能測定を実施した。検索エンジンによる XTS の実装性能に関する公開情報に関する調査結果としては、2010 年など比較的古い実装性能に関する情報が公開されている。最新の実装性能としてはベンチマーク製品において拡張現実や機械学習といった高負荷な処理の代表である最先端テクノロジーと同様に、ベンチマークにおける性能測定項目として AES-XTS が含まれたスコアリングが行われていた。また、Windows 環境、macOS 環境および Linux 環境における OpenSSL および WolfCrypt を用いた実環境での実装性能を計測した結果として、
CRYPTREC 暗号リストで採用されているブロック暗号利用モードと実装性能を比較した結果、実装性能において大きな遜色はないものと判断した。

1

目次
1

はじめに

6

2

XTS の技術的解説

8

2.1

歴史的背景

8

2.2

XTS の仕様

9

2.2.1

準備

9

2.2.2

暗号化の手順

10

2.2.3

復号の手順

13

2.3

実装的側面

16

2.3.1

XTSVS の検証方法

16

2.3.1.1

暗号化/復号アルゴリズムの検証方法

16

2.3.1.2

サポートするデータユニットサイズの試験方法

17

2.3.2

データユニットサイズの制限に対する対策例

17

3

XTS の市販製品などでの実装採用状況

19

3.1

CMVP 認証製品の抽出方法

20

3.2

CMVP 認証製品の抽出結果

21

3.3

XTS の市販製品などでの実装採用状況の考察

21

3.3.1

CMVP 取得ベンダーからみた XTS の採用状況の考察

21

3.3.2

CMVP 取得製品の種類からみた採用状況の考察

23

3.4

XTS の市販製品などでの実装採用状況のまとめ

23

4

XTS の公開されている評価結果に関する調査

24

4.1

客観性のある実装性能評価に関する調査

24

4.2

脆弱性や実装バグに関する調査

26

4.3

XTS の公開されている評価結果に関するまとめ

28

5
5.1

他の暗号利用モードとの実装性能比較調査
実装性能評価に向けた準備

29
31

2

5.1.1

実装性能評価を行った環境

31

5.1.2

暗号ライブラリのビルド方法

31

5.1.2.1

OpenSSL31

5.1.2.2

WolfCrypt

32

実装性能評価に向けた測定

5.2

33

5.2.1.1

OpenSSL における測定の観点

33

5.2.1.2

OpenSSL におけるベンチマーク実行方法

33

5.2.1.3

WolfCrypt における測定の観点

34

5.2.1.4

WolfCrypt におけるベンチマーク実行方法

34

5.3

実装性能評価における評価対象項目と実装評価実施項目

34

5.4

実装性能結果36

5.4.1.1

OpenSSL における実装性能結果

365.4.1.2

WolfCrypt における実装性能結果

44

5.5
6

実装性能評価における考察

51

ディスク暗号化製品を使った実装性能比較調査

52

6.1

実装性能評価で選定した製品

52

6.2

実装性能評価に向けた準備

53

6.2.1

実装性能評価を行った環境

53

6.2.2

暗号ライブラリのビルド方法

54

6.3

実装性能評価に向けた測定

54

6.3.1

VeraCrypt における測定の観点

54

6.3.2

VeraCrypt におけるベンチマーク実行方法

54

6.4

VeraCrypt を用いた実装性能測定

56

6.4.1

ベンチマークによる性能測定

56

6.4.2

ストレージに対するベンチマークソフトによる性能測定

59

6.5

ディスク暗号化製品を使った実装性能比較調査に関する考察

61

3

7

まとめ

62

参考文献

63

Appendix

64

OpenSSL に関する実装性能調査結果

64

WolfCrypt に関する実装性能調査結果

76

4

・
・
・
・
・
・
・
・
・
・
・
・
・

Arm または mbed は、Arm Ltd.の登録商標です
Windows® の正式名称は Microsoft® Windows® Operating System です。
Microsoft 、 Windows 、 Windows 10 、 BitLocker 、 Visual Studio は 、 米 国 Microsoft
Corporation.の米国およびその他の国における登録商標です。
Linux は、Linus Torvalds 氏の日本およびその他の国における登録商標または商標です。
IEEE は、The Institute of Electrical and Electronics Engineers, Inc.の登録商標または商標です。
Apple、FileVault、Mac、macOS は、米国およびその他の国における Apple Inc. の登録商標です。
OpenSSL は，米国およびその他の国における米国 OpenSSL Software Foundation の登録商標です。
RSA および BSAFE は、米国 EMC コーポレーションの米国およびその他の国における商標または登録商標です。
TCG は、Trusted Computing Group の米国およびその他の国における商標または登録商標です。
Intel、Intel Optane はアメリカ合衆国およびその他の国におけるインテルコーポレーションまたはその子会社の商標または登録商標です。
GitHub は、GitHub Inc.の商標または登録商標です。
Ubuntu は、Canonical Ltd.の商標または登録商標です。
TrueCrypt と TrueCrypt のロゴは TrueCrypt Foundation の商標です。
5

1

はじめに

本報告書は、ブロック暗号利用モードのひとつである XTS の実装性能評価を行い、その結果を報告する。XTS は現在 CRYPTREC 暗号リストへの追加候補として検討されている
暗号利用モードであり、2019 年に安全性の観点で峯松氏により評価が行われた [1]。評価
では、XTS は現実的に安全であると結論づけられ、CRYPTREC においても CRYPTREC 暗号リストに追加するための要件を満たしていると判断された。本報告書は、安全性評価に続いて、XTS を実装性能の観点から評価を行い、CRYPTREC 暗号リストに追加される要件を満たしているかどうかの判断根拠を提供することを目的とする。
XTS は、2004 年に Rogaway によって提案された XEX モード [2]をベースとした方式である。XTS という名前は、NIST では XEX Tweakable Block Cipher with Ciphertext Sealing の略とされ、IEEE では XEX encryption mode with Tweak and ciphertext Stealing の略であるとされている。XTS は、2007 年に IEEE Storage in Security Work Group (SISWG)により、ハードディスクなどのストレージデバイスで利用することを目的として標準仕様が制定され、IEEE 1619-2007 として発行されている [3]。使用するブロック暗号を AES として仕様が定められており、この場合の利用モードは XTS-AES と呼ばれている。IEEE での標準化に続いて、NIST は IEEE 1619-2007 の標準方式に対し、暗号化の対象となる平文の長さ（データユニットと呼ばれる）の制限を要求事項として加えることで、NIST 推奨方式として承認した。標準化文書として NIST SP800-38E [4]が発行されている。その後、2018 年には、IEEESISWG によって IEEE 1619-2007 が改訂され、IEEE 1619-2018 として発行された [5]。IEEE
1619-2018 では、IEEE 1619-2007 では推奨項目となっていたデータユニットサイズの制限
が、NIST SP800-38E と同様に守るべき要求事項として示されている。
XTS は標準仕様だけでなく、製品や OSS での採用実績もある。代表的な製品としては、
Microsoft 社の Windows の BitLocker や Apple 社の macOS の FileVault 2 などのストレー
ジ暗号化製品が挙げられる。OSS においても、例えば、広く利用されている暗号ライブラリ
である OpenSSL や、WolfCrypt、mbed TLS などでサポートされている。
以上の標準化動向や実装採用状況に鑑み、CRYPTREC では電子政府システムなどでの利用が見込まれると判断される暗号技術として XTS の評価が進められている。2019 年には、外部評価者として峯松氏により XTS の安全性評価が実施され、XTS-AES は現実的に安全であるという結論となっている [1]。この結果を受けて、CRYPTREC 暗号技術検討会では、利用条件を満たす範囲において、暗号利用モード（秘匿モード）として
CRYPTREC 暗号リストへ追加するための安全性要件を満たしていると判断されている[6]。本報告書は、安全性評価に続き、XTS の実装性能の観点で評価を行い、その結果を報告する。
本報告書の構成について述べる。まず 2 章では、XTS の歴史的背景を説明し、IEEE
1619-2018 を参考に仕様を説明する。また、実装された XTS の客観的な評価のための試験仕様である XTSVS について説明する。3 章では、XTS の普及状況として、製品での採用実績状況を調査した結果を示す。4 章では、学術論文や製品提供を行う企業が公開するホワイトペーパーを調査することで、XTS の客観的な実装性能評価結果を示す。5 章で
6

は、実装性能調査対象の暗号利用モードである XTS と CRYPTREC 暗号リストで採択されている暗号利用モードとの実装性能評価を実施することで、現在採択されている暗号利用モードと実装性能の比較結果を示す。6 章では、XTS 本来の利用方法に注目し、ディスク暗号化としての実装性能調査を実施する。最後に 7 章でまとめる。

7

2

XTS の技術的解説

本章では、XTS の技術的解説として、まず、XTS の歴史的背景について述べた後、2018 年に発行された IEEE 1619 [5]を参考に XTS の仕様について説明する。加えて、実装された XTS のアルゴリズム的な正しさや、安全性を確認するための仕組みの一つとして、NIST から提供されている XTSVS（The XTS-AES Validation system） [7]と呼ばれる検証システムについて説明する。
2.1

歴史的背景

本節では、XTS の歴史的背景として、IEEE や NIST での標準化動向や普及状況を示す。また国内の活動として、XTS に関連した CRYPTREC の動向を示す。
XTS はブロック暗号を利用した暗号利用モードである。方式としては、2004 年にRogaway によって提案された XEX モード [2]をベースとしており、鍵の扱いや平文がブロッ
クの長さの倍数でない場合の処理（Ciphertext Stealing と呼ばれる）を加えたものとなっている。
XTS は、2007 年に IEEE Storage in Security Work Group (SISWG)により、ハードディスクなどのストレージデバイスで利用することを目的として標準仕様が設計された。標準化文書
IEEE 1619-2007 として制定されている [3]。使用するブロック暗号を AES として仕様が定められており、この場合の利用モードは XTS-AES と呼ばれている。IEEE での標準化に続
き、NIST は IEEE 1619-2007 の標準方式に対し、暗号化の対象となる平文の長さ（データ
ユニットと呼ばれる）の制限を要求事項として加えることで、NIST 推奨方式として承認した。この方式に対し、標準化文書として NIST SP800-38E [4]が 2010 年 1 月に発行されている。また、同年 3 月には、実装された XTS が NIST SP800-38E に準拠しているかどうかを第三者機関で検証できるように、XTSVS [7]と呼ばれる試験仕様が NIST から提供されている。その後、2018 年には、IEEE SISWG により、IEEE 1619-2007 を改訂した標準仕様
IEEE 1619-2018 が発行された [5]。改訂された点として、データユニットサイズの制限の取り扱い方の変更が挙げられる。IEEE 1619-2007 では、データユニットサイズの制限について示されてはいたものの、推奨扱いであった。これに対し、IEEE 1619-2018 は、NIST
SP800-38E と同様に、守るべき要求事項としてデータユニットサイズの制限を示している*。
また、XTS は実際の利用も広がっている。例えば、広く利用されている暗号ライブラリである OpenSSL では 2012 年に搭載され、その他、WolfCrypt や mbed TLS、BSAFE など、いくつかの暗号ライブラリでサポートされている。製品では、例えば、Windows 10 のBitLocker や macOS の FileVault 2 など、多くのストレージ暗号化製品で採用されている。
*

IEEE 1619-2007 では、データユニットサイズの制限について、「The number of 128-bit
blocks should not exceed 220」と記述されていたが、IEEE 1619-2018 では、「The numberof 128-b blocks within the data unit shall not exceed 220.」と要求の程度が強まっていると見受けられる。
8

以上の標準化動向や実装採用実績が増加している現状に鑑み、CRYPTREC では電子政府システムなどでの利用が見込まれると判断される暗号技術として XTS の評価が進められている。2019 年には、外部評価者として峯松氏により XTS の安全性評価が実施され、その結果が報告書として発行された [1]。この報告書では、2011 年に発行された
CRYPTREC レポート [8]での XTS の安全性評価結果を含め、IEEE および NIST の標準化文書および関連文献が精査されたうえで XTS の安全性が評価されており、XTS-AES は
現実的に安全であるという結論となっている。この結果を受けて、CRYPTREC 暗号技術検討会では、利用条件を満たす範囲において、XTS は暗号利用モード（秘匿モード）として
CRYPTREC 暗号リストへ追加するための安全性要件を満たしていると判断されている[6]。なお、利用条件は以下の 3 つである。
（条件 1)

利用用途は IEEE および NIST SP-800-38E の規格に沿ったストレージやディスクの暗号化に限る。
XTS 内のブロック暗号には、CRYPTREC 暗号リスト掲載の 128 ビットブロ
ック暗号を使う。
鍵を変えずに処理するデータ量は、220 ブロックまでとする。

（条件 2)（条件 3)

2.2

XTS の仕様

本節では、2020 年 1 月現在の最新仕様である IEEE 1619-2018 [5]を参考に、XTS の仕様として暗号化および復号の手順を示す。IEEE はブロック暗号として AES を採用し、ブロックサイズを 128 ビットとしているため、本節で対象とする XTS は、XTS-AES とする。なお、ブロック暗号の種類やブロックサイズを限定しない一般的な XTS の詳細な仕様については、2019 年に発行された峯松氏による CRYPTREC 報告書を参照のこと [1]。
2.2.1

準備

XTS-AES の仕様を説明する準備として、説明で使用する記号とその意味を表 1 に示す。
表 1 XTS-AES の仕様の説明で用いる記号とその意味

項番
1
2
3
4
5

記号
⊕
⊗
α
←
||

6

|A|

意味
排他的論理和既約多項式を x128+x7+x2+x+1 とする GF(2128)の乗算
事前に定義された GF(2128)の生成元
変数への代入データの連結（例. K1=0012、K2=1010102 とした場合、K1||K2=0011010102 を得る）
データ A の長さ
9

2.2.2

暗号化の手順XTS-AES は、ブロック暗号として AES を利用する暗号利用モードである。暗号化対象の平文 M に対し、AES の鍵を二つと、Tweak（調整値）と呼ばれる値を用いて暗号化を行う構成となっている。XTS-AES の暗号化関数 XTS-AES-Enc を以下のように定義する。
C ← XTS-AES-Enc(K, M, T)
ここで、C を XTS-AES 暗号化で得る暗号文、M を平文、T を Tweak、K をブロック暗号用の鍵とし、鍵 K は二つの鍵 K1 と K2 から K=K1||K2 で与えられるとする。なお、使用する鍵について、IEEE では 128 ビットの鍵を二つ、あるいは、256 ビットの鍵を二つ利用することが推奨されている。よって、全体の鍵 K の長さとしては、128 ビットの鍵と 256 ビットの鍵の場合それぞれに対して、256 ビットと 512 ビットとなる。Tweak としては、例えばハードディ
スクなどのストレージデバイスの場合、セクタ番号が利用される。平文に対しては、IEEE
1619-2018 [5]および NIST SP800-38E [4]において長さに対する制限が示されている。具体的に、平文 M は最低 1 ブロック（128 ビット）であり、220 ブロックを超えないことが要求事項として示されている。よって、平文の長さ(ビット)の制限は以下のように表記できる。
128 ≦ |M| ≦ 227 ( = 220・128)
XTS-AES の暗号化の計算は、平文 M の長さがブロック長で割り切れる、すなわち、|M|がブロック長の倍数である場合とそうでない場合に、計算手順が異なる。|M|がブロック長の倍数である場合、平文 M をブロックごとに分割し、1 ブロック用の XTS-AES 暗号化の計算を最終ブロックまで繰り返し実行していく。一方、|M|がブロック長の倍数でない場合には、Ciphertext Stealing (CTS)と呼ばれる処理が導入される。
以下では、まず、1 ブロック用の XTS-AES 暗号化の計算内容を示した後、XTS-AESEnc の計算内容を示す。
1 ブロック用の XTS-AES 暗号化関数 XTS-AES-blockEnc は、鍵 K、暗号化対象の平文ブロック Mb、Tweak の T および、何ブロック目の処理を行っているかを管理する変数 i を入力とし、出力を 1 ブロック分の暗号文 Cb とする関数として以下のように記述する。
Cb←XTS-AES-blockEnc(K, Mb, T, i)
XTS-AES-blockEnc 関数のアルゴリズム Algorithm 1 に、XTS-AES-blockEnc のアルゴリ
ズムをブロック図で表現したものを図 1 に示す。

10

1.
2.
3.
4.
5.

TE ← AES-enc(K2 , T) †tmp1 ← TE ⊗ αi
tmp2 ← Mb ⊕ tmp1
tmp3 ← AES-enc(K1 , tmp2)
Cb ← tmp3 ⊕ tmp1

Algorithm 1 XTS-AES-blockEnc のアルゴリズム

図 1 XTS-AES-blockEnc のブロック図

なお、αi はガロア体 GF(2128)におけるべき乗演算を表し、i 個のαに対し、ガロア体
GF(2128)における乗算⊗を実行して得られる。AES-enc は AES の暗号化関数であり、例えば手順 1 の AES-enc(K2, T)は平文 T を鍵 K2 で AES 暗号化することを意味する。
次に、手順 2 で利用する GF(2128)の生成元αを利用した演算について説明する。
IEEE 1619 で利用される演算⊗は、次式で与えられる既約多項式で定義されるガロア体
GF(2128)における乗算を意味する。
x128 + x7 + x2 + x + 1
生成元αを利用した乗算⊗の処理は、シフト演算と排他的論理和の処理で構成され、任意の元 A とαの乗算 B=A⊗αは、例えば Algorithm 2 のように計算される。なお、msb1(A)をA の最上位ビットを与える関数、ビット単位の左シフト演算を「<<」、「0」が l 個連続することを表す記号として「0l」と表記する。

†

具体的な計算方法は割愛するが、TE の値を 2 ブロック目以降でも使いまわすことで、2 ブ
ロック目以降の Tweak に対する AES 暗号化の処理を不要にすることが可能である。
11

1.
2.
3.
4.
5.

if msb1(A) = 0
B = A << 1else
B = ( A << 1 ) ⊕ (012010000111)2
end ifAlgorithm 2 GF(2128)におけるαとの演算⊗のアルゴリズム

次に、1 ブロック用の XTS-AES-blockEnc 関数を用いて、XTS-AES の暗号化関数
XTS-AES-Enc の計算内容について説明する。
IEEE 1619 では、平文 M を次式のように(m+1)ブロックからなるデータとして扱うため、本報告書においてもそれに従う。
M = M0 || M1 || …|| Mm-1 || Mm
ここで、m は|M| < 128・m を満たす最大の整数とする。このとき、m 個のブロック M0, M1,…, Mm-1 は 128 ビットのブロックとなり、Mm は 127 ビット以下のブロックとなる。なお、|M|が128 の倍数である場合、Mm は 0 となる。
XTS-AES-Enc のアルゴリズムを Algorithm 3 に示す。なお、入力を鍵 K=K1||K2、平文
M、Tweak T とし、出力を暗号文 C とする。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

for q ← 0 to (m-2)
Cq ← XTS-AES-blockEnc(K, Mq, T, q)
end forb ← bit-size of Mm
if b = 0 thenCm-1 ← XTS-AES-blockEnc(K, Mm-1, T, m-1)
Cm ← 0Else
tmp1 ← XTS-AES-blockEnc(K, Mm-1, T, m-1)
Cm ← first b bits of tmp1
tmp2 ← last (128 - b) bits of tmp1
tmp3 ← Mm || tmp2
Cm-1 ← XTS-AES-blockEnc(K, tmp3, T, m)
endif
C ← C0||… ||Cm-1||Cm
Algorithm 3 XTS-AES-Enc のアルゴリズム

Algorithm 3 のうち、手順 9～13 の処理が CTS と呼ばれる計算に相当する。CTSの計算をブロック図で表現したものを図 2 に示す。

12

図 2 XTS-AES-Enc における Ciphertext Stealing のブロック図

2.2.3

復号の手順

ここでは、XTS-AES の復号手順を説明する。
XTS-AES の復号では、XTS-AES の暗号化と同様に、復号対象の暗号文をブロックに分割し、1 ブロック用の復号処理を繰り返し実行する構成となっている。まず、1 ブロック分の暗号文に対する XTS-AES の復号手順を示す。
1 ブロック用の XTS-AES 復号関数 XTS-AES-blockDec は、入力を鍵 K、復号対象の暗号文ブロック Cb、Tweak の T および、何ブロック目の処理を行っているかを管理する変数 iを入力とし、出力を 1 ブロック分の平文 Mb とする関数として以下のように定義する。
Mb←XTS-AES-blockDec(K, Cb, T, i)
XTS-AES-blockDec 関数のアルゴリズムを Algorithm 4 に、XTS-AES-blockDec のアル
ゴリズムをブロック図で表現したものを図 3 に示す。
1.
2.
3.
4.
5.

TE ← AES-enc(K2 , T)
tmp1 ← TE ⊗ αi
tmp2 ← Cb ⊕ tmp1
tmp3 ← AES-dec(K1 , tmp2)
Mb ← tmp3 ⊕ tmp1

Algorithm 4 XTS-AES-blockDec のアルゴリズム

13

図 3 XTS-AES-blockDec のブロック図

次に、1 ブロック用の XTS-AES-blockDec 関数を用いて、XTS-AES の復号関数 XTSAES-Dec の計算内容を説明する。
暗号化の場合と同様に、IEEE 1619 では暗号文 C を次式のように(m+1)ブロックからなるデータとして扱うため、本報告書においてもその表記に従う。
C = C0 || C1 || …|| Cm-1 || Cm
ここで、m は|C| < 128・m を満たす最大の整数とする。このとき、m 個のブロック C0, C1,…, Cm-1 は 128 ビットのブロックとなり、Cm は 127 ビット以下のブロックとなる。なお、|C|が128 の倍数である場合、Cm は 0 となる。
XTS-AES-Dec のアルゴリズムを Algorithm 5 に示す。なお、鍵 K=K1||K2, 暗号文 C,
Tweak T を入力とし、出力を平文 M とする。

14

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

for q ← 0 to (m-2)
Mq ← XTS-AES-blockDec( K, Cq, T, q )end forb ← bit-size of Cm
if b = 0 thenMm-1 ← XTS-AES-blockDec( K, Cm-1, T, m-1 )Mm ← 0else
tmp1 ← XTS-AES-blockDec( K, Cm-1, T, m )Mm ← first b bits of tmp1
tmp2 ← last (128 - b) bits of tmp1
tmp3 ← Cm || tmp2
Mm-1 ← XTS-AES-blockEnc( K, tmp3, T, m-1 )endif
M ← M0||… ||Mm-1||Mm
Algorithm 5 XTS-AES-Dec のアルゴリズム

暗号化の場合と同様に、暗号文の長さ(ビット)がブロックサイズで割り切れない場合にCTS と呼ばれる処理が実行される。CTS の処理は Algorithm 5 のうち手順 9～13 が対応する。図 4 に、XTS-AES の復号における CTS の計算をブロック図で示す。

図 4 XTS-AES-Dec における Ciphertext Stealing のブロック図

15

2.3

実装的側面

実装された XTS-AES が NIST SP800-38E [4]に準拠しているかどうかを第三者の検証機関によって組織的に試験するための仕組みとして、米国 NIST から XTSVS(The XTSAES Validation System）と呼ばれる試験仕様が提供されている [7]。本節では、XTSVS で示されている試験方法を説明する。また、NIST SP800-38E で要求事項とされているデータ
ユニットサイズの制限に対し、OSS として提供されている暗号ライブラリでの対策状況を調査した結果を示し、対策の実装例を示す。
2.3.1

XTSVS の検証方法

XTSVS では、試験対象（Implementation Under Test, IUT）を実装したベンダーと第三者の検証機関の間で実施する試験手順、その手順の中でやり取りされるファイルのフォーマットが示されている。XTSVS に従って検証を行うことで、NIST SP800-38E で要求される以下の要件が満たされているかどうかを確認できる。
・・IUT の暗号化/復号アルゴリズムの正しさ
IUT がサポートするデータユニットサイズの制限

以下では、これらの検証方法を説明する。
2.3.1.1

暗号化/復号アルゴリズムの検証方法

暗号化/復号アルゴリズムの正しさは、第三者の検証機関が生成するテストベクタを使用した試験を実施することで検証される。テストベクタとは、入力値と出力値の正しい組のことである。XTS の場合、例えば、鍵、平文、Tweak を入力とし、暗号文を出力とした組である。
XTSVS では、ベンダーが IUT の試験に必要なパラメータの情報（鍵長、平文サイズ、
Tweak のフォーマットなど）を第三者の検証機関に提出する。第三者の検証機関は提供されたパラメータを基に、リファレンスとなる XTS の実装を使ってテストベクタを生成する。テ
ストベクタの数は、暗号化/復号機能それぞれにおいて、各平文/暗号文サイズに対して100 個である。ベンダーはテストベクタの生成に利用した入力値を第三者の検証機関から入手し、IUT で得た出力値を検証機関に提出する。第三者の検証機関はテストベクタを用いて、提出された IUT の出力値が正しい値であるかどうかを確認することでアルゴリズム
が適切に実装されていることを検証可能である。なお、NIST からテストベクタのサンプルが公開されているため ‡、ベンダーは評価対象のモジュールにおける XTS-AES のアルゴリ
ズムとしての正しさを検証可能である。
‡

NIST CAVP Testing: Block Cipher Modes XTS-AES Test Vectors(https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-ValidationProgram/documents/aes/XTSTestVectors.zip
16

2.3.1.2

サポートするデータユニットサイズの試験方法

NIST SP800-38E では、XTS の利用上の注意点として、「入力されるデータユニットが 220
ブロック以下であること」 §という要求事項が示されている。ここで、データユニットとは、XTSの暗号化関数に平文として入力されるデータのことである。XTSVS では、ベンダーは IUT
がこの要求事項を満たす証拠を提出する必要があり、テストベクタによる試験は実施されない。なお、証拠となる提出物の詳細や試験方法については、2020 年 1 月現在の最新版である 2013 年 9 月 5 日更新版の XTSVS では示されていない。
2.3.2

データユニットサイズの制限に対する対策例

XTSVS では、データユニットサイズに関連する要求事項が示されているが、その要求事項を満たすための具体的な実装方法は示されていない。そこで、本調査では、OSS として公開されている暗号ライブラリの中で、XTS が実装されているものを選定し、データユニッ
ト長の制限に対してどのような対策が実施されているかを確認した。調査した OSS に対する対策状況を表 2 に示す。
表 2 データユニットサイズに関する調査対象暗号ライブラリ

項 暗号ライブラリ
番 名
1 BoringSSL
2
3
4
5
6
7

バージョン

fips20190808
GnuTLS
3_6_11
LibreSSL
v3.0.1
mbed TLS
2.16.4OpenSSL1.1.1dOpenSSL(FIPS) fips_2.0.16
WolfCryptv4.2.0stable

URL
https://boringssl.googlesource.com/boringssl/

対策
未

https://www.gnutls.org/download.html
https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/
https://tls.mbed.org/download-archivehttps://www.openssl.org/source/
https://www.openssl.org/source/
https://www.wolfssl.jp/download/

未
未
済
未
済
未

調査の結果、OpenSSL(FIPS)と mbed TLS では、データユニットサイズに関する対策が導入されていることを確認できた。実際の対策例として、OpenSSL(FIPS)と mbed TLS での対策の実装方法を示す。図 5 は、FIPS 認証版の OpenSSL (openssl-fips-2.0.16)に実装されている XTS のソースコード（e_aes.c）の一部を抜粋したものである。1236 行目に注目す
ると、XTS の暗号化関数に入力される平文の長さを表す引数 len（単位はバイト）に対し、既定の長さよりも大きいかどうかのチェックを行っている。具体的には、XTS で利用する
AES のブロックサイズは 16 バイトであるため、引数 len が（220×16）よりも大きい場合に引数エラーとする実装となっていることが確認できる。
次に mbed TLS の場合を示す。図 6 は、mbed TLS(mbedtls-2.16.4)に実装されている
XTS のソースコード（aes.c）の一部を抜粋したものである。1198 行目に注目すると、mbed§

原文では「The length of the data unit for any instance of an implementation of XTSAES shall not exceed 220 AES blocks. 」と記述されている。
17

TLS も OpenSSL(FIPS)と同様に、XTS の暗号化関数に渡された平文の長さを表す引数
length に対して、大きさのチェックをしていることが確認できる。

図 5 データユニットサイズの制限に対する対策例（FIPS 版の OpenSSL）

18

図 6 データユニットサイズの制限に対する対策例（mbed TLS）

3

XTS の市販製品などでの実装採用状況

XTS は、現在までにストレージ暗号化ソフトの製品での採用実績があり、例えばMicrosoft Windows 搭載の BitLocker や macOS 搭載の FileVault 2 などの製品での採用実績がある。
本章では、XTS の実装採用状況として、XTS を採用している製品を販売しているベンダ
ー数や製品の種類について調査した結果を示す。本調査では、セキュリティ製品の第三者認証の主流である CMVP(Cryptographic Module Validation Program)認証を取得している製品の中で、認証アルゴリズムとして XTS を含む製品を対象とする。
CMVP 認証製品を対象とする理由を以下に述べる。本報告書は XTS を CRYPTREC 暗号リストに採択するか否かを判断するための材料の提供を目的としている。今後、XTS がCRYPTREC 暗号リストに採択された場合に、日本でのセキュリティ第三者認証制度である
JCMVP（Japan Cryptographic Module Validation Program）の試験対象に加わる。JCMVP
は CMVP に基づく試験を実施していることから、本調査の対象として XTS の試験を先行して実施している CMVP 認証製品を採用した。

19

3.1

CMVP 認証製品の抽出方法

本節では、認証アルゴリズムとして XTS を含む CMVP 認証製品の抽出方法を示す。
CMVP は、米国およびカナダが運営する暗号モジュール試験および認証制度であり、NIST FIPS 140-2 (Federal Information Processing Standard 140-2)を採用している。CMVP
認証を取得した製品の一覧を検索可能な Web ページを NIST が公開しており、認証番号だけでなく、ベンダー名やモジュール名、取得年などをキーとして検索可能なインタフェー
スとなっている **。
本調査で抽出したい製品は XTS を認証アルゴリズムに含む CMVP 認証製品である。
検索ページでは検索する対象として認証アルゴリズムの選択が可能であるが、AES に関しては、「AES」と「CCM」の 2 種類しか選択できない。XTS が対象となる「AES」で抽出した場
合、2020 年 1 月 15 日現在、約 1200 件の製品が CMVP 認証を取得している。これらの中には XTS を認証アルゴリズムとして含まない製品が多くあるため、対象を絞り込む必要がある。
本調査では、XTS を認証アルゴリズムに含む CMVP 認証製品を取得するために、
CMVP 認証の過程で実施する必要のある CAVP（Cryptographic Algorithm Validation
Program）に注目した。
CAVP は、製品に搭載された暗号モジュールのアルゴリズムが正しく実装されていることを試験するものであり、CMVP と同様に、FIPS 140-2 に基づく。2 章で解説した通り、XTSの CAVP 試験は XTSVS に従い実施される。CAVP に対しても、認証を取得した製品の一
覧を検索可能なページが NIST から公開されており、ベンダー名や製品名などをキーとして検索可能なインタフェースとなっている ††。CAVP の検索ページでは、検索の際に指定の認証暗号アルゴリズムによって絞り込むことが可能であり、検索ページの「Supports
Algorithm(s)」に「AES-XTS」を選択することで認証アルゴリズムに XTS を含む CAVP 認証
製品を抽出可能である。
CAVP 認証は CMVP 試験の過程で取得するため、XTS を含む CAVP 認証製品がCMVP 認証を取得しているかどうかを確認する必要がある。一方で、CMVP の検索ページ
では、特定の CAVP 認証製品に対して CMVP 認証製品となったかどうかを検索可能な項目が提供されていない。そこで、本調査では、CMVP と CAVP の検索項目として共通のベンダー名を使った抽出を実施した。具体的には、CAVP 認証を取得したベンダーに対し、
AES を認証アルゴリズムに含む製品の CMVP 取得状況を調査した。さらに、検索結果として出力される CMVP 製品に対し、その製品が FIPS 140-2 のセキュリティ要件をどのように満たしているかを説明するセキュリティポリシーの中で、XTS が認証アルゴリズムとして記載されているかどうかを確認した。
XTS を認証アルゴリズムに含む CMVP 取得製品の抽出方法を図 7 に示す。
**

NIST Cryptographic Module Validation Program 検索 Web ページ
https://csrc.nist.gov/projects/cryptographic-module-validation-program/validatedmodules/search††

NIST Cryptographic Algorithm Validation Program 検索ページ
https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/validation20

1: CAVP 検索ページに対し、XTS-AES の CAVP 製品を取得するため、「Supports Algorithm(s)に「AES-XTS」を入力し、検索する
2: CMVP 検索ページに対し、1 で得たベンダー名を「Vendor:」に入力し、「Algorithm:」に「AES」を選択し、検索する
3: 2 で得た結果に対し、各 CMVP 取得製品のセキュリティポリシーの内容を確認
し、認証アルゴリズムとして XTS が記載されているかどうかを確認する
図 7 XTS を認証アルゴリズムに含む CMVP 取得製品の抽出方法

3.2

CMVP 認証製品の抽出結果

本節では、3.1 節で示した XTS の CMVP 認証製品の抽出方法に基づき抽出した結果を示す。
表 3 に、2020 年 1 月現在までに XTS を認証アルゴリズムとして含む CMVP 認証を取得したベンダー数と取得数を示す。
表 3 XTS を認証アルゴリズムに含む CMVP 認証の取得数

項番
1
2
3

モジュールタイプ
SoftwareHardwareFirmware

ベンダー数
63
34
3
‡‡
90

合計

CMVP 取得数
182
111
3
296

XTS を含む CMVP 認証は、2020 年 1 月現在までに 90 社のベンダーが 296 件のCMVP 認証を取得していることがわかった。XTS はストレージデバイス向けの暗号利用モードであるが、表 3 より、ストレージ製品で取得されると思われる Hardware タイプよりもSoftware タイプの方が多く取得されている結果となった。
3.3

XTS の市販製品などでの実装採用状況の考察

本節では、XTS の CMVP 認証を取得しているベンダーや製品の種類を整理すること
で、XTS の実装採用状況を考察する。
3.3.1

CMVP 取得ベンダーからみた XTS の採用状況の考察

本項では、XTS の CMVP 認証を多く取得しているベンダーがどのような製品で CMVP
認証を取得しているかを確認することで、XTS の採用状況を考察する。表 2 に示したベンダー数のうち、CMVP 認証を 10 件以上取得しているベンダーを表 4 に示す。

‡‡

ベンダー数の合計は、Software タイプと Hardware タイプの両方で CMVP 認証を取得するベンダーもあるため、その場合は 1 ベンダーとして計算している。

21

表 4 CMVP 認証を 10 件以上取得しているベンダーとその件数

項番
1
2
3
4
5

ベンダー名
Microsoft Corporation
Samsung Electronics Co., Ltd.
Apple Inc.
Western Digital Company(HGST の CMVP 取得数を含む)
RSA

CMVP 取得数
30
20
18
17
16

XTS の CMVP 認証を最も取得しているベンダーは Microsoft であり、CMVP 取得数は30 件である。これらの CMVP 取得製品を調べた結果、ブートローダーなどの Windows OS
向けのモジュールに加え、BitLocker 関連のモジュールに対し CMVP 認証が取得されている。CMVP 認証の取得方法として、BitLocker 製品単体で CMVP を取得しておらず、BitLocker を構成するモジュールや BitLocker を使用するモジュール単位で CMVP が取得されていることが分かった。
2 番目に多く CMVP 認証を取得しているベンダーは Samsung Electronics であり、20 件であった。調査の結果、Samsung Electronics の XTS の CMVP 認証取得製品の多くは、自己暗号化ドライブ（Self Encrypting Drive, SED）と呼ばれるストレージであり、データの書き込み時にデータを自動的に暗号化する機能を内蔵している。順位通りではないが、SED に関連すると、4 番目の Western Digital が取得している XTS の CMVP 製品は全て SED 製品である。SED については、コンピュータの安全性を高める国際業界標準規格を策定している TCG（Trusted Computing Group）で規格化されている。その規格の中では、データの暗号化に XTS-AES や AES-CBC を利用することとされているため、CMVP 認証取得製品
以外でも TCG 準拠の SED 製品で XTS が普及していると推測される。
3 番目に多く CMVP 認証を取得しているベンダーは Apple であり、18 件であった。調査の結果、これら製品は macOS や iOS 向けの暗号モジュールであることがわかった。Appleからは、macOS 向けのストレージ暗号化機能として FileVault 2 が提供されているため、これら CMVP 製品が FileVault で使用されているかどうかを調査した。セキュリティポリシー
を調査した限りでは、暗号モジュールの適用先として FileVault と明記されているものは見つからなかったものの、XTS の利用上の注意として、ハードウェアストレージアプリケーショ
ンでの利用に制限されていることがわかった。
最後に、5 番目に多く CMVP 認証を取得しているベンダーは RSA 社であり、16 件であった。これらの製品は RSA 社から提供されている暗号ライブラリ BSAFE を構成するモジュールであった。BSAFE は汎用的な暗号ライブラリであるが、最新の CMVP 取得製品では利用先がハードウェアストレージアプリケーションに限定されており、ストレージ暗号化での利用を想定したものであると推定できる。
また、CMVP 取得件数 10 件に迫るベンダーとして、国内では、日立製作所が XTS のCMVP 取得件数 8 件であり、ストレージ仮想化製品で取得している。

22

3.3.2

CMVP 取得製品の種類からみた採用状況の考察

本項では、XTS の CMVP 認証を取得している製品がどのような製品種別であるかを確認することで、XTS の採用状況を考察する。XTS を認証アルゴリズムに含む CMVP 認証
製品において、製品種別に対する CMVP 件数と取得ベンダー数を表 5 に示す。
表 5 XTS を認証アルゴリズムに含む CMVP 認証製品の製品種別とその件数

項番

製品種別

1
2
3

暗号ライブラリストレージ暗号化ソフトウェア
ストレージ（HDD、SSD、SED、USB
メモリなど）
その他

4

CMVP 取得件数
190
17
79

CMVP
取得ベンダー数
69
1
19

10

8

表 5 より、CMVP 認証取得製品 296 件のうち、約 64%の 190 件が項番 1 の暗号ライブラ
リであることがわかる。この暗号ライブラリの CMVP 取得ベンダー数は 69 社であり、全 90社に対して約 76%であった。これらの CMVP のセキュリティポリシーを調査した結果、XTSに対して利用用途をストレージ暗号化に制限しているものや、データユニットサイズに対する注意を明記しているものがある一方で、そのような記載がないものもあった。注意点が記載されていないものについては、単に XTS をブロック暗号の利用モードのひとつとして扱っており、汎用的な暗号ライブラリの機能のバリエーションをそろえる意味で搭載されていると推定される。そのような暗号ライブラリにおいては、製品にデプロイした際に XTS を誤用するおそれがあると考えられる。項番 2 のストレージ暗号化ソフトウェア関連の CMVP 認
証取得件数は 19 件であり、Microsoft の BitLocker 関連の製品である。今回抽出した
CMVP 取得製品の中では、モジュール名に製品名が明記されているものは BitLocker のみであった。項番 3 のストレージ製品は、3.3.1 項で述べた Samsung や Western Digital 以
外にも 17 社あり、SED や HDD、USB の暗号化向けに CMVP 認証を取得していることがわかった。国内では、東芝が SED 関連で XTS の CMVP 認証を取得している。最後に、項番
1～3 のカテゴリに該当しなかった CMVP 取得製品として、無線 LAN アクセスポイントな
ど、ストレージ暗号化用途として該当しないと思われる製品で採用されていることがわかった。
3.4

XTS の市販製品などでの実装採用状況のまとめ

XTS の市販製品などでの実装採用状況についてまとめる。XTS が採用されている代表的な製品としては Microsoft 社の BitLocker や Apple 社の FileVault 2 などが挙げられる
が、調査の結果、ストレージ暗号化製品としては SED や HDD、USB などのストレージ製品で採用されており、CMVP 認証が取得されていることが分かった。また、CMVP 認証製品の中には、XTS を搭載した暗号ライブラリも含まれている。これらの暗号ライブラリには、ス
トレージ暗号化の用途で XTS を搭載しているものもあることから、製品として CMVP 認証が取得されていないものであっても、XTS が採用されている可能性があると考えられる。
23

4

XTS の公開されている評価結果に関する調査IEEE 1619 [5]や NIST SP800-38E [4]などの仕様において、XTS はストレージ暗号化として利用することが記述されており、ストレージのデータ保護の観点からも重要な技術であると考えられる。そのような状況を踏まえて、本章では今後の利用を考慮した際に、本調査対象である XTS に対して、客観的な実装性能評価結果として学術論文や製品提供を行う企業が公開するホワイトペーパーに関する調査を行う。また、今までの経験より、新しい暗号アルゴリズムを実装するケースにおいて実装バグや脆弱性を作り込んでしまうケースというのは多いと考えられる。XTS はデータ保護のために利用されており、脆弱性や実装バグがあると影響が比較的大きなことが予想される。この状況を踏まえて今まで公開されている製品などでの脆弱性の有無を確認することで XTS を実装した製品が安定してきているかどうかを確認する。
4.1

客観性のある実装性能評価に関する調査

客観性のある実装性能評価に関する調査として、学術論文や AES-XTS を搭載した製品に関するベンチマークの情報の有無、どのような組織が情報を公開しているのかを調査する。その調査方法としては、検索エンジンを用いて、表 6 に示す検索ワードの組合せを用いて、ベースとなるキーワードとの組合せによって調査を実施した。
表 6 客観性のある実装性能評価に関する調査のためのキーワード

キーワード

選定理由

項番
1

XTS

調査対象そのものであるため（ベースとなるキーワード）

2

Performance

実装性能に関係するキーワードであるため

3

Implement

実装に関するキーワードであるため

4

Hardwareハードウェアに関する情報であれば多く存在していると期待したため

上記の調査によって、発見された情報を（表 7）に整理する。なお、Blog などの情報については、情報に関する信憑性を客観性に判断することが困難であると考え、本調査では抽出する項目から除外している。

24

表 7 客観性のある実装性能評価に関する調査結果

項番 タイトル等
1
High Performance
Storage
Encryption onIntel®
Architecture
Processors

概要Intel 社による AES-NI を用いた AESXTS（鍵長：128 ビット）について、Intel®
Core™i5 650 processor および HｙperThreading 技術を併用することで、巨大なバッファサイズに対して集約レートで最大 18GB/s を実現することを示している。
なお、情報が 2010 年 8 月と最新環境ではないことに注意が必要である。

公開 URLhttps://pdfs.semanticscholar.org/d98d/35c0446e1e1f14d7
9545316afa647972d
42a.pdf

2

Intel® AES-NI
Performance
Enhancements:
HyTrust
DataControl CaseStudy

ケーススタディとして、HyTrust 社が提供する DataControl による暗号化および鍵管理ソリューションを提供している。このホワイトペーパーでは、彼らの提供しているサービスにおける AESXTS に関する性能について情報を共有している。
なお、情報が 2014 年 9 月と最新環境ではないことに注意が必要である。

https://software.int
el.com/enus/articles/intelaes-niperformanceenhancementshytrustdatacontrol-casestudy

3

Improving dmcrypt performancefor XTS-AES
mode throughextended requests:
first results

省電力向け Atmel Board においてAES-ECB の暗号エンジンが搭載されている。Linux でフルディスク暗号化に使用される dm-crypt モジュールを用いて、大きなブロックサイズを検討するときに緩和できる制限があることが示されている。研究成果として、ほぼ 2 倍の性能向上が可能であることが示されている。

https://hal.inria.fr/
hal01399967/file/greh
ack16_dmcrypt_perf
ormance_for_aes_xt
s.pdf

4

Geekbench
BrowserPrimate Labs Inc.が提供するマルチプラ https://browser.ge
ットフォーム対応の総合ベンチマークツ ekbench.com/
ールである。最新版の｢Geekbench 5｣では、以前のバージョンより正確に CPU
パフォーマンスを測定するため、暗号化、機械学習、拡張現実のような応用を配慮した測定項目になっている。

25

XTS はディスク暗号化で利用されていることから、利用者が実装性能に関して興味を持
つ技術であると考えられ、OS ベンダーやストレージベンダーなどから多くの実装性能に関する情報が公開されていることを期待したが、表 6 で示したキーワードによる検索結果においては、表 7 の項番 1 〜 2 のように 2010 年など比較的古い環境での実装性能に関する情報が公開されていた。その当時のコンピュータリソースなどを考慮すると XTS による暗号化に関するオーバーヘッドを意識する必要があったのではないかと推測する。この推測を裏付けるものとして、項番 4 にある Geekbench Browser は、2019 年 9 月に最新版のバージョン 5 が公開されており、CPU のベンチマーク項目として AES-XTS に関する実装
性能が収集されている。このことから、AES-XTS は現在においても CPU の性能を判断するために重要な性能測定項目であることが予想され、コンピュータリソースを多く消費する処理として注目されていると考えられる。また、学術論文においては複数 OS や異なる
CPU 環境での実装性能を測定すると言った新規性が低いことが予想されることから、そのような XTS に関する実装性能に関する論文は発見できず、IoT のようなリソースや実装されている機能に制約条件の多い環境下での高速化に関する論文が存在していた。
4.2

脆弱性や実装バグに関する調査

客観的な実装物に対する脆弱性等の調査として、米国 NIST が公開している National
Vulnerability Database（https://nvd.nist.gov/vuln/search）において、表 8 に示すキーワー
ドを用いて検索を実施した。また、Search Vulnerability Database での検索条件を、表 9 に示す。
表 8 脆弱性や実装バグに関する調査のためのキーワード

項番
1

キーワード
AES

選定理由
調査対象そのものであるため（ベースとなるキーワード）

2

XTS

調査対象そのものであるため（ベースとなるキーワード）

3

storage

対象を示すキーワードであるため

4

crypt

暗号に関するキーワードであるため

26

表 9 Search Vulnerability Database における検索条件

項番
1

設定項目
Search Type

設定値
Basic

2

Results Type

Overview

3

Search TypeAll Time

4

Contains
HyperLinks

チェックなし上記の条件で検索を行うことで 150 件以上の検索結果が得られるが、その多くの検索は「teXTS」のようにキーワードの一部を包含するようなものが多いため、検索結果に対して Summary を確認し、条件に合致しているものかどうかを確認した。本調査で得られた結果としては、表 10 に示す 1 件の CVE がストレージ暗号化に関する脆弱性として存在した。しかしながら、この脆弱性は、Intel Optane メモリーモジュールを搭載したシステムにおけるストレージメディアの情報漏えいの脆弱性によって攻撃者は物理アクセスを介してデータを回復できる可能性がある脆弱性であったため、ディスク暗号化としては XTS を利用していることが予想されるが、XTS に起因するような脆弱性ではなかった。
表 10 Search Vulnerability Database における検索結果

項番
1

CVE
CVE-20183619

サマリー
Information disclosure vulnerability
in storage media in systems withIntel Optane memory module with
Whole Disk Encryption may allow
an attacker to recover data via
physical access.

URL
https://nvd.nist.gov/vuln/detail/CVE-2018-3619

また、XTS の機能が実装されている暗号ライブラリやソフトウェアにおいて、XTS の機能が利用されている中で実装コードの改善やバグ抽出されることで、ソフトウェアの実装として洗練されてきているか、XTS を実装している OSS である暗号ライブラリに対して、GitHubの Issue やメーリングリストを調査した。その結果として、XTS に関連する実装部分に対しての実装コードの改善が行われていることを知ることができた。このことから、OSS コミュニティとしてコミットなどの活発なコミュニティや OSS である暗号ライブラリとして FIPS 認証を取得するようなコミュニティであれば、コード品質も日々改善され、XTS に関連する実装部分も安定していると想定される。

27

4.3
XTS の公開されている評価結果に関するまとめ
XTS に関する公開情報の評価としてまとめると、XTS に対する実装性能の第三者が作成した情報はあまり存在していなかったが、AES-NI のような暗号機能を補強する機能があることによって、利用者が意識することなく暗号機能が利用されているのではないかと考える。また、他の暗号利用モードと比較すると新しい部類に入る XTS ではあるが、XTSVSのようなテストベクタの充実などによって、実装者が気軽に正しく実装できているかどうかを確認できる土壌があるため、XTS という暗号利用モード自体の実装ミスはなく、その機能が正しく利用されているかどうかという視点が重要であると考える。

28

5他の暗号利用モードとの実装性能比較調査

本章では、実装性能調査対象の暗号利用モードである XTS と CRYPTREC 暗号リスト（2020 年 1 月現在の最新版：CRYPTREC LS-0001-2012R4）で採択されている暗号利用モードとの実装性能評価を実施することで、現在採択されている暗号利用モードと比較
して実装性能について調査する。実装性能調査を行う際に注目した測定対象の選定観点として、評価対象となる「暗号アルゴリズム」、評価対象となる「暗号利用モード」、実環境における実装性能評価対象となる「暗号ライブラリ」の 3 つになる。以下に、それらの測定の観点における選定結果を示す。
§§＜評価対象となる「暗号アルゴリズム」＞
評価対象となる暗号アルゴリズムとして、NIST SP800-38E [4]や IEEE 1619-2018 [5]な
どで XTS との組合せとしてドキュメント化されている AES を評価時の暗号アルゴリズムとして選定した。その選定理由としては、CMVP での認証対象であることから多くの製品や暗号ライブラリなどで実装が多くされていると期待されるためである。また、利用する共通鍵
暗号アルゴリズムの鍵長としては、AES-XTS の仕様で規定されている 128bit および256bit を評価対象とした。
＜評価対象となる「暗号利用モード」＞
本実装性能調査として対象とする暗号利用モードは、現在、CRYPTREC 暗号リストで採択されている暗号利用モード（表 11）および、CRYPTREC 暗号リストでは採択されていない
ECB モードを共通鍵暗号アルゴリズムとしての素朴な実装性能として判断する基準値となると考えて調査対象とした。
表 11 CRYPTREC 暗号リストにおける暗号利用モード
暗号利用モード
秘匿モード
CBC
CFB
CTR
OFB
認証付き秘匿モード
CCM
GCM

以下に、本実装評価調査として対象となる暗号利用モードとその選定理由を以下に整理する。（表 12）§§https://www.cryptrec.go.jp/list/cryptrec-ls-0001-2012r4.pdf

29

表 12 実装評価対象一覧

項番
1
2
3
4
5
6
7
8

暗号利用モード名
XTS
ECB
CBC
CFB
CTR
OFB
CCM
GCM

選定理由
本調査での評価対象
実装性能時の基準値
CRYPTREC 暗号リストで採択
同上
同上
同上
同上
同上

＜実環境における実装性能評価対象となる「暗号ライブラリ」＞
実装性能評価対象とする暗号ライブラリとして、2 つの暗号ライブラリを選定することとした。その理由としては、選定した暗号ライブラリ特有の性能特性である可能性をできるだけ排除することを考慮して、独立した 2 実装を選択するようにした。その結果として、評価対象として選択した暗号ライブラリは、世界中で広く利用されていると予想される OpenSSL ***と組み込み環境などで利用されることが想定されている WolfSSL 社 †††が提供している
WolfCrypt‡‡‡とした。また、この２つの暗号ライブラリには、性能測定を行うための機能が実装されていることから、評価者の実装による実装性能への影響を排除し、他の第三者も確認できることも考慮して選定している。
本調査において利用した暗号ライブラリについて、取得先およびバージョンに関する情報は以下のとおり。（表 13）
表 13 評価で利用した暗号ラリブラリ

項番
1
2

暗号ライブラリ名
OpenSSL §§§WolfCrypt

バージョン
1.1.1d4.2.0

取得先 URL
https://www.openssl.org/source/
https://www.wolfssl.jp/download/***

https://www.openssl.org/
https://www.wolfssl.com/‡‡‡
https://www.wolfssl.com/products/wolfcrypt-2/§§§
OpenSSL は FIPS 認証を受けており、FIPS 版モジュールも当該 Web サイトで公開している。なお、2020 年 1 月現在で公開されている FIPS 版モジュールは openssl-fips2.0.16.tar.gz である。なお、ビルドについては通常の OpenSSL と同様に実施することがで
きる。
†††

30

5.1
実装性能評価に向けた準備
実装性能評価を実施する上での準備として、本調査で利用した「実装性能評価を行った環境」および「暗号ライブラリのビルド方法」を示す。
5.1.1 実装性能評価を行った環境
XTS で期待される利用がディスク暗号化であることを考慮し、主な OS である Microsoft
社 Windows、Apple 社 macOS、Linux の 3 環境を対象とし、実環境での性能評価を実施した。それぞれの環境に関するスペックは以下のとおりである。
＜Windows 環境＞
OS: Windows 10 Pro 64-bit Version 1909 (Build 18363.535)
CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz (12 CPUs)
Memory: 64GB
＜macOS 環境＞
OS: macOS Catalina 10.15.2
CPU: 2.4GHz dual-core Intel Core i5 processor
Memory: 16GB
＜Linux 環境＞
OS: Ubuntu 18.04.3 LTS
CPU: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Memory: 32GB
5.1.2

暗号ライブラリのビルド方法

5.1.2.1
OpenSSL
各実装評価を行った環境での OpenSSL に関するビルド方法を以下に示す。なお、現在の OS やアプリケーションの状況を考慮して、x64 向けのみを評価対象としている。
＜Windows 環境＞

perl Configure VC-WIN64A
nmake
nmake test

＜macOS 環境＞./Configure darwin64-x86_64-cc
make
make test＜Linux 環境＞./Configure linux-x86_64
make
make test

31

5.1.2.2
WolfCrypt
各実装評価を行った環境での WolfCrypt に関するビルド方法を以下に示す。なお、現在の OS やアプリケーションの状況を考慮して、x64 向けのみを評価対象としている。
＜Windows 環境＞
Windows における WolfCrypt のビルドでは、圧縮ファイルに同梱されている
wolfssl.vcxproj ファイルを用いて Visual Studio 上で行う必要がある。なお、x64 向けでの評価を行うために、以下に示す変更 ****を実施する必要がある。
・ベンチマークアプリが同梱ファイルでは、x86 向けのビルド設定のみであるため、ベンチ
マークアプリに対して、プロジェクトに x64 プラットフォームを追加する
・構成プロパティにおける「プログラム全体の最適化」オプションが無効になっているので、以下に示すフラグを有効にする：
・WOLFSSL_AES_XTS
・WOLFSSL_AES_CFB
・WOLFSSL_AES_COUNTER・HAVE_CAMELLIA・WOLFSSL_AESNI＜macOS 環境＞./configure --enable-xts --enable-aescfb --enable-aesctr --enable-camellia -enable-aesni
makemake test＜Linux 環境＞
Linux 環境でのビルドについては macOS 環境と同様に実行することができるため、macOS 環境を参照のこと。

****

ベンチマークアプリのプロジェクトファイル上は文字コードとして Shift-JIS が指定されているが、ソースコードが UTF-8 なので、ベンチマークアプリのソースコード側 Shift-JIS に
変更

32

5.2
実装性能評価に向けた測定
実装性能評価対象である OpenSSL および WolfCrypt で実装されているベンチマーク機
能として、OpenSSL では speed コマンドがあり、WolfCrypt では benchmark がある。ここでは異なる暗号ライブラリでのベンチマーク機能における測定の観点および測定対象となっている API について情報を示す。また、それぞれのベンチマーク機能に関する実行方法について情報を示す。
5.2.1.1
OpenSSL における測定の観点
OpenSSL で実装されているベンチマーク機能である speed コマンドは、今回評価対象である XTS だけではなく OpenSSL で実装されている多くの暗号アルゴリズム ††††の性能測定を容易に実施することができる。この speed コマンドでの測定の観点は、該当する機能に対して 3 秒間のループを実施する。その際に処理を行ったデータ量に対して実行時間を用いてスループットを計算している。なお、その測定結果は対象データ（平文）として、
16bytes、64bytes、256bytes、1024bytes、8192bytes、16384bytes を入力とし、暗号化/復号処理に関するスループットを測定が可能である。
また、speed コマンドで測定対象となる API に関する情報としては、各暗号処理を
EVP(The Digital EnVeloPe library)と呼ばれる共通的な API を用いて実行している。測定対象となる関数は EVP_EncryptUpdate / EVP_DecryptUpdate であり、暗号化や復号機能を評価対象としている。
5.2.1.2
OpenSSL におけるベンチマーク実行方法
OpenSSL におけるベンチマークコマンドおよび本調査において利用したオプション（表14）について説明を行う。
ベンチマークコマンド（OpenSSL）

openssl

speed-evp alg-decrypt

表 14 本調査における利用オプション

項番 オプション1-evp alg概要
EVP に対して alg によって指定された暗号ア
ルゴリズムを測定対象として指定する

2

上記の-evp を指定した場合のみ有効であり、復号処理に関する性能測定を実施する※ 本オプションを指定しない場合は、暗号化処理を実施する-decrypt††††

利用可能な暗号アルゴリズム一覧を取得したい場合には「openssl list -cipheralgorithms」を実行することで確認できる。
33

5.2.1.3
WolfCrypt における測定の観点
WolfCrypt で実装されているベンチマーク機能は benchmark である。今回評価対象である XTS だけではなく WolfCrypt で実装されている多くの暗号アルゴリズムの性能測定を容易に実施することができる。この benchmark での測定の観点は、入力データとして1048576 bytes の平文に対して、測定対象機能の処理を 5 回実施する。その処理が 1 秒を経過していなければ、この処理を繰り返し実施する。また、1 秒経過していれば計測を終了する。その際に処理を行ったデータ量に対して実行時間を用いてスループットを計算している。
また、benchmark で測定対象となる API に関する情報としては、暗号化や復号機能を評価対象としている。なお、WolfCrypt における AES の実装は、利用できるハードウェアサ
ポートの種類に応じて複数の種類が存在する。本評価においては、ディスク暗号化が主に利用されるマシン環境を想定し AES-NI を有効にするビルドを行った。
5.2.1.4
WolfCrypt におけるベンチマーク実行方法
WolfCrypt におけるベンチマークコマンドおよび本調査において利用したオプション（表15）について説明を行う。
ベンチマークコマンド（WolfCrypt）

benchmark表 15 本調査における利用オプション

項番 オプション
1
指定なし

概要
WolfCrypt の benchmark は利用オプションの指定は不要である。ベンチマークを実施する
ことで、共通鍵暗号や公開鍵暗号、ハッシュ関数など 55 種類の測定項目に対して性能測定を実施できる

5.3
実装性能評価における評価対象項目と実装評価実施項目「 実装評価対象一覧」で示した暗号利用モードと実装性能評価を行う暗号ライブラリにおいて実装されている暗号利用モードの関係を表 16 に整理する。本調査の暗号ライブラ
リに関する実装性能評価における測定対象となる。なお、表 16 で使用する記号の凡例
は、「○： 実装あり、×： 実装なし、△：問題あり」である。
表 16 より、実装性能評価で利用する暗号ライブラリで実装状況を考慮して、実装性能評価項目としては、項番 2、項番 5、項番 8 を中心に実装性能評価を行う。その他の項目については、各暗号利用モードにおける実装性能に関する性能傾向を知ることができる。

34

表 16 暗号ライブラリでの実装を考慮した測定対象の暗号利用モード

項番
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

表 12 での暗号利用モード
XTS
ECB

CBC

CFB

CTR

OFB

CCM

GCM

鍵長（bit）
128
256
128
192
256
128
192
256
128
192
256
128
192
256
128
192
256
128
192
256
128
192
256

35

OpenSSL
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
○
△
△
△
○
○
○

WolfCrypt
×
○
○
○
○
○
○
○
○
○
○
○
○
○
×
×
×
×
×
×
○
○
○

5.4
実装性能結果
実装性能結果として、表 16 でグレーによって塗りつぶされた項番に対して実装性能比較を行う。評価で利用した暗号ライブラリ毎に実装性能に関する測定結果を示している。
5.4.1.1

OpenSSL における実装性能結果

実行環境である 3 環境に対して、OpenSSL による AES-XTS（256bit）、AEC-ECB（256bit）および AESCBC（256bit） での測定結果を図 8〜図 12 および表 17〜表 21 として示す。

＜Windows 環境＞
6000000

スループット（KB/s）

5000000
4000000
3000000

aes-256-xts
aes-256-ecb

2000000

aes-256-cbc

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 8 Windows 環境における実装性能結果（OpenSSL: 暗号化）
表 17 Windows 環境における実装性能結果（OpenSSL: 暗号化）

（単位は KB/s）

36

6000000

スループット（KB/s）

5000000
4000000
3000000

aes-256-xts
aes-256-ecb

2000000

aes-256-cbc

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 9 Windows 環境における実装性能結果（OpenSSL: 復号）
表 18 Windows 環境における実装性能結果（OpenSSL: 復号）（単位は KB/s）

37

＜macOS 環境＞
6000000

スループット（KB/s）

5000000
4000000
3000000

aes-256-xts
aes-256-ecb

2000000

aes-256-cbc

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 10 macOS 環境における実装性能結果（OpenSSL: 暗号化）
表 19 macOS 環境における実装性能結果（OpenSSL: 暗号化）

（単位は KB/s）

38

6000000

スループット（KB/s）

5000000
4000000
3000000

aes-256-xts
aes-256-ecb

2000000

aes-256-cbc

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 11 macOS 環境における実装性能結果（OpenSSL: 復号）
表 20 macOS 環境における実装性能結果（OpenSSL: 復号）（単位は KB/s）

39

＜Linux 環境＞
6000000

スループット（KB/s）

5000000
4000000
3000000

aes-256-xts
aes-256-ecb

2000000

aes-256-cbc

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 12 Linux 環境における実装性能結果（OpenSSL: 暗号化）
表 21 Linux 環境における実装性能結果（OpenSSL: 暗号化）

（単位は KB/s）

40

スループット（KB/s)

6000000
5000000
4000000
3000000

aes-256-xts
aes-256-ecb

2000000

aes-256-cbc

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 13 Linux 環境における実装性能結果（OpenSSL: 復号）

表 22 Linux 環境における実装性能結果（OpenSSL: 復号）（単位は KB/s）

41

また、OpenSSL における 3 環境での実装性能について、暗号化については図 14 および
表 23 に整理する。また、復号については図 15 および表 24 に整理する。
6000000

4000000
16 bytes

3000000

64 bytes
256 bytes

2000000

1024 bytes
8192 bytes

1000000

16384 bytes

aes-256-xts

aes-256-ecb

Linux

macOS

Windows

Linux

macOS

Windows

Linux

macOS

0
Windows

スループット（KB/s）

5000000

aes-256-cbc

暗号利用モードおよび実行環境

図 14 OpenSSL における 3 環境での実装性能結果一覧（暗号化）
表 23 OpenSSL における 3 環境での実装性能結果一覧（暗号化）（単位は KB/s）

42

6000000

4000000
3000000

16 bytes

2000000

256 bytes

64 bytes
1024 bytes
8192 bytes

1000000

16384 bytes

aes-256-xts

aes-256-ecb

Linux

macOS

Windows

Linux

macOS

Windows

Linux

macOS

0
Windows

スループット（KB/s）

5000000

aes-256-cbc

暗号利用モードおよび実行環境

図 15 OpenSSL における 3 環境での実装性能結果一覧（復号）
表 24 OpenSSL における 3 環境での実装性能結果一覧（復号）（単位は KB/s）

43

5.4.1.2

WolfCrypt における実装性能結果

実行環境である 3 環境に対して、WolfCrypt による AES-XTS（256bit）、AES-ECB（256bit）および AES-CBC（256bit） での測定結果を図 16 ～図 21 および表 25 ～表 30
として整理する。
＜Windows 環境＞
1400000

スループット（KB/s）

1200000
1000000
800000AES-XTS-enc

600000

AES-256-ECB-enc
AES-256-CBC-enc

40000020000001048576 bytes

入力データ

図 16 Windows 環境における実装性能結果（WolfCrypt: 暗号化）

表 25 Windows 環境における実装性能結果（WolfCrypt: 暗号化）

（単位は KB/s）

44

6000000

スループット（KB/s）

5000000
4000000
3000000

AES-XTS-dec
AES-256-ECB-dec

2000000

AES-256-CBC-dec

1000000
01048576 bytes

入力データ

図 17 Windows 環境における実装性能結果（WolfCrypt: 復号）

表 26 Windows 環境における実装性能結果（WolfCrypt: 復号）（単位は KB/s）

45

＜macOS 環境＞
6000000

スループット（KB/s）

5000000
4000000
3000000

AES-XTS-enc
AES-256-ECB-enc

2000000

AES-256-CBC-enc

1000000
01048576 bytes

入力データ

図 18

macOS 環境における実装性能結果（WolfCrypt: 暗号化）

表 27 macOS 環境における実装性能結果（WolfCrypt: 暗号化）

（単位は KB/s）

46

6000000

スループット（KB/s）

5000000
4000000
3000000

AES-XTS-dec
AES-256-ECB-dec

2000000

AES-256-CBC-dec

1000000
01048576 bytes

入力データ

図 19 macOS 環境における実装性能結果（WolfCrypt: 復号）
表 28 macOS 環境における実装性能結果（WolfCrypt: 復号）（単位は KB/s）

47

＜Linux 環境＞
6000000

スループット（KB/s）

5000000
4000000
3000000

AES-XTS-enc
AES-256-ECB-enc

2000000

AES-256-CBC-enc

1000000
01048576 bytes

入力データ

図 20 Linux 環境における実装性能結果（WolfCrypt: 暗号化）

表 29 Linux 環境における実装性能結果（WolfCrypt: 暗号化）

（単位は KB/s）

48

6000000

スループット（KB/s）

5000000
4000000
3000000

AES-XTS-dec
AES-256-ECB-dec

2000000

AES-256-CBC-dec

1000000
01048576 bytes

入力データ

図 21 Linux 環境における実装性能結果（WolfCrypt: 復号）
表 30 Linux 環境における実装性能結果（WolfCrypt: 復号）（単位は KB/s）

49

また、WolfCrypt における 3 環境での実装性能について、暗号化については図 22 および表 31 に整理する。また、復号については図 23 および表 32 に整理する。
6000000

4000000

3000000

2000000

1048576 bytes

1000000

aes-256-xts

aes-256-ecb

Linux

macOS

Windows

Linux

macOS

Windows

Linux

macOS

0
Windows

スループット（KB/s）

5000000

aes-256-cbc

暗号利用モードおよび実行環境

図 22 WolfCrypt における 3 環境での実装性能結果一覧（暗号化）

表 31 WolfCrypt における 3 環境での実装性能結果一覧（暗号化）（単位は KB/s）

50

6000000

スループット（KB/s）

5000000
4000000
3000000
2000000

1048576 bytes

1000000

AES-XTS-dec

AES-256-ECB-dec

Linux

macOS

Windows

Linux

macOS

Windows

Linux

macOS

Windows0

AES-256-CBC-dec

暗号利用モードおよび実行環境

図 23 WolfCrypt における 3 環境での実装性能結果一覧（復号）

表 32 WolfCrypt における 3 環境での実装性能結果一覧（復号）（単位は KB/s）
5.5
実装性能評価における考察
本章では、実装性能評価として OpenSSL および WolfCrypt を用いた測定を実施した。これらの測定結果より、OpenSSL では Windows 環境、macOS 環境および Linux 環境において、測定性能の基準と考えられる ECB や広く利用されている暗号利用モードである CBCと比較しても XTS は遜色のないパフォーマンスを出していると考えられる。また、WolfCryptにおいては、XTS と比較対象である ECB および CBC を比較すると、OpenSSL と異なる性
能傾向となっていたが、これは WolfCrypt において ECB および CBC については AES-NI
を利用している拡張命令セットが利用されているが、XTS においては AES-NI の拡張命令セットが限定的な利用がなされていることでパフォーマンスに差があるのではないかと考えられる。
これらの 2 つの OSS で公開されている暗号ライブラリを用いた実装性能測定結果を踏まえると、暗号利用モードに起因する要因で性能への影響があるというより、ソフトウェアの実装時に AES-NI のようなハードウェアサポートを利用することで、ストレージ暗号化な
どの利用用途に影響のない実装性能が得られることが期待される。

51

6

ディスク暗号化製品を使った実装性能比較調査

前章の「5 他の暗号利用モードとの実装性能比較調査」において、暗号ライブラリでのXTS に関する実装性能評価を行った。本章では、XTS 本来の利用方法に注目し、ディスク暗号化としての実装性能調査を実施する。
6.1
実装性能評価で選定した製品
ディスク暗号化機能を有する製品として、Microsoft BitLocker や Apple FileVault など実際の OS に搭載されている製品があるが、各 OS で実装性能比較を行うことができないた
め、本調査では様々な環境で動作可能であること、また、測定結果の裏付けを取るためにソースコードによる確認ができるよう OSS 製品から選定することとした。OSS の中でディスク暗号化を実現する製品として、VeraCrypt‡‡‡‡、AES Crypt§§§§、Cryptomator *****など、多くの製品が公開されているが、本調査では Windows/Mac/Linux の 3 環境すべてに対応していること、ディスク暗号化に関する実装性能を測定する公式機能が実装されている点に注目して「VeraCrypt」を選定した。
今回、選定した VeraCrypt は、暗号化ユーティリティソフトウェアとして有名な TrueCryptをフォークして開発された OSS である。VeraCrypt の機能としてはファイルやパーティショ
ンの暗号化やストレージ全体の暗号化など実現することができる。初版リリースは、 2013年 6 月 22 日であり、継続的にメンテナンスが行われバージョンアップが行われている。また、VeraCrypt が対応している暗号アルゴリズムおよび暗号利用モードを表 33 に示す。
表 33 VeraCrypt で利用可能な暗号アルゴリズムおよび暗号利用モード

項番
1
2
3
4
5

暗号アルゴリズム名
AES
Camellia
Serpent
TwofishKuznyechik （GOST R 34.12-2015）

暗号利用モード
XTS

本調査対象として、表 33 で対応している暗号アルゴリズムに関する性能比較を行うことはせずに、CRYPTREC 暗号リストの電子政府推奨暗号リストの 128 ビットブロック暗号として採択されている AES および Camellia に注目して性能測定を実施する。
本調査で採用した VeraCrypt については、表 34 に示した取得先 URL から Windows、macOS、Linux それぞれのソフトウェアを取得できる。本調査で利用した VeraCrypt のバー
ジョンを以下に示す。

‡‡‡‡

https://www.veracrypt.fr/en/Home.html
https://www.aescrypt.com/*****
https://cryptomator.org/
§§§§

52

表 34 評価で利用したソフトウェア

項番 ストレージ暗号化 バージョン
製品名1
VeraCrypt
1.24-Update3

取得先 URL
https://www.veracrypt.fr/en/Downloads.html

6.2
実装性能評価に向けた準備
実装性能評価を実施する上での準備として、本調査で利用した「実装性能評価を行った環境」および「暗号ライブラリのビルド方法」を示す。
6.2.1 実装性能評価を行った環境
XTS で期待される利用がディスク暗号化であることを考慮し、主な OS である Windows、macOS、Linux の 3 環境を対象とし、実環境での性能評価を実施した。それぞれの環境に関するスペックは以下のとおりである。なお、このマシン環境は、5.1 実装性能評価を行った環境と同一環境である。
＜Windows 環境＞
OS: Windows 10 Pro 64-bit Version 1909 (Build 18363.535)
CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz (12 CPUs)
Memory: 64GB
＜macOS 環境＞
OS: macOS Catalina 10.15.2
CPU: 2.4GHz dual-core Intel Core i5 processor
Memory: 16GB
＜Linux 環境＞
OS: Ubuntu 18.04.3 LTS
CPU: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Memory: 32GB

53

6.2.2 暗号ライブラリのビルド方法
VeraCrypt のソースコードは 公式サイト †††††から入手可能である。本測定では、ソースコードからビルドして測定を試みると Windows 環境においてコード署名を要求されるためビルドを実施できなかった。実装性能測定の目的を想定して同一条件での性能測定を行うた
めに公式サイトが提供しているインストーラーからインストールし、GUI 上でベンチマークを実施した。なお、実装性能に関する測定条件の調査や性能について実装を確認する際には、公式サイトで公開されているソースコードを解析した。
6.3

実装性能評価に向けた測定

実装性能評価対象である VeraCrypt で実装されているベンチマーク機能として、
benchmark がある。ここでは、ベンチマーク機能における測定の観点および測定対象となっている API について情報を示す。また、ベンチマーク機能に関する実行方法について情
報を示す。
6.3.1

VeraCrypt における測定の観点

VeraCrypt で実装されているベンチマーク機能である Algorithms Benchmark は、今回評価対象である XTS のみの実装である。また、その測定結果は、バッファサイズとして環境などで選択できるサイズは異なるが、1024KB や 50MB、1GB など複数の選択肢から選択でき、暗号化/復号処理に関するスループットを測定が可能である。なお、 ベンチマークおよび実際に利用される暗号処理で用いられる src/Crypto/Aes.h において、AES_256 フラグのみが有効になっていることから鍵長は 256 ビットであった。
6.3.2

VeraCrypt におけるベンチマーク実行方法

VeraCrypt におけるベンチマークに関する概要について説明を行う。なお、macOS 環境を例示する。
表 34 で示した取得先 URL からダウンロードしたソフトウェアをインストールして起動後、メニューバーにある Tool から今回利用する benchmark を起動できる。（図 24）†††††

https://www.veracrypt.fr/code/VeraCrypt/54

図 24 VeraCrypt Algorithms Benchmark

このベンチマークによって提供されている機能は、ディスク暗号化で利用可能な共通鍵暗号に関する性能評価（Encryption Algorithm）と PKCS#5 での PBKDF2 に関する性能評価（PKCS-5 PRF）、ハッシュ関数に関する性能評価（Hash Algorithm）を行うことができる。
（図 25）

図 25 Benchmark 設定項目

55

6.4

VeraCrypt を用いた実装性能測定
6.4.1

ベンチマークによる性能測定

実行環境である 3 環境に対して、VeraCrypt のベンチマークで測定可能な AES-XTS（256bit）、Camellia-XTS（256bit）に関する測定結果（図 26、図 27、図 28）について示す。
＜Windows 環境＞

図 26 VeraCrypt ベンチマーク（Windows 環境）

56

＜macOS 環境＞

図 27 VeraCrypt ベンチマーク（macOS 環境）

57

＜Linux 環境＞

図 28 VeraCrypt ベンチマーク（Linux 環境）

VeraCrypt を用いた実装性能測定の結果を、AES-XTS および Camellia-XTS における3 環境での暗号化に関する測定結果（図 29、表 35）を整理する。

スループット（GB/s）

12
10
8
6

Windows環境
macOS環境

4

Linux環境

2
0

AES-XTS

Camellia-XTS

暗号アルゴリズム

図 29 VeraCrypt 実装性能比較58

表 35 VeraCrypt 実装性能比較（数値）（単位は GB/s）
6.4.2

ストレージに対するベンチマークソフトによる性能測定

このベンチマークでは暗号アルゴリズム毎の性能傾向を知ることができるが、実際にストレージへの書き込み時にどのようなパフォーマンスなのかが判断できない課題がある。
そこで、評価対象の暗号アルゴリズムである AES および Camellia を用いて仮想的な暗号ドライブの作成を行い、ストレージの読込/書込に関する性能を確認するため、
AmorphousDiskMark ‡‡‡‡‡を用いて実機での性能測定も実施した。AmorphousDiskMark が実施する評価項目については、表 36 に示すとおりである。なお、Queue Depth §§§§§はデフ
ォルト値である 32 を指定している。
表 36 AmorphousDiskMark における評価項目

‡‡‡‡‡

項番
1

評価項目
Seq QD32

概要
シーケンシャルな 128KB (Queue Depth = 32) 読
込/書込みテスト

2

4K QD32

4KB のランダム I/O (Queue Depth = 32) 読込/
書込みテスト3

Seq

シーケンシャルな 1MB (Queue Depth = 32) 読込/書込みテスト

4

4K

4KB のランダム 読込/書込みテスト

http://www.katsurashareware.com/pgs/adm.html
ストレージが一度に受け取れる I/O リクエスト数のこと

§§§§§

59

＜macOS 環境＞

図 30 macOS 環境におけるベンチマーク結果（暗号化なし）

図 31 macOS 環境におけるベンチマーク結果（AES-XTS）60

図 32 macOS 環境におけるベンチマーク結果（Camellia-XTS）

6.5
ディスク暗号化製品を使った実装性能比較調査に関する考察
ディスク暗号化に関する技術としては、Windows に搭載されている BitLocker や Apple
FileVault、SSD などのハードウェアで実現される SED などにより、ディスク暗号化技術が実用上問題ないことを経験しているが、本節では実際にストレージ暗号化を行う VeraCrypt を用いて、ベンチマークによるスループットおよび仮想的な暗号化ストレージを用いて読込/書込みに関するベンチマークを行い、測定した範囲において実装性能を示すことができた。
一般的な暗号ライブラリで実行されるメモリ上でのスループットにより、実際のストレージに対して I/O を行うような測定条件ではスループットが低くなることが確認された。今後、想定される利用シーンを考慮すると、AES-NI や専用チップなどによるハードウェアアクセラレー
ションの重要性が増加することが予想される。

61

7

まとめ
本報告書では、XTS の CRYPTREC 暗号リストへの採択の判断材料を提供することを目的として、製品での普及状況および実装性能の観点での評価を行った。
結果として、普及状況の観点では多くの製品での採用実績があり、実装性能としては、
ECB や CRYPTREC 暗号リストに採択されているブロック暗号利用モードである CBC と比較した結果、XTS は実際に利用する観点から実用上影響のないパフォーマンスであると判断した。本報告書での調査で得た結果を以下にまとめる。
普及状況の観点では、Windows の BitLocker や macOS の FileVault 2 などのストレージ
暗号化ソフトに加え、SED、HDD、USB などのストレージ製品での採用実績を確認できた。
XTS を承認アルゴリズムに含む CMVP 認証を取得しているベンダーは 90 社あり、CMVP
認証取得製品だけでも 296 件の製品で XTS が採用されていることがわかった。
実装性能の観点では、客観的な評価として公開されている評価結果に関する調査と実際の計測による評価を実施した。
公開されている評価結果による調査では、2010 年など比較的古い環境での実装性能評
価結果は見つかった。一方で、新しい環境での性能評価結果については、今回調査した条件下では存在していなかった。これは、AES-NI のような暗号化機能を補強する機能があることによって、利用者が意識することなく暗号機能が利用されているのではないかと考える。
実際の計測による評価では、OSS として提供されている暗号ライブラリを利用した評価とディスク暗号化ソフトウェアを利用した評価を実施した。
暗号ライブラリを利用した評価では、XTS と CRYPTREC 暗号リストで採択されている暗号利用モードとの実装性能を比較評価するために、Windows 環境、macOS 環境およびLinux 環境において、OpenSSL と WolfCrypt を使用した性能評価を行った。結果的に、OpenSSL では ECB や CBC と比較して実用上影響のないパフォーマンスであると判断した。一方、WolfCrypt では OpenSSL とは異なる性能傾向となっていたが AES-NI の拡張命
令の限定的な利用がなされていたことによる差であると考えられる。
ディスク暗号化製品を使った実装性能調査では、実際にストレージ暗号化を行う
VeraCrypt を用いてベンチマークによるスループットおよび仮想的な暗号化ストレージを用いたベンチマークを行った。その結果、暗号ライブラリで実行されるメモリ上でのスループッ
トよりも、スループットが低くなることが観測された。BitLocker や Apple の FileVault などのストレージ暗号化製品により、ディスク暗号化技術が実用上問題ないことを経験しているが、今後、AES-NI や専用チップなどによるハードウェアアクセラレーションの重要性が増加することが予想される。

62

参考文献
[1] 峯松一彦, 暗号利用モード XTS の安全性に関する調査及び評価,
https://www.cryptrec.go.jp/exreport/cryptrec-ex-2801-2018.pdf, CRYPTREC
Report, CRYPTREC, 2019.
[2] P. Rogaway, Efficient Instantiations of Tweakable Blockciphers and Refinements toModes OCB and PMAC., ASIACRYPT 2004, volume 3329 of Lecture Notes in
Computer Science, pp. 16-31, Springer, 2004.
[3] IEEE Standard for Cryptographic Protectioin of Data on Block-Oriented Storage
Devices (IEEE Std 1619-2007), IEEE Security in Storage Working Group, 2007.
[4] M. Dworkin, Recommendation for Block Cipher Modes of Operation: The XTS-AES
Mode for Confidentiality on Storage Devices (NIST SP800-38E), National Institute ofStandards and Technology, 2010.
[5] Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices,
IEEE Security in Storage Working Group, 2018.
[6] CRYPTREC, 暗号技術検討会 2018 年度 報告書,
https://www.cryptrec.go.jp/report/cryptrec-rp-1000-2018.pdf, 2019.
[7] The XTS-AES Validation System (XTSVS), National Institute of Standards andTechnology, 2013.
[8] P. Rogaway, Evaluation of Some Blockcipher Modes of Operation, CRYPTREC
Report, 2011.

63

Appendix
OpenSSL に関する実装性能調査結果「表 16 暗号ライブラリでの実装を考慮した測定対象の暗号利用モード」において、
CRYPTREC 暗号リストで採択されている暗号利用モードに対して、OpenSSL を用いた実装性能測定を行った結果を示す。なお、鍵長については XTS において利用可能な鍵長である 128 ビットおよび 256 ビットの範囲とした。なお、CCM については本調査での事前による実装性能測定を行ったところ、スループットが頭打ちにならない状況だったため、本調査での測定対象から除外している。
＜Windows 環境：暗号化＞
8000000

スループット（KB/s）

7000000
6000000
aes-128-xts

5000000

aes-128-ecb

4000000

aes-128-cbc
aes-128-cfb

3000000

aes-128-ctr

2000000

aes-128-ofb
aes-128-gcm

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 33 Windows 環境における暗号利用モード別実装性能（OpenSSL: 128bit 暗号化）
表 37 Windows 環境における暗号利用モード別実装性能（OpenSSL: 128bit 暗号化）

（単位は KB/s）

64

6000000

スループット（KB/s）

5000000
4000000

aes-256-xts
aes-256-ecb

3000000

aes-256-cbc
aes-256-cfb

2000000

aes-256-ctr
aes-256-ofb

1000000
0

aes-256-gcm

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 34 Windows 環境における暗号利用モード別実装性能（OpenSSL: 256bit 暗号化）
表 38 Windows 環境における暗号利用モード別実装性能（OpenSSL: 256bit 暗号化）

（単位は KB/s）

65

＜Windows 環境：復号＞
8000000

スループット（KB/s）

7000000
6000000
aes-128-xts

5000000

aes-128-ecb

4000000

aes-128-cbc
aes-128-cfb

3000000

aes-128-ctr

2000000

aes-128-ofb
aes-128-gcm

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 35 Windows 環境における暗号利用モード別実装性能（OpenSSL: 128bit 復号）
表 39 Windows 環境における暗号利用モード別実装性能（OpenSSL: 128bit 復号）（単位は KB/s）

66

6000000

スループット（KB/s）

5000000
aes-256-xts

4000000

aes-256-ecb
3000000

aes-256-cbc
aes-256-cfb

2000000

aes-256-ctr
aes-256-ofb

1000000
0

aes-256-gcm

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 36 Windows 環境における暗号利用モード別実装性能（OpenSSL: 256bit 復号）
表 40 Windows 環境における暗号利用モード別実装性能（OpenSSL: 256bit 復号）（単位は KB/s）

67

＜macOS 環境：暗号化＞
6000000

スループット（KB/s）

5000000
4000000

aes-128-xts
aes-128-ecb

3000000

aes-128-cbc
aes-128-cfb

2000000

aes-128-ctr
aes-128-ofb

10000000

aes-128-gcm

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 37 macOS 環境における暗号利用モード別実装性能（OpenSSL: 128bit 暗号化）
表 41 macOS 環境における暗号利用モード別実装性能（OpenSSL: 128bit 暗号化）

（単位は KB/s）

68

6000000

スループット（KB/s）

5000000
aes-256-xts

4000000

aes-256-ecb
3000000

aes-256-cbc
aes-256-cfb

2000000

aes-256-ctr
aes-256-ofb

1000000
0

aes-256-gcm
16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 38 macOS 環境における暗号利用モード別実装性能（OpenSSL: 256bit 暗号化）
表 42 macOS 環境における暗号利用モード別実装性能（OpenSSL: 256bit 暗号化）

（単位は KB/s）

69

＜macOS 環境：復号＞
6000000

スループット（KB/s）

5000000
4000000

aes-128-xts
aes-128-ecb

3000000

aes-128-cbc
aes-128-cfb

2000000

aes-128-ctr
aes-128-ofb

10000000

aes-128-gcm

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 39 macOS 環境における暗号利用モード別実装性能（OpenSSL: 128bit 復号）
表 43 macOS 環境における暗号利用モード別実装性能（OpenSSL: 128bit 復号）（単位は KB/s）

70

4000000

スループット（KB/s）

3500000
3000000
aes-256-xts

2500000

aes-256-ecb

2000000

aes-256-cbc
aes-256-cfb

1500000

aes-256-ctr

1000000

aes-256-ofb
aes-256-gcm

5000000

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 40 macOS 環境における暗号利用モード別実装性能（OpenSSL: 256bit 復号）
表 44 macOS 環境における暗号利用モード別実装性能（OpenSSL: 256bit 復号）（単位は KB/s）

71

＜Linux 環境：暗号化＞
8000000

スループット（KB/s）

7000000
6000000
aes-128-xts

5000000

aes-128-ecb

4000000

aes-128-cbc
aes-128-cfb

3000000

aes-128-ctr

2000000

aes-128-ofb
aes-128-gcm

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 41 Linux 環境における暗号利用モード別実装性能（OpenSSL: 128bit 暗号化）
表 45 Linux 環境における暗号利用モード別実装性能（OpenSSL: 128bit 暗号化）

（単位は KB/s）

72

6000000

スループット（KB/s）

5000000
4000000

aes-256-xts
aes-256-ecb

3000000

aes-256-cbc
aes-256-cfb

2000000

aes-256-ctr
aes-256-ofb

1000000
0

aes-256-gcm

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 42 Linux 環境における暗号利用モード別実装性能（OpenSSL: 256bit 暗号化）
表 46 Linux 環境における暗号利用モード別実装性能（OpenSSL: 256bit 暗号化）

（単位は KB/s）

73

＜Linux 環境：復号＞
8000000

スループット（KB/s）

7000000
6000000
aes-128-xts

5000000

aes-128-ecb

4000000

aes-128-cbc
aes-128-cfb

3000000

aes-128-ctr

2000000

aes-128-ofb
aes-128-gcm

1000000
0

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 43 Linux 環境における暗号利用モード別実装性能（OpenSSL: 128bit 復号）
表 47 Linux 環境における暗号利用モード別実装性能（OpenSSL: 128bit 復号）（単位は KB/s）

74

6000000

スループット（KB/s）

5000000
4000000

aes-256-xts
aes-256-ecb

3000000

aes-256-cbc
aes-256-cfb

2000000

aes-256-ctr
aes-256-ofb

1000000
0

aes-256-gcm

16 bytes

64 bytes

256 bytes 1024 bytes 8192 bytes 16384 bytes

入力データ

図 44 Linux 環境における暗号利用モード別実装性能（OpenSSL: 256bit 復号）
表 48 Linux 環境における暗号利用モード別実装性能（OpenSSL: 256bit 復号）（単位は KB/s）

75

WolfCrypt に関する実装性能調査結果「表 16 暗号ライブラリでの実装を考慮した測定対象の暗号利用モード」において、
CRYPTREC 暗号リストで採択されている暗号利用モードに対して、WolfCrypt を用いた実装性能測定を行った結果を示す。なお、鍵長については XTS において利用可能な鍵長である 128 ビットおよび 256 ビットの範囲とした。なお、WolfCrypt においてベンチマークの測定項目として対応していないもの（差異が発生する観点として、鍵長が 128 ビット/256 ビットに未対応および復号処理に関して未実装）については、スループットを 0 KB/s としている。
＜Windows 環境：暗号化＞
4000000

スループット（KB/s）

3500000
3000000
AES-XTS-enc

2500000

AES-128-ECB-enc

2000000

AES-128-CBC-enc

1500000

AES-128-CFB
AES-128-CTR

1000000

AES-128-GCM-enc

50000001048576 bytes

入力データ

図 45 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 暗号化）
表 49 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 暗号化）

（単位は KB/s）

76

3500000

スループット（KB/s）

3000000
2500000
AES-XTS-enc

2000000

AES-256-ECB-enc
AES-256-CBC-enc

1500000

AES-256-CFB

1000000

AES-256-CTR
AES-256-GCM-enc

50000001048576 bytes

入力データ

図 46 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 暗号化）
表 50 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 暗号化）

（単位は KB/s）

77

＜Windows 環境：復号＞
4000000

スループット（KB/s）

3500000
3000000
AES-XTS-dec

2500000

AES-128-ECB-dec

2000000

AES-128-CBC-dec

1500000

AES-128-CFB
AES-128-CTR

1000000

AES-128-GCM-dec

50000001048576 bytes

入力データ

図 47 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 復号）
表 51 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 復号）（単位は KB/s）

78

5000000
4500000

スループット（KB/s)

4000000
3500000

AES-XTS-dec

3000000

AES-256-ECB-dec

2500000

AES-256-CBC-dec

2000000

AES-256-CFB

1500000

AES-256-CTR

1000000

AES-256-GCM-dec

50000001048576 bytes

入力データ

図 48 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 復号）
表 52 Windows 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 復号）（単位は KB/s）

79

＜macOS 環境：暗号化＞
2500000

スループット（KB/s）

2000000
AES-XTS-enc

1500000

AES-128-ECB-enc
AES-128-CBC-enc

1000000

AES-128-CFB
AES-128-CTR

5000000

AES-128-GCM-enc

1048576 bytes

入力データ

図 49 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 暗号化）
表 53 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 暗号化）

（単位は KB/s）

80

2500000

スループット（KB/s）

2000000
AES-XTS-enc

1500000

AES-256-ECB-enc
AES-256-CBC-enc

1000000

AES-256-CFB
AES-256-CTR

5000000

AES-256-GCM-enc

1048576 bytes

入力データ

図 50 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 暗号化）
表 54 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 暗号化）

（単位は KB/s）

81

＜macOS 環境：復号＞
2500000

スループット（KB/s）

2000000
AES-XTS-dec

1500000

AES-128-ECB-dec
AES-128-CBC-dec

1000000

AES-128-CFB
AES-128-CTR

5000000

AES-128-GCM-dec

1048576 bytes

入力データ

図 51 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 復号）
表 55 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 復号）（単位は KB/s）

82

4000000

スループット（KB/s）

3500000
3000000
AES-XTS-dec

2500000

AES-256-ECB-dec

2000000

AES-256-CBC-dec

1500000

AES-256-CFB
AES-256-CTR

1000000

AES-256-GCM-dec

50000001048576 bytes

入力データ

図 52 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 復号）
表 56 macOS 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 復号）（単位は KB/s）

83

＜Linux 環境：暗号化＞
7000000

スループット（KB/s）

6000000
5000000
AES-XTS-enc

4000000

AES-128-ECB-enc
AES-128-CBC-enc

3000000

AES-128-CFB

2000000

AES-128-CTR
AES-128-GCM-enc

1000000
01048576 bytes

入力データ

図 53 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 暗号化）
表 57 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 暗号化）

（単位は KB/s）

84

5000000
4500000

スループット（KB/s）

4000000
3500000

AES-XTS-enc

3000000

AES-256-ECB-enc

2500000

AES-256-CBC-enc

2000000

AES-256-CFB

1500000

AES-256-CTR

1000000

AES-256-GCM-enc

50000001048576 bytes

入力データ

図 54 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 暗号化）
表 58 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 暗号化）

（単位は KB/s）

85

＜Linux 環境：復号＞
8000000

スループット（KB/s）

7000000
6000000
AES-XTS-dec

5000000

AES-128-ECB-dec

4000000

AES-128-CBC-dec

3000000

AES-128-CFB
AES-128-CTR

2000000

AES-128-GCM-dec

1000000
01048576 bytes

入力データ

図 55 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 復号）
表 59 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 128bit 復号）（単位は KB/s）

86

6000000

スループット（KB/s）

5000000
4000000

AES-XTS-dec
AES-256-ECB-dec

3000000

AES-256-CBC-dec

2000000

AES-256-CFB

1000000

AES-256-GCM-dec

0

AES-256-CTR

1048576 bytes

入力データ

図 56 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 復号）
表 60 Linux 環境における暗号利用モード別実装性能（WolfCrypt: 256bit 復号）（単位は KB/s）

87