Электронная подпись в Internet of Things
К 2020 году Gartner обещает 26 миллиардов «умных устройств», построенных, в большинстве своём, на проприетарных копеешных аппаратных платформах и лишенных возможности установки обновлений безопасности. Как мы будем обеспечивать защиту каналов связи в таком зоопарке?
Цели защиты канала связи может быть две: обеспечение целостности и конфиденциальности.
Конфиденциальность обеспечивается с помощью симметричного шифрования (например, AES256). Даётся она практически бесплатно за счёт аппаратной реализации AES, при этом трафик растёт незначительно, криптостойкость высокая, технология обкатанная. Симметричное шифрование сводит проблему защиты канала связи к проблеме обеспечения секретности ключа, которая, к сожалению, в мире IoT не решаема. Если секретный ключ один на все устройства, то велик шанс его утечки. Даже лицензионное соглашение и NDA не спасут.
Поэтому необходим обмен сессионными ключами и электронная подпись для защиты от MITM.
Если необходима только целостность сообщений, то единственным решением без раскрытия секретного ключа на конечном устройстве будет использование ЭП.
И тут весь букет проблем IoT расцветает пышным цветом: мало памяти, слабые мощности, низкая скорость каналов связи, необходимость быстрого холодного старта (в случае одностороннего канала связи) и обязательная совместимость со старыми протоколами. Всё это очень плохо совмещается с электронной подписью и асимметричной криптографией в целом.
Чтобы обойти эти ограничения, изобретают новые варианты криптоалгоритмов:
- Патентованный Algebraic Eraser , который на днях раскритиковали и который значительно экономит клиентские ресурсы;
- ISO/IEC 9796-2:2002, который используется в банковских чипах EMV. Главная его особенность — размер подписи ~22 байта (правда подпись неотчуждаема от сообщения);
- TESLA Broadcast Authentication Protocol, который использует перевернутые цепочки хэшей для подписи (интересная идея!);
- и другие...
Проще всего, правда, использовать ECDSA из самого популярного стека протоколов OpenSSL. Это популярная криптобиблиотека, которая используется почти везде, начиная от отечественных криптошлюзов и заканчивая криптовалютами. Кроме того, ECDSA с набором популярных кривых реализована во многих HSM.
Размер подписи зависит напрямую от выбранной кривой (посмотреть все доступные кривые можно командой openssl ecparam -list_curves) и уменьшить его нельзя (можно сэкономить 1-2 байта на кодировке, потеряв совместимость).
Если у вас большое количество коротких команд размером несколько байт — то электронная подпись увеличит ваш трафик в 10 раз :(. При этом нужно иметь ввиду, что слишком короткая кривая может привести к раскрытию приватного ключа, если у злоумышленника есть возможность обзора/генерации большого количества подписанных пакетов.
- Эллиптическая кривая secp109 (109 бит) была взломана в 2002 (10 000 PC, 549 дней);
- Кривая 112бит была взломана в 2009 (3.5 месяца на кластере из 200 PS3);
- Чтобы взломать 131 бит необходимо 4 * 10^5 ядролет для AMD Phenom 9500 (с возможным сокращением времени на 25% для некоторых кривых);
- Эллиптическая кривая secp160k1 считается достаточной по стойкости до 2020 года;
- Кривая secp256k1 (openssl обзывает её prime256k1) является стандартом де-факто в мире ECDSA (биткоин активно ее использует);
- Кривая secp384 рекомендована NSA для защиты до уровня «сов.секретно».
Если размер подписи является определяющим параметром — то криптопротоколы типа TESLA, использующие хэш в качестве подписи, являются привлекательным решением, так как хэш может быть обрезан до любой необходимой вам длины (потеряв при этом, естественно, в стойкости). RSA/ECDSA подпись, к сожалению, обрезана/архивирована быть не может.
Ещё одна проблема ECDSA (да и многих других алгоритмов ЭП) — наличие правильного генератора случайных чисел (PRNG, ГСЧ), который в IoT взять проблематично . В ECDSA генератор случайных чисел используются не только при генерации ключевой пары, но и при каждой подписи. Причём известно, как минимум, уже две атаки, которые серьезно подорвали доверие к ECDSA (хотя косяк то был на стороне программистов): взлом PS3, кража биткоинов с Android кошельков. Существует модификация ECDSA (RFC6979), которая обходится без случайных чисел, но она в настоящий момент не распространена.
Большой вопрос касательно электронной подписи — это устойчивость к квантовому криптоанализу. Это, к счастью, неактуально ещё сегодня, но может быть актуальным (а может и не быть) через лет эдак 50, но про это в следующий раз.