- •7.5.2. Трехфазное подтверждение
- •7.6. Восстановление
- •7.6.1. Основные понятия
- •7.6.2. Создание контрольных точек
- •7.6.3. Протоколирование сообщений
- •7.7. Итоги
- •Глава 8
- •8.1. Общие вопросы защиты
- •8.1.1. Угрозы, правила и механизмы
- •8.1.2. Вопросы разработки
- •8.1.3. Криптография
- •8.2. Защищенные каналы
- •8.2.1. Аутентификация
- •8.2.2. Целостность и конфиденциальность сообщений
- •8.2.3. Защищенное групповое взаимодействие
- •8.3. Контроль доступа
- •8.3.1. Общие вопросы контроля доступа
- •8.3.2. Брандмауэры
- •8.3.3. Защита мобильного кода
- •8.4. Управление защитой
- •8.4.1. Управление ключами
- •8.4.2. Управление защищенными группами
- •8.4.3. Управление авторизацией
- •8.5. Пример — Kerberos
- •8.6. Пример — sesame
- •8.6.1. Компоненты системы sesame
- •8.6.2. Сертификаты атрибутов привилегий
- •8.7. Пример — электронные платежные системы
- •8.7.1. Электронные платежные системы
- •8.7.2. Защита в электронных платежных системах
- •8.7.3. Примеры протоколов
- •8.8. Итоги
- •Глава 9
- •9.1. Corba
- •9.1.1. Обзор
- •9.1.2. Связь
- •9.1.3. Процессы
- •9.1.4. Именование
- •9.1.5. Синхронизация
- •9.1.6. Кэширование и репликация
- •9.1.7. Отказоустойчивость
- •9.1.8. Защита
- •9.2. Dcom
- •9.2.1. Обзор
- •9.2.2. Связь
- •9.2.3. Процессы
- •9.2.4. Именование
- •Синхронизация
- •Репликация
- •Отказоустойчивость
- •9.2.8. Защита
- •9.3. Globe
- •9.3.1. Обзор
- •9.3.2. Связь
- •9.3.3. Процессы
- •9.3.4. Именование
- •9.3.5. Синхронизация
- •9.3.6. Репликация
- •Отказоустойчивость
- •9.4. Сравнение систем corba, dcom и Globe
- •9.4.1. Философия
- •Процессы
- •9.4.4. Именование
- •Синхронизация
- •Кэширование и репликация
- •Отказоустойчивость
8.7.3. Примеры протоколов
Чтобы лучше разобраться в вопросах защиты электронных платежных систем, давайте кратко обсудим две характерные системы. Сначала мы поговорим о системе, позволяющей проводить платежи цифровыми деньгами. Затем рассмотрим стандартизованный протокол для безопасных транзакций с кредитными картами через Интернет.
E-cash
Существует несколько электронных платежных систем, которые базируются на концепции цифровых денег. Одной из наиболее известных является система e-cash, описание которой можно найти в [94, 95]. Основной целью при разработке этой системы было введение анонимности в платежи. Чтобы понять, как работает система e-cash, рассмотрим сначала не анонимную систему на основе наличных денег.
Допустим, Алиса хочет купить некоторые товары у Боба через сеть на общую сумму 12 долларов, используя цифровые деньги. Сначала она связывается со своим банком и просит снять 12 долларов с ее счета. Банк создает цифровые деньги в форме подписанных виртуальных банкнот на определенную сумму, причем каждая банкнота имеет уникальную ассоциированную с ней подпись. Так, например, виртуальная банкнота в 10 долларов может быть подписана специальным, принадлежащим банку закрытым ключом К~\о, а однодолларовая банкнота — другим специальным закрытым ключом К\. Для предотвращения копирования виртуальных банкнот каждая из них имеет уникальный серийный номер, с помощью которого банк может проверить факт повторного использования банкноты.
В нашем примере Алиса получает в своем банке десятидолларовую банкноту и две однодолларовых, которые позднее передает Бобу. По подписи банка Боб может проверить, что банкноты хотя и виртуальные, но не поддельные. Однако для проверки на попытку повторного использования банкнот ему необходимо связаться с банком, который по серийным номерам проверит, не применялись ли эти банкноты для оплаты раньше. Если это не попытка повторного использования виртуальных банкнот, Боб отправляет сообщение ОК как знак того, что готов принять эти деньги. Отметим, что Бобу все равно нужно связаться с банком, поскольку банк должен также проверить целостность банкнот.
Основной минус этой схемы состоит в том, что банк вынужден отслеживать серийные номера всех цифровых банкнот, то есть точно контролировать все денежные потоки. Если Алиса запросит десятидолларовую банкноту, банк должен записать серийный номер банкноты, выданной Алисе, и позже отследить, как Боб использует ее для оплаты. Не существует другого способа понять, что Алиса платит Бобу, если не будет некоей третьей стороны, которая примет платеж от Алисы, поверив ей на слово, что эти деньги еще ни разу не использовались.
Эту систему необходимо дополнить, чтобы не нужно было отслеживать, какие цифровые банкноты кому были переданы, сохраняя при этом защищенность банкнот от попыток подделки или повторного использования. Как показано в [93], такая защита может быть осуществлена при помощи так называемой слепой подписи (blind signature). Принцип, лежащий в основе слепой подписи, проще всего объяснить на примере конверта, покрытого изнутри копировальной бумагой. [94]. Если положить внутрь конверта обычную бумагу, все, написанное на конверте, отпечатается и на бумаге внутри него.
Для Алисы, получающей свою десятидолларовую банкноту, подписанную ее банком, это выглядит так, будто она помещает банкноту в конверт с копировальной бумагой и просит свой банк поставить подпись на конверте. Банк снимает 10 долларов со счета Алисы и ставит свою подпись на конверте. После этого банк никогда не увидит саму банкноту, но в любой момент может прочитать свою десятидолларовую подпись, стоящую на конверте. После этого Алиса может использовать банкноту как обычные деньги. Эта схема отлично работает, если учесть, что банк ежедневно подписывает множество десятидолларовых виртуальных банкнот. В этом случае, когда Боб передаст в банк десятидолларовую банкноту и потребует перечислить 10 долларов на свой счет, отследить Алису по этой банкноте будет невозможно.
Чтобы понять, как работают эти подписи в алгоритмах RSA, используем ту же нотацию, что и ранее при описании принципов RSА: п = р х qf где р и q — два больших простых (и секретных) числа. Число d вычисляется на основе этих простых чисел как d = (р - I) * (q - I), а. е получается следующим образом: е х d = 1 modz.
Предположим, Алиса хочет получить со своего банковского счета десятидолларовую банкноту. Фактически она сама создает себе эту банкноту, но нуждается в банковской подписи для ее подтверждения, причем так, чтобы банк впоследствии был не в состоянии проследить ее движение. Она создает случайное число k между 1 и п и делает т нечитаемым, скрывая его в сообщении
t = mke mod п.
Банк подписывает сообщение t своим защищенным ключом К\§ (в нашем примере — d), превращая его в сообщение td. Отметим, что мы используем ключи, специально предназначенные для десятидолларовых банкнот. Для изготовления банкнот другого достоинства требуются другие ключи. Когда Алиса получит сообщение td, она раскроет его, делая следующие вычисления:
s = td/k mod п = (mke)d/k mod п = mdked~1 mod n = md mod n.
С
этого момента она имеет в своем
распоряжении десятидолларовую банкноту,
которая подписана банком так, что банк
никогда ее не видел. Теперь Алиса может
использовать md
в
качестве десятидолларовой банкноты
для того, чтобы заплатить Бобу, как это
показано на рис. 8.44.
Хотя этот протокол в общем хорош, в нем все же имеются некоторые проблемы. Основная состоит в том, чтобы защититься от повторного использования денег. Хотя банк может легко проверить, не применялась ли банкнота т в качестве средства платежа ранее, нет сомнения, что было бы полезно наказывать людей, пытающихся делать это снова. Другими словами, хорошо было бы разработать такую схему, при которой попытка повторного использования предоставляла бы информацию, позволяющую идентифицировать человека, пытающегося это сделать. Детали подобной схемы можно найти в [94, 404].
Защищенные электронные транзакции
Рассмотрим теперь электронную платежную систему для транзакций с кредитными картами. Протокол защищенных электронных транзакций (Secure Electronic Transactions, SET) — это совместная попытка Visa и Mastercard в кооперации с несколькими другими организациями, такими как Netscape и Microsoft, разработать стандартный способ покупки товаров через Сеть с использованием кредитных карт. SET — открытый стандарт. Это означает, что вся информация о протоколе опубликована (информацию по SET можно найти по адресу http://www.setco.org).
Далее мы представим схему реального протокола, опуская при этом множество второстепенных деталей, таких как конкретный формат сообщений, включение изменений, отметки времени и пр. Основная задача этого описания состоит в том, чтобы дать представление о SET как многостороннем протоколе для электронных платежей при помощи кредитных карт.
В SET использована важная новая концепция двойной подписи. Прежде чем мы перейдем к обсуждению различных этапов протокола, нам следует в ней разобраться. Рассмотрим следующую проблему: Алиса хочет купить у Боба некоторые товары, пользуясь кредитной картой. Все, что она должна сделать при этом, — отправить Бобу информацию о заказанных товарах вместе с данными о своей кредитной карте. Боб должен быть в состоянии передать эти данные в банк для завершения процесса оплаты за товары. Нам необходимо связать заказ и платежную информацию.
Один из способов — поместить всю необходимую информацию в одно сообщение и потребовать от Алисы, чтобы она подписала его. Однако в этом случае и Боб, и банк для проверки подписи Алисы будут вынуждены получать как заказ, так и платежную информацию. Соответственно, банк узнает, что заказывала Алиса. Обычно эти данные должны быть известны только Алисе и Бобу. Точно так же Алиса не хочет, чтобы Бобу стали известны детали информации о произведенной оплате. Данные о кредитоспособности Алисы — дело банка, а не Боба.
Решение будет следующим. Пусть гп\ и т2 обозначают соответственно заказ и платежную информацию. Двойная подпись (dual signature) состоит в построении дайджеста сообщения md{ = Н(гп\) для гп\ и md2 =H(m2) для m2 с последующим построением третьего дайджеста путем слияния md\ и md2: mdciuai= H(concat(md[} md2)). Этот дайджест md(juui затем подписывается Алисой с использованием ее закрытого ключа. Теперь Алиса посылает Бобу сообщение mdduah nidi* K~\(?nd(juai)], которое позволяет ему идентифицировать Алису и убедиться, что именно она поставила подпись под всем сообщением. Однако Боб не в состоянии прочесть тяг. Для обозначения двойной подписи сообщений тп\ и т2, из которых открыто только Шь мы используем запись [ml |т2] A:
[ml |т2] A =[ ml ? Н(т2), H(concat(ml} т2))} KA(H(concat(mh т2)))].
Давайте обсудим теперь основы протокола SET. Этапы протокола иллюстрирует рис. 8.45.
Мы предполагаем, что Алиса хочет заплатить Бобу. Первое, что ей необходимо сделать, — послать Бобу заказ и платежргую информацию. На рисунке это действие показано в виде сообщения 1. Информация о заказе обозначена как order, информация о платеже — как pay_injо. Алиса создает дважды подписанное сообщение [order \ pay_info]A. Платежная информация, которая должна быть прочитана только в банке, шифруется сеансовым ключом КА,ьапЬ который банк создал для Алисы. Этот ключ также посылается Бобу, но зашифрованный открытым ключом банка Klank-
После того как Боб проверит сообщение Алисы, он пересылает платежную информацию в банк и запрашивает авторизацию оплаты. При этом он создает сеансовый ключ Кв\,ьапЬ который использует для шифрования своего запроса auth. Этот запрос пересылается в банк вместе с информацией Алисы об оплате, а ключ Кв 1,bank шифруется открытым ключом банка. Все это показано на рисунке как сообщение 2.
Допустим, что банк признал действительность оплаты. В этом случае он возвращает Бобу подписанное сообщение о прохождении авторизации auth_OK, зашифрованное новообразованным сеансовым ключом К&2МпЬ который, в свою очередь, зашифрован открытым ключом Боба. Этот ответ, обозначенный как сообщение 3, содержит также и так называемое сообщение о получении (capture message), которое потребуется позже, когда Боб действительно будет получать деньги из банка. Сообщение о получении однозначно ассоциируется с конкретной транзакцией посредством идентификатора транзакции. Этот идентификатор также используется и в сообщениях order и payjnfo. Сообщение о получении подписывается банком и шифруется при помощи третьего сеансового ключа,
КвЗ,Ьапк-
Когда Боб получает от банка «добро», он посылает Алисе подписанное подтверждение, показанное на рисунке как сообщение 4.
Теперь Боб хочет получить свои деньги. Он посылает банку сообщение payjne вместе с ранее полученным сообщением о получении. И вновь для шифрования сообщения payjne создается и используется новый сеансовый ключ. Это сообщение 5.
И, наконец, после того как банк проверит сообщение о получении, он возвращает Бобу подтверждение сар_ОК, зашифрованное сеансовым ключом Квъмпк-
Хотя на рис. 8.45 это и не указано, в протоколе SET на каждом из шагов выполняется аутентификация путем посылки сертификатов всякий раз, когда возникает необходимость в использовании открытого ключа. С этой целью в протоколе задействуется иерархия сертифицирующих организаций, сходная с ранее обсуждавшейся иерархией моделей доверия в почте РЕМ. Детали этой модели, равно как и протокола, можно найти в [407].
