Итак, сразу к делу
В прошлой статье речь зашла о том, как безопасно и надежно хранить пин-коды от банковских карт, не опасаясь за сохранность собственных средств
Итогом статьи стало то, что прежде чем записывать вашу конфиденциальную информацию, ее нужно зашифровать. О том, как это делать, какие бывают методы шифрования/дешифрования и пойдет речь в данной публикации
На написание данной серии статей меня вдохновил фильм "Престиж" Кристофера Нолана 2006 года. Главный герой в нем шифрует свой дневник с секретами своих фокусов при помощи кодового слова TESLA. Мне стало интересно, как он это делает и это послужило поводом подробно изучить данную тему
Основная суть шифрования
Бытует мнение, что шифрование - это нечто очень сложное и непонятное
На самом деле, это очень просто
В качестве примера рассмотрим шифрование только цифр. В этом случае "алфавит" состоит из 10 арабских цифр от 0 до 9
1 2 3 4 5 6 7 8 9 0 - исходный "алфавит"
Придумаем некоторый шифр:
8 6 9 0 1 2 3 4 5 7 - шифрованный "алфавит"
Теперь нужно читать эту таблицу сверху вниз:
Цифра 1 теперь шифруется цифрой 8, 2 - 6, 3 - 9 и так далее. То есть каждой цифре в соответствие однозначно ставится другая цифра
Таким образом, пин-код 9171 будет иметь шифр 5838
Для дешифрования нужно читать таблицу наоборот, снизу вверх:
Тогда 5838 переходит в 9171
Подытожим: для шифрования/дешифрования необходимо составить таблицу, в которой первой строкой запишется исходный алфавит, а второй строкой - шифрованный алфавит. Далее процесс шифрования происходит сверху вниз, а дешифрования - снизу вверх
Теперь главный вопрос - а как составить шифрованный алфавит? Каким алгоритмом/логикой пользоваться для создания своего уникального шифра? Рассмотрим самые распространенные методы
Атбаш
Самый простой метод, который заключается в зеркальной замене алфавита:
1 2 3 4 5 6 7 8 9 0 - исходный алфавит
0 9 8 7 6 5 4 3 2 1 - шифрованный алфавит
Шифр Цезаря
Достаточно простой способ, заключающийся в сдвиге алфавита на некоторое фиксированное число символов. Сам Цезарь использовал сдвиг на 3 символа
1 2 3 4 5 6 7 8 9 0 - исходный алфавит
4 5 6 7 8 9 0 1 2 3 - шифрованный алфавит
Два представленных шифра очень просты для использования, то также и очень просты для взлома: атбаш взламывается с 1 попытки, шифр Цезаря - достаточно 9
Для целей шифрования пин-кодов это не особо важно, поскольку перебор пин-кодов можно банально привести с блокировке карты банкоматом. Однако, если хочется использовать более надежный шифр, то стоит попробовать метод простой замены
Простая замена
В данном методе необходимо придумать свое уникальное кодовое слово, на основе которого и будет происходить шифрование
Поскольку в наших примерах мы используем арабские цифры, то и кодовое слово должно состоять только из арабских цифр (длина кодового слова не играет роли). Важный нюанс - цифры не должны повторяться
Например, кодовое слово 70152 подойдет для шифра, в то время как 701052 уже нет, поскольку цифра 0 встречается здесь дважды
Хорошо, пускай мы выбрали кодовое слово 70152, которое будем всегда помнить наизусть - как тогда составить шифрованный алфавит?
Правило построения очень простое - нужно сначала выписать кодовое слово, а затем написать все оставшиеся цифры в порядке возрастания. В нашем случае это цифры 3, 4, 6, 8, 9
1 2 3 4 5 6 7 8 9 0 - исходный алфавит
7 0 1 5 2 3 4 6 8 9 - шифрованный алфавит
Важный нюанс - чтобы составить шифр таким образом, чтобы все цифры "перемешались", нужно в кодовое слово включить хотя бы 1 цифру из последних в алфавите
Чтобы продемонстрировать это факт попробуем использовать кодовое слово 431:
1 2 3 4 5 6 7 8 9 0 - исходный алфавит
4 3 1 2 5 6 7 8 9 0 - шифрованный алфавит
Как мы видим, только первые 4 цифры стали шифроваться другими символами, а цифры с 5 до 0 остались неизменными - такой шифр будет очень слабым
О том, как эти методы шифрования обобщить на шифрование текста, в чем их достоинства и уязвимости, и какими способами можно взломать простые шифры читайте в будущих публикациях. Всем спасибо за прочтение