Рейтинг:1

Дизайн сквозного зашифрованного чата

флаг au

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

Метод, о котором я думал, состоит в том, чтобы сделать гибридную систему RSA, AES. При регистрации будет сгенерирована пара ключей RSA, а открытый ключ будет отправлен в базу данных для хранения. Затем, когда пользователь хочет отправить кому-то сообщение, он запросит открытый ключ другого человека и создаст ключ AES-256 для шифрования любых сообщений. Затем, когда пользователь захочет отправить сообщение, оно будет зашифровано с помощью AES, а ключ AES будет зашифрован с помощью RSA, чтобы получатель мог расшифровать сообщение.

Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы пользователь мог синхронизировать сообщения между устройствами. У меня возникла идея сгенерировать открытый и закрытый ключи из мнемонической фразы, а затем использовать ее для восстановления.

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

Если у кого-то есть какие-либо рекомендации или советы, пожалуйста, дайте мне знать.

fgrieu avatar
флаг ng
Вы думаете о гибридном шифровании. Обычно ключ AES извлекается случайным образом для каждого сообщения и нигде не хранится в открытом виде: он хранится вместе с зашифрованным AES сообщением или рядом с ним и шифруется с использованием открытого ключа каждого предполагаемого получателя, включая открытый ключ (ключи) получателя. автор поста. Среди трудностей того, что вы планируете, — безопасное распространение ключей. «Генерация открытых и закрытых ключей из мнемонической фразы» может быть выполнена, но пользователи выбирают плохие пароли/парольные фразы, поэтому, как минимум, вы хотите, чтобы растяжение ключа попыталось компенсировать это. Есть другие варианты.
Maarten Bodewes avatar
флаг in
Это можно «решить» разными способами. Я поставил «решено» в кавычки, потому что всегда требуется некоторый уровень доверия к представлению услуги. Генерация пары ключей RSA из «начального числа», например. рассмотрено [здесь] (https://crypto.stackexchange.com/a/30216/1172) и обратите внимание на наиболее эффективный вариант [в другом ответе] (https://crypto.stackexchange.com/a/30228/1172) . Чтобы создать семя, вы должны использовать PBKDF для обеспечения растяжения, упомянутого выше.
Matrix avatar
флаг au
@fgrieu Если я буду хранить индивидуальный ключ AES каждого человека, зашифрованный их собственным открытым ключом, если кто-то сможет взломать это шифрование, то все сообщения будут падать, независимо от того, использую ли я один ключ AES для сообщений или новый для каждого из них. моя проблема. Причина, по которой я думал хранить ключи AES в базе данных, заключается в том, чтобы пользователь мог легко получать доступ к сообщениям на новом устройстве, просто импортируя свою мнемонику. Также для мнемоники я использую bip39, чтобы пользователи не генерировали мнемонику.
crypt avatar
флаг cn
вы можете использовать алгоритм двойного храповика Signal для обеспечения сквозного шифрования. Java-реализация протокола Signal находится по адресу https://github.com/signalapp/libsignal-protocol-java.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.