CAS (Conditional Access System)
- 작성자
- 고친과정
2010년 2월 25일 : 처음씀
1.1. 시작하기전에
CAS (Conditional Access System)는 허가된 가입자만 그에 맞는 서비스 이용권한을 획득하여 이용할수 있도록 하는 접근권한관리 방식입니다. 이 문서에서는 이것을 간략히 설명하고 이해를 돕는데 목적이 있습니다. 필자의 개인적 이해력의 차이로 인하여 사실과 다소 어긋나는 사항도 있을수 있으므로 잘못된 부분은 지적해주시면 감사하겠습니다.
CAS (Conditional Access System)는 다음과 같은 기능요소를 구현할수 있는 시스템입니다.
CAS (Conditional Access System)는 다음과 같은 기능요소를 구현할수 있는 시스템입니다.
- 보안기술을 사용하여 서비스에 필요한 Data를 보호
- 가입자의 서비스 이용권한 제어 (이용권한을 부여하거나 제한)
- 가입자의 이용정보 및 과금자료를 수집
- 서비스 사업자가 원하는 서비스 패키지로 개별적 구성이 가능
1.2. 용어
- CSA (Common Scrambling Algorithm)
- CA (Conditional Access)
- CI (Common Interface)
- CAS (Conditional Access System)
- CAM (Conditional Access Module)
- PMT (Program Map Table)
- CAT (Conditional Access Table)
- EMM (Entitlement Management Message)
- ECM (Entitlement Control Message)
- CW (Control Word)
- ATR (Answer to reset)
- COS (Card operating system)
- BCD (Binary-coded decimal)
1.3. 주요 처리동작 흐름
- CAT (Conditional Access Table)로부터 CA Descriptor를 추출합니다.
- 추출한 CA Descriptor를 Smartcard로 알려주고 EMM (Entitlement Management Message)를 추출할수 있는 필터링 요소를 전달받거나
- CA Descriptor 내에서 EMM (Entitlement Management Message) PID를 추출합니다.
- EMM (Entitlement Management Message)을 추출하여 Smartcard로 이를 알려주고 권한의 종류를 확인합니다.
- 현재 이용하고자 하는 서비스에 해당하는 PMT (Program Map Table)을 찾고 그 안에 있는 CA Descriptor를 추출합니다.
- 추출한 CA Descriptor를 Smartcard로 알려주고 ECM (Entitlement Control Message)를 추출할수 있는 필터링 요소를 전달받거나
- CA Descriptor 내에서 ECM (Entitlement Control Message) PID를 추출합니다.
- ECM (Entitlement Control Message)을 추출하여 Smartcard로 이를 알려주고 해당서비스의 Stream을 해독할수 있는 열쇠인 CW (Control Word)를 얻어냅니다.
- 얻어낸 CW (Control Word) 를 이용하여 Stream을 해독합니다.
주요 흐름은 이러하지만 실제 CAS업체마다 ECM과 EMM을 처리하는 방법에서 다소 차이가 있는것이 보통입니다.
1.4. CAT (Conditional Access Table)
Syntax No. of bits Mnemonic ----------------------------------------------------- CA_section() { table_id 8 uimsbf section_syntax_indicator 1 bslbf '0' 1 bslbf reserved 2 bslbf section_length 12 uimsbf reserved 18 bslbf version_number 5 uimsbf current_next_indicator 1 bslbf section_number 8 uimsbf last_section_number 8 uimsbf for (i=0; i<N;i++) { descriptor() } CRC_32 32 rpchof }
- CRC_32는 다음과 같이 구현된 함수로 값을 검사하면 됩니다. CRC_32검사구간은 table_id부터 CRC_32를 제외한 나머지모두이며 아래의 함수에서 초기 s_seed값은 0FFFFFFFFH 입니다.
typedef unsigned char hwport_uint8_t; typedef unsigned int hwport_uint32_t; hwport_uint32_t hwport_crc32_section(hwport_uint32_t s_seed, const void *s_data, size_t s_size) { size_t s_offset; hwport_uint8_t s_byte; int s_bit; int s_select; s_offset = (size_t)0u; while(s_offset < s_size) { s_byte = *(((const hwport_uint8_t *)s_data) + s_offset); for(s_bit = 0;s_bit < 8;s_bit++) { s_select = ((int)((s_seed >> 31) & ((hwport_uint32_t)1u))) ^ ((int)((s_byte >> (7 - s_bit)) & ((hwport_uint8_t)1u))); s_seed <<= 1; if(s_select != 0) { s_seed ^= (hwport_uint32_t)0x04C11DB7u; } } s_offset++; } return(s_seed); }
1.5. CA Descriptor (Conditional Access Descriptor)
CA Descriptor는 CAT (Conditional Access Table)와 PMT (Program Map Table)의 Descriptor영역에 Descriptor tag 09H 로 표현되는 Descriptor이며 다음과 같은 형태를 가지고 있습니다.
Syntax No. of bits Mnemonic ----------------------------------------------------- CA_descriptor() { descriptor_tag 8 uimsbf descriptor_length 8 uimsbf CA_system_ID 16 uimsbf reserved 3 bslbf CA_PID 13 uimsbf for ( i=0; i<N; i++) { private_data_byte 8 uimsbf } }
- descriptor_tag는 09H가 CA Descriptor (Conditional Access Descriptor)를 나타냅니다.
- descriptor_length는 descriptor_tag와 descriptor_length를 제외한 나머지 CA_descriptor의 크기를 나타냅니다.
- CA_system_ID는 CA (Conditional Access)의 종류를 나타내며 다음과 같이 사용되고 있습니다.
CA_system_ID 값 명칭 개발사 비고 4800H Accessgate Telemann 4A20H AlphaCrypt AlphaCrypt B-CAS 현재 일본에서만 사용중인것으로 알려져 있음 1702H BetaCrypt1 BetaTechnik/Beta Research (subsidiary of KirchMedia) 1722H 1762H 1720H BetaCrypt2 2600H BISS European Broadcasting Union 4900H ChinaCrypt CrytoWorks (China) (Irdeto) 22F0H Codicrypt Scopus Network Technologies 0B00H Conax CAS 5, Conax CAS 7 Norwegian Telekom CoreCrypt 0D00H Cryptoworks Philips CryptoTec 0D02H 0D03H 0D05H 0D07H 0D20H 4ABFH CTI-CAS Beijing Compunicate Technology Inc. 0700H DigiCipher 2 Jerrold/GI/Motorola 4DTV 4A70H DreamCrypt Dream Multimedia 4A10H EasyCas Easycas 0464H EuroDec Eurodec 5501H Griffin Nucleus Systems, Ltd. 0606H Irdeto 1 Irdeto 0602H Irdeto 2 0604H 0606H 0608H 0622H 0626H 4AA1H KeyFly SIDSA 0100H Seca Mediaguard 1 SECA 0100H Seca Mediaguard 2 (v1+) 0100H Seca Mediaguard 3 1800H Nagravision Nagravision 1801H 1810H 1830H 1801H Nagravision Carmageddon 1702H Nagravision Aladin 1722H 1762H 1801H 1801H Nagravision 3 - Merlin 4A02H Novel-SuperTV Novel-SuperTV 중국 및 그 밖에 국가에서 사용 4AD4H OmniCrypt Widevine Technologies, Inc. 0E00H PowerVu Scientific Atlanta 0E00H PowerVu+ 1000H RAS (Remote Authorisation System) Tandberg Television 4AE0H RossCrypt Digi Raum Electronics Co. Ltd. 0101H RusCrypto 4A60H SkyCrypt / Neotioncrypt / Neotion SHL AtSky/Neotion 4A61H 4A63H T-crypt 4A80H ThalesCrypt TPS 0500H TPS-Crypt France Telecom 0500H Viaccess PC2.3, or Viaccess 1 0500H Viaccess PC2.4, or Viaccess 2 0500H Viaccess PC2.5, or Viaccess 2 0500H Viaccess PC2.6, or Viaccess 3 0500H Viaccess PC3.0 VideoCrypt I News Datacom VideoCrypt II VideoCrypt-S 0911H NDS Videoguard 1 / NDS Videoguard 2 / NDS Videoguard 3 NDS 0919H 0960H 0961H 093BH NDS Videoguard 3 0963H 4AD0H X-Crypt XCrypt Inc. 성인용 채널에만 사용되고 있습니다. 4AD1H 5500H Z-Crypt/DRE-Crypt Digi Raum Electronics 4AE0H - CA_PID는 CAT에서는 EMM PID를 나타내며 PMT에서는 ECM PID를 나타냅니다.
- private_data_byte는 있을수도 있고 없을수도 있는데 이것은 CAS업체별, 방송사업자별로 별도 규정하여 사용합니다.
1.6. 참고문헌
- http://blog.naver.com/windheim
- http://en.wikipedia.org/wiki/Conditional_access
- http://en.wikipedia.org/wiki/Smart_card
- ISO/IEC 13818-1 ("GENERIC CODING OF MOVING PICTURES AND ASSOCIATED AUDIO: SYSTEMS")
- ISO/IEC 7816-3
- ISO/IEC 14443-4