Кодируем цифровые каналы в своей КТВ-сети

Внешний вид смарткарт TVCASЭта статья задумана как сборник неких моих мыслей и тезисов по тематике разработанной системы. В дальнейшем планируется всё структурировать, перевести на английский и опубликовать на специальном для этого сайте TVCAS.COM. И да, — у меня отличные новости! Эта CAS абсолютно бесплатна, как в части установки, так и в части дальнейшего использования, т.е.  полностью освобождённая от лицензионных поборов и платы «за абонентов».

Представленная здесь CAS относится к единому алгоритму шифрования SimulCrypt. Для возможности использования смарткарт TVCAS совместно с абонентским оборудованием, реализована поддержка Conax (в будущем Irdeto). Мною были протестированы и успешно работают модули, изображённые ниже…

VFyC3k6Работают они все одинаково, отличие только в этикетке. Смарткарты шарятся в oscam/wicard, однако, реализован счётчик запросов, который позволяет открывать не более 2 каналов одновременно. При превышении лимита карта уходит в not found . Лимит в 2 канала обусловлен тем, что в природе существуют приставки, позволяющие в момент просмотра одного канала, записывать другой.

ХАРАКТЕРИСТИКИ TVCAS
1. Максимально гарантированное количество абонентов ограничено скоростью работы базы данных и составляет 50000 (больше не тестировалось);
2. Количество кодируемых каналов — не ограничено;
3. Смарткарты самодельные на PIC16F688 (в идеале -I/ST в корпусе TSSOP14);
4. Максимальное количество реализуемых пакетов телепрограмм(классы) — 8;
5. Интеграция с биллингом — через файл выгрузки CSV;

В будущем планируется реализовать отправку сообщений абоненту и возможность управления картами через API для взаимодействия с биллингом. Также разрабатывается вариант поддержки CAM-модулей IRDETO.

Структурная схема TVCAS
78WayE8Принцип работы
Между скремблером MUX (на схеме Astra 5.65) и TVCAS устанавливаются два соединения — MUX подключается к расшаренному порту ECMG (connect 1), а EMMG подключается к порту MUX-а (connect 2).

Connect 1 необходим для передачи ECM-пакета. MUX генерирует ключи CW1 и CW2, отдаёт их генератору ECMG, а тот в ответ передаёт закриптованный пакет (ECM), который впоследствии инклюдится в поток с определённым PID-ом. В этом закриптованном пакете содержится три основных параметра: текущее время, ключи (CW1 и CW2) и Access Criteria (в рамках данной CAS — это признак пакета программ). ECM-пакет предназначается всем смарткартам.

ECM-пакет системы TVCAS

ECM-пакет системы TVCAS

Connect 2 служит для передачи EMM-пакетов. EMMG генерирует пакеты для каждой смарткарты (если её статус активен) и передаёт в MUX. Таким образом, каждый EMM-пакет предназначается только конкретной своей смарткарте.

EMM-пакет системы TVCAS

EMM-пакет системы TVCAS

Данные криптуются алгоритмом, чем-то схожим на ГОСТ Р. В нём используется сеть Фейстеля и многораундовый битовый сдвиг. В алгоритме (файл /cas/bin/gost.php) тайного ничего нет, напротив, согласно Принципа Керкгоффса, работа криптоустойчивых систем должна быть известна. Секретом здесь является лишь КЛЮЧ. Без него расшифровать пакет не представляется возможным. Ключи находятся в базе данных сервера TVCAS и на запрограммированных смарткартах. Если со смарткартами всё безопасно — фьюзами установлена защита от чтения кода и памяти, то с сервером куда сложнее — побеспокойтесь о безопасности ключей, начиная от персонала, заканчивая использованием для этой цели только локальной машины без выхода в Интернет!

Установка сервера.
Установку TVCAS-сервера рекомендуется производить на Debian 8.11 с PHP5. На более современных релизах, вероятно, придётся корректировать работу с базой данных MariaDB.

# пакеты, необходимые после установки ОС
apt-get install mc sudo apache2 php5 libapache2-mod-php5 mysql-server php5-mysql
  1. При установке пакета mysql-server зададим пароль к БД. Например tvmastercas
  2. Добавить в файл /etc/sudoers следующие строки:
    www-data ALL=(ALL) NOPASSWD: /usr/bin/perl
    www-data ALL=(ALL) NOPASSWD: /var/www/html/cas/bin/ecmg.php
    www-data ALL=(ALL) NOPASSWD: /var/www/html/cas/bin/emmg.php
    www-data ALL=(ALL) NOPASSWD: /bin/kill
    www-data ALL=(ALL) NOPASSWD: /bin/rm
    www-data ALL=(ALL) NOPASSWD: /usr/bin/tail

    # перезапускам сервис sudo
    service sudo restart 

  3.  Добавить в файл /etc/crontab следующие строки (не забываем про перенос каретки [ENTER] в конце строки):
    */1 * * * * root  /var/www/html/cas/bin/cron1min.php &
  4. Качаем и распаковываем на сервер файлы
    (строки ниже актуальны также для обновления системы):

    rm -rf /var/www/html
    wget https://tvcas.com/downloads/tvcas.tar.gz
    tar -C /var/www -xf tvcas.tar.gz
    rm tvcas.tar.gz
  5. Создаём и импортируем базу данных MySQL:
    mysql -uroot -ptvmastercas
    > CREATE DATABASE tvcas DEFAULT CHARACTER SET UTF8;
    > exit
    mysql -uroot -ptvmastercas tvcas < /var/www/html/tvcas.sql
    rm /var/www/html/tvcas.sql

WEB-ИНТЕРФЕЙС имеет две точки входа. Вход для администратора системы (http://xx.xx.xx.xx/cas, admin/admin), здесь доступны логи, создание новых смарткарт, генераторов и вход для оператора системы (http://xx.xx.xx.xx/ , oper/oper) — панель с базовыми функциями просмотра/управления.
Пароли к пользователям можно изменить в файле /var/www/html/includes/config.php:

config.php

/var/www/html/includes/config.php

Если ваш PHP настроен на местный часовой пояс (файл php.ini), то параметр zone оставляем как есть. Если нет, то, например, для Москвы (Europe/Moscow) ‘zone’ => «+0300». Обратите внимание на параметр ecm_key . Во избежание дублирования ключей у разных операторов, при каждом скачивании с tvcas.com, в архиве он будет другой! (отключил 04.02.2020. меняйте ключи самостоятельно) Хотя ничего не мешает использовать лично сгенерированный ключ. Важно, чтобы он был в hex длиной 24 байта. В любом случае, рекомендую этот ключ сохранить в надёжном месте под паролем, потому как от его сохранности зависит безопасность системы в будущем.

Админка TVCAS - Смарткарты

Админка TVCAS — Смарткарты

Для наглядности, в установленной «из коробки» системе уже добавлены несколько карт и по одному генератору ECM и EMM. EMM-ключи для каждой карты также генерируются уникальными при каждой загрузке архива с сайта. (отключил 04.02.2020. меняйте ключи самостоятельно) Создание и программирование карт оставим на потом, а сейчас посмотрим как связать между собой сервер TVCAS и Astra 5.65. Кстати, версия 5.64 тоже будет работать, но там есть нюансы с клонированием EMM, поэтому рекомендую именно 5.65.

Настройка ASTRA

Шаг 1 - создаём в астре новый CAS

Шаг 1 — создаём в астре новый CAS

Шаг 1.1 - создаём в астре новый CAS

Шаг 1.1 — создаём в астре новый CAS

Шаг 2 - в свойствах канала добавляем NEW CAS

Шаг 2 — в свойствах канала добавляем NEW CAS

Коснёмся немного параметра ACCESS CRITERIA. Как упоминалось выше, он отвечает за пакетирование. Каждая цифра — это свой пакет. Таким образом, если у вас всего три пакета, то используйте только три последние цифры. При вводе поддерживаются «0» и «1». На рисунке выше канал принадлежит «первому» пакету, если бы мы ввели 01010101, то канал принадлежал бы «первому», «третьему», «пятому» и «седьмому» пакетам.

После проделанных настроек, Astra необходимо перезапустить, т.к. созданный EMM-порт открывается только при её старте.

Если вы всё сделали правильно, то на вкладках генераторов в панели администратора увидим коннекты.

Connect 1 - ECMG-ASTRA

Connect 1 — ECMG-ASTRA

Connect 2 - Astra-EMMG

Connect 2 — Astra-EMMG

Если у вас всё получилось и работает как на картинках, то переходим к самому интересному, на мой взгляд.

СМАРТКАРТЫ системы TVCAS
Самой затратной частью в разработке этого проекта пришлись именно смарткарты. Хотя, затраты были связаны как раз с поиском подходящей «белки-болванки», которую можно было запрограммировать под свои нужды. Я даже сделал несколько закупок Java-карт в Канаде и Америке, ведь продавцы утверждали, что кастомный ATR они умеют. Но как оказалось выброшенные деньги. На ebay есть некоторые интересные варианты, но ценник в 10$ за штуку считаю не демократичным. Поэтому решил разработать свои. Себестоимость без учёта работы получилась около 1.5$/шт. Вероятно, что при бОльших объёмах закупки в Китае можно договориться о скидке.

Принципиальная схема смарткарты TVCAS

Принципиальная схема смарткарты TVCAS

Смарткарта выполнена на одностороннем текстолите, толщиной около 0.8 мм. Заготовки можно заказать на pcbway.com( download LAY и Gerber). Здесь можно залить проект в гербере и повертеть печатную плату в 3D.

Печатная плата смарткарты TVCAS

Печатная плата смарткарты TVCAS

На плате размещены три детали: PIC-контроллер, конденсатор по питанию 0.1 мкФ (типоразмер 0805) и диод с барьером Шоттки. Пунктиром показана необязательная часть, служащая для отладки прошивки: в нормальном режиме работы при скорости 9600 бод (в оскаме или приставке) диод мигает короткой вспышкой при ECM-пакете и длинной при EMM. При скорости 55800 бод (работа в CAM-модуле) диод напротив, — горит постоянно, а тухнет кратковременно при ECM и продолжительно при EMM-пакетах.

Внешний вид смарткарт TVCAS

Внешний вид смарткарт TVCAS

Для прошивки карт подойдёт любой программатор PIC-контроллеров. Пользовался я PIC-К150 , но учитывая, что в современных Windows всё больше и больше проблем с COM-портами (программа и драйвера здесь), буду рекомендовать PICKIT2 как стабильный.

PIC-K150 с переходником для смарткарт

PIC-K150 с переходником для смарткарт

nQ2gHYp

PICKIT2 с переходником для смарткарт

Обратите внимание, что на обоих программаторах я припаял шнуры USB. Советую и вам делать то же самое. Укорачивать не обязательно, если только у вас не ноутбук, а вот пайка не повредит, а только избавит от головной боли с китайскими разъёмами.

При программировании большого количества смарткарт, необходимо сделать слот из какого-нибудь картридера. Я использовал MicroUSB EMV. Более менее жёлтые, похожие на позолоту коннекторы, внушили, что прослужит этот слот долго))). Все радиоэлементы с платы я удалил, а к сокету припаял разъём ICSP.

Модернизация MicroUSB EMV

Модернизация MicroUSB EMV

Подключение смарткарты к программатору

Подключение смарткарты к программатору

Программу для программаторов PICKIT2 на сайте Microchip-а вы не найдёте, потому что компания прекратила поддержку данного девайса из-за китайских клонов. Работают они, к слову, ничуть не хуже оригинальных, а стоят в разы дешевле. После установки драйверов и запуска программы PicKit2 видим такой интерфейс…

2KS4LUmЕсли смарткарта подключена, то программер определит автоматом тип микросхемы. Единственное, что дополнительно надо сделать — это включить VDD и выставить питание 4.8 В. Это необходимо для прошивки китайских вариантов PIC-ов. Не судите их строго — они не подделки. Просто оригинальные с магазина идут «чистые», а китайские — с какой-то записанной прошивкой. Перепрошиваются легко. Работоспособность проверена, нюансов не обнаружено.

Если вы были внимательными, то в панели администратора напротив каждой смарткарты имеется значок «Download Firmware»..

Download Firmware

Download Firmware

Скачиваем прошивку (для каждой карты своя) и заливаем её через программер в смарткарту: File -> Import HEX, затем клавиша Write.

Если Вы создали смарткарты в течение 3 последних часов, то появится кнопка «Print labels» по нажатии на которую можно распечатать номера карт (например на самоклейке) и таким образом пометить прошитые карточки.

Распечатка лейб на смарткарты

Распечатка лейб на смарткарты

Теперь карту можно использовать совместно с CAM-модулем или в приставке.

Статья будет дополняться по мере поступления вопросов. Для этого приглашаем в группу посвящённую TVCAS в Телеграмме: https://t.me/tvcas

 


UPDATE /12.11.2019/
Исправлена директива в прошивке смарткарты, при которой прошитая карта совсем не определялась в модулях от ДОМРУ.

domru

UPDATE /25.11.2019/
По просьбам операторов добавил в систему возможность паринга карты и CAM-модуля. В панели достаточно установить галку «Pair» (функция доступна и для оператора и для суперпользователя). Процесс женитьбы/развода проходит лишь с поступлением свежей EMM (не следующей, а именно СВЕЖЕЙ!) на карту, т.е. спустя несколько минут. Можно конечно ускорить процесс, тогда перезапустите EMM-генератор. Из-за особенностей работы китайских приставок, которые зачастую эмулируют оскамом CAM-модуль с одним и тем же идентификатором (серийным номером), при женитьбе карты она скорее всего будет работать как минимум в таких же приставках одной серии и/или партии. Это имхо нуждается в проверке, бо приставок у меня нет, всё как-то модули практикуем.

Для обновления уже установленной системы, надо обновить файлы из архива на tvcas.com и добавить поле в таблице tvcas_smatcards с именем `pair` типа INTEGER (1) NOT NULL DEFAULT 0;

Функция паринга смарткарты и CAM-модуля в системе TVCAS

Функция паринга смарткарты и CAM-модуля в системе TVCAS

Посмотреть состоит ли карта в паре можно в подписках карты. Рядом с названием подписки будет стоять «+» (плюсик).

lscYoDl

UPDATE /26.11.2019/
Добавил в прошивку параметр ID Location. Теперь, если прочитать программатором прошитую смарткарту, можно узнать её серийный номер в HEX-формате (4 байта).

Серийный номер смарткарты TVCAS

UPDATE /27.11.2019/
Добавил возможность смены названия пакета (по дефолту TVCAS). Замена осуществляется в файле /includes/config.php (опция «trademark»). Этот параметр записывается в смарткарту через firmware на этапе программирования, т.е. в дальнейшем при работе не изменяется.
Поддерживаются только символы из стандартной части ASCII-таблицы. Длина поля не более 8 байт (если больше, то обрежется).

QY6mELg

UPDATE /30.01.2020/
Так. Необходимо расставить все точки на Ё. Некоторые операторы распространяют дезинформацию о том, что TVCAS система ненадёжна и карты можно клонировать. Ещё раз повторю — прошивка устанавливает бит защиты от чтения — это значит, что прочитать ни FLASH, ни EEPROM — НЕВОЗМОЖНО. Согласен, что на больших мануфактурах при большом интересе китайца могут «поработать» с чипом (как собственно и с любой другой смарткартой). Но вопрос цены будет варьироваться в десятках килодолларов, что с точки зрения малого количества абонентов просто нецелесообразно делать пиратам. А система разрабатывалась как раз для малых сетей. Если у вас большая сеть, вкладывайте 100к$ и кодируйте Irdeto 8.0 🙂

UPDATE /04.02.2020/
Обновил код для работы с PHP7 и MariaDB. Ввёл систему версий в футере админки.

Запись опубликована в рубрике C++, PHP, Программирование, Телевидение с метками , , , , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий