Управление удлинять группы получателей
В a comment к Richard Schwartz' good answer, спросите вы
Можно ли с этим алгоритмом, чтобы гарантировать, что только один может пригласить других? Насколько я понял, каждый мог распространять дешифрованный ключ сеанса.
При применении протокола в сценарии группового чата не допускайте, чтобы термин «сеансовый ключ» вводил вас в заблуждение. Скорее, подумайте о ключе для симметричного шифрования как «ключа сообщения»: каждый раз, когда кто-то отправляет сообщение группе, они должны генерировать новый случайный симметричный ключ, шифровать его с помощью открытого ключа каждого законного получателя отдельно и доводить все эти криптограммы до симметрично зашифрованное сообщение. Таким образом, каждый отправитель самостоятельно решает, кого они считают частью группы получателей из своих собственных отправленных сообщений.
Это даст протоколу дополнительную накладную передачу, но на практике это, вероятно, не имеет значения. Что может означать «стоимость» получения большего количества «хорошей» случайности (энтропии) для генерации достаточно непредсказуемых ключей сообщений. Таким образом, приемлемая оптимизация может заключаться в том, что если группа легитимных получателей осталась прежней, отправитель может повторно использовать ключ сеанса своего ранее отправленного сообщения. Тем не менее, если они должны повторно назначить ключ сеанса, полученный от другого члена группы, для отправки собственных сообщений.
Конечно, если каждый отправитель самостоятельно определяет, кого они считают законным получателем своего сообщения, вы не можете не допустить, чтобы какой-либо законный получатель получал компрометирующие сообщения, которые они получили: они могут просто пересылать сообщения, не зашифрованные (или зашифрованные для кого-то, в исходной группе получателей) кому угодно.
Обеспечение аутентичности
В редактировании к исходному вопросу, вы добавили
Кроме того, я хочу, чтобы сделать 100% уверен, что тот, кто посылает сообщение на самом деле, кто он притворяется быть. (Так что никто не может «поддельные» сообщения)
Шифрование не может сделать это, но криптография имеет другой способ, чтобы убедиться, что
- сообщение на самом деле исходит от которого утверждал, что послал его
- сообщение не было изменено, так как
И путь обеспечения этих вещей подписей, которые также являются то, что общественно-пр Криптография ivate-key позволяет. Пусть отправители подписывают свои сообщения своим личным ключом. (Что обычно означает «шифрование» криптографически защищенного хеша сообщения с закрытым ключом.) И пусть получатели проверяют подписи (путем «дешифрования» подписи открытым ключом отправителя и сравнения результата с хешем сообщения, которое они вычисляли сами по себе.)
не свернуть свое собственное ничего (кроме случаев, когда вы должны)
ответов Ричарда советов вам не свернуть свой собственный (псевдо) генератор случайных чисел.Для всего, что вы собираетесь использовать в производстве, я бы продлить это ничего шифрование:
- Не придумывайте свои собственные протоколы
- Не придумывайте свои собственные шифры, подпись или хеш-функцию
- не изобретайте свой собственный способ сбора энтропии
- не катить свою собственную реализации любых из вышеперечисленных, даже если изобретен других
Вместо этого используйте хорошо зарекомендовавшие себя библиотеки криптографии. Они написаны и рассмотрены экспертами как в криптографической теории, так и в практике написания безопасного программного обеспечения. И хотя даже эти библиотеки часто достаточно часто встречаются (иногда смущающие) проблемы безопасности, ничто из того, что вы придумаете сами, будет почти таким же безопасным, как и они.
Хотя для обучения, реализация любых или всех перечисленных материалов (включая генераторы псевдослучайных чисел) является отличным упражнением и помогает вам понять хотя бы некоторые аспекты лежащей в основе криптографии. И это понимание важно, так как часто достаточно сложно правильно и безопасно использовать хорошо зарекомендовавшие себя библиотеки, даже если у вас есть некоторые знания о концепциях, которые они раскрывают через свои интерфейсы.
И, конечно же, для инновационный в криптографии, придумывая новые вещи (и тщательно изучая сообщество экспертов в этой области). Этот новый материал только не должен использоваться ни для чего серьезного до он прошел этот обзор успешно.
Вы имеете в виду _asymmetric_ encryption? Еще, пожалуйста, объясните, каким образом предполагаемое шифрование должно быть «асинхронным». –
ах, извините, я смешал эти два слова - я исправлю это – Fsteff