- キット各種完売。
- msBerryDAC改造情報
2007/02/15(木)AACSがDVD暗号化のように無力になったわけではない
AACSが解読(解析)されたと騒ぎすぎで、どこにも正確な情報が見あたらないので書いておきます。もっと詳しい方、捕捉・訂正願います。
AACSの仕組み
タイトルキー(Title Key)
HD DVDやBlu-rayに納められている映像データ(等)はタイトルキーというもので暗号化されています。キーというのはパスワードみたいなものです。例えば、暗号化zipなどを触れたことのある人も居ると思いますが、その中身を見るためには「暗号文」を知らなければなりません。
つまり、映像データを見るためには何らかの手段でタイトルキーを知る必要があります。タイトルキーは製品1つ1つで全部違います。以前AACSが破られたと話題になったときは、このタイトルキーを「再生ソフトをクラックするなりなんなりして入手したリストが公開された」というだけの話です。リストにない映像ソフトは結局再生できないので、さしたる問題ではありません。
ボリュームキー(Volume Unique Key)
タイトルキーを暗号化している鍵です。
メディアキー(Media Key)
ボリュームキーを生成するのに必要な鍵です。メディア固有の鍵となります。そのメディア(映像ソフト)のメディアキーを入手することで、ディスクに納められている映像をみることができます。
メディアキーは暗号化された状態でディスクに格納されています。これをメディアキーブロック(MKB)と呼びます。
デバイスキー(Device Key)
メディアキーブロックからメディアキーを取り出すための鍵がこのデバイスキーです。デバイスという名前からも分かるとおり、再生ソフトや再生装置1つずつにすべて違った鍵が渡されており、この鍵を受け取るときに「絶対漏れないようにするのでお願いですからデバイスキーをください」といった約束をさせられます。
今回の一件で発見されたと言われているプロセッシングキー(Processing key)というのは、おそらくこのデバイスキーを示すものと思われます。話の流れとしては、「再生ソフトの動きを追っていたら、デバイスキーを見つけてしまった」というわけです。つまり、現存するどんなメディアの映像もこれで復号することができるというわけです。
でもHD DVDやBlu-rayの暗号化が無効になったわけではない
一見、話が矛盾してるよう見えますが、そんなことはありません。たしかに、現存するどんなメディアも再生可能かも知れませんが、これから未来に出るメディア(映像ソフト)は現状では復号不可能です。
仕組みの説明でメディア固有のメディアキーはデバイスキーで暗号化されていることを述べましたが、デバイスキーはすべての再生装置で異なることも述べました。無数の種類があるデバイスキー(再生装置)から同じメディアキーを取り出すための仕組みが重要なのてす。
メディアキーを暗号化して納めているメディアキーブロック(MKB)には、何千~何万種類*1のデバイスキーで暗号化された*2メディアキーが納められています。なんでこのような仕組みになっているかは簡単で、万が一デバイスキーが漏れた時はそのキーは二度と使えなくしてしまえばいいからです。
デバイスキーが漏れる事態は、最初から想定されているのです*3。だから将来出るソフト(映像メディア)を再生しようと思ったら、まだ使える新しいデバイスキーを探さなければなりません。いたちごっこにはなりますが、そのうちデバイスキーが簡単に漏れるようなソフトは淘汰されるだろうというのが、この種の暗号システムの基礎設計になっているわけです。
ではなぜDVDの暗号化が無効になったのか
実はDVDも同じような仕組みになっていて、デバイスキーが漏れた場合はそのキー(再生装置)は使えなく仕組みでした。にも関わらず、今やDVDの暗示化が無力化しているのはなぜか。
それはデバイスキーに用いる鍵が短く(40bit)、しかも鍵を作り出すためのアルゴリズム(手法)が単純だったために、発見された1つの鍵から別の鍵を容易に作ることができたためです。特定の漏れてしまった鍵を無効にすることはできても、ランダムに生成される海賊鍵を予め無効にすることはできません。これによって、DVDの暗号化は無力化されました。
つまり、AACSがクラックされたと言えるのは「AACSデバイスキー(再生装置固有の鍵)の海賊版を容易に生成できるようになった」時であり、それ以外にはまずあり得ません*4。
追記
現在のところ、特定のデバイスキーやメディアキーをクラック、AACS側でデバイスキーを無効化というような、際限ない「いたちごっこ」を繰り返している模様。
2007/02/08(木)今日の戯言
Firefoxのばかぁ
adiary開発中は念入りにソースの出力を確認するのですが、~ などエンコードした覚えのない記号が %7E と表示されたりする。何事だと思ってしばらく格闘した結果が、Firefoxのせいというオチに(汗) つまり出力は正常だったと。
Firefox では、範囲選択してソースを表示したときは JavaScript などで書き換えられ、Firefoxにより整形されたソースコードを表示して、選択せずにソース表示したときはサーバ側が出力したソースコードを表示するという仕様みたいです。
……なんだかなぁ。このソースが書き変わってて悩んだ事件は今回だけじゃないんで、今までの時間を返してほしい(苦笑)
なんだかなぁ
この前久しぶりに小説の感想を求められたんで、描写が甘いとかなんとか書いたんですが、特に音沙汰なし。なんだかなぁ。そういや昔はよく他人の小説……に関わらず文章に赤ペン入れてましたけど、気付いたら今はまったくやらなくなってます。
人のことは言えませんが、「そんなんでいいのかよ」とか思うことの多い今日この頃です。なんだかなぁ。
小説も何でもそうだけど、別にこうでなきゃいかんとか言うつもりはないのですよ。でも突き詰めて突き詰めて突き詰めて粘ったときに初めて見えてくる境地、そのときにだけ得られる経験ってのがあって、それってすんごいすんごい大切だと思うから、老婆心ながらそういう経験する機会を放棄するのってすごく勿体ないって思っちゃうんですよね。
小説の添削してたときによく思ったのですが、見当違いな意見を捨ててどの意見を的確なものとして取り入れるのか、それを含め本人の素養の問題ですから、それ以上は他人にはどうにもできない。だから結論としては、なんだかなぁと。
……歳ですかね(苦笑)
2007/02/07(水)Perl な日々(?)
がりがりと Perl で書いたりすると飽きてきまして。無性にCとかC++で書きたくなったりします。早く Perl6 でないかなー。Perl5 は色々とボロがありまして、構造的に美しくかけないんですよね。あとこれ以上早くもできないし。JIT期待してます。
Kerio Personal Firewall入れてみた
今までずっと Outpost firewall 1.0(フリー版)を使ってきまして、軽い動作や広告除去など好きだったのですが、いかんせんランダムで発病するOutpost病*1に嫌気がさして乗り換えテスト中です。フリーだと他にZone Alermがありますが、プログラム単位でアクセス制御できないと困るので、Kerioにしました。
Outpostと比較すると
- 広告除去をオン(30日のみ試用可能)にするとサイト閲覧の挙動がおかしい
- アクセス許可ポートなど細かく設定できない
- Outpostよりは重い気がする
- 標準のままでは、プログラム単位アクセス制御(自動問い合わせ)にならない
とかありますが、あのOutpost病からおさらばできるならいいかなと。
[memo]メモ
- 賢いソーシャルブックマークはいいと思う。
- ユーザーが価格を決めるオンライン販売
2007/02/04(日)Windows Media Service(WMS) 代替サーバ wmrelay
wmrelayって?
Windows Media エンコーダ(WME9)には小規模なライブ中継機能(ストリーミングサーバ機能)を持っていますが、最大接続数に制限があり*1、中継元のアップ回線が細いといろいろと不都合が起こります。
Windows Media Services(WMS) などを用いて大規模な中継を行ったり、icecastのように複数の協力者で大規模中継を試みたいところですが、WMS は Windows Serverにしか付属せず、高い上に Windows を外部向けサーバとして運用させるのも気乗りしません。
wmrelay を利用すれば、Linux、FreeBSD、通常のWindowsマシンなどで誰でも手軽に中継サーバを実現できます(mmsプロトコルは非対応です)。協力者を集めれば大規模中継も簡単に行えます。
ダウンロード
ライセンス:GPL (Version 2 or later)
- wmrelay.zip Version 2.13
- (Windows) wmrelay.exe を実行(ファイル単体でok)
- (Linux/FreeBSD) wmrelay.pl を Perl 5.8.1 以降で実行
変更履歴
- Ver2.13 2010/04/10 -b オプションの追加。バッファディフォルトを 64 に変更。
- Ver2.12 2009/08/24 [Windows] EXE化をActivePerl5.10ベースにしました。
- Ver2.11 2007/03/08 [Windows] GUIで動作しない不具合を修正しました
- Ver2.10 2007/02/13 [Windows] GUI操作画面を作成
- Ver2.01 2007/02/05 Mac等で動かない問題を修正(Thanks to RXさん)
- Ver2.00 2007/02/03 全面書き直し。pushサーバ機能追加
- Ver1.00 2005/06/07 初公開
Linux/FreeBSD等での動作
Linux, FreeBSDなどではPerl 5.8.1以降でithreadが有効なものが必要です。.plをWindows環境(GUI)で使用する場合は、GUI-Loftのインストールが必要です(参考サイト)。
「perl -V」として実行したとき「useithreads=define」と出力されればOKです。
~$ perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: <中略> hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
動作確認
- エンコードソフト:Windows Media Encoder 9 (WME9)
- 再生ソフト:Windows Media Player 6.4*2/9.x, Winamp, MPlayer(Linux)
- wmrelay動作環境:FreeBSD 6.2、Ubuntu 6.10(Linux 2.6)、Windows 2000
音声のみ、動画再生共に確認してます。
使い方
wmrelayはコマンドラインから起動します。使用例は次のようになります。
- 配信元 http://192.168.1.50:8888/
- 送信ポート 標準値(8080)
wmrelay http://192.168.1.50:8888/
- 配信元 http://test-stream.dyndns.org:8080/
- 送信ポート 8000
wmrelay -p 8000 http://test-stream.dyndns.org:8080/
- 配信元 http://test-stream.dyndns.org:8080/path/file.asf
- 送信ポート 9000
- 最大接続数 200
wmrelay.pl -p 9000 -m 200 http://test-stream.dyndns.org:8080/path/file.asf
オプションの解説
-h | コマンドラインヘルプを表示します |
-c | CUI(GUIをオフにして)使用します(Windowsでの動作時のみ) |
-p [num] | 送信に利用するポート番号を指定します(省略時:8080) |
-m [num] | 最大接続数を指定します(省略時:100) |
-b [num] | バッファサイズを指定。16,32,64,128,256,512,1024 どれか(省略時:64) |
-l [file] | ログファイル名を指定します。%p はポート番号で置き換わります |
-f [file] | プッシュサーバモードでのパスワードファイルを指定します(後述) |
-a [pass] | プッシュサーバモードでのパスワードを指定します(後述) |
-s | リレー元からのパケット受信情報を表示しません |
-d | デバッグ情報を表示します |
最大接続数の目安
回線速度(アップ速度)をストリームのビットレートで割れば目安がわかります。スピードテストサイトなどで「Upload Speed」を計測してみてください*3。
「アップ速度:0.5Mbps ストリーム:136kbps」の場合0.5*1024 / 136 = 3.7647... (connections max)端数は切り捨てて(必ず切り捨てること)3人が理論限界です。
「アップ速度:12.58Mbps ストリーム:226kbps」の場合12.63*1024 / 226 = 57.226... (connections max) 57人が理論限界ですが50人程度にしておくほうが無難です。
push配信モード
ストリーム受信元URLを指定しないと、wmrelayはpushサーバモードで動作します。このモードでは中継クライアント(Windows Media Encoder9)から中継要求(サーバへのプッシュ要求)があった際に中継が開始されます。
中継先ポートには配信に利用するポート(-p port_number)と同じ番号を指定します。公開ポイントは適当で構いません(wmrelayは公開ポイントを無視します)。
また1つのプログラム(1つのポート)につき同時に1つのストリームのみが中継可能です。パスワードを指定しないと誰でも中継可能となりますのでご注意ください。サーバを止めるときは CTRL-C を何度か押してください。
共通パスワードモード
ユーザー名に関わらず、特定のパスワードを入力したクライアントの接続をすべて受け付けるモードです。パスワードは起動時に次のように指定します。
wmrelay -a password
ユーザー別パスワードモード
起動時にパスワードファイルを指定することで、ユーザー別のパスワードを設定します。
wmrelay -f password_file
パスワードファイルは「ユーザー名=パスワード」という書式になります。
# この行はコメントです user1=pass1 user2=himitsu
パスワードの設定されているユーザーが居ない場合や、パスワードファイルがない場合には、誰でも中継可能になりますので注意してください。
クライアント(リスナー)の使いかた
例えば、10.11.22.33 というIPのマシンにおいて、標準状態の 8080 で中継した場合は、クライアントは次のようにアクセスします。
http://10.11.22.33:8080/
ブラウザから .asx ファイルを経由して表示させたい場合は、ブラウザで次のアドレスにアクセスするよう指示します。
http://10.11.22.33:8080/relay.asx
参考資料
2007/02/03(土)PARでPerlをWindows実行ファイルに(with ithreads)
ActivePerl 5.10の場合はこちら。以下はActivePerl5.8.x用です。
PARとは
PARとは、Perlのパッケージツールの1種なのですが、これを利用することでWindows上で(Perlがなくても)実行出来るEXEファイルを生成することができます。ActivePerlなら通常
> ppm install PAR > pp -o test.exe test.pl
で済むのですが、この標準の PPM パッケージが古く、ithreads が利用出来ないなどの欠点があります。これは perl 5.8.0 ベースで作られているせいであり、同じ理由で「use 5.8.1;」なども書くことができなくなります。
PARによるPerlスクリプトのEXE化を参考に、Mingwを入れて最新版をインストールしたのですが、どうしても次のエラーが出て実行できませんでした。
Can't locate Win32.pm in @INC (@INC contains: .) at xxx.pl line 817.
この問題をうまく解決出来たので報告します。
PARのインストール
- ActivePerl 5.8.8-build-820 - Windows (x86)
- PAR-0.973
- PAR-Packer-0.973
そのときの最新版で問題ないと思いますが、不安な場合はまったく同じバージョンを用意してください。まず、ActivePerlをインストールします。その後、それぞれのファイルを解凍します。
まず、ExtUtils::FakeConfigが必要なので、ppmで構いませんからインストールしてください。
> ppm install ExtUtils-FakeConfig
次に PAR-Packer にパッチを充てます。必ず make 前に行ってください*1。
PAR-Packer-0.973\script\par.plの690行目付近 require PAR::Dist; require PAR::Filter::PodStrip; require Win32 if $^O eq 'MSWin32'; # この行を追加 eval { require Scalar::Util };
あとは普通に make してインストールしてください。make 時に不足するライブラリやツールは自動で取ってくれると思います(ただし再度同じコマンドを実行する必要が出たりします)。
> cd PAR-0.973 > perl Makefile.PL > nmake > nmake install > cd .. > cd PAR-Packer-0.973 > perl -MConfig_m Makefile.PL > nmake > nmake install
これで、ithreads が問題なく動く pp が生成できると思います。