SSDのスクランブル処理

SSDのスクランブル処理

この記事で紹介している製品

おことわり

 この記事は、2022年9月にQiitaに投稿した記事を加筆修正したものです。

はじめに

 NANDフラッシュメモリを記憶媒体とするSolid State Drive (SSD)に記録されたデータへの不正アクセス対策としてセキュリティを高める方法には、Advanced Encryption Standard (AES)などによる暗号化が知られています。

 実は、SSDの暗号化を有効にせずにSSDにデータを書き込んだ場合でも、SSDに搭載されたNANDフラッシュメモリにはSSDコントローラにより加工されたデータが記録されます。生データがそのまま記録されているわけではありません。この加工処理のことをスクランブルランダマイズと呼びます。

 このとき加工されたデータはNANDフラッシュメモリメーカーの規定する性質を備えなければならず、SSDコントローラしか知り得ない様々なパラメータを用いて計算されます。このため、NANDフラッシュメモリに記録された(加工された)データを読み出して、そのデータを生成したSSDコントローラの力を借りずに元のデータを復元するという攻撃はほぼ成功しません。

 ただし、上記データ加工の本来の目的はNANDフラッシュメモリに記録したデータの信頼性向上(低下抑制)であり不正アクセス対策(難読化)ではないことに注意が必要です。

 今回の記事では上記「NANDフラッシュメモリにデータを書き込む際のデータ加工」を説明します。

まとめ

  • ホストがSSDに書き込んだデータはスクランブルされてNANDフラッシュメモリに書き込まれる
  • スクランブルはNANDフラッシュメモリの寿命を最大限活用するために必須
  • スクランブルはSSDコントローラの機能でありコントローラなしでのデータ復元は困難だが、不正アクセス対策機能ではないことに注意

SSD内部のデータの流れ

 図1は、SSDの中でデータがどのように処理(加工)されてホストとNANDフラッシュメモリの間を行き来するか(データパス)のイメージを示したものです。この図は、2019年に開催されたFlash Memory Summitでの講演資料[1]を参考に作成したものです。

図1:SSDにおけるデータパス(イメージ)

 なお、全てのSSDが図1に示した全ての機能を有するわけではありません。また機能を有していても図1と同じ順番に繋げられているとも限りませんのでご注意ください。

 各機能の概要は以下の通りです。

  • End-to-End Data Path Protection:NANDフラッシュメモリを除くSSD内部で発生するデータ誤りの包括的検出用機構。Cyclic Redundancy Check (CRC)符号が多い。
  • Compression:圧縮エンジン。NANDフラッシュメモリに書き込むデータサイズの削減が目的。使用するアルゴリズムにより特性は異なる。
  • Encryption:暗号エンジン。AESが多い。
  • ECC:誤り訂正エンジン。最新の3D NANDフラッシュ向けではLow Density Parity Check (LDPC)符号が一般的。
  • Scrambler:スクランブラ。NANDに書き込むデータがNANDメーカー規定の特徴を有するように加工(スクランブル)する。

 このうちEnd-to-End Data Path Protection(以降E2EDPPと記載)とECCのエンコーダは、入力データをエンコードして誤り検出に用いるパリティを出力するものです。入力データを加工するものではありません。

 これに対し、圧縮、暗号、スクランブラ、の3つは、入力データを加工したデータを出力します。つまり、入力データと出力データが異なります。

一般的なSSDの場合

 私たちが店頭で購入できるようなSSDは、出荷状態ではE2EDPPなし、圧縮なし、暗号化無効、という設定の製品が多いです。そのようなSSDでは、ホストからデータを書き込む際のデータの流れが図2のようになります。

図2:ECCとスクランブルのみが有効なSSDにおけるデータパス(イメージ)

 ホストから書き込まれたデータは、スクランブラに入力されるまで加工されることはなく、ホストから書き込まれた値をそのまま維持します。スクランブラは入力データ(=ホストから書き込まれた生データ)をNANDフラッシュメモリへの書き込みに適したデータに加工します。

 このため、ホストからどのようなデータが書きこまれても、SSDのNANDフラッシュメモリにはスクランブラにより加工されたデータが書き込まれます。例えば、ホストからオール0やオール1のデータが書き込まれても、NANDフラッシュメモリにオール0やオール1のデータが書き込まれることはありません

スクランブルの目的

 上記の通り、スクランブラは、NANDフラッシュメモリにデータを書き込む直前に位置し、NANDフラッシュメモリに書き込むデータがNANDフラッシュメモリメーカー規定の性質を備えるようにデータを加工します。

 スクランブルの目的は、NANDフラッシュメモリに記録したデータの信頼性向上(低下緩和)と、NANDフラッシュメモリ(メモリセル)の長寿命化です。

 そもそも、メーカーから示されるNANDフラッシュメモリの仕様に記載される記録したデータの信頼性(データ保持特性)と寿命(書き換え回数)は、スクランブラにより適切に加工されたデータがNANDフラッシュメモリに書き込まれることが前提です

 スクランブラにより加工されたデータに求められる性質は、NANDフラッシュメモリメーカーにより異なりますが、少なくとも0と1の出現頻度に偏りがないデータであることです。

 書き込むデータにこの性質が求められる理由として、隣接ワードライン(のメモリセル)間の影響平準化が挙げられます。そしてあるワードラインに注目した場合に特定のメモリセルに高い電圧(負荷)がかかり続けることを避けて全てのメモリセルにできるだけ少ない回数でかつ均等に負荷をかけること、も挙げられます。つまり「ミクロなウェアレベリング」と言えます。

 隣接ワードライン間の影響とは、NANDフラッシュメモリの構造に起因するものです。図3は3D NANDフラッシュメモリのワードラインとメモリセルの簡略化した構造イメージです。

図3:3D NANDフラッシュメモリのワードラインとメモリセルの関係(イメージ)

 3D NANDフラッシュメモリは、図3のようにワードラインが何層にも積層されていて、ワードラインを貫いた場所(より正確には貫いた側壁部分)にメモリセルが構成されます。

 このメモリセルに対して「隣接メモリセル」が定義されます。図3の例では、メモリセルAの隣接メモリセルを、両隣のワードラインのメモリセルと同じワードラインの両隣のメモリセルの合計8つとしています。

 あるメモリセルに対してどのメモリセルが影響を考慮すべき隣接メモリセルなのかは、NANDフラッシュメモリメーカーやメモリの世代により異なります。

 この隣接メモリセルが重要なのは、隣接するメモリセル間の距離および隣接するワードライン間の距離が短くなることで、あるメモリセルにデータを書き込む際に隣接メモリセルの状態(蓄えられた電荷、つまり記録されたデータ)の影響を受けやすくなるからです。

 図3のメモリセルAに注目した際に、隣接メモリセルであるメモリセルa~hが蓄えられた電荷が多い(=電圧が高い)メモリセルばかりだと、メモリセルAの電圧もそれらに影響を受けて高くなり、結果的にメモリセルAに意図したレベルに書き込めないもしくは書き込まれたデータの信頼性が低下します。

 このような隣接メモリセル間の影響をできるだけ平準化するためにスクランブルが必要になります。

 一方、メモリセルに高い電圧(負荷)がかかり続けるのを避けることは、NANDフラッシュメモリに蓄えられた電荷と記録されたデータの対応関係に起因します。

 図4は、TLC NANDフラッシュメモリにおける、セルが蓄える電荷(=電圧レベル)と対応する値の対応関係(エンコーディング)の例[2]です。

図4:TLC NANDフラッシュメモリにおけるメモリセルの電圧レベルと対応する値の例

 図4のエンコーディングを採用したNANDフラッシュメモリに「オール1」のデータを書き込み続けると、メモリセルには毎回「電圧レベルF」相当の電圧つまり負荷がかかります。「電圧レベルF」は相対的に高い電圧であり、メモリセルにとり強い負荷です。

 メモリセルに強い負荷をかけ続けるとメモリセルのデータ保持特性が悪化しますので、記録したデータの信頼性が低下し、かつメモリセルの寿命が短くなります。

 ただ、どのようなデータがホストから与えられてもNANDフラッシュメモリの全てのメモリセルにかける電圧を常に低くすることは無理ですので、いずれかのメモリセルの電圧レベルが低い時にその代わりにほかのいずれかのメモリセルにかかる電圧が高くなることはやむを得ません。

 このような理由から、NANDフラッシュメモリメーカーは、メモリセルに書き込むデータ(電圧レベル)に対して、全ての電圧レベルの出現頻度に偏りがないことを求めるわけです。

 このスクランブルにより、ホスト視点では同じデータを同じアドレス(LBA)に書く(上書きする)場合、よりNANDフラッシュメモリに近い視点では同じ元データ(スクランブル前のデータ)を同じアドレス(NANDフラッシュメモリ上の位置)に書く場合でも、毎回異なるデータが書き込まれます。

スクランブルはコントローラの役目

 このように、スクランブルはNANDフラッシュメモリを優しく使用して寿命を最大限引き出すために重要な機能です。3次元化して構造が複雑化を増した最近のNANDフラッシュメモリでは、スクランブル時に考慮が必要な要素も増えています。

 スクランブルを実行するのは、図1と図2に示した通りSSDコントローラです。実際には、周期の長い系列を生成する数式(生成多項式)の利用やテーブル(表)の参照などにより、NANDフラッシュメモリメーカーが示す要求を満たすような偏りのない疑似乱数系列を生成して加工に利用します。

 結果として、NANDフラッシュメモリに記録されたデータは、そのデータを書き込んだコントローラでなければ元データつまりホストからSSDに書き込まれたデータを復元することが困難なものになります。

 つまり、SSDからNANDフラッシュメモリだけを剥がして記録されたデータを読み出し、スクランブルされる前のデータ(生データ)を盗む、ということはとても難しいのです。

おわりに

 今回の記事では、「SSDのNANDフラッシュメモリに書き込まれているデータはホストから書き込まれたデータそのもの(生データ)ではない」ということを説明しました。これはSSDコントローラが行うスクランブルという処理によるものです。

 一見、不正アクセス対策(セキュリティ)に有効であるように見えますが、スクランブルによるデータ加工の本来の目的はNANDフラッシュメモリに記録したデータの信頼性向上であることに注意が必要です。

Reference

[1] Roman Pletka, “NAND Flash Media Management Algorithms,” Flash Memory Summit 2019, Santa Clara, CA, August 2019
[2] Shun Suzuki, et al., “Endurance-based Dynamic VTHDistribution Shaping of 3D-TLC NAND Flash Memories to Suppress Both Lateral Charge Migration and Vertical Charge De-trap and Increase Data-retention Time by 2.7x”, in Proceedings of 48th European Solid-State Device Research Conference (ESSDERC), pp.150 — 153, Dresden, Germany, October 2018

他社商標について

 記事中には登録商標マークを明記しておりませんが、記事に掲載されている会社名および製品名等は一般に各社の商標または登録商標です。

記事内容について

 この記事の内容は、発表当時の情報です。予告なく変更されることがありますので、あらかじめご了承ください。