|
|
|
|
|
В России не действуют патенты на криптографические алгоритмы и протоколы. Но во многих странах такие патенты допускаются законодательством. Если разрабатываемая программа будет использоваться не только на территории России, при выборе используемых в ней криптографических алгоритмов стоит оценить их применимость с точки зрения патентной чистоты. Доступность открытого описания алгоритма еще не означает, что никто не станет предъявлять претензий, если этот алгоритм будет использоваться в коммерческом приложении. Как уже говорилось ранее, только экспертная оценка, выполненная силами криптографического сообщества, может дать некоторую уверенность в том, что алгоритм не содержит серьезных недостатков. А для того чтобы криптографы смогли изучать алгоритм, его необходимо открыто опубликовать. Более того, даже если в Интернете присутствует бесплатная криптографическая библиотека, содержащая реализацию определенного алгоритма в исходных кодах, это еще не означает полной свободы в использовании алгоритма.
|
|
|
|
|
|
|
|
|
Когда для решения конкретной задачи требуется выбрать алгоритм, устраивать открытый конкурс — не самый быстрый путь. В большинстве случаев достаточно выбрать его из уже существующих алгоритмов. Авторы книги "Криптография. Официальное руководство RSA Security" ("RSA Security's Official Guide to Cryptography") Стив Бернет (Steve Burnett) и Стивен Пэйн (Stephen Paine) для шифрования соединений между компьютерами рекомендуют использовать потоковый алгоритм RC4, т. к. он обеспечивает достаточно высокую скорость. Для таких приложений, как базы данных, электронная почта и защищенное (зашифрованное) хранение файлов, рекомендуется использовать блочные алгоритмы шифрования, в частности AES (Rijndael). Брюс Шнайер (Bruce Schneier) вместе с Нилсом Фергюсоном (Niels Ferguson) в своей книге "Практическая криптография" ("Practical Cryptography") считают, что с точки зрения безопасности карьеры лица, принимающего решение, Rijndael — действительно самый приемлемый блочный алгоритм шифрования. Он принят в качестве стандарта в США, и если в AES в будущем будут обнаружены серьезные недостатки, наказывать за это, скорее всего, никого не станут. Кроме того, AES уже достаточно широко распространен и поддерживается большим числом библиотек. Так что AES — почти беспроигрышный выбор.
|
|
|
|
|
|
|
|
|
Хорошим примером того, как стоит подходить к выбору алгоритма шифрования, может послужить описание процесса выбора алгоритма Advanced Encryption Standard (AES) — нового стандарта шифрования США, пришедшего на смену DES. В 1996 году национальный институт стандартов и технологий США (National Institute of Standards and Technology, NIST) начал работу над организацией конкурса по выбору лучшего алгоритма для нового стандарта. 2 января 1997 года NIST официально объявил о запуске программы по разработке нового федерального стандарта обработки информации (Federal Information Processing Standard, FIPS). 12 сентября 1997 года начался прием заявок на участие в конкурсе. К кандидатам предъявлялись следующие обязательные требования: П алгоритм должен относиться к симметричной криптографии (с секретным ключом); П алгоритм должен являться блочным шифром; О алгоритм должен поддерживать следующие комбинации размеров ключа и блока шифрования: 128—128, 192—128 и 256—128.
|
|
|
|
|
|
|
|
|
При реализации криптографических протоколов некоторые моменты могут показаться программисту излишними, и он с легкой душой избавится от ненужного на его взгляд кода, тем самым еще и увеличивая быстродействие программы. Например, при реализации шифрования по RSA кажется достаточным просто реализовать операцию модульного возведения в степень. Однако спецификация PKCS#1 (Public-Key Cryptography Standards) требует добавления к каждой порции шифруемых данных как минимум 8-ми случайных байт. Дело в том, что при использовании алгоритмов с открытым ключом в распоряжении злоумышленника оказывается возможность расшифровывать все сообщения, зашифрованные на секретном ключе (что не дает ему значительного преимущества), а также самостоятельно зашифровывать любые сообщения на открытом ключе.
|
|
|
|
|
|
|
|
|
Для проверки целостности данных часто применяют цифровую подпись, например на основе алгоритма RSA. Подпись реализуется путем зашифрования значения хэш-функции от защищаемых данных на секретном ключе RSA. Для проверки целостности необходимо снова вычислить значение хэш-функции от тех же данных, а потом сравнить его со значением, расшифрованным открытым ключом RSA. Если при подписи используется плохая хэш-функция, то возможно подделать подписанные данные, не взламывая RSA.
|
|
|
|
|
|
|
|
|
Если блочный шифр используется для шифрования больших объемов неслучайных данных, имеющих повторения, то, анализируя повторения в блоках шифртекста, можно получить некоторую информацию о содержимом файла. Блочный алгоритм в режиме ЕСВ в файлах SealedMedia В зашифрованных PDF-файлах SealedMedia (с расширением spdf) легко обнаружить несколько одинаковых 8-байтных блоков, повторяющихся с периодом в 40 байт. Только на основании этой информации можно предположить, что используется блочный алгоритм шифрования с размером блока 8 байт (например DES), зашифрован PDF-файл, а повторяющиеся блоки относятся к таблице перекрестных ссылок. Каждая запись этой таблицы занимает 20 байт, и большин- ство элементов таблицы различаются в пяти-шести байтах.
|
|
|
|
|
|
|
|
|
Генераторы псевдослучайных чисел требуются практически в любом приложении, использующем криптографию. И очень часто разработчики не уделяют достаточно внимания характеристикам используемого генератора. Вот несколько иллюстраций. Пожалуй, самый известный пример — ошибка в реализации протокола SSL (Secure Sockets Layer) в браузере Netscape. Взлом 128-битового шифрования в Netscape Компания Netscape разработала протокол SSL и реализовала его в своем браузере. Данные, передаваемые посредством SSL, зашифровывались алгоритмом RC4 со 128-битовым ключом. 17 сентября 1995 года Йен Голдберг (Ian Goldberg) сообщил о том, что ему в сотрудничестве с Дэвидом Вагнером (David Wagner) удалось обнаружить уязвимость в процедуре выбора 128-битового ключа для алгоритма RC4. Недостаток процедуры заключался в том, что начальное состояние генератора псевдослучайных чисел основывалось на трех значениях: идентификаторе процесса, генерирующего ключ, идентификаторе его родительского процесса и текущем времени. Учитывая то, что значительную часть информации о номерах процессов и времени можно было предугадать, пространство возможных ключей сократилось с 2128 до 220, и на поиск ключа шифрования уходило всего 25 секунд.
|
|
|
|
|
|
|
|
|
Использование правильно реализованного алгоритма шифрования еще не гарантирует, что данные будут действительно хорошо защищены. Так, весь- ма распространенная ошибка при использовании потоковых шифров — шифрование нескольких потоков на одном ключе. Как было показано ранее, потоковые шифры вроде RC4 являются генераторами гаммы, которая накладывается на шифруемые данные путем сложения по модулю 2. Имея только зашифрованные данные, получить открытый текст без знания ключа практически невозможно. Однако, зная шифртекст и соответствующий ему открытый текст, не составляет труда вычислить фрагмент гаммы, соответствующей ключу. Это нормальная ситуация, т. к. хороший алгоритм шифрования по фрагменту гаммы не должен позволять определить ключ или другие фрагменты гаммы. Но если на том же самом ключе был зашифрован другой поток данных, то, зная шифртекст и фраг- мент гаммы, элементарно вычислить открытый текст, соответствующий известному фрагменту гаммы. Тот факт, что один и тот же ключ потокового алгоритма, работающего в режиме OFB, нельзя использовать дважды, можно отнести к азам криптографии, которые должен знать каждый, имеющий дело с информационной безопасностью. Однако даже разработчики, называющие себя профессионалами в области защиты программ от компьютерного пиратства, грешат невыполнением прописных истин.
|
|
|
|
|
|
|
|
|
Многие криптографические алгоритмы весьма сложны, и при их реализации легко допустить ошибку. Хотя можно допустить ошибку и при реализации сравнительно простых алгоритмов. В феврале 2001 года в почтовой рассылке cryptography-digest происходило обсуждение ошибки при реализации алгоритма шифрования Alleged RC4 на языке ADA. История алгоритма шифрования RC4 Потоковый шифр RC4 был разработан Роном Ривестом в 1987 году. Этот шифр позволяет использовать ключи размером от 8 до 2048 бит (с шагом 8). В RC4 для зашифрования и расшифрования применяются одни и те же действия: генерируется гамма, которая накладывается на шифруемое сообщение путем сложения по модулю 2 (операция XOR). RC4 применяется в таких продуктах, как Microsoft Office, Lotus Notes, Adobe Acrobat и др. Алгоритм RC4 является собственностью компании RSA Data Security, Inc. Его описание никогда не было опубликовано и предоставлялось партнерам только после подписания соглашения о неразглашении. Однако в сентябре 1994 года в списке рассылки Cipherpunks (Шифропанки) кто-то анонимно опубликовал алгоритм шифрования, который на всех известных тестовых значениях совпадал с RC4. С тех пор сам алгоритм перестал быть секретом, но название RC4 остается торговой маркой. То есть, чтобы получить право заявлять, что в коммерческом программном продукте используется RC4, необходимо приобрести лицензию на этот алгоритм у RSA Data Security. А без лицензии можно утверждать лишь то, что "используется алгоритм, похожий на RC4 и совпадающий с ним на всем известном множестве тестов". Именно поэтому на языке ADA был реализован Alleged (предполагаемый) RC4.
|
|
|
|
|
|
|
|
|
Криптографические алгоритмы сами по себе проходят многократную экспертную проверку, прежде чем начинают массово применяться на практике. Бывают, конечно, редкие исключения, но они скорее только подтверждают правило. Одна из криптографических хэш-функций, разработанных Роном Ривестом (Ronald Rivest), называется MD4. Аббревиатура MD расшифровывается как Message Digest (дайджест сообщения). В течение примерно 2-х лет после опубликования спецификации MD4 было представлено как минимум 3 серьезных независимых работы, посвященных криптоанализу хэшфункции MD4. В одной из этих работ описывался взлом последних двух из трех раундов алгоритма обработки данных, а в остальных работах — взлом первых двух раундов. И хотя алгоритм в целом устойчив ко всем этим методам взлома, MD4 не рекомендуется использовать в реальных приложениях. Не лишен недостатков и потоковый алгоритм шифрования, используемый в архивах формата ZIP. Этот алгоритм был разработан Роджером Шлафлай (Roger Schlafly). Внутреннее состояние шифра определяется тремя 32-битовыми регистрами, инициализируемыми следующими значениями: keyO = 0x12345678; keyl = 0x23456789; key2 = 0x34567890;
|
|
|
|
|
|
|