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.2OScamNewCamd
Разработкаостановлена с 2014активнаяостановлена
Протоколытолько CCcamCCcam, 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).

Practical checklist for smooth viewing

Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.

When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.

Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.

  • Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
  • Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
  • Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.