Смекни!
smekni.com

Криптографические системы (стр. 2 из 3)

p(ak=1)=2m-1 /(2m-1)=1/2 + 1/(2m+1-2),

p(ak=0)=(2m-1-1)/(2m-1) = 1/2-(2m+1 -2)

и при увеличении m достигает значений, сколь угодно близких к 1/2.

4. Вероятности появления серий из r, r

{1,2,...,m-1}, одинаковых символов ( нулей или единиц ) в M-последовательности максимально близки к соответствующим вероятностям для случайной последовательности.

5. Для любого значения s ( 1

s<L ) существует такое r
s ( 1
r<L), что {ak} + {ak-s}={ak-r}. Данное свойство обычно называют свойством сдвига и сложения.

Использование линейных сдвиговых регистров для создания криптосистем предполагает их уязвимость, если взломщик обладает парой: исходный текст - шифротекст длиной не менее 2m бит. Действительно, имея исходный текст M=(m1,m2,...,m2m) и соответствующий шифротекст C=(c1,c2,...,c2m), мы можем получить К=MÅC=(m1Åc1,m2Åc2,...,m2mÅc2m)=(k1,k2,k3,...,k2m). Тогда задача взлома криптосистемы при известном начальном состоянии сводится к решению системы из m линейных уравнений с m неизвестными, где неизвестными являются коэффициенты порождающего полинома.

Данная система имеет вид

1k1 Å
2k2Å
3k3Å ... Å
mkm =km+1

1k2Å
2k3Å
3k4 Å ... Å
mkm+1 =km+2

1k3 Å
2k4Å
3k5 Å ... Å
mkm+2 =km+3

.... ....

1kmÅ
2km+1Å
3km+2 Å ... Å
mkm+m-1 =k2m .

3. КРИПТОГРАФИЧЕСКИЕ СИСТЕМЫ С ОТКРЫТЫМ КЛЮЧОМ

Первые криптографические системы с открытым ключем появились в конце 1970-х годов. От классических алгоритмов они отличаются тем, что для шифрования данных используется один ключ (открытый), а для дешифрования - другой (секретный). Данные, зашифрованные открытым ключем, можно расшифровать только секретным ключем. Следовательно, открытый ключ может распространяться через обычные коммуникационные сети и другие открытые каналы. Таким образом, устраняется главный недостаток стандартных криптографических алгоритмов: необходимость использовать специальные каналы связи для распределения ключей. Разумеется, секретный ключ не может быть вычислен из открытого ключа.

В настоящее время лучшим криптографическим алгоритмом с открытым ключем считается RSA (по имени создателей: Rivest, Shamir, Adelman). Перед изложением метода RSA определим некоторые термины.

Под простымчислом будем понимать такое число, которое делится только на 1 и на само себя.

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

Под результатом операции i mod j будем понимать остаток от целочисленного деления i на j.

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

1. Случайным образом выбираются два секретных простых числа, p и q, p¹q.

2. Вычисляется r=p*q.

3. Вычисляется f=(p-1)*(q-1).

4. Выбираются открытый (Ко) и секретный (Кс) ключи, которые являются взаимно простыми с f и удовлетворяют условию (Ко*Кс) mod f = 1.

Чтобы зашифровать данные открытым ключем Ко, необходимо:

1) разбить исходный текст на блоки, каждый из которых может быть представлен в виде числа M(i)=0, 1, ..., n-1;

2) зашифровать последовательность чисел M(i) по формуле

C(i)=(M(i)Ко) mod n,

где последовательность чисел C(i) представляет шифротекст.

Чтобы расшифровать эти данные секретным ключем Кс, необходимо выполнить следующие вычисления:

M(i)=(C(i)Кс) mod n.

В результате будет получено множество чисел M(i), которые представляют собой исходный текст.

Приведем простой пример использования метода RSA для шифрования сообщения “CAB”. Для простоты будем использовать малые числа (на практике используются намного большие числа).

1. Выберем p=3, q=11.

2. Вычислим r=3*11=33.

3. Вычислим f=(p-1)*(q-1)=20.

4. Выберем секретный ключ Кс, который является взаимно простым с f, например Кс=3.

5. На основе Кс и f вычислим открытый ключ Ко. Для этого можно использовать расширение алгоритма Евклида:

BEGIN

g0=f; g1=Kc;

u0=1; u1=0;

v0=0; v1=1;

i=1;

while gi¹0 do

begin

gi=uif+viKc;

y=gi-1 div gi;

gi+1=gi-1-ygi;

ui+1=ui-1-yui;

vi+1=vi-1-yvi;

i=i+1;

end;

Kо=vi-1;

if Kо<0 then Kо=Kо+f;

END.

В соответствии с алгоритмом получаем Ко=7.

6. Представим шифруемое сообщение как последовательность целых чисел в диапазоне 2...28. Пусть букве А соответствует число 2, букве В - число 3, а букве С - число 4. Тогда сообщение “CAB” можно представить в виде последовательности чисел {5, 3, 4}. Зашифруем сообщение, используя открытый ключ Ко=7:

C1 = (57) mod 33 = 78125 mod 33 = 14,

C1 = (37) mod 33 = 2187 mod 33 = 9,

C3 = (47) mod 33 = 16384 mod 33 = 16.

7. Для расшифровки полученного сообщения {14, 9, 16} с помощью секретного ключа Кс=3, необходимо:

M1 = (143) mod 33 = 2744 mod 33 = 5,

M1 = (93) mod 33 = 729 mod 33 = 3,

M1 = (163) mod 33 = 4096 mod 33 = 4.

Таким образом, в результате дешифрования сообщения получено исходное сообщение {5, 3, 4} (“CAB”).

Криптостойкость алгоритма RSA основывается на предположении, что исключительно трудно определить секретный ключ по открытому, поскольку для этого необходимо решить задачу о существовании делителей целого числа. Данная задача является NP-полной, то есть не имеет эффективного (полиномиального) решения. Вопрос существования эффективных алгоритмов решения NP - полных задач является до настоящего времени открытым. Традиционные же методы для чисел, состоящих из 200 цифр (именно такие числа рекомендуется использовать), требуют выполнения огромного числа операций (около 1023).

4. АРХИТЕКТУРА СИСТЕМ ЗАЩИТЫ ДАННЫХ

В последнее время все большее распространение получают программы, предназначенные для защиты электронной информации. Они предоставляют пользователям возможность зашифровывать файлы (PGP), санкционировать доступ к накопителям (adm.sys), создавать секретные логические области на дисках (Norton Diskreet). Средства защиты данных все чаще встраивают в обычное ПО (например, СУБД).

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

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

Однако выбор и реализация алгоритма шифрования - не единственная и не самая важная проблема при создании подобных систем. Необходимо разработать и реализовать еще как минимум два компонента:

1) управление ключами;

2) интерфейс с пользователем.

В соответствии с современными взглядами криптографический алгоритм должен удовлетворять следующим требованиям:

1) обладать известной криптостойкостью, выраженной в числе операций или количестве времени, необходимых для его взлома;

2) быть понятным;

3) секретность данных должна основываться только на секретности криптографических ключей.

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

Управление ключами включает в себя: генерирование, хранение, распределение ключей. Способ решения каждой из этих проблем сильно влияет на дизайн всей системы и ее эффективность. Сложность генерирования ключей заключается в том, что хороший криптографический ключ должен быть случайным числом. Встроенные генераторы псевдослучайных чисел, имеющиеся в большинстве систем программирования, не обеспечивают достаточного уровня случайности. При использовании их для генерирования ключей последние могут быть легко предугаданы или даже вычислены, что недопустимо. Проблема хранения подразумевает обеспечение секретности сгенерированных ключей. Большинство систем позволяют хранить ключи на диске вместе с информацией, защищая их паролем. Но данный метод нельзя признать приемлемым, потому что создание надежного доступа по паролю для PC проблематично. Проблема распределения ключей особенно остра в сетевых приложениях. Чтобы обмениваться зашифрованной информацией, удаленные пользователи должны иметь возможность обмениваться ключами. Очевидно, что в момент передачи ключей по обычным каналам связи они могут быть перехвачены. Решение этой проблемы требует применения специальных алгоритмов.