I2P, güvenli ve anonim iletişimi destekleyen bir ağ oluşturmayı, dağıtmayı ve sürdürmeyi amaçlayan bir projedir. I2P kullanan kişiler, anonimlik, güvenilirlik, bant genişliği kullanımı ve gecikme arasındaki dengeleri kontrol eder. Ağda, sistemin bütünlüğünü, güvenliğini veya anonimliğini tehlikeye atabilecek şekilde baskı uygulanabilecek hiçbir merkezi nokta bulunmaz. Ağ, çeşitli saldırılara yanıt olarak devingen yeniden yapılandırmayı destekler ve kullanılabilir olduğunda ek kaynaklardan yararlanmak üzere tasarlanmıştır. Tabii ki, ağın tüm yönleri açık ve ücretsiz olarak kullanılabilir.
Diğer birçok anonimleştirici ağdan farklı olarak, I2P, alıcıyı değil, bazı iletişimlerin kaynağını gizleyerek veya tam tersi şekilde anonimlik sağlamaya çalışmaz. I2P, I2P kullanan eşlerin birbirleriyle anonim olarak iletişim kurmasını sağlayacak şekilde tasarlanmıştır. Hem gönderici hem de alıcı birbirleri ve üçüncü şahıslar tarafından tanımlanamaz. Örneğin, bugün hem I2P içi web siteleri (anonim yayınlamaya / barındırmaya izin veren) hem de normal web için HTTP vekil sunucuları (anonim web taramasına izin veren) vardır. Sunucuları I2P içinde çalıştırma yeteneği çok önemlidir, çünkü normal İnternet üzerine bağlanan tüm çıkış vekil sunucularının izlenmesi, devre dışı bırakılması ve hatta daha fazla kötü niyetli saldırı girişiminde bulunmak için devralınması olasılığı yüksektir.
Ağın kendisi ileti odaklıdır. Aslında iletilerin şifreleme anahtarlarına (hedefler) adreslendiği ve IP paketlerinden önemli ölçüde daha büyük olabilen güvenli ve anonim bir IP katmanıdır. Ağın bazı örnek kullanımları arasında "I2P siteleri" (I2P içinde normal web uygulamalarını barındıran web sunucuları), bir BitTorrent istemcisi ("I2PSnark") veya dağıtılmış bir veri deposu bulunur. I2PTunneluygulamasının yardımıyla geleneksel akışları gerçekleştirebiliyoruz. SSH, IRC, bir squid vekil sunucusu ve hatta ses akışı gibi I2P üzerinden TCP/IP uygulamaları. Çoğu insan doğrudan I2P kullanmaz, hatta kullandıklarını bilmeleri gerekir. Bunun yerine, I2P özellikli uygulamalardan biri ya da anonimleştirme işlevini etkinleştirmek için çeşitli vekil sunucuları açıp kapatmak amacıyla küçük bir denetleyici uygulaması kullanırlar.
Anonimleştirme ağı tasarlamanın, geliştirmenin ve denemenin önemli bir parçası, "gerçek" anonimlik diye bir şey olmadığından ve yalnızca birini tanımlamanın maliyeti giderek arttığından, tehdit modelini tanımlamaktır. Kısaca, I2P ağının amacı, daha az anonimlik gerektiren kişilerin faaliyetleri tarafından sağlanan yeterli kapsama trafiği ile karıştırılmış iyi bir anonimlik sağlayarak, insanların isteğe bağlı olarak düşmanca ortamlarda iletişim kurmasını sağlamaktır. Bu şekilde, bazı kullanıcılar çok güçlü bir düşman tarafından tespit edilmekten kaçınabilirken, diğerleri, her birinin iletilerinin temel olarak diğerlerinden ayırt edilemez olduğu aynı ağda daha zayıf bir varlıktan kaçınmaya çalışacaklardır.
Neden?
Anonim iletişimi desteklemek için bir sisteme gerek duymamızın birçok nedeni vardır ve herkesin kendi kişisel mantığı vardır. İnternet üzerinde insanlara değişen derecelerde anonimlik sağlamanın yollarını bulmaya çalışan başka birçok çaba var. Ancak gereksinimlerimizi veya tehdit modelimizi karşılayan birini bulamadık.
Nasıl?
Bir bakışta ağ, bir dizi tek yönlü geliş ve gidiş sanal yoluna sahip bir dizi düğümden ("yönelticiler") oluşur ("tünel", tünel yöneltme sayfasında ana hatlarıyla belirtildiği gibi). Her yöneltici tipik olarak uzun ömürlü bir şifrelenmiş "Yöneltici kimliği" (RouterIdentity) ile tanımlanır. Bu yönelticiler, çeşitli iletiler ileterek, var olan taşıyıcı yöntemleri (TCP, UDP gibi) üzerinden birbirleriyle iletişim kurar. İstemci uygulamalarının, ileti gönderip almasını sağlayan kendi şifreleme tanımlayıcısı ("hedef") vardır. Bu istemciler herhangi bir yönelticiye bağlanabilir ve ağ üzerinden ileti göndermek ve almak için kullanılacak bazı tünellerin geçici olarak tahsis edilmesine ("kiralama") yetki verebilir. I2P, yöneltme ve iletişim bilgilerini güvenli bir şekilde dağıtmak için kendi iç "Ağ veritabanına" (NetDB) (Kademlia algoritmasının değiştirilmiş bir şeklini kullanan) sahiptir.
Yukarıda, Alice, Bob, Charlie ve Dave, yerel yönelticilerinde tek bir hedefe sahip yönelticiler işletiyor. Her birinin hedef başına bir çift 2 sıçramalı geliş tüneli vardır (1, 2, 3, 4, 5 ve 6 olarak etiketlenir) ve bu yönelticinin gidiş tünel havuzunun küçük bir alt kümesi 2 sıçramalı gidiş tünelleri ile gösterilir. Basit olması için, Charlie'nin geliş tünelleri ve Dave'in gidiş tünelleri ve her yönelticinin gidiş tüneli havuzunun geri kalanı gösterilmemiştir (tipik olarak bir seferde birkaç tünelle stoklanmıştır). Alice ve Bob birbirleriyle konuştuğunda, Alice (pembe) gidiş tünellerinden birinden Bob'un (yeşil) geliş tünellerinden (tünel 3 veya 4) birini hedefleyen bir ileti gönderir. Alice, yeni kiralamalar yapılıp eski kiralamalar sona erdikçe sürekli güncellenen ağ veritabanını sorgulayarak iletileri yöneltici üzerinde bu tünellere doğru göndermeyi bilir.
Bob, Alice'e yanıt vermek isterse, aynı süreçten geçer. Gidiş tünellerinden birinden Alice'in geliş tünellerinden birini (tünel 1 veya 2) hedefleyen bir ileti gönderir. İşleri kolaylaştırmak için, Alice ve Bob arasında gönderilen iletilerin çoğu garlic olarak paketlenir ve göndericinin kendi geçerli kiralama bilgilerini bir araya getirir. Böylece alıcı geçerli veriler için ağ veritabanına bakmak zorunda kalmadan hemen yanıt verebilir.
Çok çeşitli saldırılarla başa çıkmak için, I2P hiçbir merkezi kaynak olmadan tamamen dağıtılmış olarak çalışır ve bu yüzden ağ içindeki yönelticilerin başarımı ve güvenilirliği ile ilgili istatistikleri tutan dizin sunucuları bulunmaz. Bu nedenle her yönelticinin, çeşitli yönelticilerin profillerini tutması, güncellemesi ve eş seçimi bölümünde açıklandığı gibi, kullanıcıların anonimlik, başarım ve güvenilirlik gereksinimlerini karşılamak için uygun eşleri seçmesi gerekir.
Ağın kendisi önemli sayıda şifreleme tekniği ve algoritması kullanır. Tam bir listede 2048 bit ElGamal şifrelemesi, PKCS#5 dolgu eklemesi CBC modunda 256 bit AES, 1024 bit DSA imzaları, SHA-256 karmaları, 2048 bit Diffie-Hellman, istasyondan istasyona kimlik doğrulaması ve ElGamal / AES+Oturum etiketi bulunur.
I2P üzerinden gönderilen içerik üç katmanda şifrelenir. Garlic şifrelemesi (iletinin alıcıya teslim edildiğini doğrulamak için), tünel şifrelemesi (bir tünelden geçen tüm iletilerin tünel ağ geçidi tarafından tünel uç noktasına şifrelenmesi için) ve yönelticiler arası taşıyıcı katmanı şifrelemesi (kısa ömürlü anahtarlarla AES256 kullanan TCP taşıyıcısı için) kullanılır.
I2P 0.6 sürümünde uçtan uca (I2CP) şifreleme (istemci uygulamasından sunucu uygulamasına) devre dışı bırakıldı; Alice'in yönelticisi "a" ile Bob'un yönelticisi "h" arasında uçtan uca (Garlic) şifreleme (I2P istemci yönelticisinden I2P sunucu yönelticisine) kalır. Terimlerin farklı kullanımına dikkat edin! A ile h arasındaki tüm veriler uçtan uca şifrelenir, ancak I2P yöneltici ile uygulamalar arasındaki I2CP bağlantısı uçtan uca şifrelenmiş değildir! A ve h, Alice ve Bob'un yönelticileridir. Aşağıdaki tabloda Alice ve Bob, I2P üzerinde çalışan uygulamalardır.
Bu algoritmaların özel kullanımı başka bir yerde açıklanmıştır.
Güçlü anonimliğe gerek duyan kişilerin ağı kullanmasına izin veren iki ana mekanizma, açıkça geciktirilmiş Garlic yöneltmeli iletiler ve iletilerin birleştirilmesi ve karıştırılması için destek içeren daha kapsamlı tünellerdir. Bunlar şu anda 3.0 sürümü için planlanıyor. Ancak hiçbir gecikme olmaksızın Garlic yöneltmeli iletiler ve FIFO tünelleri şu anda yerinde. Ek olarak, 2.0 sürümü, insanların kısıtlanmış rotaların arkasında (belki de güvenilir eşlerle) kurulmasına ve çalışmasına ve ayrıca daha esnek ve anonim taşıyıcıların konuşlandırılmasına olanak sağlayacaktır.
I2P ağının ölçeklenebilirliği ile ilgili bazı sorular ortaya atıldı ve bu mantıklı. Zamanla kesinlikle
daha fazla inceleme yapılacak. Ancak "Ağ veritabanı" (NetDB) algoritması nedeniyle
eş arama ve bütünleştirme
O(log(N)) ile sınırlandırılmalı, uçtan uca iletiler
O(1)
(ölçeksiz) olmalıdır. İletiler gidiş tünelinden K sıçrama ile gider ve geliş tünelinden K ile gelir.
K 3 taneden uzun değildir. Ağın (N) boyutunun hiçbir etkisi yoktur.
Ne zaman?
I2P ilk olarak 2003 Şubat ayında Freenet üzerinde JMS gibi alternatif taşıyıcıları kullanmasını sağlamak için önerilen bir değişiklik olarak başladı. Daha sonra 2003 Nisan ayında bir 'anonCommFramework' olarak kendi başına büyüdü, Temmuz ayında I2P projesine dönüştü ve 2003 Ağustos ayında kodun ciddi bir şekilde yazılmasıyla başlayarak, yol haritasına göre geliştiriliyor.
Kim tarafından?
Projenin farklı yönlerini geliştirmek için çalışan, birkaç kıtaya yayılmış küçük bir ekibimiz var. Katılmak isteyen geliştiriciler ile eleştiri, meslektaş incelemesi, test, I2P özellikli uygulamalar yazma veya belgelendirme gibi başka şekillerde katkıda bulunmak isteyen herkese çok açığız. Tüm sistem açık kaynak kodludur. Yöneltici ve SDK yazılımının çoğu, bazı BSD ve Cryptix lisanslı kodlarla tamamen herkese açık iken, I2PTunnel ve I2PSnark gibi bazı uygulamalar GPL lisansı ile sunulmaktadır. Hemen hemen her şey Java (1.5+) ile yazılmıştır, ancak bazı üçüncü taraf uygulamalar Python ve diğer dillerde yazılmaktadır. Kod, Sun Java SE ve diğer Java sanal makinelerinde çalışır.
Nerede?
İlgilenen herkes #i2p-dev IRC kanalında bize katılmalı (aynı anda irc.freenode.net, irc.postman.i2p, irc.echelon.i2p, irc.dg.i2p ve irc.oftc.net üzerinde bulunabilir). Şu anda planlanmış bir geliştirme toplantısı yok, ancak arşive bakabilirsiniz.
The current source is available in git.