Шта је хибридно хомоморфно шифровање и његове примене
9.2.2023 10:03
ТЛ;ДР
Представите концепт хибридне хомоморфне енкрипције, случајеве његове употребе, кратку формулацију и неке демонстрациони код у Ц++ .
Увод
Апликације за очување приватности постале су данас важна тема због све веће забринутости људи око приватности њихових података, распрострањености апликација за машинско учење које захтевају приступ огромној количини података и нових прописа као што је Општа уредба о заштити података (ГДПР). ), да не спомињемо друге етичке и финансијске проблеме. Данас ћемо научити о новој техници која побољшава приватност под називом Хибридна хомоморфна енкрипција (ХХЕ), која је проширење Хомоморфне енкрипције (ХЕ).
ХЕ је техника шифровања која нам омогућава да извршимо прорачуне на шифрованим подацима. Међутим, један од проблема са ХЕ је тај што су његови шифровани текстови неколико редова величине већи од одговарајућих отворених текстова. ХХЕ има за циљ да реши овај проблем комбиновањем симетричних шифри са ХЕ како би се смањила величина шифрованих текстова и рачунарских ресурса потребних за страну која шифрује и шаље податке (нпр. клијент/власник података) по цену скупљих прорачуна за страна која врши прорачуне на шифрованим подацима (нпр. сервер, добављач услуга у облаку или ЦСП). Дакле, ХХЕ може бити прикладнији од ХЕ када је у питању клијент-сервер модел шифрованих рачунања, посебно када клијент има ограничене рачунарске ресурсе и интернет пропусни опсег, на пример, телефоне, ИоТ уређаје, итд.
Предности:
- Омогућите прорачуне на шифрованим подацима, тако да омогућите анализу података и апликација за очување приватности
- Смањите величину шифрованог текста, а самим тим смањите потребне рачунарске ресурсе и ресурсе пропусног опсега за страну која поседује, шифрује и шаље податке
Недостаци:
- Рачунарски скупљи у домену шифрованог рачунања
- Тренутно је и даље ограничено на одређене врсте података и прорачуна
Случајеви употребе
Као и ХЕ, ХХЕ може подржати апликације у секторима у којима је приватност података важна брига, као што су финансије, здравствена заштита, прописи итд. Штавише, ХХЕ може да оснажи апликације на уређајима са ограниченом рачунарском снагом, меморијом и пропусним опсегом мреже, као што су уграђени и ИоТ уређаји.
Пример апликације: Апликација за кућни надзор за здравствену негу, где ИоТ уређаји опремљени у домаћинству снимају слике (или друге сигнале), шифрују их и шаљу шифроване сигнале на сервер. Сервер покреће АИ алгоритам на примљеним шифрованим подацима и открива прилике као што су људи који имају мождани удар, а затим шаље шифроване резултате на уређај домаћинства који је одговоран за дешифровање резултата и изазивање аларма само када је дешифровани резултат позитиван, нпр. да ли људи имају мождани удар. На овај начин домаћинство може да користи услугу сервера док провајдер не види никакве слике или осетљиве податке домаћинства.
Хајдемо у математику
Следе неке кратке формулације ХЕ и ХХЕ.
Хомоморфно шифровање
Пре него што дођемо до ХХЕ, морамо прво разумети ХЕ. Са ХЕ можемо шифровати податке и изводити операције на шифрованим подацима. Резултат када се дешифрује биће еквивалентан резултату када се обављају сличне операције над одговарајућим подацима отвореног текста. Да бисте боље разумели ОН, упућујем вас на ово блог пост са ОпенМинед-а.
Ево, хајде да погледамо дефиницију хомоморфне шеме шифровања јавног кључа која је усвојена из [1] и састоји се од 4 алгоритма:
- ХЕ.КеиГен (1 ⁿ ) → (пк, ск, евк): Алгоритам генерисања кључа. овде, н је безбедносни параметар; пк , ск и евк су јавни кључ, тајни кључ и евалуациони кључ, респективно. Користимо пк за шифровање података, ск за дешифровање шифрованих података, и евк за обављање прорачуна на шифрованим подацима
- ХЕ.Енц(пк, м ) → ц: ХЕ алгоритам за шифровање где м је подаци отвореног текста и ц су ХЕ шифровани подаци
- ХЕ.Евал(евк, ф, ц₁, ц₂, … цᵢ) → ц’: Алгоритам евалуације где ф је функција као што је сабирање или множење, и ц’ је ХЕ шифровани резултат. Треба да имамо ХЕ.Дец(ск, ц’ ) = ф(м₁, м₂, …, мᵢ)
- ХЕ.Дец(ск, ц ) → м: Алгоритам за дешифровање ХЕ то узима ск и шифровани текст ц да креирате поруку отвореног текста м
Хибридна хомоморфна енкрипција
Уместо да шифрује податке помоћу ХЕ шеме која производи веома велики шифровани текст (проширивање вишеструких редова у поређењу са отвореним текстом), ХХЕ их шифрује симетричном шифром са фактором проширења 1 и шаље симетричне шифроване текстове на сервер. Поред тога, клијент мора послати и хомоморфну шифровану верзију свог симетричног кључа. По пријему, сервер изводи симетрични алгоритам дешифровања хомоморфно да би трансформисао симетрични шифровани текст у хомоморфни шифровани текст. Након тога, сервер може да врши прорачуне на ХЕ шифрованим подацима. Формалније, можемо дефинисати ХХЕ шему (према [2]) која се састоји од 5 алгоритама на следећи начин
- ХХЕ.КеиГен (1 ⁿ ) → ( пк , ск , евк ): Ово је једноставно ХЕ.КеиГен алгоритам који производи ХЕ јавни кључ ( пк ), тајни кључ ( ск ) и евалуациони кључ ( евк )
- ХХЕ.Енц (1 ⁿ , пк , м ): ХХЕ алгоритам за шифровање.
Прво, креира симетрични кључ: СИМ.КГен (1 ⁿ ) → к
Затим, користећи овај симетрични кључ, шифрује поруку отвореног текста м : СИМ.Енц ( к , м ) → цₛ. овде, цₛ је симетрични шифровани текст који ће бити послат серверу. Напоменути да цₛ има исту величину у поређењу са м .
У наставку, ХХЕ.Енц такође хомоморфно шифрује симетрични кључ к Користећи ХЕ.Енц ( пк , к ) → цₖ . Стога, цₖ је ХЕ шифровани текст симетричног кључа к , а такође ће бити послат на сервер заједно са цₛ - ХХЕ.Децомп ( евк , цₖ , цₛ ) → ц : ХХЕ алгоритам декомпозиције који трансформише симетрични шифровани текст цₛ у ХЕ шифровани текст ц хомоморфним проценом алгоритма симетричног дешифровања користећи цₖ и цₛ : ХЕ.Евал ( евк, ф= СИМ.дец , цₖ, цₛ ) → ц
- ХХЕ.Евал ( евк , ф , ц₁, . . . , цᵢ ) → ц’ : алгоритам ХХЕ евалуације који се једноставно враћа ХЕ.Евал ( евк , ф , ц₁, . . . , цᵢ )
- ХХЕ.Дец ( ск , ц ): Алгоритам за дешифровање ХХЕ. Једноставно се враћа ХЕ.Дец ( ск , ц )
Имајте на уму да у кораку 2 морамо послати цₖ и цₛ на сервер. овде, цₖ је ХЕ шифровани текст и може бити велике величине. Међутим, треба само да пошаљемо цₖ на сервер једном, нпр. у фази подешавања. Сервер може да га користи више пута у ХХЕ.Децомп алгоритам за претварање нових симетричних шифрованих текстова у одговарајуће ХЕ шифроване текстове. Ово је кључна разлика између ХХЕ и ХЕ: Уместо да сваки пут шаље ХЕ шифроване текстове на сервер који може бити веома интензиван у пропусном опсегу, ХХЕ уместо тога шаље лагане симетричне шифроване текстове. Овај трик чини ХХЕ способним да ради са уређајима са ограниченим ресурсима, јер су симетричне шифре такође веома лагане за покретање.
Да ли сте спремни за неки код?
Пре него што уђемо у код, погледајмо протокол који ћемо изградити: Имамо 2 стране (клијент и сервер) чије се акције могу сажети у 3 главна корака:
- Клијент креира кључеве са ХХЕ.КеиГен , шифрује податке помоћу ХХЕ.Енц и послати симетрични шифровани текст његових података ( цₛ ) , ХЕ шифровани текст његовог симетричног кључа ( цₖ ), ХЕ кључеви осим тајног кључа ск на сервер.
- Сервер врши ХХЕ.Децомп алгоритам и линеарну трансформацију на клијентовим ХЕ шифрованим подацима користећи ХХЕ.Евал , добија шифровани резултат и шаље га назад клијенту.
- По пријему, клијент дешифрује резултат са ХХЕ.Дец и добија коначни резултат у отвореном тексту.
У потпуности демонстрацијски код је у Ц++ и изграђен је на Мајкрософтов СЕАЛ и ПАСТА библиотека . Прво, направимо 2 структуре које представљају клијента и сервера:
struct Client
{
// the HE keys
seal::PublicKey he_pk; // HE public key
seal::SecretKey he_sk; // HE secret key
seal::RelinKeys he_rk; // HE relinearization key (you don't have to care about this)
seal::GaloisKeys he_gk; // HE galois key (you don't have to care about this)
// client's symmetric keys
std::vector<uint64_t> k; // the secret symmetric keys
std::vector<seal::Ciphertext> c_k; // the HE encrypted symmetric keys
// client's data
std::vector<uint64_t> m{0, 5, 255, 100, 255}; // the client's secret data
std::vector<uint64_t> c_s; // the symmetric encrypted data
seal::Ciphertext c_res; // the HE encrypted result received from the server
};
struct Server
{
std::vector<int64_t> w{-1, 2, -3, 4, 5}; // dummy weights
std::vector<int64_t> b{-5, -5, -5, -5, -5}; // dummy biases
std::vector<seal::Ciphertext> c; // the HE encrypted ciphertext of client's data
seal::SecretKey he_sk; // the server's HE secret key
seal::Ciphertext c_res; // the HE encrypted results that will be sent to the client
};
Client client;
Server server;
Корак 1
Клијент креира СЕАЛ контекст који је одговоран за креирање ХЕ кључева и других СЕАЛ објеката за кодирање, шифровање и дешифровање података (БатцхЕнцодер, Енцриптор, Децриптор, Евалуатор).
std::shared_ptr<seal::SEALContext> context = sealhelper::get_seal_context();
sealhelper::print_parameters(*context);
seal::KeyGenerator keygen(*context);
keygen.create_public_key(client.he_pk);
client.he_sk = keygen.secret_key();
keygen.create_relin_keys(client.he_rk);
seal::BatchEncoder he_benc(*context);
seal::Encryptor he_enc(*context, client.he_pk);
seal::Evaluator he_eval(*context);
seal::Decryptor he_dec(*context, client.he_sk);
bool use_bsgs = false;
std::vector<int> gk_indices = pastahelper::add_gk_indices(use_bsgs, he_benc);
keygen.create_galois_keys(gk_indices, client.he_gk);
Клијент затим покреће алгоритам шифровања ( ХХЕ.Енц ) да би креирао симетрични кључ ( цлиент.к ) и симетрични шифровани текст ( цлиент.ц_с ).
client.k = pastahelper::get_symmetric_key();
pasta::PASTA SymmetricEncryptor(client.k, configs::plain_mod);
client.c_s = SymmetricEncryptor.encrypt(client.m);
Ако одштампамо вредности од цлиент.ц_с , видећемо вектор насумичних вредности као што су [30446, 62410, 62969, 38863, 43376], за разлику од података отвореног текста клијента [0, 5, 255, 100, 255]. Клијент ће серверу послати само вектор насумичних вредности, а никада своје податке отвореног текста.
Затим, клијент шифрује свој симетрични кључ ( цлиент.к ) користећи ХЕ за креирање цлиент.ц_к.
client.c_k = pastahelper::encrypt_symmetric_key(client.k,
configs::USE_BATCH,
he_benc,
he_enc);
Након тога, клијент шаље цлиент.ц_к, цлиент.ц_с и ХЕ кључеве осим тајног кључа за сервер.
Корак 2
Након пријема цлиент.ц_к , сервер креира сопствени ХЕ тајни кључ, ХХЕ објекат и изводи алгоритам декомпозиције који резултира сервер.ц то је ХЕ шифровани текст клијентове поруке отвореног текста м . Имајте на уму да клијент никада не шаље свој тајни кључ хе_ск на сервер, тако да сервер неће моћи да дешифрује сервер.ц .
seal::KeyGenerator csp_keygen(*context);
server.he_sk = csp_keygen.secret_key();
pasta::PASTA_SEAL HHE(context, client.he_pk, server.he_sk, client.he_rk, client.he_gk);
server.c = HHE.decomposition(client.c_s, client.c_k, configs::USE_BATCH);
Сервер затим кодира његове тежине в и пристрасности б и врши множење вектора по елементима као и сабирање његових тежина и пристрасности отвореног текста са ХЕ шифрованим подацима сервер.ц .
seal::Plaintext plain_w, plain_b;
he_benc.encode(server.w, plain_w);
he_benc.encode(server.b, plain_b);
server.c_res = sealhelper::he_mult(he_eval, server.c[0], plain_w);
client.c_res = sealhelper::he_add(he_eval, server.c_res, plain_b);
Можемо видети да је коначни резултат цлиент.ц_рес који је СЕАЛ шифровани текст који ће клијент примити.
Корак 3
На крају, клијент дешифрује своје ц_рес користећи свој тајни кључ:
std::vector<int64_t> decrypted_res = sealhelper::decrypt(client.c_res,
client.he_sk,
he_benc,
*context,
client.m.size());
Штампање децриптед_рес , видећемо да ће резултат бити [-5 5 -770 395 1270], што је тачно јер
[0, 5, 255, 100, 255]
⊙
[-1, 2, -3, 4, 5]
⊕
[-5, -5, -5, -5, -5]
=
[-5, 5, -770, 395, 1270]
где су ⊙, ⊕ множење вектора и сабирање по елементима, респективно.
Резултат приликом покретања демонстрационог кода може се видети на доњој слици
Будући правци и закључци
У овом чланку смо научили о хибридној хомоморфној енкрипцији, њеним предностима у односу на обичну хомоморфну енкрипцију, примеру употребе ХХЕ и такође смо прошли кроз врло једноставан демонстрациони протокол у Ц++. У пракси, овај протокол се може проширити на 3 стране што је погодно за анализу шифрованих података или машинско учење. Можете сазнати више о 3-парти ХХЕ протоколу у недавно објављеном раду [3] на нашем НИСЕЦ лаб на Универзитету у Тампереу. Надам се да ће вам овај чланак бити користан и да ћете се забавити учећи нешто ново у међувремену!
Признање
Овај рад је финансиран од ЕУ ХАРПОЦРАТЕС пројекат .
Референца
[1] Бракерски, Звика и Винод Ваикунтанатхан. „Ефикасно потпуно хомоморфно шифровање из (стандардног) ЛВЕ-а.“ СИАМ Јоурнал о рачунарству 43.2 (2014): 831–871.
[2] Добрауниг, Цхристопх, ет ал. „Тестенина: случај за хибридно хомоморфно шифровање. Криптологија еПринт архива (2021).
[3] Александрос Бакас, Јуџин Фримпонг, Антонис Михалас. “Симметрицал Дисгуисе: Реализинг Хомоморпхиц Енцриптион Сервицес фром Симметриц Примитивес”. ЕАИ СЕЦУРЕЦОММ (2022).
Написао: Кхоа Нгуиен, Универзитет Тампере