Безопасная передача сообщений Java

Итак, я пытаюсь предоставить безопасную систему обмена сообщениями приложений, которая предоставляет все преимущества CIA.

У меня есть отправитель и получатель.

Ключи отправителя: Частный = (55,27) Общедоступные = (55,3)

Ключи приемника: Частный = (35, 29) Общедоступные = (35,29)

В этом конкретном сценарии я использую RSA, цифровую подпись и шифр сдвига.

Однако по какой-то причине при внедрении этого в код я застреваю.

В моем конкретном случае:

У меня есть строка сообщения "СНГ"

После выбора Ks (5)

Я сдвигаю все буквы на обозначенные K, используя ShiftCipher, и получаю сообщение «hnx», которое после преобразования в bigInteger с использованием ASCII, я получаю 204210220. (Это после добавления 100 к каждому значению, чтобы получить 3 цифры для каждого письмо.)

Вот где я теряюсь во время пошагового процесса.

Насколько я понимаю. Сначала я хэширую сообщение. Итак, выбрав хэш 6, (204210220% 6) я получаю 4.

Итак, я шифрую хешированное сообщение. Это будет Ka- (H (m)) или иначе 4 ^ 26 mod 55. Что дает мне 49.

Я предполагаю интегрировать это с помощью цифровой подписи. Что было бы

47 ^ 27 mod 55. Что дает мне ответ 53.

Затем я бы использовал Ks с открытым ключом Боба, поэтому 5 ^ 29 mod 35, что дает мне 10.

После этого я не понимаю, что делать.

Насколько мне известно, я предполагаю зашифровать 53 ключа, но я не понимаю, какой именно.

В дополнение к этому, после окончательной отправки всего этого получателю, как они предполагают получить сообщение, поскольку хеширование является односторонней функцией?

У меня все это реализовано в коде нескольких разных классов, которые передают значения туда и обратно, поэтому я подумал, что будет проще просто ввести мою логику, поэтому извиняюсь!

Любая помощь будет очень признательна!

Это просто для развлечения или это будет чем-то, что превратится в реальную реализацию? Первое, что я замечаю, это то, что ничто из этого не является отдаленно безопасным по ряду причин - вы понимаете это, да?

Luke Joshua Park 30.10.2018 23:28

Это просто для базового понимания, а его реализация - просто для ясности и обучения.

Granzo 30.10.2018 23:30

Хорошо. Ну, во-первых, размеры ваших ключей RSA слишком малы. Вы также используете RSA без заполнения, что по определению небезопасно. Кроме того, вам нужно решить, хотите ли вы зашифровать сообщение или подписать сообщение. Это две разные вещи и служат двум разным целям. Если вы шифруете, вы не должны хешировать, вы шифруете сообщение с помощью открытый ключ. Если вы подписываете, вы шифруете хэш сообщения с помощью закрытый ключ. Это все основные понятия. Я настоятельно рекомендую вам изучить это самостоятельно - информации достаточно.

Luke Joshua Park 30.10.2018 23:32

По крайней мере, как меня учили, хэш уже известен обеим сторонам. Так какой же смысл в шифровании хэша закрытым ключом?

Granzo 30.10.2018 23:37

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

Luke Joshua Park 30.10.2018 23:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
269
0

Другие вопросы по теме