Создание программируемых электронных компьютеров в послевоенные годы подняло криптографию на недосягаемую ранее высоту. Она стала полноценной наукой с мощным математическим аппаратом. Практические результаты развития криптографии на сегодня выглядят так:
● Большинство используемых сейчас систем криптографии полагаются на открытые и хорошо изученные алгоритмы. Способы шифрования настолько совершенны, что расшифровать сообщение, не зная ключа, невозможно, даже если взломщик знает о системе шифрования всё. Вопреки интуитивному представлению, использование нестандартных, секретных алгоритмов не повышает, а понижает надёжность шифра. Над исследованием уязвимостей распространённых алгоритмов работают тысячи учёных по всему миру. Вероятность того, что злоумышленник обнаружит «дыру» раньше любого из них, ничтожно мала.
● Доступные рядовым гражданам технологии шифрования сейчас практически не уступают военным и правительственным разработкам. Любой мало-мальски технически грамотный человек при желании способен зашифровать свою информацию так, что ни одна спецслужба мира не сможет её расшифровать за разумное время. Из-за этого во многих странах существуют законодательные ограничения на использование криптографии.
● Кроме собственно шифрования, криптография предоставляет методы подтверждения подлинности и целостности информации. Они так же надежны, как и методы шифрования — цифровая подпись или сертификат удостоверяют аутентичность любого сообщения или документа гораздо лучше, чем собственноручная подпись, печать или голограмма.
● Сейчас широко используются криптосистемы с открытым ключом. Они дают возможность обмениваться зашифрованными сообщениями и подтверждать их подлинность без предварительного обмена ключами по защищённому каналу. Мощность современных компьютеров такова, что возможно осуществлять шифрование и расшифровку «на лету», совершенно прозрачно для пользователя.
● Сегодня взлом криптографических систем на практике осуществим только косвенными методами — с помощью подкупа или насилия в отношении лиц, обладающих ключом, с помощью шпионажа или прослушивания, с помощью незаметной модификации оборудования или программ, используемых для шифрования.
Шифрование с открытым ключом
Как паспорт подтверждает личность его владельца в реальном мире, так инфраструктура открытого ключа (PKI, public key infrastructure) позволяет подтвердить личность в мире компьютерных сетей.
PKI гарантирует, что всякий, кто выдает себя за определенную персону, действительно ею является, что крайне важно при проведении ответственных трансакций, таких как размещение заказов или пересылка денег.
Суть PKI заключается в использовании очень длинных целых чисел, называемых ключами. Используются два ключа: частный, доступ к которому имеете только вы, и открытый, с которым может работать кто угодно. Оба ключа используются вместе, и сообщение, зашифрованное с помощью частного ключа, может быть расшифровано только с помощью открытого ключа и наоборот. Точно так же как вы подтверждаете свою личность с помощью выполненной от руки подписи, цифровая подпись подтверждает вашу личность в сети. Документ, который предполагается зашифровать, «пропускается» через сложный математический алгоритм, который на выходе выдает одно большое число, называемое хеш-кодом. Если в сообщение внести даже минимальные изменения, например, переставить запятую, то хеш-код полностью изменится.
Чтобы добавить цифровую подпись к документу, хеш-код, созданный на основе его содержимого, шифруется с помощью частного ключа пользователя (назовем его Боб). Другой человек (Алиса) может проверить подлинность документа, расшифровав хеш-код с помощью открытого ключа Боба и сравнив его с хеш-кодом, сгенерированным из полученных данных.
Если хеш-коды совпадают, данные не были изменены третьей стороной — создать такую подпись возможно, только обладая частным ключом Боба. Однако злоумышленник мог подменить открытый ключ Боба в тот момент, когда Алиса впервые получила его.
Как выяснить, корректный ли у Алисы ключ для проверки подписи? Для этого используется система корневых сертификатов доверия. Открытый ключ, созданный Бобом, подписывает своим собственным частным корневым ключом уполномоченный по выдаче сертификатов, проверив его личность. Публичные ключи таких уполномоченных широко известны, например, «зашиты» внутри всех популярных интернет-браузеров, поэтому подменить их незаметно практически невозможно. Открытый ключ Боба вместе с его реквизитами или анкетными данными, подписанный уполномоченным по выдаче сертификатов — это его личный цифровой «паспорт», или сертификат.
Давайте посмотрим, как это все работает на примере простой трансакции. Боб хочет послать Алисе конфиденциальное письмо по электронной почте. Для шифрования своего сообщения он будет использовать открытый ключ Алисы, хранящийся в ее сертификате, благодаря наличию которого он уверен, что этот ключ принадлежит именно Алисе. Боб подпишет сообщение своим закрытым ключом. Когда Алиса получит сообщение, она с помощью своего частного ключа это сообщение расшифрует. Поскольку частный ключ Алисы есть только у нее, значит, только она сама сможет раскрыть это сообщение. Узнав открытый ключ Боба из его сертификата, она сможет проверить подлинность подписи и убедиться, что это сообщение, во-первых, пришло именно от Боба, а во-вторых, не было изменено по пути.
По материалам: http://www.osp.ru/cw/1999/22/35858/
Итак, современная криптография достаточно надёжна для любых практических применений. Её широко используют банки, спецслужбы, корпорации и правительства. Она легко доступна — «гражданские» алгоритмы шифрования не уступают военным. Использование таких методов как пытки или слежка в отношении обычных людей весьма маловероятно, а надёжную защиту от модификации ПО даёт открытая разработка. О ней и пойдёт речь дальше.
Open Source
Как и в случае с алгоритмами шифрования, интуиция подсказывает, что в ПО с открытым исходным кодом легче внести злонамеренные модификации, но это не так. Открытая разработка происходит за «прозрачной стеной». Как и в мясном цеху супермаркета, видеть всё, что происходит внутри, может любой, но вход разрешён только ограниченному кругу людей. Сейчас все открытые проекты используют так называемые системы контроля версий[92], которые отслеживают и сохраняют любые изменения в коде проекта. Любой желающий может просмотреть эту историю, подобно истории правок статьи в Википедии. За популярными проектами следят тысячи программистов по всему миру. Внести незаметные изменения в код, минуя систему контроля версий, просто невозможно. Это гарантирует криптография. Права на такие изменения есть только у небольшого числа членов команды проекта. У каждого из них есть ключ, которым он подписывают изменения. У каждой правки есть конкретный автор, и всегда видно, кто отвечает за её корректность[92]. Если же в разработке хочет поучаствовать человек со стороны, он создаёт копию проекта, вносит изменения в неё и отправляет их на рассмотрение команды.
При закрытой разработке единственной гарантией служит репутация производителя. Никто не может проверить, что там внутри на самом деле. И даже если репутация безупречна, фирму всегда может прижать правительство, заставив внести, например, ограничения на длину ключа при шифровании, или оставив другие лазейки для «Большого Брата».
К сожалению, для «железа» такая открытость технически невозможна. Но, в отличие от софта, при серийном производстве закладывать «дыры» скажем, в микропроцессор — абсолютно самоубийственная политика для производителя. Если в случае ПО можно сказать: «Ой! Мы нечаянно!» и тут же выпустить заплатку, которая закрывает дыру, то железо отправится прямиком на свалку, причинив огромные убытки. Единственная возможность снабдить физическое устройство «жучками» ещё на заводе — сделать это официально, прикрывшись законодательным предписанием или легендой о «безопасности» или «борьбе с пиратством». И бороться с этим техническими методами невозможно. Массовое проникновение на рынок таких устройств, например под предлогом «борьбы с терроризмом (пиратством, детской порнографией и т.д.)» — одна из серьёзнейших угроз для сети.