Алгоритм шифрования: только пользователь расшифровывает - PullRequest
1 голос
/ 29 марта 2012

Какой алгоритм шифрования может использовать 2 ключа: admin - шифровать и дешифровать а также пользователь - только расшифровывать ?

Ответы [ 2 ]

2 голосов
/ 21 января 2013

Вы можете сделать это с помощью RSA , используя закрытый ключ для шифрования (как если бы вы подписывали).Кортеж (d,n) будет ключом администратора (обычно именуемым закрытым ключом), (e,n) будет ключом пользователя (обычно именуемым открытым ключом).Ключ администратора используется для шифрования, ключ пользователя для расшифровки.Только администратор владеет ключом администратора, в то время как пользователь и администратор знают ключ пользователя.Теперь только администратор может шифровать, а пользователь может только дешифровать.

Обратите внимание, что я сознательно выбрал показатель d для шифрования ключа администратора, а не наоборот, потому что обычно выбирается eочень маленький для лучшей производительности, и если вы сделаете это с ключом администратора вместо пользовательского ключа, то система будет сломана.-only свойство ломается, потому что пользователь может также получить симметричный сеансовый ключ и изменить сообщение.

Я подозреваю, что вы могли бы хотеть, чтобы свойство только для дешифрования фактически достигало аутентификации потенциально больших объемов зашифрованных данных (то есть, чтобы пользователь знал, что данные должны поступить от администратора и не был подделан).Если это так, то вам действительно нужна более сложная схема с надлежащей цифровой подписью (обеспечивающей аутентификацию) и некоторой формой шифрования для конфиденциальности, например гибридное использование симметричного шифра для массового шифрования и, например, RSA для шифрования симметричного ключа.

Однако вы должны быть очень осторожны при разработке подобных криптографических систем: существует много вещей, которые могут пойти не так и полностью поставить под угрозу безопасность вашей системы.Обратитесь за советом к специалисту.

0 голосов
/ 11 января 2013

Редактировать : Это неверно (см. Комментарий Даниэля).

Вы можете изменить любой алгоритм, чтобы разрешить два ключа, сгенерировав ключ сеанса, используя его для шифрования полезной нагрузки, а затем используя два ключа для каждого шифрования ключа сеанса.

Например, если Ak - это ключ администратора, Uk - это ключ пользователя, Sk - это случайный ключ сеанса, а e(k, p) - это функция симметричного шифрования, тогда вы должны использовать:

ciphertext = e(Ak, Sk) . e(Uk, Sk) . e(Sk, p)
...