Фишинг openssl: V выдает себя за A

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

A генерирует дайджест H из F со своим закрытым ключом
A прикрепляет A_pub, H к своим параметрам запроса, отправляет F и объявляет источник/отправителя как A
B проверяет дайджест H с помощью A_pub, предоставленного для F

по-видимому, это выглядит нормально. Но если какой-либо другой компонент V делает то же самое с V_pub и объявляет себя A, B все еще думает, что запрос пришел от A, так как этот H создается с помощью V_prv openssl подтверждает, что все в порядке.

Я хочу дать защиту от этой атаки V

Я использую ecparam secp112r1, чтобы минимизировать длину ключа. и ключи неоднократно меняются.

-- ИЗМЕНИТЬ --

A, B и V — это компоненты приложения, идентифицируемые уникальным URI. В настоящее время он предназначен для ограничения безопасного потока страниц. например вы можете предположить, что A, B, V будут URL-адресами. Я хочу, чтобы только A мог перейти к B, и только B может перейти к C .... и я не хочу поддерживать для этого глобальный/общий сеанс приложения. поэтому If B может просто проверить происхождение этой ссылки на основе специальных параметров, которые A передали ей без состояния/без сеанса. и чем более общим он может быть, тем более многоразовым он будет для реализации и в других сценариях.

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

мне приходит в голову еще один способ - запросить исходный URL-адрес открытого ключа. Однако я хочу избежать этого.


person Neel Basu    schedule 31.03.2012    source источник
comment
Есть две возможности: 1) A и V — это просто произвольные идентификаторы (например, «первая сторона» и «вторая сторона»), и не имеет значения, какой из них какой, пока B сохраняет их прямолинейность. 2) A и V не произвольны и обозначают что-то конкретное. В этом случае вы не получите полезного ответа, если не скажете нам, что это такое.   -  person David Schwartz    schedule 01.04.2012


Ответы (1)


Этот метод не может проверить личность отправителя, только то, что ключи являются совпадающей парой.

Как правило, B уже обладает некоторой доверенной информацией, которую он может использовать для проверки личности A. Информация, как правило, является копией A_pub, которая была предварительно проверена или подписана доверенной третьей стороной, и в этом случае B должен иметь доступ к открытому ключу этой третьей стороны.

Без этой дополнительной информации B не может подтвердить личность A.

person Adam Liss    schedule 31.03.2012
comment
а можно поподробней какие есть варианты? - person Neel Basu; 31.03.2012
comment
Основой инфраструктуры открытых ключей является то, что каждое устройство поддерживает хранилище доверенных сертификатов. Он использует эти сертификаты для аутентификации других устройств. Но невозможно проверить идентификацию устройства, используя только информацию, полученную от этого устройства; должна быть цепочка доверия, которая заканчивается информацией, которая, как известно, является подлинной. - person Adam Liss; 31.03.2012
comment
Как я могу сгенерировать сертификат на A_pub с помощью командной строки openssl? - person Neel Basu; 31.03.2012
comment
Для получения информации см. openssl.org/docs/apps/x509.html#. Раньше проект OpenVPN включал скрипт, который генерировал сертификаты; возможно, проверьте и там. - person Adam Liss; 31.03.2012