На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Что такое PGP?

PGP (Pretty Good Privacy) - программа, служащая для кодиро­вания и/или подписывания сообщений, файлов и любой другой ин­формации, представленной в электронном виде.
В основе работы PGP лежит алгоритм RSA (Rivest-Shamir-основанный на наличии двух ключей - открытого и секрет­ного. Открытый ключ распространяется максимальному количеству людей (через KeyServer'a, лично, и т. п.), а секретный должен нахо­диться только у владельца (причем в надежном месте; если к компью­теру, на котором вы работаете, имеют доступ другие люди — храните
свой секретный ключ на дискете).
Криптостойкость алгоритма RSA основывается на том, что современной математике не известны алгоритмы разложения боль­ших простых чисел за реальное время.
Зачем это нужно?
Итак, вы хотите передать мне какой-либо файл по электронной почте и при этом быть уверенным, что никто другой, кроме меня, не сможет прочитать этот файл: вы берете мой открытый ключ, кодируе­те им свой файл и отправляете файл мне. Никто, кроме меня, не смо­жет прочитать этот закодированный файл без моего секретного ключа. Другой пример: вы хотите, отправляя свои письма, быть уверенным в том, что никто не исказил содержимое письма, для этого вы подписы­ваете письмо электронной подписью с помощью вашего секретного ключа и посылаете его (письмо).
Получив ваше письмо и обладая вашим открытым ключом, я мо­гу удостовериться в том, что ни один бит информации не был искажен при прохождении письма. Хорошим примером использования элек-
тронной подписи может служить способ распространения дополнений к антивирусу Dr.Web.
Как им пользоваться?
Для начала нужно создать пару ключей (открытый и закрытый). Это делается с помощью программы PGPkeys. Я советую вам исполь­зовать ключи не менее 1024 бит. В freeware-версии программы можно создавать только ключи Старый тип ключей
можно создать с помощью коммерческой версии или с помощью PGP 2.6.Х. Ваша пара ключей занесется в общий список доступных вам ключей (в основном, конечно, открытых). Теперь, имея пару ключей, вы можете легко подписывать, кодировать файлы (в стандартный explorer добавился пункт меню PGP по правой кнопке мышки), а так­же буфер обмена (clipboard) через программу, запущенную в tray'e (при установке       сама прописывает эту программу в startup меню).
Советую делать резервную копию базы данных открытых клю­чей (pubring.pkr), а также хранить секретный ключ (secring.skr) и файл randseed.bin на дискете, доступной только вам.
Что такое Rijndael?
представляет собой итеративный блочный шифр,
имеющий переменную длину блоков и различные длины ключей. Длина ключа и длина блока могут быть независимо друг от друга 192 или 256 бит.
Мы объясним структуру шифра и это не является руководством для реализации.
«Состояние», Ключ шифрования и Число Циклов
Разнообразные преобразования работают с промежуточным
результатом, называемым Состоянием (State).
Определение: промежуточный результат шифрования назовем «состоянием» (State)
Состояние можно представить в виде прямоугольного массива
байтов. Этот массив имеет 4 строки, а число столбцов обозначено как
Nb и равно длине блока, деленной на 32.
Ключ шифрования также представлен в виде прямоугольного массива с четырьмя строками. Число столбцов обозначено как Nk и
равно длине ключа, деленной на 32.  Это показано на рисунке 1.
В некоторых случаях ключ шифрования показан как линейный массив 4-байтовых слов. Слова состоят из 4 байтов, которые находятся в одном столбце (при представлении в виде прямоугольного массива).


ao,o

ao,i

аол

ао,з

ао.4

ао.5

 

ко,о

k0,i

ko,2

ko,3

ai.o

 

Щ

ai,3

ai,4

ai.5

 

кц

 

ky

ky

32,0

 

а2,2

a2l3

32,4

а2,5

 

к2.о

 

k2,2

к2,з

аз,о

a3,i

аз,2

аз,з

аз,4

 

 

кз,о

ky

кз,2

к3,з

 

 

 

 

 

 

 

 

 

 


Входные данные для шифра («открытый текст», если использу­ется режим шифрования ЕСВ) обозначаются как байты состояния в порядке аО,0, al,0, аЗ,0, аО,1, al,l, аЗ,1, а4,1... После завершения действия шифра выходные данные получаются из байтов состояния в же порядке.
Число циклов обозначено как Nr и зависит от значений Nb и Nk.
Оно приведено в таблице 1.


Nr

Nb 4

Nb 6

Nb = 8

Nk=4

10

12

14

Nk = 6

12

12

14

Nk = 8

Л4

14

14

:
Таблица     Число циклов (Nr) как функция от длины ключа и длины блока
Цикловое преобразование
Цикловое преобразование состоит из четырех различных преобразований. На псевдо-Си это выглядит следующим образом:
Round  (State, RoundKey) {
ByteSub(State) ;   // замена байт
ShiftRow (State);   //   сдвиг строк
MixColumn (State);    //   замешивание столбцов
AddRoundKey(State,   RoundKey);   // добавление циклового
ключа
}
Последний цикл шифра немного отличается. Вот как он выглядит:
FmalRound (State, RoundKey)

ByteSub(State) ;   // замена байт //  сдвиг строк
// добавление циклового
ключа }
В приведенной записи «функции» Round, ByteSub и т. д. выполняют свои действия над массивами, указатели (т. е. State, RoundKey) на которые им передаются.
Как можно заметить, последний цикл отличается от простого цикла только отсутствием замешивания столбцов. Каждое из приведенных преобразований разобрано далее.
Замена байт (ByteSub)
Преобразование ByteSub представляет собой нелинейную
замену байт, выполняемую независимо с каждым байтом состояния. Таблицы замены (или S-блоки) являются инвертируемыми и построены из композиции двух преобразований:
1. Первое — получение обратного элемента относительно умножения в поле GF(28), описанного в разделе      '00' переходит сам
в себя.

2. Применение афинного преобразования (над GF(2)), определенного как:


Уо

1

1

 

11

11

11

0

0

0

бо

+

0

У»

0

1

 

 

 

1

0

0

б,

1

Уг

0

0

1

1

1

1

1

0

о2

1

Уз

0

0

0

1

1

1

1

1

бз

0

У4

1

0

0

0

1

1

1

1

о4

0

у5

1

1

0

0

0

1

1

1

о5

0

У*

1

1

1

0

0

0

1

1

о6

1

У7

1

1

1

1

0

0

0

1

07

1

Применение описанного S-блока ко всем байтам состояния обозначено как ByteSub(State). Рисунок 2 иллюстрирует применение преобразования ByteSub к состоянию.

 


ко.о

ko,i

 

 

к,.,

Ьц ft

к 2,о

к

._Г

 

 

к,,

кз.з | к з.з

Рисунок 2. ByteSub действует на каждый байт состояния
Преобразование сдвига строк (ShiftRow)
Последние 3 строки состояния циклически сдвигаются на различное число байт. Строка 1 сдвигается на С1 байт, строка 2 — на С2 байт и строка 3 — на СЗ байт.
Значения сдвигов CI, С2 и СЗ зависят от длины блока Nb. Их величины приведены в таблице 2.
-
297

Nb

С1

C2

C3

4

1

2

3

6

1

2

3

8

1

3

4

Таблица 2. Величина сдвига для разной длины блоков
Операция сдвига последних 3 строк состояния на определенную величину обозначена как ShiftRow(State). Рисунок 3 показывает влияние преобразования на состояние.


т

я

0

p

 

 

j

k

i

 

 

 

d

е

f

...

 

 

w

X

у

z

...

 

Sis
o**e§+4W*6PlS4*iU3|:

 

 

 

 

 

 

 

 

т

п

О

Р

 

 

 

j

к

i

• ••

 

__

 

 

d

е

/

 

1—1—-

 

 

w

X

V

 

 

 

 

 

 

-

Рисунок 3, ShiftRoi действует на строки состояния
Преобразование замешивания столбцов (MlxColumn)
В этом преобразовании столбцы состояния рассматриваются как многочлены над GF(28) и умножаются по модулю 1 на многочлен с(х), выглядящий следующим образом:
с(х)-'03'хЗ + '01'х2 + '01'х + '02'
Как описано в разделе это может быть представлено в виде матричного умножения. Пусть b (х) - с (х) а (х)


bo

02

03

01

01

ао

Ь.

01

02

03

01

ai

 

01

01

02

03

 

ы

03

01

01

02

аз

Применение этой операции ко всем четырем столбцам состояния обозначено как MixColumn(State). Рисунок 4 демонстрирует применение MixColumn к состоянию.

 


Эо.0

ao,i

а«

Вол

 

 

 

а(.о

ai,i

 

аи a;j a3.t

ЩА

а,.5

 

a2,i

а3

 

а:.<

a2ls

 

аз..

 

а3.4

a3,i

 

 

 

 

 

®с(х)

 

 

 

bi]0

щ

Ь:,о

bj.1

Ьз.о

b,,

 

Рисунок 4. MixColumn действует на столбцы состояния
Добавление циклового ключе
В данной операции цикловой ключ добавляется к состоянию посредством простого EXOR.
Цикловой   ключ   вырабатывается   из   ключа шифрования посредством алгоритма выработки ключей (key schedule).
Длина циклового ключа равна длине блока Nb.
Преобразование, содержащее добавление посредством EXOR циклового ключа к состоянию, обозначено как
RoundKey).
Оно проиллюстрировано на рисунке 5.

^0,0

Зо,1

3o,i

 

Зо.4

Зо,5

 

 

^0.1

к,,.:

ко.з

 

bo,o

b0.i

ko,2

ко.з

3t,o

81,1

«и

а,.3

3|,4

3|5

Ф

km

км

к,.г

к,,з

Ь|,0

b,.,

k„

 

320

&S.1

 

32.3

а2.4

&3J

 

к.

к,.

к,.:

к:.3

 

b:.o

by

k2.2

k2,3

Зз.О

a3.i

33,2

Зз,з

Эз,4

33,5

 

К3.0

к,,

кз.

кз,з

 

Ь3,о

b,.,

k3,2

кз.з

Рисунок 5. При добавлении ключа цикловой ключ складывается посредством EXOR с состоянием
Алгоритм выработки ключей (Key Schedule)
Цикловые ключи получаются из ключа шифрования посредством алгоритма выработки ключей. Он содержит два компонента: расширение ключа (Key Expansion) и выбор циклового ключа (Round Key Selection).
Основополагающие принципы алгоритма выглядят следующим
образом:
♦ Общее число бит цикловых ключей равно длине блока, умноженной на число циклов плюс 1 (например, для длины блока 128 бит и 10 циклов требуется 1408 бит циклового ключа).
♦ Ключ  шифрования  расширяется  в   Расширенный Ключ
(Expanded Key).
♦ Цикловые ключи берутся из Расширенного ключа следующим
образом: первый цикловой ключ содержит первые Nb слов, второй -
следующие Nb слов и т. д.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика