CA system.

CA条件接受系统

    摘要:详细信论述了CA条件接受系统的原理以及关键技术,并针对实际情况给出了在数字电视系统中条件接收的实现方法。

    关键词:条件接收 数字电视 控制字 程序映射表(PMT) 条件访问表(CAT) 授权控制信息(ECM) 授权管理信息(EMM)

随着数字视频广播(DVB)的发展,观众会面对越来越多的数字电视节目的选择。而广播业者由于投资成本的增加,则要求对用户收取一定的收视费用。条件接受系统(Conditional Access System)就是为了满足对某些广播服务实施接入控制的系统。它的主要功能就是确保只有支付了或者即将支付费用的用户才能收看所选择的电视节目。

1 CA系统的关键技术

在条件接受系统中,有两项最为关键的技术:一是传输加扰和解扰(Scrambling,Descrambling)的方法。加解扰技术被用来的发送端CA系统的控制下改变或控制被传送的服务(节目)的某些特征,使未被授权的用户无法获取该服务提供的利益;二是控制解扰,在发送端提供一个加密信息,使被授权的用户端解扰器能以此来对数据解密。该信息受CA系统控制,并以加密形式配置在传输流信息中以防止非授权用户直接利用该信息进行解扰。不同的CA系统管理和传送该信息的方法有很大不同。

加扰的通常做法是在发送端使用加扰序列对视频、音频或者数据码流进行扰动,将数据打乱。加扰序列由伪随机序列发生器产生,在初始条件已知的情况下,可以推测出伪随机序列发生器产生的加扰序列。伪随机序列发生器的初始条件受控于控制字(Control Word)。在接收端也有一个同样的伪随机序列发生器,如果将控制字CW发送给这个伪随机序列发生器,那么就可以获得解扰序列,然后再用解扰序列恢复原始信号。所以说,节目有条件接收的核心是控制字CW的传输。为了实现保密,必须将控制字进行加密处理后传输。接收端在得到授权后,才能应用解密程序重新生成这个控制字。

2 控制字CW的加密机制

因为CW是随加扰信息一起通过公用网传输,任何人都可以读取研究它,一旦CW被读取破解,那么整个系统就瘫痪了,所以对CW本身要用一个加密密钥通过加密算法对它进行加密保护。在具体应用中,这个密钥可以按照网络经营商要求经常加以改变,通常由服务商提供,用来控制其提供的服务,所以把它称为业务密钥(Service Key)。SK的使用一般与用户付费条件有关。

CW虽已由SK加密,但这个密如果仍可以让任何人读取,那就意味着特定服务的定购者和非定购者将享有同等权利,网络运算商还是难以控制到特定的用户,安全性仍然存在问题,必须对SK进行再加密保护。这个加密过程完全按照各个用户特征来进行,因为这个数列(密钥)是由个人特征确定的,常常称为个人分配密钥(PDK)。PDK一般由CA系统设备自动产生并严格控制,在终端设备处该序列数一般由网络运营商通过CA系统提供的专用设备烧入解扰器的PROM中,不能再读出。为了能提供不同级别、不同类型的服务,一套CA系统往往为每个用户分配好几个PDK,来满足丰富的业务需求。

在已实际运营的多套CA系统(主要在欧美)中,运营商对终端用户的加密授权方式有很多种,如人工授权、磁卡授权、IC卡授权、智能卡授权(用IC构成有分析判断能力的卡)、中心集中寻址授权(由控制中心直接寻址授权,不用插卡授权)、智能卡和中心授权共用的授权方式等。智能卡授权方式是目前机顶盒市场的主流,也被我国广电总局确定为我国入网设备的标准配件。

在所设计的CA条件接收系统中,也使用这种智能卡(Smart Card)的授权方式。(注:智能卡的结构包括协处理器、ROM和EEPROM。)

3 MPEG-2数字电视系统中条件接收的实现

在采用MPEG-2标准的数字电视系统中,与节目流有条件接收系统相关的两个数据流是:授权控制信息(Entitle Control Message)和授权管理信息(Entitle Manage Message)。由SK加密算是后的CW在ECM中传送,ECM中还包括节目来源、时间、内容分类和节目价格等信息。对CW加密的SK在EMM中传送,SK在传送前要经过用户个人分配密钥(Personal Distribute Key)的加密处理,EMM中还包含地址、用户授权信息。

在传送流(Transport Stream)中,程序特殊信息(PSI)被分为四类:程序关联表(PAT),程序映射表(PMT),网络信息表(NIT)以及条件访问表(CAT)。其中,PMT和CAT与条件接受密切相关。

为了更加地说明问题,首先介绍一下条件访问描述子(CA descriptor),如表1所示。如果任一原始流被加密,含有此原始流的程序中必须有CA描述子。如果任何宽系统条件访问管理信息(如EMM)和原始特殊流信息(如ECM)存在于传送流中,在相应的映射分段中必须有CA描述子。

表1 条件访问描述子

语  法位  数缩   写
CA_descriptor( ) {
  Descriptor_tag
  Descriptor_length
  CA_system_ID
  Reserved
  CA_PID
  for (i=0;i<N;i++) {
    Private_data_byte
  }
8
8
16
3
13

8
Uimsbf
Uimsbf
uimsbf
Bslbf
Uimsbf

Uimsbf

(注:条件访问描述子中的Descriprot_tag值为9.通过这个标志位可以将条件访问描述子与其他的描述子区别开来,如视频流描述子、音频流描述子等。另外,条件描述子中的CA_System_ID用来表示适用于相关ECM和EMM流的CA系统类型。DVB Project成立了专门的组织负责向不同的解码器生产商分配CA_System_ID值。这样的话,同时一套数字码流可以将不同CA系统的密钥传送给不同的机顶盒用户群。)

当CA描述子出现在PMT表中时,CA_PID指向含有和ECM信息相关的程序分组。当CA描述子出现在CAT表中时,CA_PID指向含有和EMM信息相关的程序分组。PMT和CAT表的语法结构如表2、表3所示。

由此可以清楚地知道,解码器的解密机制是:当智能卡插入机顶盒(Set-Top Box)时,解码器将从中读取CA_System_ID,并找到在CAT表(PID号为0X01)内的CA描述子中,对应该CA_System_ID的CA_PID(即EMM码流的PID)号。EMM码流中包含了经过用户个人分配密钥PDK加密处理的用户密钥SK。个人分配密钥PDK固化的智能卡中,并以加密形式存储,用户需提供口令方能解密使用。而后,智能卡将解密出业务密钥SK。

完成以上步骤后,解码器再找到在PMT表中的CA描述子,并找出对应的ECM码流的PID号。ECM码流中包含了由业务密钥SK加密处理后的控制字CW信息。用得到的业务密钥SK对ECM解密就可以得到控制字CW。将控制字填入解码芯片的相应寄存器中,就可以对码流数据进行解扰,恢复出原始信号。

表2 传送流程序映射表(PMT)分段

语  法位  数缩  写
TS_program_map_section( ) {
 table_id
 section_syntax_indicator
 ‘0‘
 Reserved
 section_length
 program_number
 Reserved
 version_number
 current_next_indicator
 section_number
 last_section_number
 Reserved
 PCR_PID
 Reserved
 program_info_length
 for(i=0;i<N;i++) {
   descriptor()
}
for(i=0;i<N1;i++) {
   stream_type
   Reserved
   Elementary_PID
   Reserved
   ES_info_length
   for(i=0;i<N2;i++) {
     Descriptor()
   }
 }
 CRC_32
}

8
1
1
2
12
16
2
5
1
8
8
3
13
4
12




8
3
13
4
12




32
Uimsbf
Bslbf
Bslbf
Bslbf
Uimsbf
Uimsbf
Bslbf
Uimsbf
Bslbf
Uimsbf
Uimsbf
Bslbf
Uimsbf
Bslbf
Uimsbf




Uimsbf
Bslbf
Uimsbf
Bslbf
Uimsbf




Rpchof

表3 条件访问(CAT)分段

语  法 位  数缩  写
CA_section() {
  table_id
  section_syntax_indicator
  ‘0‘
  Reserved
  section_length

  Reserved
  version_number
  current_next_indicator
  section_number
  last_section_number
  for (i=0;i<N;i++) {
    Descriptor()
  }
  CRC_32
}
8
1
1
2
12
18

5
1
8
8



32
Uimsbf
Bslbf
Bslbf
Bslbf
Uimsbf
Bslbf

Uimsbf
Bslbf
Uimsbf
Uimsbf



Rpchof

(注:PMT表的table_id值总为0X02;CAT表中的table_id值总为0X01.另外,在传送流TS的头字段中,PMT表的PID号由PAT表中的相应分段给出;而CAT表的PID号总是为0X01。)

4 ECM以及EMM

为了更详细地说明问题,给出ECM以及EMM码流的语法结构,如表4.其中,Table_id的分配情况如表5.

表4 CA信息(ECM,EMM)分段

语  法位  数缩  写
CA_message_section() {
  Table_id
  Section_syntax_indicator
  DVB_reserved
  Reserved
  CA_section_length
  for (i=0;i<N;i++) {
    CA_data_byte
  }
}
8
1
1
2
12

8
Uimsbf
Bslbf
Bslbf
Bslbf
Uimsbf

Bslbf

(注:Section_syntax_indicator:始终为‘0’DVB_reserved:为DVB将来的应用保留)

表5 Table_id分配情况

Table_id值描  述
0x80
0x81
0x82~0x8F
CA_message_section,ECM
CA_message_section,ECM
CA_message_section,CA System Private

5 加扰

MPEG-2数据码流的加扰可以分为两层:一是PES层的加扰,一是TS层的加扰。由于设计的条件接收系统的前端是在TS节目流复用器上实现的,所以选择TS层的加扰。TS层的加扰只针对TS数据码流的有效负载(payload),而TS码流中的PSI信息,包括PAT、PMT、NIT、CAT以及私有分段(包括ECM、EMM)都不应该被加扰。当然,TS流的头字段(包括调整字段)也不应该被加扰。经过加扰后的TS码流应该在头字段中定义加密控制值。

6 加密算法的选用

(1)控制字的加密:对于控制字的加密,需要一定强度、处理迅速的加密算法,主要采用秘密密钥加密体制中的一些加密算法,如:DES算法或者IDEA算法。

(2)业务密钥的加密:业务密钥的改变频率要远小于控制字,因此对其加密的算法处理速度可以较慢,但由于一个业务密钥要使用较长时间,其安全性要求更高,需选用一些高强度的加密算法。公开密钥体制的加密算法在此可得到较好的应用,因为公开密钥体制加密算法虽然处理速率一般较秘密密钥体制慢,但大都具有较高的加密强度,可以满足业务密钥对安全性的更高要求。另外,采用公开密钥体制加密,经营者不必须传输用户的私有密钥,只需知道用户的公开密钥就可对业务密钥进行加密,用户使用自己的私有密钥即可解密。这样可以在用户端产生一对密钥,只要将公钥传给发送端经核实可用后即可,而解密的关键私有密钥不需进行一次传输,可以提高系统的安全性。在公钥体制下还可实现数字签名、数字证书等功能,对于系统的业务拓宽、业务范围,提供在线支付等功能也非常有利。

目前主要的公钥加密算法主要有RSA公钥加密算法,背包公钥密码系统,勒宾(Rabin)密码,麦克黎斯(Mceliece)公钥密码,椭圆曲线公钥密码等,其中RSA公钥加密算法应用较广。

<think> 我们正在解决Unity中出现的错误:"LoadActionManifest failed. Could not find action manifest for app '19216: CA雷达' with key 'system.generated.openxr.ca雷达.ca雷达.exe'" 这个错误通常与OpenXR的设置有关,特别是在使用动作映射(action manifest)时。以下步骤可能有助于解决此问题: 1. **检查动作映射文件是否存在**:错误提示找不到动作映射文件。请确保在项目中存在一个.action文件(例如:`ca雷达.action`),并且已经正确配置。 2. **在Unity编辑器中设置动作映射文件**: - 打开`Edit > Project Settings > XR Plug-in Management > OpenXR`。 - 在`OpenXR`设置中,找到`Interaction Profiles`部分,确保已经添加了所需的交互配置文件。 - 在`OpenXR`设置的顶部,有一个`Action Maps`部分,这里需要指定你的.action文件。点击`+`号添加你的.action文件(例如:`ca雷达.action`)。 3. **检查.action文件的路径**:Unity有时对路径比较敏感。确保.action文件放在`Assets`文件夹下,并且不要在过深的子文件夹中。最好放在`Assets`根目录或`Assets/Input`这样的标准文件夹中。 4. **重新生成动作映射**:在`OpenXR`设置中,尝试删除现有的动作映射引用,然后重新添加。也可以尝试点击`Rebuild`或`Generate`按钮(如果有的话)。 5. **检查OpenXR插件版本**:确保你使用的OpenXR插件是最新的,或者至少是稳定的版本。有时候旧版本存在已知问题。 6. **检查应用程序的ID**:错误信息中提到了一个app ID(19216)和key(system.generated.openxr.ca雷达.ca雷达.exe)。这通常是在构建应用程序时生成的。请确保在构建设置中,应用程序的标识符(在Player Settings > Other Settings中)与.action文件中定义的应用程序ID相匹配(如果有定义的话)。但通常,.action文件并不直接包含应用程序ID,而是通过OpenXR运行时来关联。 7. **清理项目并重新导入**:有时候文件引用可能会损坏。尝试删除`Library`文件夹(关闭Unity后),然后重新打开项目,让Unity重新生成。 8. **查看Unity日志**:查看Unity编辑器日志(在Windows上可以通过`Window > Analysis > Console`打开),看是否有其他相关错误信息。日志可能会提供更具体的线索。 如果以上步骤不能解决问题,可能需要进一步检查: - 是否在代码中动态加载了动作映射?确保加载路径正确。 - 是否在构建后出现此错误?如果是,请确保.action文件被包含在构建中(通常放在Assets下的文件会自动包含)。 由于错误信息中提到了“system.generated.openxr.ca雷达.ca雷达.exe”,这看起来是一个自动生成的key。可能是Unity在构建时为应用程序生成的,但找不到对应的动作映射。确保在构建前动作映射已经正确配置。 注意:这个错误通常发生在应用程序启动时,尝试初始化OpenXR输入系统的时候。 如果问题仍然存在,请提供更多的上下文信息,例如: - 发生错误时是在编辑器模式还是构建后? - 是否使用了特定的XR设备? - 你的Unity版本和OpenXR插件版本是什么? 希望这些步骤能帮助你解决问题。 §§相关问题§§ 1. Unity中如何正确配置OpenXR动作映射文件? 2. 为什么在Unity构建后会出现OpenXR动作映射丢失的问题? 3. 如何解决Unity OpenXR插件的常见兼容性问题? 4. 如何在Unity中为特定XR设备设置输入动作? 5. Unity OpenXR插件更新后出现兼容性问题怎么办? </think> ### Unity中"LoadActionManifest failed"错误的解决方案 这个错误通常发生在Unity的OpenXR插件配置中,表明系统无法找到指定的动作映射文件(action manifest)。以下是完整的解决步骤: 1. **验证.action文件存在性** - 检查项目中是否存在`ca雷达.action`文件 - 文件应位于:`Assets/Input`或`Assets/StreamingAssets`目录 - 若缺失,需创建并配置动作映射文件(参考下文) 2. **配置OpenXR动作映射** ```markdown 1. 打开 `Edit > Project Settings > XR Plug-in Management` 2. 选择 `OpenXR` 选项卡 3. 在 `Interaction Profiles` 下方点击 `+` 4. 添加适用于您设备的交互配置文件(如Oculus Touch) 5. 在 `Action Maps` 部分导入您的`.action`文件 ``` 3. **重新生成动作映射** - 删除现有引用:在OpenXR设置中移除`ca雷达.action` - 重新导入文件:将`.action`文件拖入`Assets/Input`文件夹 - 强制重新生成: ```markdown 1. 关闭Unity编辑器 2. 删除项目目录下的`Library`文件夹 3. 重新打开Unity并等待重新编译 ``` 4. **检查文件路径规范** - 确保路径不包含中文或特殊字符(建议将"CA雷达"改为英文名) - 修改应用标识符:`Edit > Project Settings > Player` - 在`Other Settings`中将`Product Name`改为英文(如"CA_Radar") 5. **更新XR插件** - 打开`Window > Package Manager` - 更新`XR Plugin Management`和`OpenXR Plugin`至最新版 - 移除冲突插件:检查是否有多个XR插件同时启用[^1] 6. **修改动作映射声明(关键步骤)** 在`ca雷达.action`文件中添加显式应用声明: ```json { "name": "ca雷达", "localization": [ { "language_tag": "en", "/interaction_profiles": "CA Radar" } ], "actions": [...], "default_bindings": [...] } ``` **预防措施:** - 构建前执行:`Assets > Reimport All` - 禁用不必要的输入系统:`Project Settings > Input System Package > Disable` - 验证XR设备兼容性:确保HMD设备支持OpenXR 1.0+标准 > 如果问题持续存在,检查Unity Editor日志(`Window > Analysis > Console`)查看具体加载失败路径,90%的案例可通过重建.action文件和更新插件解决[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值