共通スクランブリングアルゴリズム(CSA)は、DVBデジタルテレビ放送においてビデオストリームを暗号化するために使用される暗号化アルゴリズムです。
CSAはETSIによって規定され、1994年5月にDVBコンソーシアムによって採用されました。128ビットAESと機密ブロック暗号XRCを組み合わせたCSA3 [ 1 ]が後継として開発されています。しかし、CSA3はまだ広く使用されていないため、CSAはDVB放送を保護するための主要な暗号として引き続き使用されています。
CSAは2002年までほとんど秘密にされていた。特許文書にはいくつかのヒントが示されていたものの、いわゆるSボックスの配置といった重要な詳細は秘密のままだった。これらがなければ、アルゴリズムの自由な実装は不可能だった。当初、CSAはハードウェアのみで実装される予定だったため、既存の実装をリバースエンジニアリングすることは困難だった。
2002年にFreeDecがリリースされ、CSAがソフトウェアで実装された。バイナリのみのリリースだったが、逆アセンブルによって欠落していた詳細が明らかになり、より高水準のプログラミング言語でアルゴリズムを再実装することが可能になった。
CSAの全容が公に知られるようになったことで、暗号解読者たちは脆弱性の探索を開始した。
CSAアルゴリズムは、ブロック暗号とストリーム暗号という2つの異なる暗号で構成されています。
暗号化モードで使用する場合、データはまずパケットの末尾から64ビットブロック暗号(CBCモード)で暗号化されます。その後、パケットの先頭からストリーム暗号が適用されます。
ブロック暗号は、64ビットのブロックを56ラウンドで処理します。各ラウンドでは、拡張鍵から8ビットを使用します。
![]()
ストリーム暗号の最初の32ラウンドは初期化に使用され、出力は生成されません。この段階では、データの最初の64ビットが初期化ベクトルとして使用され、変更されません。その後、ストリーム暗号は各ラウンドで2ビットの擬似乱数ストリームを生成し、パケットの64ビット目からXOR演算を行います。
![]()
CSAが破られた場合、暗号化されたDVB伝送が解読可能になり、有料デジタルテレビサービスが危険にさらされることになる。なぜなら、DVBはヨーロッパをはじめとする世界各地の地上デジタルテレビ放送の標準規格であり、多くの衛星テレビ事業者でも使用されているからである。
有料テレビシステムに対する攻撃のほとんどは、CSA自体を標的としたものではなく、CSAキーを生成する様々なキー交換システム( Conax、Irdeto、Nagravision、VideoGuardなど)を標的としており、アルゴリズムをリバースエンジニアリングして完全に破壊するか、正規のデコーダで生成されるキーをリアルタイムで傍受し、それを他者に配布する(いわゆるカード共有)かのいずれかの方法で行われています。
CSAのストリーム暗号部分は、ビットスライシングというソフトウェア実装技術に対して脆弱である。この技術は、複数のブロック、あるいは同じブロックを複数の異なる鍵で同時に復号することを可能にする。これにより、ソフトウェアで実装された総当たり攻撃の速度は大幅に向上するが、実用的なリアルタイム攻撃にはその速度向上率は低すぎる。
ブロック暗号部分は、Sボックスが大きすぎる(8x8)ため、論理演算を使用して効率的に実装することが難しく、ビットスライスが通常の実装よりも効率的になるための前提条件が満たされません。しかし、すべての演算は8ビットのサブブロックに対して行われるため、このアルゴリズムは通常のSIMD、または「バイトスライス」と呼ばれる形式を使用して実装できます。ほとんどのSIMD命令セット(AVX2を除く)は並列ルックアップテーブルをサポートしていないため、Sボックスのルックアップはバイトスライスを使用しない実装で行われますが、アルゴリズムの残りの部分への統合はバイトスライスによって著しく妨げられることはありません。
これらの技術はどちらも、CSAのフリー実装であるlibdvbcsaで使用されています。
暗号解読は、ほとんどのデータがブロック暗号とストリーム暗号の両方で保護されているため、より困難になります。適応コードによって、一部のデータがブロック暗号またはストリーム暗号のみで保護されたパケットが生成される可能性があります。[ 2 ]
CSAアルゴリズムは64ビット鍵を使用しますが、CAシステムでは3バイト目と7バイト目がパリティバイトとして使用され、容易に再計算できるため、ほとんどの場合、鍵のうち48ビットだけが不明です。これにより、基となる平文構造に関する知識と組み合わせることで、既知平文攻撃が可能になります。PESヘッダーの最初の3バイトは常に0x000001であるため、総当たり攻撃を実行できます。このような攻撃では数百万の鍵候補が明らかになりますが、それでも十分少ないため、2回目の試行で同じ鍵を使用してデータの他の部分を復号し、真の鍵を復元することが現実的です。
2011年、ドイツの研究者グループがDVBシステムで使用されているCSAに対する攻撃[ 3 ]を公開しました。MPEG-2のパディングでは、しばしば長いゼロ列が必要となり、184バイトのセル全体がゼロのみで暗号化されることに着目し、そのような既知のゼロブロックから鍵を復元するレインボーテーブルを構築することが可能です。(同じ暗号文を持つ2つのブロックが見つかった場合、両方ともゼロブロックであると想定されるため、ブロックがゼロであると判明します。)この攻撃には約7.9TBのストレージが必要で、GPUを持つ攻撃者は約7秒で96.8%の確実性で鍵を復元できます。ただし、この攻撃は、そのようなすべてゼロのパディングブロックが存在する場合(つまり、動きやノイズが非常に少ないシーン)にのみ有効であり、例えばそのようなすべてゼロのセルを暗号化せずに送信することで容易に軽減できます。
これは、既に述べた総当たり攻撃の例とは異なり、ブロックの一部だけでなく、セル全体の平文の内容が攻撃前に既知であるため、レインボーテーブルを事前に計算することが可能になります。
2004年に、ブロック暗号に対するフォールト攻撃[ 4 ]が発表された。基本的なアイデアは、中間計算に意図的にいくつかのフォールトを導入し、最後の8ラウンドの鍵を推測できるようにするというものだった。これによって最終鍵を計算できる。
必要な欠陥はごくわずか(平均して、復元された鍵1ラウンドあたり2~3個)であるものの、欠陥攻撃は通常、実行が非現実的である。なぜなら、問題の鍵を既に保持しているデコーダのハードウェア内部のビットを自由に変更できる能力が必要となるからである。