Давайте рассмотрим симметричное шифрование. Это то, как вы конвертируете некоторые данные во что-то нечитаемое, за исключением тех, у кого есть секретные знания, которые позволяют полностью изменить операцию. Это «симметрично», потому что знания, необходимые для шифрования, такие же, как знания, необходимые для расшифровки.
Исторически сложилось так, что «секретные знания» заключались в описании шагов, которые необходимо выполнить для шифрования данных. В какой-то момент стало интересно разделить «метод шифрования» на две части, одна из которых - алгоритм (общее описание шагов метода), а вторая - ключ ( точные параметры, используемые в этом случае). На компьютере алгоритм становится программой, которую запускает машина; ключ представляет собой числовой параметр, последовательность нулей и единиц. Компьютеры усугубляют необходимость такого разделения: компьютерную программу очень сложно сохранить в тайне. Программа громоздка, она записана на жесткий диск ... с другой стороны, ключ достаточно короткий, чтобы поместиться в человеческом мозге, чтобы его можно было набирать при использовании, чтобы хранить в устройстве, которое ничтожно, как дешевая смарт-карта и т. д.
В некотором смысле ключ концентрирует секрет. Все, что является секретным в шифровании, заключается в этом ключе.
В вашем примере XOR метод следующий: «мы XOR данные с ключом», а ключ - это фактическая последовательность нулей и единиц, с которой XOR. Известно, что метод шифрования по XOR чрезвычайно трудно использовать должным образом (в основном, ключ должен быть таким же, как и данные для шифрования, что очень непрактично; однако использование более короткого ключа означает повторное использование некоторые части ключа, что открывает множество смертельных слабостей). Обычные симметричные системы шифрования намного сложнее и стремятся обеспечить "ценность ваших денег" с помощью ключа.
Сколько стоит ключ? Что ж, поскольку ключ является единственной секретной частью, все, что нужно сделать атакующему, - это угадать ключ. Самая основная форма угадывания - исчерпывающий поиск : атакующий просто пробует все возможные ключи. Количество возможных ключей растет довольно быстро с длиной ключа. Например, 10-битный ключ имеет 1024 возможных ключа. С 20-битным ключом есть 1048576 возможных ключей. Каждый дополнительный бит удваивает количество возможных ключей.
Алгоритм считается «устойчивым», если наилучшая известная атака - это исчерпывающий поиск. В этом смысле надежный алгоритм - это алгоритм, который не предлагает лучшего пути атаки, чем жестокий исчерпывающий поиск, который всегда «выполним», но может быть чрезмерно дорогим. Если алгоритм устойчивый и , используемый ключ достаточно велик, чтобы помешать исчерпывающему поиску, тогда шифрование secure . «Достаточно большой» на практике означает «сто бит или более». Самый большой ключ, который был атакован исчерпывающим поиском, - это 64-битный ключ. Количество комбинаций было огромным (18446744073709551616), которое можно было достичь с помощью существующих технологий (на это потребовалось несколько лет и тысячи компьютеров). Непрерывный прогресс в скорости компьютера делает исчерпывающий поиск лучше и лучше, но не так быстро, как можно было представить. По сути, исчерпывающий поиск увеличивается на 1 бит каждые 12-18 месяцев (это известно как «закон Мура»). Существует много веских причин, по которым закон Мура не может быть соблюден после 2020 года (это, собственно, и предсказывал сам Гордон Мур), и в этот момент вычислительная мощность по данной цене как-то застаивается. Тогда 100-битный ключ должен оставаться в безопасности (это слишком много комбинаций для того, что компьютер сможет сделать через 10 лет). Обычные алгоритмы шифрования используют 128-битный ключ, потому что «128» выглядит хорошо, когда записано в двоичном формате.
Существует также асимметричное шифрование и цифровые подписи. Основной принцип остается тем же: ключ - это та часть, которая является секретной, в отличие от метода (программы), который известен всем. Асимметричное шифрование и цифровые подписи пытаются делать сложные вещи, в которых, например, тот, кто знает, как шифровать , не имеет достаточно информации, чтобы знать, как расшифровать. Это требует некоторых сложных математических структур. Ключи - это математические объекты, которым требуется больше битов при кодировании. Здесь снова число возможных ключей увеличивается с размером ключа, но не так быстро, потому что очень небольшая последовательность битов будет иметь требуемую математическую структуру. Кроме того, та же самая структура учитывает более быстрые пути атаки, а затем подразумевает использование более крупных ключей для достижения безопасности. Вот почему мы слышим о таких вещах, как «1024-битный ключ RSA». Ключ RSA состоит из нескольких целых чисел, наиболее важным из которых является то, что его нецелесообразно превращать в произведение простого целого числа. 1024-битное целое число (целое число, которое при записи в двоичном коде состоит из 1024 нулей и единиц - это будет чуть более 300 цифр в десятичной дроби) кажется достаточно большим, чтобы помешать факторизации (текущая запись для 768-битной целое число).