Криптография (страница 5)

Страница 5

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

Только, только… суть любого механизма безопасности в том, чтобы те или иные вещи могли происходить только в определенных обстоятельствах. Механизм безопасности можно использовать, чтобы отмежевать себя от других или выделить один из множества элементов. Он дает нам особую возможность. Ключ и замок дают возможность открыть дверь и войти в свой дом. Разговор шепотом дает возможность исключить из него тех, кто находится за пределами слышимости. Защитные элементы купюры позволяют использовать ее в качестве законного платежного средства.

В материальном мире возможности безопасности обеспечиваются разными средствами. Самое очевидное – что-то, чем вы располагаете: ключ, бейдж, билет, рекомендательное письмо[48]. Или то, где вы находитесь – достаточно близко, чтобы расслышать личный разговор, или внутри концертного зала, где проходит мероприятие, на которое вы купили билет. Или что-то, что вам известно – голос друга или то, что для входа в пещеру с сокровищами нужно произнести: «Сим-сим, откройся»[49]. Или даже то, кем вы являетесь, как в случае со сканированием отпечатков пальцев или радужки глаза. И, конечно же, особая возможность может обеспечиваться сочетанием подходов. У вашего фармацевта могло быть что-то особенное (бейдж), он мог стоять в особенном месте (за прилавком аптеки), быть кем-то особенным (тем, кого вы раньше видели) или знать что-то особенное (фармакология и порядок назначения лекарств).

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

Должен признаться, что выше я выразился не совсем точно. В большинстве случаев взаимодействуют в киберпространстве компьютеры, а не люди; больше того, иногда люди вовсе не принимают активного участия в работе этих компьютеров. Ранее я говорил, что «знание» ключа позволяет отличить одного «человека» от другого; но было бы правильней сказать, что только сущность (человек или компьютер) с доступом к ключу может выполнять определенные действия в киберпространстве.

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

Биты и байты

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

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

Дальше – сложнее. Компьютер работает не в привычной нам десятичной системе счисления, а в двоичной, состоящей только из нолей и единиц. Звучит страшнее, чем на самом деле: это всего лишь еще один способ записи чисел, у каждого десятичного числа есть двоичное представление и наоборот. Например, десятичное число 17 записывается как 10001 («один ноль ноль ноль один», а не «десять тысяч один») в двоичной системе, а двоичное число 1101 – как 13 в десятичной. Каждую цифру двоичного кода называют битом, и эти биты формируют неделимые единицы числовой информации. Четыре бита составляют ниббл (от англ. nibble – покусывать), а два ниббла – байт (от англ. byte – кусать; и не говорите больше, что у компьютерщиков нет чувства юмора!).

Как правило, информация, которую мы хотим обработать на компьютере, состоит не только из чисел. Допустим, вы набрали на клавиатуре символы «K9!». Прежде чем сделать что-то с этими данными, компьютер должен представить их в двоичном виде. Клавиатурные символы преобразуются в биты по системе, известной как ASCII (American Standard Code for Information Interchange), которая описывает правила сопоставления кнопок клавиатуры и битов. В нашем примере символу «K» по ASCII соответствует байт 01001011, символу «9» – 00111001[50], а для «!» это будет 00100001. Таким образом компьютер, получивший код ASCII 01001011 00111001 00100001, знает, что для представления пользователю его следует перевести обратно в строку «K9!».

Полезно вспомнить и о размере данных. Поскольку они состоят из двоичных чисел, измерять их проще всего в количестве бит или байтах. Например, число 1011001100001111 имеет длину 16 бит или 2 байта. Для больших данных используются более грандиозные термины, такие как килобайты (1000 байт), мегабайты (1000 килобайт), гигабайты (1000 мегабайт) и терабайты (1000 гигабайт).

Криптографические ключи – это лишь особые элементы данных, поэтому компьютер их тоже должен представлять в виде двоичных чисел. А поскольку размер ключа – одна из важных мер безопасности, упоминания о длине ключей[51] в криптографических алгоритмах нередки. В современной криптографии ключ, как правило, имеет длину 128 бит.

Где мой ключ?

Если постоянно пользоваться криптографическими ключами, возникает вопрос: где они находятся?

Рассмотрим конкретный пример. Каждый раз, когда вы звоните кому-то по сотовому телефону, вы используете криптографию. Безопасность этого процесса опирается на способность сотового оператора отличить вас от остальных 5 миллиардов абонентов на планете[52]. Для этого оператор выдает вам секретный криптографический ключ – число, «известное» только ему и вам, при помощи которого вы сообщаете оператору о попытке сделать звонок. А теперь я объясню, почему это почти соответствует действительности.

Что это за особое секретное число, которое используется для звонка? Это явно не ваш телефонный номер – он не секретный. Криптографический ключ мобильного телефона вам наверняка неизвестен. И тому есть две веские причины, ни одна из которых не сводится к тому, что вам этот ключ знать нельзя.

Первая и, наверное, главная причина в том, что криптографические ключи представляют собой большие числа. Если вас попросят запомнить число от 0 до 10, вы легко с этим справитесь. Скорее всего, вы способны запомнить числа до 10 000 или даже до миллиона, так как числа такой длины часто используют в качестве PIN-кодов (хотя об этом чуть позже). Но в криптографических масштабах 1 миллион – это не большое число. Ключи не просто очень большие, их размер едва ли не за гранью нашего понимания.

В порядке упражнения попытайтесь представить себе количество звезд во вселенной, умноженное на 40 000[53]. Даже если вам удастся это вообразить, вы все равно будете оперировать значениями не того масштаба. Ключи примерно такого размера когда-то действительно использовались, но их давно уже не признают достаточно безопасными в большинстве современных сфер применения криптографии. Теперь мы пользуемся ключами в триллион раз большими. Если у вас от таких чисел начала кружиться голова, то вы уловили суть. Обычный человек не в состоянии запомнить современный криптографический ключ.

Сотового оператора не интересует, кто говорит по телефону и даже с какого аппарата прошел звонок. Оператора заботит, куда послать счет за услуги. Это вторая причина, почему вам неизвестен ключ, который используется в вашем сотовом. Таким образом, оператору нужен какой-то уникальный аспект вашей мобильной учетной записи, которым может быть невообразимо большое число. Именно его вы и получаете при регистрации номера. Это очень маленькая пластиковая карта с крошечным встроенным микрочипом, так называемым модулем идентификации абонента (англ. subscriber identity module – SIM), которая вставляется в ваш телефон. Основное назначение SIM-карты состоит в хранении криптографического ключа. Этот ключ позволяет отличить вашу учетную запись от любой другой на планете, поэтому, если вы одолжите кому-то свой телефон или вставите свою SIM-карту в другое устройство, счет придет именно вам.

Итак, криптографические ключи в большинстве своем являются огромными числами, пользуются которыми непосредственно компьютеры, а не люди. Поэтому большинство ключей находится либо на самих компьютерах, либо на устройствах, которые к ним подключаются. Например, ключи для защиты банковских транзакций хранятся на чипе, встроенном в вашу платежную карту. Ключи к вашей сети Wi-Fi – в вашем маршрутизаторе. Ключи для защиты данных, которыми вы обмениваетесь с интернет-магазином, зашиты в программный код вашего браузера. Криптографический ключ, позволяющий вашей машине открывать дверной замок, когда вы к ней приближаетесь, находятся в брелоке (и пусть вас не вводят в заблуждение слова о так называемой технологии входа «без ключа»: на самом деле ключ здесь двойной, одна его часть физическая, а другая криптографическая). Вы не знаете, какое число представляет любой из этих ключей, но у вас есть доступ к местам, где они хранятся.

Когда секретная информация не является ключом

Итак, криптографические ключи – это секретная информация, знание которой можно использовать для идентификации той или иной сущности в киберпространстве. Но что насчет таких секретных данных, как пароли и PIN-коды[54]? Можно ли их считать криптографическими ключами?

Не совсем, хотя иногда они таковыми оказываются. В каком-то смысле. Запутались? Неудивительно, различие между этими понятиями и правда тонкое.

Криптографические ключи действительно чем-то похожи на пароли и PIN-коды, но знак равенства между ними поставить нельзя. Пароли и PIN-коды, несомненно, являются секретными данными, необходимыми для обеспечения безопасности в киберпространстве. Но считать ли их криптографическими ключами, зависит от способа применения.

Пароли и PIN-коды в основном применяются для идентификации. Например, когда вы входите в систему, компьютер запрашивает пароль и проверяет его корректность. Если проверка прошла успешно, компьютер выводит на экран приветствие. С точки зрения криптографии в этом нет ничего особенного, так как в основе этого процесса нет шифрования[55]: вы всего лишь предоставляете пароль, чтобы компьютер мог его проверить.

[48] Следует признать, что рекомендательные письма в наши дни являются редкостью. Но мы все еще активно используем письменные рекомендации при собеседовании. Наша безопасность в материальном мире во многом основана на мнении других доверенных источников. Например, друг может представить нам человека, с которым мы раньше не были знакомы; в каком-то смысле это тоже устное «рекомендательное письмо».
[49] Фраза «Сезам откройся» взята из сказки об «Али-Бабе и сорока разбойниках», входящей в Книгу тысячи и одной ночи – собрание народных сказок, которое, возможно, уходит корнями в восьмой век.
[50] Заметьте, что в ASCII символ «9» является пятьдесят седьмым по счету, что может вызвать путаницу, так как он представлен в виде двоичного эквивалента числа 57, а не десятичного значения 9.
[51] Длину ключа иногда называют размером. Я буду считать эти термины синонимами.
[52] Количество абонентов мобильной связи в мире насчитывает более 5 миллиардов: «The Mobile Economy 2019», Ассоциация GSM, 2019 год, https://www.gsma.com/mobileeconomy.
[53] Этот пример основан на предположении о том, что в нашей вселенной существует около 1022 звезд. Подсчет звезд – это не точная наука, так как мы можем только догадываться об их количестве по нашим наблюдениям с помощью существующих телескопов. По последним оценкам этот показатель приближается к 1024, и многие специалисты подозревают, что он тоже может быть заниженным. Например, см. статью Элизабет Хауэлл, «How Many Stars Are in the Universe?» от 18 мая 2017 года в разделе Science & Astronomy на сайте https://www.space.com/26078-how-many-stars-are-there.html. Подсчет криптографических ключей является куда более точным процессом!
[54] Термин персональный идентификационный номер (англ. personal identification number или PIN) обычно используют для обозначения коротких паролей, состоящих из цифр. Он уходит своими корнями в конец 1960-х, когда появились первые банкоматы. В нашем контексте PIN-коды и пароли представляют собой одно и то же – строку секретных символов.
[55] На самом деле в этом процессе нередко участвует криптография, поскольку компьютеры в большинстве своем хранят не копии ваших паролей, а значения, вычисленные на их основе с помощью криптографической функции особого типа.