安全な廃棄のために使用すべきストレージの機能(2/2)

# はじめに
　[前回の記事](https://qiita.com/ken-yossy/items/c2b0b8c389327b50d587)では、2019年末に報じられた「個人情報が保存された自治体のHDDが、廃棄処理委託先業者の従業員によって、データ復元可能な状態のまま転売された」という事件を題材に、ストレージを安全に廃棄するために行うべき対策としてストレージのロックと難読化を挙げ、SATAおよびNVMeストレージのロックの具体的な方法をまとめました。

　同じく前回の記事で指摘した通り、**「データ流出」に対する根本的な対策は「難読化」です**。そこで今回の記事では、この**難読化**についてまとめます。

　難読化には、「物理的破壊」、「記憶媒体を消去状態にする」、「複数回データを上書きする」といった従来から広く行われている方法や、暗号化機能を利用した「暗号的消去(Cryptographic Erase)」まで、様々な方法があります。

　この記事では、まずストレージ廃棄時の難読化に関する国内外のガイドラインを概観し、その後難読化の具体的な方法として、HDDだけでなくNANDフラッシュメモリを記憶媒体とするSSD（以降単にSSDと記載します）にも適用可能でかつ容量が増加しても実行コストが増えない方法である「暗号的消去」を説明します。

# サマリ
* 2020年初頭で最も詳しい「ストレージ廃棄時の難読化方法」に関するガイドラインは、米国連邦政府向けガイドラインである
* 難読化には様々な手段と方法があり、保護するデータの機密度によって適切な方法を選択する必要がある
* 「暗号的消去」は、**難読化の効果の根拠を暗号の強度におくため、ストレージのデータ記録方法に依存せず、かつストレージの容量にかかわらず短時間で実行可能な方法**である
    * 暗号的消去は**第三者によって強度が検証・認証された暗号モジュールを搭載したストレージにおいて用いるべき**である
        * ストレージに限らず、身近な製品にもこの第三者認証を取得したモジュールが使われている
    * TCGのSSCを用いると、ストレージインターフェース（SATA、SCSI、NVMeなど）に依存せずに暗号的消去を行うことができる

# 原則：「信用の範囲」外での難読化はダメ
　ここで改めて確認です。前回まとめたように、**「信用の範囲」の外に出る時点でストレージは難読化されていなければなりません（図1）**。

　加えて、信用の範囲外ではこのストレージへのアクセス権がないことを明確にするために、ストレージをロックすべきです（物理的破壊以外を適用する場合）。

![難読化が必要なタイミング](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/e04f6f02-3ded-255c-b12c-116e1478111b.png "難読化が必要なタイミング")
図1：難読化が必要なタイミング

　たとえ契約に基づいて第三者に難読化を委託した場合でも、第三者によって難読化前のストレージからデータが流出した場合、データの所有者が何らかの責任を負います。

　したがって、ストレージの物理破壊を第三者に委託する場合でも、ストレージがデータ所有者（本来は「正規アクセス権を持つ人（アカウント）」）の手を離れる時点で難読化しなければなりません。

# 求められる難読化方法のレベル
　難読化方法の各論に入る前に、まず「どのような基準でどのようなストレージ難読化方法の適用が求められているのか」を確認します。

　一般に、政府機関に求められる運用が最も厳格であってそれを参考にすれば（もしくはそのまま適用すれば）最低限必要な対策ができるはず（べき）です。そこで、日本と米国それぞれの政府機関向け運用ガイドラインを確認します。

## 日本の場合
　日本の場合、2015年1月に設置された「サイバーセキュリティ戦略本部」が策定した「政府機関等の情報セキュリティ対策のための統一基準（平成30年度版）<sup>[1]</sup>」（以降「統一基準」と記載します）と、その統一基準に則った運用をするための考え方や具体例を示した「政府機関等の対策基準策定のためのガイドライン（平成30年度版）<sup>[2]</sup>」（以降「ガイドライン」と記載します）が最新資料のようです。

　統一基準では、ストレージ廃棄時の処理の基準（遵守事項）として以下を定めています。なお太字にしたのは見やすくするためであり、原文では太字ではありません。

> (7) 情報の消去
> 　(a) 職員等は、電磁的記録媒体に保存された情報が職務上不要となった場合は、速やかに情報を消去すること。
> 　**(b) 職員等は、電磁的記録媒体を廃棄する場合には、当該記録媒体内に情報が残留した状態とならないよう、全ての情報を復元できないように抹消すること。**
> 　(c) 職員等は、要機密情報である書面を廃棄する場合には、復元が困難な状態にすること。
>
> _統一基準 23ページ、3.1.1節「情報の取扱い」より抜粋_

　HDDやSSDといったストレージの廃棄時処理については、上記(7)の(b)が従うべき基準となります。

　この基準に対して、ガイドラインでは次のように説明しています。

> 遵守事項3.1.1(7)(b)「抹消する」について
> 　「ファイル削除」の操作ではファイル管理のリンクが切断されるだけであり、ファイルの情報自体は抹消されずに電磁的記録媒体に残留した状態となっているおそれがある。電磁的記録媒体に記録されている情報を抹消するための方法としては、例えば、次の方法が挙げられる。
> **・データ抹消ソフトウェア（もとのデータに異なるランダムなデータを複数回上書きすることでデータを抹消するソフトウェア）によりファイルを抹消する方法**
> **・ハードディスクを消磁装置に入れてディスク内の全てのデータを抹消する方法**
> **・媒体を物理的に破壊する方法**
> 　また、媒体を物理的に破壊する方法としては、例えば、次の方法が挙げられる。
> ・（フロッピーディスク等の磁気媒体の場合）当該媒体を切断するなどして情報を記録している内部の円盤を破壊する方法
> ・（CD-R/RW、DVD-R/RW 等の光学媒体の場合）カッター等を利用してラベル面側から同心円状に多数の傷を付け、情報を記録している記録層を破壊する方法
> ・（媒体全般）メディアシュレッダーやメディアクラッシャー等の専用の機器を用いて破壊する方法
> 　また、ファイルの情報に別の情報を上書きした場合であっても、特殊な手段を用いることにより残留磁気から当該情報を復元される可能性があるため、特に機密性の高い情報の抹消に当たっては、留意する必要がある。
> 　**なお、職員等自らが情報を抹消することが不可能な場合は、あらかじめ抹消の手段と抹消の措置を行う者を情報システム又は課室等の組織の単位で定めて実施してもよい。**
>
> _ガイドライン 98ページ～99ページ、3.1.1節「情報の取扱い」より抜粋_

　統一基準において「全ての情報を復元できないように抹消する」のは「（情報を取り扱う）職員等」であって、それが「政府機関等の職員」であることは明白です。この「職員等」は「情報への正規アクセス権を持つ人」を指すはずです。

　これに対して、ガイドラインは「職員等自らが情報を抹消することが不可能な場合は、あらかじめ抹消の手段と抹消の措置を行う者を情報システム又は課室等の組織の単位で定めて実施してもよい」と解説していて、「情報への正規アクセス権を持たない人」による抹消処理が可能であると説明しているように読めます。

　「情報への正規アクセス権を持たない人」による抹消処理が可能であるような説明にも疑問を感じますが、それを別にしても、抹消処理は「政府機関内の組織」で実施することが前提のように読めます。廃棄業者のような第三者機関でもよいとは決して読めません。

　つまり、**この統一基準とガイドラインに従えば、廃棄するストレージは組織外の第三者の手に渡る前に難読化しなければならない**はずです。

　今回の事件は地方自治体で起きたことですが、**ガイドライン未記載の「フォーマット」しかしていない（難読化していない）ストレージを第三者に渡したことは、統一基準およびガイドラインを逸脱した運用である**と言えます。

　一方でこのガイドラインは、具体的な難読化方法として、「データ上書き」、「消磁（消去状態にする）」、「物理破壊」しか記載していません。

　次節で説明しますが、このガイドラインより前に発行された米国のガイドラインでは、対象としてHDDだけでなくSSDも追加されていて、そのうえ難読化方法については、ATAやNVMe等の標準技術を使う方法に加えて暗号的消去(Cryptographic Erase)といった最新技術（方法）まで記載されています。

　したがって、上記ガイドラインが既に時代遅れであり、このガイドラインでは対応できないことが明白です。

　この機会に日本国内の団体等が発行している文書を調べました<sup>[3][4][5][6]</sup>が、SSDを含めた最新ストレージ技術に触れている文書は少なく、また触れていたとしても次節で説明する米国のガイドラインを解説するに留まっているものが多いです。

　結果として、**現時点（2020年初頭）では米国のガイドラインを参照するのが適切**という状況です。

## 米国の場合
　米国国立標準技術研究所(NIST)は、米国連邦政府向けに、「媒体のサニタイズに関するガイドライン(Guidelines for Media Sanitization)」という文書<sup>[7]</sup>（以降SP800-88と記載します）を発行しています。

注意：SP800-88の最新バージョンは2014年末に発行されたRevision 1です。2006年に発行された初版については、（独）情報処理推進機構(IPA)などによって邦訳されたもの<sup>[8]</sup>が入手可能です。

　SP800-88では、ストレージ難読化の手段決定と手順について以下のようなフローチャートを示しています。

![SP800-88記載のストレージ難読化フローチャート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/95e6e30e-50e7-3a0e-e022-dab9965e400a.png "SP800-88記載のストレージ難読化フローチャート")
図2：SP800-88記載のストレージ難読化フローチャート（[1]のFigure 4-1を[2]の語句を使用して邦訳）

　なおSP800-88では、図2のどの方法で難読化した後でも「検証」を行って「（そのことを）文書として残す」ことまで定めています。

　そして、消去(Clear)、除去(Purge)、破壊(Destroy)の各難読化手段について、メディア（例：HDD、SSD）やプロトコル（例：SCSI、ATA、NVMe）に応じて具体的に使用すべき方法を示しています（図3、図4）。

![SP800-88記載のHDD難読化方法（抜粋）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/17e0bd7b-3eea-a31f-2190-9f1ddbc2345b.png "SP800-88記載のHDD難読化方法（抜粋）")
図3：SP800-88記載のHDD難読化方法（抜粋）

![SP800-88記載のSSD難読化方法（抜粋）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/575769df-21e4-00a0-2b6e-92c5115a846f.png "SP800-88記載のSSD難読化方法（抜粋）")
図4：SP800-88記載のSSD難読化方法（抜粋）

　前節でまとめた日本政府機関向けのガイドラインとは、内容の詳細度と明確さが雲泥の差です。
 
# ATA/NVMe SSD難読化に使用可能なコマンドのサポート可否確認方法（暗号的消去を除く）
　図4で示したSSDの難読化方法には、具体的なコマンド名およびコマンドの動作モードが記載されています。

　ここでは、ストレージがそれらのコマンドや動作モードに対応しているかどうかを確認する方法をまとめます。なお、暗号的消去(Cryptographic Erase)は次節でまとめますので除外します。暗号化消去にあたるのは、ATAの`CRYPTO SCRAMBLE EXT`コマンドとNVMeの`Format NVM`コマンドによる`Cryptographic Erase`です。

## ATA SSDの場合
　図4において、暗号的消去を除くATA SSDの難読化方法として挙げられているコマンドは2つです。それは`SECURITY ERASE UNIT`と`BLOCK ERASE EXT`です。

　`SECURITY ERASE UNIT`コマンドは、`Normal`と`Enhanced`という2つの動作モードを持つコマンドであり、ユーザデータが記録されている記憶場所を上書きするコマンドです。
　`Enhanced`モードでは「（以前ユーザデータが記録されていたが）今はユーザデータを記録していない記録場所」も含めてデータの上書きを行うことが既定されています。

　`BLOCK ERASE EXT`コマンドは、ユーザデータが記録されている記録場所の「ブロックの消去(Erase)」を行うコマンドです。
　このコマンドは、`SECURITY ERASE UNIT`コマンドの`Enhanced`モードのように、「（以前ユーザデータが記録されていたが）今はユーザデータを記録していない記録場所」も含めてブロックの消去を行うことが既定されています。
　SSDの場合「ブロックの消去」はNANDフラッシュメモリのブロックの消去(Erase)処理を行うことが想定されていると思われます。そのような実装のSSDに対して`BLOCK ERASE EXT`コマンドで難読化すると、NANDフラッシュメモリのユーザデータ格納領域のブロックの状態が全て消去状態に戻ることを意味します。

　あるATA SSDがこれらのコマンドをサポートしているかどうかは、`IDENTIFY DEVICE`コマンドの結果から判断できます。

　以下は、あるSATA SSDの`IDENTIFY DEVICE`コマンドの結果を、`hdparm`コマンドを使用して取得したものです。「★」マーク以降は説明のために私がつけたものです。

```
% sudo hdparm -I /dev/sdb
/dev/sdb:

ATA device, with non-removable media
	Model Number: .....
        ... (snip) ...
Configuration:
        ... (snip) ...
Capabilities:
        ... (snip) ...
Commands/features:
	Enabled	Supported:
	   *	SMART feature set
	   ... (snip) ...
	   *	SANITIZE feature set
	   *	BLOCK_ERASE_EXT command ★ ココ
	   ... (snip) ...
Security: 
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
		frozen
	not	expired: security count
		supported: enhanced erase ★ ココ
	2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT. ★ ココ
Logical Unit WWN Device Identifier: .....
        ... (snip) ...
Device Sleep:
	DEVSLP Exit Timeout (DETO): 30 ms (drive)
	Minimum DEVSLP Assertion Time (MDAT): 30 ms (drive)
Checksum: correct
```

　この`IDENTIFY DEVICE`コマンドの結果から、このSSDは、`BLOCK_ERASE_EXT`コマンドと`SECURITY ERASE UNIT`コマンドの`Enhanced`モードに対応していることがわかります。

　ちなみに、`CRYPTO SCRAMBLE EXT`コマンドに対応している場合は、上記`hdparm`による`IDENTIFY DEVICE`の実行結果に、以下のような形で表示されます。

```
Commands/features:
	Enabled	Supported:
	   ... (snip) ...
	   *	CRYPTO_SCRAMBLE_EXT command
	   ... (snip) ...
```

　ですので、このSSDは`CRYPTO SCRAMBLE EXT`コマンドには対応していないようです。

## NVMe SSDの場合
　図4において、暗号的消去を除くNVMe SSDの難読化方法として挙げられているのは、`Format NVM`コマンドによる`User Data Erase`です。

　`Format NVM`コマンドのサポートはオプションのため、まず対象のNVMe SSDが`Format NVM`コマンドをサポートしているかどうかを確認する必要があります。

　あるNVMe SSDが`Format NVM`コマンドをサポートしているかどうかは、コントローラに対する`Identify`コマンドの実行結果(CNS = 2)の結果でわかります。具体的には、"Optional Admin Command Support (OACS)"フィールドのビット1が`1`であれば`Format NVM`をサポートしていることになります。

![NVMe Revision 1.3d Identify Controller Data StructureのOACSフィールド定義](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/0df57420-64bd-c9c6-2a54-5d796bc65c50.png "NVMe Revision 1.3d Identify Controller Data StructureのOACSフィールド定義")
図5：NVMe Identify Controller Data StructureのOACSフィールド定義（仕様書<sup>[10]</sup>より抜粋）

　以下は、`nvme-cli`パッケージの`nvme`コマンドを使って、あるNVMe SSDのIdentify Controller Data Structureを取得した結果です。

```
% sudo nvme id-ctrl /dev/nvme0
NVME Identify Controller:
vid     : ...
... (snip) ...
oacs    : 0x17
... (snip) ...
```

　OACSフィールドの値が`0x17`（2進数で`0b00010111`）ですから、ビット1は`1`です。したがって、このNVMe SSDは`Format NVM`コマンドをサポートしていることがわかります。

　`Format NVM`コマンドで`User Data Erase`を指示するには、`Format NVM`コマンドの`Secure Erase Setting (SES)`に`User Data Erase`を設定する必要があります。

![Format NVMコマンドのSecure Erase Setting (SES)の定義](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/f3c66ed1-d0de-1591-b115-f2c5a56962d1.png "Format NVMコマンドのSecure Erase Setting (SES)の定義")
図6：Format NVMコマンドのSecure Erase Setting (SES)の定義（仕様書<sup>[10]</sup>より抜粋）

　なお、SP800-88の発行後にNVMeに追加された`Sanitize`コマンドも、図4の分類における「除去」の方法として適用できる可能性があります。なぜなら、NVMeの`Sanitize`コマンドはSCSIの`SANITIZE`コマンドをほぼそのまま流用した仕様だからです。

　つまり、図4のSCSI SSDの欄に`SANITIZE`コマンドの`BLOCK ERASE`が記載されているので、NVMeの`Sanitize`コマンドの`Block Erase`も「除去」の手段となり得る、ということです。

　あるNVMe SSDが`Sanitize`コマンドを、そして`Block Erase`をサポートしているかどうかは、コントローラに対する`Identify`コマンドの実行結果(CNS = 2)の結果でわかります。具体的には、"Sanitize Capabilities (SANICAP)"フィールドのビット1が`1`であれば、`Sanitize`コマンドを、そして`Block Erase`をサポートしていることになります。

![SanitizeコマンドのBlock Eraseサポート有無を示すIdentify Controller Data Structure](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/ad6a7a67-7da8-67ed-930d-8bcf59c16285.png "SanitizeコマンドのBlock Eraseサポート有無を示すIdentify Controller Data Structure")
図7：`Sanitize`コマンドのBlock Eraseサポート有無を示すIdentify Controller Data Structure（仕様書<sup>[10]</sup>より抜粋）

　あるNVMe SSDに対して、`nvme-cli`パッケージの`nvme`コマンドでIdentify Controller Data Structureを取得すると以下のようになりました。

```
% sudo nvme /dev/nvme0
NVME Identify Controller:
vid     : ...
... (snip) ...
sanicap : 0x3
... (snip) ...
```

　このNVMe SSDではSANICAPフィールドの値が`0x3`つまりビット0とビット1が`1`ですので、図7と照らし合わせると、`Sanitize`コマンドをサポートし、かつ`Block Erase`をサポートしていることがわかります。

# 暗号的消去(Cryptographic Erase)
　「暗号的消去」は、SP800-88に記載された難読化方法の中でも一番新しい方法です。

　この節では、主にSP800-88を引用しながら、「暗号的消去」についてまとめます。

## 暗号的消去とは何なのか、なぜ難読化の方法になるのか
**＜使用する暗号の強度が十分に高ければ、復号に必要な鍵がないだけでデータの復元が困難になる＞**

　「暗号的消去」とは、端的に言えば、「**暗号化されたデータを復号するための鍵を難読化する**」ことです。

　そもそも、「ある方法が難読化の方法として有効」であるには、「設定された状況（使用できる技術など）で、データの復元が困難（時間などのコストが見合わない）である」ことが必要です。

　それを踏まえ、SP800-88では、暗号化されたデータを「鍵なし」で復号する労力について、以下のように説明しています。

> The level of effort needed to decrypt this information without the encryption key then is the lesser of the strength of the cryptographic key or the strength of the cryptographic algorithm and mode of operation used to encrypt the data.
>
> _SP800-88 Rev.1, pp.9-10, 2.6 "Use of Cryptography and Cryptographic Erase"より引用_

　この文章では、「**鍵なしで復号するために必要な労力は、鍵の強度、データの暗号化に使用された暗号化アルゴリズム（と動作モード）の強度のどちらか小さい方になる**」と言っています。

　このことが、暗号的消去の本質に繋がります。

> If strong cryptography is used, sanitization of the target data is reduced to sanitization of the encryption key(s) used to encrypt the target data. Thus, with CE, sanitization may be performed with high assurance much faster than with other sanitization techniques. 
>
> _SP800-88 Rev.1, pp.10, 2.6 "Use of Cryptography and Cryptographic Erase"より引用_

　つまり、暗号的消去の本質は、**暗号化に使用している暗号の強度が十分であればデータの難読化は「暗号化（復号）鍵の難読化」に帰着させることができる**こと、なのです。

## 暗号的消去のメリット
　前述の通り、暗号的消去は「暗号の強度を前提に（暗号化・復号用）鍵を難読化すること」です。

　したがって、上書きなどの方法は一般的にストレージの容量に比例した時間がかかるのに対し、**暗号的消去処理はストレージ容量にかかわらずかつ十分に短い時間で完了する**ことがわかります。処理時間がストレージの容量に依存しないことは大きなメリットです。

　この他にも、「暗号的消去」を選択するメリットには以下のようなものがあります。

* 「破壊」は破壊用設備（設備の設置場所含む）が必要
* 「消磁」はHDDにしか適用できず、またHDDの技術発展に伴い適切な消磁方法が変わる可能性が高い
* 「破壊」と「消磁」はストレージが再利用不可能になるか再利用にコストがかかるため、SDGs（持続可能な開発目標）が重視される昨今では安易に適用すべきではない
* 「暗号的消去」を除く「除去」の方法（コマンド）は、ストレージ（ベンダもしくは製品）によってその挙動が異なる可能性がある
* 「暗号的消去」は**ストレージのデータ記憶の仕組みに依存した方法ではない**ため、どんなストレージでも同様の効果をあげることが期待できる

## 暗号的消去に必要なストレージの要件
　暗号的消去は、ストレージのデータ記憶の仕組みではなく「暗号の強度が十分である」ことに難読化方法としての有効性の根拠を置いています。

　したがって、**「使用している暗号化方法の強度が十分である」ことが第三者によって検証されていなければ成立しません**。

　SP800-88では、そのことについて、以下のように記述しています。

> The encryption itself acts to sanitize the data, subject to constraints identified in this guidelines document. Federal agencies must use FIPS 140 validated encryption modules in order to have assurance that the conditions stated above have been verified for the SED.
>
> _SP800-88 Rev.1, pp.10, 2.6 "Use of Cryptography and Cryptographic Erase"より引用_

　このように、暗号的消去の有効性を担保するために、SP800-88は**別の標準(FIPS 140<sup>[11]</sup>)を満たすことが検証された暗号化モジュールを使用すること、を要求しています**。

　暗号アルゴリズムの実装がFIPS 140の要件を満たすこと、そしてその暗号アルゴリズムの実装を実現するハードウェアおよびソフトウェア（暗号モジュール）がFIPS 140の要件を満たすこと、の検証および認証については、第三者認証制度が存在します。

　暗号アルゴリズムについては、NISTのCryptographic Algorithm Validation Program (CAVP)<sup>[12]</sup>というプログラムがあります。この認証試験では、FIPS 140-2で定められた暗号アルゴリズムに対する要件に対して、対象の実装方法がそれらの要件を満たしているかを検証します。

　そして、製品に搭載されたモジュール（ハードウェアおよびソフトウェア）については、米国とカナダの共同プログラムであるCryptographic Module Validation Program (CMVP)<sup>[13]</sup>、日本であればCMVPの日本版であり独立行政法人情報処理推進機構(IPA)が制定した「暗号モジュール試験及び認証制度 (JCMVP)<sup>[14]</sup>」というプログラムがあります。CMVPの認証を得るには、前提条件としてCAVPの認証を得ていることが必要です。

　CAVPについては、認証された実装の検索ができます（[こちら](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/validation)）。CMVPとJCMVPについては、認証されたモジュールの閲覧や検索ができます（CMVPは[こちら](https://csrc.nist.gov/Projects/cryptographic-module-validation-program/validated-modules/Search)、JCMVPは[こちら](https://www.ipa.go.jp/security/jcmvp/val.html)）。

　したがって、暗号的消去でストレージの難読化を行うには、上記の認証を取得した暗号モジュールを搭載した製品を使うべきである、ということになります。

　ちなみに、身近な製品では、AppleのiPhoneシリーズのカーネルモジュールが[CMVP認証を取得しています](https://csrc.nist.rip/groups/STM/cmvp/documents/140-1/1401val2017.htm#2828)。また、MicrosoftのWindows 10などに搭載されている暗号ライブラリも[CMVP認証を取得しています](https://csrc.nist.rip/groups/STM/cmvp/documents/140-1/1401val2017.htm#2937)。

　このことは、身近な製品でも暗号技術が使われていることの証左でもあり、第三者認証制度および第三者認証を取得することの重要性を示しているとも言えます。

## 米国と日本での政府調達要件の違い
　米国連邦政府調達では、FIPS 140の要件を満たす暗号モジュール（が搭載された機器）によって機密データを保護することが**必須要件です**<sup>[13]</sup>。つまり、この要件に従って調達されたストレージが暗号化消去をサポートしていれば、それがSP800-88の求める暗号化消去の要件を満たしていることも自動的に保証されます。

　一方日本の政府調達要件では、「要機密情報を取り扱う情報システムについては、暗号化を行う機能の必要性の有無を検討し、必要があると認めたときは、当該機能を設けること。」としか記述がありません（統一基準<sup>[1]</sup> 6.1.5「暗号・電子署名」(1)(a)（ア）より引用）。言い換えると**必須要件ではありません**。

　つまり、たとえ個人情報のような機密情報が保存されるストレージであっても、その強度がJCMVP等の第三者によって検証された暗号モジュールを搭載するストレージを調達する義務はありません。結果として、機密情報が保存されたストレージの廃棄時に適切な暗号的消去を実施できないことがあり得ます。

## 暗号的消去を行うコマンド
　最後に、図3および図4と重複しますが、ATA (SATA)、SCSI、NVMeの各プロトコルに準拠したストレージにおいて、暗号的消去を行うためのコマンドを示します。

![暗号的消去を行うコマンド](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/01a9cda8-e42c-f9e2-c292-5123d1aa70b6.png "暗号的消去を行うコマンド")
図8：暗号的消去を行うコマンド

　図8の通り、ATA、SCSI、NVMeのいずれの規格にも、暗号的消去を行うコマンドが規定されています。ただし、規格によって暗号化消去を行うにあたり準備や前提条件等の細かい違いがあり、注意が必要です。

　それら規格に依存した細かい違いにとらわれることなく統一された方法で暗号的消去を行う方法として、Trusted Computing Group (TCG)が定めたSecurity Subsystem Class (SSC)の機能を使用する方法があります。

![各規格でTCG SSCの処理をするための方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/0c47b22c-29a2-cdf4-f6db-d7bafd7e7219.png "各規格でTCG SSCの処理をするための方法")
図9：各規格でTCG SSCの処理をするための方法

　図9に示した通り、ATA、SCSI、NVMeはいずれも、ホストとストレージの間でTCG SSCで定義された処理を行うための仕組みを定義しています。いわゆる「トンネリング」にあたります。

　ホスト上で動作するソフトウェアと、ストレージ上で動作するTCG SSCの処理モジュールは、これらのコマンドを使ってデータのやり取りを行い、TCG SSCの処理を実現します。

　TCG SSCでは、ストレージに作成した領域(LBA Range)に対して、暗号化鍵の設定や暗号化鍵変更可否の設定が可能です。この仕組みを利用して「暗号化鍵を変更する」ことが暗号的消去に相当します。

　HDD/SSDのカタログスペックに「TCG Opal対応」などと記載されているストレージは、ホスト側で動作するソフトウェアと組み合わせることで、TCGのSSCで定められた機能を使用できることになります。

# まとめ
　この記事では、ストレージ廃棄時のような、ストレージがオフライン（非通電状態）でのデータ流出（物品流出時）に論点を絞り、データ流出に対する根本的な対策である「難読化」について説明しました。

　記事内でも説明した通り、記事執筆時点では、日本国内のガイドラインよりも米国連邦政府向けのガイドラインに従って運用したほうがより安全である、と言えます。

　記憶媒体やインターフェース・プロトコル技術がどんどん進化する中で、適切に検証された暗号モジュールを使った「暗号化消去」は、「その安全性が記録技術に依存しない」という意味で、他の方法と比較して効果的でかつ低コストな難読化方法であると言えます。

　なお、実際にストレージの廃棄時に暗号的消去によって難読化を行うには、今回説明したように第三者認証を得ている暗号モジュールを搭載した製品を導入する必要があることや、ストレージ導入時からストレージの暗号化を行う必要があること、さらには暗号鍵（≒アクセス権）の適切な管理が必要であることなど、システム設計時からストレージのライフサイクルという視点で検討に加えなければなりません。

# Reference
[1] サイバーセキュリティ対策本部、「[政府機関等の情報セキュリティ対策のための統一基準（平成30年度版）](https://www.nisc.go.jp/active/general/pdf/kijyun30.pdf)」[PDF]、2018年7月25日
[2] サイバーセキュリティ対策本部、「[政府機関等の対策基準策定のためのガイドライン（平成30年度版）](https://www.nisc.go.jp/active/general/pdf/guide30.pdf)」[PDF]、2018年7月25日
[3] 一般社団法人 電子情報技術産業協会(JEITA)、「[パソコンの廃棄・譲渡時におけるハードディスク上のデータ消去に関する留意事項](https://home.jeita.or.jp/page_file/20181025154114_OcyNEMuIAs.pdf)」[PDF]、2018年10月（2020年2月4日閲覧）
[4] 一般社団法人 コンピュータソフトウェア協会(CSAJ)、「[データ消去証明 ガイドブック](https://www.csaj.jp/documents/NEWS/committee/datadelete/datadelete_guidebook_20170614.pdf)」[PDF]、2017年6月（2020年2月4日閲覧）
[5] データ適正消去実行証明協議会(ADEC)、「[データ消去技術 ガイドブック](https://adec-cert.jp/guidebook/pdf/DATAWIPEGUIDEBOOK.pdf)」[PDF]、第2版、2019年7月（2020年2月4日閲覧）
[6] 特定非営利活動法人 デジタル・フォレンジック研究会、「[証拠保全先媒体のデータ抹消に関する報告書](https://digitalforensic.jp/home/act/products/data_report/)」、2016年4月（2020年2月4日閲覧）
[7] National Institute of Standards and Technology, [_"Guidelines for Media Sanitization"_](https://csrc.nist.gov/publications/detail/sp/800-88/rev-1/final), SP800-88, Rev. 1, December, 2014
[8] National Institute of Standards and Technology著、独立行政法人情報処理推進機構、NRIセキュアテクノロジーズ（株）訳、[_「媒体のサニタイズに関するガイドライン(Guidelines for Media Sanitization)」_](https://www.ipa.go.jp/files/000025355.pdf) [PDF]、SP800-88, September, 2006
[9] T13, _"Information technology - ATA Command Set - 4 (ACS-4)"_, Revision 14, October 2016
[10] NVM Express, _"NVM Express<sup>TM</sup> Base Specification"_, Revision 1.3d, March 20, 2019
[11] National Institute of Standards and Technology, [_"Security Requirements for Cryptographic Modules"_](https://csrc.nist.gov/publications/detail/fips/140/3/final), FIPS 140-3, March, 2019
[12] National Institute of Standards and Technology, [_"Cryptographic Algorithm Validation Program"_](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program), 2020年2月10日閲覧
[13] National Institute of Standards and Technology, [_"Cryptographic Module Validation Program"_](https://csrc.nist.gov/projects/cryptographic-module-validation-program), 2020年2月10日閲覧
[14] 独立行政法人 情報処理推進機構(IPA)、「[暗号モジュール試験及び認証制度 (JCMVP)](https://www.ipa.go.jp/security/jcmvp/index.html)」、2020年2月10日閲覧

# ライセンス表記
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />この 作品 は <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンス</a>の下に提供されています。