Эта статья задумана как сборник неких моих мыслей и тезисов по тематике разработанной системы. В дальнейшем планируется всё структурировать, перевести на английский и опубликовать на специальном для этого сайте TVCAS.COM. И да, — у меня отличные новости! Эта CAS абсолютно бесплатна, как в части установки, так и в части дальнейшего использования, т.е. полностью освобождённая от лицензионных поборов и платы «за абонентов».
Представленная здесь CAS относится к единому алгоритму шифрования SimulCrypt. Для возможности использования смарткарт TVCAS совместно с абонентским оборудованием, реализована поддержка Conax (в будущем Irdeto). Мною были протестированы и успешно работают модули, изображённые ниже…
Работают они все одинаково, отличие только в этикетке. Смарткарты шарятся в oscam/wicard, однако, реализован счётчик запросов, который позволяет открывать не более 2 каналов одновременно. При превышении лимита карта уходит в not found
. Лимит в 2 канала обусловлен тем, что в природе существуют приставки, позволяющие в момент просмотра одного канала, записывать другой.
ХАРАКТЕРИСТИКИ TVCAS
1. Максимально гарантированное количество абонентов ограничено скоростью работы базы данных и составляет 50000 (больше не тестировалось);
2. Количество кодируемых каналов — не ограничено;
3. Смарткарты самодельные на PIC16F688 (в идеале -I/ST в корпусе TSSOP14);
4. Максимальное количество реализуемых пакетов телепрограмм(классы) — 8;
5. Интеграция с биллингом — через файл выгрузки CSV;
В будущем планируется реализовать отправку сообщений абоненту и возможность управления картами через API для взаимодействия с биллингом. Также разрабатывается вариант поддержки CAM-модулей IRDETO.
Структурная схема TVCAS
Принцип работы
Между скремблером 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-пакет предназначается всем смарткартам.
Connect 2 служит для передачи EMM-пакетов. EMMG генерирует пакеты для каждой смарткарты (если её статус активен) и передаёт в MUX. Таким образом, каждый EMM-пакет предназначается только конкретной своей смарткарте.
Данные криптуются алгоритмом, чем-то схожим на ГОСТ Р. В нём используется сеть Фейстеля и многораундовый битовый сдвиг. В алгоритме (файл /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
- При установке пакета mysql-server зададим пароль к БД. Например
tvmastercas
- Добавить в файл /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 - Добавить в файл /etc/crontab следующие строки (не забываем про перенос каретки [ENTER] в конце строки):
*/1 * * * * root /var/www/html/cas/bin/cron1min.php &
- Качаем и распаковываем на сервер файлы
(строки ниже актуальны также для обновления системы):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
- Создаём и импортируем базу данных 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:
Если ваш PHP настроен на местный часовой пояс (файл php.ini), то параметр zone
оставляем как есть. Если нет, то, например, для Москвы (Europe/Moscow) ‘zone’ => «+0300». Обратите внимание на параметр ecm_key
. Во избежание дублирования ключей у разных операторов, при каждом скачивании с tvcas.com, в архиве он будет другой! (отключил 04.02.2020. меняйте ключи самостоятельно) Хотя ничего не мешает использовать лично сгенерированный ключ. Важно, чтобы он был в hex длиной 24 байта. В любом случае, рекомендую этот ключ сохранить в надёжном месте под паролем, потому как от его сохранности зависит безопасность системы в будущем.
Для наглядности, в установленной «из коробки» системе уже добавлены несколько карт и по одному генератору ECM и EMM. EMM-ключи для каждой карты также генерируются уникальными при каждой загрузке архива с сайта. (отключил 04.02.2020. меняйте ключи самостоятельно) Создание и программирование карт оставим на потом, а сейчас посмотрим как связать между собой сервер TVCAS и Astra 5.65. Кстати, версия 5.64 тоже будет работать, но там есть нюансы с клонированием EMM, поэтому рекомендую именно 5.65.
Настройка ASTRA
Коснёмся немного параметра ACCESS CRITERIA. Как упоминалось выше, он отвечает за пакетирование. Каждая цифра — это свой пакет. Таким образом, если у вас всего три пакета, то используйте только три последние цифры. При вводе поддерживаются «0» и «1». На рисунке выше канал принадлежит «первому» пакету, если бы мы ввели 01010101, то канал принадлежал бы «первому», «третьему», «пятому» и «седьмому» пакетам.
После проделанных настроек, Astra необходимо перезапустить, т.к. созданный EMM-порт открывается только при её старте.
Если вы всё сделали правильно, то на вкладках генераторов в панели администратора увидим коннекты.
Если у вас всё получилось и работает как на картинках, то переходим к самому интересному, на мой взгляд.
СМАРТКАРТЫ системы TVCAS
Самой затратной частью в разработке этого проекта пришлись именно смарткарты. Хотя, затраты были связаны как раз с поиском подходящей «белки-болванки», которую можно было запрограммировать под свои нужды. Я даже сделал несколько закупок Java-карт в Канаде и Америке, ведь продавцы утверждали, что кастомный ATR они умеют. Но как оказалось выброшенные деньги. На ebay есть некоторые интересные варианты, но ценник в 10$ за штуку считаю не демократичным. Поэтому решил разработать свои. Себестоимость без учёта работы получилась около 1.5$/шт. Вероятно, что при бОльших объёмах закупки в Китае можно договориться о скидке.
Смарткарта выполнена на одностороннем текстолите, толщиной около 0.8 мм. Заготовки можно заказать на pcbway.com( download LAY и Gerber). Здесь можно залить проект в гербере и повертеть печатную плату в 3D.
На плате размещены три детали: PIC-контроллер, конденсатор по питанию 0.1 мкФ (типоразмер 0805) и диод с барьером Шоттки. Пунктиром показана необязательная часть, служащая для отладки прошивки: в нормальном режиме работы при скорости 9600 бод (в оскаме или приставке) диод мигает короткой вспышкой при ECM-пакете и длинной при EMM. При скорости 55800 бод (работа в CAM-модуле) диод напротив, — горит постоянно, а тухнет кратковременно при ECM и продолжительно при EMM-пакетах.
Для прошивки карт подойдёт любой программатор PIC-контроллеров. Пользовался я PIC-К150 , но учитывая, что в современных Windows всё больше и больше проблем с COM-портами (программа и драйвера здесь), буду рекомендовать PICKIT2 как стабильный.
Обратите внимание, что на обоих программаторах я припаял шнуры USB. Советую и вам делать то же самое. Укорачивать не обязательно, если только у вас не ноутбук, а вот пайка не повредит, а только избавит от головной боли с китайскими разъёмами.
При программировании большого количества смарткарт, необходимо сделать слот из какого-нибудь картридера. Я использовал MicroUSB EMV. Более менее жёлтые, похожие на позолоту коннекторы, внушили, что прослужит этот слот долго))). Все радиоэлементы с платы я удалил, а к сокету припаял разъём ICSP.
Программу для программаторов PICKIT2 на сайте Microchip-а вы не найдёте, потому что компания прекратила поддержку данного девайса из-за китайских клонов. Работают они, к слову, ничуть не хуже оригинальных, а стоят в разы дешевле. После установки драйверов и запуска программы PicKit2 видим такой интерфейс…
Если смарткарта подключена, то программер определит автоматом тип микросхемы. Единственное, что дополнительно надо сделать — это включить VDD и выставить питание 4.8 В. Это необходимо для прошивки китайских вариантов PIC-ов. Не судите их строго — они не подделки. Просто оригинальные с магазина идут «чистые», а китайские — с какой-то записанной прошивкой. Перепрошиваются легко. Работоспособность проверена, нюансов не обнаружено.
Если вы были внимательными, то в панели администратора напротив каждой смарткарты имеется значок «Download Firmware»..
Скачиваем прошивку (для каждой карты своя) и заливаем её через программер в смарткарту: File -> Import HEX, затем клавиша Write.
Если Вы создали смарткарты в течение 3 последних часов, то появится кнопка «Print labels» по нажатии на которую можно распечатать номера карт (например на самоклейке) и таким образом пометить прошитые карточки.
Теперь карту можно использовать совместно с CAM-модулем или в приставке.
Статья будет дополняться по мере поступления вопросов. Для этого приглашаем в группу посвящённую TVCAS в Телеграмме: https://t.me/tvcas
UPDATE /12.11.2019/
Исправлена директива в прошивке смарткарты, при которой прошитая карта совсем не определялась в модулях от ДОМРУ.
UPDATE /25.11.2019/
По просьбам операторов добавил в систему возможность паринга карты и CAM-модуля. В панели достаточно установить галку «Pair» (функция доступна и для оператора и для суперпользователя). Процесс женитьбы/развода проходит лишь с поступлением свежей EMM (не следующей, а именно СВЕЖЕЙ!) на карту, т.е. спустя несколько минут. Можно конечно ускорить процесс, тогда перезапустите EMM-генератор. Из-за особенностей работы китайских приставок, которые зачастую эмулируют оскамом CAM-модуль с одним и тем же идентификатором (серийным номером), при женитьбе карты она скорее всего будет работать как минимум в таких же приставках одной серии и/или партии. Это имхо нуждается в проверке, бо приставок у меня нет, всё как-то модули практикуем.
Для обновления уже установленной системы, надо обновить файлы из архива на tvcas.com и добавить поле в таблице tvcas_smatcards с именем `pair` типа INTEGER (1) NOT NULL DEFAULT 0;
Посмотреть состоит ли карта в паре можно в подписках карты. Рядом с названием подписки будет стоять «+» (плюсик).
UPDATE /26.11.2019/
Добавил в прошивку параметр ID Location. Теперь, если прочитать программатором прошитую смарткарту, можно узнать её серийный номер в HEX-формате (4 байта).
UPDATE /27.11.2019/
Добавил возможность смены названия пакета (по дефолту TVCAS). Замена осуществляется в файле /includes/config.php (опция «trademark»). Этот параметр записывается в смарткарту через firmware на этапе программирования, т.е. в дальнейшем при работе не изменяется.
Поддерживаются только символы из стандартной части ASCII-таблицы. Длина поля не более 8 байт (если больше, то обрежется).
UPDATE /30.01.2020/
Так. Необходимо расставить все точки на Ё. Некоторые операторы распространяют дезинформацию о том, что TVCAS система ненадёжна и карты можно клонировать. Ещё раз повторю — прошивка устанавливает бит защиты от чтения — это значит, что прочитать ни FLASH, ни EEPROM — НЕВОЗМОЖНО. Согласен, что на больших мануфактурах при большом интересе китайца могут «поработать» с чипом (как собственно и с любой другой смарткартой). Но вопрос цены будет варьироваться в десятках килодолларов, что с точки зрения малого количества абонентов просто нецелесообразно делать пиратам. А система разрабатывалась как раз для малых сетей. Если у вас большая сеть, вкладывайте 100к$ и кодируйте Irdeto 8.0 🙂
UPDATE /04.02.2020/
Обновил код для работы с PHP7 и MariaDB. Ввёл систему версий в футере админки.