Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы и средства защиты информации

.pdf
Скачиваний:
197
Добавлен:
03.03.2016
Размер:
5.1 Mб
Скачать

Стандарт криптографическогопреобразованияданных ГОСТ 28147-89 441

бинацию, состоящую из двух последовательных 32-битовых блоков. Исходя из удобства изложения, далее будем называть любой 64-битовый блок комбинаци- ей, а также считать, что блок состоит их двух сцепленных подблоков из 32-х битов каждый.

Гамма накладывается поразрядно по модулю 2. Каждая комбинация гаммы представляет собой результат шифрпреобразования с помощью шифра простой замены на множестве 64-битовых комбинаций. Входные комбинации для указанного шифра, в общем случае, формируются в зависимости от ключей, псевдослучайного открытого параметра S (синхропосылка), известных констант с1, c2 и предыдущего блока шифртекста. Фактически задача каждого из режимов шифрования — это формирование 64-битовых комбинаций для входа в основной режим работы ГОСТ, называемый режимом простой замены. По сути, ключи необходимы для работы ГОСТ именно в этом режиме. Комбинация гаммы является результатом работы алгоритма в режиме простой замены.

Алгоритм ГОСТ в качестве исходных данных использует три параметра: K, X и Z 64-битовый блок данных. Первый параметр является долговременным, а второй — сеансовым ключом.

Параметры независимы и имеют размер 512, 256 и 64 бита соответственно. K представляет собой отображение множества блоков в себя. Это отображение реализует потетрадную замену 32-разрядных блоков в 32-х разрядные и состоит из 8 подключей. Подключ Ki (i = 1, …, 8), входящий в K, является таблицей замены для i-той (слева) тетрады, т.е. состоит из 16 тетрад. В стандарте ключ K назы-

вается блоком подстановки, а подключи K узлами замены.

Сеансовый ключ X состоит из восьми 32-разрядных подключей Xi, каждый из которых в соответствующий момент используется для суммирования с некоторым блоком по модулю 2. Режим простой замены алгоритма ГОСТ реализован в виде шифра Файстеля.

Шифрование блока открытого текста Z алгоритмом ГОСТ производится за 32 цикла. На каждом цикле происходит преобразование входной комбинации в выходную. Шифртекстом является результат работы ( выход) тридцать второго цикла, подвергнутый очень простому дополнительному преобразованию.

Процесс шифрования в режиме простой замены ( рис. , который обозначим через T = ГОСТ(S) можно представить в виде последовательности 34 блоков u = (U–2, U–1, U0, U1, U2, …, U30, U31), где U-1||U0 = S и U31||U30 = T.

Здесь U-1||U0 — результат работы цикла 0, U0||U1 — результат работы цикла 1 и т.д. до U31||U30 — результата работы цикла 31. Дополнительное преобразование меняет порядок следования блоков: U31||U30 = T.

На цикле i используется подключ Xt(i). При шифровании используется следующая последовательность выбора подключей от начального и до последнего цикла:

t(i) = {0,1,2,3,4,5,6,7; 0,1,2,3,4,5,6,7; 0,1,2,3,4,5,6,7; 7,6,5,4,3,2,1,0}

442 Глава 18. Криптографическая защита

При расшифровывании используется обратный порядок следования подключей.

В режиме гаммирования последовательность 64-битовых комбинаций гаммы имеет вид: γK = ГОСТ(φ(σK–1)), k = 1, 2, ..., где σ0 = ГОСТ(S). При этом для s1||s2

φ(σ) состоит из двух блоков: s1 º c1, s2 + c2.Здесь сложение с c2 производится по mod 232, а s1 º c1 = s1 + c1 mod(232 – 1) за исключением случая s1 º c1, s2 + c2, когда

результат принимается равным 232 – 1 . Шестнадцатеричное представление c1 и c2, соответственно, следующее: х01010101 и х01010104,

В режиме гаммирования с обратной связью

γ1 = ГОСТ(S), γk+1 = ГОСТ(γk Å tk), k = 1, 2, …, t — комбинация открытого текста.

Рис. 18.9. Цикл шифрования в режиме простой замены

Пример реализации алгоритма ГОСТ представлен в листингах 18.5 и 18.6 (компилятор — Microsoft Visual C 6.0).

Листинг 18.5. Пример реализации алгоритма ГОСТ на

языке C++ в виде библиотечного класса (библиотека Crypto++ 5.1)

#include "pch.h" #include "gost.h" #include "misc.h"

Стандарт криптографическогопреобразованияданных ГОСТ 28147-89 443

Продолжение листинга 18.5

NAMESPACE_BEGIN(CryptoPP)

// S-блоки

const byte GOST::Base::sBox[8][16]={

{4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3}, {14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9}, {5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11}, {7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3}, {6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2}, {4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14}, {13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12}, {1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12}};

bool GOST::Base::sTableCalculated = false; word32 GOST::Base::sTable[4][256];

void GOST::Base::UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length)

{

AssertValidKeyLength(length);

PrecalculateSTable();

GetUserKey(LITTLE_ENDIAN_ORDER, key.begin(), 8, userKey, KEYLENGTH);

}

void GOST::Base::PrecalculateSTable()

{

if (!sTableCalculated)

{

for (unsigned i = 0; i < 4; i++)

for (unsigned j = 0; j < 256; j++)

{

word32 temp = sBox[2*i][j%16] | (sBox[2*i+1][j/16] << 4); sTable[i][j] = rotlMod(temp, 11+8*i);

}

sTableCalculated=true;

}

}

 

#define f(x) ( t=x,

\

sTable[3][GETBYTE(t, 3)] ^ sTable[2][GETBYTE(t, 2)] \

444 Глава 18. Криптографическая защита

Продолжение листинга 18.5

^ sTable[1][GETBYTE(t, 1)] ^ sTable[0][GETBYTE(t, 0)]

)

typedef BlockGetAndPut<word32, LittleEndian> Block;

void GOST::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const

{

word32 n1, n2, t; Block::Get(inBlock)(n1)(n2);

for (unsigned int i=0; i<3; i++)

{

n2 ^= f(n1+key[0]);

n1 ^= f(n2+key[1]);

n2 ^= f(n1+key[2]);

n1 ^= f(n2+key[3]);

n2 ^= f(n1+key[4]);

n1 ^= f(n2+key[5]);

n2 ^= f(n1+key[6]);

n1 ^= f(n2+key[7]);

}

n2 ^= f(n1+key[7]);

n1 ^= f(n2+key[6]);

n2 ^= f(n1+key[5]);

n1 ^= f(n2+key[4]);

n2 ^= f(n1+key[3]);

n1 ^= f(n2+key[2]);

n2 ^= f(n1+key[1]);

n1 ^= f(n2+key[0]);

Block::Put(xorBlock, outBlock)(n2)(n1);

}

void GOST::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const

{

word32 n1, n2, t;

Block::Get(inBlock)(n1)(n2);

Стандарт криптографическогопреобразованияданных ГОСТ 28147-89 445

Окончание листинга 18.5

n2 ^= f(n1+key[0]);

n1 ^= f(n2+key[1]);

n2 ^= f(n1+key[2]);

n1 ^= f(n2+key[3]);

n2 ^= f(n1+key[4]);

n1 ^= f(n2+key[5]);

n2 ^= f(n1+key[6]);

n1 ^= f(n2+key[7]);

for (unsigned int i=0; i<3; i++)

{

n2 ^= f(n1+key[7]);

n1 ^= f(n2+key[6]);

n2 ^= f(n1+key[5]);

n1 ^= f(n2+key[4]);

n2 ^= f(n1+key[3]);

n1 ^= f(n2+key[2]);

n2 ^= f(n1+key[1]);

n1 ^= f(n2+key[0]);

}

Block::Put(xorBlock, outBlock)(n2)(n1);

}

NAMESPACE_END

Листинг 18.6. Заголовочный файл gost.h, используемый при реализации алгоритма ГОСТ на

языке C++ в виде библиотечного класса (библиотека Crypto++ 5.1)

#ifndef CRYPTOPP_GOST_H #define CRYPTOPP_GOST_H

#include "seckey.h" #include "secblock.h"

NAMESPACE_BEGIN(CryptoPP)

struct GOST_Info : public FixedBlockSize<8>, public FixedKeyLength<32>

{ static const char *StaticAlgorithmName() {return "GOST";}};

446 Глава 18. Криптографическая защита

Окончание листинга 18.6

{

class Base : public BlockCipherBaseTemplate<GOST_Info>

{

public:

void UncheckedSetKey(CipherDir direction,

const byte *userKey, unsigned int length);

protected:

static void PrecalculateSTable();

static const byte sBox[8][16]; static bool sTableCalculated; static word32 sTable[4][256];

FixedSizeSecBlock<word32, 8> key;

};

class Enc : public Base

{

public:

void ProcessAndXorBlock(const byte *inBlock,

const byte *xorBlock, byte *outBlock) const;

};

class Dec : public Base

{

public:

void ProcessAndXorBlock(const byte *inBlock,

const byte *xorBlock, byte *outBlock) const;

};

public:

typedef BlockCipherTemplate<ENCRYPTION, Enc> Encryption; typedef BlockCipherTemplate<DECRYPTION, Dec> Decryption;

};

typedef GOST::Encryption GOSTEncryption; typedef GOST::Decryption GOSTDecryption; NAMESPACE_END

#endif

Глава 19

Скремблирование

В речевых системах связи известно два основных метода закрытия речевых сигналов, различающихся по способу передачи по каналам связи: аналоговое скремблирование и дискретизация речи с последующим шифрованием.

Под скремблированием понимается изменение характеристик речевого сигнала, таким образом, что полученный модулированный сигнал, обладая свойствами неразборчивости и неузнаваемости, занимает ту же полосу частот, что и исходный сигнал.

Каждый из этих методов имеет свои достоинства и недостатки.

Так, для аналоговых скремблеров характерно присутствие при передаче в канале связи фрагментов исходного открытого речевого сообщения, преобразованного в частотной и (или) временной области. Это означает, что злоумышленники могут попытаться перехватить и проанализировать передаваемую информацию на уровне звуковых сигналов. Поэтому ранее считалось, что, несмотря на высокое качество и разборчивость восстанавливаемой речи, аналоговые скремблеры могут обеспечивать лишь низкую или среднюю, по сравнению с цифровыми системами, степень закрытия. Однако новейшие алгоритмы аналогового скремблирования способны обеспечить не только средний, но очень высокий уровень закрытия.

Цифровые системы не передают какой-либо части исходного речевого сигнала. Речевые компоненты кодируются в цифровой поток данных, который смешивается с псевдослучайной последовательностью, вырабатываемой ключевым генератором по одному из криптографических алгоритмов. Подготовленное таким образом сообщение передается с помощью модема в канал связи, на приемном конце которого проводятся обратные преобразования с целью получения открытого речевого сигнала.

Технология создания широкополосных систем, предназначенных для закрытия речи, хорошо известна, а ее реализация не представляет особых трудностей. При этом используются такие методы кодирования речи, как АДИКМ (адаптивная дифференциальная и импульсно-кодовая модуляция), ДМ ( дельтамодуляция) и т.п. Но представленная таким образом дискретизированная речь может передаваться лишь по специально выделенным широкополосным каналам связи с полосой пропускания 4,8–19,2 кГц. Это означает, что она не пригодна для передачи по линиям телефонной сети общего пользования, где требуемая скорость передачи данных должна составлять не менее 2400 бит/с. В таких

448 Глава 19. Скремблирование

случаях используются узкополосные системы, главной трудностью при реализации которых является высокая сложность алгоритмов снятия речевых сигналов, осуществляемыхв вокодерныхустройствах.

Посредством дискретного кодирования речи с последующим шифрованием всегда достигалась высокая степень закрытия. Ранее этот метод имел ограниченное применение в имеющихся узкополосных каналах из-за низкого качества восстановления передаваемой речи.

Достижения в развитии технологий низкоскоростных дискретных кодеров позволили значительно улучшить качество речи без снижения надежности закрытия.

Аналоговые скремблеры подразделяются на:

речевые скремблеры простейших типов на базе временных и (или) частотных перестановок речевого сигнала (рис. 19.1);

комбинированные речевые скремблеры на основе частотно-временных перестановок отрезков речи, представленных дискретными отсчетами, с применением цифровой обработки сигналов (рис. 19.2).

Рис. 19.1. Схема простейшего речевого скремблера

Рис. 19.2. Схема комбинированного речевого скремблера

Цифровые системы закрытия речи подразделяются на широкополосные (рис. 19.3) и узкополосные (рис. 19.4).

Говоря об обеспечиваемом уровне защиты или степени секретности систем закрытия речи, следует отметить, что эти понятия весьма условные. К настоящему времени не выработано на этот счет четких правил или стандартов. Однако в ряде изделий основные уровни защиты определяются, как тактический и

Аналоговыескремблеры 449

стратегический, что в некотором смысле перекликается с понятиями практи- ческой и теоретической стойкости криптосистем закрытия данных.

Рис. 19.3. Схема широкополосной системы закрытия речи

Рис. 19.4. Схема узкополосной системы закрытия речи

Тактический, или низкий, уровень используется для защиты информации от прослушивания посторонними лицами на период, измеряемый от минут до дней. Существует много простых методов и способов обеспечения такого уровня защиты с приемлемой стойкостью.

Стратегический, или высокий, уровень ЗИ от перехвата используется в ситуациях, подразумевающих, что высококвалифицированному, технически хорошо оснащенному специалисту потребуется для дешифрования перехваченного сообщения период времени от несколькихмесяцев до несколькихлет.

Часто применяется и понятие средней степени защиты, занимающее промежуточное положениемежду тактическими стратегическимуровнем закрытия.

По результатам проведенных исследований можно составить диаграммы (рис 19.5), показывающие взаимосвязь между различными методами закрытия речевых сигналов, степенью секретности и качеством восстановленной речи.

Следует отметить, что такое понятие, как качество восстановленной речи, строго говоря, достаточно условно. Под ним обычно понимают узнаваемость абонента и разборчивость принимаемого сигнала.

450 Глава 19. Скремблирование

Рис. 19.5. Сравнительные диаграммы разных методов закрытия речевых сигналов

Аналоговое скремблирование

Среди современных устройств закрытия речевых сигналов наибольшее распространение имеют устройства, использующие метод аналогового скремблирования. Это позволяет, во-первых, снизить стоимость таких устройств, во-вторых, эта аппаратура применяется в большинстве случаев в стандартных телефонных каналах с полосой 3 кГц, в-третьих, она обеспечивает коммерческое качество дешифрованной речи, и, в-четвертых, гарантирует достаточно высокую степень закрытия речи.

Аналоговые скремблеры преобразуют исходный речевой сигнал посредством изменения его амплитудных, частотных и временных параметров в различных комбинациях. Скремблированный сигнал затем может быть передан по каналу связи в той же полосе частот, что и открытый. В аппаратах такого типа используется один или несколько следующих принципов аналогового скремблиро-

вания.

1.Скремблирование в частотной области: частотная инверсия (преобра-

зование спектра сигнала с помощью гетеродина и фильтра), частотная ин- версия и смещение (частотная инверсия с меняющимся скачкообразно смещением несущей частоты), разделение полосы частот речевого сигнала на ряд поддиапазонов с последующей их перестановкой и инверсией.

2.Скремблирование во временной области — разбиение фрагментов на сегменты с перемешиванием их по времени с последующим прямым и (или) инверсным считыванием.

3.Комбинация временного и частотного скремблирования.