11/12/2007 10:00
Защита электронной почты
Многие мои корреспонденты удивляются, получив вместе с письмом по электронной почте некую добавку странного вида. Другие не понимают, что за карандашик рисует при отображении моего письма их Outlook Express. Поэтому я решил описать некоторые средства защиты электронной корреспонденции, давно уже реализованные в популярных почтовых программах (клиентах).
Текст ниже взят из моих лекций по информационной безопасности, которые я некогда читал юристам Удмуртского государственного университета.
Текст ниже взят из моих лекций по информационной безопасности, которые я некогда читал юристам Удмуртского государственного университета.
При передаче информации любого вида иногда требуется скрыть ее от третьих лиц. Издавна это делается двумя способами. В первом скрывается сам факт наличия информации. Классический пример - передача напильника в батоне хлеба. При втором способе факт передачи не скрывается, но сама информация преобразуется таким образом, чтобы восстановить изначальный вид было невозможно без дополнительных сведений - ключа. Ключ известен только отправителю и получателю. Первый способ называется стеганографией, второй - криптографией. В электронный век криптографические методы стали доминирующими.
Однако, сокрытием сообщения дело не ограничивается. Часто важнее не секретность, а неизменность и аутентичность сообщения. Получатель хочет быть уверенным в том, что письмо не изменялось при передаче, а его автором является именно то лицо, которое указано в качестве такового. Ситуация, когда получатель не проверяет неизменность и аутентичность письма описана у А.С. Пушкина: "И в суму его пустую суют грамоту другую". К каким плачевным последствиям это привело, вы знаете. Такую задача так же можно решить криптографическими методами.
Обсудим подробно обе задачи. Сначала о шифровании. Исторически первыми были изобретены симметричные методы. Отправитель и получатель знали одно и то же кодовое слово - ключ. Отправитель с помощью ключа по определенным правилам преобразовывал свое сообщение, а получатель с тем же ключем выполнял обратное преобразование. Алгоритм преобразования выбирался так, чтобы не зная ключ было бы невозможно (точнее, очень трудно) восстановить по шифртексту исходный текст. Главная проблема симметричного метода - передать ключ. Отправитель и получатель должны были хотя бы раз встретиться лично, чтобы получить общий ключ. Развитие математики привело к рождению новых методов криптографии - асиметричных.
В асиметричных методах для зашифрования и расшифрования используются разные ключи. Один из них является секретным и хранится только у его владельца. Второй - публичный - передается по открытым каналам всем потенциальным корреспондентам. Для зашифрования письма отправитель использует открытый ключ получателя. Для расшифрования получатель применяет свой секретный ключ. Разумеется, ключи связаны друг с другом некой зависимостью. Но для отыскания секретного ключа по открытому необходимо решить трудную математическую задачу. Среди таких задач: разложение большого числа на простые множители, дискретное логарифмирование и (какой кошмар!) дискретное логарифмирование на эллиптических кривых. Асимметричные методы имеют два больших недостатка. Во-первых, они очень медленные. Во-вторых, открытый ключ можно подменить. Первая проблема решается так. Отправитель сообщения производит зашифрования каким-либо заранее оговоренным симметричным методом. Для этого вырабатывается случайный одноразовый ключ, называется поэтому сеансовым ключом. Ключ обычно имеет гораздо меньший размер, чем само сообщение. На открытом ключе асимметричным методом шифруется уже не все сообщение, а только сеансовый ключ. В зашифрованном виде он присоединяется к зашифрованному письму и передается по каналам связи получателю. Тот использует свой открытый ключ для расшифрования сеансового ключа, а последний - для расшифрования сообщения. О втором недостатке асимметричных методов скажу чуть позже.
Итак, мы знаем в общих чертах как зашифровать и расшифровать письмо. Но как защитить его от подделки? Можно, например, посчитать некоторую функцию от текста сообщения и секретного ключа, известного только составителю письма. Функцию не простую, а такую, чтобы можно было проверить правильность ее расчета без самого расчета. Пусть T - сообщение, S - секретный ключ отправителя, P - его публичный ключ, F - функция подписания. Тогда отправитель вычисляет некоторое число
s = F(T,S).
Число s называется электронной цифровой подписью (ЭЦП). Пусть существует другая функция - G. связанная с F. Ее множество значений - {да, нет}. Получатель письма вычисляет
r = G(T,s,P).
Если r=да, то ЭЦП верна, в противном случае - ложна. Так как G зависит от трех аргументов T, s и P, то неверная ЭЦП говорит либо о том, что сообщение T изменилось при передача, либо о том, что подпись s не от этого сообщения, либо открытый ключ P не принадлежит отправителю. Возможны любые комбинации этих вариантов. В любом случае неверная ЭЦП - повод отвергнуть сообщение как недостоверное.
Обратите внимание, чтобы зашифровать сообщение отправитель пользуется открытым ключом получателя. Для подписания письма он применяет свой секретный ключ. Наоборот, получатель проверяет ЭЦП открытым ключом отправителя, а расшифровывает своим секретным ключом.
Теперь обсудим главную проблему криптографии с открытым ключом. Предположим, вы намерены послать распоряжение в банк на перевод денег с вашего счета на счет предприятия X. Для начала вы создаете себе открытый и секретный ключи. Секретный прячете в надежном месте, а открытый отправляете по электронной почте в банк. Пусть я - ваш интернет провайдер и очень люблю читать ваши письма, ну просто так, чтобы узнать, что в мире делается. Обнаружив в письме секретный ключ, я торможу отправку и делаю свои ключи. Свой открытый ключ отправляю в банк, подписавшись вашим именем. Таким образом, банк думает, что владеет вашим открытым ключом. Затем вы направляете в банк распоряжение и подписываете его ЭЦП. Я это распоряжение перехватываю и исправляю в свою пользу. Оставить вашу ЭЦП я не могу, тогда функция G вернет отрицательный результат. Подписать за вас тоже не могу за неимением вашего секретного ключа. Но мне это и не нужно! Я подписываю письмо своим ключом. Банк ничего не заподозрит, поскольку мой ключ считаем вашим. Эта классическая атака носит название "человек в середине". В данном примере такой человек - я. Как защититься? Можно передать свой открытый ключ в банк лично. А как быть, если отправитель и получатель на разных континентах? Решение было найдено давно.
Предположим, что есть авторитетная организация CA (это не Советская Армия, это Certificate Authority). У нее есть филиалы во многих странах. Вы знаете о безупречной репутации CA и доверяете ей. Так же поступает и банк. Поэтому, если CA скажет банку, что данный ключ принадлежит вам, банк поверит. Как CA сообщит об этом банку? Пошлет электронное письмо. Как банк узнает, что письмо подлинное? Оно будет подписано ЭЦП CA. Как банк проверит ЭЦП CA? У него есть открытый ключ CA. Как банк может узнать, что этот открытый ключ принадлежит именно CA, а не злоумышленнику? Его подлинность удостоверит другая организация - CA2. А подлинность ключа CA2? Конечно CA3! Но ведь когда-нибудь это кончится? Конечно! Кончится тогда, когда очередной CAn передаст свой ключ в банк лично. В реальности цепочки доверия не бывают длинными: обычно не более трех звеньев.
Вся деятельность CA сводится к тому, чтобы проверить вашу личность и связать ваше имя с вашим же открытым ключом. Документ, содержащий ваше имя, ключ и подпись CA назвается сертификатом открытого ключа. Так что, деятельность CA состоит в выдаче таких сертификатов. Если у получателя письма нет вашего открытого ключа для проверки ЭЦП, вы должны послать ему не просто сам ключ, но сертификат ключа, иначе подлинность ключа вызовет сомнения.
Рассмотрим теперь работу описанных механизмов в столь знакомой нам электронной почте. В свое время по электроной почте можно было передавать только текст, набранный латиницей. Позже для передачи произвольной информации разработали спецификацию MIME (Multipurpose Internet Mail Exchange). Наконец, MIME адаптировали для нужд защиты почты. Соответствующая спецификация получила название Secure MIME или S/MIME. Чтобы пользоваться криптографической защитой почты вам, во-первых, нужен почтовый клиент, поддерживающий эту спецификацию. Таковыми являются Microsoft Outlook, Outlook Express, The Bat, Mozilla Thunderbird и многие другие. Во-вторых, вам нужно создать себе пару ключей и получить сертификт. Об этом я расскажу в отдельной статье.
Затем вы пишите электронное письмо. Воспользовавшись функциями почтового клиента, вы подписываете его своей ЭЦП. Обратите внимание, что зашифровать письмо вы пока не можете. В самом деле, для подписания нужен ваш секретный ключ, и вы его имеете. А для шифрования нужен открытый ключ получателя, которого пока у вас нет. Почтовые программы как правило вместе с ЭЦП добавляют в письмо сертификат вашего открытого ключа. Письмо доставляется получателю. Почтовый клиент получателя первым делом извлекает из письма сертификат открытого ключа. Затем из сертификата достается открытый ключ и проверяется его подлинность. После этого программа в состоянии проверить ЭЦП и сообщить пользователю результаты проверки. Если получатель сохранит ваш сертификат (например, в адресной книге), то сможет в будущем шифровать письма для вас. А если пошлет вам свой сертификат, то возможность шифрования переписки получите и вы. Все просто!
Еще несколько штрихов. Как я говорил, сертификат открытого ключа подписан ЭЦП удостоверяющего центра (CA). Чтобы проверить подпись CA нужно иметь его подлинный открытый ключ. Он удостоверяется собственным сертификатом. Цепочка доверия обрывается на некотором CA, именуемым корневым. Корневые сертификаты обычно включены в состав операционных систем. А Microsoft периодически обновляет их с помощью Windows Update. На это следует обратить внимание, поскольку получение дистрибутива операционной системы из "левого" источника может нарушить все описанные здесь механизмы безопасности, если источник догадается подменить в дистрибутиве корневые сертификаты.
Описанные здесь механизмы могут применятся только для частной переписки. И дело не в их криптостойкости, которая на самом деле высока, а в том, что согласно российскому законодательству, в бизнесе допустимо использование только сертифицированных средств защиты. Только в этом случае вы можете потом утверждать в суде, что ваши данные были защищены.
Кроме описанного здесь способа защиты почты существуют еще несколько подобных. Например, тот, который реализован в известной программе PGP. Но у него совсем другая система удостоверения открытых ключей, на которой я останавливаться не буду.
Подводя итог, рекомендую пользователям, заинтересованным в конфиденциальной переписке лицам, внимательно изучить возможности своих программ электронной почты и пользоваться ими для своего блага.
Однако, сокрытием сообщения дело не ограничивается. Часто важнее не секретность, а неизменность и аутентичность сообщения. Получатель хочет быть уверенным в том, что письмо не изменялось при передаче, а его автором является именно то лицо, которое указано в качестве такового. Ситуация, когда получатель не проверяет неизменность и аутентичность письма описана у А.С. Пушкина: "И в суму его пустую суют грамоту другую". К каким плачевным последствиям это привело, вы знаете. Такую задача так же можно решить криптографическими методами.
Обсудим подробно обе задачи. Сначала о шифровании. Исторически первыми были изобретены симметричные методы. Отправитель и получатель знали одно и то же кодовое слово - ключ. Отправитель с помощью ключа по определенным правилам преобразовывал свое сообщение, а получатель с тем же ключем выполнял обратное преобразование. Алгоритм преобразования выбирался так, чтобы не зная ключ было бы невозможно (точнее, очень трудно) восстановить по шифртексту исходный текст. Главная проблема симметричного метода - передать ключ. Отправитель и получатель должны были хотя бы раз встретиться лично, чтобы получить общий ключ. Развитие математики привело к рождению новых методов криптографии - асиметричных.
В асиметричных методах для зашифрования и расшифрования используются разные ключи. Один из них является секретным и хранится только у его владельца. Второй - публичный - передается по открытым каналам всем потенциальным корреспондентам. Для зашифрования письма отправитель использует открытый ключ получателя. Для расшифрования получатель применяет свой секретный ключ. Разумеется, ключи связаны друг с другом некой зависимостью. Но для отыскания секретного ключа по открытому необходимо решить трудную математическую задачу. Среди таких задач: разложение большого числа на простые множители, дискретное логарифмирование и (какой кошмар!) дискретное логарифмирование на эллиптических кривых. Асимметричные методы имеют два больших недостатка. Во-первых, они очень медленные. Во-вторых, открытый ключ можно подменить. Первая проблема решается так. Отправитель сообщения производит зашифрования каким-либо заранее оговоренным симметричным методом. Для этого вырабатывается случайный одноразовый ключ, называется поэтому сеансовым ключом. Ключ обычно имеет гораздо меньший размер, чем само сообщение. На открытом ключе асимметричным методом шифруется уже не все сообщение, а только сеансовый ключ. В зашифрованном виде он присоединяется к зашифрованному письму и передается по каналам связи получателю. Тот использует свой открытый ключ для расшифрования сеансового ключа, а последний - для расшифрования сообщения. О втором недостатке асимметричных методов скажу чуть позже.
Итак, мы знаем в общих чертах как зашифровать и расшифровать письмо. Но как защитить его от подделки? Можно, например, посчитать некоторую функцию от текста сообщения и секретного ключа, известного только составителю письма. Функцию не простую, а такую, чтобы можно было проверить правильность ее расчета без самого расчета. Пусть T - сообщение, S - секретный ключ отправителя, P - его публичный ключ, F - функция подписания. Тогда отправитель вычисляет некоторое число
s = F(T,S).
Число s называется электронной цифровой подписью (ЭЦП). Пусть существует другая функция - G. связанная с F. Ее множество значений - {да, нет}. Получатель письма вычисляет
r = G(T,s,P).
Если r=да, то ЭЦП верна, в противном случае - ложна. Так как G зависит от трех аргументов T, s и P, то неверная ЭЦП говорит либо о том, что сообщение T изменилось при передача, либо о том, что подпись s не от этого сообщения, либо открытый ключ P не принадлежит отправителю. Возможны любые комбинации этих вариантов. В любом случае неверная ЭЦП - повод отвергнуть сообщение как недостоверное.
Обратите внимание, чтобы зашифровать сообщение отправитель пользуется открытым ключом получателя. Для подписания письма он применяет свой секретный ключ. Наоборот, получатель проверяет ЭЦП открытым ключом отправителя, а расшифровывает своим секретным ключом.
Теперь обсудим главную проблему криптографии с открытым ключом. Предположим, вы намерены послать распоряжение в банк на перевод денег с вашего счета на счет предприятия X. Для начала вы создаете себе открытый и секретный ключи. Секретный прячете в надежном месте, а открытый отправляете по электронной почте в банк. Пусть я - ваш интернет провайдер и очень люблю читать ваши письма, ну просто так, чтобы узнать, что в мире делается. Обнаружив в письме секретный ключ, я торможу отправку и делаю свои ключи. Свой открытый ключ отправляю в банк, подписавшись вашим именем. Таким образом, банк думает, что владеет вашим открытым ключом. Затем вы направляете в банк распоряжение и подписываете его ЭЦП. Я это распоряжение перехватываю и исправляю в свою пользу. Оставить вашу ЭЦП я не могу, тогда функция G вернет отрицательный результат. Подписать за вас тоже не могу за неимением вашего секретного ключа. Но мне это и не нужно! Я подписываю письмо своим ключом. Банк ничего не заподозрит, поскольку мой ключ считаем вашим. Эта классическая атака носит название "человек в середине". В данном примере такой человек - я. Как защититься? Можно передать свой открытый ключ в банк лично. А как быть, если отправитель и получатель на разных континентах? Решение было найдено давно.
Предположим, что есть авторитетная организация CA (это не Советская Армия, это Certificate Authority). У нее есть филиалы во многих странах. Вы знаете о безупречной репутации CA и доверяете ей. Так же поступает и банк. Поэтому, если CA скажет банку, что данный ключ принадлежит вам, банк поверит. Как CA сообщит об этом банку? Пошлет электронное письмо. Как банк узнает, что письмо подлинное? Оно будет подписано ЭЦП CA. Как банк проверит ЭЦП CA? У него есть открытый ключ CA. Как банк может узнать, что этот открытый ключ принадлежит именно CA, а не злоумышленнику? Его подлинность удостоверит другая организация - CA2. А подлинность ключа CA2? Конечно CA3! Но ведь когда-нибудь это кончится? Конечно! Кончится тогда, когда очередной CAn передаст свой ключ в банк лично. В реальности цепочки доверия не бывают длинными: обычно не более трех звеньев.
Вся деятельность CA сводится к тому, чтобы проверить вашу личность и связать ваше имя с вашим же открытым ключом. Документ, содержащий ваше имя, ключ и подпись CA назвается сертификатом открытого ключа. Так что, деятельность CA состоит в выдаче таких сертификатов. Если у получателя письма нет вашего открытого ключа для проверки ЭЦП, вы должны послать ему не просто сам ключ, но сертификат ключа, иначе подлинность ключа вызовет сомнения.
Рассмотрим теперь работу описанных механизмов в столь знакомой нам электронной почте. В свое время по электроной почте можно было передавать только текст, набранный латиницей. Позже для передачи произвольной информации разработали спецификацию MIME (Multipurpose Internet Mail Exchange). Наконец, MIME адаптировали для нужд защиты почты. Соответствующая спецификация получила название Secure MIME или S/MIME. Чтобы пользоваться криптографической защитой почты вам, во-первых, нужен почтовый клиент, поддерживающий эту спецификацию. Таковыми являются Microsoft Outlook, Outlook Express, The Bat, Mozilla Thunderbird и многие другие. Во-вторых, вам нужно создать себе пару ключей и получить сертификт. Об этом я расскажу в отдельной статье.
Затем вы пишите электронное письмо. Воспользовавшись функциями почтового клиента, вы подписываете его своей ЭЦП. Обратите внимание, что зашифровать письмо вы пока не можете. В самом деле, для подписания нужен ваш секретный ключ, и вы его имеете. А для шифрования нужен открытый ключ получателя, которого пока у вас нет. Почтовые программы как правило вместе с ЭЦП добавляют в письмо сертификат вашего открытого ключа. Письмо доставляется получателю. Почтовый клиент получателя первым делом извлекает из письма сертификат открытого ключа. Затем из сертификата достается открытый ключ и проверяется его подлинность. После этого программа в состоянии проверить ЭЦП и сообщить пользователю результаты проверки. Если получатель сохранит ваш сертификат (например, в адресной книге), то сможет в будущем шифровать письма для вас. А если пошлет вам свой сертификат, то возможность шифрования переписки получите и вы. Все просто!
Еще несколько штрихов. Как я говорил, сертификат открытого ключа подписан ЭЦП удостоверяющего центра (CA). Чтобы проверить подпись CA нужно иметь его подлинный открытый ключ. Он удостоверяется собственным сертификатом. Цепочка доверия обрывается на некотором CA, именуемым корневым. Корневые сертификаты обычно включены в состав операционных систем. А Microsoft периодически обновляет их с помощью Windows Update. На это следует обратить внимание, поскольку получение дистрибутива операционной системы из "левого" источника может нарушить все описанные здесь механизмы безопасности, если источник догадается подменить в дистрибутиве корневые сертификаты.
Описанные здесь механизмы могут применятся только для частной переписки. И дело не в их криптостойкости, которая на самом деле высока, а в том, что согласно российскому законодательству, в бизнесе допустимо использование только сертифицированных средств защиты. Только в этом случае вы можете потом утверждать в суде, что ваши данные были защищены.
Кроме описанного здесь способа защиты почты существуют еще несколько подобных. Например, тот, который реализован в известной программе PGP. Но у него совсем другая система удостоверения открытых ключей, на которой я останавливаться не буду.
Подводя итог, рекомендую пользователям, заинтересованным в конфиденциальной переписке лицам, внимательно изучить возможности своих программ электронной почты и пользоваться ими для своего блага.