comparison arib25v023/arib25/readme.txt @ 3:6801fe7e04ff

updated to ariv25v023
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 17 Feb 2009 01:40:56 +0900
parents arib25v021/arib25/readme.txt@67e8eca28a80
children
comparison
equal deleted inserted replaced
2:8ac7c59fefc9 3:6801fe7e04ff
1 【名称】
2
3  ARIB STD-B25 仕様確認テストプログラムソースコード
4
5 【バージョン】
6
7  0.2.3
8
9 【作者】
10
11  茂木 和洋 (MOGI, Kazuhiro)
12  kazhiro@marumo.ne.jp
13
14 【一次配布元】
15
16  http://www.marumo.ne.jp/db2008_c.htm#30
17
18  あるいは
19
20  http://www.marumo.ne.jp/junk/arib_std_b25-0.2.3.lzh
21
22 【目的】
23
24  ARIB STD-B25 の仕様を理解する為の、参考用の実装として公開
25
26 【背景】
27
28  2011 年 7 月の地上アナログ放送停波を控え、廉価な地上デジタル放送
29  受信機の販売が待たれている
30
31  しかし、ARIB の標準文書はわざと判りにくく書いて開発費をかさませ
32  ようとしているとしか思えないほどに意味不明瞭な記述になっており
33  このままでは低価格受信機の開発など不可能に思える
34
35  そこで、自分なりに ARIB 標準文書を読み、理解した範囲をソース
36  コードの形にまとめて公開することにした
37
38  このコードが安価な受信機の開発の一助となることを期待する
39
40  なお、あくまでも仕様理解を目的としたものであるため、ビルド済み
41  バイナリファイルは配布しない
42
43 【実装した範囲】
44
45  CA システム (B-CAS カード関連) を中心に ECM(table_id=0x82) の処理と
46  ストリーム暗号の復号処理、EMM(table_id=0x84) の処理までを実装した
47
48  EMM メッセージ (table_id=0x85) 関連は未実装となっている
49
50 【プログラムの動作環境】
51
52  ISO 7816 対応の IC カードリーダがインストールされた Windows PC を
53  想定動作環境とする
54
55  ISO 7816 対応スマートカードリーダーは一般に
56  「住基カード対応 IC カードリーダ」「e-Tax 対応 IC カードリーダ」
57  などとして 4000 円程度で販売されているものが利用可能である
58
59  日立マクセル製の HX-520UJJ で正常に動作することを確認している
60
61 【ソースコードのライセンスについて】
62
63  ・ソースコードを利用したことによって、特許上のトラブルが発生しても
64   茂木 和洋は責任を負わない
65  ・ソースコードを利用したことによって、プログラムに問題が発生しても
66   茂木 和洋は責任を負わない
67
68  上記 2 条件に同意して作成された二次的著作物に対して、茂木 和洋は
69  原著作者に与えられる諸権利を行使しない
70
71 【プログラムの構成】
72
73  ・arib_std_b25.h/c
74
75   ARIB STD-B25 記載の処理を行うためのモジュール
76   MPEG-2 TS の分離、CA システム (B-CAS カード) 機能の呼び出し、
77   MULTI2 復号機能の呼び出し等を担当する
78
79  ・ts_section_parser.h/c
80
81   MPEG-2 TS のセクション形式データの分割処理を担当する
82
83  ・b_cas_card.h/c
84
85   CA システム (B-CAS カード) のリソース管理および直接の制御を
86   担当する
87
88  ・multi2.h/c
89
90   MULTI2 暗号の符号化と復号を担当する
91
92  ・td.c
93
94   テストドライバ
95   PAT/PMT/ECM を含む MPEG-2 TS ファイルを読み込み、復号後の
96   MPEG-2 TS ファイルを出力する
97
98   コマンドラインオプションで MULTI2 暗号のラウンド数を指定可能
99   ラウンド数を指定しない場合の初期値は 4
100
101   このラウンド数 4 は MULTI2 用語では 32 に相当する
102
103   ARIB STD-B25 では MULTI2 のラウンド数は非公開パラメータだが
104   総当たりで実際のラウンド数は推定可能である
105
106 【処理の流れ】
107
108  ・起動時
109
110   1 アプリケーションは B_CAS_CARD モジュールのインスタンスを
111    作成し、B_CAS_CARD モジュールに、初期化を依頼する
112
113   1.a B_CAS_CARD モジュールは WIN32 API のスマートカード関連
114     API を呼び出し、CA システムに接続する
115   1.b B_CAS_CARD モジュールは ARIB STD-B25 記載の「初期条件
116     設定コマンドを CA システムに発行し、システム鍵 (64 byte)
117     初期 CBC 状態 (8 byte) を受け取る
118
119   2 アプリケーションは ARIB_STD_B25 モジュールのインスタンスを
120    作成し、B_CAS_CARD モジュールを ARIB_STD_B25 モジュールに
121    登録する
122
123  ・データ処理時
124
125   1 アプリケーションは ARIB_STD_B25 モジュールに順次データを
126    提供し、ARIB_STD_B25 モジュールから処理完了データを受け
127    取ってファイルに出力していく
128
129   ・ARIB_STD_B25 モジュール内
130
131    1 TS パケットのユニットサイズ (188/192/204 などが一般的) が
132     特定されていない場合 8K まで入力データをバッファしてから、
133     ユニットサイズを特定する
134     ユニットサイズが特定できなかった場合は、エラー終了する
135
136    2 PAT が発見されていない場合、PAT が発見できるまで入力
137     データをバッファし続ける
138     PAT が発見できずにバッファサイズが 16M を超過した場合
139     エラー終了する
140     PAT が発見できた場合、プログラム配列を作成し PID マップ
141     配列に登録する
142
143    3 PAT に登録されていた PMT すべてが発見されるか、どれか
144     ひとつの PMT で 2 個目のセクションが到着するまで入力
145     データをバッファし続ける
146     上記条件を満たさずにバッファサイズが 32M を超過した場合
147     エラー終了する
148     PMT が到着する毎に ECM の有無を確認し、ECM が存在する
149     場合はデクリプタを作成してプログラムに所属するストリーム
150     と PID マップ上で関連付ける
151
152    4 PMT に登録されていた ECM すべてが発見されるか、どれか
153     ひとつの ECM で 2 個目のセクションが到着するまで入力
154     データをバッファし続ける
155     上記条件を満たさずにバッファサイズが 32M を超過した場合
156     エラー終了する
157     各 ECM に対して、最初のセクションデータが到着した時点で
158     MULTI2 モジュールのインスタンスをデクリプタ上に作成する
159     ECM セクションデータは B_CAS_CARD モジュールに提供して
160     スクランブル鍵を受け取り、MULTI2 モジュールにシステム鍵、
161     初期 CBC 状態、スクランブル鍵を渡し、MULTI2 復号の準備を
162     行う
163
164    5.a 暗号化されている TS パケットであれば、PID から対応
165      ECM ストリームを特定し、デクリプタの MULTI2 モジュー
166      ルに復号させて出力バッファに積む
167     
168    5.b 暗号化されていない TS パケットであれば、そのまま出力
169      バッファに積む
170
171    5.c CAT を検出した場合、EMM の PID を取得して EMM の処理
172      準備を行う
173
174    5.d EMM を受け取った場合、B-CAS カード ID と比較し、自分
175      宛ての EMM であれば B-CAS カードに引き渡して処理させる
176      # EMM 処理オプションが指定されている場合
177
178    6 ECM が更新された場合、B_CAS_CARD モジュールに処理を
179     依頼し、出力されたスクランブル鍵を MULTI2 モジュールに
180     登録する
181
182    7 PMT が更新された場合、ECM PID が変化していれば新たに
183     デクリプタを作成して 4 に戻る
184
185    8 PAT が更新された場合、プログラム配列を破棄して
186     3 に戻る
187
188  ・終了時
189
190   1 各モジュールが確保したリソースを解放する
191
192 【更新履歴】
193
194  ・2008, 12/30 - ver. 0.2.3
195
196   CA_descriptor の解釈を行う際に CA_system_id が B-CAS カード
197   から取得したものと一致するか確認を行うように変更
198
199   http://www.marumo.ne.jp/db2008_c.htm#30 又は
200   http://www.marumo.ne.jp/junk/arib_std_b25-0.2.3.lzh
201
202  ・2008, 11/10 - ver. 0.2.2
203
204   修正ユリウス日から年月日への変換処理をより正確なものへ変更
205
206   TS パケットサイズの特定方法を変更
207
208   http://www.marumo.ne.jp/db2008_b.htm#10 又は
209   http://www.marumo.ne.jp/junk/arib_std_b25-0.2.2.lzh
210
211  ・2008, 4/9 - ver. 0.2.1
212
213   PAT 更新時に復号漏れが発生していたバグを修正
214   (ver. 0.2.0 でのエンバグ)
215
216   野良 PID (PMT に記載されていないストリーム) が存在した場合
217   TS 内の ECM がひとつだけならば、その ECM で復号する形に変更
218
219   EMM の B-CAS カードへの送信をオプションで選択可能に変更 (-m)
220   進捗状況の表示をオプションで選択可能に変更 (-v)
221   通電制御情報 (EMM受信用) を表示するオプションを追加 (-p)
222
223   http://www.marumo.ne.jp/db2008_4.htm#9 又は
224   http://www.marumo.ne.jp/junk/arib_std_b25-0.2.1.lzh
225
226  ・2008, 4/6 - ver. 0.2.0
227
228   EMM 対応
229   利用中の B-CAS カード ID 向けの EMM を検出した場合、EMM を
230   B-CAS カードに渡す処理を追加
231
232   ECM 処理の際に未契約応答が返された場合、処理負荷軽減の為、
233   以降、その PID の ECM を B-CAS カードで処理しないように変
234   更 (EMM を処理した場合は再び ECM を処理するように戻す)
235
236   進捗を nn.nn% の書式で標準エラー出力に表示するように変更
237   
238   http://www.marumo.ne.jp/db2008_4.htm#6 又は
239   http://www.marumo.ne.jp/junk/arib_std_b25-0.2.0.lzh
240
241  ・2008, 3/31 - ver. 0.1.9
242
243   MULTI2 モジュールのインスタンスが未作製の状況で、MULTI2 の
244   機能を呼び出して例外を発生させることがあったバグを修正
245
246   # パッチを提供してくれた方に感謝
247
248   http://www.marumo.ne.jp/db2008_3.htm#31 又は
249   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.9.lzh
250
251  ・2008, 3/24 - ver. 0.1.8
252
253   -s オプション (NULL パケットの削除) を追加
254   -s 1 で NULL パケットを出力ファイルには保存しなくなる
255   デフォルトは -s 0 の NULL パケット保持
256
257   http://www.marumo.ne.jp/db2008_3.htm#24 又は
258   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.8.lzh
259
260  ・2008, 3/17 - ver. 0.1.7
261
262   arib_std_b25.h に「extern "C" {」を閉じるコードがなかった問題
263   (C++ コードから利用する場合にコンパイルエラーを発生させる) を
264   修正
265
266   TS パケットの中途でストリームが切り替わるケースで問題が発生し
267   にくくなるように、arib_std_b25.c 内のコードを修正
268
269   http://www.marumo.ne.jp/db2008_3.htm#17 又は
270   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.7.lzh
271
272  ・2008, 3/16 - ver. 0.1.6
273
274   PMT 更新の際、ECM 関連の状況が変更 (スクランブル - ノンスク
275   ランブルの切り替えや、ECM PID の変更等) が行われても、それが
276   反映されていなかった問題を修正
277
278   http://www.marumo.ne.jp/db2008_3.htm#16 又は
279   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.6.lzh
280
281  ・2008, 2/14
282
283   readme.txt (このファイル) を修正
284   ソースコードのライセンスについての記述を追加
285
286  ・2008, 2/12 - ver. 0.1.5
287
288   PMT の更新に伴い、どのプログラムにも所属しなくなった PID (スト
289   リーム) でパケットが送信され続けた場合、そのパケットの復号が
290   できなくなっていた問題を修正
291
292   http://www.marumo.ne.jp/db2008_2.htm#12 又は
293   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.5.lzh
294
295  ・2008, 2/2 - ver. 0.1.4
296
297   ver. 0.1.3 での PMT 処理方法変更に問題があり、PMT が更新された
298   場合、それ以降で正常な処理が行えなくなっていたバグを修正
299
300   B-CAS カードとの通信でエラーが発生した場合のリトライ処理が機能
301   していなかったバグを修正
302
303   http://www.marumo.ne.jp/db2008_2.htm#2 又は
304   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.4.lzh
305
306  ・2008, 2/1 - ver. 0.1.3
307
308   有料放送等で未契約状態の B-CAS カードを使った際に、鍵が取得で
309   きていないにもかかわらず、間違った鍵で復号をしていた問題に対処
310
311   鍵が取得できなかった ECM に関連付けられたストリームでは復号を
312   行わず、スクランブルフラグを残したまま入力を素通しする形に変更
313   鍵が取得できない ECM が存在する場合、終了時にチャネル番号と
314   B-CAS カードから取得できたエラー番号を警告メッセージとして表示
315   する形に変更
316
317   暗号化されていないプログラムで例外を発生させていたバグを修正
318
319   http://www.marumo.ne.jp/db2008_2.htm#1 又は
320   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.3.lzh
321
322  ・2008, 1/11 - ver. 0.1.2
323
324   デジタル BS 放送等で、PAT に登録されているのに、ストリーム内で
325   PMT が一切出現しないことがある場合に対応
326
327   PMT 内の記述子領域 2 に CA_descriptor が存在する場合に対応する
328   ため arib_std_b25.c 内部での処理構造を変更
329
330   別プログラムと同時実行するためにスマートカードの排他制御指定を
331   変更
332
333   http://www.marumo.ne.jp/db2008_1.htm#11 又は
334   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.2.lzh
335
336  ・2008, 1/7 - ver. 0.1.1
337
338   セクション (PAT/PMT/ECM 等) が複数の TS パケットに分割されている
339   場合に、正常に処理できなかったり、例外を発生をさせることがある
340   バグを修正
341
342   http://www.marumo.ne.jp/db2008_1.htm#7 又は
343   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.1.lzh
344
345  ・2007, 11/25 - ver. 0.1.0
346
347   公開
348
349   http://www.marumo.ne.jp/db2007_b.htm#25 又は
350   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.0.lzh
351