Криптографические приключения: таинственные шифры - Страница 12


К оглавлению

12

0 + 1 = 1

1 + 1 = 10


— Почему это 10?

— Смотри. У нас есть только две цифры. Цифра 1 — последняя в ряду (как цифра 9), поэтому, если прибавить к ней единицу, произойдет перенос разряда, так же как если к девяти прибавить один. Но можно просто запомнить эти правила и не задумываться.

Отец блаженно улыбался, слушая моё объяснение. Похоже, этого он от меня и ожидал. Ободрённый, я спросил Катю:

— Теперь ты можешь сказать, как записать «3»?

Катя подумала и сказала, что «3» надо записывать как «11». Я подтвердил, что это абсолютно правильно, и сразу же спросил, как записывать «4». Но тут уже возникли сложности, и пришлось объяснять, как происходит перенос разряда и почему в итоге получается «100». После этого мы записали двоичные числа до 31 (так попросил папа).

Тем временем папа рассказал нам, как из двоичной записи числа перейти к десятичной. Оказалось, что каждому разряду соответствует степень двойки: 1 (20), 2 (21), 4 (22), 8 (23), 16 (24), 32 (25), 64 (26), 128 (27), 256 (28), 512 (29), 1024 (210) и т. д. Нужно взять те степени, которым в записи двоичного числа соответствуют единицы, а потом сложить их. Например, двоичному числу 10111 соответствует десятичное 16 + 4 + 2 + 1 = 23.

Затем папа сказал, что в математике числа «0» и «1» называются битами и что любую информацию можно представить при помощи битов. После этого мы наконец перешли к разработке системы кодирования.

Папа составил таблицу из трёх столбцов. В первый он выписал все буквы русского алфавита, пропустив букву Ё. Во втором записал их номера (от 0 до 31). А в третий столбец он записал те же номера в двоичном представлении, но каждый номер состоял из пяти битов — от 00000 до 11111. Получилось вот что:

— Теперь договоримся, как передавать биты 0 и 1. Тут можно использовать и метод Морзе. Пусть «0» будет коротким сигналом, а «1» — длинным, раза в три длиннее. При этом между каждым сигналом надо делать небольшую паузу, а между буквами, то есть между каждыми пятью сигналами — паузу подлиннее.

Отец взял мой передатчик и попросил записывать за ним. Мы взяли карандаши, а папа стал выбивать последовательность сигналов: длинный, короткий, короткий, длинный, короткий… Я записывал за ним: 10010 00101 01011 00101 00011 10000 00000 10100. Получилось слово «ТЕЛЕГРАФ».

Мы ещё немного потренировались — я выстукивал слова, Катя записывала, потом наоборот. Вроде бы всё понятно и довольно просто. Потом папа сказал:

— Ну вот, я хотел начать с протокола, а потом перейти к кодированию, а получилось наоборот. Давайте же изучим, что такое протокол. Скажи, Екатерина, как ты поймёшь, что надо начинать записывать передачу Кирилла?

— Я услышу звонок и увижу мигающую лампочку.

— Но ведь ты наверняка в этот момент будешь что-то делать, а карандаша и бумаги рядом не окажется. А может быть, и самой тебя поблизости не будет. Как быть?

Мы задумались. А ведь действительно. Чтобы успешно передать сообщение, нам обоим надо быть около своих устройств, но как это сделать, если мы друг друга не видим? Но отец продолжил:

— Нам на помощь придёт протокол. Протокол — это договорённость о том, как вести передачу информации. Метод кодирования — только часть протокола. Также протокол устанавливает правила начала и окончания передачи. Ещё он может устанавливать правила смены передающей стороны и даже методы восстановления информации, если передача происходит с потерями и ошибками. Но мы пока изучим только самые простые вещи.

Мы с Катей переглянулись, а отец тем временем говорил:

— Мы введём несколько служебных символов: «Запрос на начало передачи», «Ответ о готовности приёма» и «Окончание передачи». Подумайте и ответьте мне, для чего нужны эти символы.

Я сказал:

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

Отец согласился, а потом обратился к Кате:

— Екатерина, ты можешь придумать, как будут выглядеть эти три служебных символа?

— Думаю, что они должны состоять из последовательности сигналов, которые непохожи на наши биты «0» и «1».

— Почему?

— Так будет проще понять, что это служебная информация, а не текст телеграммы.

— Здорово, молодец! Это, в общем, необязательно: в компьютерных системах используются только биты и ничего другого. Но мы действительно можем позволить себе применить другие символы, чтобы проще отличать. Поэтому предлагаю такую схему…

И папа записал на листке рядом с таблицей букв три строки.

Для запроса на начало передачи — три длинных звонка.

Для указания готовности к приёму — один длинный звонок.

Для окончания передачи — два длинных звонка.

Длительность каждого из этих звонков была в два раза больше, чем длительность бита «1».

Затем он сказал:

— Определим алгоритм. Пусть Кирилл хочет передать Екатерине сообщение. Он посылает служебный символ «запрос на передачу», после чего ждёт ответа. Если ответ не пришёл в течение минуты, то Кирилл может послать запрос ещё раз, а потом ещё, пока не получит ответ, либо заняться своими делами и снова послать запрос через некоторое время. Если же он получает сигнал готовности к приёму, это означает, что Екатерина готова записывать. После этого Кирилл передаёт своё предварительно закодированное сообщение, а после него ставит символ окончания передачи. Далее Екатерина может выбрать из двух вариантов. Она может закончить сессию приёма-передачи, послав в ответ символ окончания. Это значит, что у Екатерины нет ответа, и передача закончена. Или она может передать свой закодированный ответ и закончить его символом окончания передачи. И тогда уже Кирилл получает возможность выбирать, заканчивать ли передачу. Если да, то он передаёт символ окончания. Если нет, то пишет ответ и передаёт слово Екатерине. И так далее, до конца.

12