Общие сведения об алгоритме ECDH (пример CNG)
Протокол согласования ключей ECDH (Elliptic Curve Diffie-Hellman) позволяет двум пользователям создать общее секретное соглашение.Это можно сделать по незащищенному открытому каналу без предварительного обмена какими-либо личными данными.Общее секретное соглашение обычно используется для получения материала ключа.Для шифрования сообщений с помощью полученного материала ключа можно использовать симметричный алгоритм, например алгоритм AES.
В примере защищенного обмена данными с шифрованием CNG показана CNG-реализация алгоритмов ECDH и AES.Алиса, Боб и Мэллори создают ключи шифрования с помощью методов Run при создании объектов Communicator.
Математический аппарат протокола ECDH
Работа протокола ECDH основана на двух открытых параметрах: p и g.Параметр p — это большое простое число, а параметр g — целое число меньше p.Эти два параметра передаются по незащищенному каналу.После того как Алиса и Боб получат два открытых параметра, они выбирают закрытые целые числа.Алиса выбирает число a, а Боб — число b.Эти значения называются закрытыми ключами.
После этого на основе открытых параметров и закрытых ключей Алиса и Боб создают открытые ключи.Алиса использует операцию (g^a) mod p, а Боб — операцию (g^b) mod p.Это ассиметричные ключи, поскольку они не совпадают.
Алиса и Боб обмениваются открытыми ключами и с их помощью вычисляют общее секретное соглашение.Алгоритм ECDH устроен таким образом, что Алиса и Боб обязательно получают одно и то же общее секретное соглашение, хотя они и не знают закрытых ключей друг друга.
Примечание
В тайне остаются только значения a, b и g^ab = g^ba.Все остальные параметры являются открытыми.
Любой злоумышленник, которые перехватит сообщения, сможет получить значения p, g и оба открытых ключа.Однако не существует алгоритма, который позволил бы получить общее секретное соглашение на основании четырех открытых значений, но без использования закрытых ключей Алисы и Боба.
Расшифровка сообщения, зашифрованного по алгоритму ECDH, методом перебора всех возможных значений ключа по сложности сравнима с задачей дискретного логарифмирования.Преимущество же алгоритма ECDH в том, что он позволяет обеспечить ту же степень защиты даже с ключами меньшей длины, поскольку вместо логарифмических кривых в нем используются эллиптические кривые.
Пример использования алгоритма ECDH
В следующем примере для демонстрации работы алгоритма ECDH используются небольшие целые значения.
Алиса и Боб договариваются о следующих значениях простого числа p и базового целого числа g:
p = 83, g = 8
Алиса выбирает секретное целое число a = 9 и пересылает Бобу значение (g^a) mod p:
(8^9) mod 83 = 5
Боб выбирает секретное целое число b = 21 и пересылает Алисе значение (g^b) mod p:
(8^21) mod 83 = 18
Алиса вычисляет значение ( ( (g^b) mod p)^a) mod p:
(18^9) mod 83 = 24
Боб вычисляет значение ( ( (g^a) mod p)^b) mod p:
(5^21) mod 83 = 24
Алиса и Боб получили одно и то же значение (24), потому что g^(ab) = g^(ba).Это значение является общим секретным соглашением.С его помощью Алиса и Боб получают материал ключа для шифрования сообщений с помощью алгоритма AES.
В этом примере создается общее секретное соглашение, которое имеет значение 24.Поскольку это значение невелико, полученное с его помощью зашифрованное сообщение можно будет легко получить методом подбора.В реальных же ситуациях p, g, a и b будут представлять собой гораздо большие значения, и для вычисления общего секретного соглашения потребуется компьютер.
Классы CNG, используемые в приведенном примере защищенного обмена данными, реализуют отвлеченную сложную математику.Они позволяют разработчику сосредоточиться на применении безопасных решений вместо перемножения больших чисел.
Ограничения применения протокола
Протокол обмена ключами ECDH не защищает от атак типа "злоумышленник в середине", поскольку проверка подлинности отправителей открытых ключей не выполняется.Если нарушитель Мэллори перехватывает открытый ключ Алисы, он может заменить его своим открытым ключом и переслать Бобу.Мэллори может также перехватить открытый ключ Боба, заменить его своим ключом и переслать Алисе.В результате Мэллори сможет легко расшифровывать все сообщения, которыми обмениваются Алиса и Боб.Он сможет подменять сообщения, заново зашифровывать их с помощью собственных ключей, а затем отправлять получателям.
Для решения этой проблемы Алиса и Боб могут подписать свои открытые ключи с помощью цифровых подписей, прежде чем обменяться ими.Это можно сделать двумя способами.
Воспользоваться защищенным каналом, например голосовой связью или надежным курьером, чтобы стороны могли обменяться ключами цифровой подписи.
Воспользоваться общедоступным центром сертификации, чтобы предоставить обеим сторонам надежные цифровые подписи.
В обоих случаях для идентификации отправителей открытых ключей необходимо использовать схему внешней проверки подлинности.В примере CNG показано, что может произойти, если отправители ключей не проходят проверку подлинности.Он написан специально, чтобы сделать возможным использование описанной уязвимости.
Симметричные и асимметричные ключи
Асимметричные системы, такие как ECDH, работают очень медленно.Поэтому их не используют для шифрования больших сообщений.Вместо них используют симметричные системы, например AES, которые работают во много раз быстрее.
В большинстве криптографических решений асимметричная система используется для получения симметричного общего секретного соглашения.После этого на основании общего секретного соглашения создается материал ключа, который используется для шифрования сообщений с помощью симметричного алгоритма.
В примере безопасного обмена данными CNG эта ситуация моделируется следующим образом.
Для получения симметричного ключа шифрования (общего секретного соглашения) используется асимметричный алгоритм — CNG-реализация алгоритма ECDH (класс ECDiffieHellmanCng).
Затем этот ключ используется методом ECDiffieHellmanCng.DeriveKeyMaterial CNG для получения материала ключа.Этот материал ключа используется CNG-реализацией симметричного алгоритма AES (класс Aes) для шифрования сообщения.