Giriş
I2P, üzerinde herhangi bir sayıda farklı anonimlik veya güvenlik bilincine sahip uygulamanın çalışabileceği, ölçeklenebilir, kendi kendini düzenleyen, esnek bir paket anahtarlamalı anonim ağ katmanıdır. Bu uygulamaların her biri, özgür bir rota karma ağının uygun şekilde uygulanması konusunda endişelenmeden kendi anonimliklerini, gecikme sürelerini ve verim uzlaşmalarını yapabilir ve etkinliklerini halihazırda I2P üzerinde çalışan daha büyük anonimlik grubuyla harmanlayabilir.
Var olan uygulamalar, anonim internet üzerinde gezinme, site barındırma, sohbet, dosya paylaşımı, e-posta, blog oluşturma ve içerik paylaşımı, haber grupları ile ayrıca geliştirilmekte olan diğer birçok uygulama gibi tipik İnternet etkinliklerinin tamamını karşılamaktadır.
- İnternet üzerinde gezinme: Vekil sunucu desteği olan herhangi bir tarayıcı kullanılabilir.
- Sohbet: IRC, Jabber, I2P-Messenger.
- Dosya paylaşımı: I2PSnark, Robert, iMule, I2Phex, PyBit, I2P-bt ve diğerleri.
- E-posta: susimail ve I2P-Bote.
- Blog: Pebble uygulama eki ya da Syndie dağıtılmış blog yazılımı.
- Dağıtılmış veri depolama: Verilerinizi I2P üzerinden Tahoe-LAFS bulutunda yedekli olarak kaydedebilirsiniz.
- Haber grupları: Vekil sunucu desteği olan herhangi bir haber grubu okuyucusu kullanılabilir.
Freenet ya da GNUnet gibi içerik dağıtım ağlarında barındırılan sitelerin aksine, I2P üzerinde barındırılan hizmetler tamamen etkileşimlidir. Geleneksel internet tarzı arama motorları, forumlar, yorum yapabileceğiniz bloglar, veri tabanı destekli siteler ve yerel olarak kurmaya gerek kalmadan Freenet gibi sabit sistemleri sorgulamak için köprüler vardır.
Anonimliğin etkin olduğu tüm bu uygulamalarla, I2P ileti odaklı ara yazılım rolünü üstlenir. Uygulamalar bir şifreli belirtece ("hedef") bazı veriler göndermek istediklerini söyler ve I2P verilerin oraya anonim bir şeklikde güvenli olarak ulaşmasını sağlar. Ayrıca, I2P en iyi çabayla anonim iletilerin güvenilir, sıralı akışlar olarak aktarılmasını sağlamak için basit bir akış kitaplığı sağlar ve ağın yüksek bant genişliği gecikme ürünü için ayarlanmış TCP tabanlı bir tıkanıklık kontrol algoritmasını şeffaf bir şekilde sunar. Var olan uygulamaları ağa bağlamak için birkaç basit SOCKS vekil sunucusu bulunsa da, hemen hemen her uygulama, anonim bir bağlamda hassas bilgileri rutin olarak açığa çıkardığından, bunların değeri pek bilinmemiştir. İlerlemenin tek güvenli yolu, düzgün çalışmayı sağlamak için bir uygulamayı tamamen denetlemek ve ağdan en iyi şekilde yararlanmak için kullanılabilecek çeşitli dillerde bir dizi API sağlamamıza yardımcı olmaktır.
I2P, akademik, ticari veya resmi bir araştırma projesi değildir. Gerek duyanlara yeterli düzeyde anonimlik sağlamak için ne gerekiyorsa yapmayı amaçlayan bir mühendislik çalışmasıdır. 2003 yılının başından beri bir tam zamanlı geliştirici ve dünyanın her yerinden özel bir yarı zamanlı katılımcı grubuyla etkin şekilde geliştirilmektedir. I2P üzerinde yapılan tüm çalışmalar açık kaynak kodludur ve sitesinde ücretsiz olarak sunulmaktadır. Kodun çoğu doğrudan herkese açık olarak yayınlanır. Birkaç şifreleme rutini BSD tarzı lisanslar altında sunulur. I2P üzerine çalışan kişiler, istemci uygulamalarını kimlerin yayınlayacağını kontrol etmez ve GPL lisansı ile birkaç uygulama vardır (I2PTunnel, susimail, I2PSnark, I2P-Bote, I2Phex ve diğerleri.). I2P için Kaynak tamamen bağışlardan sağlanır ve geliştiricilerin çoğu anonim olduğu için şu anda herhangi bir yasal yetki bölgesindeki herhangi bir vergi indiriminden yararlanılmıyor.
İşletme
Özet
I2P işleyişini anlamak için birkaç temel kavramın anlaşılması önemlidir. İlk olarak, I2P, ağa katılan yazılım (bir "yöneltici") ile bireysel uygulamalarla ilişkili anonim uç noktalar ("hedefler") arasında kesin bir ayrım yapar. Birinin I2P çalıştırdığı gerçeği genellikle bir sır değildir. Gizli olan, kullanıcının ne yaptığı, herhangi bir şey yapıyorsa belirli bir hedefin hangi yönelticiye bağlı olduğu hakkında bilgidir. Son kullanıcıların yönelticilerinde tipik olarak birkaç yerel hedefi olacaktır. Örneğin, biri IRC sunucuları için vekil sunucuyu, bir başkası, kullanıcının anonim site sunucusunu ("I2P Sitesi"), diğeri bir I2Phex kopyasını, diğeri torrent kullanımı gibi işlemleri destekler.
Anlaşılması gereken bir diğer kritik kavram da "tünel"dir. Tünel, açıkça seçilmiş bir yöneltrici listesi üzerinden yöneltilen bir yoldur. Katmanlı şifreleme kullanılır, bu nedenle yönelticilerin her biri yalnızca tek bir katmanın şifresini çözebilir. Şifresi çözülen bilgilerde, iletilecek şifreli bilgilerle birlikte bir sonraki yönelticinin IP adresi bulunur. Her tünelin bir başlangıç noktası ("ağ geçidi" olarak da bilinen ilk yöneltrici) ve bir bitiş noktası vardır. İletiler yalnızca bir şekilde gönderilebilir. İletileri geri göndermek için başka bir tünel gereklidir.
Şekil 1: İki tünel türü: Geliş ve gidiş.
İki tür tünel vardır: "gidiş" tüneli tünel oluşturucudan dışarı iletiler gönderirken, "geliş" tüneli iletileri tünel oluşturucuya getirir. Bu iki tünel bir arada kullanılarak kullanıcıların birbirlerine ileti gönderilmesi sağlanır. Gönderici (yukarıdaki görselde "Alice") bir gidiş tüneli oluştururken alıcı (yukarıdaki görselde "Bob") bir geliş tüneli oluşturur. Geliş tünelinin ağ geçidi, herhangi bir başka kullanıcıdan ileti alabilir ve bunları uç noktaya ("Bob") kadar gönderir. Gidiş tünelinin uç noktasının, geliş tünelinin ağ geçidine ileti göndermesi gerekir. Bunu yapmak için gönderici ("Alice") şifreli iletisine yönergeler ekler. Gidiş tünelinin uç noktası iletinin şifresini çözdüğünde, iletiyi doğru geliş ağ geçidine ("Bob" ağ geçidi) iletmek için yönergeleri almış olur.
Anlaşılması gereken üçüncü kritik kavram, ağ üst verilerini paylaşmak için kullanılan bir çift algoritma olan I2P "Ağ veri tabanı" (NetDB) olacak. Taşınan iki üst veri türü "Yöneltici bilgileri" (RouterInfo) ve "Kiralama kümeleri" (LeaseSets) - "Yöneltici bilgileri" (RouterInfo), yönelticilere belirli bir yöneltici ile iletişim kurmak için gerekli verileri (herkese açık anahtarlar, taşıyıcı adresleri, vb.) verirken, "Kiralama kümesi" (LeaseSet) yönelticilere belirli bir hedefle iletişim kurmak için gereken bilgileri verir. Bir "Kiralama kümesi" (LeaseSet) içinde bir dizi "kiralama" bulunur. Bu kiralamaların her biri, belirli bir hedefe ulaşmayı sağlayan bir tünel ağ geçidi belirtir. Bir kiralamadaki tüm bilgiler şunlardır:
- Belirli bir hedefe ulaşmayı sağlayan bir tünelin geliş ağ geçidi.
- Bir tünelin geçerlilik süresi.
- İletileri şifreleyebilmek için (tünelden göndermek ve hedefe ulaşmak için) herkese açık anahtar çifti.
Yönelticiler, "Yöneltici bilgilerini" (RouterInfo) doğrudan "Ağ veri tabanına" (NetDB) gönderirken, "Kiralama kümeleri" (LeaseSets) gidiş tünelleri üzerinden gönderilir (bir yönelticinin kendi "Kiralama kümesi" ile ilişkilendirilmesini önlemek için "Kiralama kümelerinin" anonim olarak gönderilmesi gerekir).
Ağda başarılı bağlantılar kurmak için yukarıdaki kavramları birleştirebiliriz.
Alice, kendi geliş ve gidiş tünellerini oluşturmak için "Yöneltici bilgilerini" (RouterInfo) toplamak amacıyla "Ağ veri tabanı" (NetDB) üzerinde bir arama yapar. Böylece, tünellerinde sıçrama olarak kullanabileceği eşlerin listelerini toplar. Daha sonra ilk sıçramaya bir oluşturma iletisi gönderebilir, bir tünel oluşturulmasını isteyebilir ve yönelticiden tünel oluşturulana kadar oluşturma iletisini göndermesini isteyebilir.
Şekil 2: Tünelleri oluşturmak için kullanılan yöneltici bilgileri.
Alice, Bob'a bir ileti göndermek istediğinde, önce Bob'un "Kiralama kümesini" (LeaseSet) bulmak için "Ağ veri tabanında" (NetDB) bir arama yapar ve ona var olan geliş tüneli ağ geçitlerini öğrenir. Ardından, gidiş tünellerinden birini seçer ve iletiyi Bob'un geliş tüneli ağ geçitlerinden birine iletmek için gidiş tünelinin uç noktası için yönergelerle birlikte aşağıya gönderir. Gidiş tüneli uç noktası bu yönergeleri aldığında, iletiyi istendiği gibi iletir ve Bob'un geliş tüneli ağ geçidi bunu aldığında, tünelden Bob'un yönelticisine iletilir. Alice, Bob'un iletiyi yanıtlayabilmesini istiyorsa, kendi hedefini iletinin bir parçası olarak açıkça iletmelidir. Bu, Streaming kitaplığında yapılan daha yüksek düzeyle bir katman sunularak yapılabilir. Alice ayrıca, Bob'un yanıt vermek istemesi durumunda "Ağ veri tabanı" (NetDB) araması yapmasına gerek kalmaması için en son "Kiralama kümesini" (LeaseSet) iletiye katarak yanıt süresini kısaltabilir. Ancak bu seçenek isteğe bağlıdır.
Şekil 3: "Kiralama kümelerini" (LeaseSets) kullanarak gidiş ve geliş tünellerini bağlamak.
Tünellerin kendileri, ağ içindeki eşlere karşı izinsiz açığa çıkmalarını önlemek için katmanlı şifreleme kullansa da (ağ dışındaki eşlere izin açığa çıkmayı önlemek için taşıma katmanının yaptığı gibi), gidiş tüneli uç noktasından ve geliş tüneli ağ geçidinden gelen iletiyi gizlemek için ek bir uçtan uca şifreleme katmanı eklemek gerekir. Bu "Garlic şifrelemesi", Alice'in yönelticisinin birden çok iletiyi tek bir "Garlic iletisine" sarmalamasını ve belirli bir ortak anahtarla şifrelemesini sağlar. Böylece aracı eşler Garlic içinde kaç ileti olduğunu, bu iletilerin ne söylediğini veya bu iletilerin nerede olduğunu ya da bu dişin hangi hedefe gönderildiğini belirleyemez. Alice ve Bob arasında tipik uçtan uca iletişim için, garlic Bob'un "Kiralama kümesinde" (LeaseSet) yayınlanan ortak anahtarla şifrelenir. Böylece herkese açık anahtar Bob'un kendi yönelticisine verilmeden iletinin şifrelenmesi sağlanır.
Akılda tutulması gereken bir diğer önemli durum, I2P uygulamasının tamamen ileti temelli olduğu ve yol boyunca bazı iletilerin kaybolabileceğidir. I2P kullanan uygulamalar, ileti odaklı arayüzleri kullanabilir ve kendi tıkanıklık denetimi ile güvenilirlik gereksinimlerini karşılayabilir. Ancak çoğunun en iyi şekilde hizmet sağlaması için, I2P uygulamasını akış temelli bir ağ olarak görüntülemek için sağlanan akış kitaplığını yeniden kullanması gerekir.
Tüneller
Geliş ve gidiş tünelleri benzer ilkelerle çalışır. Tünel ağ geçidi, bir dizi tünel iletisi biriktirir ve sonunda bunları tünel aktarımı için bir şey olarak ön işler. Ardından, ağ geçidi ön işlenmiş verileri şifreler ve ilk sıçramaya iletir. Bu eş ve sonraki tünel katılımcıları, bir sonraki eşe iletmeden önce kopya olmadığını doğruladıktan sonra bir şifreleme katmanı ekler. Sonunda ileti, iletilerin yeniden bölündüğü ve istendiği gibi iletildiği uç noktaya ulaşır. Fark, tüneli oluşturanın yaptığı işte ortaya çıkar. Geliş tünellerinde, oluşturucu uç noktadır ve eklenen tüm katmanların şifresini çözer. Gidiş tünellerinde oluşturucu ağ geçididir ve tüm katmanların şifresini önceden çözer. Her sıçrama için şifrelemenin tüm katmanları eklendikten sonra, ileti tünel uç noktasına net bir şekilde ulaşır.
İletileri iletmek için belirli eşlerin seçilmesi ve bunların özel sıralaması, hem I2P anonimliğini hem de başarım özelliklerini anlamak için önemlidir. Ağ veri tabanının (aşağıda) hangi eşlerin sorgulanıp kayıtları depolayacağını seçmek için kendi ölçütleri olsa da, tünel oluşturucular ağdaki herhangi bir eşi herhangi bir sırayla (ve hatta herhangi bir sayıda) tek bir tünelde kullanabilir. Mükemmel gecikme ve kapasite verileri küresel olarak biliniyor olsaydı, seçim ve sıralama, istemci tehdit modelleri ve belirli gereksinimleri tarafından yönlendirilirdi. Ne yazık ki, gecikme ve kapasite verilerinin anonim olarak toplanması önemsiz değildir ve bu bilgileri sağlamak için güvenilmeyen eşlere bağlı olmanın anonimlik üzerinde ciddi etkileri vardır.
Anonimlik açısından en basit yöntem, tüm ağdan rastgele eşler seçmek, bunları rastgele sıralamak ve bu eşleri sonsuza kadar bu sırayla kullanmak olur. Başarım açısından bakıldığında, en basit yöntem, gerekli yedek kapasiteye sahip en hızlı eşleri seçmek, yükü şeffaf olarak devretmek için yükü farklı eşler arasında dağıtmak ve kapasite bilgileri değiştiğinde tüneli yeniden oluşturmak olur. İlki hem kırılgan hem de verimsiz iken, ikincisi için erişilemez bilgiler gerekir ve yetersiz anonimlik sunar. Bunun yerine I2P, eşleri profillerine göre düzenlemek için anonimlik farkında ölçüm koduyla birleştirilmiş bir dizi eş seçim stratejisi sunmaya çalışır.
Temel olarak, I2P etkileşimde bulunduğu eşlerin dolaylı davranışlarını sürekli olarak ölçerek profillerini oluşturur. Örneğin, bir eş 1,3 saniyede bir "Ağ veri tabanı" (NetDB) aramasına yanıt verdiğinde, bu gidiş dönüş gecikmesi tüm yönelticilerin profillerine kaydedilerek, İstek ve yanıtın geçtiği iki tünelde (geliş ve gidiş) ve sorgulanan eşin profilinde yer alır. Taşıma katmanı gecikmesi veya tıkanıklık gibi doğrudan ölçümler, manipüle edilebildiği ve ölçüm yönelticisi ile ilişkilendirilebileceğinden ve onları önemsiz saldırılara açık bırakabileceğinden profilin bir parçası olarak kullanılmaz. Bu profiller toplanırken, başarımını, gecikmesini, çok sayıda etkinliği işleme kapasitesini, şu anda aşırı yüklü olup olmadığını ve ağ ile ne kadar bütünleşmiş olduğunu özetlemek için her biri üzerinde bir dizi hesaplama yapılır. Daha sonra bu hesaplamalar, yönelticileri hızlı ve yüksek kapasiteli, yüksek kapasiteli, sorunsuz ve sorunlu olmak üzere dört düzeyde gruplamak için etkin eşleri karşılaştırmakta kullanılır. Bu düzeylerin eşikleri devingen olarak belirlenir ve şu anda oldukça basit algoritmalar kullanır. Ancak alternatifleri de vardır.
Bu profil verileri kullanılarak, en basit uygun eş seçimi stratejisi, eşleri üst düzeyden (hızlı ve yüksek kapasiteli) rastgele seçmektir. Şu anda istemci tünelleri bu şekilde dağıtılmaktadır. Keşif tünelleri ("Ağ veri tabanı" (NetDB) ve tünel yönetimi için kullanılır) "sorunsuz" düzeyinden ('daha iyi" katmanlardaki yönelticileri de içerir) rastgele eşler seçer. Eşler arası yönelticileri daha geniş bir şekilde örnekleme olanağı sağlar ve aslında rastgele tepe tırmanışı ile eş seçimini iyileştirir. Ancak bu stratejiler, öncül ve "Ağ veri tabanı" (NetDB) hasat saldırıları ile yönelticinin en üst düzeyindeki eşler hakkında bilgi sızdırır. Buna karşılık, yükü eşit olarak dengelememekle birlikte, belirli düşman sınıfları tarafından düzenlenen saldırılara karşı koyacak çeşitli alternatifler vardır.
Rastgele bir anahtar seçerek ve eşleri ondan XOR uzaklıklarına göre sıralayarak, eşlerin başarısızlık oranına ve düzeyin karıştırılmasına göre öncül ve hasat saldırılarında sızdırılan bilgiler azaltılır. "Ağ veri tabanı" (NetDB) hasat saldırılarıyla başa çıkmak için başka bir basit strateji, geliş tüneli ağ geçitlerini düzeltmek ve aynı zamanda tünellerdeki eşleri daha da rastgele hale getirmektir. İstemcinin bağlantı kurduğu düşmanlara yönelik önceki saldırılarla başa çıkmak için gidiş tüneli uç noktaları da sabit kalır. En çok maruz kalan noktada hangi eşin düzeltileceğinin seçiminin elbette bir süre sınırı olmalıdır. Çünkü sonunda tüm eşler başarısız olur. Böylece diğer yönelticilerin sorunları arasında ölçülen ortalama süreyi taklit etmek için tepkisel olarak ayarlanabilir ya da etkisel olarak önlenebilir. Bu iki strateji, sırayla, sabit bir açık eş ve tüneller arasında bir XOR tabanlı sıralama kullanılarak birleştirilebilir. Daha katı bir strateji, tam eşleri ve olası bir tünelin sıralamasını düzeltir. Yalnızca her biri aynı şekilde katılmayı kabul ederse tek tek eşler kullanılır. Bu yöntem, XOR tabanlı sıralamadan farklıdır, çünkü her bir eşin öncülü ve ardılı her zaman aynıdır. XOR ise yalnızca sıralarının değişmediğinden emin olur.
Daha önce belirtildiği gibi, I2P şu anda (sürüm 0.8), XOR tabanlı sıralama ile yukarıdaki düzeyli rastgele stratejiyi kullanıyor. Tünel işletimi, yönetimi ve eş seçimi ile ilgili mekanizmalar hakkında ayrıntılı bir tartışma tunnel teknik özelliklerinde bulunabilir.
Ağ veri tabanı
Daha önce belirtildiği gibi, I2P "Ağ veri tabanı" (NetDB) ağın üst verilerini paylaşmak için çalışır. Bu konu, ağ veri tabanı (netDB) sayfasında ayrıntılı olarak açıklanmıştır. Bununla birlikte basit bir açıklamayı aşağıda bulabilirsiniz.
I2P kullanıcılarının belirli bir yüzdesi 'otomatik doldurma eşleri' olarak atanır. Şu anda, çok fazla bant genişliği olan ve yeterince hızlı I2P kurulumları, var olan otomatik doldurma yönelticilerinin sayısı çok azaldığında kendilerini otomatik doldurma yönelticisi olarak atar.
Diğer I2P yönelticileri, otomatik doldurma yönelticilerine basit "depolama" ve "arama" sorguları göndererek verilerini ve arama bilgilerini depolar. Bir otomatik doldurma yönelticisi bir "depolama" sorgusu alırsa, bilgileri Kademlia algoritmasını kullanarak diğer otomatik doldurma yönelticilerine yayar. "Arama" sorguları, şu anda önemli bir güvenlik sorununu önlemek için farklı şekilde çalışıyor. Bir arama yapıldığında, otomatik doldurma yönelticisi aramayı diğer eşlere iletmez. Ancak her zaman kendi kendine yanıt verir (istenilen verilere sahipse).
Ağ veri tabanında iki türde bilgi depolanır.
- "Yöneltici bilgileri" (RouterInfo) belirli bir I2P yönelticisi ve nasıl bağlantı kurulacağı hakkında bilgileri tutar.
- "Kiralama kümesi" (LeaseSet) belirli bir hedefin bilgilerini tutar (I2P sitesi, e-posta sunucusu gibi)
Tüm bu bilgiler, yayınlayan tarafça imzalanır ve bilgileri kullanan veya depolayan herhangi bir I2P yönelticisi tarafından doğrulanır. Ek olarak, eski kayıtların tutulmasını ve olası saldırıları önlemek için verilerde süre bilgisi bulunur. Bu aynı zamanda I2P tarafından doğru zamanı korumak, ara sıra bazı SNTP sunucularını sorgulamak (varsayılan olarak pool.ntp.org round robin) ve taşıyıcı katmanındaki yönelticiler arasındaki sapmayı algılamak için gerekli kodu bir araya getirmekte kullanılır.
Bazı ek açıklamalar da önemlidir.
-
Yayınlanmamış ve "Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets):
Bir kişi yalnızca belirli kişilerin bir hedefe ulaşabilmesini isteyebilir. Bu, hedef "Ağ veri tabanında" (NetDB) yayınlanabilir. Ancak hedefi başka yollarla iletmeniz gerekir. Bir alternatif, "Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets) kullanmak olur. Bu "Kiralama kümeleri" (LeaseSets) yalnızca şifre çözme anahtarına erişimi olan kişiler tarafından çözülebilir.
-
Ön yükleme:
"Ağ veri tabanının" (NetDB) ön yüklenmesi oldukça basittir. Bir yöneltici, erişilebilir bir eşten tek bir "Yöneltici bilgileri" (RouterInfo) almayı başardığında, ağdaki diğer yöneltici referansları için bu yönelticiyi sorgulayabilir. Şu anda, birkaç kullanıcı, bu bilgileri kullanılabilir hale getirmek için "Yöneltici bilgileri" (RouterInfo) dosyalarını bir siteye gönderiyor. I2P, "Yöneltici bilgileri" (RouterInfo) dosyalarını ve ön yüklemeyi almak için otomatik olarak bu sitelerden birine bağlanır.
-
Arama ölçeklenebilirliği:
I2P ağındaki aramalar diğer "Ağ veri tabanı" (NetDB) yönelticilerine iletilmez. Şu anda, ağ çok büyük olmadığı için bu büyük bir sorun oluşturmaz. Ancak ağ büyüdükçe, her ağ veri tabanı yönelticisinde "Yöneltici bilgileri" (RouterInfo) ve "Kiralama kümesi" (LeaseSet) dosyalarının tümü bulunmaz ve başarılı arama oranı düşer. Bu nedenle, sonraki sürümlerde ağ veri tabanında iyileştirmeler yapılacaktır.
Taşıyıcı iletişim kuralları
Yönelticiler arasındaki iletişimde, iletişim kurulan yönelticinin belirli bir iletiyi alması gereken yöneltici olduğunu doğrulanırken, dış düşmanlara karşı gizlilik ve bütünlük sağlanması gerekir. Yönelticilerin diğer yönelticilerle nasıl iletişim kurduğunun ayrıntıları kritik değildir. Temel gereksinimleri karşılamak için farklı noktalarda üç ayrı iletişim kuralı kullanılmıştır.
I2P, o zamandan beri devre dışı bırakılan TCP tabanlı bir iletişim kuralı ile başladı. Daha sonra, yüksek düzeyli iletişim gereksinimini karşılamak için (birkaç yöneltici diğerleriyle konuşacağından), I2P, TCP tabanlı bir taşıyıcıdan UDP tabanlı bir taşıyıcıya - "Güvenli yarı güvenilir UDP" ya da "SSU" kullanmaya geçti.
SSU teknik özelliklerinde belirtildiği şekilde:
Bu iletişim kuralının amacı, güvenli, kimliği doğrulanmış, yarı güvenilir ve sıralanmamış ileti aktarımını sağlamak ve üçüncü tarafların kolayca fark edemeyeceği kadar az miktarda veri ortaya çıkarmaktır. TCP dostu tıkanıklık denetiminin yanında yüksek düzeyli iletişimi desteklerken PMTU algılamasını da içerebilir. Ev kullanıcıları için toplu verileri yeterli hızlarda verimli bir şekilde aktarabilmelidir. Ayrıca, NAT veya güvenlik duvarı gibi yaygın kullanılan ağ engellerini ele alan teknikleri desteklemelidir.
SSU duyurulduktan sonra ve tıkanıklık çökmesi sorunlarının ortaya çıkmasıyla, NTCP adlı yeni bir NIO tabanlı TCP taşıyıcısı uygulandı. Yalnızca gidiş bağlantıları için varsayılan olarak etkindir. NAT/güvenlik duvarlarını geliş bağlantılarına izin verecek şekilde yapılandıranlar ve /config.jsp üzerinde dış sunucu ve bağlantı noktası (dyndns/etc tamam olan) belirtenler geliş bağlantılarını alabilir. NTCP NIO tabanlı olduğundan, eski TCP taşıyıcısındaki her bağlantı için 1 işlem sorunu yaşanmaz.
I2P, aynı anda birden fazla taşıyıcı kullanılmasını destekler. Gidiş bağlantısı için belirli bir taşıyıcı "teklifler" yoluyla seçilir. Bağlantı için her taşıyıcı teklifi ve bu tekliflerin göreli değeri önceliği belirler. Taşıyıcılar, eş ile daha önce kurulmuş bir bağlantı olup olmadığına bağlı olarak farklı tekliflerle yanıt verebilir.
Geçerli uygulama, çoğu durumda gidiş bağlantıları için en yüksek öncelikli taşıyıcı olarak NTCP değerlendirmesi yapar. SSU, hem gidiş hem de geliş bağlantılar için etkinleştirilir. Güvenlik duvarınız ve I2P yönelticiniz, geliş NTCP bağlantılarına izin verecek şekilde yapılandırılmalıdır. Ayrıntılı bilgi almak için NTCP sayfasına bakabilirsiniz.
Şifreleme
I2P üzerinde çeşitli düşmanlara karşı katmanlı savunma sağlamak için en düşük düzeyde şifreleme öncülleri bir araya getirilir. En düşük düzeyde, yönelticiler arası iletişim, taşıyıcı katmanı güvenliği tarafından korunur - SSU, Diffie-Hellman alış verişi ile elde edilen 2048 bitlik kısa ömürlü bir oturum anahtarı üzerinde anlaştıktan sonra her paketi hem açık IV hem de MAC (HMAC-MD5-128) ile AES-256/CBC ile şifreler ve diğer yönelticinin DSA anahtarıyla istasyondan istasyona kimliği doğrular. Ayrıca her ağ iletisinin yerel bütünlük denetimi için kendi karması vardır. Taşıyıcılar üzerinden geçirilen Tünel iletileri, açık bir IV ile kendi katmanlı AES-256/CBC şifrelemesini kullanır ve tünel uç noktasında ek bir SHA-256 karması ile doğrulanır. ElGamal/AES+SessionTags (aşağıda açıklanmıştır) ile şifrelenmiş "garlic iletileri" içinde çeşitli diğer iletiler aktarılır.
Garlic iletileri
Garlic iletileri, "onion" katmanlı şifrelemenin bir uzantısıdır ve tek bir iletinin içeriğinin birden fazla "diş" içermesini sağlar - kendi aktarım yönergelerinin yanında tam olarak biçimlendirilmiş iletiler. İleriler aksi durumda bilgiye erişimi olmaması gereken bir eşten açık metin olarak geçtiğinde, iletiler bir Garlic iletisine samalanır. Örneğin, bir yöneltici başka bir yönelticiden bir tünele katılmasını istediğinde, istek bir Garlic içine samalanır. Bu Garlic alıcı yönelticinin 2048bit ElGamal ortak anahtarına şifrelenir ve bir tünelden iletilir. Başka bir örnek, bir istemci bir hedefe ileti göndermek istediğinde - göndericinin yönelticisi bu veri iletisini (diğer bazı iletilerin yanında bir Garlic içine sarmalar. Bu Garlic alıcının "Kiralama kümesi" (LeaseSet) içinde yayınlanan 2048 bit ElGamal herkese açık anahtarı ile şifrelenir ve uygun tünellerden geçirilir.
Şifreleme katmanının içindeki her bir dişe eklenmiş "yönergeler", dişin yerel olarak, uzak bir yönelticiye ya da uzak bir yönelticideki uzak bir tünele aktarılmasını isteme yeteneğini bulundurur. Bu yönergelerde, bir eşin aktarımın belirli bir zaman veya koşul karşılanana kadar ertelenmesini istemesini sağlayan alanlar vardır. Ancak bunlar önemsiz gecikmeler dağıtılana kadar kabul edilmez. Garlic iletilerini tünel oluşturmadan herhangi bir sayıda sıçrama ile açıkta yöneltmek ya da tünel iletilerini garlic iletilerine sararak ve tüneldeki bir sonraki sıçramaya iletmeden önce birkaç sıçramadan geçirerek yönlendirilebilir. Ancak bu teknikler şu andaki uygulama kullanılmıyor
Oturum etiketleri
Güvenilmez, sıralı olmayan ileti tabanlı bir sistem olan I2P, garlic iletilerinin veri gizliliği ve bütünlüğü sağlamak için asimetrik ve simetrik şifreleme algoritmalarının basit bir kombinasyonunu kullanır. Bir bütün olarak, kombinasyon ElGamal/AES+Oturum etiketi olarak anılır. Ancak bu, basit 2048 bit ElGamal, AES-256, SHA-256 ve 32 bayt nonce kullanımını açıklamak için aşırı derecede ayrıntılı bir yoldur.
Bir yöneltici ilk kez başka bir yönelticiye göndereceği bir garlic iletisini şifrelemek istediğinde, bir AES-256 oturum anahtarı için anahtarlama materyalini ElGamal ile şifreler ve bu şifrelenmiş ElGamal bloğunun ardından AES-256/CBC ile şifrelenmiş yükü ekler. Şifrelenmiş yüke ek olarak, AES ile şifrelenmiş bölümü yük uzunluğu, şifrelenmemiş yükün SHA-256 karması ve ayrıca bir dizi "oturum etiketi" - rastgele 32 baytlık olmayanlar - bulunur. Gönderici bir dahaki sefere bir garlic iletisini başka bir yönlendiriciye şifrelemek istediğinde, ElGamal yeni bir oturum anahtarını şifrelemek yerine, daha önce teslim edilmiş oturum etiketlerinden birini seçer ve AES, daha önce olduğu gibi, o oturum etiketiyle kullanılan oturum anahtarını kullanarak yükü şifreler. Bu bilgi oturum etiketinin başına eklenir. Bir yöneltici bir garlic şifrelenmiş iletisi aldığında, uygun bir oturum etiketiyle eşleşip eşleşmediğini görmek için ilk 32 baytı kontrol eder. Eşleşme bulunursa yalnızca AES iletisinin şifresini çözer. Bulunmazsa ElGamal ilk bloğun şifresini çözer.
Her oturum etiketi, iç izleyicilerin aynı yönelticiler arasında olduğu gibi farklı iletileri gereksiz yere ilişkilendirmesini önlemek için yalnızca bir kez kullanılabilir. ElGamal/AES+Oturum etiketi şifrelemiş iletisinin göndericisi, ne zaman ve kaç etiketin teslim edileceğini seçer ve alıcıya bir sürü iletiyi kapsayacak kadar yeterli etiket hazırlar. Garlic iletileri küçük bir ek iletiyi bir diş ("teslim durumu iletisi") olarak paketleyerek etiket tesliminin başarılı olduğunu algılayabilir - garlic iletisi hedeflenen alıcıya ulaştığında ve şifresi başarıyla çözüldüğünde, bu küçük teslim durumu dişlerden biridir. Açığa çıkar ve alıcının dişi özgün göndericiye geri göndermesi için yönergeler içerir (elbette bir geliş tüneli üzeirnden). Özgün gönderici bu teslim durumu iletisini aldığında, garlic iletisinde gruplanan oturum etiketlerinin başarıyla iletildiğini bilir.
Oturum etiketlerinin ömürleri kısadır. bu sürenin sonunda kullanılmazlarsa atılır. Ek olarak, her bir anahtar için depolanan miktar ve anahtarların sayısı sınırlıdır. Çok fazla gelirse, yeni veya eski iletiler kaybolabilir Gönderici, oturum etiketlerini kullanan iletilerin geçip geçmediğini izler ve yeterli iletişim yoksa, daha önce düzgün bir şekilde iletildiği varsayılanları bırakarak en pahalı ElGamal şifrelemesine geri dönebilir.
Bir alternatif, yalnızca tek bir oturum etiketi iletmek ve bundan, hangi etiketlerin kullanılacağını veya bekleneceğini belirlemek için belirleyici bir PRNG tohumlanmasıdır. Bu PRNG verisini gönderici ve alıcı arasında kabaca eşitlenmiş olarak tutularak (alıcı örneğin sonraki 50 etiketin bir penceresini önceden hesaplar), çok sayıda etiketi düzenli olarak gruplamanın yükü ortadan kaldırır ve ek seçenekler ile alan/zaman değiş tokuşu ve belki de gerekli ElGamal şifrelemelerinin sayısını daha fazla azaltılması sağlanır. Bununla birlikte, iç düşmanlara karşı gerekli korumayı sağlamak PRNG gücüne bağlı olacaktır. Ancak belki de her bir PRNG kullanım sürelerini sınırlayarak, herhangi bir zayıflık en aza indirilebilir. Şu anda, eşitlenen PRNG yöntemine doğru ilerlemek için acil bir plan yok.
Gelecek
I2P şu anda birçok senaryo için işlevsel ve yeterli olsa da, daha güçlü rakiplerle karşılaşanların gereksinimleri için daha fazla iyileştirme ve önemli kullanıcı deneyimi iyileştirmesi gereken birkaç alan var.
Kısıtlanmış yöneltme işlemi
I2P, anonimlik ve güvenlik sunmak için uçtan uca ilkesinden yararlanan, işlevsel bir paket anahtarlamalı ağın üzerinde çalıştırılmak üzere tasarlanmış bir kaplama ağıdır. İnternet artık uçtan uca ilkesini (NAT kullanımı nedeniyle) tam olarak benimsemese de, I2P ağının erişilebilir olması için ağın önemli bir bölümünün uçtan uca olması gerekir. Kenarlarda kısıtlanmış rotalar kullanarak çalışan birkaç eş olabilir. Ancak I2P, çoğu eşin erişilemediği bozulmuş durum için uygun bir yöneltme algoritması sunmaz Bununla birlikte, böyle bir algoritmayı kullanan bir ağ üzerinde çalışacaktır.
Eşlerin doğrudan erişilebileceği sınırların olduğu kısıtlanmış yöneltme işlemi, kısıtlanmış yöneltmelerin nasıl işlendiğine bağlı olarak birkaç farklı işlevsellik ve anonimlik çıkarımına sahiptir. En temel düzeyde, bir eş, geliş bağlantılarına izin vermeyen bir NAT veya güvenlik duvarının arkasında olduğunda kısıtlanmış rotalar vardır. Bu sorun, I2P 0.6.0.6 sürümünde taşıyıcı katmanına dağıtılmış delik açma özelliği eklenerek büyük ölçüde çözüldü ve çoğu NAT ve güvenlik duvarı arkasındaki kişilerin herhangi bir yapılandırma olmadan ve ayrı bir istek yapmadan bağlantılar alması sağlandı. Ancak bu, eşin IP adresinin ağ içindeki yönelticiler tarafından görülmesini engellemez, çünkü bunlar yayınlanmış tanıtıcı üzerinden eşe duyurulabilir.
Kısıtlanmış rotaların işlevsel olarak ele alınmasının ötesinde, kişinin IP adresinin açığa çıkmasını engellemek için kullanılabilecek iki sınırlı işlem düzeyi vardır - İletişim için yönelticiye özel tüneller kullanmak ve "istemci yönelticileri" sunmak. İlki için, yönelticiler yeni bir tünel havuzu oluşturabilir ya da keşif havuzlarını yeniden kullanabilir. Geliş ağ geçitlerini bazılarına taşıyıcı adresleri yerine "Yöneltici bilgilerinin" (RouterInfo) bir parçası olarak yayınlayabilir. Bir eş onlarla iletişim kurmak istediğinde, "Ağ veri tabanında" (NetDB) bu tünel ağ geçitlerini görür ve ilgili iletiyi yayınlanan tünellerden biri üzerinden onlara gönderir. Kısıtlanmış yöneltmenin arkasındaki eş yanıt vermek isterse, bunu doğrudan (IP adreslerini eşe göstermeye istekliyse) veya dolaylı olarak gidiş tünelleri üzerinden yapabilir. Eşin doğrudan bağlantısı olan yönelticiler kendisine ulaşmak (örneğin tünel iletilerini iletmek için) istediklerinde, doğrudan bağlantılarına yayınlanan tünel ağ geçidi üzerinden öncelik verirler. "İstemci yönelticileri" kavramı, herhangi bir yöneltici adresi yayınlamayarak kısıtlanmış yöneltmeyi genişletir. Böyle bir yönelticinin yöneltici bilgilerini ağ veri tabanında yayınlamasına bile gerek kalmaz. Yalnızca kendi imzalı yöneltici bilgilerini bağlantı kurduğu eşlere sağlar (yönelticinin herkese açık anahtarlarını iletmek için gereklidir). I2P 2.0 için her iki kısıtlı yöneltme işlemi düzeyinin de kullanılması planlanmıştır.
Kısıtlanmış rotaların ardında bulunanlar için, büyük olasılıkla diğer insanların tünellerine daha az katkıda bulunacakları ve bağlı oldukları yönelticiler, aksi durumda açığa çıkmayacak trafik kalıplarını çıkarabilecekleri için uzlaşmalar vardır. Öte yandan, bu uzlaşmanın maliyeti, bir IP adresinin kullanıma sunulmasının maliyetinden daha düşükse, buna değebilir. Bu, elbette, yönelticinin kısıtlı bir yöneltme temasının arkasındaki eşlerin düşman olmadığını varsayar. Ya ağ çok büyük olduğundan, düşman bir eşe bağlanma olasılığı çok küçüktür ya da güvenilir (ve belki de geçici) eşler kullanılır.
Değişken gecikme
Başlangıçtaki I2P çabalarının çoğu düşük gecikmeli iletişim üzerine olsa da, tasarım başından beri değişken gecikmeli hizmetler düşünülerek yapıldı. En temel düzeyde, I2P üzerinde çalışan uygulamalar, trafik kalıplarını düşük gecikmeli trafikle harmanlarken orta ve yüksek gecikmeli iletişimin anonimliğini sunabilir. I2P içinde garlic şifrelemesi yoluyla kendi orta ve yüksek gecikmeli iletişimini sunabilir. İleti belirli bir gecikmeden sonra, belirli bir zamanda, belirli sayıda iletiden sonra ya da başka bir karma strateji ile gönderilebilir. Katmanlı şifrelemeyle, yöneltici yalnızca gecikme isteğini açıklayan dişin yüksek gecikme süresi gerektirdiğini bilir ve bu da trafiğin düşük gecikmeli trafikle daha fazla karışmasını sağlar. İletim ön koşulu karşılandıktan sonra, yöneltici dişi (kendisi büyük olasılıkla bir garlic iletisidir) istendiği gibi bir yönelticiye bir tünele ya da büyük olasılıkla uzak bir istemci hedefine gönderir.
I2P üzerinde yüksek gecikmeli iletişim için bu kapasiteden yararlanmanın çok sayıda yolu vardır. Ancak şu anda bunun I2P 3.0 sürümünde yapılması planlanmıştır. O zamana kadar, yüksek gecikmeli iletişimin sunabileceği anonimliğe gerek duyanlar, bunu sağlamak için uygulama katmanına bakmalıdır.
Açık sorular
- Zamanlama kısıtlamasından nasıl kurtulunur?
- Daha etkin bir sessionTags işlemesi sağlayabilir miyiz?
- Tüneller için herhangi bir toplu işlem ya da karma stratejisi oluşturmalı mıyız?
- Başka tünel eş seçimi ve sıralama stratejileri neler olabilir?
Benzer sistemler
I2P mimarisi, ileti odaklı ara yazılım kavramları, "Dağıtılmış karma tablosu" (DHT) topolojisi, serbest rota karma ağlarının anonimliği ve şifrelemesi ile paket anahtarlamalı ağların uyarlanabilirliği üzerine kuruludur. Değeri, yeni algoritma kavramlarından değil, var olan sistemlerin ve makalelerin araştırma sonuçlarını birleştiren dikkatli mühendislikten gelir. Hem teknik hem de işlevsel karşılaştırmalar için incelemeye değer birkaç benzer çaba olsa da, özellikle iki tanesi öne çıkarıldı - Tor ve Freenet.
Ağ karşılaştırmaları sayfasına da bakın.
Tor
İlk bakışta Tor ve I2P, işlevsellik ve anonimlikle ilgili oldukça benzerdir. I2P gelişimi, Tor üzerindeki erken aşama çabalarını bilmeden önce başlamış olsa da, özgün onion yöneltme ve ZKS çabalarından alınan derslerin çoğu I2P tasarımı ile bütünleştirildi. Dizin sunucuları ile temelde güvenilir, merkezi bir sistem oluşturmak yerine, I2P, var olan kaynaklardan en iyi şekilde nasıl yararlanılacağını belirlemek için her bir eşin diğer yönelticilerin profilini çıkarma sorumluluğunu üstlendiği kendi kendini düzenleyen bir ağ veri tabanı kullanır. Diğer önemli bir fark, hem I2P hem de Tor katmanlı ve sıralı yollar (tüneller ve devreler/akışlar) kullanmasına rağmen, I2P temelde paket anahtarlamalı bir ağ iken, Tor ağının temelde devre anahtarlamalı olması nedeniyle I2P ağı, sorunlar ve yedekli yolları kullanarak verileri var olan kaynaklar arasında dengeler ve tıkanıklık veya diğer ağlar etrafından şeffaf bir şekilde yöneltme sağlar. Tor, bütünleşik çıkış vekil sunucusu keşfi ve seçimi sunarak faydalı çıkış vekil sunucu işlevselliği sunarken, I2P, bu tür uygulama katmanı kararlarını I2P üzerinde çalışan uygulamalara bırakır. Aslında I2P, geliştiricilere daha iyi başarım sunmak için kendi etki alanına özgü bilgilerinden yararlanarak farklı stratejiler denemeleri için TCP benzeri akış kitaplığını uygulama katmanı dışına açtı.
Anonimlik açısından bakıldığında, çekirdek ağlar karşılaştırıldığında çok fazla benzerlik görülebilir. Ancak, birkaç önemli farklılık da vardır. Ağ içindeki bir saldırganla ya da çok sayıdaki dış saldırganla uğraşırken, Tek yönlü I2P tünelleri, yalnızca akışların kendilerine bakarak, çift yönlü Tor devrelerinin taşıyacağının yarısı kadar trafik verisi açığa çıkarır. Bir HTTP isteği ve yanıtı Tor ağında aynı yolu izlerken, I2P ağında isteği oluşturan paketler bir ya da daha fazla çıkış tünelinden dışarı çıkar ve yanıtı oluşturan paketler bir ya da daha fazla farklı geliş tünelinden geri gelir. I2P eş seçimi ve sıralama stratejileri önceki saldırıları yeterince ele alırken, çift yönlü tünellere geçiş gerekliyse, aynı yönelticiler boyunca basitçe bir geliş ve gidiş tüneli oluşturabiliriz.
Tor üzerinde teleskopik tünel oluşturma kullanımında başka bir anonimlik sorunu ortaya çıkıyor. Bir devredeki hücreler bir saldırganın düğümünden geçerken basit paket sayımı ve zamanlama ölçümleri, düşmanın devre içinde nerede olduğuna ilişkin istatistiksel bilgileri ortaya çıkarıyor. Bu verilerin açığa çıkmaması için I2P tek bir ileti ile tek yönlü tünel oluşturuyor. Bir saldırgan bir dizi güçlü öncül, kavşak ve trafik doğrulama saldırısı gerçekleştirebileceğinden, bir tünelin konumunun korunması önemlidir.
Tor tasrafından sağlanan ikinci bir "onion vekil sunucuları" katmanı, düşük bir başlangıç maliyeti ile önemsiz olmayan bir düzeyde anonimlik sunarken, I2P bu topolojiyi 2.0 sürümüne kadar sunmayacak.
Genel olarak, Tor ve I2P odak noktalarında birbirlerini tamamlar. Tor, yüksek hızlı anonim İnternet çıkış vekil sunucusu sağlamaya çalışırken, I2P kendi içinde merkezi olmayan esnek bir ağ sağlamaya çalışır. Teoride, ikisi de her iki amaca da ulaşmak için kullanılabilir. Ancak sınırlı geliştirme kaynakları göz önüne alındığında, her ikisinin de güçlü ve zayıf yönleri vardır. I2P geliştiricileri, Tor uygulamasını I2P ağının tasarımından yaralanacak şekilde değiştirmek için gerekli adımları düşündüler. Ancak Tor uygulamasının kıt kaynaklar altında yaşayabilirliği konusundaki endişeler, I2P paket anahtarlama mimarisinin kıt kaynakları daha etkili bir şekilde kullanabileceğini gösteriyor.
Freenet
Freenet, I2P tasarımının ilk aşamalarında büyük bir rol oynadı. Tamamen ağ içinde yer alan canlı bir takma adlı topluluğun yaşayabilirliğini kanıtlayarak, çıkış vekil sunucularının doğasında bulunan tehlikelerden kaçınılabileceğini gösterdi. İlk I2P tohumu, ölçeklenebilir, anonim ve güvenli bir noktadan noktaya iletişimin karmaşıklıklarını sansüre dayanıklı dağıtılmış bir veri deposunun karmaşıklıklarından ayırmaya çalışan Freenet için bir yedek iletişim katmanı olarak başladı. Ancak zamanla, Freenet algoritmalarının doğasında bulunan bazı anonimlik ve ölçeklenebilirlik sorunları, I2P odak noktasının, bir Freenet bileşeni olmak yerine kesinlikle genel bir anonim iletişim katmanı sağlamak olması gerektiğini açıkça ortaya koydu. Yıllar geçtikçe, Freenet geliştiricileri eski tasarımdaki zayıflıkları görmeye başladı ve önemli bir anonimlik sunmak için bir "ön karışım" katmanına gerek duyacaklarını önermeye yöneldi. Başka bir deyişle, Freenet I2P veya Tor gibi bir karma ağ üzerinde çalışmalıdır. "İstemci düğümleri", karma ağ üzerinde "sunucu düğümleri" üzerine veri alma istekleri gönderir ve verileri yayınlar. Ardından verileri buluşsal dağıtılmış Freenet depolama algoritmalarına göre alır ve depolar.
Freenet işlevselliği I2P işlevlerini tamamlar. Çünkü Freenet yerel olarak orta ve yüksek gecikmeli sistemleri çalıştırmak için birçok araç sunarken, I2P yerel olarak yeterli anonimlik sunmaya uygun düşük gecikmeli karma ağı sağlar. Karma ağı sansüre dayanıklı dağıtılmış veri deposundan ayırma mantığı mühendislik, anonimlik, güvenlik ve kaynak ayırma açısından hala açık görünüyor. Bu yüzden umarım Freenet ekibi, I2P veya Tor gibi var olan karma ağları yalnızca yeniden kullanmak (veya gerektiğinde iyileştirilmesine yardımcı olmak) yerine bu yönde çaba harcar.
Son zamanlarda Freenet geliştiricileri tarafından farklı güven düzeyindeki eşler arasında kısıtlı yollar kullanan "küresel olarak ölçeklenebilir bir karanlık ağ" üzerine tartışıldığını ve çalıştığını belirtmekte fayda var. Böyle bir sistemin tam bir inceleme için nasıl çalışacağı konusunda kamuya yeterli bilgi verilmemiş olsa da, söylenenlere göre anonimlik ve ölçeklenebilirlik iddiaları oldukça şüpheli görünüyor. Özellikle, devlet düzeyindeki hasımlara karşı katı rejimlerde kullanım uygunluğu aşırı derecede abartılmıştır ve görünüşe göre kaynak kıtlığının ağın ölçeklenebilirliği üzerindeki etkilerine ilişkin herhangi bir analizden kaçınılmıştır. Trafik analizine duyarlılık, güven ve diğer konularla ilgili başka sorular da var. Ancak bu "küresel olarak ölçeklenebilir karanlık ağ" hakkında daha derin bir inceleme, Freenet ekibi daha fazla bilgi sağlayana kadar beklemek zorunda kalacak.
Appendix A: Application layer
Aslında I2P pek bir şey yapmaz. Yalnızca uzak hedeflere iletiler gönderir ve yerel hedeflere yönelik iletileri alır. İlginç çalışmaların çoğu, I2P üzerrindeki katmanlarda olur. I2P kendi başına anonim ve güvenli bir IP katmanı olarak, streaming kitaplığı ile bunun üzerinde anonim ve güvenli bir TCP katmanının bir uygulaması olarak görülebilir. Bunun ötesinde, I2PTunnel, I2P ağına girmek veya çıkmak için genel bir TCP vekil sunucu sistemi sunar. Ayrıca çeşitli ağ uygulamaları son kullanıcılar için daha fazla işlevsellik sağlar.
Akış kitaplığı
I2P Streaming kitaplığı, genel bir akış arabirimi (TCP soketlerini yansıtma) olarak görülebilir ve uygulama, I2P üzerindeki yüksek gecikmeyi hesaba katmak için çeşitli iyileştirmelerle kayan aralık iletişim kuralını destekler. Akışlar bireysel olarak en fazla paket boyutunu ve diğer seçenekleri ayarlayabilir. Ancak varsayılan olarak sıkıştırılmış 4KB, kayıp iletilerin yeniden iletilmesinin bant genişliği maliyetleri ile çoklu iletilerin gecikmesi arasında makul bir denge kuruyor gibi görünmektedir.
Ek olarak, sonraki iletilerin nispeten yüksek maliyeti göz önüne alındığında, Streaming kitaplığının iletileri programlama ve teslim etme iletişim kuralı, iletilen bireysel iletilerin var olduğu kadar çok bilgi içermesine izin verecek şekilde iyileştirilmiştir. Örneğin, Streaming kitaplığı aracılığıyla vekil sunucu üzerinden geçilrilen küçük bir HTTP işlemi tek bir gidiş-dönüşte tamamlanabilir. İlk ileti bir SYN, FIN iletileri ile küçük yükü (genellikle bir HTTP isteğine uyar) paketler ve yanıt SYN, FIN, ACK iletileri ile küçük yükü paketler (birçok HTTP yanıtı uygundur). HTTP sunucusuna SYN/FIN/ACK iletilerinin alındığını söylemek için ek bir ACK iletilmesi gerekirken, yerel HTTP vekil sunucusu tarayıcıya tam yanıtı hemen teslim edebilir.
Bununla birlikte, genel olarak, Streaming kitaplığı, kayan aralıklar, tıkanıklık kontrol algoritmaları (hem yavaş başlatma hem de tıkanıklıktan kaçınma) ve genel paket davranışı (ACK, SYN, FIN, RST, vb.) ile bir TCP soyutlamasına benzer.
Adlandırma kitaplığı ve adres defteri
Ayrıntılı bilgi almak için Adlandırma ve adres defteri bölümüne bakabilirsiniz.
Geliştiren: mihi, Ragnarok
I2P üzerinde adlandırma, en başından beri, çeşitli olasılıkların savunucuları ile sıkça tartışılan bir konu olmuştur. Bununla birlikte, I2P yapısının güvenli iletişim ve merkezi olmayan çalışma şekli için doğal istekleri göz önüne alındığında, geleneksel DNS benzeri adlandırma sistemi ve "çoğunluk kuralları" oylama sistemleri açıkça geçersizdir. Bunun yerine, I2P, genel bir adlandırma kitaplığı ve yerel bir adla hedef eşleme üzerinde çalışacak şekilde tasarlanmış bir temel uygulamanın yanı sıra "Adres defteri" adı verilen isteğe bağlı bir ek uygulamayla birlikte gelir. Adres defteri, yalnızca yerel benzersizliği zorunlu kılarak, yalnızca insan tarafından okunabilen tüm adların küresel olarak benzersiz olması çağrısını feda eden, ağa güvenmeye odaklı, güvenli, dağıtılmış ve insan tarafından okunabilir bir adlandırma sistemidir. I2P ağındaki tüm iletiler, hedefleri tarafından şifrelenmiş olarak adreslenirken, farklı kişilerin, farklı hedefleri gösteren aynı "Alice" yerel adres defteri kayıtları bulunabilir. İnsanlar, güvendikleri ağlarda belirtilen eşlerin yayınlanmış adres defterlerini içe aktararak, üçüncü bir taraf aracılığıyla sağlanan kayıtları ekleyerek ya da (bazı kişiler bir ilk gelen ilk alır kayıt sistemi kullanarak bazı yayınlanmış adres defterleri düzenlerse) yine de yeni adlar keşfedebilir. İnsanlar bu adres defterlerini geleneksel DNS sistemini taklit eden ad sunucuları olarak değerlendirmeyi seçebilirler.
I2P, DNS benzeri hizmetlerin kullanımını desteklemez, çünkü bir sitenin ele geçirilmesinin vereceği zarar çok büyük olabilir ve güvenli olmayan hedeflerin hiçbir değeri yoktur. DNSsec verileri kayıt şirketlerine ve sertifika yetkililerine geri giderken, I2P ile, bir hedefe gönderilen veriler, hedefin herkese açık anahtarları ile şifrelendiğinden ve bir hedefin kendisi yalnızca bir herkese açık anahtar ve sertifika çifti olduğundan, istekler engellenemez veya yanıta müdahale edilemez. Öte yandan DNS tarzı sistemler, arama yolundaki ad sunucularından herhangi birinin basit hizmet reddi ve sahtekarlık saldırıları başlatmasına izin verir. Yanıtları doğrulamak için merkezi sertifika yetkilileri tarafından imzalanmış bir sertifika eklemek, kötü niyetli ad sunucusu sorunlarının çoğunu giderse de, kötü niyetli sertifika yetkilisi saldırılarının yanında yeniden yürütme saldırılarına da açık kalır.
Oylama biçimindeki adlandırma da tehlikelidir. Özellikle de anonim sistemlerdeki Sybil saldırılarının etkinliği göz önüne alındığında - saldırgan yalnızca keyfi olarak yüksek sayıda eş oluşturabilir ve belirli bir adı devralmak için her biriyle "oy kullanabilir". Proof-of-work yöntemleri, kimliği özgür olmayan hale getirmek için kullanılabilir. Ancak ağ büyüdükçe, çevrimiçi oylama yapmak için herkesle iletişim kurmayı sağlayacak yük çok fazladır ya da ağın tamamı sorgulanmazsa, farklı yanıt kümelerine ulaşılabilir. .
Ancak İnternet üzerinde olduğu gibi, I2P bir adlandırma sisteminin tasarımını ve çalışmasını (IP benzeri) iletişim katmanının dışında tutar. Paketlenmiş adlandırma kitaplığında, alternatif adlandırma sistemlerinin takılabileceği basit bir hizmet sağlayıcı arabirimi bulunur ve son kullanıcıların yeğlediği adlandırma değiş tokuşunu yapmalarını sağlar.
Syndie
I2P ile birlikte gelen eski Syndie, ayrı olarak dağıtılan yeni Syndie ile değiştirildi. Ayrıntılı bilgi almak için Syndie sayfasına bakabilirsiniz.
Syndie, güvenli, anonim bir blog oluşturma / içerik yayınlama / içerik toplama sistemidir. Güvenlik ve anonimlik gereksinimlerinizi göz önünde bulundurarak içerik oluşturmanızı, başkalarıyla paylaşmanızı ve ilgilendiğiniz kişilerin gönderilerini okumanızı sağlar. Syndie, kendi içerik dağıtım ağını oluşturmak yerine, var olan ağları kullanarak içerikleri I2P siteleri, Tor gizli hizmetleri, Freenet siteleri, normal internet siteleri, usenet haber grupları, e-posta listeleri, RSS akışları gibi kanallar üzerinden paylaşacak şekilde tasarlanmıştır. Syndie üzerinde veri paylaşımı, içeriği okuyan veya arşivleyen herkesin takma adla kimliğini doğrulayabileceği şekilde yapılır.
I2PTunnel
Geliştiren: mihi
I2PTunnel, büyük olasılıkla en beğenilen ve çok yönlü I2P istemci uygulamasıdır. I2P ağında hem geliş hem de çıkış vekil sunucularının kullanılmasını sağlar. I2PTunnel, dört ayrı vekil sunucu uygulaması olarak görülebilir. Gelen TCP bağlantılarını alan ve bunları belirli bir I2P hedefine ileten bir "istemci", bir HTTP vekil sunucusu gibi davranan ve istekleri sunucuya ileten bir "httpclient" (aka "eepproxy"), istekleri uygun I2P hedefine ileten (gerekirse adlandırma hizmetini sorguladıktan sonra), bir hedefte gelen I2P akış bağlantılarını alan ve bunları belirli bir TCP sunucu + bağlantı noktasına ileten bir "sunucu" ve daha güvenli çalışmayı sağlamak için HTTP isteğini ve yanıtlarını ayrıştıran genişletilmiş bir "https sunucusu". Ek bir "socksclient" uygulaması var. Ancak daha önce bahsedilen nedenlerle kullanılması önerilmiyor.
I2P ağı bir çıkış vekil sunucusu ağı değildir. Veriler karma bir ağdan içeri ve dışarı aktarılırken anonimlik ve güvenlik endişeleri de aktarılır. I2P tasarımı, kullanıcının gereksinimlerini karşılamak için dış kaynaklara gerek duyulmayan bir anonim bir ağ sağlamaya odaklanmıştır. Bununla birlikte I2PTunnel "httpclient" uygulaması, bağlantı kurulması istenilen sunucu adı ".i2p" ile bitmiyorsa, kullanıcı tarafından sağlanan bir çıkış vekil sunucusu kümesinden rastgele bir hedef seçerek ve isteği onlara ileterek çıkış vekil sunucusu için bir bağlantı sağlar. Bu hedefler, açıkça çıkış vekil sunucusu işletmeyi seçmiş gönüllüler tarafından yürütülen I2PTunnel "sunucu" kopyalarıdır. Varsayılan olarak hiç bir kopya çıkış vekil sunucusu değildir ve bir çıkış vekil sunucusu işletmek, başkalarına otomatik olarak sizin vekil sunucunuzu kullanmasını söylemez. Çıkış vekil sunucularının doğal zayıflıkları olsa da, I2P kullanımı için basit bir kavramsal kanıt sunarlar ve bazı kullanıcılar için yeterli olabilecek bir tehdit modeline göre bazı işlevler sağlarlar.
I2PTunnel ile genel olarak gerek duyulan çoğu şey kullanılabilir. Bir site sunucusunu gösteren bir "https sunucusu", herkesin kendi anonim sitesini (veya "I2P sitesini") işletebilmesini sağlar. I2P ile birlikte bu amaçla kullanılabilecek bir site sunucusu gelir. Ancak bunun dışındaki herhangi bir site sunucusu da kullanılabilir. İsteyen herkes, her biri kendi yerel IRCd uygulamasını gösteren bir "sunucu" işleten ve kendi "istemci" tünelleri üzerinden IRCd uygulamaları arasında iletişim kuran ve anonim olarak barındırılan IRC sunucularından birini gösteren bir "istemci" işletebilir. Son kullanıcılar ayrıca anonim geliştirme yapılabilen I2Pmail POP3 ve SMTP hedeflerini gösteren "istemci" tünellerini (sırasıyla POP3 ve SMTP sunucularını gösteren "sunucu" kopyaları) ve ayrıca I2P CVS sunucusunu gösteren "istemci" tünellerini kullanabilir. Bazı durumlarda insanlar bir NNTP sunucusunu gösteren "sunucu" kopyalarına erişmek için bile "istemci" vekil sunucuları işletti.
i2p-bt
Geliştiren: duck, et al
i2p-bt, I2P üzerinden hem izleyiciyi hem de eş iletişimini çalıştıran Python ile yazılmış asıl BitTorrent istemcisinin bir dalıdır. İzleyici istekleri, eepproxy üzerinden torrent dosyasında belirtilen I2P sitelerine iletilirken, izleyici yanıtları hedeflerine göre eşleri açıkça belirtir ve i2p-bt tarafından blokların sorgulanması için bir streaming kitaplığı bağlantısı açılmasını sağlar.
i2p-bt yanında, I2P için bir bytemonsoon dalı oluşturuldu ve uygulamadan anonimlikten ödün verilmesine yol açabilecek herhangi bir bilgiyi ayıklayan ve IP adreslerinin eşleri tanımlamak için kullanılamayacağı gerçeğini hesaba katan birkaç gerekli değişiklik yapıldı.
I2PSnark
I2PSnark geliştirildi: jrandom ve et almjw kullanıcısının Snark istemcisinden bir dal oluşturdu
I2P kurulumuyla birlikte gelen I2PSnark, çoklu torrent özellikleri olan basit bir anonim BitTorrent istemcisidir ve tüm işlevlerin bir düz HTML internet arayüzü ile kullanılmasını sağlar.
Robert
Geliştiren: sponge
Robert, Python ile yazılmış bir Bittorrent istemcisidir. http://bob.i2p.xyz/Robert.html üzerinde bulunabilir
PyBit
Geliştiren: Blub
PyBit, Python ile yazılmış bir Bittorrent istemcisidir. http://echelon.i2p.xyz/pybit/ üzerinde bulunabilir
I2Phex
Geliştiren: sirup
I2Phex, tamamen I2P üzerinde çalışacak Phex Gnutella dosya paylaşımı istemcisinin oldukça doğrudan oluşturulmuş bir dalıdır. Gnutella internet ön bellekleriyle bütünleştirme gibi bazı Phex işlevlerini devre dışı bırakmış olsa da, temel dosya paylaşımı ve sohbet sistemi tamamen işlevseldir.
iMule
Geliştiren: mkvore
iMule, tamamen I2P içinde çalışan aMule dosya paylaşım istemcisinin oldukça doğrudan oluşturulmuş bir dalıdır.
I2Pmail/susimail
Geliştiren: postman, susi23, mastiejaner
I2Pmail bir uygulamadan çok bir hizmettir. postman, mastiejaner ile geliştirilmiş bir dizi bileşene erişen I2PTunnel kopyaları üzerinden POP3 ve SMTP hizmeti ile hem iç hem de dış e-posta kullanımı sunar ve insanların takma adla e-posta göndermek ve almak için kullanmayı yeğlediği e-posta istemcilerini kullanmalarını sağlar. Bununla birlikte, çoğu e-posta istemcisi önemli tanımlayıcı bilgiler açığa çıkardığından, susi23 ve özellikle I2P anonimlik gereksinimlerine göre tasarlanmış internet tabanlı susimail istemcisi oluşturulmuştur. I2Pmail/mail.i2p hizmeti, hashcash artırılmış kotalar ile şeffaf virüs süzmesinin yanı sıra hizmet himzet reddi saldırılarını önleme olanağı sunar. Ek olarak, her kullanıcı, mail.i2p SMTP ve POP3 sunucularından ayrı olan mail.i2p çıkışları üzerinden teslimattan önce toplu işlem stratejisini kontrol edebilir - Bu çıkış ve giriş vekil sunucuları, mail.i2p I2P uygulamasının kendi SMTP ve POP3 sunucuları ile iletişim kurar. Bu nedenle bunların anonim olmayan konumlarda bulunması bir soruna yol açmaz ve kullanıcının e-posta hesaplarına veya işlem modellerine erişilmesini sağlamaz. Şu anda geliştiriciler, "v2mail" adı verilen merkezi olmayan bir e-posta sistemi üzerinde çalışıyor. Ayrıntılı bilgi almak için I2P sitesi üzerinde hq.postman.i2p.xyz bölümüne bakabilirsiniz.
I2P-Bote
Geliştiren: HungryHobo
I2P-Bote dağıtılmış bir e-posta uygulamasıdır. E-postaların bir sunucuya gönderilip
alındığı geleneksel e-posta yapısını kullanmaz. Bunun yerine, e-postaları kaydetmek
için bir Kademlia dağıtılmış karma tablosu kullanır. Bir kullanıcı "Dağıtılmış karma tablosuna"
(DHT) bir e-posta gönderebilir, diğeri ise "Dağıtılmış karma tablosundan" (DHT) bir e-posta
alma isteğinde bulunabilir. I2P-Bote ağı içinde gönderilen tüm e-postalar otomatik olarak
uçtan uca şifrelenir.
Ayrıca I2P-Bote, yüksek gecikmeli anonimlik sağlamak için I2P üzerinde e-postaları yeniden
postalama özelliği ekler.
I2P-Messenger
I2P-Messenger, uçtan uca şifrelenmiş sunucusuz bir iletişim uygulamasıdır. İki kullanıcı arasındaki iletişimin kurulması için, bağlantı kurmayı sağlayacak hedef anahtarlarını vermeleri gerekir. Dosya aktarımını destekler ve Seedless kullanarak diğer kullanıcıları arar.