Защита Java RMI с помощью криптографии с ключом Asymmetri c - PullRequest
1 голос
/ 22 апреля 2020

У меня есть требование для защиты вызовов Java RMI с помощью Asymmetri c key cryptography (RSA) в приложении для обмена файлами Peer 2 Peer 2.

Я ссылался this , но он использует фразу-пароль (Symmetri c Key) для XOR сообщений. Я хочу, чтобы клиент шифровал поток сокетов RMI с помощью ключа publi c сервера, а сервер должен использовать свой закрытый ключ для расшифровки потока ввода сокетов. Предположение: у каждого узла в приложении совместного использования файлов P2P есть ключ publi c друг друга

, так как может быть несколько клиент-серверов (узлов P2P), клиенты должны использовать ключ publi c соответствующего сервера для зашифруйте данные потока сокета.

Я не смог найти другую ссылку, используя ключ asymmetri c для защиты вызовов RMI. Пожалуйста, помогите.

ОБНОВЛЕНИЕ:

Я студент, и это университетский проект, в котором я должен обеспечить безопасность связи, происходящей через RMI, с использованием криптографии RSA. Так что у меня нет выбора.

В предыдущих проектах я создавал систему обмена файлами P2P в стиле Napster & Gnutella. Теперь задача состоит в том, чтобы использовать RSA для шифрования связи между узлами с использованием их открытых c -приватных ключей.

Я очень ценю любую помощь / руководство в этом направлении. Пожалуйста, не закрывайте этот вопрос.

ОБНОВЛЕНИЕ 2 Реализация криптографии RSA без использования встроенных библиотек, за исключением java.math.BigInteger и java.security.SecureRandom

1 Ответ

0 голосов
/ 05 мая 2020

Я не знаю, должен ли я ответить на свой вопрос.

Я пробовал много подходов, но у меня были исключения, и узлы не запускались. Итак, я полагаю, что для моих ситуаций не существует универсального c способа защиты связи RMI с помощью криптографии RSA.

Итак, я попробовал другой подход.

Я изменил сигнатуру метода методы RMI в интерфейсе и реализации от

public void query(MessageID messageID, long TTL, String fileName, String upstreamIP) throws RemoteException

до

public void query(byte[] bytes) throws RemoteException

Теперь перед каждым вызовом RMI я преобразую аргументы в пользовательский объект, а затем в байты, применяю Шифрование RSA с использованием закрытого ключа отправителя для преобразования в зашифрованные байты и последующей передачи его на сервер.

На стороне сервера собирайте байты, дешифруйте их с помощью ключа RSA publi c отправителя, а затем приведите к пользовательский объект, извлеките информацию и, наконец, перейдите к бизнес-логике c. Этот процесс выполняется при каждом вызове RMI.

Это похоже на сокеты, где мы записываем все в поток. В конце концов, при вызове RMI объекты, которые мы передаем, преобразуются в байты. Итак, используя этот подход, я явно конвертирую их в байты, а затем применяю шифрование и передаю его через RMI. По сети он будет передаваться как зашифрованные байты. Это будет для всех вызовов RMI, которые включают сообщения, а также содержимое файла.

...