Цифровая подпись человека в центре предотвращения атак - PullRequest
1 голос
/ 13 апреля 2019

У меня на стороне клиента сгенерирована цифровая подпись (JavaScript). Затем подпись проверяется на сервере Java. Для проверки подписи я передаю бэкэнду (значение подписи, открытый ключ и сообщение для проверки). Пока все хорошо, но тогда возникает вопрос - а вдруг кто-то выполнит мужчину в средней атаке? Он может легко сгенерировать подпись и отправить его - (значение подписи, открытый ключ и сообщение.). В некотором смысле это делает мою текущую реализацию недостаточно безопасной.

Как мне этого избежать? Насколько я исследовал, я должен проверить, что открытый ключ отправляется от соответствующего клиента, и это делается через CA (центр сертификации). Однако, в моем случае, я делаю это как последний проект в университете, и я не уверен, как подойти к этой проблеме.

Должен ли я генерировать сертификат открытого ключа на стороне клиента и отправлять их вместе с открытым ключом? Можно ли генерировать самозаверяющие сертификаты на стороне клиента, а затем проверять их на серверной части?

1 Ответ

2 голосов
/ 14 апреля 2019

Что, если кто-то совершает человека в середине атаки

MITM может заменить подпись и открытый ключ

Как этого избежать?

В основном используют SSL / TLS и / или ...

Насколько я исследовал, я должен убедиться, что отправленный открытый ключ исходит от соответствующего клиента иэто делается через CA (центр сертификации)

Если вы используете центр сертификации, каждый сертификат подписывается с помощью закрытого ключа сертификата корневого CA (или subCA), поэтому MITM не может создатьдействительный сертификат, потому что он не владеет корневым закрытым ключом.

На стороне сервера вы можете проверить, что подпись выполнена с помощью закрытого ключа, который соответствует сертификату, выданному ЦС.Обратите внимание, что в этом случае вы работаете с сертификатами, а не только с открытыми ключами (сертификат охватывает открытый ключ).

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

Вы объяснили свое решение, но не фон.Я имею в виду, почему вы решили, что вам нужна цифровая подпись?без этой информации я не могу вам посоветовать.

Должен ли я сгенерировать сертификат открытого ключа на стороне клиента и отправить его вместе с открытым ключом?

Читать мои предыдущиекомментарий

Можно ли сгенерировать самозаверяющие сертификаты на стороне клиента, а затем проверить их на серверной части?

Да, конечно.Вы можете сгенерировать пару ключей на стороне клиента и связать открытый ключ с учетной записью пользователя во время процесса регистрации (с использованием безопасного канала)

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

...