Сквозное шифрование
Я новичок в 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
для отправки зашифрованных сообщений получателю.
Подводя итог, мой вопрос заключается в том, является ли этот подход хорошим и работает ли правильная система сквозного шифрования именно так.
Ваше здоровье,
Арджис Чакраборти.