Повышаем безопасность закрытых ssh-ключей / Хабр

Decim

Decim — потоковый шифр на основе РСЛОС, разработанный Комом Бербаином, Оливером Биллетом, Анн Канту, Николя Куртуа, Бландином Дебре, Генри Гильбертом, Луи Губином, Алином Гуже, Луи Гранбуланом, Седериком Ларду, Марин Минье, Томасом Порнином и Эрвом Сибе.

Самое главное требование к шифрам — устойчивость к различным видам атак. Алгебраические атаки — одна из самых серьёзных угроз безопасности потоковым шифрам. Если соотношение между комбинацией битов секретного ключа и порождённым её битом гамма является простым или легко предсказуемым, то и нахождение алгебраических зависимостей между комбинацией битов секретного ключа и битом ключевого потока (гамма) так же является простой задачей. Для усложнения соотношений между комбинацией битов секретного ключа (или комбинацией битов начального состояния РСЛОС, порождённого секретным ключом) и битов ключевого потока (гамма) используют нелинейную фильтрующую функцию от комбинации битов секретного ключа и механизмы десинхронизации между комбинацией битов секретного ключа и битами ключевого потока (гамма). Оба этих механизма (нелинейная фильтрующая функция и механизм десинхронизации между комбинацией битов РСЛОС и битами ключевого потока) являются основой работы и основным средством предотвращения криптоаналитических атак шифра Decim.
Начало работы потокового шифра Decim начинается с ввода 80-битного секретного ключа и 64-битного открытого ключа (Initialization Vector). Затем, с помощью определённых линейных комбинаций битов К и битов IV, использования нелинейной фильтрующей функции F и применения механизма выборки ABSG вычисляется начальное состояние 192 битного РСЛОС. После выполнения всех этих операций начинается генерация ключевого потока $z=(zt) | t$zt$

Misty1

Блочный алгоритм шифрования, созданный на основе «вложенных» сетей Фейстеля 1995 году криптологом Мицуру Мацуи (Mitsuru Matsui) совместно с группой специалистов для компании Mitsubishi Electric. MISTY — это аббревиатура Mitsubishi Improved Security Technology, а также инициалы создателей алгоритма: в разработке алгоритма также приняли участие Тэцуя Итикава (Tetsuya Ichikawa)

MISTY1 — это сеть Фейстеля с изменчивым числом раундов (рекомендовано 8, но оно может быть любым, кратным 4). Алгоритм работает с 64-битными блоками и использует 128-битный ключ. Шифр стал победителем среди алгоритмов, шифрующих 64-битные блоки, на Европейском конкурсе NESSIE.

В результате анализа алгоритма, проведённого в рамках этого конкурса и до него, эксперты сделали вывод, что никаких серьёзных уязвимостей данный алгоритм не имеет (они особо отметили, что именно структура алгоритма с вложенными сетями Фейстеля существенно затрудняет криптоанализ).

Аналогичные исследования были проведены и в рамках проекта CRYPTREC по выбору криптоалгоритмов для электронного правительства Японии. Эксперты проекта весьма положительно оценили алгоритм MISTY1, сделав вывод, что у него высокий запас криптостойкости, алгоритм имеет высокую скорость шифрования и весьма эффективен для аппаратной реализации.

MISTY1 запатентованный алгоритм. Однако исконный владелец патента, Mitsubishi Electric, объявил, что будет выдавать лицензию на использование бесплатно.MISTY1 был разработан на основе теории «подтверждённой безопасности» против дифференциального и линейного криптоанализа. Этот алгоритм был спроектирован, чтобы противостоять различным криптоатакам, известным на момент создания.

С момента публикации мисти было проведено много исследований, чтобы оценить его уровень безопасности. Некоторые результаты по исследованию мисти с меньшим количеством раундов представлены ниже.

Дифференциальный криптоанализ высокого порядка эффективно применяется к блочным шифрам с малой степенью. Мисти содержит 2 look-up таблицы S7 и S9, обе с малой ad, 3 и 2 соответственно. Поэтому достаточно много статей посвящены дифференциальному криптоанализу мисти.

Невозможный дифференциальный анализ также применим к блочному шрифту с одинаковым значением подключа в каждом раунде (или в каждом n-ом раунде). И так как MISTY1 имеет достаточно простую систему расширения ключа, вполне естественно рассмотреть применимость данной атаки к данному алгоритму. Лучший результата для подобной атаки был также получен при рассмотрении алгоритма без FL функций.

Шифр стал победителем среди алгоритмов, шифрующих 64-битные блоки, на Европейском конкурсе NESSIE (2000—2003 года). В результате анализа алгоритма, проведённого в рамках этого конкурса и до него, эксперты сделали вывод, что никаких серьёзных уязвимостей данный алгоритм не имеет (они особо отметили, что именно структура алгоритма с вложенными сетями Фейстеля существенно затрудняет криптоанализ).

Аналогичные исследования были проведены и в рамках проекта CRYPTREC по выбору криптоалгоритмов для электронного правительства Японии. Эксперты проекта весьма положительно оценили алгоритм MISTY1, сделав вывод, что у него высокий запас криптостойкости, алгоритм имеет высокую скорость шифрования и весьма эффективен для аппаратной реализации.

Существует модификация данного алгоритма — MISTY2. Однако она не получила широкой известности вследствие низкого уровня криптостойкости.

Так же получила распространение модификация MISTY1 — алгоритм KASUMI — в 2000 году стал стандартом шифрования мобильной связи W-CDMA.

KASUMI (от японск.霞 (hiragana かすみ, romaji kasumi) — туман, mist) — блочный шифр, использующийся в сетях сотовой связи 3GPP. Также обозначается A5/3 при использовании в GSM и GEA3 в GPRS.

KASUMI разработан группой SAGE (Security Algorithms Group of Experts), которая является частью Европейского Института по Стандартизации в области Телекоммуникаций (ETSI). За основу был взят существующий алгоритм MISTY1 и оптимизирован для использования в сотовой связи.

KASUMI использует 64-битный размер блока и 128-битный ключ в 8-раундовой схеме Фейстеля. В каждом раунде используется 128-битный раундовый ключ, состоящий из восьми 16-битных подключей, полученных из исходного ключа по фиксированной процедуре генерации подключей.

Rabin

Этот алгоритм был опубликован в январе 1979 года Майклом О. Рабином. Криптосистема Рабина была первой асимметричной криптосистемой, в которой восстановление всего открытого текста из зашифрованного текста можно было доказать так же сильно, как факторинг.

Генерация ключа:

Выберем два больших разных числа p и q. Можно выбрать$ p equiv q equiv 3  mod  4$$n = p  * q$$p$$q$$n$$p$$q$$n$

Генерация ключа

  1. выбираются два случайных числа p и q с учётом следующих требований:
  2. числа должны быть большими (см. разрядность);
  3. числа должны быть простыми;
  4. должно выполняться условие:$ p ≡ q ≡ 3 mod 4$.

Выполнение этих требований сильно ускоряет процедуру извлечения корней по модулю р и q;

вычисляется число

$n = p * q$

  1. число n — открытый ключ;
  2. числа p и q — закрытый.

ШифрованиеИсходное сообщение m (текст) шифруется с помощью открытого ключа — числа n по следующей формуле: $c = m²  mod  n.$
Благодаря использованию умножения по модулю скорость шифрования системы Рабина больше, чем скорость шифрования по методу RSA, даже если в последнем случае выбрать небольшое значение экспоненты.

Расшифровка Для расшифровки сообщения необходим закрытый ключ — числа p и q. Процесс расшифровки выглядит следующим образом:

  1. Сначала, используя алгоритм Евклида, из уравнения $y_{p}cdot p y_?cdot q=1$ находят числа $y_{p}$ и $y_?$ ;
  2. далее, используя китайскую теорему об остатках, вычисляют четыре числа:

    ${begin{matrix}r&=&(y_{p}cdot pcdot m_? y_?cdot qcdot m_{p}),{bmod {,}}n\-r&=&n-r\s&=&(y_{p}cdot pcdot m_?-y_?cdot qcdot m_{p}),{bmod {,}}n\-s&=&n-send{matrix}}$

Одно из этих чисел является истинным открытым текстом m.

P.S. Если кому интересно, то почти по всем алгоритмам, представленным в данной статье, имеются архивы, с реализацией на С, С или Ассемблере(на каком-то из языков), соответственно реализации не мои, скажу больше использовать их навряд ли получится, хотя кто знает.

P.P.S. Была идея также сделать Сравнительную таблицу, но для начала хотелось бы узнать, по каким именно параметрам Вы хотели бы увидеть сравнение.

P.P.P.S Для статейного конкурса «Нетологии», Ссылка на сайт, Ссылка на блог.

Safer

Семейство симметричных блочных криптоалгоритмов на основе подстановочно-перестановочной сети. Основной вклад в разработку алгоритмов внёс Джеймс Мэсси. Первый вариант шифра был создан и опубликован в 1993 году.

Существует несколько вариантов шифра, отличающихся друг от друга длиной ключа шифрования и размерами блоков исходного текста.

Первая разновидность алгоритма — SAFER K-64 была разработана Джэймсом Мэсси для калифорнийской корпорации «Cylinc» в 1993 году. Опубликованный в том же году, алгоритм имел блок и ключ шифрования длиной в 64 бита. Для него рекомендовалось использовать 6 раундов шифрования.

Однако, из-за необходимости увеличить длину ключа до 128 бит (так как была обнаружена слабость в первоначальном варианте алгоритма), Мэсси разработал новый вариант шифра SAFER K-128, который был опубликован на следующий год после SAFER K-64. Новый алгоритм включал в себя расписание ключей, разработанное министерством внутренних дел Сингапура, и в дальнейшем использовался им для различных целей. Также для этого алгоритма рекомендовалось использовать 10 (максимум 12) раундов шифрования.

Спустя некоторое время в первых вариантах алгоритма выявились некоторые слабости, обнаруженные Ларсом Кнудсеном и Шоном Мёрфи. Это повлекло за собой создание новых версий алгоритма, названных SAFER SK-64 и SAFER SK-128, в которых расписание ключей было изменено в соответствии со схемой, предложенной Кнудсеном.

Читайте также:  КриптоПро | Подпись PDF-документов с использованием КриптоПро .NET

Также был разработан вариант с длиной ключа, уменьшенной до 40 бит — SAFER SK-40. Сокращение «SK» в названии алгоритмов расшифровывается как «Strengthened Key schedule» (Усиленное расписание ключей). Для новых вариантов шифра предлагалось использовать не 6, а по крайней мере 8 (максимум 10) раундов шифрования.

Алгоритм SAFER был разработан в 1998 году калифорнийской корпорацией Cylinc совместно с Армянской академией наук для участия в конкурсе AES, на котором прошёл лишь первый отборочный тур. Данный шифр имеет входной блок длиной 128 бит и размер ключа 128, 192 или 256 бит.

Последней из созданных разновидностей алгоритма SAFER является SAFER , разработанный Мэсси в 2000 году и ставший дальнейшим развитием алгоритма SAFER . Алгоритм принял участие в европейском конкурсе алгоритмов NESSIE, где был представлен в двух вариантах:

шифр с 64-битным блоком и 128-битным блоком. Он прошёл во вторую фазу конкурса, но не был выбран в набор рекомендуемых NESSIE криптографических примитивов. Эксперты сочли, что шифр слишком медленный на всех машинах, кроме 8-битных (таких как смарт-карты), а запас безопасности шифра слишком мал.

Алгоритмы SAFER не являются частной собственностью и не защищены авторскими правами, то есть могут быть использованы без каких-либо ограничений. Поскольку они целиком состоят из простых байтовых операций (за исключением поворота байтов при генерации ключей), эти алгоритмы могут быть реализованы процессорами с малой разрядностью.

Sc2000

Симметричный блочный криптоалгоритм, разработанный фирмой Fujitsu и университетом г. Токио в 2000 году. В алгоритме используется 128-битный блок и ключ длиной от 128 до 256 бит (совместим со стандартом AES и поддерживает типовые длины ключа — 128/192/256).

Был рекомендован комитетом CRYPTREC в 2003 году для использования государственными учреждениями Японии, однако в 2021 году был перемещён в список «кандидатов» в рекомендованные шифры. Участвовал в конкурсе Nessie, но не попал во второй раунд, хотя и показал достаточную устойчивость к атакам — причиной стала его слишком сложная структура и опасение в вероятности скрытых уязвимостей.

SC2000 — шифр со смешанной структурой: здесь используются элементы сети Фейстеля и подстановочно-перестановочной сети. Алгоритм выполняет 6.5 (для 128-битного ключа) и ли 7.5 (для ключа длиной 192—256 бит) раундов шифрования. Каждый из раундов состоит из запросов к таблице подстановки, добавления ключа и бесключевой двухраундовой сети Фейстеля.

Расширение ключа в алгоритме SC2000 выполняется в два этапа: основе секретного симметричного ключа генерируется промежуточный ключ, затем из промежуточного ключа вычисляется нужное количество фрагментов расширенного ключа.

Один раунд шифра довольно сложен и состоит из следующих операций: Входное 128-битное значение делится на 4 подблока по 32 бита, на каждый из них операцией XOR накладывается 32-битный фрагмент расширенного ключа. Выполняется операция T, которая разбивает блок данных на 32 подблока по 4 бита каждый.

Каждый 4-битный подблок проходит через таблицу подстановки S4, которая выглядит так: (2,5,10,12,7,15,1,11,13,6,0,9,4,8,3,14)

Далее блок данных разбивается на 32-битные подблоки с помощью операции T’, обратной к операции T. Выполняется наложение операцией XOR других четырёх фрагментов расширенного ключа. Значения первой пары подблоков передаются на вход функции F. В результате выполнения данной функции получаются два 32-битных значения, которые накладываются операцией XOR на два первых подблока. Первая пара подблоков меняется местами с второй парой подблоков, затем выполняется повторно прошлый шаг трансформации.

Skipjack

Блочный шифр, разработанный Агентством национальной безопасности США в рамках проекта Capstone[en]. После разработки сведения о шифре были засекречены. Изначально он предназначался для использования в чипе Clipper для защиты аудио информации, передаваемой по сетям правительственной телефонной связи, а также по сетям мобильной и беспроводной связи. Позже алгоритм был рассекречен.

Skipjack являлся одной из инициатив, предложенных в рамках проекта Capstone. Руководили проектом Агентство национальной безопасности (АНБ) и Национальный институт стандартов и технологий (НИСТ), финансируемые правительством США. Официальная дата начала инициативы — 1993 год.

Алгоритм шифрования был разработан в 1980 году, а первая его реализация была получена в 1987 году. Шифр был предназначен для использования в чипе Clipper, встраиваемом в защищаемое оборудование. При этом Skipjack использовался только для шифрования сообщений, а депонирование ключа для возможности последующего использования уполномоченными органами — наиболее обсуждаемый аспект использования шифра — достигалось за счёт отдельного механизма, называемого Law Enforcement Access Field.

Изначально проект был засекречен и по этой причине подвергся огромной критике. Для повышения общественного доверия и оценки алгоритма были призваны несколько академических исследователей. По причине отсутствия времени для самостоятельного тщательного исследования, эксперты сконцентрировались на изучении представленного АНБ описания процесса разработки и оценки алгоритма.

  1. Принимая во внимание, что стоимость вычислительных мощностей уменьшается вдвое каждые 18 месяцев, лишь через 36 лет стоимость взлома Skipjack полным перебором сравняется со стоимостью взлома DES сегодня.
  2. Риск взлома шифра с помощью более быстрых способов, включая дифференциальный криптоанализ, незначителен. Алгоритм не имеет слабых ключей и свойства комплементарности.
  3. Устойчивость Skipjack к криптоанализу не зависит от секретности самого алгоритма.

Шифр был опубликован в открытый доступ 24 июня 1998 года. В августе 2021 года НИСТ принял новые принципы использования криптографических стандартов, в которых отозвал сертификацию алгоритма Skipjack для правительственных целей.

Skipjack использует 80-битный ключ для шифрования/дешифрования 64-битных блоков данных. Это несбалансированная сеть Фейстеля с 32 раундами.

Ssh – в чем разница между ключами rsa, dsa и ecdsa, которые использует ssh?

Вам все они нужны?
Нет, вашему ssh-серверу нужен только один, а клиенту требуется только поддержка этого одного типа ключа для ssh-соединений.


RSA, DSA, ECDSA, EdDSA и & amp; Ed25519 все используются для цифровой подписи, но только RSA также может использоваться для шифрования.

RSA ( Ривест-Шамир-Адлеман ) является одной из первых криптосистем с открытым ключом и широко используется для безопасной передачи данных. Его безопасность основывается на целочисленной факторизации , поэтому безопасный RNG никогда не нужен. По сравнению с DSA RSA быстрее для проверки подписи, но медленнее для генерации.

DSA ( Алгоритм цифровой подписи ) является федеральным стандартом обработки информации для цифровых подписей. Его безопасность зависит от дискретной логарифмической задачи . По сравнению с RSA DSA быстрее для генерации подписи, но медленнее для проверки. Безопасность может быть нарушена , если используются плохие генераторы чисел .

ECDSA ( Алгоритм цифровой подписи на эллиптической кривой ) представляет собой реализацию DSA (алгоритм цифровой подписи) на основе эллиптической кривой. Криптография с эллиптической кривой способна обеспечить относительно тот же уровень безопасности, что и RSA, с меньшим ключом. Это также разделяет недостаток DSA в том, что он чувствителен к плохим RNG.

EdDSA ( Алгоритм цифровой подписи кривой Эдвардса ) представляет собой схему цифровой подписи, использующую вариант сигнатуры Шнорра на основе скрученных кривых Эдвардса [ 118]. Создание подписи в EdDSA является детерминированным, а ее безопасность основана на неразрешимости некоторых дискретных логарифмических проблем, поэтому она безопаснее, чем DSA & amp; ECDSA, которая требует высокого качества случайности для каждой подписи.

Ed25519 , является схемой подписи EdDSA, но с использованием SHA-512/256 и Curve25519 ; это защищенная эллиптическая кривая , которая обеспечивает лучшую безопасность , чем DSA, ECDSA и amp; EdDSA, plus имеет лучшую производительность (не заметно по-человечески).


Другие примечания
Ключи RSA являются наиболее широко используемыми, и поэтому, похоже, лучше всего поддерживаются.

ECDSA, (представленный в OpenSSH v5.7 ), в вычислительном отношении легче DSA, но разница не заметна, если у вас нет машины с очень низкой вычислительной мощностью.

Начиная с OpenSSH 7.0 , SSH больше не поддерживает ключи DSA (ssh-dss) по умолчанию. Ключ DSA используется везде, в соответствии со стандартом SSH (RFC 4251 и последующие).

Ed25519 был введен в oepnSSH 6.5 .

Twofish

Симметричный алгоритм блочного шифрования с размером блока 128 бит и длиной ключа до 256 бит. Число раундов 16. Разработан группой специалистов во главе с Брюсом Шнайером. Являлся одним из пяти финалистов второго этапа конкурса AES. Алгоритм разработан на основе алгоритмов Blowfish, SAFER и Square.

Отличительными особенностями алгоритма являются использование предварительно вычисляемых и зависящих от ключа узлов замены и сложная схема развёртки подключей шифрования. Половина n-битного ключа шифрования используется как собственно ключ шифрования, другая — для модификации алгоритма (от неё зависят узлы замены).

Читайте также:  Ошибка валидата или криптопро

Twofish разрабатывался специально с учетом требований и рекомендаций NIST для AES:

  1. 128-битный блочный симметричный шифр
  2. Длина ключей 128, 192 и 256 бит
  3. Отсутствие слабых ключей
  4. Эффективная программная (в первую очередь на 32-битных процессорах) и аппаратная реализация
  5. Гибкость (возможность использования дополнительных длин ключа, использование в поточном шифровании, хэш-функциях и т. д.).
  6. Простота алгоритма — для возможности его эффективного анализа.

Алгоритм Twofish возник в результате попытки модифицировать алгоритм Blowfish для 128-битового входного блока. Новый алгоритм должен был быть легко реализуемым аппаратно (в том числе использовать таблицы меньшего размера), иметь более совершенную систему расширения ключа (key schedule) и иметь однозначную функцию F.

В результате, алгоритм был реализован в виде смешанной сети Фейстеля с четырьмя ветвями, которые модифицируют друг друга с использованием криптопреобразования Адамара (Pseudo-Hadamar Transform, PHT).

Возможность эффективной реализации на современных (для того времени) 32-битных процессорах (а также в смарт-картах и подобных устройствах) — один из ключевых принципов, которым руководствовались разработчики Twofish.

Например, в функции F при вычислении PHT и сложении с частью ключа K намеренно используется сложение, вместо традиционного xor. Это дает возможность использовать команду LEA семейства процессоров Pentium, которая за один такт позволяет вычислить преобразование Адамара $(T_0 2T_1 K_2r 9)~mod~2^{32} * (T_0 2T_1 K_2r 9)~mod~2^{32}$
Алгоритм Twofish не запатентован и может быть использован кем угодно без какой-либо платы или отчислений. Он используется во многих программах шифрования, хотя и получил меньшее распространение, чем Blowfish.

What is the difference between dsa and rsa?

Referring, https://web.archive.org/web/20210212143556/http://courses.cs.tamu.edu:80/pooch/665_spring2008/Australian-sec-2006/less19.html

RSA
RSA encryption and decryption are commutative
hence it may be used directly as a digital signature scheme
given an RSA scheme {(e,R), (d,p,q)}
to sign a message M, compute:
S = M power d (mod R)
to verify a signature, compute:
M = S power e(mod R) = M power e.d(mod R) = M(mod R)

RSA can be used both for encryption and digital signatures,
simply by reversing the order in which the exponents are used:
the secret exponent (d) to create the signature, the public exponent (e)
for anyone to verify the signature. Everything else is identical.

DSA (Digital Signature Algorithm)
DSA is a variant on the ElGamal and Schnorr algorithms.
It creates a 320 bit signature, but with 512-1024 bit security
again rests on difficulty of computing discrete logarithms
has been quite widely accepted.

DSA Key Generation
firstly shared global public key values (p,q,g) are chosen:
choose a large prime p = 2 power L
where L= 512 to 1024 bits and is a multiple of 64
choose q, a 160 bit prime factor of p-1
choose g = h power (p-1)/q
for any h<p-1, h(p-1)/q(mod p)>1
then each user chooses a private key and computes their public key:
choose x<q
compute y = g power x(mod p)

DSA key generation is related to, but somewhat more complex than El Gamal.
Mostly because of the use of the secondary 160-bit modulus q used to help
speed up calculations and reduce the size of the resulting signature.

DSA Signature Creation and Verification

to sign a message M
generate random signature key k, k<q
compute
r = (g power k(mod p))(mod q)
s = k-1.SHA(M) x.r (mod q)
send signature (r,s) with message

to verify a signature, compute:
w = s-1(mod q)
u1= (SHA(M).w)(mod q)
u2= r.w(mod q)
v = (g power u1.y power u2(mod p))(mod q)
if v=r then the signature is verified

Signature creation is again similar to ElGamal with the use of a
per message temporary signature key k, but doing calc first mod p,
then mod q to reduce the size of the result. Note that the use of
the hash function SHA is explicit here. Verification also consists of
comparing two computations, again being a bit more complex than,
but related to El Gamal.
Note that nearly all the calculations are mod q, and
hence are much faster.

But, In contrast to RSA, DSA can be used only for digital signatures

DSA Security
The presence of a subliminal channel exists in many schemes (any that need a random number to be chosen), not just DSA. It emphasises the need for “system security”, not just a good algorithm.

Конфигурация системы

В следующих таблицах содержится краткий обзор конфигурации системы,
используемой для тестирования.

Таблица 1. Конфигурация клиентской системы

Кол-во клиентов

Компьютер/CPU

Кол-воCPU

Память

Жесткий диск

Программное обеспечение

1

Compaq Proliant 1130 МГц

2

1 Гбайт

16,9 Гбайт

Windows 2000 Advanced Server SP 2

Application Center Test

Таблица 2. Конфигурация Web-сервера

Кол-во серверов

Компьютер/CPU

Кол-воCPU

Память

Жесткий диск

Программное обеспечение

1

Compaq Proliant 1000 МГц

2

1 Гбайт

16,9 Гбайт

Windows 2000 Advanced Server SP 2

.NET Framework SP1

Таблица 3. Конфигурация сервера приложений

Кол-во серверов

Компьютер/CPU

Кол-воCPU

Память

Жесткий диск

Программное обеспечение

1

Compaq Proliant 1126 МГц

2

1 Гбайт

16,9 Гбайт

Windows 2000 Advanced Server SP 2

.NET Framework SP1

Таблица 4. Конфигурация сервера базы данных

Кол-во серверов

Компьютер/CPU

Кол-воCPU

Память

Жесткий диск

Программное обеспечение

1

Compaq Proliant 700 МГц

4

4 Гбайта

18 Гбайт

Windows 2000 Advanced Server SP 2

SQL Server Enterprise
Edition SP 2

Повышаем защиту ключа с использованием pkcs#8

Итак, нам нужен алгоритм получения симметричного ключа шифрования из пароля, который работал бы медленно, чтобы злоумышленнику потребовалось больше вычислительного времени для подбора пароля.

Для ssh-ключей существует несколько стандартов с неуклюжими названиями:


Я не знаю, почему

ssh-keygen

до сих пор генерирует ключи в традиционном формате, несмотря на то, что уже много лет существуют лучшие альтернативы. Дело не в совместимости с серверным софтом: закрытые ключи никогда не покидают пределы вашего компьютера. К счастью, существующие ключи достаточно легко преобразовать в формат PKCS#8:

$ mv test_rsa_key test_rsa_key.old
$ openssl pkcs8 -topk8 -v2 des3 
    -in test_rsa_key.old -passin 'pass:super secret passphrase' 
    -out test_rsa_key -passout 'pass:super secret passphrase'

Если попробовать использовать новый файл ключа в формате PKCS#8, можно обнаружить, что все работает так же как и раньше. Посмотрим, что теперь находится внутри файла.

$ cat test_rsa_key
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIOu/S2/v547MCAggA
MBQGCCqGSIb3DQMHBAh4q o4ELaHnwSCBMjA ho9K816gN1h9MAof4stq0akPoO0
CNvXdtqLudIxBq0dNxX0AxvEW6exWxz45bUdLOjQ5miO6Bko0lFoNUrOeOo/Gq4H
dMyI7Ot1vL9UvZRqLNj51cj/7B/bmfa4msfJXeuFs8jMtDz9J19k6uuCLUGlJscP
    ... десу-десу ...
-----END ENCRYPTED PRIVATE KEY-----


Обратите внимание на то, что первая и последняя строки изменились (

BEGIN ENCRYPTED PRIVATE KEY

вместо

BEGIN RSA PRIVATE KEY

), а заголовки

Proc-TypeDEK-Info

исчезли. Фактически, в файле хранятся данные во все том же формате ASN.1:

$ openssl asn1parse -in test_rsa_key
    0:d=0  hl=4 l=1294 cons: SEQUENCE
    4:d=1  hl=2 l=  64 cons: SEQUENCE
    6:d=2  hl=2 l=   9 prim: OBJECT            :PBES2
   17:d=2  hl=2 l=  51 cons: SEQUENCE
   19:d=3  hl=2 l=  27 cons: SEQUENCE
   21:d=4  hl=2 l=   9 prim: OBJECT            :PBKDF2
   32:d=4  hl=2 l=  14 cons: SEQUENCE
   34:d=5  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:3AEFD2DBFBF9E3B3
   44:d=5  hl=2 l=   2 prim: INTEGER           :0800
   48:d=3  hl=2 l=  20 cons: SEQUENCE
   50:d=4  hl=2 l=   8 prim: OBJECT            :des-ede3-cbc
   60:d=4  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:78ABEA3810B6879F
   70:d=1  hl=4 l=1224 prim: OCTET STRING      [HEX DUMP]:C0FA1A3D2BCD7A80DD61F4C0287F8B2D...


Воспользуемся

, чтобы рассмотреть структуру ASN.1:

Sequence (2 elements)
|- Sequence (2 elements)
|  |- Object identifier: 1.2.840.113549.1.5.13            // using PBES2 from PKCS#5
|  `- Sequence (2 elements)
|     |- Sequence (2 elements)
|     |  |- Object identifier: 1.2.840.113549.1.5.12      // using PBKDF2 — yay! :)
|     |  `- Sequence (2 elements)
|     |     |- Byte string (8 bytes): 3AEFD2DBFBF9E3B3    // salt
|     |     `- Integer: 2048                              // iteration count
|     `- Sequence (2 elements)
|          Object identifier: 1.2.840.113549.3.7          // encrypted with Triple DES, CBC
|          Byte string (8 bytes): 78ABEA3810B6879F        // initialization vector
`- Byte string (1224 bytes): C0FA1A3D2BCD7A80DD61F4C0287F8B2DAB46A43E...  // encrypted key blob

Здесь упоминаются OID (Object identifier) — глобально-уникальные цифровые идентификаторы. По ним мы узнаем, что используется схема шифрования

, функция получения ключа

и алгоритм шифрования

. Функция хеширования не указана явно, значит,

используется

Хранение OID в файле хорошо тем, что ключи можно обновить без смены формата контейнера (если, например, будет изобретен лучший алгоритм шифрования).

Также мы видим, что в ходе получения ключа шифрования выполняется 2048 итераций. Это гораздо лучше, чем однократное применение хеш-функции при использовании традиционного формата ssh-ключей — перебор паролей потребует больше времени. В настоящий момент количество итераций прописано в коде OpenSSL, я надеюсь, в будущем его можно будет настраивать.

Результаты тестирования производительности

Ключевые показатели производительности – это пропускная способность и
время ожидания. Для заданного объема возвращаемых данных пропускная
способность – это число клиентских запросов, обработанных за
определенную единицу времени, обычно за одну секунду.

Читайте также:  Подписание документов PDF в Adobe Acrobat Reader.

Поскольку пиковая
пропускная способность может произойти за время ответа, что недопустимо
с точки зрения применимости, отслеживалось время ожидания, измеряемое
как время ответа с помощью отчета, сгенерированного Application Center
Test для каждого тестового прогона.

Примечание. Показатели производительности, сгенерированные для
пропускной способности и времени ожидания, являются лишь основанием для
сравнения этих технологий. Эти показатели не представляют собой
абсолютную производительность.

Аутентификация клиента

Сервер аутентифицирует клиента, принимая его удостоверение и проверяя
достоверность этого удостоверения.  Рассмотрим подробнее
аутентификационные режимы, поддерживаемые Microsoft® ASP.NET, включая
Microsoft IIS 5.0 и аутентификацию на уровне ASP.NET Forms.

Получение страницы по умолчанию

В данном тесте отдельный запрос отправляется клиенту одним
пользователем ACT. После запроса страницы пользователь должен
аутентифицировать себя путем предоставления своего имени пользователя и
пароля. После аутентификации пользователя страница возвращается простой
строкой.

Примечание. Этим тестом не моделируется сценарий, где после
аутентификации в первом запросе пользователь отправляют последующие
запросы путем предъявления Web-серверу своеобразного билета,
свидетельствующего об уже выполненной аутентификации.

Рис. 1. Аутентификационные режимы: число запросов в секунду и
время ответа

Примечания:

  • Anonymous (Анонимный): аутентификация не выполняется.
  • Учетные записи пользователей хранились в Active Directory,
    который располагался отдельно от Web- сервера.
  • FormsAuth_AD: используется аутентификация на уровне ASP.NET
    Forms. Учетные записи пользователей хранятся в Active Directory.
  • salt, криптографически
    сгенерированным случайным числом), для дополнительной защиты и
    снижения угрозы, связанной с атаками по словарю. Этот подход лучше,
    чем хранение зашифрованной версии пароля пользователя, поскольку в
    нем отсутствуют проблемы с управлением ключами, связанные с методами
    шифрования.

Как и ожидалось, самой высокой оказалась производительность при
анонимном аутентификационном режиме, в котором аутентификация не
выполняется. Web-сервер не требует от клиента посылать удостоверение
пользователя перед просмотром Web-страницы. Этот режим больше всего
подходит для общедоступного сайта.

Типизация ка

Итак, представляю вам статью, в которой собраны, известные и не очень, криптографические алгоритмы. Оговоримся, что статья не претендует на новаторство, или уникальность. Скорее краткий справочник, кто-то даже назовет это прикроватным чтивом. Существуют различные классификации криптоалгоритмов, например, такая:


Для удобства я буду использовать деление на группы по количеству ключей:

  1. Бесключевые КА — не используют в вычислениях никаких ключей;
  2. Одноключевые КА — работают с одним ключевым параметром (секретным ключом);
  3. Двухключевые КА — на различных стадиях работы в них применяются два ключевых параметра: секретный и открытый ключи.
Терминология:
  • Открытый (исходный) текст — данные (не обязательно текстовые), передаваемые без использования криптографии.
  • Шифротекст, шифрованный (закрытый) текст — данные, полученные после применения криптосистемы (обычно — с некоторым указанным ключом).
  • Ключ — параметр шифра, определяющий выбор конкретного преобразования данного текста. В современных шифрах криптографическая стойкость шифра целиком определяется секретностью ключа (принцип Керкгоффса).
  • Шифр, криптосистема — семейство обратимых преобразований открытого текста в шифрованный.
  • Шифрование — процесс нормального применения криптографического преобразования открытого текста на основе алгоритма и ключа, в результате которого возникает шифрованный текст.
  • Расшифровывание — процесс нормального применения криптографического преобразования шифрованного текста в открытый.
  • Асимметричный шифр, двухключевой шифр, шифр с открытым ключом — шифр, в котором используются два ключа, шифрующий и расшифровывающий. При этом, зная лишь ключ зашифровывания, нельзя расшифровать сообщение, и наоборот.
  • Открытый ключ — тот из двух ключей асимметричной системы, который свободно распространяется. Шифрующий для секретной переписки и расшифровывающий — для электронной подписи.
  • Секретный ключ, закрытый ключ — тот из двух ключей асимметричной системы, который хранится в секрете.
  • Криптоанализ — наука, изучающая математические методы нарушения конфиденциальности и целостности информации.
  • Криптоаналитик — учёный, создающий и применяющий методы криптоанализа.
  • Криптографическая атака — попытка криптоаналитика вызвать отклонения в атакуемой защищённой системе обмена информацией. Успешную криптографическую атаку называют взлом или вскрытие.
  • Дешифрование (дешифровка) — процесс извлечения открытого текста без знания криптографического ключа на основе известного шифрованного. Термин дешифрование обычно применяют по отношению к процессу криптоанализа шифротекста (криптоанализ сам по себе, вообще говоря, может заключаться и в анализе криптосистемы, а не только зашифрованного ею открытого сообщения).
  • Криптографическая стойкость — способность криптографического алгоритма противостоять криптоанализу.
  • Имитозащита — защита от навязывания ложной информации. Другими словами, текст остаётся открытым, но появляется возможность проверить, что его не изменяли ни случайно, ни намеренно. Имитозащита достигается обычно за счет включения в пакет передаваемых данных имитовставки.
  • Имитовставка — блок информации, применяемый для имитозащиты, зависящий от ключа и данных.
  • Электронная цифровая подпись, или электронная подпись — асимметричная имитовставка (ключ защиты отличается от ключа проверки). Другими словами, такая имитовставка, которую проверяющий не может подделать.
  • Центр сертификации — сторона, чья честность неоспорима, а открытый ключ широко известен. Электронная подпись центра сертификации подтверждает подлинность открытого ключа.
  • Хеш-функция — функция, которая преобразует сообщение произвольной длины в число («свёртку») фиксированной длины. Для криптографической хеш-функции (в отличие от хеш-функции общего назначения) сложно вычислить обратную и даже найти два сообщения с общей хеш-функцией.

Формат закрытого ключа, защищенного паролем

Теперь усложним жизнь потенциальному злоумышленнику, который смог украсть закрытый ключ — защитим его паролем. Что произошло с файлом?

$ ssh-keygen -t rsa -N 'super secret passphrase' -f test_rsa_key
$ cat test_rsa_key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D54228DB5838E32589695E83A22595C7

3 Mz0A4wqbMuyzrvBIHx1HNc2ZUZU2cPPRagDc3M rv XnGJ6PpThbOeMawz4Cbu
lQX/Ahbx UadJZOFrTx8aEWyZoI0ltBh9O5 ODov vc25Hia3jtayE51McVWwSXg
wYeg2L6U7iZBk78yg sIKFVijxiWnpA7W2dj2B9QV0X3ILQPxbU/cRAVTd7AVrKT
    ... и так далее ...
-----END RSA PRIVATE KEY-----

Заметим, что добавились две строки с заголовками, а результат декодирования Base64-строки больше не является валидным ASN.1. Дело в том, что структура ASN.1. зашифрована. Из заголовков узнаем, какой алгоритм использовался для шифрования:

в режиме CBC. 128-битная шестнадцатеричная строка в заголовке

DEK-Info

— это вектор инициализации (IV). Ничего необычного здесь нет, все распространенные криптографические библиотеки умеют работать с используемыми здесь алгоритмами.

Но как из пароля получается ключ AES? Я не нашел этого в документации и поэтому был вынужден разбираться в исходниках OpenSSL. Вот что я выяснил насчет получения ключа шифрования:

  1. Первые 8 байт вектора инициализации дописываются к паролю (по сути, являются солью).
  2. От полученной строки один раз берется MD5-хеш.

Для проверки расшифруем закрытый ключ, взяв вектор инициализации из заголовка

DEK-Info

$ tail -n  4 test_rsa_key | grep -v 'END ' | base64 -d | 
  openssl aes-128-cbc -d -iv D54228DB5838E32589695E83A22595C7 -K $(
    ruby -rdigest/md5 -e 'puts Digest::MD5.hexdigest(["super secret passphrase",0xD5,0x42,0x28,0xDB,0x58,0x38,0xE3,0x25].pack("a*cccccccc"))'
  ) |
  openssl asn1parse -inform DER

Эта команда выведет параметры ключа RSA. Если вы хотите просто увидеть ключ, есть способ и проще:

$ openssl rsa -text -in test_rsa_key -passin 'pass:super secret passphrase'

Но я хотел показать, как именно ключ AES получается из пароля, чтобы обратить внимание на два уязвимых места:

Хватит использовать rsa. серьезно.

Повышаем безопасность закрытых ssh-ключей / Хабр

(Twilio

использует RSA ключи)

Повышаем безопасность закрытых ssh-ключей / Хабр
(Travis CI до сих пор использует 1024 битные ключи и не даёт их заменить)

RSA был важной вехой в развитии безопасных коммуникаций, но последние два десятилетия криптографических исследований сделали его устаревшим. Алгоритмы на эллиптических кривых как для обмена ключами, так и для цифровых подписей были стандартизированы еще в 2005 году и с тех пор были интегрированы в интуитивно понятные и устойчивые к неправильному использованию библиотеки, такие как libsodium.

Тот факт, что RSA все еще широко используется в наши дни, указывает как на ошибку со стороны криптографов из-за неадекватного описания рисков, присущих RSA, так и со стороны разработчиков, переоценивающих свои способности успешно развертывать его. Security сообщество должно начать думать об этом как о стадной проблеме — хоть некоторые из нас и могут быть в состоянии ориентироваться в чрезвычайно опасном процессе настройки или реализации RSA, исключения дают понять разработчикам, что в некотором роде RSA еще актуален.

Несмотря на множество предостережений и предупреждений на StackExchange и GitHub README, очень немногие люди верят, что именно они испортят RSA, и поэтому они продолжают поступать безрассудно. В конечном счете ваши пользователи будут платить за это. Вот почему мы все должны согласиться с тем, что использование RSA в 2021 году совершенно неприемлемо. Без исключений.

Оригинал статьи на английском.

VirgilSecurity, Inc. разрабатывает open source developer friendly SDK и сервисы для защиты данных. Мы позволяем разработчикам использовать существующие алгоритмы с минимальным риском для безопасности.

P.S. рекоммендую так же почитать о встраивании бекдора в публичный ключ RSA.

Оцените статью
ЭЦП Эксперт
Добавить комментарий