Обзор книги Applied Cryptography

Applied cryptographyКнига написана довольно давно, в 1996 году, Брюсом Шнайером (Bruce Schneier). Если вы не знаете кто это, то, по всей видимости, вы не интересовались криптографией ранее. Исходя из известности Шнайера, а также популярности данной книги, мне не пришлось долго искать что бы почитать по криптографии.

По традиции, начнём с языка книги: для такой сложной темы, как криптография, Шнайеру удаётся поддерживать баланс между строгостью изложения и его доступностью. Я бы сказал, что язык книги ближе к «развязно-техническому», чем к академическому, что, безусловно, является жирным плюсом книги, т.к. позволяет читать её людям, профессионально в криптографии нетренированными.

Сразу хочется сказать, по поводу актуальности книги: нужно понимать, что за ~20 лет многое изменилось, появилось много новых шифров, протоколов и прочих вещей основанных на криптографии. Разумеется всех этих новшеств в книге вы не найдёте, а новых изданий ждать не приходится, т.к. Шнайер не видит возможности описать современный зоопарк алгоритмов — слишком много материала. Поэтому, если вам интересен AES(или ещё что-то из относительно нового), то в книге вы его не найдёте. Но это не означает, что книга устарела и читать там не о чем — нет, это заблуждение. Да, нет новых алгоритмов, да, некоторые советы сейчас могут быть не актуальны, а некоторые с течением времени стали не очень верны(я читал критику данной книги, но не могу сказать, что она меня убедила, поэтому здесь её приводить не буду). Так если есть все эти недостатки, то почему её всё же стоит читать и, самое главное, кому стоить её читать?

На мой взгляд эта книга достойна прочтения за тот охват материала, который в ней предложен. Поэтому давайте разберём, что в книге есть, чтобы понять кому стоит её прочитать. Книгу, условно, можно разделить на 2 части: часть первая почти не содержит математики и довольно проста в освоении, вторая же часть содержит немало математики, и не подготовленному читателю(как мне например) будет довольно сложно вникнуть во все алгоритмы там предложенные. Но давайте начнём с части первой.

Книга начинается с введения и разбора понятий, которые будет в ней дальше использоваться. Так, читатель знакомится с понятием криптографии, стеганографии и с некоторыми примерами криптографических алгоритмов, которые использовались до появления современной криптографии. Также происходит знакомство с идеальной криптографической техникой — одноразовыми блокнотами. Далее, нас знакомят с основными элементами протоколов, речь о которых пойдёт в следующих главах. Рассматривается понятия односторонней хэш-функции, симметричной и ассиметричной криптографии, цифровой подписи, а также генераторов (псевдо)случайных величин. Тут всё кратенько, чтобы ввести читателя в курс дела.

После этого идут несколько глав, в которых приводятся различные протоколы: от безопасного обмена ключами, до цифровых выборов. Очень увлекательные главы, в которых каждый протокол расписан более-менее детально, но без деталей реализации, т.е. описывается теория, и какие примитивы можно использовать, чтобы заставить работать тот или иной протокол; приводятся плюсы и минусы различных подходов. Очень доступные главы для читателя практически любой подготовки.

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

Затем начинается вторая(по моему разделению) часть книги, и начинается она с главы, призванной напомнить читателю некоторые математические основы, без которых дальнейший разбор алгоритмов может стать пыткой. Затем происходит детальный разбор шифра DES, а также менее детальный разбор многих других блочных шифров, включая наш ГОСТ 28147-89. Здесь уже, как говорится, куда больше «мяса» — математики. Кроме описания самих шифров, приводятся, известные на тот момент времени, атаки на эти шифры, а также потенциальная стойкость к той или иной атаке, шифров, которые на тот момент ещё не были взломаны. После этого идёт глава, посвящённая совмещению нескольких шифров, чтобы получить ещё более стойкий результат, с объяснениями, что это не всегда работает так, как вы могли бы ожидать.

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

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

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

Исходя из всего вышенаписанного, я рекомендую данную книгу всем людям, которые связаны с безопасностью систем — она хорошо прочищает мозги и расширяет кругозор. Пусть вы не станете «крутым шифровальщиком», но и магией эта наука перестанет для вас быть. Ну и конечно, полезным бонусом будет понимание, когда и какой шифр лучше выбрать, а самое главное — почему.