Как защитить Kryonet (SSLSocketChannel)

У меня есть рабочие игровые серверы + клиентская система, использующая Kryonet, которую я хочу защитить. Я прочитал много исходного кода для Kryo и Kryonet, а также немного о java.nio (SocketChannels и SSL). Я достаточно хорошо разбираюсь в шифровании при работе с Java, но я не уверен, правильно ли я понял все концепции, когда речь идет о Kryonet и SocketChannels с использованием SSL.

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

Затем я посмотрел на изменение источника Kryonet для использования SSLSockets, но я увидел, что Kryonet использует неблокирующий ввод-вывод, и из того, что я прочитал, использование SSLSocket вместо Socket не будет хорошо при работе с SocketChannels? Здесь я действительно в растерянности и не уверен, стоит ли это усилий, поэтому я надеялся, что кто-то, кто лучше разбирается в Kryonet и SocketChannels, может мне немного помочь. Кажется невозможным защитить Kryonet, но я действительно не хочу переключаться на этом этапе моего проекта, поэтому любые предложения очень приветствуются!


person Andreas Toresäter    schedule 24.05.2016    source источник


Ответы (1)


Вы правы, простое шифрование не является безопасным, даже если вы решите проблему распределения ключей, если Kryonet также не выполняет все действия SSL, начиная с одноранговой аутентификации.

В Java нет SSLSocketChannel. Вы должны сделать всю тяжелую якку самостоятельно с SocketChannel и милым старым SSLEngine, что требует практически докторской степени. правильно ездить.

См. тег jsse, passim,< /em> за многочисленные мои посты о SSLEngine, которые я не буду здесь повторять.

person user207421    schedule 24.05.2016
comment
Не тот ответ, на который я надеялся, но спасибо, теперь я точно знаю. Позже я рассмотрю некоторые сторонние решения для SSLSocketChannels. Сейчас я просто буду использовать обычный SSLSocket для входа пользователя и отправлю обратно токен сеанса, который можно использовать для входа на серверы Kryonet, таким образом я смогу, по крайней мере, защитить пароль пользователя. - person Andreas Toresäter; 25.05.2016