Описание Алгоритма VIACCESS 26.02. 2001. Реальная версия алгоритма (с исправлениями и дополнениями). Copyright У D.S. 2001.

Пожалуйста не называйте нас Russian Mafia!

    Алгоритм Виаксиса.
    DES

Виаксис это модификация Eurocrypt-M. В этой модификации ключ имеет 8 байт когда Eurocrypt-M только 7. Если 8-й байт ноль тогда Viaccess работает точно как Eurocrypt-M. Если 8-й байт отличный от ноля тогда это будет переключаться на несколько немного отличающихся режимов. Один из этих режимов содержится в подпрограмме DES. 7-ь байт ключа использованы в DES, но 8-й байт использован в ядре специальной функции в каждом DES раунде. Этот режим включается как раз перед расширением Е и это изменяет 5-й байт данных который является первым из правых 4-х байт данных использованных в DES раунде. Поэтому это затрагивает S-рамки 1,2,3 и 8. Режим сделан только с этим байтом для расширения Е и оригинальный байт остаётся тот же самый. В этом режиме 8-й байт ключа умноженный с байтом данных для получения 16-ти битового слова. Тогда байт данных добавленный к этому слову (верхний 8-ми битовый байт увеличен если там был перенос с нижним байтом). Тогда 8-й байт ключа добавлен к слову на том же самом пути. Тогда верхний байт вычитается из нижнего байта. Если имелся перенос в этом вычитании тогда результат увеличен на 1. Тогда этот байт результата использован вместо оригинального байта в расширении E.

Предостережение: там в FAQ от Джона Макдональда есть маленькая ошибка, вконце каждого раунда новый L создан (построен) со старым R , а не старым R3.

Другая модификация в подпрограмме DES это таблица пермутации использованная после XOR-ирования байтов расширенных (Е) данных с данными модифицированного ключа. Новая таблица пермутации:

32 15 4 9

25 24 20 1

5 31 11 18

13 2 27 22

6 16 12 30

28 19 7 21

3 29 26 14

10 23 8 17

Ключ

Если 8-й байт ключа отличный от нуля тогда первые 7 байт ключа вращаются слева по 2 байта.

Это обозначает ключ (k1 k2 k3 k4 k5 k6 k7 k8) -> ключ(k3 k4 k5 k6 k7 k1 k2 k8).

Этот модифицированный ключ использован в программе DES , но в ХЭШ программе мы используем не модифицированный ключ.

ХЭШ

Все ХЭШ алгоритмы работают как в Eurocrypt-M когда сделана эта DES модификация.

Обработка сообщений CA 88 и CA 18:

Если 8-й байт ключа четный тогда это - последняя модификация, но если это нечетно тогда там имеется ещё одна очень сложная модификация данных. Сначала там имеется одна константа которая есть 5Ah, если 8-й байт ключа нечетный и его нижний полубайт равен нулю. Если 8-й байт ключа нечетный и его нижний полубайт не равен нулю, тогда эта константа - A5h. Мы должны вычислять ХЭШ как в Eurocrypt, но кодированые слова(КС), включённые в поле данных должны быть обработаны с константой К , чтобы формировать реальное кодированное слово.

Байты посланного CW(КС) сперва были AND-ированы с константой и затем XOR-ированы с байтами зашифрованных данных. Результат байтов тогда был сохранён в реальном кодированном слове и использован как входящие данные для DES. Конечно DES сделан с необходимыми модификациями. Не модифицированные байты CW(КС) всё ещё используются, чтобы продолжить обработку ХЭШ. После DES байты результата готовы для CA C0 сообщения или другого используемого в CA 18 сообщениях.

P.S. Спасибо Николаю.

Небольшая неточность была найдена и исправлена автором в алгоритме 09.03.2001
a little bug in the viaccess algo in the key chapter
actual version
If the 8th keybyte is nonzero then first 7 keybytes are rotated left by 2
bytes. This means key(k1 k2 k3 k4 k5 k6 k7 k8) -> key(k3 k4 k5 k6 k7 k1 k2
k8) These modified key is used in the DES routine but in the hash routine we
have to use the non modified key.
corrected one
In the DES hash routine we have to use the key as is (k1 k2 k3 k4 k5 k6 k7
k8).
But in the DES decrypt routine we build a new key in whitch the first 7
keybytes are rotated left by 2 bytes. This means key(k1 k2 k3 k4 k5 k6 k7
k8) -> key(k3 k4 k5 k6 k7 k1 k2 k8)
Regards

New information about GCA added 10 july 2001

Explanation of a possible counter measure from ViaAccess
It is based on the geographical code area (GCA) and it has been used
in the past by Viasat. The smart card code was available only
on some cop card.
The GCA is a value of 4 bytes and could be specific to each card.
When sending an ECM, you could give the right to descramble only
to the card with a GCA of a specific value (or a set of value).
If needed, you could indicate that you don't care of the GCA value
using a FF FF FF FF value.
When it is received by a decoder, the commands exchanged with the
card will be :
a) CA AC A6 00 00 to check if the card has a GCA
b) CA F8 00 08 06 9F 04 FF FF FF FF
by this command the decoder explains to the card that
the GCA is not important.
c) CA 88 01 08 LEN data
Here it is a normal CA 88 but P1=01 and not 00
What is interesting is the hash used in the CA 88.
If you do b) followed into c) by a hash computed using
for example viaprog, you will get a hash error.
Why ? because the 9F 04 FF FF FF FF is used to give
an initial value to the hash buffer used for CA 88.
It works like for EMM and CA F0.
Consequently, today, with almost available smart card hex,
there is a problem because :
command a) answer 90 08 and not 90 00
command b) answer 6D 00 because F8 is unknown.
command c) doesn't use the good initial hash buffer.

Some new litle bug was found and fixed in algorithm by author D.S at 10 july 2001

the Hrt key's allowed to discover a bug in the algo

here the current version
If the 8th key byte is even then this is the last modification but if it is odd then there is still one very complicated data modification. First there is one constant which is 5Ah if the 8th key byte is odd and his lower nibble is equal to zero. If the 8th byte is odd his lower nibble is not equal to zero then this constant is A5h.
and corrected one
If the 8th key byte is even then this is the last modification but if it is odd then there is still one very complicated data modification. First there is one constant which is 5Ah if the 8th key byte is odd and his higher nibble is equal to zero ((k8 & F0)= =0). If the 8th byte is odd his higher nibble is not equal to zero ((k8 & F0)! =0) then this constant is A5h.

Смотрите так же в раздел ИНФОРМАЦИЯ для ознакомления с некоторыми новыми документами по алгоритму.