जबकि पूर्ण होमोमोर्फिक एन्क्रिप्शन (FHE) मूल रूप से 2009 में हासिल किया गया था, अब इस पर अधिक ध्यान देना शुरू हो गया है कि कंप्यूटिंग शक्ति ने अपनी कम्प्यूटेशनल मांगों को पकड़ लिया है; हालाँकि, होमोमोर्फिक एन्क्रिप्शन का लक्ष्य एक दशक पीछे चला जाता है। एक सरसरी खोज इसके लिए कई परिभाषाएँ खोजेगी। यह सबसे सीधा और संक्षिप्त है: एन्क्रिप्शन का एक रूप जो एक एन्क्रिप्टेड परिणाम उत्पन्न करने वाले सिफरटेक्स्ट पर गणना की अनुमति देता है, जब डिक्रिप्ट किया जाता है, तो संचालन के परिणाम से मेल खाता है जैसे कि वे सादे टेक्स्ट पर किए गए थे। - मास्सिमो बर्टाकिनी ( ) क्रिप्टोग्राफी एल्गोरिथम एक क्षण के लिए उस कथन पर विचार करें। होमोमॉर्फिक एन्क्रिप्शन संचालन को एन्क्रिप्टेड मानों पर निष्पादित करने में सक्षम बनाता है जैसे कि डिक्रिप्ट किए गए परिणाम संचालन के परिणाम उत्पन्न करते हैं जैसे कि वे मूल अनएन्क्रिप्टेड मानों पर किए गए थे। सबसे पहला उल्लेख मैंने (1978) में पाया है, जिसमें लेखक एक ऑन-प्रिमाइसेस सिस्टम में संग्रहीत संवेदनशील वित्तीय डेटा को रिमोट टाइम-शेयरिंग सेवा का उपयोग करके सिस्टम प्रोग्रामर द्वारा एक्सेस किए जाने से रोकने का प्रयास कर रहे हैं। ऑन डेटा बैंक्स एंड प्राइवेसी होमोमोर्फिज्म संवेदनशील वित्तीय डेटा को डेटा बैंक में संग्रहित किया जाता है। डेटा की गणना करने वाली टाइम-शेयरिंग सेवाएं पर्याप्त सुरक्षा लागू नहीं करती हैं। सिस्टम प्रोग्रामर के पास वित्तीय डेटा तक पहुंच होती है। पेपर बताता है: अपने डेटा को एन्क्रिप्ट करने के लिए एक विशेष गोपनीयता समरूपता का उपयोग करें ताकि टाइम-शेयर कंप्यूटर पहले इसे डिक्रिप्ट किए बिना डेटा पर काम कर सके। इसे दूसरे तरीके से रखने के लिए, मैं अपने डेटा की को उस दिए बिना हटाना चाहता हूं। प्रोसेसिंग तक पहुंच इसे दूसरे तरीके से रखने के लिए, फ़ंक्शन (ए, बी) = फ़ंक्शन (ए ) जहां ए बी क्रमशः ए और बी के एन्क्रिप्टेड मान हैं। यह तीसरे पक्ष को एन्क्रिप्टेड डेटा की गणना करने और मूल मूल्य के ज्ञान के बिना परिणाम प्रदान करने में सक्षम बनाता है। आरएसए के साथ, एक ही कुंजी से एन्क्रिप्ट किए गए दो मानों को गुणा किया जा सकता है, और उत्पाद को एन्क्रिप्टेड मानों के उत्पाद को डिक्रिप्ट किया जा सकता है। , B &nbsp;and B RSA(5)_ RSA(6) का उपयोग करके 5_6 प्राप्त करें: आरएसए(5) = (5^17) मोड 3233 = 3096 आरएसए (6) = (6^17) मोड 3233 = 824 3096*824 = 254864 आरएसए^-1(254864) = 254864^2753 (मॉड 3233) = 30 5*6 = 30 हालाँकि, यह जोड़ने के लिए काम नहीं करता है। आरएसए आंशिक रूप से होमोमोर्फिक एन्क्रिप्शन (पीएचई) योजना है जिसमें यह केवल गुणन का समर्थन करता है। नीचे दी गई समयरेखा कुछ हद तक होमोमोर्फिक एन्क्रिप्शन (एसएचडब्ल्यूई) के माध्यम से (पीएचई) योजनाओं से प्रगति दिखाती है जो अतिरिक्त और गुणन के सीमित संयोजनों की अनुमति देती है। अमान्य परिणाम तक पहुँचने से पहले इन कार्यों को पाँच बार तक दोहराया जा सकता है। इसके बाद की पहली एफएचई योजना आई जिसने निष्ठा हानि के बिना बार-बार जोड़ और गुणा को सक्षम किया। क्रेग जेंट्री होमोमोर्फिक एन्क्रिप्शन लाइब्रेरी 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 के साथ एन्क्रिप्शन और संगणना ये उदाहरण Nuget पैकेज और CKKS योजना का उपयोग करते हैं। FitBit और AppleHeath जैसे स्वास्थ्य ट्रैकर्स को कुछ गोपनीयता छोड़ने की आवश्यकता होती है। वे व्यक्तिगत जानकारी जैसे कदमों की संख्या और पहनने वाले के आंदोलनों के भू-निर्देशांक, दिल की धड़कन की आवृत्ति और अन्य महत्वपूर्ण आँकड़े एकत्र करते हैं। होमोमॉर्फिक एन्क्रिप्शन के साथ, ये स्वास्थ्य मीट्रिक एग्रीगेटर कच्चे डेटा तक पहुंच के बिना अभी भी हमारे डेटा पर काम कर सकते हैं। Microsoft.Research.SEALNet इस सरल उदाहरण में, क्लाइंट दूरी और समय सहित रन मेट्रिक्स भेजता है। सर्वर एन्क्रिप्टेड डेटा एकत्र करता है और औसत गति की गणना करता है। आरंभ करने के लिए, क्लाइंट द्वारा एक सार्वजनिक कुंजी बनाई जाती है और सर्वर के साथ साझा की जाती है। इसका उपयोग डेटा को एन्क्रिप्ट करने और एन्क्रिप्टेड डेटा पर अंकगणितीय संचालन करने के लिए भी किया जाता है। क्लाइंट और सर्वर दोनों एक क्लाइंट डिक्रिप्शन के लिए उपयोग की जाने वाली एक निजी कुंजी को उत्पन्न करता है और बनाए रखता है जिसे नाम दिया गया है। एनक्रिप्टर का उपयोग करते हैं। डिक्रिप्टर एक दुर्भावनापूर्ण पार्टी जो डेटा को इंटरसेप्ट करती है, एन्क्रिप्टेड डेटा पर सार्वजनिक कुंजी का उपयोग कर सकती है और सर्वर को स्पूफ करके कॉलर को वापस कर सकती है। सर्वर को परिणाम पर हस्ताक्षर करना चाहिए और ग्राहक को यह सुनिश्चित करने के लिए हस्ताक्षर को सत्यापित करना चाहिए कि यह एक विश्वसनीय पार्टी से लौटाया जा रहा है। 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/रनों की संख्या) चूंकि सर्वर रन सबमिशन की संख्या का ट्रैक रखता है, रन की कुल संख्या एक एन्क्रिप्टेड मान नहीं है। उस अनएन्क्रिप्टेड मान को में बदला जा सकता है और सिफरटेक्स्ट पर किए गए ऑपरेशन में इस्तेमाल किया जा सकता है हालांकि यह एक साधारण उदाहरण है, निहितार्थ ध्यान देने योग्य हैं। सर्वर एन्क्रिप्टेड डेटा पर उपयोग किए जाने वाले अतिरिक्त मान प्रदान कर सकता है, जिससे तृतीय-पक्ष प्रदाताओं को ग्राहक द्वारा प्रदान किए गए एन्क्रिप्टेड डेटा के खिलाफ गणना के लिए मालिकाना डेटा लागू करने में सक्षम बनाया जा सके। प्लेनटेक्स्ट । नीचे दिए गए उदाहरण में, कुल संख्या को एक व्युत्क्रम में बदला जाता है और एक सीकेकेएस संचालन एन्क्रिप्टेड सूची मानों की अपेक्षा करता है, भले ही सूची में केवल एक मान हो। तो, को में एन्कोड किया गया है। कुल गति को (1/रनों की संख्या) से गुणा करता है जिसके परिणामस्वरूप औसत गति प्राप्त होती है। स्थान बचाने के लिए, परिणाम टोटलस्पीड पर लागू होता है और री-लीनियराइज़ेशन कुंजियाँ आउटपुट के आकार को कम करती हैं। सूची <डबल> में जोड़ा जाता है। List<double> PlainText MultiplyPlainInplace सिफरटेक्स्ट 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 के सहयोग से होमोमोर्फिक एन्क्रिप्ट योजनाओं के उद्देश्य से निर्मित विकसित कर रहा है। NASDAQ धोखाधड़ी का पता लगाने के लिए मशीन लर्निंग के साथ को भी वित्तपोषित कर रहा है। FHE.org समुदाय इस क्षेत्र में नवीनतम विकास के लिए एक उत्कृष्ट संसाधन है। इसमें एक सक्रिय । FHE हार्डवेयर त्वरक होमोमोर्फिक एन्क्रिप्शन का उपयोग करके एक R&D परियोजना डिस्कॉर्ड सर्वर है इस आलेख के सभी कोड नमूने पर उपलब्ध हैं। अधिक गहन Microsoft SEAL उदाहरण के लिए, ये देखें। johniwasz/microsoft-seal-samples .NET उदाहरण यहाँ भी प्रकाशित हुआ।