— Можете объяснить, что такое коды, на примере смартфона?
— Да, вот только надо различать коды, исправляющие ошибки, и коды криптографии. Потому что обычно код у людей ассоциируется с криптографией. Так вот, когда вы включаете режим LTE на смартфоне, то работает код, исправляющий ошибки. Допустим, у вас ненадежная передача ваших битов — то есть плохая связь, и вы хотите это исправить. Как? Если вы говорите по телефону и плохо слышно, то вы начинаете повторять слова. Если не получается, то произносите их по буквам. Это и есть простейшее кодирование. Мы нашу информацию «запихиваем» в гораздо более длинную последовательность, получаются кодовые слова, которые расположены друг от друга достаточно далеко, если мерить «далеко» количеством различающихся позиций. Это и позволяет нам правильно восстанавливать информацию в случае ошибок.
— Верно ли, что когда мы передаем информацию, то используем некие физические явления, которые могут быть как-то изменены?
— На самом деле вот что происходит. У вас есть какое-то физическое средство, которое передает информацию. Например, модем. И он передает вам нолики и единички. Например, в виде плюс-минус единичек. Но в канале есть шум. И в один прекрасный момент к вам пришла не единичка и не минус единичка, а, скажем, 0,2. «Ну, если 0,2, то, наверное, это была плюс единица, а не минус единица», — подумали вы. Но если пришло 0,01, то вы уже думаете: «Может, мне вообще стереть этот символ?» Но даже когда пришло 0,2, выбор единички может быть ошибкой. Теперь математика говорит нам: «Передавай не просто информацию, а припиши к ней еще избыточные нолики и единички, и тогда будет тебе счастье. В том смысле, что у тебя будут появляться ошибки, но ты сможешь их исправлять». Первым это сделал Клод Шеннон — создатель теории информации, наверное, последний универсальный гений.
— То есть у нас есть поток нулей и единиц… Что с ним происходит?
— Возьмем самый известный код — это код Ричарда Хэмминга. Мы «режем» поток из нулей и единиц на кусочки по четыре бита подряд. К каждым четырем битам мы приписываем три бита согласно определенным правилам (правилам кодирования), и вот этот новый блок из 7 бит посылаем по каналу передачи информации. И опять делаем то же самое, то есть к четырем информационным битам добавляем три проверочных и все это посылаем по каналу. Конечно, мы уменьшили скорость передачи информации по каналу в 1,75 раза, но зато если в канале происходит одна ошибка в блоке длины 7, то мы ее исправляем! На самом деле все это очень похоже на популярную и простую задачу: «Вам загадали число от единицы до миллиона, и вы хотите узнать — какое, задавая вопросы, на которые получаете ответ „да“ или „нет“. Сколько вам нужно вопросов?» Правильно, 20. Вы берете миллион, делите пополам и спрашиваете: «Это в первых пятистах тысячах или во вторых?» В зависимости от того, что вам сказали, вы выбирает половину и делите ее пополам. Вы спросили, вам ответили, вы подумали и тогда задали следующий вопрос. И это знали всегда. Хэмминг же увидел, что на самом деле загаданное число можно узнать, задавая вопросы за один раз. Не дожидаясь ответа. Вы ничего не теряете. Все равно получается 20 вопросов. Кстати, одна из моих последних работ, которая мне нравится, касается задачи Станислава Улама о лжеце. Улам сформулировал очень простой вопрос: «Мы знаем, что если загадать число от одного до миллиона, то нужно 20 вопросов, чтобы угадать это число стопроцентно, без ошибок. А что если тот, кто нам дает ответ „да“ или „нет“, может один раз соврать?» Ответ забавный: вместо 20 вопросов понадобится 25. Дальше возникает мысль: «Ну хорошо, а что будет происходить дальше? Если я загадаю число до миллиарда или до триллиона?» Чтобы его угадать, нужно N вопросов, если оно записывается N битами. А теперь, если происходит ошибка, сколько нужно добавить? Ответ удивительный. Нам кажется, что это будет весомая добавка, но оказывается, что за одного лжеца приходится немного платить. К N вопросам нужно добавить еще двоичный логарифм N. Более того, если вы знаете, что соврать он может пять раз, то пяти логарифмов N хватит.
— Существует ли граница между «чистой» и прикладной математикой?
— Андрей Николаевич Колмогоров говорил, что не делит математику на чистую и прикладную. Математика либо есть, либо ее нет. Мое субъективное мнение простое: математика без приложения быстро выхолащивается. Она начинает жить своими собственными интересами, и остаются только внутренние мотивы самосовершенствования. Это обедняет науку. Для меня нет деления на чистую и прикладную математику. Есть математика, которая уже нашла приложения, и математика, которую это еще ждет.
— Вы считаете, что любая математическая теория может быть применима на практике?
— Я так не считаю. Но любую математическую теорию я на спор готов притянуть к какой-нибудь прикладной задаче. Грубо говоря, если мне предложат завлекательный приз, я готов потратить время и даже статью про это написать, а лучше книжку.
— Криптографией вы тоже занимаетесь?
— Да, но только любительски. Никогда не занимался ею профессионально и не хотел заниматься.
— Криптографию все ассоциируют в основном с безопасностью.
— Сегодняшняя криптография — это гораздо больше, чем просто спрятать смысл того, что вы передаете.
— А ведь гарантия безопасности основывается на том, что мы не можем, условно говоря, за какое-то рациональное время подобрать ключ?
— Не совсем так. Смотрите, в начале 70-х возникла так называемая криптография с открытым ключом. Потому что та криптография, которую описал основатель теории информации Клод Шеннон, была с секретным ключом: у вас есть ключ, у другого человека тот же ключ, и вы оба с этим ключом работаете. Открытая криптография возникла, потому что сказали: «У нас теперь есть тысячи пользователей, и они друг с другом хотят общаться. Что же, нам нужны миллионы ключей? И нам нужно ключи как-то между ними распределять? Нельзя ли сделать как-нибудь так, чтобы каждый участник свой секрет хранил при себе, а некий „слепок“ этого секрета клал в общий файл?» И действительно придумали, что это как-то работает. Но все системы с так называемыми открытыми ключами рано или поздно ломаются.
— А ведь коммуникация между людьми — это тоже своего рода некие сигналы?
— Первые мои статьи были про коды, исправляющие всего одну ошибку. В то время папа подарил мне книгу, написав, что, видимо, ошибки в жизни не так просто исправлять, как в сигналах. Увы, в человеческих коммуникациях теория кодирования не помогает.