paint-brush
Microsoft SEAL और होमोमोर्फिक एन्क्रिप्शन का डॉनद्वारा@jiwasz
1,877 रीडिंग
1,877 रीडिंग

Microsoft SEAL और होमोमोर्फिक एन्क्रिप्शन का डॉन

द्वारा John Iwasz8m2023/01/18
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

पूर्ण होमोमोर्फिक एन्क्रिप्शन (FHE) मूल रूप से 2009 में हासिल किया गया था। होमोमोर्फिक एन्क्रिप्शन संचालन को एन्क्रिप्टेड मानों पर निष्पादित करने में सक्षम बनाता है जैसे कि डिक्रिप्ट किए गए परिणाम संचालन के परिणाम उत्पन्न करते हैं जैसे कि वे मूल अनएन्क्रिप्टेड मानों पर किए गए थे। यह तीसरे पक्षों को एन्क्रिप्टेड डेटा पर गणना करने और मूल मूल्य की जानकारी के बिना परिणाम प्रदान करने में सक्षम बनाता है।
featured image - Microsoft SEAL और होमोमोर्फिक एन्क्रिप्शन का डॉन
John Iwasz HackerNoon profile picture


जबकि पूर्ण होमोमोर्फिक एन्क्रिप्शन (FHE) मूल रूप से 2009 में हासिल किया गया था, अब इस पर अधिक ध्यान देना शुरू हो गया है कि कंप्यूटिंग शक्ति ने अपनी कम्प्यूटेशनल मांगों को पकड़ लिया है; हालाँकि, होमोमोर्फिक एन्क्रिप्शन का लक्ष्य एक दशक पीछे चला जाता है।


एक सरसरी खोज इसके लिए कई परिभाषाएँ खोजेगी। यह सबसे सीधा और संक्षिप्त है:


एन्क्रिप्शन का एक रूप जो एक एन्क्रिप्टेड परिणाम उत्पन्न करने वाले सिफरटेक्स्ट पर गणना की अनुमति देता है, जब डिक्रिप्ट किया जाता है, तो संचालन के परिणाम से मेल खाता है जैसे कि वे सादे टेक्स्ट पर किए गए थे।

- मास्सिमो बर्टाकिनी ( क्रिप्टोग्राफी एल्गोरिथम )


एक क्षण के लिए उस कथन पर विचार करें। होमोमॉर्फिक एन्क्रिप्शन संचालन को एन्क्रिप्टेड मानों पर निष्पादित करने में सक्षम बनाता है जैसे कि डिक्रिप्ट किए गए परिणाम संचालन के परिणाम उत्पन्न करते हैं जैसे कि वे मूल अनएन्क्रिप्टेड मानों पर किए गए थे। सबसे पहला उल्लेख मैंने ऑन डेटा बैंक्स एंड प्राइवेसी होमोमोर्फिज्म (1978) में पाया है, जिसमें लेखक एक ऑन-प्रिमाइसेस सिस्टम में संग्रहीत संवेदनशील वित्तीय डेटा को रिमोट टाइम-शेयरिंग सेवा का उपयोग करके सिस्टम प्रोग्रामर द्वारा एक्सेस किए जाने से रोकने का प्रयास कर रहे हैं।



संवेदनशील वित्तीय डेटा को डेटा बैंक में संग्रहित किया जाता है। डेटा की गणना करने वाली टाइम-शेयरिंग सेवाएं पर्याप्त सुरक्षा लागू नहीं करती हैं। सिस्टम प्रोग्रामर के पास वित्तीय डेटा तक पहुंच होती है। पेपर बताता है:


अपने डेटा को एन्क्रिप्ट करने के लिए एक विशेष गोपनीयता समरूपता का उपयोग करें ताकि टाइम-शेयर कंप्यूटर पहले इसे डिक्रिप्ट किए बिना डेटा पर काम कर सके।


इसे दूसरे तरीके से रखने के लिए, मैं अपने डेटा की प्रोसेसिंग को उस तक पहुंच दिए बिना हटाना चाहता हूं।


इसे दूसरे तरीके से रखने के लिए, फ़ंक्शन (ए, बी) = फ़ंक्शन (ए , B ) जहां ए  and B बी क्रमशः ए और बी के एन्क्रिप्टेड मान हैं। यह तीसरे पक्ष को एन्क्रिप्टेड डेटा की गणना करने और मूल मूल्य के ज्ञान के बिना परिणाम प्रदान करने में सक्षम बनाता है। आरएसए के साथ, एक ही कुंजी से एन्क्रिप्ट किए गए दो मानों को गुणा किया जा सकता है, और उत्पाद को एन्क्रिप्टेड मानों के उत्पाद को डिक्रिप्ट किया जा सकता है।


RSA(5)_ RSA(6) का उपयोग करके 5_6 प्राप्त करें:

  1. आरएसए(5) = (5^17) मोड 3233 = 3096

  2. आरएसए (6) = (6^17) मोड 3233 = 824

  3. 3096*824 = 254864

  4. आरएसए^-1(254864) = 254864^2753 (मॉड 3233) = 30

  5. 5*6 = 30


हालाँकि, यह जोड़ने के लिए काम नहीं करता है। आरएसए आंशिक रूप से होमोमोर्फिक एन्क्रिप्शन (पीएचई) योजना है जिसमें यह केवल गुणन का समर्थन करता है। नीचे दी गई समयरेखा कुछ हद तक होमोमोर्फिक एन्क्रिप्शन (एसएचडब्ल्यूई) के माध्यम से (पीएचई) योजनाओं से प्रगति दिखाती है जो अतिरिक्त और गुणन के सीमित संयोजनों की अनुमति देती है। अमान्य परिणाम तक पहुँचने से पहले इन कार्यों को पाँच बार तक दोहराया जा सकता है। इसके बाद क्रेग जेंट्री की पहली एफएचई योजना आई जिसने निष्ठा हानि के बिना बार-बार जोड़ और गुणा को सक्षम किया।



एकर, अब्बास और अक्सू, हिदायत और उलुगाक, सेल्कुक और कोंटी, मौरो। (2017)। होमोमॉर्फिक एन्क्रिप्शन योजनाओं पर एक सर्वेक्षण: सिद्धांत और कार्यान्वयन। एसीएम कम्प्यूटिंग सर्वेक्षण। 51. 10.1145/3214303.


होमोमोर्फिक एन्क्रिप्शन लाइब्रेरी

2009 से, FHE योजनाओं और पुस्तकालयों का प्रसार हुआ है।

पुस्तकालय

योजनाओं

भाषा

लाइसेंस

माइक्रोसॉफ्ट सील

बीएफवी, बीजीवी, सीकेकेएस

सी ++/सी # रैपर

एमआईटी

एफएचई खोलें

बीएफवी, बीजीवी, सीकेकेएस, डीएम, सीजीजीआई

सी ++

बीएसडी 2-क्लॉज लाइसेंस

हीन

सीकेकेएस

सी ++

क्रिएटिव कॉमन्स 3.0

टीएफएचई

टीएफएचई (टोरस)

जंग

बीएसडी-3-क्लॉज-क्लियर

ठोस

टीएफएचई

जंग

बीएसडी-3-क्लॉज-क्लियर

लट्टिगो

बीएफवी, बीजीवी, सीकेकेएस

जाओ

अपाचे 2.0

इंटेल होमोमॉर्फिक एन्क्रिप्शन टूलकिट

एन/ए – सील, पालिसेड, एचएलआईबी का उपयोग करता है

पायथन, डॉकर

अपाचे 2.0


Microsoft SEAL (सिंपल एनक्रिप्टेड अरिथमेटिक लाइब्रेरी) C++ 17 में C# रैपर के साथ विकसित किया गया है। मूल रूप से 2015 में जारी किया गया, यह अभी भी सक्रिय विकास के अधीन है। जिथब रेपो में गहराई से सी # उदाहरण शामिल हैं जिन्हें आगे डाइविंग में रुचि रखने पर पता लगाया जाना चाहिए।

ये योजनाएँ SEAL द्वारा समर्थित हैं और इसमें जोड़, विभाजन, घटाव और घातांक के लिए होमोमोर्फिक संचालन शामिल हैं, लेकिन विभाजन नहीं।


  • ब्रकर्सकी-जेंट्री-वैकुंठनाथन (बीजीवी)/फैन-वेरकाउतेरेन (बीएफवी)


    • पूर्ण संख्याएँ (लंबी)

    • यदि सटीकता की आवश्यकता है तो उपयोग करें

    • सीकेकेएस की तुलना में गणना धीमी है

    • BGV के साथ एन्क्रिप्ट किए गए मानों का उपयोग BFV के साथ एन्क्रिप्ट किए गए मानों के साथ किया जा सकता है

    • BGV/BVF से एन्क्रिप्ट किए गए मान CKKS से एन्क्रिप्ट किए गए मानों के साथ उपयोग नहीं किए जा सकते

    • परिमित क्षेत्रों के लिए होमोमोर्फिक एन्क्रिप्शन योजनाओं पर दोबारा गौर करना


  • चेओन-किम-किम-सॉन्ग (CKKS)


    • फ़्लोटिंग पॉइंट (डबल)
    • अगर सटीकता की आवश्यकता नहीं है तो प्रयोग करें
    • CKKS के साथ एन्क्रिप्ट किए गए मान BGV/BFV के साथ एन्क्रिप्ट किए गए मानों के साथ उपयोग नहीं किए जा सकते
    • संगणना BFV/BGF से तेज है

Microsoft SEAL के साथ एन्क्रिप्शन और संगणना

ये उदाहरण Microsoft.Research.SEALNet Nuget पैकेज और CKKS योजना का उपयोग करते हैं। FitBit और AppleHeath जैसे स्वास्थ्य ट्रैकर्स को कुछ गोपनीयता छोड़ने की आवश्यकता होती है। वे व्यक्तिगत जानकारी जैसे कदमों की संख्या और पहनने वाले के आंदोलनों के भू-निर्देशांक, दिल की धड़कन की आवृत्ति और अन्य महत्वपूर्ण आँकड़े एकत्र करते हैं। होमोमॉर्फिक एन्क्रिप्शन के साथ, ये स्वास्थ्य मीट्रिक एग्रीगेटर कच्चे डेटा तक पहुंच के बिना अभी भी हमारे डेटा पर काम कर सकते हैं।


इस सरल उदाहरण में, क्लाइंट दूरी और समय सहित रन मेट्रिक्स भेजता है। सर्वर एन्क्रिप्टेड डेटा एकत्र करता है और औसत गति की गणना करता है।


आरंभ करने के लिए, क्लाइंट द्वारा एक सार्वजनिक कुंजी बनाई जाती है और सर्वर के साथ साझा की जाती है। इसका उपयोग डेटा को एन्क्रिप्ट करने और एन्क्रिप्टेड डेटा पर अंकगणितीय संचालन करने के लिए भी किया जाता है। क्लाइंट और सर्वर दोनों एक एनक्रिप्टर का उपयोग करते हैं। क्लाइंट डिक्रिप्शन के लिए उपयोग की जाने वाली एक निजी कुंजी को उत्पन्न करता है और बनाए रखता है जिसे डिक्रिप्टर नाम दिया गया है।


एक दुर्भावनापूर्ण पार्टी जो डेटा को इंटरसेप्ट करती है, एन्क्रिप्टेड डेटा पर सार्वजनिक कुंजी का उपयोग कर सकती है और सर्वर को स्पूफ करके कॉलर को वापस कर सकती है। सर्वर को परिणाम पर हस्ताक्षर करना चाहिए और ग्राहक को यह सुनिश्चित करने के लिए हस्ताक्षर को सत्यापित करना चाहिए कि यह एक विश्वसनीय पार्टी से लौटाया जा रहा है।


 using Microsoft.Research.SEAL; protected SEALContext _context; private KeyGenerator _keyGenerator; private Encryptor _encryptor; private Decryptor _decryptor; protected IFitnessTrackerApiClient _apiClient; . . . _context = SEALUtils.GetContext(_config.Value.PolyModulusDegree, this.SchemeType); _keyGenerator = new KeyGenerator(_context); _keyGenerator.CreatePublicKey(out PublicKey publicKey); _keyGenerator.CreateRelinKeys(out RelinKeys relinKeys); _encryptor = new Encryptor(_context, _publicKey); _decryptor = new Decryptor(_context, _keyGenerator.SecretKey); . . . PublicKeyModelCKKS keyModelCKKS = new( SEALUtils.KeyToBase64String(_publicKey), SEALUtils.KeyToBase64String(relinKeys)); await _apiClient.SendPublicKeyCKKSAsync(keyModelCKKS);


क्लाइंट से सर्वर तक रिलाइनराइजेशन कीज पास की जाती हैं। Microsoft SEAL के अनुसार, गुणन ऑपरेशन के बाद सिफरटेक्स्ट के आकार को कम करने के अलावा उनका कोई अर्थ नहीं है।

कमांड लाइन पर, उपयोगकर्ता समय और दूरी में प्रवेश करता है।


प्रत्येक मान प्लेनटेक्स्ट में एन्कोड किया गया है, फिर सिफरटेक्स्ट में एन्क्रिप्ट किया गया है, और अंत में इसे सर्वर पर भेजने से पहले बेस64 में एन्कोड किया गया है।


 using Microsoft.Research.SEAL; var plaintext = new Plaintext(); _encoder.Encode(value, _scale, plaintext); var ciphertext = new Ciphertext(); _encryptor.Encrypt(value, ciphertext); using (var ms = new MemoryStream()) { ciphertext.Save(ms); return Convert.ToBase64String(ms.ToArray()); }


चूंकि होमोमोर्फिक एन्क्रिप्शन योजनाएँ विभाजन का समर्थन नहीं करती हैं (CKKS कोई अपवाद नहीं है), क्लाइंट को सर्वर को सहायता देने की आवश्यकता होती है। गति का सूत्र है:


  • दूरी / समय


इसे लिखने का दूसरा तरीका है,


  • दूरी * (1/समय)


तो, ग्राहक भेजता है:

 RunItemCKKS metricsRequest = new( EncryptBase64(runItem.Distance), EncryptBase64(runItem.Time), EncryptBase64(1 / runItem.Time)); await _apiClient.AddNewRunningDistanceCKKSAsync(metricsRequest);



सर्वर एक समान बूटस्ट्रैपिंग फ़ंक्शन करता है जो केवल सार्वजनिक कुंजी और पुन: रेखीयकरण कुंजियों का उपयोग करके SEALContext बनाता है, फिर अनुरोध को संसाधित करता है:

 var distance = SEALUtils.BuildCiphertextFromBase64String(request.Distance, _sealContext); var time = SEALUtils.BuildCiphertextFromBase64String(request.Time, _sealContext); var timeReciprocal = SEALUtils.BuildCiphertextFromBase64String(request.TimeReciprocal, _sealContext); Ciphertext speed = new(); _evaluator.Multiply(distance, timeReciprocal, speed); _evaluator.RelinearizeInplace(speed, _relinKeys); _runListCKKS.Add(new EncryptedRunInfoCKKS(distance, time, speed));


सबमिट किए गए रन के लिए गति की गणना करने के लिए समय के एक व्युत्क्रम का उपयोग किया जाता है और RelinearizeInplace पद्धति परिणामी सिफरटेक्स्ट के आकार को कम कर देती है दूरी, समय और गति को एक इन-मेमोरी सूची में सहेजा जाता है।


GetMetrics विधि सूची एकत्र करती है और रिटर्न करती है:

  • रनों की कुल संख्या

  • कुल दूरी

  • कुल समय

  • औसत गति


     public SummaryItemCKKS GetMetrics() { int count = _runListCKKS.Count; var totalDistanceCKKS = SumEncryptedValues(_runListCKKS.Select(m => m.Distance)); var totalTimeCKKS = SumEncryptedValues(_runListCKKS.Select(m => m.Time)); var totalSpeed = SumEncryptedValues(_runListCKKS.Select(m => m.Speed)); . . . protected Ciphertext SumEncryptedValues(IEnumerable<Ciphertext> encryptedData) { . . . Ciphertext encTotal = new(); _evaluator.AddMany(encryptedData, encTotal); return encTotal; . . . }


औसत गति प्राप्त करने के लिए, गिनती के व्युत्क्रम का उपयोग किया जाता है, इसलिए उपयोग करने के बजाय:

(गति का योग)/संख्या या रन हम उपयोग करते हैं:


(गति का योग) * (1/रनों की संख्या)


चूंकि सर्वर रन सबमिशन की संख्या का ट्रैक रखता है, रन की कुल संख्या एक एन्क्रिप्टेड मान नहीं है। उस अनएन्क्रिप्टेड मान को प्लेनटेक्स्ट में बदला जा सकता है और सिफरटेक्स्ट पर किए गए ऑपरेशन में इस्तेमाल किया जा सकता है हालांकि यह एक साधारण उदाहरण है, निहितार्थ ध्यान देने योग्य हैं। सर्वर एन्क्रिप्टेड डेटा पर उपयोग किए जाने वाले अतिरिक्त मान प्रदान कर सकता है, जिससे तृतीय-पक्ष प्रदाताओं को ग्राहक द्वारा प्रदान किए गए एन्क्रिप्टेड डेटा के खिलाफ गणना के लिए मालिकाना डेटा लागू करने में सक्षम बनाया जा सके।

नीचे दिए गए उदाहरण में, कुल संख्या को एक व्युत्क्रम में बदला जाता है और एक सूची <डबल> में जोड़ा जाता है। सीकेकेएस संचालन एन्क्रिप्टेड सूची मानों की अपेक्षा करता है, भले ही सूची में केवल एक मान हो। तो, List<double> को PlainText में एन्कोड किया गया है। MultiplyPlainInplace कुल गति को (1/रनों की संख्या) से गुणा करता है जिसके परिणामस्वरूप औसत गति प्राप्त होती है। स्थान बचाने के लिए, परिणाम टोटलस्पीड सिफरटेक्स्ट पर लागू होता है और री-लीनियराइज़ेशन कुंजियाँ आउटपुट के आकार को कम करती हैं।


 Plaintext encodedCountReciprocal = new(); List<double> averagePaceList = new(); double runCountReciprocal = 1 / (double)count; averagePaceList.Add(runCountReciprocal); _encoder.Encode(averagePaceList, _scale, encodedCountReciprocal); _evaluator.MultiplyPlainInplace(totalSpeed, encodedCountReciprocal); _evaluator.RelinearizeInplace(totalSpeed, _relinKeys);


मान बेस 64 एन्कोडेड, लौटाए गए और क्लाइंट पर डिक्रिप्ट किए गए हैं। क्लाइंट डिक्रिप्ट किए गए प्लेनटेक्स्ट को List<double> में बदलने का अतिरिक्त कदम उठाता है।


 var payload = Convert.FromBase64String(encryptedDistanceText); using var ms = new MemoryStream(payload); var ciphertext = new Ciphertext(); ciphertext.Load(_context, ms); var decryptedText = new Plaintext(); _decryptor.Decrypt(cypherText, decryptedText); List<double> distanceList = new(); _encoder.Decode(decryptedText, distanceList);


निम्नलिखित मूल्यों को भेजने से एक सेवा द्वारा गणना की गई कुल और औसत गति प्राप्त होती है जो क्लाइंट से भेजे गए डेटा को डिक्रिप्ट किए बिना कुल और औसत को सारणीबद्ध करती है।

मील की दूरी पर

समय

2.5

0:35:32.643

2.2

0:32:48.826

2.8

0:34:52.036


सर्वर डेटा की गणना करता है और भेजे गए किसी भी डेटा को डिक्रिप्ट किए बिना कुल रन, दूरी, समय और गति लौटाता है।







सारांश

Microsoft SEAL एक Microsoft अनुसंधान परियोजना है और उत्पादन अनुप्रयोग के लिए तैयार नहीं है। सभी वर्ग IDisposable को लागू करते हैं और अप्रबंधित संसाधनों का उपयोग करते हैं। उत्पादन कोड को मेमोरी लीक से बचाने की आवश्यकता होगी। SEALContext वर्ग एकल उत्तरदायित्व सिद्धांत का पालन नहीं करता है। इसमें बीजीवी/बीवीएफ और सीकेकेएस दोनों के लिए तरीके शामिल हैं। इसके अलावा, सीकेकेएस वेक्टर संचालन का समर्थन करता है, लेकिन वेक्टर जोड़ नहीं। एक एकल सूची <डबल> को एक एकल सिफरटेक्स्ट में एन्क्रिप्ट किया जा सकता है लेकिन एक सिफरटेक्स्ट में मानों को जोड़ने का कोई साधन नहीं है यह वेक्टर रोटेशन के साथ किया जा सकता है, लेकिन यह एक उप-इष्टतम समाधान है।


यह फ़िटनेस ट्रैकर कोड नमूना एक जटिल विषय का सरल परिचय है। अधिक शामिल तर्क के साथ कई सम्मोहक उपयोग के मामले हैं:

होमोमोर्फिक एन्क्रिप्शन का व्यापक रूप से अकादमिक और प्रोटोटाइप में उपयोग किया गया है। होमोमोर्फिक एन्क्रिप्शन योजनाओं के लिए आवश्यक कंप्यूटिंग शक्ति द्वारा व्यावहारिक अनुप्रयोगों को सीमित कर दिया गया है। जीपीयू त्वरण और एएसआईसी प्रोसेसर इस बाधा को खत्म करना जारी रखेंगे। Intel, Microsoft और DARPA के सहयोग से होमोमोर्फिक एन्क्रिप्ट योजनाओं के उद्देश्य से निर्मित FHE हार्डवेयर त्वरक विकसित कर रहा है। NASDAQ धोखाधड़ी का पता लगाने के लिए मशीन लर्निंग के साथ होमोमोर्फिक एन्क्रिप्शन का उपयोग करके एक R&D परियोजना को भी वित्तपोषित कर रहा है। FHE.org समुदाय इस क्षेत्र में नवीनतम विकास के लिए एक उत्कृष्ट संसाधन है। इसमें एक सक्रिय डिस्कॉर्ड सर्वर है


इस आलेख के सभी कोड नमूने johniwasz/microsoft-seal-samples पर उपलब्ध हैं। अधिक गहन Microsoft SEAL उदाहरण के लिए, ये .NET उदाहरण देखें।



यहाँ भी प्रकाशित हुआ।