Алгоритм xor-шифрования
Базовые понятия шифрования
Шифрова́ние — способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифрования и расшифрования.
Шифр, код — совокупность алгоритмов криптографических преобразований (шифрования), отображающих множество возможных открытых данных на множество возможных зашифрованных данных, и обратных им преобразований.
Шифры подразделяются на теоретически не дешифруемые и практически не дешифруемые, а по структуре ключей на симметричные и асимметричные в зависимости от того, совпадает ли ключ зашифрования с ключом расшифрования. Симметричные шифры в свою очередь подразделяются на блочные и потоковые.
Криптогра́фия — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.
Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифртекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа.
Криптография — одна из старейших наук, ее история насчитывает несколько тысяч лет.
Открытый (исходный) текст — данные (не обязательно текстовые), передаваемые без использования криптографии.
Шифрованный (закрытый) текст — данные, полученные после применения криптосистемы с указанным ключом.
Криптосистема — семейство обратимых преобразований открытого текста в шифрованный.
Ключ — параметр шифра, определяющий выбор конкретного преобразования данного текста. В современных шифрах алгоритм шифрования известен, и криптографическая стойкость шифра целиком определяется секретностью ключа (Принцип Керкгоффса).
Шифрование — процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст.
Расшифровывание — процесс нормального применения криптографического преобразования шифрованного текста в открытый.
Дешифрование (дешифровка) — процесс извлечения открытого текста без знания криптографического ключа на основе известного шифрованного. Термин дешифрование обычно применяют по отношению к процессу криптоанализа шифротекста (криптоанализ сам по себе, вообще говоря, может заключаться и в анализе шифросистемы, а не только зашифрованного ею открытого сообщения).
Криптоанализ — наука, изучающая математические методы нарушения конфиденциальности и целостности информации.
Криптографическая атака — попытка криптоаналитика вызвать отклонения в атакуемой защищенной системе обмена информацией. Успешную криптографическую атаку называют взлом или вскрытие.
Криптографическая стойкость — способность криптографического алгоритма противостоять криптоанализу.
Алгоритм XOR-шифрования
Пожалуй, самым простым и примитивным алгоритмом шифрования является XOR-шифрование. Алгоритм XOR-шифрования может быть усложнен некоторыми методами, что может позволить достичь весьма неплохих результатов. Но в базовой реализации алгоритм крайне не стоек.
Алгоритм XOR-шифрования основан на применении бинарной логической операции исключающего или. В табличном представлении функция выглядит следующим образом:
A | B | A xor B |
На вход алгоритму подается исходный текст (в общем случае, любой набор байт, т.е. произвольный файл) и строка пароля.
Идея алгоритма заключается в том, что к каждому символу исходного текста и очередному символу строки пароля применяется побитовая логическая операция XOR. Результат записывается в файл.
Операция XOR обладает симметричностью. Это значит, что если зашифровать один и тот же файл 2 раза с одним и тем же паролем, то на выходе получим сам этот файл без изменений. Из этого факта становится ясно, что для шифрования и расшифровывания будет использоваться одна и та же функция, что существенно упрощает реализацию алгоритма. При этом, если при расшифровывании используется тот же пароль, что и при шифровании, то на выходе будет получен исходный файл. Если же пароли различаются, то на выходе будет получен файл, который будет содержать некорректные данные.
Рассмотрим алгоритм XOR-шифрования более подробно:
- На входе получаем указатели на исходный и результирующий файлы и строку пароля (которая не должна быть пустой).
- Читаем очередной символ (байт) из исходного файла.
- Применяем операцию XOR к прочитанному байту и очередному символу пароля.
- Результат операции записываем в результирующий файл.
- Если не достигнут конец исходного файла, переходим на шаг 2.
Если пароль короче исходного файла (а в подавляющем большинстве случаев так и будет), то пароль используется циклически, т.е. после последнего символа пароля вновь переходим к первому.
Необходимо реализовать процедуру:
procedure XOR_CoDec (const SourceFile, DestFile, Password: string);
Где в качестве параметров передаются:
SourceFile – имя исходного файла.
DestFile – имя результирующего файла.
Password – пароль.