ЗАРОЖДЕНИЕ КРИПТОГРАФИИ

       

Как проверять правильность ключа?


Кстати, а как программа при расшифровании файла определяет, что пароль неправильный? По-разному. Некоторые программы вообще не проверяют правильность пароля. В этом случае, если вы ввели неправильный пароль, файл как бы расшифруется, но вы увидите совсем не то, что зашифровали. Это неудобно. Предположим, вы зашифровали файл мегабайт в 50 с помощью алгоритма ГОСТ. Сколько времени он будет расшифроваться? Если у вас дома стоит обычный Pentium, то, по крайней мере, минуту. А скорее всего, минуты три. Вы все это время сидите, ждете, а потом оказывается, что зря ждали - пароль-то ввели неправильный. А если вы exe-файл неправильно расшифровали, а потом запустили на выполнение? Скорее всего, придется давить Reset. Так что лучше, когда перед расшифрованием программа проверяет правильность пароля.

Остается вопрос: как проверять правильность пароля? Можно просто вписать пароль в начало зашифрованного файла перед шифртекстом. При расшифровании вы вводите пароль, программа читает начало зашифрованного файла и сравнивает то, что вы ввели, и то, что в файле. Если совпало, значит, пароль правильный. А если не совпало - неправильный. Просто и удобно. Только что произойдет, если кто-нибудь другой случайно просмотрит зашифрованный файл, например, с помощью Norton Commander? Весь файл - сплошная абракадабра, а в начале файла - осмысленное слово. Не нужно быть семи пядей во лбу, чтобы догадаться, что это и есть пароль. Так что нужно придумывать что-то другое.

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


Вы, скорее всего, подумали: а откуда злоумышленник узнает ключ, на котором шифруются эталоны паролей? Этот ключ встроен в программу шифрования, его никто не знает, даже вы его не знаете. Тем не менее, если злоумышленник достаточно квалифицирован, если он умеет пользоваться дизассемблером и отладчиком, этот ключ он узнает без труда. Обычно на решение такой задачи уходит всего несколько часов. Как это можно сделать - тема отдельной статьи. Пока поверьте на слово - имея только exe-файл, определенные навыки и много свободного времени, можно разобраться в том, что делает программа, до мельчайших подробностей.

Лучше шифровать эталон пароля сам на себе. Взять пароль в качестве открытого текста и взять тот же пароль в качестве ключа. При расшифровании файла, когда вы вводите пароль, программа пытается расшифровать только начало файла. Если в результате получилась строка, совпадающая с паролем, значит, пароль правильный, и можно расшифровывать файл дальше. А если получилось что-то другое, значит, пароль неправильный.

Некоторые программы шифрования шифруют пароли иначе. Берется какая-то строка, всегда одна и та же, шифруется на пароле и записывается в зашифрованный файл. Diskreet, например, шифрует на пароле строку ``ABCDEFGHENRIXYZ'' (эта строка завершается нулевым байтом, как принято в языке C). Когда Diskreet проверяет пароль, он берет начало зашифрованного файла (точнее, байты с 16-го по 31-й) и расшифровывает их на пароле, который ввел пользователь. Если после расшифрования получилось ``ABCDEFGHENRIXYZ'' - пароль правильный, если не получилось - неправильный.

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

невозможно получить за приемлемое время, даже если известны и открытый текст, и шифртекст.

Next: Какой должен быть пароль?

Up: 6.3. Как зашифровать файл?

Previous: Как вводить ключ?

Contents:



Содержание раздела