Size: a a a

2020 June 23

m

maniac in Distributed
асимметричная криптография не требует сертификатов с центральной подписывальней, можно
источник

CI

Co. In in Distributed
V
> безопасный канал связи без сертификатов
Можно, разрешаю.
> ключ которого уже захардкожен в клиенте
Прям из методички "как не надо делать".
"Как не надо делать", я понимаю что отозвать такой паблик кей нельзя будет, в случае его компрометации и в случае замены ключа на сервере нужно будет обновить его и в софте. Такое решение мне самому не нравится. Но из альтернатив как понимаю только DH
источник
2020 June 24

PZ

Pavel Zlatovratskii in Distributed
Co. In
"Как не надо делать", я понимаю что отозвать такой паблик кей нельзя будет, в случае его компрометации и в случае замены ключа на сервере нужно будет обновить его и в софте. Такое решение мне самому не нравится. Но из альтернатив как понимаю только DH
DH подвержено MitM без подписания.
источник

PZ

Pavel Zlatovratskii in Distributed
Тебе в любом случае надо как-то валидировать что сервер - твой, а не MitM
источник

CI

Co. In in Distributed
Pavel Zlatovratskii
Тебе в любом случае надо как-то валидировать что сервер - твой, а не MitM
Как понимаю схема следующая.

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

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

CI

Co. In in Distributed
Client.SendToServer(Encrypt(key: PublicKeyServer, payload: PublicKeyClient))
Server.ResponseToClient(payload: PublicKeyClient + Sign(key: PrivateKeyServer, payload: PublicKeyClient))
Client.Verify(key: PublicKeyServer, payload: PublicKeyClient, sign: Sign)

А дальше уже асимметричное шифрование, двух участников знаящих паблики друг-друга
источник

@

@mr_tron in Distributed
Co. In
Подскажите. Можно организовать безопасный канал связи без сертификатов? То есть есть сервер с парой ключей, публичный ключ которого уже захардкожен в клиенте. При условии что человек по средине имеет копию клиента, а следовательно знает этот публичный ключ, но поменять его не может,так как клиент пользователя будет брать свой захардкоженный
Смотри. Передача информации между двумя серверами требует как-то сперва передать информацию о сервере. Его днс имя, айпи адрес, что-то ещё, чтобы один нашёл другой. Это надо сделать по какому-то каналу связи. По этому же каналу можно передать хэш публичного ключа одного из серверов
источник

KP

Kirill Pimenov in Distributed
V
> безопасный канал связи без сертификатов
Можно, разрешаю.
> ключ которого уже захардкожен в клиенте
Прям из методички "как не надо делать".
Любое сколько-нибудь безопасное приложение с сервером как раз так и устроено. Даже если там https простой, с удостоверенным сертификатом — то всё равно конкретный ключ лучше прибить гвоздями, чтобы давление на CA не позволило условному китайскому правительству перехватывать соединение.
Даже браузер Хром так делает для гугловых доменов, кстати
источник

CI

Co. In in Distributed
@mr_tron
Смотри. Передача информации между двумя серверами требует как-то сперва передать информацию о сервере. Его днс имя, айпи адрес, что-то ещё, чтобы один нашёл другой. Это надо сделать по какому-то каналу связи. По этому же каналу можно передать хэш публичного ключа одного из серверов
Нет канала связи, везде враги. Есть только код клиента в который захардкожены айпишки серваков и их паблики, ни доменных имён, ни сертификатов
источник

KP

Kirill Pimenov in Distributed
Co. In
Как понимаю схема следующая.

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

Вопрос. Может ли в этот процесс как-то вмешаться MITM? Нужно ли шифровать публичный ключ клиента, публичным ключём сервера, чтоб только он мог его расшифровать, а MITM не мог узнать паблик кей клиента, или эти данные можно отправлять по общедоступному каналу?
В общем, делать так можно, если ты будешь очень-очень аккуратен.
Я бы посоветовал взять любую TLS1.3 (не раньше) либу, и в ней запинить ключ и набор шифров поновее для твоего сервера
источник

KP

Kirill Pimenov in Distributed
Co. In
Нет канала связи, везде враги. Есть только код клиента в который захардкожены айпишки серваков и их паблики, ни доменных имён, ни сертификатов
Ну, я предполагаю что сертификаты есть, просто доверенным центром не подписаны
источник

KP

Kirill Pimenov in Distributed
А можешь чуть побольше контекста дать, что за сервера, что за протокол?
источник

@

@mr_tron in Distributed
Co. In
Нет канала связи, везде враги. Есть только код клиента в который захардкожены айпишки серваков и их паблики, ни доменных имён, ни сертификатов
смотри. айпишники захардкожены. значит канал есть - средство доставки приложения. захардкодь туда сертификат рутовый и всё
источник

KP

Kirill Pimenov in Distributed
А то может для тебя и TLS это оверкилл, и тебе достаточно noise просто воткнуть? Там вопрос доверия ключам как раз вынесен из протокола, и никаких CA вообще нет
источник

CI

Co. In in Distributed
Kirill Pimenov
А то может для тебя и TLS это оверкилл, и тебе достаточно noise просто воткнуть? Там вопрос доверия ключам как раз вынесен из протокола, и никаких CA вообще нет
Сделаю умный вид что я понял о чём речь)
источник

CI

Co. In in Distributed
@mr_tron
смотри. айпишники захардкожены. значит канал есть - средство доставки приложения. захардкодь туда сертификат рутовый и всё
В само приложение? Не совсем понял про канал
источник

@

@mr_tron in Distributed
Co. In
В само приложение? Не совсем понял про канал
ну если ты доверяешь что приложение доедет до пользователя с верным адресом, то ты можешь доверить что оно доедет и с неизменным рутовым сертификатом
источник

KP

Kirill Pimenov in Distributed
Co. In
Сделаю умный вид что я понял о чём речь)
Ну, есть такой протокол transport level security, TLS.
Это именно он обеспечивает буковку S в https.
Он в общем нормальный, выстраданный криптопротокол — но сложный и тяжеловесный.
Если у тебя вдруг не хттп-апи там, а какие-нибудь кастомные клиенты с бинарным протоколом — стоит взять более простой (и от этого более надёжный/быстрый) протокол шифрования, который называется noise
источник

CI

Co. In in Distributed
Kirill Pimenov
Ну, есть такой протокол transport level security, TLS.
Это именно он обеспечивает буковку S в https.
Он в общем нормальный, выстраданный криптопротокол — но сложный и тяжеловесный.
Если у тебя вдруг не хттп-апи там, а какие-нибудь кастомные клиенты с бинарным протоколом — стоит взять более простой (и от этого более надёжный/быстрый) протокол шифрования, который называется noise
TCP, с бинарными данными, если быть еще точнее то gRPC. Там из коробки есть TLS, но мне сертификаты показались избыточными, вот решил выяснить можно ли без них обойтись, если не использовать доменные имена и функцию отзыва центром
источник

KP

Kirill Pimenov in Distributed
Co. In
TCP, с бинарными данными, если быть еще точнее то gRPC. Там из коробки есть TLS, но мне сертификаты показались избыточными, вот решил выяснить можно ли без них обойтись, если не использовать доменные имена и функцию отзыва центром
Если там какой-то из общепринятых gRPC сервер, то там TLS уже сделан скорее всего. Так что и нечего лезть.
Разбирайся как в твоей клиентской библиотеке делать certificate pinning и вперёд
источник