लेखक की टिप्पणी: इस लेख में जिन हमलों का उल्लेख किया गया है, वे I2P के वर्तमान संस्करणों के विरुद्ध संभव नहीं हैं।

एक आत्म-संगठित peer-to-peer नेटवर्क के रूप में, I2P नेटवर्क में सहभागी routers पर निर्भर करता है कि वे नेटवर्क पर क्या है और उसे कैसे पहुँचा जाए, इस बारे में जानकारी साझा करने का कोई तरीका रखें। I2P routers यह सूचना-साझाकरण NetDB का उपयोग करके करते हैं, जो Kademlia पर आधारित एक DHT (वितरित हैश तालिका) है, लेकिन I2P के लिए काम करने हेतु संशोधित है। NetDB को दो मुख्य प्रकार की प्रविष्टियाँ साझा करनी होती हैं, “RouterInfos” जिन्हें पीयर्स अन्य routers से सीधे संवाद करने के लिए उपयोग करेंगे, और “LeaseSets” जिन्हें अन्य पीयर्स I2P क्लाइंट्स से गुमनाम tunnels के जरिए संवाद करने के लिए उपयोग करेंगे। Routers अक्सर एक-दूसरे के साथ NetDB प्रविष्टियाँ संप्रेषित करते रहते हैं, या तो किसी router या क्लाइंट को जानकारी भेजकर, या किसी router या क्लाइंट से जानकारी का अनुरोध करके। इसका मतलब है कि प्रविष्टियाँ नेटवर्क की आवश्यकताओं और क्लाइंट की क्षमताओं पर निर्भर करते हुए सीधे या परोक्ष रूप से, गुमनाम रूप से या गैर-गुमनाम रूप से आ सकती हैं। हालाँकि, एक गुमनामी प्रदान करने वाले नेटवर्क के रूप में, यह भी महत्वपूर्ण है कि गुमनाम रूप से भेजी गई जानकारी को गैर-गुमनाम रूप से वापस माँग पाना असंभव ही बना रहे। इसी तरह, गैर-गुमनाम रूप से भेजी गई जानकारी को गुमनाम रूप से वापस माँग पाना भी असंभव होना चाहिए। यदि इन दोनों में से कोई भी स्थिति संभव हो जाती है, तो एक लिंकिंग हमला किया जा सकता है, जो हमलावर को यह निर्धारित करने देता है कि क्या क्लाइंट्स और routers NetDB का समान दृष्टिकोण साझा कर रहे हैं। यदि विश्वसनीय रूप से निर्धारित किया जा सके कि ये दोनों लक्ष्य NetDB का समान दृष्टिकोण साझा करते हैं, तो बहुत अधिक संभावना है कि वे एक ही router पर हों, जिससे लक्ष्य की गुमनामी बुरी तरह कमजोर हो जाती है। क्योंकि गुमनामी प्रदान करने वाले नेटवर्क बहुत कम हैं, और I2P एकमात्र ऐसा है जहाँ रूटिंग तालिका DHT के संचालन के माध्यम से साझा की जाती है, इसलिए इस प्रकार का हमला लगभग I2P के लिए ही विशिष्ट है और इसका समाधान I2P की सफलता के लिए महत्वपूर्ण है।

निम्न परिदृश्य पर विचार करें: एक I2P router है जो एक I2P client को होस्ट कर रहा है। वह router अपना RouterInfo प्रकाशित करता है, और I2P client अपना LeaseSet प्रकाशित करता है। चूंकि दोनों NetDB में प्रकाशित होते हैं, अन्य I2P routers NetDB से क्वेरी करके यह पता लगा सकते हैं कि उनसे कैसे संचार किया जाए। यह I2P द्वारा लागू किए गए इस प्रकार के ओवरले नेटवर्क के संचालन के लिए सामान्य और आवश्यक है। एक हमलावर एक I2P router चलाता है और लक्षित RouterInfo और लक्षित LeaseSet के लिए NetDB को क्वेरी करता है। फिर वह एक नया LeaseSet गढ़ता है जो अद्वितीय और संभवतः नकली भी होता है, और उसे tunnel के माध्यम से उस client के LeaseSet तक भेज देता है जिसे वह हमले के लिए लक्षित कर रहा है। client उस गढ़े हुए LeaseSet को प्रक्रिया करता है और उसे अपने स्वयं के NetDB में जोड़ देता है। इसके बाद हमलावर NetDB से प्राप्त RouterInfo का उपयोग करते हुए, सीधे router से, उसी गढ़े हुए LeaseSet को वापस मांगता है। यदि गढ़ा हुआ LeaseSet उत्तर के रूप में वापस प्राप्त हो जाता है, तो हमलावर यह निष्कर्ष निकाल सकता है कि लक्ष्य client और लक्ष्य router NetDB का एक सामान्य दृश्य साझा करते हैं।

यह NetDB deanonymization (गुमनामी-उन्मोचन) आक्रमण वर्ग का एक साधारण उदाहरण है, जो इस बात पर निर्भर करता है कि एक पहचान से किसी दूसरे व्यक्ति के NetDB में एक प्रविष्टि जोड़ी जाए, और फिर किसी दूसरी पहचान से उसे वापस मंगाया जाए। इस मामले में, जिन पहचानों की बात हो रही है, वे “router” और “client” पहचान हैं। हालाँकि, क्लाइंट-टू-क्लाइंट लिंकिंग, जो कम हानिकारक है, कुछ डिज़ाइनों में भी संभव है। ऐसे आक्रमण के विरुद्ध रक्षा तैयार करने के लिए आवश्यक है कि router के पास यह निर्धारित करने का कोई तरीका हो कि किसी संभावित पहचान के साथ किसी जानकारी का संचार करना सुरक्षित है या नहीं।

तो हमें इस समस्या के बारे में कैसे सोचना चाहिए? असल में, यहाँ हम नेटवर्क पर अलग‑अलग ‘पहचानें’ की linkability (पहचानें आपस में जोड़ी जा सकने की क्षमता) से जुड़ी बात से निपट रहे हैं। लिंक होने की संभावना इसलिए बनती है क्योंकि ये सभी पहचानें एक साझा डेटा संरचना का उपयोग करती हैं, जो ‘याद रखती’ है कि उसने किनके साथ संचार किया है और किन लोगों ने इसके साथ संचार किया है। यह यह भी ‘याद रखती’ है कि वह संचार कैसे हुआ।

एक क्षण के लिए, हमें स्वयं को हमलावर के रूप में कल्पना करनी चाहिए। सोचिए कि आप भेष बदलने के उस्ताद की असली पहचान पता करने की कोशिश कर रहे हैं। आपको पूरी तरह यकीन है कि आपने उसका असली चेहरा देखा है, और आपको यह भी पूरा यकीन है कि आप उसके एक भेष से नियमित रूप से संवाद करते हैं। आप कैसे स्थापित करेंगे कि भेष वाली पहचान और असली पहचान उसी व्यक्ति की है? मैं उस भेषधारी को कोई राज़ बता दूँ। यदि बिना भेष वाला व्यक्ति उसी गुप्त जानकारी का उपयोग करके प्रतिक्रिया देता है, तो मैं तय कर सकता/सकती हूँ कि बिना भेष वाला व्यक्ति वह राज़ जानता है। यह मानकर कि भेषधारी ने वह राज़ किसी और को नहीं बताया, तो मैं मान सकता/सकती हूँ कि बिना भेष वाला और भेषधारी वास्तव में एक ही व्यक्ति हैं। भेष बदलने का उस्ताद चाहे कितने भी नकाब पहन ले, उसका दिमाग एक ही है।

I2P क्लाइंट्स की पहचान को सफलतापूर्वक सुरक्षित रखने के लिए, I2P को ऊपर वर्णित से भी बेहतर भेष बदलने का उस्ताद बनकर काम करने में सक्षम होना चाहिए। उसे NetDB में अपनी भागीदारी के बारे में कई महत्वपूर्ण जानकारियाँ “याद” रखने और उन विवरणों के आधार पर उपयुक्त प्रतिक्रिया देने में सक्षम होना चाहिए। उसे निम्न बातें याद रखने में सक्षम होना चाहिए:

  • Whether a NetDB Entry was received directly, or received down a client tunnel
  • Whether a NetDB Entry was sent by a peer in response to our lookup, or sent unsolicited
  • Which NetDB Entry was received down Which client Tunnel
  • Multiple versions of the same entry for different client tunnels

संरचनात्मक रूप से, इस पैटर्न को संभालने का सबसे समझने योग्य और भरोसेमंद तरीका “Sub-DBs.” (उप-डेटाबेस) का उपयोग करना है। Sub-DB’s छोटे NetDB होते हैं, जो NetDB को प्रविष्टियाँ व्यवस्थित रखने में, बिना उनका ट्रैक खोए, मदद करते हैं। हर क्लाइंट को अपने उपयोग के लिए एक Sub-DB मिलता है, और router स्वयं के लिए एक पूर्ण-विकसित NetDB मिलता है। Sub-DB’s का उपयोग करके, हम अपने भेष बदलने के उस्ताद को रहस्यों की एक व्यवस्थित सूची दे देते हैं, जो इस आधार पर संगठित है कि वे रहस्य किसने उसके साथ साझा किए हैं। जब कोई अनुरोध किसी क्लाइंट को भेजा जाता है, तो वह केवल उन प्रविष्टियों को ढूंढता है जो क्लाइंट को संप्रेषित की गई हैं, और जब कोई अनुरोध किसी router को भेजा जाता है, तो केवल router-व्यापी NetDB का उपयोग किया जाता है। इस तरह करने से हम न केवल हमले के सबसे सरल रूप को सुलझाते हैं, बल्कि पूरे हमले के वर्ग की प्रभावशीलता को भी कमज़ोर कर देते हैं।