В данной работе мы показываем, что создание собственных криптосистем или попытка их улучшить связаны с большими трудностями. Желательно изпользовать только стандартные, уже проверенные большим числом экспертов.
Несмотря на то, что криптография успешно применяется для защиты информации [1], имеется ряд ограничений. Отметим некоторые из них:
- Криптография становится бесполезной, если она осуществлена некорректно.
- Криптография не является решением всех проблем безопастности
- Криптографию нельзя создавать самому.
В данной работе остановимся на третьем пункте. Криптография включает в себя множество криптосистем. Криптосистема должна быть надежной. Надежность криптосистемы может быть нарушена в основном из–за ошибок в реализации криптоалгоритмов или из-за неправильного их применения. Для подтверждения вышесказанного приведем несколько видов атак. Рассмотрим пластиковую карту для платежей, использующую блочные шифры. Данная карта имеет пароль, необходимый для обналичивания денег в терминале. Злоумышленник, завладевший этой картой, может выяснить количество времени, неообходимого для шифрования и расшивровки пароля. Если время зависит от количества битов пароля, то после некоторого числа попыток злоумышленник сможет полностью раскрыть пароль. Также возможно подключение карты к аппарату, измеряющему ее мощность во время операций. Нарисовав график зависимости тока от времени, возможно прочитать ключ по битам, наблюдая необходимую мощность карты для проделывания разных операций. [2]
В картах, где данная иформация маскируется, воможно использование атаки под названием «дифференциальный анализ питания». Т.е. измеряется мощность, которую карта затрачивает на проведение большого количества алгоритмов шифрования. После нахождения минимальной зависимости тока от битов пароля возможна расшифровка пароля целиком. Эта же проблема касается многоядерных процессоров, где шифрование идет на одном ядре, а код злоумышленника – на другом. С помощью промахов кеш памяти алгоритма шифрования возможно определение пароля. Кредитную карту злоумышленник может испортить, т.е. разогнать ее или разогреть. Если кредитная карта будет работать некорректно, то получится неправильный шифр, что достаточно для обнаружения ключа. Выход в том, что перед тем , как выдавать ответ алгоритма, необходимо проверить корректность вычисления. Это довольно трудно.
Рассмотрим линейные атаки:
Pr[ m[l1] XOR ⋯ XOR m[lr] XOR c[nj] XOR⋯XOR c[nv] = k[i1] XOR ⋯ XOR k[iu] ] = ½ + ε, т.е. наблюдается минимальная зависимость между шифром, сообщением и ключом (c,m,k). В случае DES, ε = 1/221, возможно полностью раскрыть ключ приблизительно за 243 попыток, что намного меньше, чем в случае поиска с перебором. Т.е. желательно не создавать свои блочные шифры, а использовать готовые библиотеки.
Рассмотрим основные атаки на MAC. Часть кода в Python из библиотеки Keyczar имеет следующий вид:
def Verify(key, msg, sig_bytes):
return HMAC(key, msg) == sig_bytes
Верификация работает следующим образом: с помощью этого кода повторно вычисляется HMAC сообщения и сравнивается с верным. Проблема в том,что сравнение происходит побайтно и при первом несоответствии выдает сообщение о неравенстве строк. Это приводит к серьезной «временной» атаке на данную библиотеку.
Есть несколько способов защиты от этой атаки, мы приведем один из них:
return false if sig_bytes имеет неправильную длину
result = 0
for x, y in zip( HMAC(key,msg) , sig_bytes):
result |= ord(x) ^ ord(y)
returnresult == 0
Здесь код написан так, чтобы любые 2 строки сравнивались в продолжении одних и тех же промежутков времени вне зависимости от результата.
Обратим внимание на ошибку, который допустил Apple в iOS. Из-за лишней строчки goto fail; происходит переход в конец алгоритма и верификация подписи не будет работать правильно, т.к. обусловливает возможность не верного вывода о том, что что операция обовления SHA1 прошла успешно. Т.е. в данном случае лишняя строчка кода приводит к атаке. [3].
Исходя из приведенных данных,возможен взлом стандартных криптосистем, проверенных множеством экспертов, не говоря уже о собственных.
Существуют определенные проблемы, связанные с попытками улучшения стандартных криптосистем, например, улучшения производительности RSA (шифрование или расшифровка):
Ускорим расшифровку RSA с помощью маленького privatekeyd (d ≈ 2128); cd = m (mod N)
Wiener’87: если d<N0.25, то RSA небезопасно. BD’98: если d<N0.292,то RSA небезопасно
Считается, что небезопасно, если d<N0.5. За последние 14 лет не было обоснований
того, что N0.5 является минимальным возможным размером. Никому не удавалось превзойти результат N0.292.
Практически все попытки улучшить RSA, как правило, приводили к катастрофе, что позволяет сделать вывод о проблемах при отклонении от стандартных схем его использования.
Исходя из выше сказанного, создание или усовершенствования существующих криптосистем требует серьезной экспертной оценки. На сегодняшний день создаются новые гибридные криптосистемы[4], которые используют комбинацию стандартных криптосистем, поэтому вероятность того, что они безопастны, выше. Несмотря на это, исходя из нашего анализа, большинство этих систем являются уязвимыми к атаке “man in the middle”.
Библиографический список
- Тилборг Ж. Основы криптологии. М.: Мир, 2006 , 471 с.
- Kocher, Jaffe, Deferential Power Analysis, 1998, http://www.cryptography.com/public,
- Adam Lengly Apple’s SSL/TLS bug (22 Feb 2014), https://www.imperialviolet.org/2014/02/22/applebug.html
- Иванов М. А. Криптографические методы защиты информации в компьютерных системах и сетях: учебно-справ. издание – М. : КУДИЦ-ОБРАЗ, 2001. – 368 с.
Количество просмотров публикации: Please wait