セキュアリッピング概説

セキュアリッピング (Secure Ripping) やセキュアリッパー (Secure Ripper) に関する日本語の解説が無いようなので、適当に書いてみました。

2010/12/27 初稿
2011/8/15 加筆修正

セキュアリッピングとは

セキュアリッピングとは、CDを正確にコピーするために

を行うことであり、これらが可能なソフトウェアをセキュアリッパーと呼ぶ。なお、セキュアリッパーはオフセット訂正機能を備えているものが多いが、これはあくまでもドライブによる読み出し開始位置の差異を吸収するための機能であり、この機能の有無がセキュアリッピングの性能を左右する訳ではない。

一般的にディスクの状態はおよそ次の3つに分類できる。

  1. エラーが起こらない、状態の良いディスク
  2. エラーが起こったり起こらなかったりする、あまり状態の良くないディスク
  3. 常にエラーが起こる、状態の悪いディスク

これらのうち、セキュアリッピングが特に効果を発揮するのは2.のケースである。1.のようにエラーが起こらなければ、当然ながらどんなリッパーでも結果は変わらないし、逆に3.のように常にエラーが起こるほど状態の悪いディスクは、セキュアリッピングを行おうと正しく読み込むことはできない。また、現実的には状態の良いディスクでもホコリ等により偶発的なエラーが起こる可能性は0ではないので、

という点がセキュアリッピングの通常のリッピングに対する利点ということになるだろう。

読み込みエラーが発生したセクタの検出

CDドライブでは読み込みの際に二重のリードソロモン符号によるエラー訂正が行われており、二回の訂正で消えないエラーをC2エラーと呼ぶ。オーディオCDにおいては、C2エラーの発生はデータの破損と等価であり、C2エラーを読み込みエラーと定義する。なお、二回目の訂正で消えたエラーをC2エラー、消えないエラーをCUエラーとする定義もあるが、少なくともMMCのREAD CDコマンドで取得できる "C2 error bits" は多くのドライブにおいて訂正不可能なエラーの情報であり、リッパーソフトは "C2エラー = 訂正不能なエラー" という認識で動作する。

MMC準拠のドライブにおいては、CDから1セクタ (2352バイト) を読み込む際に294バイト (2352ビット) のエラーフラグを同時に取得することができ、バイト精度でC2エラーの発生位置を知ることができる。iTunesのCD読み込みの際のエラー訂正機能は、おそらくこれを利用して再読み込みを行っているのではないかと推測される。一見、これを使えば容易にエラーの検出が可能であるように思われるが、問題は、このC2エラーの情報がドライブによっては取得できないこと、そして取得できても必ずしも正確ではない (しばしばエラーの発生を見逃すドライブが存在する) ことである。そのため、多くのセキュアリッパーでは、標準設定ではドライブから提供されるC2エラー情報を信頼せず、参照しないようになっている。

では、C2エラー情報を用いずにどのようにして読み込みエラーを検出するかというと、同じセクタを2回読み出し、データを比較する事である。セキュアリッパーは読み込みエラーが発生した場合、データはランダムな誤りを含んでいるという仮定のもとで動作するため、2回の読み出しで不一致があった場合はそのいずれか、もしくは両方のデータに誤りが含まれていると判断する。この方法の弱点はランダムな誤りを仮定するために、システマティックな誤り (常に同じ誤りが起こるケース) を見逃してしまう事であるが、現実的には傷やホコリにより発生するエラーのほとんどは前者であり、実用上の問題はないとされている。

なお、データCDは1セクタの2352バイトのデータ領域を2048バイトに削り、残りをエラー検出/訂正等の用途に割り当てている。つまり、C1/C2に加えてもう一段階のエラー訂正機構が存在し、C2エラーが発生してもデータを正常に読み出せる可能性がある (これが理由でCD-ROMドライブにおいてC2エラー報告が正確に行われない実装が多いとする意見もある)。

エラーセクタに対する統計的なエラー訂正

エラーが発生しているセクタを検出したら、そのセクタに対してエラー訂正を行う。ディスクが激しく損傷している場合、エラーが発生しているセクタを回復する事は不可能であるが、軽度の傷や汚れによるエラーは読み込む度に起こったり起こらなかったりと状況が変わる事が多い。前項の仮定で述べたように、ドライブはエラーが起こらなければ常に決まったデータを返すが、エラーが発生した時は補間等によりランダムにデータが変化している可能性が高いため、何度か読み込みを繰り返して一定数の全く同一のデータが集まれば、セキュアリッパーはそれを正しいデータと見なす。セキュアリッパーは、エラーを検出したセクタに対して再読み込みを行い、このような統計的な処理を施す事によりエラー訂正を行っている。

なお、ここでもC2エラー情報が信頼できれば、C2エラーが0になるまで再読み込みを繰り返すという単純な方法で同様の結果を得る事ができる。

キャッシュの無効化

セキュアリッパーでは、これまでに述べたエラーの検出や統計的なエラー訂正を行うために、同じセクタを何度も読み出すことを行っている。しかし、この際にリードキャッシュ (CD-Rドライブの書き込みキャッシュとは異なる) の存在を考慮しなければならない 。1回の読み込みがこのキャッシュに収まってしまうと、その後の再読み込みはキャッシュから読まれてしまい、常に同じデータが得られる。これではC2エラー情報に頼らない場合はエラーの検出が不可能で、統計的な処理も意味が無くなるので、必ずキャッシュを無効化する必要がある。

キャッシュを無効化する方法はいくつか存在するが、代表的な方法を2つ挙げる。一つは単純にキャッシュの容量より多くのセクタを一度に読み込む方法で、これを行えば確実にキャッシュを無効化できる。欠点は、キャッシュの大きさがドライブにより様々 (0から数百セクタ) なので、全てのドライブに対応するためには読み込むセクタ数をある程度大きく設定しなければならないことである。1セクタのみ読み込みたい時にもキャッシュを無効化できる分だけ読まなければならないので、場合によっては効率が悪くなる。もう一つはシークを利用する方法。多くのドライブは読み込むセクタの位置が大きく前に戻ると、キャッシュがフラッシュされる挙動を示す。これを利用して、再読み込みを行う前に予め前方のセクタを1セクタでも読んでおけば、その後の読み込みはキャッシュの影響を受けない。多くのソフトは前者を利用しており、CDParanoiaは後者も併用している。

ジッターエラーの抑制

キャッシュを無効化できても、まだ問題がある。再読み込みのためにシークを頻繁に行うと、ドライブによってはセクタの開始位置を (数サンプル単位で) 間違えることがあり、これをジッターエラーと呼ぶ。これは読み込みエラーとは別だが、何も対処をしないと結果的に誤ったデータを読み出してしまうので問題である。癖のあるドライブではジッターエラーを一度起こすとその後の再読み込みで連続して起こすこともあり、確実に抑制するためにはドライブの速度を落とす必要がある。これはいわゆる "Accurate Stream" 能力のあるドライブでは起こらないとされているが、個人的な経験では "Accurate Stream" 能力があってもディスクの状態が悪いと起こるドライブがある。なお、ここでいうジッターはディスク表面の物理的なピット/ランド長の揺らぎ (いわゆるEFMジッター) とは無関係である。

結果の検証と報告

全く読み込めないセクタや、統計的なエラー訂正に失敗したセクタがあれば報告する。しかし一般的には、これらのエラーが発生していないということだけでは正確にコピーできた証拠にはならず、次に挙げるチェックサムを用いた検証を行う。

テスト&コピー

同じトラックを2回読み込み、2つのチェックサムが一致している事を確認する方法。エラー検出と同じく2回同じデータが得られれば正しいであろうという前提に基づく。

AccurateRip

読み込み結果のチェックサムをオンラインのデータベースと照合する方法。読んでいるCDがデータベースに登録されている必要があるが、他人の結果と比較するので信頼性が高い。ソフトによっては、プレスの違い等によりオフセットのみがずれているものも正しく照合できる。AccurateRip2も機能自体は同じだが、ハッシュ関数の変更によりチェックサムの衝突の可能性が低くなった (オリジナルのAccurateRipのハッシュ関数の実装にはかなり酷い欠点がある)。

これらの検証を経て、ようやく正確にコピーできたという確証が得られる。ソフトによってはさらに細かい情報を表示する事もあり、例えばEACでは再読み込みが行われたセクタの数によってqualityというスコアを変化させている。

Q&A

Q. セキュアリッパーを使うとiTunesとかを使うより音が良くなるの?
A. いいえ。セキュアリッパーは正確に元のCDのデータを読み込むことが目的で、音質を改善するための手段ではありません。当然、他のソフトで発生していた読み込みエラーがセキュアリッパーを使うことで低減されることはあります。しかし、エラーは発生した箇所での瞬間的な音飛びやノイズとして聞こえるので、「音がクリアになる」「音に広がりが出る」といった効果が出る事はありません。
Q. AccurateRipを使うと音質が良くなるの?
A. いいえ。AccurateRipは読み込んだデータのチェックサムを他人の結果と比較する事でエラーの発生の有無を確認する手段であり、音質に影響する事はありません。
Q. じゃあなんでセキュアリッパーを使うの?
A. 正確にコピーを行いたいからです。セキュアリッパーでは多少状態が悪いディスクでも正確に読み出せる可能性があります。セキュアリッパー以外では、エラーの発生状況を知る事すらできません。