В большинстве случаев вы не можете изменить порядок расшифровки.
Схемы, позволяющие изменить порядок дешифрования, называются коммутативными криптосистемами.
Одна криптосистема с открытым ключом, которую можно использовать для построения коммутативной криптосистемы,
шифрование Эль-Гамаля .
Вот только основная идея: предположим, что g является генератором
подходящая группа G, для которой сложно вычислить дискретные логарифмы.
Пусть x A и x B будут двумя закрытыми ключами,
h A = g x A и
ч В = г х В
быть соответствующими открытыми ключами. Обе пары ключей используют одну группу
G (то есть тот же модуль p, если мы используем G = Z / (p)). Это одно из преимуществ
Схема ElGamal, что он все еще безопасен, если два пользователя совместно используют одну группу (или модуль).
RSA, с другой стороны, будет небезопасным.
Шифрование сообщения m с помощью h A дает зашифрованный текст
(м ч A r , г r ).
Обратите внимание, что знание секретного ключа x A позволяет расшифровать, потому что
(г r ) x A = h A r
Чтобы зашифровать зашифрованный текст во второй раз, нужно сначала повторно зашифровать существующий
зашифрованный текст с открытым ключом А.
Он выбирает случайный r 'и вычисляет
(мч A r h A r ', g r g r' ) =
(мч A r + r ', g r + r' ).
Результатом является еще одно действительное шифрование с открытым ключом А.
Это повторное шифрование необходимо, чтобы избежать атаки, которая работает, например,
против RSA с равным модулем, как показано ниже.
Затем можно было бы зашифровать с открытым ключом B, давая
(mh A r + r ' h B s , g r + r' , г * 1 092 * S ).
Расшифровка возможна в любом порядке, например, зная x A позволяет вычислить
(g r + r ') x A = h A r + r'
и, следовательно, можно вычислить
(м ч В с , г с ),
именно этого мы и хотим: шифрование m открытым ключом B.
Существует ряд тонкостей, которые необходимо соблюдать, чтобы получить безопасную реализацию.
И понять это не так просто.
Для получения дополнительной информации см., Например, Phd Стивена Вейса , который содержит главу о коммутативном шифровании.
Существует ряд проблем, если использовать ту же идею с «учебником RSA». Во-первых, чтобы сделать шифрование коммутативным, необходимо, чтобы оба пользователя A и B использовали один и тот же модуль.
Например. A использует (n, e A , d A ), а B использует (n, e B , d B ), где n это модуль, e A , e B открытые ключи и d A , d B секретные ключи. Однако, например, зная (n, e A , d A ), можно вычислить n и, следовательно, вычислить секретный ключ B, который, конечно, является одним большим недостатком.
Теперь мы можем зашифровать m как
м е А мод н,
снова зашифровать как
м е А е В мод n,
расшифровывает с секретным ключом А, давая
м е В мод н,
и расшифровываем снова с секретным ключом B, чтобы получить m. Это выглядит хорошо, пока никто не заметит, что
злоумышленник, который может перехватить два шифротекста c = m e A mod n и c '= m e B mod n, может использовать Алгоритм Евклида, чтобы найти r, s такой, что
r e A + s e B = 1
, а затем вычислить
m = c r (c ') s мод №.
Эта идея также работает против решения с использованием RC4, предложенного в другом ответе. Тезис Вейса содержит подробное описание атаки.