Сквозное шифрование

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

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

Позвольте мне объяснить, как я это сделал.

  • Генерируем приватный и публичный RSA-OAEP ключи с помощью getKeys() функция

  • Мы получаем необработанное строковое сообщение, которое необходимо зашифровать (обычно именуемое )

  • Затем мы вызываем функцию для шифрования с помощью RSA получателя.

  • Внутри много чего происходит encrypt() функция.

    • Мы первые encode использование encoder()функция. Назовем это.

    • Затем мы генерируем Diffie-Hellman общий секретный ключ с помощью AES-CBC шифр длины 256. Это также требует заполнения, которое имеет тип Uint8Array размера 16. В конце концов, мы получаем ключ обратно. Назовем этот ключ и iv прокладка как .

    • Теперь мы берем encodedи зашифровать его с помощью . Это возвращает нам зашифрованный . Назовем это.

    • Теперь мы используем public keyполучателя для шифрования ключа. Назовем это.

    • Чтобы закончить encryptionпроцесс, мы возвращаем объект, содержащий , и . Мы отправляем обратно, потому что нам это нужно в формате .

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

  • На клиенте-получателе мы вызываем decrypt() функция.

  • Опять же, внутри у нас происходит много всего:

    • Получатели берут свое private key и пытается расшифровать encrypted_AES. Назовем это.

    • Затем он пытается использовать AES ключ вместе с IV расшифровать encrypted_text. Назовем это.

    • Как только мы получим наш , нам нужно декодировать его в удобочитаемый формат (UTF-8).

    • Мы запускаем text decoder функция декодирования encoded_text.

    • Наконец, у нас есть декодированный, удобочитаемый файл .

  • Этот plainText это то, что отображается на интерфейсе получателя.

Я реализовал это, используя React.js как интерфейс и Node.js в качестве бэкэнда с использованием socket.io для отправки зашифрованных сообщений получателю.

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

Ваше здоровье,

Арджис Чакраборти.

0 ответов

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