
2008/04/11
ARIB STD-B25 に記述の無いB-CASカードコマンドを二つほど。
90 F0 00 00 00 と
90 F2 から始まるレングス不明のもの。
1844京6744兆0737億0955万1615 回コマンド打てばなんか出てくるだろ。
B-CAS のあまいところはEMMが正規のものでないときその旨レスポンスが返る。
SPTV-CAS は何を入れてもレスポンスが「受け付けました」だから推測ができない。
でも正規のものを入れたときレスポンスが返るまでのラグはどちらのCASも時間が掛かる。
穴ありすぎで面白すぎ。
中の人は、まずCRCやMACをチェックしてOKなら復号に入るわけだが
レスポンス返るまでのラグでどこで弾かれたか推測できる。
消費電力もオシロで見たら面白そう。XORなのかビットシフトなのか明らかに違いが出るだろう。
リアクタンスが邪魔しそうだがお遊び程度には暇つぶしになりそう。
2008/03/18追加
テレビを見るまたは録るためにPCを使うことなど、さらさら考えていない。
PCのプログラムを打てない負け惜しみだが、全てハードで完成させる。予定。
だいだい、ファンがうるさいし、暑い。
2008/03/18
完成した。
改善の余地はかなりあるが、未契約のカード2枚と契約済みのカード1枚あれば
TVとレコーダーで契約済みのチャンネルを視聴可能なことがわかった。
TVとレコーダーには未契約のカードを挿し、ECMだけを装置に受ける、ECMだけ取り出すのはマイコンを使うのだが
USARTが組める人なら楽勝のはず。まず契約済みのカードに90 30 00 00 00 を送り動作可能な状態にする。
受けたECMを次のマイコンでAPDUヘッダとCRCを再計算し契約済みのカードに送る。勿論Kcが返ってくる。
TVとレコーダーそれぞれのヘッダの状態は記憶しておきKcを送り返すときヘッダの差し替えとCRCの再計算を行う。
同時間にECMを受けたときは片方のマイコン内部のRAMに記憶しておき、一方がレスポンスを返した後処理する。
2週間かからずにできたので拍子抜け。もうこれ以上やるきねーよ。次は124°128°CSで試す。
このシリーズは終了。
2008/03/13
どうでもいいが体調悪すぎで会社早退した。でちょっと前に起きた。
進捗
壊れたスカパーチューナーの筐体を有効活用してみた。
カードを挿入したら初期コードを送信し
APDUを送ったらヘッダをつけてCRCを計算してカードに送信
レスポンスは今のところ生データのまま。
で、写真
2008/03/06
進捗状況です。
配線を短めにしたところ、シリアルデータが抜けました。まだ稀にエラーも見受けられます。
ヘッダを検出後0x90 0x34から数バイト後のECM暗号文部分をRAMに80バイト分貯めます。
80バイト受信するとボーレート変更ルーチンを通過後、送信ルーチンに入ります。
送信はとりあえず0x90 0x34から最後の0x00まで出力します。
カードリーダーはNTT Communicationsの既製品を使うことを考えています。
2008/03/05
開発中の共有装置ですが、私の開発環境がTVからPCまで5bほどあり、TTLのままでの伝送は
例え384Kbpsとはいえエラーが乗ってしまい思うように動かない状態です。
こうなったら、TTLの384Kbpsのシリアルデータを機器内部で192KbpsのRS232C準拠に変えて出力させ
なるべく短距離で装置への接続をしてみようと思います。
あたりまえですが、B-CASは契約したカードでないと有料放送を視聴できません。
同じ部屋にある所有者が同じTVとレコーダーでもそれぞれに契約が必要です。
そんなふざけたハナシはないと感じ、B-CAS共有装置を作ってみようと思いました。
外付けでもいいから共有したいと考えた私は、早速製作を開始しました。
B-CASの通信速度は低速ですので扱うのは容易ですし、作ったヤツがバカなので機器認証もありません。
こんなシステムで有料放送を実施している放送事業者のセンスが私にはわかりません。
製作は極めて簡単で先週方法を考えて今日までに基板とマイコンのプログラムが完成しました。
あとは実際動かしながらデバッグをして最適化していくだけです。
方法を簡単に書いておきます。
まず機器1からのAPDUコマンドをカードに送ります。その最中に機器2からAPDUコマンドが発行されたときは
その内容をRAMに書き込んでおきます、カードからのレスポンスを機器1に送り返します。
その後、RAMに置いていた機器2のAPDUコマンドのヘッダを書き換えCRCの再計算を行ったうえカードに送ります。
その最中に機器1からAPDUコマンドが発行されたときは同じく、その内容をRAMに書き込んでおきます。
レスポンスのヘッダとCRCを再計算し機器2に送り返します。
以後、その繰り返しです。
カード内部でのKcの複号には多少の時間を必要とし
レスポンスは普段でも数ミリ秒のディレイがありますから、少々の増延ではエラーは吐かないようです。
むしろCRCの計算やAPDUコマンドのヘッダを間違わないように処理しなければなりません。
それぞれの機器は、あたかも1枚のカードを使用しているかのように振舞いますし。
カードも1つの機器からのコマンドであるかのように解釈します。
ブロックダイヤグラムです。
開発延期中
なお、このシステムの著作権を主張します。個人での製作は自由ですが、
営利目的での製作、雑誌やWEBへの転載を禁止します。転載などが必要な方はメールで問い合わせてください。
この装置と同等の動作を行う機器の製作も知的財産権の侵害ですのでご注意ください。
個人で使用する限り対価は求めません。
Copyright(C) 2008 K4G. All rights reserved
B-CAS の仕組みとコマンド・レスポンスはあのクソ仕様書ではわかりにくすぎるので
阿呆が書いたらわかりやすいかもしれん、ということで阿呆が書きます。
NHKBSのEMMメッセージについて殴り書き
90 3A 00 00 04 ?? ?? 01 1D 00
?? ?? は今の日付のMJD
--------------------------------------------
レスポンス
メッセージありの方
00 0B 00 00 21 00 FF FF 01 02 01 00 00 90
|1-|2-|3----|4----|5----|6----|7-|8----|9-|
1=00固定
2=UNIT LEBGTH 11バイトってことだろ、多分
3=IC CARD INSTRUCTION なにかわからん
4=Return Code しらん
5=期限 65535だから2038年04月22日ってことだと思う
6=メッセージプリセットテキストナンバー
7=フォーマットナンバー
8=インフォレングス
9=
----------------------------------------------
メッセージなしの方
00 0B 00 00 A1 01 00 00 00 00 00 00 00 90
|1-|2-|3----|4----|5----|6----|7-|8----|9-|
1=00固定
2=UNIT LEBGTH 11バイトってことだろ、多分
3=IC CARD INSTRUCTION なにかわからん
4=Return Code しらん
5=期限 0だから表示しないんじゃないか?
6=メッセージプリセットテキストナンバー
7=フォーマットナンバー
8=インフォレングス
9=