Вы можете сделать это с помощью RSA , используя закрытый ключ для шифрования (как если бы вы подписывали).Кортеж (d,n)
будет ключом администратора (обычно именуемым закрытым ключом), (e,n)
будет ключом пользователя (обычно именуемым открытым ключом).Ключ администратора используется для шифрования, ключ пользователя для расшифровки.Только администратор владеет ключом администратора, в то время как пользователь и администратор знают ключ пользователя.Теперь только администратор может шифровать, а пользователь может только дешифровать.
Обратите внимание, что я сознательно выбрал показатель d
для шифрования ключа администратора, а не наоборот, потому что обычно выбирается e
очень маленький для лучшей производительности, и если вы сделаете это с ключом администратора вместо пользовательского ключа, то система будет сломана.-only свойство ломается, потому что пользователь может также получить симметричный сеансовый ключ и изменить сообщение.
Я подозреваю, что вы могли бы хотеть, чтобы свойство только для дешифрования фактически достигало аутентификации потенциально больших объемов зашифрованных данных (то есть, чтобы пользователь знал, что данные должны поступить от администратора и не был подделан).Если это так, то вам действительно нужна более сложная схема с надлежащей цифровой подписью (обеспечивающей аутентификацию) и некоторой формой шифрования для конфиденциальности, например гибридное использование симметричного шифра для массового шифрования и, например, RSA для шифрования симметричного ключа.
Однако вы должны быть очень осторожны при разработке подобных криптографических систем: существует много вещей, которые могут пойти не так и полностью поставить под угрозу безопасность вашей системы.Обратитесь за советом к специалисту.