!!§!! Вспомогательная страница к разделу ((:crypto КРИПТОГРАФИЯ)) ---- ==Протоколы с комбинированием открытых и секретных ключей== Рассмотрим еще раз классический алгоритм ((:crypto#шифр_виженера шифрования Виженера)). Алгоритм относится к идеологии секретных ключей шифрования, его стойкость напрямую зависит от взломоустойчивости ключевого слова (фразы). Следовательно, основной проблемой при применении этого шифра становится безопасность хранения (или передачи) ключа как для отправителя, так и для получателя. Отправитель $A$ создает --- помимо его постоянных ключей RSA $ (\mathbf E_A, \mathbf D_A, M_A ) $ ( $ \mathbf D_A $ --- секретный ключ) --- еще и одноразовый секретный ключ шифрования $ \mathfrak e $. Для простоты предположим, что ключ дешифрования совпадает с ключом шифрования (как в ((:crypto#shifr_vernama_odnorazovogo_bloknota шифре Вернама))). Функцию шифрования посредством этого ключа обозначим $ \varepsilon ( \cdot ) $. Отправитель знает открытый ключ $ (\mathbf E_B, M_B ) $ получателя $B$. С открытым текстом $ x $ он действует по следующей схеме 1. Параллельно шифруется $ x $ ключом $ \mathfrak e $, а сам ключ $ \mathfrak e $ --- открытым ключом получателя. 2. Собственно шифровка составляется конкатенацией полученных двух блоков (при необходимости, размеры этих блоков фиксируются, и они предполагаются известными получателю). {{ :crypto:pgp1cor.jpg?600 |}} Действия получателя по получению шифровки. 1. Она разбивается на блоки, и второй блок подвергается дешифрованию с помощью секретного ключа получателя. Устанавливается секретный ключ дешифрования $ \mathfrak e $. 2. Он применяется к дешифрованию первого блока полученной шифровки. {{ :crypto:pgp22cor.jpg?600 |}} Теперь вставляем в эту схему блокировку от возможной подделки сообщения. Считаем, что оба корреспондента --- отправитель $ A $ и получатель $ B $ --- пользуются одной и той же стойкой функцией хеширования $ h (\cdot) $ (например SHA256). Отправитель 1. Параллельно * шифрует открытый текст $ x $ секретным ключом $ \mathfrak e $: $ \varepsilon (x) $ и * вычисляет значение функции хеширования $ h(x) $; 2. Производит конкатенацию блоков $ h(x) $ и $ \mathfrak e $ $$ \widetilde{x}:= [h(x) \mid \mathfrak e] \ ; $$ 3. Шифрует $ \widetilde{x} $ открытым ключом получателя: $$ \widetilde{c}:= \widetilde{x}^{\mathbf E_B} \pmod{M_B} \, ; $$ 4. Производит конкатенацию блоков $ \varepsilon (x) $ и $ \widetilde{c} $. Результат $ c:= [\varepsilon (x) \mid \widetilde{c}] $ и отправляется адресату. ---- Симметричный алгоритм шифрования --- AES (или Rijndael).