Next: Какой должен быть пароль?
Up: 6.3. Как зашифровать файл?
Previous: Как вводить ключ?
Contents: Содержание
Кстати, а как программа при расшифровании файла определяет, что пароль
неправильный? По-разному. Некоторые программы вообще не проверяют
правильность пароля. В этом случае, если вы ввели неправильный пароль,
файл как бы расшифруется, но вы увидите совсем не то, что зашифровали.
Это неудобно. Предположим, вы зашифровали файл мегабайт в 50 с помощью
алгоритма ГОСТ. Сколько времени он будет расшифроваться? Если у вас
дома стоит обычный Pentium, то, по крайней мере, минуту. А скорее
всего, минуты три. Вы все это время сидите, ждете, а потом оказывается,
что зря ждали - пароль-то ввели неправильный. А если вы exe-файл
неправильно расшифровали, а потом запустили на выполнение? Скорее
всего, придется давить
Reset. Так что лучше, когда перед расшифрованием программа проверяет
правильность пароля.
Остается вопрос: как проверять правильность пароля?
Можно просто вписать пароль в начало зашифрованного файла перед шифртекстом. При
расшифровании вы вводите пароль, программа читает начало зашифрованного
файла и
сравнивает то, что вы ввели, и то, что в файле. Если совпало,
значит, пароль правильный. А если не
совпало -
неправильный. Просто и удобно. Только что произойдет, если кто-нибудь
другой случайно просмотрит зашифрованный файл, например, с помощью
Norton Commander? Весь файл - сплошная абракадабра, а в начале
файла - осмысленное слово. Не нужно быть семи пядей во лбу, чтобы
догадаться, что это и есть пароль. Так что нужно придумывать что-то
другое.
Очевидно, эталон пароля, который хранится в зашифрованном файле, тоже
надо зашифровать. Только как? Проще всего шифровать пароль по той же
схеме, что и текст исходного файла. Если шифр стойкий (а иначе его и не
стоит
использовать), пароль будет закрыт надежно. А что брать в
качестве ключа? Можно взять константу. Тогда в каждом зашифрованном
файле эталон пароля будет зашифрован на одном и том же ключе. Так,
например, делает встроенная система шифрования файлов электронной почты
Sprint Mail. Только там зашифрованный пароль хранится не в начале
зашифрованного файла, а в конце. Но что будет, если кто-то узнает ключ,
на котором шифруются все пароли? Он сможет расшифровывать все файлы,
которые вы зашифруете. И не важно, что пароли разные - злоумышленник
возьмет нужный пароль прямо из файла, который хочет прочесть.
Вы, скорее всего, подумали: а откуда злоумышленник узнает ключ, на
котором шифруются эталоны паролей? Этот ключ встроен в программу
шифрования, его никто не знает, даже вы его не знаете. Тем не менее,
если злоумышленник достаточно квалифицирован, если он умеет
пользоваться дизассемблером и отладчиком, этот ключ он узнает без
труда. Обычно на решение такой задачи уходит всего несколько часов.
Как это можно сделать - тема отдельной статьи. Пока поверьте на
слово - имея только exe-файл, определенные навыки и много свободного
времени, можно разобраться в том, что делает программа, до мельчайших
подробностей.
Лучше шифровать эталон пароля сам на себе. Взять пароль в качестве
открытого текста и взять тот же пароль в качестве ключа. При
расшифровании файла, когда вы вводите пароль, программа пытается
расшифровать только начало файла. Если в результате получилась строка,
совпадающая с паролем, значит, пароль правильный, и можно
расшифровывать файл дальше. А если получилось что-то другое, значит,
пароль неправильный.
Некоторые программы шифрования шифруют пароли
иначе. Берется какая-то строка,
всегда одна и та же, шифруется на
пароле и записывается в зашифрованный файл. Diskreet, например, шифрует
на пароле строку ``ABCDEFGHENRIXYZ'' (эта строка завершается нулевым
байтом, как принято в языке C). Когда Diskreet проверяет пароль, он
берет начало зашифрованного файла (точнее, байты с 16-го по 31-й) и
расшифровывает их на пароле, который ввел пользователь. Если после
расшифрования получилось ``ABCDEFGHENRIXYZ'' - пароль правильный, если
не получилось - неправильный.
На первый взгляд кажется, что эта схема хуже, чем предыдущая.
Действительно, в предыдущем случае злоумышленнику неизвестны ни
открытый текст, ни ключ, а в последнем случае неизвестен только ключ, а
открытый текст известен. Но если вы еще помните, что было написано в
начале этой главы, то, наверное, уже поняли, что последняя схема
ничуть не слабее предыдущей. Если шифр стойкий, то ключ
шифрования
невозможно получить за приемлемое время, даже если известны и открытый
текст, и шифртекст.
Next: Какой должен быть пароль?
Up: 6.3. Как зашифровать файл?
Previous: Как вводить ключ?
Contents: Содержание