Да.Вы можете сделать это с помощью RSA - чтобы сделать обмен по типу Диффи-Хеллмана, потому что коммутируют не только ключи от 1 связанной пары, но и ключи от других пар ключей.
alice -> bob: alice.pub
bob -> alice: bob.pub
alice: r = random.secret()
alice -> bob: ( r * (alice.priv * bob.pub) )
bob: r = ( (r * (alice.priv * bob.pub)) * (bob.priv * alice.pub) )
Обратите внимание, что мы сделали что-то странное здесь.Мы смешали операции RSA из различных пар ключей в одной операции.Объекты в скобках фактически являются новым виртуальным ключом RSA, и ни один из этих ключей не является открытым.Если бы мы попытались создать этот ключ RSA напрямую, либо Алиса, либо Боб знали бы оба ключа пары.Эта пара ключей фактически является секретным ключом, где вы пишете на одном конце, и только другая сторона может расшифровать его, но вы не можете расшифровать то, что написали сами, и никто другой не может зашифровать сообщения на другой стороне.
У меня естьникогда не видел, чтобы кто-нибудь смешивал пары ключей, как это, но я проверил это, написав код.Мне пришлось сделать что-то необычное, потому что, как правило, применение закрытого ключа к сообщению предназначено для «подписания».Но подписание обычно хэширует секрет и применяет закрытый ключ к хешу его;что-то мы не хотим.Таким образом, в моем коде, как только у меня были компоненты RSA (D, E, N), извлеченные в числа произвольной точности ... то есть: расшифровать, зашифровать, модуль ... Я просто сделал:
wormholeSend(me,you,msg) =
(((me ^ {me_D}) \% me_N) ^ {you_E}) \% you_N
То, что делает его немного сложным, заключается в том, что E (показатель шифрования) на самом деле является предсказуемым значением, но модуль N находится в открытом ключе (E, N).D является частным для каждой стороны.Здесь нужно быть осторожным, потому что у нас с тобой другой модуль N.
Я сделал это, потому что мне нужна система, в которой программе разрешено шифровать ключи, которые могут быть расшифрованы пользователями.При этом пользователь не может зашифровать ключи, а программа не может их расшифровать.