Есть сообщение M, которое необходимо передать.
Есть секретный ключ K, о котором договорились/знают оба конца - отправитель и получатель.MAC-функция, принимает M и K на вход, и выдаёт MAC на выходе:
MAC_fun(M, K) = MAC
Функция потокового шифра, или просто потоковый шифр Cypher, который принимает на вход ключ K и выдаёт "длинную псевдослучайную строку" C:
Cypher(K) = C
Затем, используется функция XOR(M, C), результатом работы которой считаем зашифрованное сообщение M_C. Причём, XOR(M_C, C) = M. (могу предположить, подойдёт любая другая функция, обладающая этим свойством?)
Отправитель высылает M_C и MAC, получатель их принимает. У получателя уже есть ключ K, а потому он легко вычисляет Cypher(K) = C (т.е. "длинная псевдослучайная строка" потокового шифра становится известна, как только договорились о ключах и виде самой функции?)
Затем, получатель выполняет XOR(M_C, C) = M. Получив сообщение M, он подаёт его вместе с ключом на вход MAC_fun и проверяет с тем MACом, который ему прислал отправитель вместе с зашифрованным сообщение M_C. Если MACи совпали, то сообщение именно от того отправителя, и не было подменено/искажено во время передачи.
Осталось только согласовать ключ. Вот здесь и торчит асимметричный Диффи-Хельман, для тех целей, чтобы Ева не знала, о каком ключе договорятся Алиса и Боб.
Я правильно себе представляю картину в общих чертах?
К сожалению, я пока не понял как работает Диффи-Хельман, пресловутая цифровая подпись документа, https (или понял, потому что схема описанная выше очень сильно напоминает обмен браузера со Сбером) и электронная почта с PGP.
Но в любом случаи спасибо, Сергей, за лекцию.