|
ВОССТАНОВЛЕНИЕ ИНФОРМАЦИИ С РАЗЛИЧНЫХ НАКОПИТЕЛЕЙ В КИЕВЕ уход за растениями - озеленение - фитодизайн |
|
http://kiev-security.org.ua
Технологии, и по сей день считающиеся стратегическими, ныне благодаря Internet стали доступны практически всем желающим (с соответствующим образованием, конечно) и становятся основой информационной безопасности в Internet. С развитием специальной области математики, занимающейся криптографией, связано появление цифровых денег и вообще любых электронных платежных систем.
Поэтому, стараясь обойтись без математических формул и строгих определений, мы познакомим читателей с некоторыми понятиями и операциями криптографии, интенсивно использующимися в электронных или цифровых платежных системах.
Самая древняя и понятная криптографическая операция - это шифрование сообщения закрытым (секретным) ключом. Можно придумать множество различных способов шифрования сообщения. Например, замена всех букв текста на следующие (по алфавиту):
Исходное сообщение ВРЕМЯ - ДЕНЬГИ
Зашифрованное сообщение ГСЖНА - ЕЖОЭДЙ
Мы использовали метод Цезаря - циклический сдвиг алфавита на один шаг, а можно использовать сдвиг на две позиции или три и т. д. В данном случае величина сдвига (число 1, 2, 3...) - это ключ, с помощью которого можно зашифровать и расшифровать текст. Для того чтобы из зашифро-ванного сообщения получить исходное, достаточно заменить все буквы "шифровки" (криптограммы) на предыдущие (по алфавиту). В принципе, если вы пользуетесь какой-либо программой-редактором, то вы уже используете методы шифрования, то есть заменяете буквы числами или, точнее, последовательностями из восьми бит. Если речь идет об английских буквах в кодировке ASCII, то это классический метод Цезаря, для русских - более хитрый метод, связанный с табличными подстановками.
Эти методы шифрования сообщений, однако, слишком просты и не являются достаточно надежной защитой (профессионалы говорят, что они не криптостойки). Существует множество способов или алгоритмов шифрования, гораздо более криптостойких (для замены, например, берутся не одиночные буквы, а наборы по две буквы и больше), где в качестве ключей используются не просто числа, а комбинации букв и чисел, целые слова и предложения и даже длинные файлы, "набитые" случайными комбинациями. Однако и у таких "хитрых" алгоритмов и у самого простого, приведенного нами выше, есть общая черта: они используют один и тот же ключ (или пароль) для шифрования сообщения и его расшифровки. Такие методы в криптографии называются шифрованием с закрытым ключом, а использующийся ключ - секретным. Таким образом, для того, чтобы сообщение не могло быть прочитано нежелательными лицами, такой ключ должен храниться в тайне.
Этот вывод может показаться само собой разумеющимся. Часто даже возникает недоумение: "Ну конечно, в тайне! Нельзя же ключ шифрования делать достоянием гласности! Какой же смысл его раскрывать, если с его помощью любой сможет расшифровать сообщение?!"
Как ни странно, последнее восклицание справедливо далеко не всегда. Есть такие методы в криптографии, в которых для шифрования используется один ключ, а для расшифровки - другой. При этом с помощью первого ключа невозможно расшифровать текст им же зашифрованный, а с помощью второго ключа невозможно зашифровать текст, который этим ключом удастся расшифровать. Естественно, что невозможно по одному ключу определить другой, иначе все это потеряло бы смысл. Такая пара ключей называется открытым (то есть общедоступным, public) и закрытым (то есть персональным, private) ключами, а методы, основанные на возможности использовать такую пару, - шифрованием с открытым ключом.
Имея такую пару ключей, вы можете совершенно спокойно передавать открытый ключ для шифрования, хоть через газету, своему партнеру, который с его помощью зашифрует сообщение, и быть совершенно спокойным за секретность содержания этого сообщения, так как расшифровать его можно только с помощью второго (закрытого) ключа, который знаете только вы!
В реальность таких методов сначала трудно поверить, поэтому приведем два простых примера.
Первый пример. Представьте, что нужно передать документ в ларце, но так, чтобы его никто не смог достать оттуда. Тогда вы посылаете своему партнеру замок (в нашем примере он играет роль отрытого ключа), который может защелкиваться без ключа. Ключ же от этого замка (который играет роль закрытого ключа) вы никуда не передаете, а храните у себя. Ваш партнер получает замок, кладет документ в ларец, закрывает его и защелкивает замок, после чего он отправляет ларец с нарочным. Далее понятно - ключ есть только у вас, и с его помощью вы открываете замок, получив ларец.
Ни посыльный, ни кто-либо другой не могут посмотреть документ, так как не обладают ключом. Проблема решена? Не совсем. Существует один очень важный момент - ваш партнер должен быть уверен в том, что он получил замок действительно от вас и его не подменили на пути от вас к нему. Если обстоятельства не дают такой уверенности, то можно воспользоваться другим способом шифрования.
Пример второй. Вы договариваетесь со своим партнером о том, что и вы и он приобретаете по одному замку и используете ларец с двумя парами дужек. Теперь, если вам нужно получить документ, последовательность действий следующая: ваш партнер кладет документ в ларец, закрывает его на свой замок (используя первую пару дужек) и посылает его вам. Вы вешаете свой замок на вторую дужку и посылаете ларец уже с двумя замками обратно вашему партнеру. Ваш партнер снимает свой замок и посылает ларец, теперь уже закрытый на один (ваш) замок, вам. Вы получаете ларец, открываете свой замок и вынимаете документ.
Немного сложно? Зато надежно! И примерно так устроен протокол обмена информацией в защищенных системах, когда нет возможности обменяться секретным ключом и работать, используя шифрование с закрытым ключом.
В наших примерах мы не рассмотрели других опасностей - это взлом ларца топором (то есть грубой силой), случайный подбор ключей и подбор ключей некоторыми специалистами исходя из анализа замка. Все это, конечно, возможно. Ларец как раз проще всего взломать грубой силой. В численных же методах, использующих достижения криптографии, все как раз наоборот - менее всего вероятно взломать защиту грубой силой или простым перебором ключей. Вероятность повышается, если за дело возьмутся криптоаналитики. Но и у них, даже с помощью мощнейших компьютеров, на поиски ключа могут уйти годы. Актуальна ли будет тогда спрятанная информация? И разумно ли использовать компьютеры стоимостью в миллионы долларов, чтобы добыть, скажем, долларов сто? Все относительно...
Следует понимать, что, хотя не существует и не может существовать методов с абсолютной криптостойкостью (то есть способностью выдержать атаку "абсолютного" криптоаналитика), ведь всегда есть вероятность угадывания ключа, однако вероятность эта настолько низка, что процесс криптоанализа становится просто экономически нецелесообразным. При этом следует руководствоваться простым правилом: чем ценнее передающаяся информация, тем длиннее нужно использовать ключ, уменьшая вероятность его угадывания и увеличивая время и затраты на его подбор.
На практике используются обычно комбинации методов шифро-_вания с открытым и закрытым ключами. К сожалению, у методов шифрования с открытым ключом кроме достоинства - возможности безопасно обмениваться данными без предварительного обмена секретным ключом - есть и недостаток: работа с ними значительно медленнее, чем с методами шифрования с закрытым ключом. Поэтому часто поступают следующим образом: для обмена сообщениями используют один секретный ключ, который пересылается один раз в начале сессии зашифрованным с помощью методов шифрования с открытым ключом. Протокол начала обмена (в защищенном или безопасном режиме работы Web-броузера) выглядит примерно следующим образом:
сначала одна сторона генерирует, используя алгоритмы шифрования с открытым ключом, пару ключей (открытый/закрытый) и передает второй стороне открытый ключ;
затем вторая сторона генерирует (с помощью методов шифрования с закрытым ключом) секретный ключ, шифрует его с помощью открытого ключа, посланного второй стороной (используя методы шифрования с открытым ключом), и передает зашифрованный секретный ключ первой стороне;
первая сторона расшифровывает секретный ключ с помощью закрытого ключа (все еще используя методы шифрования с открытым ключом);
теперь обе стороны владеют секретным ключом, который они используют для шифрования своих сообщений (шифрование с закрытым ключом) в течение всего сеанса связи.
Таким образом, стороны экономят время, необходимое компьютеру для операций шифрования и расшифровки, так как методы шифрования с закрытым ключом, как мы уже отмечали, позволяют работать значительно быстрее, чем методы шифрования с открытым ключом. А ведь время - это не только деньги, но и безопасность, которая в конце концов тоже деньги.
Существует еще один широко известный алгоритм с открытыми ключами, позволяющий сформировать один общий секретный ключ для шифрования данных двумя сторонами без передачи его по каналу связи. Алгоритм основан также на использовании пары ключей: открытый/закрытый.
Обе стороны генерируют свои пары ключей и обмениваются потом открытыми ключами. Суть алгоритма состоит в том, что пары ключей генерируются по таким правилам, следуя которым каждая сторона из комбинации: свой секретный ключ и отрытый ключ партнера может получить единственный ключ (одинаковый у обеих сторон!), который они могут затем использовать для шифрования сообщений методом шифрования с закрытым ключом.
Этот алгоритм называется алгоритмом открытого распределения ключей, или - по именам авторов, исследователей из Стэнфорда - алгоритмом Диффи-Хеллмана.
Алгоритм был придуман исторически раньше методов открытого шифрования и среди популярных сейчас алгоритмов криптографии с открытым ключом занимает важное место, обеспечивая при той же длине ключей, что и наиболее популярные алгоритмы открытого шифрования, криптостойкость в тысячи раз более высокую. Это позволяет применять его в таких системах, как цифровые телефоны, подвижная радиосвязь, видеоконференции и т. д., где часто применяются менее мощные, чем в персональных компьютерах, процессоры.
Теперь рассмотрим два понятия: секретность (privacy) и идентификация подлинности или просто подлинность (authentication). Хотя и обеспечение секретности, и идентификация подлинности используются при передаче информации и часто задействуют одни и те же алгоритмические приемы и методы, они служат совершенно различным задачам и их не следует путать.
Рассмотрим простой пример - вы заказываете компакт-диски в каком-либо интернетовском магазине и хотите расплатиться с помощью кредитной карты. Так вот, вас заботит именно секретность передаваемой информации, то есть вы не желаете, чтобы кто-либо, кроме магазина, получил данные о вашей кредитной карте (конечно, лучше бы, чтобы и магазин не имел этой информации, и это стало вполне возможным с применением новых электронных платежных систем). Магазин же озабочен подлинностью полученной информации, то есть он хочет быть уверен, что это именно вы производите заказ и что получены данные именно о вашей кредитной карте. Иначе говоря, он хочет подтвердить ваше identify.
Вопросы, связанные с секретной передачей данных, уже довольно подробно освещены. Как же решить вторую проблему? Как сделать, чтобы клиент впоследствии не смог отрицать факта отправления той или иной информации? На помощь приходит цифровая подпись.
Цифровая подпись - это некоторый "довесок" к любой информации, который уже не позволит отрицать подлинность этой информации. А при каких условиях невозможно отрицать подлинность информации?
Как же устроена цифровая подпись? Вы уже достаточно знакомы с элементами криптографии, чтобы сразу ("без ларцов") ознакомиться с алгоритмом:
возьмем любой файл - это может быть не только текст, но и картинка, музыка, видео или даже программа;
чтобы вычислить подпись под файлом, пропустим этот файл через некоторый специальный, хорошо известный математический алгоритм так называемого "хэширования", в результате чего получится новый небольшой файл, содержащий некоторую смесь (hash code) - результат "переваривания" информации этим алгоритмом. Важное условие - алгоритм должен устойчиво получать одну и ту же смесь из одной и той же информации и различные смеси из различной информации. Так, если добавить в документ один-единственный пробел - смесь должна получиться уже совершенно другая. Кроме того, чтобы исключить подделку цифровой подписи, такой алгоритм или функция хэширования (hash function) должна быть односторонняя - это значит, что из исходного файла получить хэш-код (смесь) можно, а наоборот - нет;
сгенерируем пару ключей - открытый/закрытый - для использования алгоритма шифрования с открытом ключом (в реальности каждая компания и каждое физическое лицо должно обладать своей парой ключей; открытый ключ известен всем, закрытый - только конкретному лицу!);
зашифруем полученную смесь с помощью закрытого ключа - зашифрованное сообщение и является цифровой подписью;
незашифрованный документ (файл) передается в исходном виде вместе с цифровой подписью.
Теперь любая другая сторона, получив документ и подпись к нему, проделывает следующую последовательность операций:
с помощью открытого ключа расшифровывает (то есть восстанавливает из подписи) смесь файла;
"прогоняет" незашифрованный документ (файл) через тот же математический алгоритм хэширования, который не является секретом, и получает еще одну смесь файла;
сравнивает полученные таким_образом две копии смеси и, если они полностью совпадают, может быть уверена (и может это доказать), что это действительно документ, сделанный и утвержденный (подписанный) первой стороной.
Как видно, если кто-нибудь попытается изменить хотя бы одну букву документа, это будет сразу заметно - смеси не совпадут. Кроме того, восстановить смесь может каждый, а вот расшифровать ее (то есть вычислить из нее подпись) - только тот, кто владеет закрытым ключом, и никто другой! Таким образом, оба условия подлинности информации выполнены.
Если же кому-то не нравится, что вместе с цифровой подписью текст передается открыто, то ничто не мешает зашифровать вместе и текст и подпись.
Для тех, кто не обратил на это внимание, заметим, что фактически цифровая подпись (без учета хэширования документа, которое необходимо лишь для уменьшения объема подписи) - это шифрование с открытым ключом наоборот.
Действительно, если вам необходимо передать зашифрованный документ с помощью метода шифрования с открытым ключом, вы генерируете два ключа: первый (для шифрования документа) вы передаете своим партнерам, в данном случае - это открытый ключ, второй (для расшифровки документа) вы держите только у себя, в данном случае - это секретный индивидуальный ключ. Ваши партнеры шифруют документы, передают их, и только вы можете их расшифровать.
В случае же с цифровой подписью все как раз наоборот. Вы генерируете два ключа первый: (для шифрования или подписи документа) вы держите только у себя, и в этом случае - это секретный индивидуальный ключ, второй (для расшифровки документа и проверки подписи) вы передаете своим партнерам, и в этом случае - это открытый ключ. Вы подписываете (подпись - это результат шифрования) документ, и никто кроме вас, это сделать не может, а ваши партнеры всегда в состоянии проверить подпись (для чего необходимо только ее расшифровать).
Очень важным алгоритмом, применяющимся в технологии электронных наличных платежей, является слепая подпись (blind signature).
Вернемся к нашему примеру с ларцем с двумя дужками, где метафорой шифрования текста было защелкивание замков. Предположим, что замки теперь не простые, серийные безымянные, а сделанные на заказ с красивым фамильным вензелем - уникальные замки, которые повторить невозможно. Такие замки послужат нам метафорой слепой подписи. Слепой - потому что повесить такой замок можно на закрытый ларец, не видя лежащего внутри документа, не глядя, слепо; подписи - потому что как в случае с обычной подписью, так и с цифровой сам факт защелкивания своего "фамильного" замка удостоверяет, что это мог сделать только его, замка, хозяин.
Предположим, что все, что вам нужно от вашего партнера, - это чтобы он удостоверил (завизировал, подписал) некоторый документ, не знакомясь с ним. При этом ваш партнер вам полностью доверяет и согласен это сделать. Единственное, что его волнует, - действительно ли ларец (с документом) пришел от вас. Если мы сможем провести такую операцию, значит, у нас в руках бу-дет способ удостоверять документы без их раскрытия и возможность доказать аутентичность этого удостоверения или подписи при необходимости.
Итак - ларец. Вы кладете туда свой документ, вешаете и защелкиваете свой "фамильный" замок. Эта операция, кстати, означает две вещи: то, что вскрыть ларец никто кроме вас не может, и то, что этот документ действительно ваш. Затем посылаете ларец своему партнеру. Ваш партнер, получив от вас ларец, в первую очередь удостоверяется, что он от вас (ведь он хорошо знает, как выглядит ваш замок). Сделав это, он вешает рядом с вашим замком на вторую дужку свой и отправляет ларец обратно вам. Вы, в свою очередь, получив ларец с двумя замками, проверяете замок вашего партнера (вы его тоже хорошо знаете) и, если все нормально, открываете и снимаете свой замок. Что получилось?
У вас в руках ларец с текстом внутри, о котором знаете только вы, удостоверенным вашим партнером. Возвратимся от ларца и замков к цифровой подписи - вы получили свой документ, подписанный второй стороной по технологии слепой подписи.
Конечно, в отличие от замков, которые можно повесить рядом, подписание цифрового документа, то есть применение к нему операции подписания, производится вами и вашим партнером таким образом, что подписи как бы накладываются вторая на первую, поэтому алгоритм должен быть организован так, чтобы одну (вашу) подпись можно было бы извлечь "из-под" второй подписи (вашего партнера), не изменяя документа и второй подписи.
Позже мы увидим, как этот алгоритм применяется для расчетов с помощью цифровых наличных, а пока для того, чтобы он не выглядел уж слишком далеким от жизни, приведем пример возможного его конкретного использования. Это тайное голосование.
Предположим, что необходимо организовать тайное электронное голосование по сети (не такая уж и далекая перспектива). При этом должны быть выполнены следующие условия:
Предоставляя читателю поупражнять мозги и додумать детали самому, обрисуем эту процедуру в упрощенном виде:
вы генерируете документ в соответствии со своим выбором (например, пишете "за" или "против"), включая туда большое случайное число;
запечатываете и подписываете документ (то есть используете процедуру слепой подписи) и отправляете в избирком;
в избиркоме проверяют вашу подпись (это все, что можно сделать, так как вскрыть документ практически невозможно), подписывают ваш запечатанный документ и отправляют его обратно вам. При этом избирком отмечает, что вам отправлен документ, и второй раз такая операция для вас производится уже не будет;
вы удаляете свою подпись, распечатываете документ (подпись избиркома сохраняется) и посылаете документ в коллектор избиркома;
в коллекторе могут еще раз проверить, не было ли уже использовано ваше большое случайное число, и учитывают ваш голос;
учтенные голоса выставляются на всеобщее обозрение (пары: случайное число - волеизъявление), так что вы, зная свое случайное число, можете всегда проверить, правильно ли учтен ваш голос.
Это далеко не единственный возможный алгоритм тайного голосования с использованием технологии слепой подписи, к тому же не лишенный недостатков. Предоставим читателю самому их найти, а также придумать идеальный алгоритм (он существует и не намного сложней приведенного).
Существуют и другие технологии, также применяющиеся в электронной коммерции, например цифровой штамп времени (однозначно определяет время или дату, когда произведен (проштампован, подписан) документ или любой файл). Однако цифровая подпись и шифрование с открытым ключом являются фун-даментальными технологиями, благодаря разработке которых в конце 70-х годов стали возможны и электронная коммерция вообще, и электронные платежные системы, и цифровые деньги в частности.
Для тех, кто хотел бы узнать об описанных алгоритмах более подробно, ниже приводится таблица ссылок на некоторые из них. В принципе найти подробные их описания в Internet не составляет никакого труда - любая поисковая система выдаст вам множество адресов сайтов, специально посвященных тому или иному методу. Что касается информации на русском языке, то полезно заглянуть на www.emoney.ru.
Если кому-нибудь не нравится слово шифр, можно использовать более "безопасное" слово код. Кстати, шифр в Советском энциклопедическом словаре определяется как "совокупность усл. знаков (усл. азбука из цифр и букв) для секретной переписки дипломатических представителей со своими правительствами, а также в вооруженных силах для передачи текста секретных документов по техническим средствам связи".
В платежных системах Internet, CyberCash например, реально используются алгоритмы RSA c длиной ключа 1024 бит, при этом Рон Ривест (Ron Rivest), один из разработчиков RSA, подсчитал, что для того, чтобы "пробить" криптотекст, зашифрованный с помощью ключа длиной 512 бит, нужно потратить 8,2 млн долларов.
|
|
|
|
Шифрование с закрытым ключом | блочный, поточный | DES*1, IDEA*3, RС2*2, RC4*2, RC5*2 | ГОСТ 28147-89*7, ВЕСТА-2*8, ВЕСТА-2М*8, ВЕСТА-4*8 |
Шифрование с открытым ключом | RSA*2 | LC1*9 | |
Открытое распределение ключей | Diffie-Hellman*4 | Diffie-Hellman*4, АФИНА*8 | |
Цифровая подпись | RSA*2, DSA*1, Schnorr*5 | ГОСТ Р 34.10*7, Нотариус-АМ*8, Нотариус-S*8 | |
Слепая подпись | Chaum*6 | LBS1*8 |
<a href="http://kiev-security.org.ua" title="Самый большой объем в сети онлайн инф-ции по безопасности на rus" target="_blank"><img src="http://kiev-security.org.ua/88x31.gif" width="88" height="31" border="0" alt="security,безопасность,библиотека"></a> |