Card sharing: что это и как работает (гайд 2026)

Card sharing — технология, при которой один DVB-ресивер с легальной смарткартой делится расшифрованными ключами с другими устройствами по сети. Физически карта одна, но смотреть могут несколько клиентов одновременно. Именно поэтому технология живёт уже 20+ лет — схема работает на уровне протокола, а не взлома шифрования.

В этом материале — техническая сторона: как устроен обмен ключами, какие протоколы используются, как настроить OScam-сервер с нуля и что делать, когда канал не открывается.

Что такое card sharing и как это работает технически

Каждый зашифрованный спутниковый канал использует систему условного доступа (CA). Провайдер шлёт в потоке ECM-пакеты (Entitlement Control Messages) — зашифрованные сообщения, содержащие Control Word (CW). CW — это 8-байтный ключ, которым реально шифруется видео. Без него — чёрный экран.

Смарткарта умеет расшифровать ECM и выдать CW. Именно это и эксплуатирует card sharing.

Принцип обмена контрольными словами (CW)

Схема до смешного простая. Сервер берёт ECM из потока (~80–200 байт), отправляет его на физическую смарткарту, получает CW в ответ и передаёт этот CW клиенту по сети. Клиент инжектирует полученный CW в свой ресивер через CAM-эмулятор, и ресивер расшифровывает картинку без карты.

CW меняется каждые 10 секунд — это стандарт DVB. На некоторых каналах с fast-rolling ключами смена происходит каждые 5 секунд, что резко повышает требования к скорости обмена.

Роль ECM и EMM пакетов

ECM — это запрос на получение CW. Смарткарта его расшифровывает и отдаёт ключ. EMM (Entitlement Management Messages) — другой тип пакетов, они управляют самой картой: обновляют подписку, продлевают доступ, меняют ключи карты. Без обработки EMM карта со временем "умирает" — провайдер выкатывает обновление, и карта перестаёт декодировать ECM. Это называется Anti-sharing Update, и именно поэтому AU (Auto Update) в OScam так важен.

Схема: smartcard → сервер → клиент → ресивер

Полный путь выглядит так:

  1. Клиентский ресивер ловит спутниковый сигнал, извлекает ECM из DVB-потока
  2. Отправляет ECM на сервер через CCcam или OScam протокол
  3. Сервер передаёт ECM физической смарткарте через локальный ридер (/dev/ttyUSB0 или встроенный слот)
  4. Карта расшифровывает ECM, возвращает CW (16 байт — два 8-байтных слова: odd и even)
  5. Сервер отправляет CW обратно клиенту
  6. Клиент инжектирует CW через CAM-эмулятор, ресивер расшифровывает видео

Почему задержка ключей критична (zapping time)

Всё время, пока CW не получен, на экране либо артефакты, либо чёрный прямоугольник. CW нужен до того, как истечёт предыдущий. При 10-секундном интервале у вас есть запас — сервер должен ответить за <400 мс. При fast-rolling (5 сек) — ещё быстрее.

При переключении канала (zapping) ресивер сразу запрашивает новый ECM. Если сервер отвечает за 300–400 мс — зиппинг незаметный. Если 1000+ мс — канал открывается с задержкой 1–2 секунды, что уже раздражает.

Протоколы card sharing: CCcam, OScam, Newcamd, MGcamd

Протокол — это язык, на котором клиент разговаривает с сервером. За 20 лет их накопилось несколько, и важно понимать разницу.

CCcam — самый распространённый, порт 12000+

CCcam появился как проприетарный сервер для Dreambox, и долгое время был стандартом де-факто. Использует собственный бинарный протокол поверх TCP. Нет открытой спецификации — протокол реверс-инжиниринговали.

Порты: стандарта нет, но 12000, 13000, 14000 встречаются чаще всего. Клиентская строка подключения выглядит так:

C: server.example.com 12000 username password

CCcam поддерживает hop — передачу карт между серверами. Последняя публичная версия — 2.3.0, около 2015 года. Развитие остановлено.

OScam — open-source форк, гибкая конфигурация

OScam (Open Source Conditional Access Module) — это то, что сейчас используют все, кто серьёзно занимается настройкой серверов. Активно разрабатывается, последние коммиты есть в репозитории. Поддерживает CCcam, Newcamd, Camd35, CS378X протоколы одновременно — один сервер умеет всё.

Главное преимущество — конфигурация через текстовые файлы, веб-интерфейс на порту 8888, детальное логирование. На нагруженных серверах с 50+ клиентами OScam рвёт CCcam по стабильности.

Newcamd — TCP, шифрование DES

Старый протокол, появился в эпоху первых Dreambox. Использует DES-шифрование с 14-байтным ключом (deskey). Всё ещё живёт на старых ресиверах, которые не поддерживают CCcam напрямую. Важный момент: OScam, собранный без флага USE_LIBCRYPTO, не поддерживает DES и Newcamd не заработает. Это частая ловушка при самостоятельной сборке.

MGcamd — клиент под Linux Enigma2

MGcamd — не сервер, а клиент, работающий на ресиверах под Enigma2 (Vu+, Dreambox, Gigablue и прочие). Умеет подключаться к CCcam-серверу, поддерживает Newcamd. Настраивается через /usr/keys/mg_cfg и /usr/keys/newcamd.list. По производительности уступает OScam, но есть ресиверы, где именно MGcamd стоит из коробки.

Сравнение по стабильности и нагрузке

Протокол Тип Шифрование Активная разработка Нагрузка на сервер
CCcam Сервер + клиент Своё (binary) Нет (2015) Средняя
OScam (CCcam) Сервер + клиент CCcam binary Да Низкая
Newcamd Сервер + клиент DES Нет Низкая
MGcamd Только клиент CCcam/Newcamd Редко N/A

Настройка OScam-сервера: пошаговый разбор конфигов

OScam работает через набор конфигурационных файлов. На Linux-сервере (Debian/Ubuntu) они лежат в /usr/local/etc/, на Enigma2-ресиверах — в /var/etc/oscam/. Не перепутайте пути — это первая причина "конфиг есть, а сервер не стартует".

Установка OScam на Linux (Debian/Ubuntu)

apt-get install git build-essential libpcsclite-dev libusb-dev libssl-dev
git clone https://github.com/oscam-svn/oscam.git /opt/oscam
cd /opt/oscam
./config.sh --enable USE_LIBUSB USE_LIBCRYPTO USE_PCSC
make
cp oscam /usr/local/bin/oscam
mkdir -p /usr/local/etc/oscam

Флаг USE_LIBCRYPTO нужен для Newcamd с DES. USE_LIBUSB — для USB-ридеров типа Phoenix или Smartreader.

oscam.conf — глобальные настройки

[global]
logfile                = /var/log/oscam/oscam.log
maxlogsize             = 1000
nice                   = -1
waitforcards           = 1
preferlocalcards       = 1

[webif]
httpport               = 8888
httpuser               = admin
httppwd                = changeme123
httpallowed            = 127.0.0.1,192.168.1.0/24
httpdyndns             = 0

[cccam]
port                   = 12000
reshare                = 0
version                = 2.2.11
build                  = 11700

Параметр nice = -1 даёт OScam приоритет в планировщике — заметно на загруженных серверах. preferlocalcards = 1 означает, что сервер сначала попробует свои карты, а не пересылать запрос дальше. reshare = 0 — клиенты не могут расшарить вашу карту дальше.

oscam.server — описание ридеров (карт)

Для встроенного слота ресивера Enigma2:

[reader]
label                  = local_card
protocol               = internal
device                 = /dev/sci0
caid                   = 0500
detect                 = cd
mhz                    = 357
cardmhz                = 357
group                  = 1
emmcache               = 1,3,2
auprovid               = 030B00

Для USB-ридера Phoenix на Linux-сервере:

[reader]
label                  = usb_phoenix
protocol               = phoenix
device                 = /dev/ttyUSB0
caid                   = 0963
group                  = 1
cardmhz                = 368
emmcache               = 1,3,2

Проблема с USB-ридерами: после перезагрузки /dev/ttyUSB0 может стать /dev/ttyUSB1, если подключено несколько устройств. Фиксится udev-правилом:

# /etc/udev/rules.d/99-oscam-reader.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="oscam_reader"

После этого указывайте device = /dev/oscam_reader — имя всегда стабильное.

oscam.user — учётные записи клиентов

[account]
user                   = client01
pwd                    = securepass1
group                  = 1
caid                   = 0500,0963
uniq                   = 1
allowedips             = 192.168.1.100
au                     = 1

[account]
user                   = client02
pwd                    = securepass2
group                  = 1
uniq                   = 1
allowedips             = 0.0.0.0/0

Параметр uniq = 1 означает, что при повторном подключении с тем же логином старая сессия закрывается. uniq = 0 позволяет несколько одновременных сессий — нужно, если у одного клиента несколько ресиверов под одним аккаунтом.

oscam.services — привязка caid/provid к сервисам

[services]
label                  = sky_de
caid                   = 0963
provid                 = 000000
srvid                  = 0001,0002,0003

Файл services позволяет ограничить клиентам доступ к конкретным каналам. Большинству небольших серверов он не нужен — достаточно caid в oscam.user.

Запуск как systemd-сервис

# /etc/systemd/system/oscam.service
[Unit]
Description=OScam Cardserver
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/oscam -b -c /usr/local/etc/oscam -t /tmp/.oscam
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable oscam
systemctl start oscam

Настройка клиента: CCcam.cfg и OScam как клиент

Формат строки C: line в CCcam.cfg

Файл обычно лежит в /etc/CCcam.cfg на Dreambox или /usr/keys/CCcam.cfg на Enigma2:

C: server.example.com 12000 myuser mypassword

Можно добавить несколько строк — CCcam попробует их по порядку при недоступности первого сервера. Никаких дополнительных параметров в базовом случае не нужно.

[reader] секция в oscam.server для подключения к серверу

Если клиент — тоже OScam, подключение к CCcam-серверу описывается в oscam.server:

[reader]
label                  = remote_server
protocol               = cccam
device                 = server.example.com,12000
user                   = myuser
password               = mypassword
caid                   = 0500,0963
group                  = 1
reconnecttimeout       = 30
keepalive              = 1

Указание hop, deskey, provid

Hop показывает, сколько серверов стоит между вашим клиентом и физической картой. Hop 1 — карта прямо на том сервере. Hop 2 — сервер получает ключи от другого сервера. На практике hop > 3 работает нестабильно: суммарная задержка ECM легко переваливает за 1000 мс.

При использовании Newcamd нужен deskey — 14-байтный DES-ключ. Пример в newcamd.list для MGcamd:

CWS = server.example.com 15000 myuser mypassword 01 02 03 04 05 06 07 08 09 10 11 12 13 14

Расположение конфигов на разных ресиверах

  • Dreambox DM800/DM900: /var/etc/CCcam.cfg, OScam — /var/etc/oscam/
  • Enigma2 (Vu+, Gigablue, Octagon): /etc/CCcam.cfg или /usr/keys/CCcam.cfg
  • Octagon SF8008: OScam из репозитория плагинов, конфиги — /etc/oscam/
  • Linux-сервер (headless): /usr/local/etc/oscam/

Важный момент для Enigma2: если одновременно запущены CCcam и OScam, они конкурируют за DVB-демультиплексор. Один будет работать, второй — нет. Оставьте что-то одно или настройте OScam так, чтобы CCcam не стартовал.

Типичные ошибки и диагностика проблем

Большинство проблем с card sharing диагностируются за 5 минут, если знать, что смотреть. oscam.log — ваш лучший друг.

Канал не открывается: проверка caid/provid через лог

tail -f /tmp/.oscam/oscam.log | grep -E "(ECM|caid|not found)"

Ищите строки вида:

2026/05/09 14:23:01 c (client01) ECM not found (0500&030B00/0001/06)

Это значит: клиент запрашивает caid 0500, провайдер 030B00, сервис 0001 — и у сервера нет карты с таким набором. Решение: убедитесь что caid в oscam.user совпадает с тем, что реально есть на карте.

Freezing/чёрный экран — проблема с zapping time

Если картинка зависает каждые 10 секунд — CW не приходит вовремя. Проверьте ECM time в webif: http://192.168.1.x:8888/status.html. Если видите значения > 800 мс — проблема в задержке сети или перегрузке сервера.

При работе через VPN с MTU < 1500 ECM-пакеты могут фрагментироваться и теряться. Проверьте:

ping -M do -s 1400 server.example.com

Если пакеты не проходят — уменьшите MTU в настройках VPN до 1400 или включите fragment.

ECM not found — нет нужного провайдера у сервера

Если лог показывает no matching reader — ни один reader на сервере не имеет нужного caid. Либо карта не та, либо не указан нужный caid в oscam.server для ридера.

Connection refused — firewall, NAT, неверный порт

Быстрая проверка доступности порта:

nc -zv server.example.com 12000

Если Connection refused — сервер не слушает этот порт. Если Connection timed out — firewall или NAT блокирует. Для сервера за NAT нужен проброс порта на роутере. Если статический IP недоступен — используйте DDNS (dynv6, no-ip, DuckDNS) и обновляйте запись через cron.

На сервере проверьте iptables:

iptables -L INPUT -n | grep 12000

Если правила нет — добавьте:

iptables -A INPUT -p tcp --dport 12000 -j ACCEPT

Rate limiting и AU (auto-update) ключей

Некоторые провайдеры шлют EMM-пакеты пачками в определённое время суток. Если AU отключён в oscam.server (параметр au = 0), карта не обновит внутренние ключи и через несколько дней перестанет декодировать ECM. Всегда держите AU включённым для локальной карты.

Чтение oscam.log с уровнем debug

По умолчанию лог пишет только важные события. Для диагностики переключите уровень в webif: Settings → Loglevel → Debug. Или в oscam.conf:

[global]
logfile    = /var/log/oscam/oscam.log
debuglevel = 64

Значение 64 — подробный лог ECM-запросов. После диагностики верните 0 — debug-лог генерирует сотни мегабайт в сутки.

Ещё одна ловушка: несовпадение системного времени на сервере и клиенте больше 60 секунд. Некоторые реализации протоколов используют временную метку для защиты от replay-атак и отклоняют пакеты. Синхронизируйте время через NTP на обеих сторонах:

timedatectl set-ntp true

Что искать при выборе card sharing провайдера

Рынок полон предложений, половина из которых — перепродажа чужих карт через три сервера. Вот как отличить нормального оператора от посредника.

Локальные карты vs пересылка через несколько hop

Попросите у провайдера тестовую линию и сразу проверьте hop в OScam webif или в CCcam-статусе. Hop 1 — у провайдера физическая карта в сервере. Hop 2+ — они сами клиенты где-то ещё. Hop > 2 означает, что скорость ECM зависит не только от этого провайдера, а от всей цепочки. При падении любого звена — у вас нет картинки.

Аптайм сервера и реакция на простои

Хороший провайдер показывает uptime за последние 30 дней. Меньше 98% для платного сервиса — плохой результат. Спросите напрямую: что происходит при падении сервера? Есть ли резервный IP или hostname?

Время отклика ECM

За тестовый период (минимум 24 часа, не меньше) смотрите ECM time в OScam webif. Норма: 150–400 мс. Если среднее > 600 мс — платить не стоит. Один скриншот webif через 5 минут после подключения ничего не докажет — нужна динамика.

Поддержка нужных caid/provid

Провайдер должен явно указать, какие caid поддерживаются: Sky DE (0963/000000), Canal+ (0500/030B00), NC+ (0500/023800), Viasat (0604), и так далее. Если провайдер пишет "все каналы" без списка caid — это красный флаг.

Test-line перед оплатой

Никогда не платите за длительный период без теста. Нормальный оператор даёт 24–48 часов бесплатной тестовой линии. Тест меньше суток бессмысленен — нужно проверить стабильность в разное время суток, включая пиковые часы (вечер по местному времени провайдера).

Безопасность сервера: защита от компрометации

OScam-сервер с открытым webif и дефолтными паролями — это не вопрос "взломают ли", а "когда". Ботнеты сканируют диапазоны на порт 8888 постоянно.

Смена дефолтных портов

Перенесите CCcam с 12000 на нестандартный порт (например, 34521). Webif переведите с 8888 на что-то другое. Это не безопасность как таковая, но уберёт 90% автоматического сканирования.

Ограничение по IP в oscam.user (allowedips)

[account]
user          = client01
pwd           = strongpassword
allowedips    = 192.168.1.100,10.8.0.0/24

Если клиент подключается с фиксированного IP или через VPN — жёстко ограничьте allowedips. Клиент с динамическим IP — минимум укажите подсеть его провайдера.

Fail2ban для CCcam/OScam

Создайте фильтр для брутфорса паролей:

# /etc/fail2ban/filter.d/oscam.conf
[Definition]
failregex = .* cccam: rejected user .+ from <HOST>
            .* wrong password for user .+ from <HOST>
# /etc/fail2ban/jail.d/oscam.conf
[oscam]
enabled  = true
port     = 12000
filter   = oscam
logpath  = /var/log/oscam/oscam.log
maxretry = 5
bantime  = 3600

Изоляция сервера в VPN

Идеальная схема: OScam слушает только на VPN-интерфейсе (например, tun0 с адресом 10.8.0.1), клиенты подключаются через WireGuard или OpenVPN. Извне вообще нет открытых портов, кроме VPN. Настройка в oscam.conf:

[cccam]
port     = 10.8.0.1,12000

Двоеточие перед портом привязывает сокет к конкретному IP.

Регулярное обновление OScam

cd /opt/oscam
git pull
./config.sh --enable USE_LIBUSB USE_LIBCRYPTO
make
systemctl restart oscam

Делайте это раз в 1–2 месяца. В репозитории периодически закрываются уязвимости, а поддержка новых CA-систем добавляется только в свежих версиях.

Частые вопросы

Чем отличается CCcam от OScam?

CCcam — закрытый проприетарный софт, последняя версия вышла около 2015 года, развитие остановлено. OScam — open-source проект, активно развивается, поддерживает CCcam-протокол плюс Newcamd и Camd35. На нагруженных серверах OScam стабильнее и потребляет меньше памяти. Для нового сервера выбор очевиден — OScam.

Какой порт по умолчанию использует CCcam-сервер?

Единого стандарта нет — каждый администратор задаёт свой. Чаще всего встречаются 12000, 13000, 14000. В OScam порт задаётся в секции [cccam] параметром port. В старом CCcam.cfg — директивой SERVER LISTEN PORT.

Что означает hop в строке C: line?

Hop — количество промежуточных серверов между вашим клиентом и физической смарткартой. Hop 1 означает, что карта стоит прямо в том сервере, к которому вы подключаетесь. Hop 2 — ваш сервер сам является клиентом другого сервера. Чем больше hop, тем выше суммарная задержка ECM и тем нестабильнее работа. Hop > 3 в большинстве случаев даёт некомфортный просмотр.

Почему канал не открывается, хотя соединение установлено?

Чаще всего причина — сервер не имеет карты с нужным caid/provid. В oscam.log ищите строки 'ECM not found' или 'no matching reader'. Другие варианты: fast-rolling key на канале (ECM меняется каждые 5 сек, сервер не успевает), несовпадение времени между сервером и клиентом, или истёк срок подписки на источнике.

Какое время отклика ECM считается нормальным?

До 400 мс — комфортный просмотр, зиппинг практически незаметен. 400–800 мс — задержки при переключении каналов становятся заметны. Больше 1000 мс — нестабильная работа, частые чёрные экраны и заморозки. ECM time видно в OScam webif на странице status.html или в строках лога по ключевому слову 'ecm time'.

Можно ли запустить OScam на Raspberry Pi?

Да, без проблем. OScam собирается под ARM и работает на Pi 3/4. Для сборки с поддержкой USB-ридеров используйте флаг USE_LIBUSB=1. Нагрузка минимальная — Pi Zero справится с 10–15 клиентами. Pi 4 потянет 50+ без напряжения.

Как проверить что сервер действительно отдаёт ключи клиенту?

На сервере запустите tail -f /tmp/.oscam/oscam.log и переключите канал на клиенте — в логе появятся строки с ECM-запросами от пользователя и результатом (ok / not found). В webif на вкладке Users видна статистика: сколько ECM запрошено, сколько выдано успешно. На клиенте в OScam status видно ecm time от сервера — если значение есть, ключи идут.

Что такое AU (Auto Update) и зачем он нужен?

AU — автоматическое обновление EMM-пакетов на смарткарте. Провайдер периодически шлёт EMM для продления подписки и обновления внутренних ключей карты. Без обработки EMM карта со временем перестаёт расшифровывать ECM — провайдер "убивает" её очередным обновлением. В oscam.server за это отвечают параметры au = 1, auprovid и emmcache. Не отключайте AU для локальных карт.

Практические советы для стабильного просмотра

Даже самая стабильная линия 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 или внешние мониторы.