Сделай это безопасным! Alek Silverstone Спецвыпуск: Хакер, номер #058, стр. 058-072-1 (aleksi@pisem.net) Создание и исследование криптографических протоколов Творчество… Созидание… Во все времена человек стремился создать что-нибудь свое, удивительное и непонятное. Программисты никогда не были исключением, но им приходится заботиться еще и о пользе продуктов, удобстве и скорости работы с ними… Какая уж тут безопасность! И все-таки основной целью труда программиста должна быть именно безопасность всегда и во всем. Самое главное – обеспечить комплексный характер защиты. Прочность цепи определяется прочностью ее самого слабого звена. В этой статье я расскажу лишь об одном аспекте безопасности – защищенных криптографических протоколах. Начнем с азов, то есть с моделей криптосистем. Общие модели Итак, у нас есть базовая модель (рис. 1). Что можно сказать о ней? Несмотря на призывы защищать все соединения, именно эта модель используется шире всего :( по самым разным причинам: иногда невозможно реализовать на практике любую другую модель, а чаще из-за лени программистов. Рисунок, думаю, все разъяснил: есть два субъекта, обменивающихся информацией, и перехватчик со снифером. В более общем случае последний сможет также изменять сообщения по своему желанию, навязывать свои сообщения другим и изымать сообщения из канала обмена – это называется активным перехватом. Если взять такую модель и предположить, что противник с легкостью реализует активный перехват, мы получим основу для всех остальных моделей. И ее первая модификация – это одноключевая (симметричная) криптосистема (рис. 2). Эта модель – вторая по популярности в реализации. Перед передачей сообщения в открытый канал отправитель преобразовывает его, то есть зашифровывает секретным ключом. А на другом конце, для получения исходной информации, выполняется обратный процесс – дешифрование на том же самом ключе. Сам ключ передается по секретному каналу, благодаря которому передаваемая информация гарантированно становится аутентичной (целостной и подлинной) и недоступной для противника. Криптография "знает" целых семь видов атак на такую модель (от атаки по шифротексту и до атаки на основе выборочных текстов, при которой противник может зашифровать и дешифровать произвольное количество текстов, выбирая следующие на основе предыдущих результатов), но их классификация довольно скучна, поэтом я опустил ее. Но вот ты посмотрел на рисунок, и тут же у тебя родился вопрос: "А что есть защищенный канал?" В идеале ключ должен быть отправлен получателю на носителе, носитель в чемоданчике, чемоданчик у охраны, охрана в бронированной машине, сразу после доставки и раскрытия носитель должен быть уничтожен. При таком раскладе противнику действительно легче взломать компьютер, а не сейф на колесах. С другой стороны, если есть возможность передавать ключ ПО ТАКОМУ секретному каналу, то почему бы не передавать по нему любую информацию ;)? Кроме того, есть еще одна проблема – устаревание ключей. В идеале симметричный ключ должен использоваться только один раз: знание нескольких пар открытый текст/шифротекст может помочь криптоаналитику (хакеру со снифером уже ничто не поможет :)). Так что же получается? Каждый раз машину отправлять?! Эти (и не только) проблемы решило появление двухключевой (асимметричной) модели (рис. 3). |