comparison arib25v021/arib25/readme.txt @ 0:67e8eca28a80

initial import
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 16 Feb 2009 15:41:49 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:67e8eca28a80
1 【名称】
2
3  ARIB STD-B25 仕様確認テストプログラムソースコード
4
5 【バージョン】
6
7  0.2.0
8
9 【作者】
10
11  茂木 和洋 (MOGI, Kazuhiro)
12  kazhiro@marumo.ne.jp
13
14 【一次配布元】
15
16  http://www.marumo.ne.jp/db2008_4.htm#09
17
18  あるいは
19
20  http://www.marumo.ne.jp/junk/arib_std_b25-0.2.1.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 の処理とストリーム
46  暗号の復号処理、EMM 処理までを実装した
47
48  EMM メッセージ関連は未実装となっている
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, 4/9 - ver. 0.2.1
195
196   PAT 更新時に復号漏れが発生していたバグを修正
197   (ver. 0.2.0 でのエンバグ)
198
199   野良 PID (PMT に記載されていないストリーム) が存在した場合
200   TS 内の ECM がひとつだけならば、その ECM で復号する形に変更
201
202   EMM の B-CAS カードへの送信をオプションで選択可能に変更 (-m)
203   進捗状況の表示をオプションで選択可能に変更 (-v)
204   通電制御情報 (EMM受信用) を表示するオプションを追加 (-p)
205
206   http://www.marumo.ne.jp/db2008_4.htm#9 又は
207   http://www.marumo.ne.jp/junk/arib_std_b25-0.2.1.lzh
208
209  ・2008, 4/6 - ver. 0.2.0
210
211   EMM 対応
212   利用中の B-CAS カード ID 向けの EMM を検出した場合、EMM を
213   B-CAS カードに渡す処理を追加
214
215   ECM 処理の際に未契約応答が返された場合、処理負荷軽減の為、
216   以降、その PID の ECM を B-CAS カードで処理しないように変
217   更 (EMM を処理した場合は再び ECM を処理するように戻す)
218
219   進捗を nn.nn% の書式で標準エラー出力に表示するように変更
220   
221   http://www.marumo.ne.jp/db2008_4.htm#6 又は
222   http://www.marumo.ne.jp/junk/arib_std_b25-0.2.0.lzh
223
224  ・2008, 3/31 - ver. 0.1.9
225
226   MULTI2 モジュールのインスタンスが未作製の状況で、MULTI2 の
227   機能を呼び出して例外を発生させることがあったバグを修正
228
229   # パッチを提供してくれた方に感謝
230
231   http://www.marumo.ne.jp/db2008_3.htm#31 又は
232   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.9.lzh
233
234  ・2008, 3/24 - ver. 0.1.8
235
236   -s オプション (NULL パケットの削除) を追加
237   -s 1 で NULL パケットを出力ファイルには保存しなくなる
238   デフォルトは -s 0 の NULL パケット保持
239
240   http://www.marumo.ne.jp/db2008_3.htm#24 又は
241   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.8.lzh
242
243  ・2008, 3/17 - ver. 0.1.7
244
245   arib_std_b25.h に「extern "C" {」を閉じるコードがなかった問題
246   (C++ コードから利用する場合にコンパイルエラーを発生させる) を
247   修正
248
249   TS パケットの中途でストリームが切り替わるケースで問題が発生し
250   にくくなるように、arib_std_b25.c 内のコードを修正
251
252   http://www.marumo.ne.jp/db2008_3.htm#17 又は
253   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.7.lzh
254
255  ・2008, 3/16 - ver. 0.1.6
256
257   PMT 更新の際、ECM 関連の状況が変更 (スクランブル - ノンスク
258   ランブルの切り替えや、ECM PID の変更等) が行われても、それが
259   反映されていなかった問題を修正
260
261   http://www.marumo.ne.jp/db2008_3.htm#16 又は
262   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.6.lzh
263
264  ・2008, 2/14
265
266   readme.txt (このファイル) を修正
267   ソースコードのライセンスについての記述を追加
268
269  ・2008, 2/12 - ver. 0.1.5
270
271   PMT の更新に伴い、どのプログラムにも所属しなくなった PID (スト
272   リーム) でパケットが送信され続けた場合、そのパケットの復号が
273   できなくなっていた問題を修正
274
275   http://www.marumo.ne.jp/db2008_2.htm#12 又は
276   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.5.lzh
277
278  ・2008, 2/2 - ver. 0.1.4
279
280   ver. 0.1.3 での PMT 処理方法変更に問題があり、PMT が更新された
281   場合、それ以降で正常な処理が行えなくなっていたバグを修正
282
283   B-CAS カードとの通信でエラーが発生した場合のリトライ処理が機能
284   していなかったバグを修正
285
286   http://www.marumo.ne.jp/db2008_2.htm#2 又は
287   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.4.lzh
288
289  ・2008, 2/1 - ver. 0.1.3
290
291   有料放送等で未契約状態の B-CAS カードを使った際に、鍵が取得で
292   きていないにもかかわらず、間違った鍵で復号をしていた問題に対処
293
294   鍵が取得できなかった ECM に関連付けられたストリームでは復号を
295   行わず、スクランブルフラグを残したまま入力を素通しする形に変更
296   鍵が取得できない ECM が存在する場合、終了時にチャネル番号と
297   B-CAS カードから取得できたエラー番号を警告メッセージとして表示
298   する形に変更
299
300   暗号化されていないプログラムで例外を発生させていたバグを修正
301
302   http://www.marumo.ne.jp/db2008_2.htm#1 又は
303   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.3.lzh
304
305  ・2008, 1/11 - ver. 0.1.2
306
307   デジタル BS 放送等で、PAT に登録されているのに、ストリーム内で
308   PMT が一切出現しないことがある場合に対応
309
310   PMT 内の記述子領域 2 に CA_descriptor が存在する場合に対応する
311   ため arib_std_b25.c 内部での処理構造を変更
312
313   別プログラムと同時実行するためにスマートカードの排他制御指定を
314   変更
315
316   http://www.marumo.ne.jp/db2008_1.htm#11 又は
317   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.2.lzh
318
319  ・2008, 1/7 - ver. 0.1.1
320
321   セクション (PAT/PMT/ECM 等) が複数の TS パケットに分割されている
322   場合に、正常に処理できなかったり、例外を発生をさせることがある
323   バグを修正
324
325   http://www.marumo.ne.jp/db2008_1.htm#7 又は
326   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.1.lzh
327
328  ・2007, 11/25 - ver. 0.1.0
329
330   公開
331
332   http://www.marumo.ne.jp/db2007_b.htm#25 又は
333   http://www.marumo.ne.jp/junk/arib_std_b25-0.1.0.lzh
334