Özet
I2P, genel bir adlandırma kitaplığı ve yerel bir adla hedef eşleme arasında çalışmak üzere tasarlanmış bir temel uygulamanın yanında adres defteri adlı bir eklenti uygulamasıyla birlikte gelir. I2P ayrıca Tor .onion adreslerine benzer Base32 sunucu adlarını destekler.
Adres defteri, yerel benzersizliği zorunlu kılarak insan tarafından okunabilir tüm adların küresel olarak benzersiz olmasını şart koşamayan, güvenli, dağıtılmış ve insan tarafından okunabilir bir adlandırma sistemidir. I2P üzerindeki tüm iletiler, hedefleri tarafından şifrelenerek adreslendiğinden, farklı kişilerde, farklı hedeflere atıfta bulunan "Alice" yerel adres defteri kayıtları olabilir. İnsanlar, güven ağlarında belirtilen eşlerin yayınlanmış adres defterlerini içe aktararak veya üçüncü bir taraf aracılığıyla sağlanan kayıtları ekleyerek (bazı kişiler ilk gelen ilk alır kayıt sistemini kullanarak bazı adres defterleri düzenlemişse) yeni adlar keşfedebilir. Bu adres defterleri geleneksel DNS sunucusuna benzeyen ad sunucuları olarak düşünülebilir.
NOT: I2P adlandırma sisteminin arkasındaki mantık, buna karşı genel argümanlar ve olası alternatifler için adlandırma tartışması sayfasına bakabilirsiniz.
Adlandırma Sistemi Bileşenleri
I2P ağında merkezi bir adlandırma otoritesi yoktur. Tüm sunucu adları yereldir.
Adlandırma sistemi oldukça basittir ve çoğu yöneltici dışındaki uygulamalarda bulunur, ancak I2P dağıtımıyla birlikte gelir. Bileşenleri şunlardır:
- Aramaları yapan ve Base32 sunucu adlarını işleyen yerel adlandırma hizmeti.
- Yönelticiden aramalar isteyen ve başarısız aramalara yardımcı olması için kullanıcıyı uzaktan atlama hizmetlerine yönlendiren HTTP vekil sunucusu.
- Kullanıcıların yerel hosts.txt dosyalarına sunucu eklemesini sağlayan HTTP host-add formları
- Kendi aramalarını ve yönlendirmelerini sağlayan HTTP sıçrama hizmetleri.
- HTTP aracılığıyla alınan dış sunucu listelerini yerel listeyle birleştiren adres defteri uygulaması.
- Adres defteri yapılandırması ve yerel sunucu listelerinin görüntülenmesi için basit bir web ön yüzü olan SusiDNS uygulaması.
Adlandırma Hizmetleri
I2P üzerindeki tüm hedefler 516 bayt (veya daha uzun) anahtarlardır. (Daha kesin olmak gerekirse, 256 baytlık bir herkese açık anahtar artı 128 baytlık bir imzalama anahtarı artı 3 veya daha fazla baytlık bir sertifikadır. Base64 yapısında 516 veya daha fazla bayttır. Boş olmayan Sertifikalar artık imza türü gösteriminde kullanılıyor. Bu nedenle, yakın zamanda oluşturulan hedeflerdeki sertifikalar 3 bayttan fazladır.
Bir uygulama (i2ptunnel ya da HTTP vekil sunucusu) bir hedefe adına göre erişmek isterse, yöneltici bu adı çözmek için çok basit bir yerel arama yapar.
Hosts.txt Adlandırma Hizmeti
Hosts.txt adlandırma hizmeti, metin dosyalarında basit bir doğrusal arama yapar. Bu adlandırma hizmeti, 0.8.8 sürümünde Blockfile adlandırma hizmeti ile değiştirilene kadar 0.8.8 varsayılan hizmetti. Dosya binlerce kayda ulaştığından hosts.txt biçimi çok yavaşlamıştı.
Sunucu adlarını aramak ve bunları 516 baytlık bir hedef anahtara dönüştürmek için üç yerel dosya arasında doğrusal bir arama yapar. Her dosya, her satırda bir tane olmak üzere sunucu adı=base64 olacak şekilde basit bir yapılandırma dosyası biçimi kullanır. Dosyalar şunlardır:
- privatehosts.txt
- userhosts.txt
- hosts.txt
Blockfile Adlandırma Hizmeti
Blockfile adlandırma hizmeti, birden çok "adres defterini" hostsdb.blockfile adlı tek bir veritabanı dosyasında saklar. 0.8.8 sürümünden başlayarak bu adlandırma hizmeti varsayılan olarak kullanılıyor.
Bir blockfile, atlama listeleri olarak hazırlanmış birden çok sıralanmış haritanın (anahtar/değer çiftleri) basitçe disk üzerinde depolanmasıdır. Blockfile biçimi, Blockfile sayfasında açıklanmıştır. Küçük bir paketle hızlı hedef araması sağlar. Blockfile tarafından oluşturulan ek yük önemli olsa da, hedefler hosts.txt biçiminde olduğu gibi Base 64 yerine binary olarak depolanır. Ek olarak, blockfile, gelişmiş adres defteri özelliklerini uygulamak için her kayda isteğe bağlı olarak üst veri kaydetme (eklenme tarihi, kaynak ve yorumlar gibi) olanağı sağlar. Blockfile depolama gereksinimi, hosts.txt biçimine göre küçük bir artış getirirken, arama sürelerinin yaklaşık 10 kat hızlanmasını sağlar.
Adlandırma hizmeti, oluşturulması sırasında hosts.txt adlandırma hizmeti tarafından kullanılan üç dosyadaki kayıtları içe aktarır. Blockfile, privatehosts.txt, userhosts.txt ve hosts.txt adıyla sırayla aranan üç haritalamayı koruyarak önceki uygulamanın davranışını taklit eder. Ayrıca, geriye doğru hızlı arama yapabilmek için geriye doğru arama haritası tutar.
Diğer Adlandırma Hizmeti Yapıları
Arama büyük-küçük harfe duyarsızdır. İlk eşleşme kullanılır ve çakışmalar algılanmaz. Aramalarda adlandırma kuralları dayatılmaz. Aramalar birkaç dakika süreyle ön belleğe alınır. Base32 çözünürlüğü aşağıda açıklanmıştır. Adlandırma Hizmeti API yazılımının tam açıklaması için Adlandırma hizmeti Java belgeleri bölümüne bakabilirsiniz. Bu API 0.8.7 sürümünde, ekleme ve kaldırma, sunucu adıyla rastgele özelliklerin depolanması ve diğer özellikleri sağlamak için önemli ölçüde genişletildi.
Alternatifler ve Deneysel Adlandırma Hizmetleri
Adlandırma hizmeti, i2p.naming.impl=class yapılandırma özelliğiyle belirtilir. Diğer uygulamalar kullanılabilir. Örneğin, yöneltici içindeki ağ üzerinden gerçek zamanlı aramalar (bir DNS) için deneysel bir yapı vardır. Ayrıntılı bilgi almak için tartışma sayfasındaki alternatiflere bakabilirsiniz.
HTTP vekil sunucusu, '.i2p' ile biten tüm sunucu adları için yöneltici aracılığıyla bir arama yapar. Diğer durumlarda, isteği yapılandırılmış bir HTTP çıkış vekil sunucusuna iletir. Bu nedenle, pratikte, tüm HTTP (I2P sitesi) sunucu adları, sözde üst düzey etki alanı '.i2p' ile bitmelidir.
RFC 67612 yönergelerine uyarak .i2p üst düzey etki alanını almak için başvuruda bulunduk.
Yöneltici sunucu adını çözümleyemezse, HTTP vekil sunucusu kullanıcıya birkaç "atlama" hizmetine bağlantılar içeren bir hata sayfası görüntüler. Ayrıntılar için aşağıya bakın.
Adres Defteri
Geliş Abonelikleri ve Birleştirme
Adres defteri uygulaması, düzenli aralıklarla diğer kullanıcıların hosts.txt dosyalarını alır ve birkaç kontrolden sonra bunları yerel hosts.txt dosyası ile birleştirir. Adlandırma çakışmaları, ilk gelen ilk alır ilkesiyle çözülür.
Başka bir kullanıcının hosts.txt dosyasına abone olmak, onlara belirli bir miktarda güven vermeyi gerektirir. Örneğin, yeni sunucu/anahtar girişini size iletmeden önce yeni bir site için kendi anahtarlarını hızla yazarak yeni bir siteyi 'ele geçirmelerini' istemezsiniz.
Bu nedenle, varsayılan olarak yapılandırılan tek abonelik,
sunucuların bir kopyasını içeren ve I2P paketine katılmış
http://i2p-projekt.i2p/hosts.txt (http://udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p/hosts.txt)
dosyasıdır.
Kullanıcılar, yerel adres defteri uygulamalarında ek abonelikler
yapılandırmalıdır (subscriptions.txt veya SusiDNS ile).
Bazı diğer genel adres defteri abonelik bağlantıları:
Bu hizmetlerin işletmecilerinin, çeşitli sunucuları listeleme ilkeleri olabilir. Bu listede bulunması, onaylandığı anlamına gelmez.
Adlandırma Kuralları
I2P üzerinde sunucu adlarında herhangi bir teknik sınırlama olmamasını ummakla birlikte, adres defteri aboneliklerden içe aktarılan sunucu adları üzerinde çeşitli kısıtlamalar uygular. Bunu temel tipografi koruması ve tarayıcılarla uyumluluk ve güvenlik sağlamak için yapar. Kurallar temelde RFC2396 3.2.2 bölümündekilerle aynıdır. Bu kuralları ihlal eden sunucu adları diğer yönelticilere dağıtılmayabilir.
Adlandırma Kuralları:
- İçe aktarma sırasında adlar küçük harfe dönüştürülür
- Adlar, küçük harfe dönüştürüldükten sonra var olan userhosts.txt ve hosts.txt dosyalarındaki (privatehosts.txt değil) var olan adlarla çakışmaları denetlenir.
- Yalnızca [a-z] [0-9] '.' ve '-' karakterleri küçük harfe dönüştürüldükten sonra kullanılmalıdır.
- '.' ya da '-' ile başlamamalıdır.
- '.i2p' ile bitmelidir.
- '.i2p ile birlikte en fazla 67 karakterden oluşmalıdır.
- '..' içermemelidir.
- '.-' ya da '-.' bulunmamalıdır (0.6.1.33 gibi).
- IDN için 'xn--' dışında '--' bulunmamalıdır.
- Base32 sunucu adları (*.b32.i2p), Base32 kullanımı için ayrılmıştır ve bu nedenle içe aktarılmasına izin verilmez.
- Proje kullanımı için ayrılmış belirli sunucu adlarına izin verilmez (proxy.i2p, router.i2p, console.i2p, *.proxy.i2p, *.router.i2p, *.console.i2p ve diğerleri)
- Anahtarların Base64 geçerliliği denetlenir.
- Anahtarların hosts.txt dosyasında var olan anahtarlarla çakışıp çakışmadığı denetlenir (privatehosts.txt denetlenmez).
- En az anahtar uzunluğu 516 bayt.
- En fazla anahtar uzunluğu 616 bayt (100 bayta kadar olan sertifikaları katmak için).
Tüm denetimleri geçen abonelik yoluyla alınan herhangi bir ad, yerel adlandırma hizmeti ile eklenir.
Bir sunucu adındaki '.' karakterlerinin herhangi bir önemi yoktur ve herhangi bir gerçek adlandırma veya güven hiyerarşisini göstermez. 'Host.i2p' adı zaten varsa, herhangi birinin hosts.txt dosyasına 'a.host.i2p' adını eklemesini engelleyen bir şey yoktur ve bu ad başkalarının adres defteri tarafından alınabilir. Etki alanı olmayan 'sahiplere' (sertifikalar?) alt etki alanlarını reddetme yöntemleri ve bu yöntemlerin istenilebilirliği ve uygulanabilirliği, gelecekteki tartışma konularıdır.
Uluslararası etki alanı adları (IDN) i2p üzerinde de çalışır (punnycode 'xn--' biçimiyle). Firefox konum çubuğunda IDN .i2p alan adlarının doğru şekilde oluşturulduğunu görmek için about:config adresinden 'network.IDN.whitelist.i2p (boolean) = true' yapılandırmasını ayarlayın.
Adres defteri uygulaması privatehosts.txt dosyasını hiç kullanmadığından, pratikte bu dosya, hosts.txt içinde zaten bulunan siteler için özel takma adlar veya "evcil adlar" eklemenin uygun olduğu tek yerdir.
Gelişmiş Abonelik Akış BiçimiAs of release 0.9.26, subscription sites and clients may support an advanced hosts.txt feed protocol that includes metadata including signatures. This format is backwards-compatible with the standard hosts.txt hostname=base64destination format. See the specification for details.
Gidiş Abonelikleri
Adres Defteri, birleştirilmiş hosts.txt dosyasını başkaları tarafından abone olunabilmesi için erişilebilecek bir konuma (geleneksel olarak yerel I2P sitesinin kök klasöründeki hosts.txt) yayınlar. Bu adım isteğe bağlıdır ve varsayılan olarak devre dışıdır.
Hosting and HTTP Transport Issues
Adres defteri uygulaması, eepget ile birlikte, aboneliğin web sunucusu tarafından geri döndürülen Etag ve/veya son değişiklik bilgilerini kaydeder. Bu özellik, gereken bant genişliğini büyük ölçüde azaltır, çünkü hiçbir şey değişmediyse web sunucusu bir sonraki almada '304 değiştirilmedi' iletisi geri döndürür.
Ancak, değişiklik yapılmışsa tüm hosts.txt dosyası indirilir. Bu konuyla ilgili tartışma için aşağıya bakabilirsiniz.
Durağan bir hosts.txt veya eşdeğer bir CGI uygulaması sunan sunucuların, bir Content-Length üst bilgisi ve bir Etag veya Last-Modified üst bilgisi göndermesi önemle önerilir. Ayrıca sunucunun uygun durumda '304 değiştirilmedi' iletisi sunduğundan emin olun. Bu özellik, ağ bant genişliğini önemli ölçüde azaltır ve bozulma olasılığını düşürür.
Sunucu Ekleme Hizmetleri
Sunucu ekleme hizmeti, parametre olarak bir sunucu adı ve bir Base64 anahtarı alan ve bunu yerel hosts.txt dosyasına ekleyen basit bir CGI uygulamasıdır. Diğer yönelticiler bu hosts.txt dosyasına abone olursa, yeni sunucu adı ve anahtarları ağ üzerinde yayılır.
Sunucu ekleme hizmetlerinin en azından yukarıda listelenen adres defteri uygulamasının getirdiği kısıtlamaları getirmesi önerilir. Sunucu ekleme hizmetleri, sunucu adlarına ve anahtarlarına ek kısıtlamalar getirebilir, örneğin:
- 'Alt etki alanı' sayısı için bir sınır.
- Çeşitli yöntemlerle 'alt etki alanları' için yetkilendirme.
- Hashcash veya imzalanmış sertifikalar.
- Sunucu adlarının ve/veya içeriğin editörlerce incelenmesi.
- Sunucuların içeriğe göre sınıflandırılması.
- Belirli sunucu adının rezervasyonu veya reddi.
- Belirli bir zaman diliminde kaydedilen ad sayısıyla ilgili kısıtlamalar.
- Kayıt ve yayın arasındaki gecikmeler.
- Sunucunun doğrulama için hazır olması şartı.
- Sona erme ve/veya iptal etme.
- IDN sahtecilik reddi.
Atlama Hizmetleri
Bir atlama hizmeti, parametre olarak bir sunucu adını alan ve
?i2paddresshelper=key dizgesi eklenmiş olarak uygun adrese bir
301 yönlendirmesi döndüren basit bir CGI uygulamasıdır.
HTTP vekil sunucusu, eklenen dizgeyi yorumlar ve bu anahtarı gerçek hedef
olarak kullanır.
Ek olarak, vekil sunucu bu anahtarı ön belleğe alır, böylece yeniden başlatılıncaya
kadar adres yardımcısı gerekli olmaz.
Aboneliklerde olduğu gibi, atlama hizmeti kullanmanın belirli bir güven düzeyi anlamına geldiğini unutmayın. Çünkü atlama hizmeti bir kullanıcıyı kötü niyetli bir şekilde yanlış bir hedefe yönlendirebilir.
En iyi hizmeti sağlamak amacıyla, yerel sunucu listesinin güncel olması için bir atlama hizmetinin birkaç hosts.txt sağlayıcısına abone olması gerekir.
SusiDNS
SusiDNS, adres defteri aboneliklerini yapılandırmak ve dört adres defteri dosyasına erişmeyi sağlayan basit bir web arabirimidir. Tüm gerçek işler 'adres defteri' uygulaması tarafından yapılır.
Şu anda, SusiDNS içinde adres defteri adlandırma kurallarını çok azı uygulanır. Bu nedenle bir kullanıcı, adres defteri abonelik kuralları tarafından reddedilen sunucu adlarını yerel olarak ekleyebilir.
Base32 Adları
I2P, Tor ağındaki .onion adreslerine benzer Base32 sunucu adlarını destekler. Base32 adresleri, tam 516 karakterli Base64 hedefleri veya adres yardımcılarından çok daha kısadır ve kullanımı daha kolaydır. Örnek: 1ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p1
In Tor, the address is 16 characters (80 bits), or half of the SHA-1 hash. I2P uses 52 characters (256 bits) to represent the full SHA-256 hash. The form is {52 chars}.b32.i2p. Tor has a proposal to convert to an identical format of {52 chars}.onion for their hidden services. Base32 is implemented in the naming service, which queries the router over I2CP to lookup the LeaseSet to get the full Destination. Base32 lookups will only be successful when the Destination is up and publishing a LeaseSet. Because resolution may require a network database lookup, it may take significantly longer than a local address book lookup.
Base32 adresleri, sunucu adlarının veya tam hedeflerin kullanıldığı çoğu yerde kullanılabilir. Ancak ad hemen çözümlenmezse bunların başarısız olabileceği bazı istisnalar vardır. Örneğin, ad bir hedefe çözümlenemezse I2PTunnel başarısız olur.