Cardsharing: что это, как работает и как настроить сервер
Cardsharing — это технология совместного использования смарт-карты платного спутникового телевидения через сеть. Грубо говоря: одна физическая карта стоит у сервера, а ключи расшифровки в реальном времени получают несколько клиентских ресиверов. Разобраться в том, как именно это работает на уровне протоколов и пакетов, стоит до того, как поднимать собственный сервер — иначе настройка превратится в слепое копирование конфигов из интернета.
Что такое cardsharing и как он работает технически
Вся схема строится вокруг одного простого факта: зашифрованный спутниковый поток содержит данные, которые без правильного ключа — просто шум. Этот ключ называется DCW (Decrypted Control Word) и меняется каждые 7–10 секунд. У провайдеров типа Sky или Canal+ смена происходит каждые 10 секунд. Nagravision обновляет DCW агрессивнее — иногда каждые 8 секунд.
Принцип работы: ECM, EMM и control word
В транспортном потоке DVB кроме видео и аудио идут служебные пакеты. ECM (Entitlement Control Message) — это зашифрованный запрос, содержащий текущий control word в зашифрованном виде. Только смарт-карта с действующей подпиской умеет его расшифровать.
Цикл выглядит так: ресивер получает ECM из потока → отправляет его по TCP на сервер cardsharing → сервер передаёт ECM на смарт-карту через CAM-ридер → карта возвращает расшифрованный DCW (16 байт) → сервер отправляет DCW обратно клиенту → ресивер использует DCW для декодирования видео. Всё это должно произойти быстрее, чем провайдер сменит следующий control word, то есть укладываться в 10 секунд с хорошим запасом.
EMM (Entitlement Management Message) — другой тип пакетов. Они не связаны с расшифровкой конкретного канала. EMM обновляют права на карте: продление подписки, добавление пакетов, обновление ключей. Без регулярной обработки EMM карта постепенно «умирает» — перестаёт отвечать на ECM.
Роль CAM-модуля и смарт-карты в схеме
CAM (Conditional Access Module) — это физический модуль, который вставляется в CI-слот ресивера или работает через USB-кардридер. Он содержит ридер смарт-карты и логику взаимодействия с конкретной системой условного доступа (CAS).
На сервере cardsharing вместо CAM в ресивере стоит PC/SC-ридер (например, Omnikey 6121) или phoenix-совместимый адаптер, подключённый к серверу напрямую. OScam видит его как устройство /dev/ttyUSB0 (phoenix) или обращается через библиотеку libpcsclite (для PC/SC). Карта никуда не уходит физически — только ключи.
Чем sharing отличается от прямого приёма
При прямом приёме CAM и карта стоят в вашем ресивере, ECM обрабатывается локально — задержка 50–100ms. При шаринге добавляется сетевой round-trip: запрос идёт до сервера и обратно. При хорошем соединении это ещё 50–150ms. При hop 1 (карта непосредственно на сервере) зачастую разницы не заметно. Но при hop 3+ суммарная задержка может достигать 800–1200ms, и при переключении канала вы будете видеть чёрный экран дольше допустимого.
Что такое DCW и зачем он нужен
DCW — это 16-байтовый ключ, разделённый на два 8-байтовых слова: odd и even. Провайдер чередует их при каждой смене. Ресивер всегда держит «запасной» ключ, полученный заранее, чтобы переключение было незаметным. Если новый DCW не пришёл вовремя — экран замерзает или чернеет. Именно поэтому ping до сервера и стабильность соединения важнее скорости канала.
Протоколы cardsharing: CCcam, OScam, NewCamd, MGCamd
Протоколов несколько, и у каждого своя история. Выбор влияет на стабильность, задержку и совместимость с оборудованием.
CCcam протокол: формат пакета, шифрование, hop-система
CCcam — проприетарный протокол, разработанный где-то в 2006–2007 году, последняя публичная версия 2.3.2 вышла в 2014 году. Протокол работает по TCP. При подключении клиент и сервер обмениваются хешами на основе sha1 для аутентификации, затем трафик шифруется XOR с ключом, производным от логина/пароля.
Порт задаётся в конфигурации — стандарта нет. Обычно используют диапазон 12000–12100 или 15000–16000, это просто традиция. В CCcam.cfg на сервере: PORT = 12000.
Hop — это количество пересылок ECM между серверами до смарт-карты. Hop 1 = карта подключена напрямую к серверу, который вы используете. Hop 2 = ваш сервер получает DCW от другого сервера, у которого карта. Каждый дополнительный hop добавляет 200–500ms к ответу. На hop 3+ zapping time легко переваливает за секунду, а при fast-zapping каналы просто не успевают открыться.
OScam как open-source альтернатива
OScam — открытый проект, который активно развивается. Репозиторий доступен на svn.streamboard.tv, сборки выходят регулярно. В отличие от CCcam, OScam поддерживает несколько протоколов одновременно: может принимать клиентов по CCcam, NewCamd, CAMD35, GBox. Сервер и клиент в одном демоне.
Потребление CPU у OScam ниже при том же количестве клиентов. На Raspberry Pi 4 реально обслуживать 15–20 клиентов без просадок. Ещё одно преимущество — веб-интерфейс на порту 8888 с реальным мониторингом: видно каждый ECM-запрос, ответил ли reader, какой CAID, время ответа в миллисекундах.
NewCamd: старый, но всё ещё используемый протокол
NewCamd работает поверх TCP, стандартный порт — от 15000 и выше. Шифрование трафика — DES с 14-байтовым ключом (des_key в конфиге). Протокол появился раньше CCcam и поддерживается большинством старых ресиверов.
Минус: NewCamd передаёт один CAID на соединение, то есть для каждого провайдера нужен отдельный порт. В OScam это решается через секцию [account] с привязкой к конкретному reader. Для новых инсталляций NewCamd используют редко, но он остаётся полезным для оборудования, которое CCcam не поддерживает.
Сравнение по стабильности, нагрузке на CPU и совместимости
| Параметр | CCcam 2.3.2 | OScam | NewCamd |
|---|---|---|---|
| Разработка | остановлена с 2014 | активная | остановлена |
| Протоколы | только CCcam | CCcam, NewCamd, CAMD35, GBox | только NewCamd |
| CPU (20 клиентов) | высокое | низкое | среднее |
| Веб-интерфейс | нет | есть (порт 8888) | нет |
| Nagra3/Conax | слабо | хорошо | удовлетворительно |
Установка и настройка OScam-сервера на Linux
Рекомендую Debian 12 или Ubuntu 22.04 LTS. На Raspberry Pi OS (arm64) тоже работает отлично. Для сборки нужны:
apt-get install build-essential cmake libssl-dev libpcsclite-dev libusb-dev git
Сборка OScam из исходников: зависимости и флаги
svn checkout https://svn.streamboard.tv/oscam/trunk oscam-src
cd oscam-src
./config.sh --enable all
make -j$(nproc)
cp oscam /usr/local/bin/
mkdir -p /usr/local/etc/
Флаг --enable all включает поддержку всех протоколов и ридеров. Если нужна только работа с PC/SC-ридером, можно ограничиться --enable CARDREADER_PCSC. Бинарник получается около 2–3 MB.
Структура конфигурации: oscam.conf, oscam.server, oscam.user
Конфиги по умолчанию лежат в /usr/local/etc/ или /var/etc/oscam/ — зависит от того, что указано при запуске через -c /path/to/config. Минимальный oscam.conf:
[global]
logfile = /var/log/oscam/oscam.log
logrotate = 1
logrotatesize = 5242880
nice = -1
bindwait = 5
maxlogsize = 10
[webif]
httpport = 8888
httpuser = admin
httppwd = yourpassword
httprefresh = 10
nice = -1 повышает приоритет процесса — важно на нагруженном сервере. logrotate = 1 + logrotatesize = 5242880 (5 MB) предотвращает рост лога до гигабайтов. Без этого при debug-режиме oscam.log за день может съесть всё место на диске.
Пример oscam.server для PC/SC-ридера Omnikey 6121:
[reader]
label = omnikey6121
protocol = pcsc
device = Omnikey CardMan 6121 0
caid = 0500 ; Viaccess
detect = CD
mhz = 357 ; частота карты
cardmhz = 357
group = 1
emmcache = 1,3,15
au = 1 ; разрешить обработку EMM
rsakey = 0000000000000000000000000000000000000000000000000000000000000000
Для phoenix (serial reader на /dev/ttyUSB0) заменить protocol = phoenix и device = /dev/ttyUSB0.
Пример oscam.user:
[account]
user = client01
pwd = secretpass123
group = 1
caid = 0500,1830 ; Viaccess + Nagravision
au = 1
betatunnel =
ident = 0500:023800 ; provider ID
maxconn = 1 ; один активный ресивер на аккаунт
uniq = 4 ; отключать старую сессию при новом логине
sleep = 0
Настройка reader для смарт-карты через PC/SC или phoenix
PC/SC-ридеры (Omnikey 6121, ACS ACR38) работают через демон pcscd. Проверить что карта видна: pcsc_scan — должна появиться строка с ATR карты. Если pcscd не запущен, OScam не найдёт карту.
Phoenix-ридеры дешевле (~$5–10 на AliExpress), работают как serial-устройство. Убедитесь что пользователь, под которым запущен OScam, состоит в группе dialout: usermod -a -G dialout oscam.
Для Nagravision (CAID 1830/1801) и Conax (CAID 0B00) — те же параметры, только CAID другой. Nagra3 требует boxkey и RSA-ключ, которые для каждой карты индивидуальны.
Запуск как systemd-сервис и автостарт
Создать /etc/systemd/system/oscam.service:
[Unit]
Description=OScam Card Server
After=network.target
[Service]
Type=forking
User=oscam
ExecStart=/usr/local/bin/oscam -c /usr/local/etc -b
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
RestartSec=10
Nice=-1
IOSchedulingClass=1
IOSchedulingPriority=0
[Install]
WantedBy=multi-user.target
useradd -r -s /bin/false oscam
chown -R oscam:oscam /usr/local/etc/
systemctl daemon-reload
systemctl enable oscam
systemctl start oscam
IOSchedulingClass=1 (realtime) + IOSchedulingPriority=0 гарантирует что дисковые операции (логирование) не замедлят обработку ECM.
Настройка клиента: подключение ресивера к серверу
Большинство современных ресиверов на Enigma2 (OpenATV 7.x, OpenPLi 9.x, OpenViX) поддерживают и CCcam, и OScam как клиент. Рассмотрим оба варианта.
CCcam.cfg на Enigma2 ресивере: формат строки F:
Файл конфигурации лежит по адресу /etc/CCcam.cfg или /var/keys/CCcam.cfg — зависит от прошивки. Строка подключения к серверу:
C: hostname.example.com 12000 client01 secretpass123
Формат: C: хост порт логин пароль. Строчная C без двоеточия означает «connect» — подключиться к указанному серверу. После сохранения файла перезапускаем CCcam: init 4 && init 3 или через меню прошивки.
Добавлять несколько серверов можно несколькими строками C:. CCcam будет использовать их в порядке очередности, с failover при обрыве.
OScam как клиент: секция [reader] с protocol = cccam
Если хотите использовать OScam вместо CCcam на ресивере:
[reader]
label = main_server
protocol = cccam
device = hostname.example.com,12000
user = client01
password = secretpass123
group = 1
cccversion = 2.3.2 ; имитировать версию CCcam-клиента
cccmaxhops = 2 ; не принимать карты с hop > 2
cccreshare = -1 ; не реширить полученные карты дальше
reconnecttimeout = 30
ecmwhitelist =
log2dis = 0
cccmaxhops = 2 — важный параметр. Если сервер даёт hop 3+, OScam просто проигнорирует такие карты. Это защищает от ситуации, когда сервер продаёт перепродажу перепродажи.
Проверка соединения через webif и логи
Открыть http://ip-ресивера:8888 → Readers — должен отображаться статус Connected и зелёный индикатор. Если красный — смотреть логи.
tail -f /var/log/oscam.log | grep -E "(ECM|found|not found|connect)"
Строки FOUND означают успешное получение DCW. NOT FOUND — либо CAID не соответствует, либо карта на сервере не поддерживает данный провайдер. TIMEOUT — сервер не ответил за отведённое время.
Типовые приоритеты в oscam.services и CAID-маппинг
Файл /usr/local/etc/oscam.services позволяет задать именованные группы каналов. Например:
[Sky_DE]
caid = 09C4
provid = 000000
srvid = 0001,0002,0003
В oscam.user затем: services = Sky_DE — клиент будет иметь доступ только к этим каналам. Полезно когда один сервер обслуживает несколько клиентов с разными пакетами.
Диагностика и решение типовых проблем
Каналы не открываются: проверка CAID и provider ID
Первый шаг — убедиться в правильном CAID. Запустить oscam -d 65535 (максимальный debug) и смотреть какой CAID приходит в ECM-запросе от ресивера. Часто проблема в том, что в oscam.server прописан CAID 0500, а карта — провайдер с CAID 0502 или 0510.
Provider ID берётся из службы — каждый пакет внутри CAS имеет свой ID. Например, для Viaccess France — provider 030B00, для Spain — 030400. Список CAID/provider для известных провайдеров есть в документации OScam на streamboard.tv.
Freezes и заикания: оптимизация ecm timeout
По умолчанию OScam ждёт ECM-ответа 3000ms. Если сервер иногда отвечает медленнее — увеличить до 5000:
[global]
ecmnotfound = 500 ; задержка перед повтором при NOT FOUND
ecmokwaittime = 300 ; ждать столько ms перед следующим ECM
В oscam.user параметр ecmtimeout = 5000 задаётся индивидуально для аккаунта.
Freezes на конкретных каналах при работающих других — часто означает что данный канал использует другой CAID или provider ID, который не прошёл через фильтр в reader.
Долгий zapping: настройка cache-ex и cwcycle
Cache exchange (cache-ex) — механизм OScam для обмена уже расшифрованными DCW между несколькими инсталляциями. Если другой OScam в шаре уже расшифровал этот ECM за последние 10 секунд — вы получаете ответ мгновенно из кеша, без обращения к смарт-карте.
[cache]
cacheexenabled = 1
cacheexport = 0
cacheimport = 1
cacheexmode = 3 ; принимать и отдавать
cachedelay = 0
CWcycle — защита от подмены DCW. Если сервер вдруг начинает слать неправильные ключи (кто-то взломал или сбой), CWcycle блокирует невалидные DCW:
[global]
cwcycle = 10 ; ожидаемый цикл смены ключа в секундах
cwcyclecheck = 1 ; включить проверку
Server overload: ограничение клиентов и nice level
Один смарткард-ридер физически ограничен: карта обрабатывает примерно 1–2 ECM в секунду. Если 20 клиентов одновременно переключают каналы — карта захлебнётся. Реалистичный лимит — 4–5 одновременных активных пользователей на одну карту.
В oscam.user: maxconn = 1 — один активный ресивер на аккаунт. Если нужно несколько ресиверов на одного пользователя: maxconn = 3.
netstat -an | grep ':12000' | grep ESTABLISHED | wc -l
Эта команда покажет количество активных TCP-соединений на CCcam-порту.
При перегрузке CPU: проверить nice = -1 в oscam.conf и добавить ionice -c 1 -n 0 в systemd unit. На слабом железе (VPS с 1 vCPU) больше 10 клиентов лучше не ставить.
Как выбрать качественный сервер: технические критерии
Выбор сервера для cardsharing — технический вопрос, а не вопрос доверия к рекламе. Проверяйте конкретные параметры, а не обещания.
Uptime и SLA: чего ожидать от стабильного сервера
Честный uptime для хорошего сервера — 99% и выше, то есть не более 7 часов даунтайма в месяц. Проверяется просто: попросите историю логов за последние 30 дней или наблюдайте сами в течение недели перед оплатой.
Хороший признак — оперативная замена ключей когда провайдер меняет структуру ECM. Это случается нечасто, но когда происходит — сервер должен ответить в течение нескольких часов, не дней.
Hop level: почему важен hop 1 и как его проверить
В веб-интерфейсе OScam (http://server:8888/readers) видно hop level для каждой карты. В CCcam-клиенте на Enigma2 — в меню информации о шаре. Hop 1 означает прямую карту на сервере. Hop 2+ — реселлер, который купил шару у другого сервера.
Практическое правило: для нормального zapping time нужен hop 1 для основных пакетов. Hop 2 допустим если ping до сервера менее 30ms. Hop 3 — плохой вариант для каналов с быстрой сменой ключа.
Локальные карты vs реселлинг: разница в задержке
Сервер с локальной картой (физически подключённой смарт-картой в ридере) даёт задержку ECM-ответа 50–150ms. Реселлер, который сам покупает DCW у апстрима, добавляет ещё 200–500ms на каждом уровне. При hop 1 + пинг 20ms вы получаете ответ за 200–300ms — практически незаметно. При hop 2 + пинг 50ms — уже 600–800ms, что при переключении каналов ощутимо.
«Слишком хорошие» цены почти всегда означают реселлинг hop 3–4 или нестабильные карты с периодической заменой. Стабильность дороже, чем дёшево.
Поддержка протоколов и обновлений BISS/PowerVu
BISS (Basic Interoperable Scrambling System) — шифрование используемое в broadcast. В отличие от смарт-карточных систем, BISS использует константный ключ (session word), прописываемый напрямую в oscam.server или в /etc/CCcam.cfg через строку B: SID freq key. Это не cardsharing в классическом смысле — просто статический ключ без EMM.
PowerVu (CAID 0E00) — проприетарная система Scientific Atlanta. OScam поддерживает PowerVu через softcam-ключи в SoftCam.Key. Ключи публичны для FTA-контента, для платного — обновляются вручную.
Conax (CAID 0B00) и Nagra3 (CAID 1830) — системы с более частой сменой ключей. Для Nagra3 требуется RSA-ключ, уникальный для каждой карты. На серверах это означает, что при клонировании карта не работает — только оригинал.
Какой порт по умолчанию использует CCcam?
Стандартного порта нет — он задаётся в конфигурации сервера параметром PORT в CCcam.cfg. Обычно используют 12000–12100 или 15000–16000, но это просто традиция. Веб-интерфейс OScam работает на порту 8888 по умолчанию (параметр httpport в секции [webif]).
В чём разница между CCcam и OScam?
CCcam — закрытый проприетарный протокол, последнее обновление вышло в 2014 году. OScam — open source, активно разрабатывается, умеет работать по CCcam, NewCamd, CAMD35, GBox одновременно. OScam потребляет меньше CPU, имеет веб-интерфейс, лучше работает с Nagravision и Conax. Для нового сервера — только OScam.
Что означает hop 1, hop 2, hop 3 в cardsharing?
Hop — количество промежуточных серверов между смарт-картой и вашим ресивером. Hop 1: карта подключена напрямую к серверу, минимальная задержка. Hop 2: ваш сервер получает DCW от другого сервера (реселлер). Каждый hop добавляет 200–500ms к ECM-ответу. При hop 3+ zapping time часто превышает 1 секунду.
Почему канал показывает чёрный экран при работающем sharing?
Причин несколько: неверный CAID или provider ID в конфиге reader, ECM timeout слишком мал (увеличить до 5000ms), hop level не позволяет получить ключ за 10 секунд, провайдер сменил ключ и нужна обработка EMM, блокировка по IP на сервере. Диагностика: oscam -d 65535 и искать строки TIMEOUT или NOT FOUND в логе.
Можно ли поднять cardsharing-сервер на Raspberry Pi?
Raspberry Pi 4 справляется с OScam для 10–20 клиентов при наличии USB-кардридера (Omnikey 6121 или phoenix-совместимый). Pi Zero слабоват — шифрование при аутентификации нагружает однобайтовый ARM. На Pi 4 нужно добавить swap (минимум 512MB) и прописать nice = -1 для приоритета OScam.
Что такое EMM и нужен ли AU=1 в конфиге?
EMM (Entitlement Management Message) — служебные сообщения провайдера, обновляющие права на карте. Без их обработки карта через 1–2 недели перестаёт отвечать на ECM. Параметр au = 1 в oscam.server разрешает серверу пересылать EMM на карту. Для локальной карты — AU=1 обязателен. Для клиентского подключения (без физической карты) — не нужен.
Какая скорость интернета нужна для cardsharing?
Трафик ничтожный: ECM-пакет около 150 байт, DCW-ответ около 50 байт, обмен каждые 10 секунд. Для одного клиента хватает 10 Kbps. Критичен ping, а не полоса — нужен менее 100ms до сервера. При ping 200ms+ начнутся заикания на каналах с агрессивной сменой ключа (Nagra3, Viaccess 5).
Практические советы для стабильного просмотра
Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.
При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.
Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.
- Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
- Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
- Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.