30 июня | 2024г. | 06:16:21


АвторТема: Namespace hash Calculator  (Прочитано 839 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн Evg77734Автор темы

  • Мастер Джедай
  • **
  • Сообщений: 1295
  • Поблагодарили: 7918
  • Уважение: +131
Namespace hash Calculator
« Первое сообщение: 17 сентября | 2023г. | 21:07:53 »
+2
Как известно, современный Oscam поддерживает 6 различных форматов ключей в файле SoftCam.Key:
Спойлер   :
1. Match key by namespace hash (highest priority) (enigma2 only)
2. Match key by universal hash
3. Match key by tsid and onid combination
4. Match key by audio pid, or video pid, or pmt pid
5. Match key by service id and ecm pid
6. Default "All Feeds" key (lowest priority)

Поиск соответствующего ключа выполняется от наивысшего приоритета до самого низкого приоритета.
Самый высокий приоритет имеет метод с использованием namespace hash.
Спойлер   :
F <namespace hash> 00000000 <key>

где:
F : метка ключа в BISS
namespace hash (4 bytes) :  хеш пространства имен канала.
key            (8 bytes) :  ключ (контрольное слово - CW) с установленными действительными байтами контрольной суммы или без них.
00000000 : поле для ввода даты истечения срока действия ключа.

Ключ вводится одной строкой, две строки для обоих типов: «00» и «01» не нужны. Формат YYMMDDhh (year, month, day, hour). Например "23091210" означает 12 сентября 2023 года 10-00.
По умолчанию «00000000» - ключ бессрочный. Эта опция считается полезной, но для меня это как то сомнительно.

Некоторые каналы, закодированные с помощью фиксированного CW, отображаются как не кодированные, мы как то с этим встречались. Чтобы сообщить Oscam о том, что этот канал действительно закодирован, необходимо добавить строку в файл oscam.dvbapi, например:

A: ::003D:01AB 2600:000000:1FFF # Имя канала

Эта строка указывает эмулятору обрабатывать канал с sid, равным 003D, и pmt pid, равным 01AB, как кодированный, с caid 2600, провайдером 000000 и ecm pid 1FFF (которые являются типичными значениями для всех каналов BISS).

Все это также верно, как для BISS1, так и для BISS2 mode 1, эмулятор обрабатывает методы сопоставления ключей одинаково. Различие только между ключами, первый использует 8-байтовые CW, а второй — 16-байтовые CW:

F 00101FFF 00000000 1122330055667700 ; BISS1 mode 1 key
F 00201FFF 00000000 00112233445566778899AABBCCDDEEFF ; BISS2 mode 1 key
Namespace hash - это уникальный идентификатор для отдельной системы, на 100% позволяет избежать конфликта ключей, вычисляется эмулятором автоматически с использованием алгоритма crc32 (способ цифровой идентификации некоторой последовательности данных, который заключается в вычислении контрольного значения ее циклического избыточного кода).

Oscam рассчитывает namespace hash используя язык С. Вот мне и стало интересно, как же это можно реализовать на Python. В общем виде это выглядит так:

Спойлер   :
import binascii
from array import array

poly = 0xEDB88320

table = array('L')
for byte in range(256):
    crc = 0
    for bit in range( 8 ):
        if (byte ^ crc) & 1:
            crc = (crc >> 1) ^ 0xEDB88320
        else:
            crc >>= 1
        byte >>= 1
    table.append(crc)

def crc32(caid, string):

    value = caid ^ 0xffffffffL
    for char in string:
        value = table[(ord(char) ^ value) & 0xff] ^ (value >>  8 )
    return value ^ 0xffffffffL

data = 'XXXXXXXXXXXX'
string = binascii.unhexlify(data)
b = crc32(0x2600, string)

print '%08x' % (b & 0xffffffffL)
Исходными данными у нас является строка 'XXXXXXXXXXXX', сначала мы преобразовываем эти шестнадцатеричные данные в строку ascii, потом отправляем ее в функцию crc32(), которая возвращает рассчитанный namespace hash и напоследок распечатываем результат.

Подготовка исходных данных.
Как известно в Энигме2 существует два пространства имен: полное и урезанное.
Полное пространство имен это орбитальная позиция + частота, например в DEC  30157655 = 1CC2B57 в HEX, где 01CC = 460, то есть спутник 46Е, а 2B57 = 11095 это частота.
Урезанное пространство имен это орбитальная позиция + 0000, например в DEC  49152000 = 2EE0000 в HEX, где 02EE = 750, то есть спутник 75Е, а частота отброшена и заменена нолями.
Почему Энигма2 так делает? Я нашел только такое более менее ясное объяснение: "Если два идентификатора tsid и onid имеют несколько значимые значения (например, не должны быть одновременно 0 или 1). В этом случае Enigma2 считает комбинацию tsid и onid допустимой, а в пространстве имен удаляется (т. е. отсутствует) частотная часть."

У меня из 18 каналов в BISS только три имеют полное пространство имен, а остальные урезанное.

Пример для полного пространства имен.
Канал SETANTA SPORTS 1 46Е 11024 Н sid 000F  пространство имен 30157584 = 01CC2B10
Берем 01CC2B10 и в нашем пространстве имен мы очищаем 4 старших бита (в случае DVB-T или DVB-C это 0xF или 0xE соответственно, для DVB-S это 0) и заменяем их на 0xA. Это флаг, чтобы эмулятор мог сказать, что это пространство имен, а не другой pid, например audio и т. д.
Изменяем пространство имен 0х01CC2B10 путем добавления идентификатора 0xA: ==> 0хA1CC2B10.
Затем перед ним размещаем наш sid, получается 000FA1CC2B10 Мы размещаем их так: [srvid][namespace], таким образом мы получаем последовательность длиной 2+4=6 байт.
Это и есть data = '000FA1CC2B10' после вычисления получаем для канала SETANTA SPORTS 1 namespace hash равный 7bb6109f

Пример для урезанного пространства имен.
В случае урезанного пространства имен мы дополнительно используем tsid и onid в нашем хэше, поэтому оно по-прежнему уникально. Размещаем тогда вот так: [srvid][tsid][onid][namespace] и получаем последовательность 2+2+2+4=10 байт.
Канал Shanson TV Int. 80Е 11106 Н sid 02CE tsid 00CD onid 0001  пространство имен 52428800 = 03200000
0x03200000
0xA: ==> A3200000
onid: ==> 0001A3200000
tsid: ==> 00CD0001A3200000
sid: ==> 02CE00CD0001A3200000
Это и есть data = '02CE00CD0001A3200000' после вычисления получаем для канала Shanson TV Int. namespace hash равный 91a8bc48

В общем, написал коротенькую программу Namespace hash Calculator, которая ищет в ресивере каналы в BISS и рассчитывает для каждого Namespace hash. Скопировать файл Namespace_hash_Calculator.py в ресивер, например в /tmp, присвоить права 755, и запустить командой /tmp/Namespace_hash_Calculator.py, результаты появятся в терминале, а также будут записаны в файл /tmp/NamespaceHash.txt для удобства.
Также ее можно запускать и на компьютере, прописав локальный путь к файлу lamedb (строка 20), нужный путь для файла NamespaceHash.txt (строка 21) и возможные пути к файлу satellites.xml.
Единственное ограничение, что для работы нужен только Python версии 2.7...., что в ресивере, что на компьютере.
Так же выше приведенный код можно запускать в интернете, в любой Online Python 2 IDE, предварительно вписав в строку data = 'XXXXXXXXXXXX' нужное значение.

Практическое применение вряд ли сильно востребовано, но для общего развития годится   :hi:
Спойлер   :
[ Гостям не разрешен просмотр вложений ]
[ Гостям не разрешен просмотр вложений ]



Оффлайн Evg77734Автор темы

  • Мастер Джедай
  • **
  • Сообщений: 1295
  • Поблагодарили: 7918
  • Уважение: +131
Namespace hash Calculator
« Ответ #1: 21 сентября | 2023г. | 21:32:48 »
0
Кто может подсказать, на каналах в BISS PMTPID всегда равен SID ? На каналах с другими кодировками не всегда, но это не от кодировки конечно зависит.
Увидеть можно в логе эмулятора, при переключении на канал в BISS.

Оффлайн arion75

  • Друзья Джедаев
  • *****
  • Сообщений: 3878
  • Поблагодарили: 13093
  • Уважение: +91
Namespace hash Calculator
« Ответ #2: 21 сентября | 2023г. | 21:45:47 »
0
в логе эмулятора
Не знаю, здесь имеется то что вас интересует?
Спойлер   :
[ Гостям не разрешен просмотр вложений ]
Спойлер   :
2023/09/21 21:41:15 1859 B08FF400 c dvbapi: new program number: 1EF6 (0000:1EF6 unknown)
2023/09/21 21:41:36 1859 B08FF400 c dvbapi: new program number: 000D (0000:000D unknown)
2023/09/21 21:41:53 1859 B08FF400 c dvbapi: [ADD PID 0] CAID: 2600   ECM_PID: 1FFF   PROVID: 000000
2023/09/21 21:41:53 1859 B08FF400 c dvbapi: new program number: 0003 (2600:0003 unknown)
2023/09/21 21:41:53 1859 B08FF400 c dvbapi: Start descrambling PID #0 (CAID: 2600) 1
2023/09/21 21:41:53 1859 B08FF400 c root (2600&000000/0003/1FFF/0000/03:0000/10-10): found (201 ms) by emu_key - 2600:0003 unknown

Оффлайн Evg77734Автор темы

  • Мастер Джедай
  • **
  • Сообщений: 1295
  • Поблагодарили: 7918
  • Уважение: +131
Namespace hash Calculator
« Ответ #3: 21 сентября | 2023г. | 21:58:37 »
0
arion75, спасибо, но здесь не видно, в логе видно, первое выделение жирным это PMTPID, а ниже это SID:
Спойлер   :
21:54:11 02814C17 c   (dvbapi) Demuxer 0 trying to descramble PID 0 CAID 2600 PROVID 000000 ECMPID 1FFF ANY CHID PMTPID 02CE VPID 06B6
21:54:11 2F608FA2 r      (emu) Key found: F 91A8BC48 00000000
21:54:11 02814C17 c      (ecm) root (2600:000000:02CE:1FFF:0000:13:00:DCBA12A834ABCDACDCBA12A834ABCDAC): found (1 ms) by emulator - Shanson TV Int.

Оффлайн Evg77734Автор темы

  • Мастер Джедай
  • **
  • Сообщений: 1295
  • Поблагодарили: 7918
  • Уважение: +131
Namespace hash Calculator
« Ответ #4: 26 сентября | 2023г. | 20:43:28 »
+1
Немного расширил функционал и переименовал в BISS_Key_Formats_Tool.
Теперь программа выдает все возможные варианты прописания ключей для каналов в BISS в ресивере при использовании oscam.
Скопировать папку BISS_Key_Formats_Tool в /media/hdd/, запустить в терминале командой /media/hdd/BISS_Key_Formats_Tool/Start.py, при необходимости установить этому файлу права 755.
Программа в зависимости от версии Python в ресивере запустит нужный вариант (про ограничения и Python версии 2.7 я писал выше).
Результаты работы будут отражены в терминале, а так же записаны в файл /tmp/BISS_Key_Formats.txt, если namespace hash и universal hash в силу ограничений посчитать не удалось, эти данные будут заменены нолями и отражены в терминале красным цветом.
Так же будет сформирован и записан файл /tmp/_SoftCam.Key, где для каждого канала в BISS в ресивере будут записаны варианты прописания ключей от высшего приоритета к низшему. Все это верно только для oscam.
Такая себе заготовка файла SoftCam.Key, где можно для каждого канала выбрать нужный метод прописания ключа, а не нужные удалить, заменить <key> на сам ключ и получится SoftCam.Key не засоренный ничем лишним, предназначенный для конкретного ресивера (с некоторыми оговорками).
Пример вариантов для канала Shanson TV Int. 80Е 11106 Н:

F 91A8BC48 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F 05454C62 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F 00CD0001 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F 02CE0A9E 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F 02CE06B6 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F 02CE02CE 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F 02CE1FFF 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)
F A11FEED5 00000000 <key> ;Shanson TV Int. (11106 H 80.0 E)

где:

91A8BC48 - namespace hash, про него я подробно писал в первом сообщении темы, является уникальным в рамках конкретного имиджа, используется только в Enigma2.

05454C62 - universal hash, не является уникальным на 100%, но вероятность конфликта ключей очень низкая. Может использоваться на любых ресиверах (не только на Enigma2), использующих oscam. Рассчитывается так же функцией crc32, но исходными значениями являются sid + pmt_pid + videpid + audiopid. Но я до конца не уверен, что sid всегда на этих каналах равен pmt_pid, как нибудь покручу свою поворотку по всем нужным и выясню наверняка...

00CD0001 - комбинация tsid + onid, удивительно, что имеет такой высокий приоритет, хотя явно не уникальна, но это считается очень полезным методом, когда на транспондере имеется несколько  каналов, использующих один и тот же ключ BISS. То есть можно обойтись одной строкой с ключом для всех этих каналов.

02CE0A9E - комбинация sid + audiopid.

02CE06B6 - комбинация sid + videopid, оказывается у videopid приоритет ниже, чем у audiopid.

02CE02CE - комбинация sid + pmt_pid.

02CE1FFF - комбинация sid + ecm_pid. ecm_pid в 99,99% случаев равен 1FFF.

A11FEED5 - "Магический" идентификатор ключа по умолчанию для всех каналов равен A11FEED5 и имеет самый низкий приоритет.

Если namespace hash и universal hash в силу ограничений посчитать не удалось, то первых двух строк для каждого канала в файле /tmp/_SoftCam.Key просто не будет.

Возможно кому то все это окажется полезным и пригодится.  :hi:
Спойлер   :
[ Гостям не разрешен просмотр вложений ]
[ Гостям не разрешен просмотр вложений ]

Теги:
 



X

Добро пожаловать!

Мы заметили, что у Вас установлено расширение AdBlock или ему подобное. Пожалуйста добавьте наш Клуб в белый список, внесите этим посильную лепту в его развитие. Спасибо!