Функциональное шифрование

    Функциональное шифрование

Шифрование — это способ, с помощью которого пользователи могут безопасно обмениваться данным через незащищенный канал связи. Более тридцати лет назад Уитфилд Диффи и Мартин Хеллман выдвинули концепцию криптографии с открытым ключом, где два или более пользователей могут обменяться без посредников ключом, который может быть использован затем для симметричного шифрования. Это была первая криптосистема, которая позволяла защищать информацию без использования секретных ключей, передаваемых по защищенным каналам. Схема открытого распределения ключей, предложенная Диффи и Хеллманом, произвела настоящую революцию в мире шифрования, так как снимала основную проблему классической криптографии – проблему распределения ключей.

На сегодняшний день, шифрование на открытом ключе является незаменимым инструментом и используется для защиты веб-контента (HTTPS, SSH), голосового трафика. Однако есть мнение, что:

  • доступ к зашифрованным данным — это «все или ничего», то есть либо расшифровывается весь текст и все данные становятся известны, либо неизвестно ничего
  • шифрование — это способ кодирования данных, в котором только один секретный ключ может расшифровать данные

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

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

В схеме функционального шифрования присутствует доверенная третья сторона, обладающая секретным мастер-ключом, который известен только этой стороне. Когда доверенная сторона получает описание некоторой функции 𝑓 в качестве входного параметра, она использует мастер-ключ для генерации специального секретного ключа 𝑠𝑘𝑓, ассоциированного с функцией 𝑓. После этого любой пользователь, имеющий ключ 𝑠𝑘𝑓, может получить значение 𝑓(𝑥) по соответствующей шифрограмме 𝑐 = 𝐸𝑛𝑐 (𝑝𝑘, 𝑥), где 𝑝𝑘 – открытый ключ, 𝑥 – открытый текст.

После получения ключа 𝑠𝑘𝑓 участнику больше не требуется доверенная сторона. Первые упоминания понятия «функциональное шифрование» можно встретить у Амита Сахай и Брента Уотерса в работе "Нечеткое шифрование на основе идентификационных данных".

Функциональная схема шифрования для функционала F состоит из четырех алгоритмов (Setup, Keygen, Enc, Dec), которые удовлетворяют следующим корректным условиям для всех k K и x X.

• Setup (1λ) -> 𝑝𝑘, m𝑘 - генерируется пара открытого и главного секретного ключа

• Keygen (m𝑘, 𝑘) -> 𝑠𝑘𝑓 - генерируется секретный ключ для 𝑘

• Enc (𝑝𝑘, 𝑥) -> 𝑐 - зашифровывается сообщение 𝑥

Dec (𝑠𝑘𝑓, 𝑐) -> y - используется 𝑠𝑘𝑓 для вычисления F(k, x) из 𝑐.

Требуется, чтобы y = F(k, x) с вероятностью 1.

Типы ФШ

Существует несколько типов схем функционального шифрования:

  • Функциональное шифрование со скалярным произведением (ФШСП), где открытый текст – это вектор, а зашифрованные данные вместе с ключом можно использовать для вычисления скалярного произведения этого вектора с другим. ФШСП есть несколько вариантов: на много клиентов, на много входов, децентрализованное, со скрытием функции, и т.п.
  • Шифрование на основе атрибутов (ШОА), где зашифрованные данные связываются с набором атрибутов и секретных ключей вместе с определёнными правилами, контролирующими, какой зашифрованный текст можно зашифровать, в зависимости от имеющихся у нас атрибутов.
  • ФШ «общего назначения», позволяющее вычислять функцию f любого вида от зашифрованных данных Enc(x).

Примеры успешного использования

Управление доступом к медицинским данным при помощи шифрования на основе атрибутов

Создание совершенно анонимную «тепловую карту» расположения пользователей

 Машинное обучение на помощи зашифрованных данных

 Обфускация программного кода

Облачные вычисления

Вывод

     Функциональное шифрование чрезвычайно полезно, поскольку оно позволяет намеренно передавать определённую информацию о зашифрованных данных определённым пользователям. С текущими проблемами в области безопасности и требованиями, выдвигаемыми новыми законами, потребность в эффективных схемах функциональное шифрования становится более ясной, поскольку она позволяет проводить обработку зашифрованных данных третьими лицами, не выдавая этих данных никому в чистом виде. Это значит, что мы можем пойти дальше, чем позволяет псевдоанонимизация личных данных, гарантируя более строгую их конфиденциальность, тем самым открывая дорогу к Web 3.0, децентрализации и более безопасной передаче данных.