Bu sayfa son olarak 2024-02 tarihinde güncellendi ve 0.9.61 yöneltici sürümü için geçerli.

Özet

I2P "Ağ veritabanı" (NetDB), özel bir dağıtılmış veritabanıdır ve yalnızca iki tür veri içerir: Yöneltici iletişim bilgileri ("Yöneltici bilgileri" (RouterInfo)) ile hedef iletişim bilgileri ("Kiralama kümeleri" (LeaseSets)). Her veri parçası uygun tarafça imzalanır ve onu kullanan veya saklayan herkes tarafından doğrulanır. Ek olarak, verilerin içinde canlılık bilgileri bulunur. Böylece ilgisiz kayıtlar silinerek ve daha yeni kayıtlar eskilerin yerine geçirilerek belirli saldırı sınıflarına karşı koruma sağlanır.

"Ağ veritabanı" (NetDB), "Otomatik doldurma" adı verilen basit bir yöntemle dağıtılır. Dağıtılmış veritabanını "Otomatik doldurma yönelticileri" olarak adlandırılan tüm yönelticilerin bir alt kümesi korur.

RouterInfo

"Bir I2P yönelticisi ile başka bir yöneltici iletişim kurmak istediğinde, karşılıklı olarak bazı önemli veri parçalarını bilmeleri gerekir. Bunların tümü yöneltici tarafından anahtar olarak yöneltici kimliğinin SHA-256 değeri ile dağıtılan "Yöneltici bilgileri" (RouterInfo) adlı bir yapı içine paketlenir ve imzalanır. Yapıda şunlar bulunur:

  • Yönelticinin kimliği (bir şifreleme anahtarı, bir imzalama anahtarı ve bir sertifika)
  • Ulaşılabilecek iletişim adresleri
  • Bunun ne zaman yayınlandığı
  • İsteğe bağlı metin seçenekleri
  • Kimliğin imzalama anahtarı tarafından yukarıdakiler ile oluşturulmuş imza

Beklenen Ayarlar

Şart olmamasına rağmen aşağıdaki metin seçeneklerinin var olması beklenir:

  • caps (Yetenek işaretleri - Otomatik doldurma katılımını, yaklaşık bant genişliğini ve algılanan erişilebilirliği belirtmek için kullanılır)
    • D: Medium congestion (as of release 0.9.58)
    • E: High congestion (as of release 0.9.58)
    • f: Otomatik doldurma
    • G: Rejecting all tunnels (as of release 0.9.58)
    • H: Gizli
    • K: 12 KBps paylaşılan bant genişliğinin altında
    • L: 12 - 48 KBps paylaşılan bant genişliği (varsayılan)
    • M: 48 - 64 KBps paylaşılan bant genişliği
    • N: 64 - 128 KBps paylaşılan bant genişliği
    • O: 128 - 256 KBps paylaşılan bant genişliği
    • P: 256 - 2000 KBps paylaşılan bant genişliği (as of release 0.9.20)
    • R: Erişilebilir
    • U: Erişilemez
    • X: 2000 KBps paylaşılan bant genişliğinin üstünde (as of release 0.9.20)
    "Shared bandwidth" == (share %) * min(in bw, out bw)
    For compatibility with older routers, a router may publish multiple bandwidth letters, for example "PO".
  • netId = 2 (Temel ağ uyumluluğu - Bir yöneltici farklı bir netId değerine sahip bir eşle iletişim kurmayı reddeder)
  • router.version (Daha yeni özellikler ve iletilerle uyumluluğu belirlemek için kullanılır)

Notes on R/U capabilities: A router should usually publish the R or U capability, unless the reachability state is currently unknown. R means that the router is directly reachable (no introducers required, not firewalled) on at least one transport address. U means that the router is NOT directly reachable on ANY transport address.

Deprecated options:

  • coreVersion (Never used, removed in release 0.9.24)
  • stat_uptime = 90m (Unused since version 0.7.9, removed in release 0.9.24)

Bu değerler, diğer yönelticiler tarafından temel kararlar için kullanılır. Bu yönelticiye bağlanmalı mıyız? Bu yöneltici üzerinden bir tünel yöneltmeye çalışmalı mıyız? Özellikle bant genişliği yeteneği bayrağı, yalnızca yönelticinin tünelleri yöneltmek için en az eşiği karşılayıp karşılamadığını belirlemek için kullanılır. En az eşiğin üzerinde, duyurulan bant genişliği değeri, kullanıcı arayüzünde görüntüleme ve hata ayıklama ile ağ analizi dışında yönelticinin hiçbir yerinde kullanılmaz veya güvenilmez.

Valid NetID numbers:

UsageNetID Number
Reserved0
Reserved1
Current Network (default)2
Reserved Future Networks3 - 15
Forks and Test Networks16 - 254
Reserved255

Diğer Seçenekler

Ek metin seçeneklerinde, ağ başarımı analizi ve hata ayıklama için stats.i2p gibi siteler tarafından toplanan, yöneltici sağlığı hakkında az sayıda istatistik bulunur. Bu istatistikler, geliştiriciler için önemli olan tünel oluşturma başarı oranları gibi verileri sağlamak ve bu tür verilere olan gereksinimi bu verilerin ortaya çıkarılmasından kaynaklanabilecek yan etkilerle dengelemek için seçildi. Geçerli istatistikler şunlarla sınırlıdır:

  • Keşif tüneli oluşturma başarısı, reddetme ve zaman aşımı oranları
  • Katkıda bulunulan tünel sayısının 1 saatlik ortalaması

These are optional, but if included, help analysis of network-wide performance. As of API 0.9.58, these statistics are simplified and standardized, as follows:

  • Option keys are stat_(statname).(statperiod)
  • Option values are ';' -separated
  • Stats for event counts or normalized percentages use the 4th value; the first three values are unused but must be present
  • Stats for average values use the 1st value, and no ';' separator is required
  • For equal weighting of all routers in stats analysis, and for additional anonymity, routers should include these stats only after an uptime of one hour or more, and only one time every 16 times that the RI is published.

Example:

    stat_tunnel.buildExploratoryExpire.60m = 0;0;0;53.14
    stat_tunnel.buildExploratoryReject.60m = 0;0;0;15.51
    stat_tunnel.buildExploratorySuccess.60m = 0;0;0;31.35
    stat_tunnel.participatingTunnels.60m = 289.20

Floodfill routers may publish additional data on the number of entries in their network database. These are optional, but if included, help analysis of network-wide performance.

The following two options should be included by floodfill routers in every published RI:

  • netdb.knownLeaseSets
  • netdb.knownRouters

Example:

    netdb.knownLeaseSets = 158
    netdb.knownRouters = 11374

The data published can be seen in the router's user interface, but is not used or trusted by any other router.

Aile Ayarları

0.9.24 sürümüyle birlikte yönelticiler aynı varlık tarafından işletilen bir "ailenin" parçası olduklarını duyurabilir. Aynı ailedeki birden çok yöneltici tek bir tünelde kullanılmaz.

Aile ayarları şunlardır:

  • family (Aile adı)
  • family.key The signature type code of the family's Signing Public Key (in ASCII digits) concatenated with ':' concatenated with the Signing Public Key in base 64
  • family.sig The signature of ((family name in UTF-8) concatenated with (32 byte router hash)) in base 64

"Yöneltici bilgileri" (RouterInfo) sona erme süresi

"Yöneltici bilgileri" (RouterInfo) kayıtlarının belirlenmiş bir geçerlilik süresi yoktur. Her yöneltici "Yöneltici bilgileri" aramalarının sıklığını bellek veya disk kullanımına göre belirlemek için kendi yerel ilkesini kullanmakta özgürdür. Geçerli uygulamada aşağıdaki genel ilkeler bulunur.

  • Kalıcı olarak saklanan veriler eski olabileceğinden, ilk çalışma saatinde geçerlilik süresi kuıllanılmaz.
  • 25 veya daha az "Yöneltici bilgileri" (RouterInfo) kaydı varsa geçerlilik süresi yoktur.
  • Yerel "Yöneltici bilgileri" (RouterInfo) kaydı sayısı arttıkça, makul bir "Yöneltici bilgileri" sayısını korumak amacıyla geçerlilik süresi kısalır. 120 altında yöneltici için geçerlilik süresi 72 saat, 300 yöneltici için geçerlilik süresi yaklaşık 30 saattir.
  • SSU tanıtıcıları içeren "Yöneltici bilgileri" (RouterInfo) kayıtlarının geçerlilik, yaklaşık bir saattir. Çünkü tanıtıcı listesinin geçerlilik süresi yaklaşık olarak bu kadardır.
  • Geçerli "Yöneltici bilgileri" (RouterInfo) kayıtları onlar için sık sık yeniden yayınlanacağından, otomatik doldurma sunucularında tüm yerel "Yöneltici bilgileri" kayıtları için kısa bir geçerlilik süresi (1 saat) kullanılır.

Kalıcı "Yöneltici bilgileri" (RouterInfo) depolama

Yeniden başlatmadan sonra kullanılabilmesi için "Yöneltici bilgileri (RouterInfo)" düzenli aralıklarla diske yazılır.

"Üst Kiralama kümelerinin" (MetaLeaseSets) verilerinin uzun süreli olarak kalıcı olarak saklanması istenebilir. Bu durum, uygulamaya bağlıdır.

Şunlara da bakabilirsiniz

"Yöneltici bilgileri" (RouterInfo) teknik özellikleri

"Yöneltici bilgileri" (RouterInfo) Java belgeleri

LeaseSet

"Ağ veritabanında" (NetDB) dağıtılan ikinci veri parçası, belirli bir müşteri hedefi için bir grup tünel giriş noktasını (kiralamaları) belgeleyen bir "Kiralama kümesi" (LeaseSet) olur. Bu kiralamaların her birinde şu bilgiler bulunur:

  • Tünel ağ geçidi yönelticisi (kimliğini belirterek)
  • İleti göndermek için bu yönelticideki tünel kimliği (4 baytlık bir sayı)
  • Bu tünelin geçerlilik süresi.

"Kiralama kümesi" (LeaseSet), hedefin SHA-256 değerinden türetilen anahtar altında "Ağ veritabanı" (NetDB) üzerinde tutulur. Bir istisna, 0.9.38 sürümünden başlayarak "Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets, LS2) içindir. Bayt (3) türünün SHA-256 değeri ve ardından körleştirilmiş herkese açık anahtar, "Dağıtılmış karma tablosu" (DHT) anahtarı için kullanılır ve sonra her zamanki gibi döndürülür. Aşağıdaki Kademlia yakınlık ölçümü bölümüne bakın.

Bu kiralamalara ek olarak, "Kiralama kümesi" (LeaseSet) şunları içerir:

  • Hedefin kendisi (bir şifreleme anahtarı, bir imzalama anahtarı ve bir sertifika)
  • Ek herkese açık şifreleme anahtarı: Garlic iletilerinin uçtan uca şifrelenmesi için kullanılır
  • Ek herkese açık imzalama anahtarı: "Kiralama kümesi" (LeaseSet) iptali için tasarlandı, ancak şu anda kullanılmıyor.
  • Hedefin bir "Kiralama kümesi" (LeaseSet) yayınladığından emin olmak için tüm "Kiralama kümesi" (LeaseSet) verilerinin imzası.

Kiralama teknik özellikleri
"Kiralama kümesi" (LeaseSet) teknik özellikleri

Kiralama Java belgeleri
"Kiralama kümesi" (LeaseSet) Java belgeleri

0.9.38 sürümüyle, üç yeni "Kiralama kümesi" (LeaseSet) türü tanımlanmıştır; LeaseSet2, MetaLeaseSet ve EncryptedLeaseSet. Ayrıntılar için aşağıya bakın.

Yayınlanmamış "Kiralama kümeleri" (LeaseSets)

Yalnızca gidiş bağlantıları için kullanılan bir hedef için "Kiralama kümesi" (LeaseSet) yayından kaldırıldı. Hiçbir zaman yayınlanmak için bir otomatik doldurma yönelticisine gönderilmez. Web üzerinde gezinme ve IRC istemcileri için olanlar gibi "istemci" tünelleri yayınlanmaz. Sunucular, I2NP depolama iletileri nedeniyle, bu yayınlanmamış hedeflere ileti göndermeyi sürdürebilir.

Geçersiz kılınmış "Kiralama kümeleri" (LeaseSets)

Bir "Kiralama kümesi" (LeaseSet), sıfır kiralama yapan yeni bir "Kiralama kümesi" (LeaseSet) yayınlayarak geçersiz kılınabilir. Geçersiz kılmalar, "Kiralama kümesi" tarafından kullanılan ek imzalama anahtarı ile imzalanmalıdır. Geçersiz kılma tam olarak kullanıma alınmadı ve herhangi bir pratik kullanımı olup olmadığı belirsiz. Söz konusu imzalama anahtarı yalnızca bunun için planlandığından şu anda kullanılmıyor.

LeaseSet2 (LS2)

0.9.38 sürümünden başlayarak otomatik dolgular yeni "Kiralama kümesi" (LeaseSet) LS2 yapısını destekliyor. Bu yapı eski "Kiralama kümesi" (LeaseSet) yapısına çok benzer ve aynı amaca hizmet eder. Yeni yapı, yeni şifreleme türlerini, çoklu şifreleme türlerini, seçenekleri, çevrimdışı imzalama anahtarlarını ve diğer özellikleri destekleyecek esnekliği sağlar. Ayrıntılı bilgi almak için 123 numaralı öneriye bakabilirsiniz.

Meta LeaseSet (LS2)

0.9.38 sürümünden başlayarak, otomatik doldurmalar yeni bir "Üst kiralama kümesi" (MetaLeaseSet) yapısını destekler. Bu yapı, diğer "Kiralama kümelerine" (LeaseSets) atıfta bulunmak için "Dağıtılmış karma tablosu" (DHT) üzerinde ağaç benzeri bir yapı sağlar. Bir site, "Üst kiralama kümesini" (MetaLeaseSet) kullanarak, ortak bir hizmet sağlamak için birkaç farklı hedefin kullanıldığı büyük, çoklu barındırma hizmetlerini uygulayabilir. Bir "Üst kiralama kümesindeki" (MetaLeaseSet) kayıtlar, hedefler veya diğer "Üst kiralama kümeleridir" ve 18,2 saate kadar uzun geçerlilik süreleri olabilir. Bu yapıyı kullanılarak, ortak bir hizmeti barındıran yüzlerce veya binlerce hedef çalıştırılabilmelidir. Ayrıntılı bilgi almak için 123 numaralı öneriye bakabilirsiniz.

"Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets) (LS1)

Bu bölümde, sabit bir simetrik anahtar kullanarak eski, güvenli olmayan "Kiralama kümesi" (LeaseSet) şifreleme yöntemi açıklanır. "Şifrelenmiş kiralama kümelerinin" (EncryptedLeaseSets) LS2 sürümü için aşağıya bakın.

Bir "Şifrelenmiş kiralama kümesi" (EncryptedLeaseSet) içinde, tüm kiralamalar ayrı bir anahtarla şifrelenir. Kiralamaların kodu yalnızca çözülebilir ve bu nedenle hedefle yalnızca anahtara sahip olanlar bağlantı kurabilir. "Kiralama kümesinin" (LeaseSet) şifrelenmiş olduğuna hakkında bir işaret veya başka bir doğrudan gösterge yoktur. "Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets) yaygın olarak kullanılmıyor. Kullanıcı arayüzünün ve "Şifrelenmiş kiralama kümelerinin" (EncryptedLeaseSets) uygulanmasının geliştirilmesi geleceğe dönük bir araştırma konusudur.

"Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets) (LS2)

0.9.38 sürümünden başlayarak, otomatik doldurma yeni bir "Şifrelenmiş kiralama kümesi" (EncryptedLeaseSet) yapısını destekler. Hedef gizlidir ve otomatik doldurmada yalnızca körleştirilmiş bir herkese açık anahtar ve bir geçerlilik süresi görünür. Yalnızca tam hedefe sahip olanlar yapının şifresini çözebilir. Yapı, hedefin karma değerine değil, körleştirilmiş herkese açık anahtarın karma değerine dayalı olarak bir "Dağıtılmış karma tablosu" (DHT) konumunda depolanır. Ayrıntılar için 123 numaralı öneriye bakabilirsiniz.

"Kiralama kümesi" (LeaseSet) geçerlilik süresi

Normal "Kiralama kümeleri" (LeaseSets) için geçerlilik süresi, kiralamalarının sona erme zamanıdır. Yeni LS2 "Kiralama kümesi" (LeaseSet) veri yapıları için geçerlilik süresi üst bilgilerde belirtilir. LS2 için geçerlilik süresi, kiralamaların sona erme zamanlarıyla eşleşmelidir. "Şifrelenmiş kiralama kümesi" (EncryptedLeaseSet) ve "Üst kiralama kümesi" (MetaLeaseSet) için geçerlilik süresi değişebilir ve belirlenmek üzere en uzun geçerlilik süresi dayatılabilir.

"Kiralama kümesi" (LeaseSet) kalıcı depolaması

"Kiralama kümesi" (LeaseSet) verilerinin kalıcı olarak depolanması gerekmez, çünkü bu veriler çok hızlı bir şekilde geçersiz olur. Ancak, "Şifrelenmiş kiralama kümesi" (EncryptedLeaseSet) ve "Üst kiralama kümesi" (MetaLeaseSet) verilerinin uzun geçerlilik süresiyle kalıcı olarak saklanması önerilebilir.

Şifreleme Anahtarı Seçimi (LS2)

2. "Kiralama kümesi" (LeaseSet2) birden çok şifreleme anahtarı içerebilir. Anahtarlar, en çok yeğlenen sunucu sırasına göredir. Varsayılan istemci davranışı, desteklenen bir şifreleme türüne sahip ilk anahtarın seçilmesidir. İstemciler, şifreleme desteğine, göreli başarıma ve diğer faktörlere dayalı diğer seçim algoritmalarını kullanabilir.

Ön yükleme

"Ağ veritabanı" (NetDB) merkezi değildir, ancak bütünleştirme sürecinin sizi bağlaması için en az bir eş referansına gerek duyarsınız. Bunun için, yönelticinizi etkin bir eşin "Yöneltici bilgileri" (RouterInfo) ile "yeniden tohumlar", özellikle de routerInfo-$hash.dat dosyalarını alıp netDB/ klasörünüze kaydedersiniz. Bu dosyaları size herhangi biri sağlayabilir. Hatta kendi netDb klasörünüzü görünür kılarak bunları başkalarına da sunabilirsiniz. Süreci basitleştirmek için, gönüllüler netDb klasörlerini (veya bir alt kümesini) normal (i2p olmayan) ağda yayınlar ve bu klasör adresleri I2P içinde sabit kodlanmıştır. Yöneltici ilk kez başlatıldığında, otomatik olarak bu adreslerden biri rastgele seçilerek alınır.

Otomatik doldurma

Otomatik doldurma "Ağ veritabanı" (NetDB), basit bir dağıtılmış depolama mekanizmasıdır. Depolama algoritması basittir: Verileri, kendisini bir otomatik doldurma yönelticisi olarak tanıtan en yakın eşe gönderir. Otomatik doldurma "Ağ veritabanı" (NetDB) üzerinde bulunan bir eş, otomatik doldurma "Ağ veritabanı" (NetDB) üzerinde bulunmayan bir eşten bir "Ağ veritabanı" (NetDB) deposu aldığında, onu otomatik doldurma "Ağ veritabanı" (NetDB) eşlerinin bir alt kümesine gönderir. Seçilen eşler, belirli bir anahtara (XOR ölçüsü ile) en yakın olanlardır.

Otomatik doldurma "Ağ veritabanı" (NetDB) için kimin parçası olduğunu belirlemek önemsizdir. Her yönelticinin yayınlanan "Yöneltici bilgileri" (RouterInfo) içinde bir yetenek olarak ortaya çıkar.

Otomatik doldurmaların merkezi bir yöneticisi yoktur ve bir "uzlaşma" oluşturmazlar. Yalnızca basit bir "Dağıtılmış karma tablosu" (DHT) kapsaması sağlarlar.

Otomatik doldurma yöneltici aboneliği

Dizin sunucularının sabit kodlandığı ve güvenilir olduğu ve bilinen varlıklar tarafından işletildiği Tor ağının aksine, I2P otomatik doldurma eş kümesinin üyelerinin güvenilir olması gerekmez ve zaman içinde değişebilir.

"Ağ veritabanı" (NetDB) güvenilirliğini artırmak ve ağ veritabanı trafiğinin yöneltici üzerindeki etkisini en aza indirmek için, otomatik doldurma yalnızca yüksek bant genişliği sınırlarıyla yapılandırılmış yönelticilerde otomatik olarak etkinleştirilir. Yüksek bant genişliği sınırlarına sahip yönelticilerin (varsayılan çok daha düşük olduğu için el ile yapılandırılması gerekir) daha düşük gecikmeli bağlantılarda olduğu varsayılır ve 7/24 kullanılabilir olma olasılıkları daha yüksektir. Otomatik doldurma yönelticisi için geçerli en az paylaşım bant genişliği: 128 KBytes/sn.

Ek olarak, bir yöneltici, otomatik doldurma işlemi otomatik olarak etkinleştirilmeden önce sistem durumu (gidiş ileti kuyruğu süresi, görev gecikmesi vb.) için birkaç ek sınamadan geçmelidir.

Otomatik katılım için geçerli kurallarla, ağdaki yönelticilerin yaklaşık 6&37; kadarı otomatik doldurma yönelticileridir.

Bazı eşler, otomatik doldurma için el ile yapılandırılırken, diğerleri, otomatik doldurma eşlerinin sayısı bir eşik değerinin altına düştüğünde otomatik olarak gönüllü olan yüksek bant genişliğine sahip yönelticilerdir. Böylece herhangi bir saldırı olduğunda, otomatik doldurma yönelticilerinin kaybedilmesi ve uzun vadeli bir ağ hasarı önlenir. Ters durumda, bekleyen çok fazla otomatik doldurma yönelticisi olduğunda, bu eşler kendilerini otomatik doldurma rolünden çıkarır.

Otomatik Doldurma Yöneltici Rolleri

Otomatik doldurma yönelticilerinin, otomatik doldurma olmayan yönelticilerin hizmetlerine ek olan tek hizmetleri, "Ağ veritabanı" (NetDB) depolarını kabul etmek ve ağ veritabanı sorgularına yanıt vermektir. Genellikle yüksek bant genişlikleri olduğunda, çok sayıda tünele katkıda bulunma olasılıkları daha yüksektir (diğer bir deyişle, diğerleri için bir "aktarıcı" olur). Ancak bu onların dağıtılmış veritabanı hizmetleriyle doğrudan ilgili değildir.

Kademlia Yakınlık Ölçümü

"Ağ veritabanı" (NetDB), yakınlığı belirlemek için Kademlia tarzı basit bir XOR ölçümü kullanır. Bir Kademlia anahtarı oluşturmak için “Yöneltici kimliği” (RouterIdentity) veya hedefin SHA-256 karması hesaplanır. Bir istisna, 0.9.38 sürümünden başlayarak "Şifrelenmiş kiralama kümeleri" (EncryptedLeaseSets, LS2) içindir. Bayt (3) türünün SHA-256 değeri ve ardından körleştirilmiş herkese açık anahtar, "Dağıtılmış karma tablosu" (DHT) anahtarı için kullanılır ve sonra her zamanki gibi döndürülür.

Sybil saldırılarının maliyetlerini artırmak için bu algoritmada bir değişiklik yapıldı. Aranan anahtarın kaydedilmiş SHA-256 karması yerine, SHA-256 karması, 8 baytlık bir ASCII dizgesi yyyyMMdd, yani SHA256(anahtar + yyyyMMdd) olarak gösterilen UTC tarihi ile eklenen 32 baytlık ikili arama anahtarından alınır. Buna "yöneltme anahtarı" denir ve her gün UTC gece yarısında değişir. Otomatik doldurma yöneltici karmaları değil, yalnızca arama anahtarı bu şekilde değiştirilir. Günlük "Dağıtılmış karma tablosu" (DHT) döndürmesi, tam anlamıyla bir döndürme olmasa da bazen "anahtar alanı döndürme" olarak adlandırılır.

Yöneltme anahtarları hiçbir zaman herhangi bir I2NP iletisinde kablo üzerinden gönderilmez. Yalnızca uzaklığın belirlenmesi için yerel olarak kullanılırlar.

Network Database Segmentation - Sub-Databases

Traditionally Kademlia-style DHT's are not concerned with preserving the unlinkability of information stored on any particular node in the DHT. For example, a piece of information may be stored to one node in the DHT, then requested back from that node unconditionally. Within I2P and using the netDb, this is not the case, information stored in the DHT may only be shared under certain known circumstances where it is "safe" to do so. This is to prevent a class of attacks where a malicious actor can try to associate a client tunnel with a router by sending a store to a client tunnel, then requesting it back directly from the suspected "Host" of the client tunnel.

Segmentation Structure

I2P routers can implement effective defenses against the attack class provided a few conditions are met. A network database implementation should be able to keep track of whether a database entry was recieved down a client tunnel or directly. If it was recieved down a client tunnel, then it should also keep track of which client tunnel it was recieved through, using the client's local destination. If the entry was recieved down multiple client tunnels, then the netDb should keep track of all destinations where the entry was observed. It should also keep track of whether an entry was recieved as a reply to a lookup, or as a store.

In both the Java and C++ implementations, this achieved by using a single "Main" netDb for direct lookups and floodfill operations first. This main netDb exists in the router context. Then, each client is given it's own version of the netDb, which is used to capture database entries sent to client tunnels and respond to lookups sent down client tunnels. We call these "Client Network Databases" or "Sub-Databases" and they exist in the client context. The netDb operated by the client exists for the lifetime of the client only and contains only entries that are communicated with the client's tunnels. This makes it impossible for entries sent down client tunnels to overlap with entries sent directly to the router.

Additionally, each netDb needs to be able to remember if a database entry was recieved because it was sent to one of our destinations, or because it was requested by us as part of a lookup. If a database entry it was recieved as a store, as in some other router sent it to us, then a netDb should respond to requests for the entry when another router looks up the key. However, if it was recieved as a reply to a query, then the netDb should only reply to a query for the entry if the entry had already been stored to the same destination. A client should never answer queries with an entry from the main netDb, only it's own client network database.

These strategies should be taken and used combined so that both are applied. In combination, they "Segment" the netDb and secure it against attacks.

Depolama, doğrulama ve arama mekanizması

Eşlerde "Yöneltici bilgileri (RouterInfo)" depolama

Yerel "Yöneltici bilgileri" (RouterInfo) bulunduran I2NP "Veritabanı kaydetme iletileri" (DatabaseStoreMessages), NTCP veya SSU taşıyıcı bağlantısının başlatılmasının bir parçası olarak eşler arasında alınıp verilir.

Eşlere "Kiralama kümesi" (LeaseSet) depolama

İçinde yerel "Kiralama kümesi" (LeaseSet) bulunan I2NP "Veritabanı kaydetme iletileri" (DatabaseStoreMessages), ilgili hedeften gelen normal trafikle birlikte bir Garlic iletisinde bir araya getirilerek eşlerle düzenli olarak alınıp verilir. Böylece, herhangi bir "Kiralama kümesi" araması gerekmeden veya iletişim halindeki hedeflerin "Kiralama kümeleri" yayınlamasına gerek kalmadan ilk yanıtın ve daha sonraki yanıtların uygun kiralamaya gönderilmesini sağlar.

Floodfill Selection

"Veritabanı kaydetme iletisi" (DatabaseStoreMessage), tutulmakta olan "Yöneltici bilgileri" (RouterInfo) veya "Kiralama kümesi" (LeaseSet) için geçerli yöneltme anahtarına en yakın olan otomatik doldurucuya gönderilmelidir. Şu anda, en yakın otomatik doldurucu yerel veritabanında yapılan bir aramayla bulunur. Bu otomatik doldurucu gerçekte en yakındaki olmasa bile, birden fazla otomatik doldurucuya gönderilerek "daha yakın" doldurma sağlar. Böylece, yüksek düzeyde hata toleransı sağlanır.

Geleneksel Kademlia üzerinde, bir eş, "Dağıtılmış karma tablosu" (DHT) verilerine en yakın hedefe bir öge eklemeden önce "en yakını bul" araması yapar. Doğrulama işlemi, varsa daha yakın otomatik doldurucuları keşfetme eğiliminde olacağından, bir yöneltici, düzenli olarak yayınladığı "Yöneltici bilgileri" (RouterInfo) ve "Kiralama kümeleri" (LeaseSets) için "Dağıtılmış karma tablosu" (DHT) "mahallesi" hakkındaki bilgisini hızla artıracaktır. I2NP bir "en yakını bul" iletisi tanımlamasa da, gerekirse, bir yöneltici, "Veritabanı arama yanıtı iletisi" (DatabaseSearchReplyMessage) içinde daha yakın bir eş alınmayana kadar en az anlamlı bit çevrilmiş bir anahtar (yani anahtar ^ 0x01) için yinelemeli bir arama yapabilir. . Böylece, daha uzaktaki bir eş "Ağ veritabanı" (NetDB) ögesine sahip olsa bile gerçek en yakın eşin bulunmasını sağlar.

Otomatik doldurma yönelticilerinde "Yöneltici bilgileri" (RouterInfo) depolama

Bir yöneltici, doğrudan bir otomatik doldurma yönlendiricisine bağlanarak ve ona sıfır olmayan bir "Yanıt belirteci" (Reply Token) ile bir I2NP bir "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) göndererek kendi "Yöneltici bilgileri" (RouterInfo) verilerini yayınlar. Bu doğrudan bir bağlantı olduğundan, ileti uçtan uca Garlic şifrelemesi kullanmaz. Bu nedenle araya giren yönelticiler yoktur (ve yine de bu verileri gizlemeye gerek yoktur). Otomatik doldurma yönelticisi, ileti kimliği "Yanıt belirteci" (Router Token) değerine ayarlanmış bir I2NP "Aktarım durumu iletisi" (DeliveryStatusMessage) ile yanıt verir.

Otomatik doldurma yönelticilerine "Kiralama kümesi" (LeaseSet) depolama

Bir yönelticinin "Kiralama kümelerinin" (LeaseSets) yönelticiyle ilişkilendirilememesine dikkat etmesi gerektiğinden, "Kiralama kümelerinin" depolanması "Yöneltici bilgileri" (RouterInfo) verilerine göre çok daha hassastır.

Bir yöneltici, o hedef için bir gidiş istemci tüneli üzerinden sıfır olmayan bir "Yanıt belirteci" (Router Token) ile bir I2NP "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) göndererek yerel bir "Kiralama kümesi" (LeaseSet) yayınlar. İleti, tünelin gidiş uç noktasından iletiyi gizlemek için hedefin oturum anahtarı yöneticisi kullanılarak uçtan uca Garlic şifrelenir. Otomatik doldurma yönelticisi, ileti kimliği "Yanıt belirteci" (Router Token) değerine ayarlanmış olarak bir I2NP "Aktarım durumu iletisi" (DeliveryStatusMessage) ile yanıt verir. Bu ileti, istemcinin geliş tünellerinden birine geri gönderilir.

Otomatik Doldurma

Bir otomatik doldurma yönelticisi, yerel "Ağ veritabanında" (NetDB) önceden depolanmış olandan daha yeni olan geçerli "Yöneltici bilgileri" (RouterInfo) veya "Kiralama kümesi" (LeaseSet) içeren bir "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) aldıktan sonra, onu "otomatik doldurur". Bir "Ağ veritabanı" (NertDB) kaydını otomatik doldurmak için, "Ağ veritabanı" (NetDB), kaydın yöneltme anahtarına en yakın birkaç (şu anda 3) otomatik doldurma yönelticisini arar. (Yöneltme anahtarı, tarih (yyyyMMdd) eklenmiş olarak "Yöneltici kimliği" (RouterIdentity) veya hedefin SHA-256 karmasıdır.) Otomatik doldurma, kendisine en yakın olmayan, anahtara en yakın olan yönelticileri otomatik doldurarak, depolama yönelticisi yöneltme anahtarı için "Dağıtılmış karma tablosu" (DHT) "komşu" hakkında iyi bilgiye sahip olmasa bile depolamanın doğru yere gitmesini sağlar.

Otomatik doldurma daha sonra bu eşlerin her birine doğrudan bağlanır ve onlara sıfır "Yanıt belirteci" (Router Token) ile bir I2NP "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) gönderir. Bu bağlantı doğrudan olduğundan, ileti uçtan uca Garlic şifreli değildir. Bu nedenle araya giren yönelticiler yoktur (ve yine de bu verileri gizlemeye gerek yoktur). Diğer yönelticiler, "Yanıt belirteci" (Reply Token) sıfır olduğu için yanıt vermez veya yeniden yükleme yapmaz.

"Yöneltici bilgileri" (RouterInfo) ve "Kiralama kümesi" (LeaseSet) arama

I2NP "Veritabanı arama iletisi" (DatabaseLookupMessage), bir otomatik doldurma yönelticisinden bir "Ağ veritabanı" (NetDB) kaydı istemek için kullanılır. Aramalar, yönelticinin gidiş keşif tünellerinden birine gönderilir. Yanıtlar, yönelticinin geliş keşif tünellerinden biri üzerinden döndürülecek şekilde belirtilir.

Aramalar genellikle istenilen anahtara en yakın iki "iyi" (başarısız olmayan bağlantı) otomatik doldurma aktarıcı yönelticisine paralel olarak gönderilir.

Anahtar otomatik doldurma yönelticisi tarafından yerel olarak bulunursa, I2NP "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) ile yanıt verir. Anahtar otomatik doldurma yönelticisi tarafından yerel olarak bulunamazsa, anahtara yakın diğer otomatik doldurma yönelticilerinin listesini içeren bir I2NP "Veritabanı arama yanıtı iletisi" (DatabaseSearchReplyMessages) ile yanıt verir.

"Kiralama kümesi" (LeaseSet) aramaları, 0.9.5 sürümünden başlayarak uçtan uca Garlic şifrelenmiştir. "Yöneltici bilgileri" (RouterInfo) aramaları şifrelenmez ve bu nedenle istemci tünelinin gidiş uç noktası (OBEP) tarafından izlenmeye karşı savunmasızdır. Bunun nedeni ElGamal şifrelemesinin maliyetidir. "Yöneltici bilgileri" (RouterInfo) arama şifrelemesi, gelecekteki bir sürümde etkinleştirilebilir.

0.9.7 sürümünden başlayarak, bir "Kiralama kümesi" (LeaseSet) aramasına (bir "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) veya bir "Veritabanı arama yanıtı iletisi" (DatabaseSearchReplyMessages)) verilen yanıtlar, aramaya oturum anahtarı ve etiketi katılarak şifrelenir. Böylece, yanıt tünelinin geliş ağ geçidinden (IBGW) gelen yanıt gizlenir. Arama şifrelemesini etkinleştirirsek, "Yöneltici bilgileri" (RouterInfo) aramalarına verilen yanıtlar şifrelenir.

(Referans: Aşağıdaki yatık yazılmış terimler için Hashing it out in Public 2.2 ve 2.3 bölümleri)

Ağın nispeten küçük boyutu ve otomatik doldurma yedekliliği nedeniyle, aramalar genellikle O(log n) yerine O(1) şeklindedir. Bir yönelticinin, ilk denemede yanıtı almak için anahtara yeterince yakın bir otomatik doldurma yönelticisini bilme olasılığı yüksektir. 0.8.9 öncesindeki sürümlerde, yönelticiler iki arama yedekliliği kullandı (yani, farklı eşlere paralel olarak iki arama yapıldı) ve aramalar için ne iç içe ne de yinelemeli yöneltme uygulandı. Sorgu başarısızlığı olasılığını azaltmak için sorgular aynı anda birden fazla yöneltme ile gönderildi.

0.8.9 sürümünden itibaren, yinelemeli aramalar arama artıklığı olmadan uygulanıyor. Bu yöntem, tüm otomatik doldurma eşleri bilinmediğinde çok daha iyi çalışacak daha verimli ve güvenilir bir arama sağlıyor ve ağ büyümesine yönelik ciddi bir sınırlamayı ortadan kaldırıyor. Ağ büyüdükçe ve her yöneltici otomatik doldurma eşlerinin yalnızca küçük bir alt kümesini bildikçe, aramalar O(log n) şeklinde olur. Eş, anahtara daha yakın referanslar döndürmese bile, arama işlemi ek güvenlik sağlamak ve kötü niyetli bir otomatik doldurma yönelticisinin anahtar uzayının bir bölümünden kara delik oluşturmasını önlemek için bir sonraki en yakın eşle ilerler. Aramalar, toplam arama zaman aşımına ulaşılana veya en fazla eş sayısı sorgulanana kadar sürdürülür.

Düğüm kimlikleri, doğrulanabilir. Çünkü yöneltici karmasını doğrudan hem düğüm kimliği hem de Kademlia anahtarı olarak kullanırız. Arama anahtarına daha yakın olmayan yanlış yanıtlar genellikle yok sayılır. Ağın güncel boyutu göz önüne alındığında, bir yöneltici hedef kimliği uzayının komşuluğu hakkında ayrıntılı bilgiye sahiptir.

"Yöneltici bilgileri" (RouterInfo) depolama doğrulaması

Not: "Yöneltici bilgileri" (RouterInfo) doğrulaması, Practical Attacks Against the I2P Network belgesinde açıklanan saldırıyı önlemek için 0.9.7.1 sürümünden başlayarak devre dışı bırakılmıştır. Doğrulamanın güvenli olarak yapılacak şekilde yeniden tasarlanıp tasarlanamayacağı açık değildir.

Bir depolamanın başarılı olduğunu doğrulamak için, bir yöneltici yalnızca 10 saniye kadar bekler. Ardından anahtara yakın başka bir otomatik doldurma yönelticisine bir arama gönderir (ancak depolamanın gönderildiğine değil). Aramalar, yönelticinin gidiş keşif tünellerinden birini gönderdi. Aramalar, gidiş uç noktası (OBEP) tarafından gözetlenmeyi önlemek için uçtan uca Garlic şifrelenir.

"Kiralama kümesi" (LeaseSet) depolama doğrulaması

Bir depolamanın başarılı olduğunu doğrulamak için, bir yöneltici yalnızca 10 saniye kadar bekler. Ardından anahtara yakın başka bir otomatik doldurma yönelticisine bir arama gönderir (ancak depolamanın gönderildiğine değil). Aramalar, doğrulanmakta olan "Kiralama kümesinin" (LeaseSet) hedefi için istemci gidiş tünellerinden birini gönderdi. Gidiş tünelinin OBEP tarafından gözetlenmesini önlemek için, aramalar uçtan uca Garlic olarak şifrelenir. Yanıtlar, istemcinin geliş tünellerinden biri aracılığıyla döndürülecek şekilde belirtilir.

0.9.7 sürümünden başlayarak, yanıt tünelinin geliş ağ geçidinden (IBGW) gelen yanıtı gizlemek için hem "Yöneltici bilgileri" (RouterInfo) hem de "Kiralama kümesi" (LeaseSet) aramaları (bir "Veritabanı kaydetme iletisi" (DatabaseStoreMessage) veya bir "Veritabanı arama yanıtı iletisi" (DatabaseSearchReplyMessages)) için yanıtlar şifrelenir.

Keşif

Keşif, bir yönelticinin yeni yönelticiler hakkında bilgi edinmeye çalıştığı özel bir "Ağ veritabanı" (NetDB) arama biçimidir. Bunu, bir otomatik doldurma yönelticisine rastgele bir anahtar arayan bir I2NP "Veritabanı arama iletisi" (DatabaseLookupMessage) göndererek yapar. Bu arama başarısız olacağından, otomatik doldurma işlemi normalde anahtara yakın otomatik doldurma yönelticilerinin karmalarını içeren bir I2NP "Veritabanı arama yanıtı iletisi" (DatabaseSearchReplyMessages) ile yanıt verir. İstekte bulunan yöneltici büyük olasılıkla bu otomatik doldurma yönelticilerini zaten bildiğinden, bu bilginin yardımı olmaz ve tüm otomatik doldurma yönelticilerini "Veritabanı arama iletisinin" (DatabaseLookupMessage) "katılmayacaklar" alanına eklemek pratik olmaz. Bir keşif sorgusu için istekte bulunan yöneltici, "Veritabanı arama iletisi" (DatabaseLookupMessage) içine özel bir işaret koyar. Otomatik doldurma yönelticisi yalnızca istenen anahtara yakın, otomatik doldurma olmayan yönelticilerle yanıt verir.

Arama Yanıtları Hakkında Notlar

Bir arama isteğine verilen yanıt, bir veritabanı depolama iletisi (başarı durumunda) veya bir veritabanı arama yanıt iletisi (başarısızlık durumunda). DSRM, yanıtın kaynağını belirtmek için bir yöneltici karma alanı içerir. Veritabanı depolama iletisinde bu bulunmaz. Veritabanı arama yanıt iletisinin 'kimden' alanı kimliği doğrulanmamış ve sahte veya geçersiz olabilir. Başka bir yanıt etiketi bulunmaz. Bu nedenle, paralel olarak birden çok istekte bulunurken, çeşitli otomatik doldurma yönelticilerinin başarımını izlemek zordur.

Birden Çok Barındırma

Hedefler, aynı kişisel ve herkese açık anahtarlar (geleneksel olarak eepPriv.dat dosyalarında depolanır) kullanılarak aynı anda birden çok yönelticide barındırılabilir. Her iki örnek de imzalı "Kiralama kümelerini" (LeaseSets) otomatik doldurma eşlerine düzenli olarak yayınlayacağından, en son yayınlanan "Kiralama kümesi" (LeaseSet) bir veritabanı araması isteği yapan bir eşe döndürülür. "Kiralama kümelerinin" (LeaseSets) en fazla 10 dakikalık bir kullanım ömrü olduğundan, belirli bir bulut sunucusunun çökmesi durumunda kesinti en fazla 10 dakika olur ve genellikle bundan çok daha azdır. Çoklu barındırma arama işlevi doğrulandı ve ağdaki çeşitli hizmetler tarafından kullanılıyor.

0.9.38 sürümünden başlayarak, otomatik doldurmalar yeni bir "Üst kiralama kümesi" (MetaLeaseSet) yapısını destekler. Bu yapı, diğer "Kiralama kümelerine" (LeaseSets) atıfta bulunmak için "Dağıtılmış karma tablosu" (DHT) üzerinde ağaç benzeri bir yapı sağlar. Bir site, "Üst kiralama kümesini" (MetaLeaseSet) kullanarak, ortak bir hizmet sağlamak için birkaç farklı hedefin kullanıldığı büyük, çoklu barındırma hizmetlerini uygulayabilir. Bir "Üst kiralama kümesindeki" (MetaLeaseSet) kayıtlar, hedefler veya diğer "Üst kiralama kümeleridir" ve 18,2 saate kadar uzun geçerlilik süreleri olabilir. Bu yapıyı kullanılarak, ortak bir hizmeti barındıran yüzlerce veya binlerce hedef çalıştırılabilmelidir. Ayrıntılı bilgi almak için 123 numaralı öneriye bakabilirsiniz.

Tehdit İncelemesi

Ayrıca tehdit modeli sayfasında tartışılmıştır.

Kötü niyetli bir kullanıcı, bir veya daha fazla otomatik doldurma yönelticisi oluşturarak ve bunları kötü, yavaş veya hiç yanıt vermeyecek şekilde hazırlayarak ağa zarar vermeye çalışabilir. Bazı senaryolar aşağıda tartışılmıştır.

Büyümeyle Genel Azaltma

Şu anda ağda yaklaşık 1700 otomatik doldurma yönelticisi var. Aşağıdaki saldırıların çoğu, ağ boyutu ve otomatik doldurma yönelticilerinin sayısı arttıkça daha zor hale gelir veya daha az etkiye sahip olur.

Süreklilikle Genel Azaltma

Otomatik doldurma yoluyla, tüm "Ağ veritabanı" (NetDB) kayıtları, anahtara en yakın 3 otomatik doldurma yönelticisinde depolanır.

Sahtecilikler

Tüm "Ağ veritabanı" (NetDB) kayıtları oluşturucuları tarafından imzalanmıştır. Bu nedenle hiçbir yöneltici bir "Yöneltici bilgileri" (RouterInfo) veya "Kiralama kümesi" (LeaseSet) verisini taklit edemez.

Yavaş ya da Yanıtsız

Her yöneltici, her bir otomatik doldurma yönelticisi için eş profilinde o eş için çeşitli kalite ölçümlerini kapsayan genişletilmiş bir istatistik kümesi tutar. Kümede şunlar bulunur:

  • Ortalama yanıt süresi
  • İstenilen verilerle yanıtlanan sorguların yüzdesi
  • Başarıyla doğrulanan depolamaların yüzdesi
  • Son başarılı depolama
  • Son başarılı arama
  • Son yanıt

Bir yönelticinin hangi otomatik doldurma yönelticisinin bir anahtara en yakın olduğunu belirlemesi gerektiğinde, hangi otomatik doldurma yönelticilerinin "iyi" olduğunu belirlemesi için bu ölçümler kullanılır. "İyiliği" belirlemek için kullanılan yöntemler ve eşikler nispeten yenidir ve daha fazla analiz ve iyileştirmeye açıktır. Tamamen yanıt vermeyen bir yöneltici hızlı bir şekilde belirlenip bunlardan kaçınılırken, yalnızca bazen kötü niyetli olan yönelticilerle uğraşmak çok daha zor olabilir.

Sybil Saldırısı (Tam Anahtar Uzayı)

Saldırgan, anahtar uzayı boyunca yayılmış çok sayıda otomatik doldurma yönelticisi oluşturarak Sybil saldırısı başlatabilir.

(İlgili bir örnekte, bir araştırmacı yakın zamanda çok sayıda Tor aktarıcısı oluşturmuştur.) Başarılı olursa, bu şekilde tüm ağ üzerinde etkili bir DOS saldırısı yapılabilir.

Otomatik doldurma yönelticileri, yukarıda açıklanan eş profil ölçümleri kullanılarak "kötü" olarak işaretlenecek kadar hatalı çalışmıyorsa, bu senaryonun, ele alınması zordur. Tor yanıtı, aktarıcı durumunda çok daha çevik olabilir, çünkü şüpheli aktarıcılar uzlaşmadan el ile kaldırılabilir. I2P ağı için bazı olası yanıtlar aşağıda listelenmiştir. Ancak bunların hiçbiri tam olarak tatmin edici değildir:

  • Kötü yöneltici karmalarının veya IP adreslerinin bir listesini derleyin ve listeyi çeşitli yollarla duyurun (konsol haberleri, web sitesi, forum vb.); kullanıcıların listeyi el ile indirmeleri ve yerel "kara listelerine" eklemeleri gerekir.
  • Ağdaki herkesten otomatik doldurmayı el ile etkinleştirmesini isteyin (Sybil ile daha fazla Sybil kullanarak savaşın)
  • Sabit kodlanmış "hatalı" listeyi içeren yeni bir yazılım sürümü yayınlayın
  • "Kötü" eşleri otomatik olarak belirleme girişiminde bulunarak, eş profili ölçümlerini ve eşiklerini iyileştiren yeni bir yazılım sürümü yayınlayın.
  • Tek bir IP bloğundaki otomatik doldurma yönelticileri çok fazla sayıdaysa azaltan yazılım ekleyin
  • Tek bir kişi veya grup tarafından kontrol edilen, aboneliğe dayalı otomatik bir kara liste uygulayın. Bu, aslında Tor "uzlaşma" modelinin bir bölümünü uygular. Ne yazık ki, tek bir bireye veya gruba belirli bir yönelticinin veya IP adresinin ağdaki katılımını engelleme veya hatta tüm ağı tamamen kapatma veya yok etme gücü de verir.

Ağ boyutu büyüdükçe bu saldırı daha zor hale gelir.

Sybil Saldırısı (Parçalı Anahtar Uzayı)

Saldırgan, anahtar alanında yakın bir şekilde kümelenmiş az sayıda (8-15) otomatik doldurma yönelticisi oluşturarak bir Sybil saldırısı başlatabilir ve bu yönelticiler için "Yöneltici bilgilerini" (RouterInfo) geniş çapta dağıtabilir. Ardından, bu anahtar alanındaki tüm aramalar ve anahtarlar, saldırganın yönelticilerinden birine yöneltilir. Başarılı olursa, belirli bir I2P sitesinde etkili bir DOS saldırısı gibi olabilir.

Anahtar uzayı, anahtarın şifreleme (SHA-256) karması tarafından dizine eklendiğinden, bir saldırgan, anahtara yeterince yakın olana kadar üst üste yöneltici karmaları oluşturmak için bir kaba kuvvet yöntemi kullanmalıdır. Ağ boyutuna bağlı olduğundan bunun için gereken hesaplama gücü miktarı bilinmemektedir.

Bu saldırıya karşı kısmi bir savunma olarak, Kademlia tarafından "yakınlığı" belirlemek için kullanılan algoritma zamanla değiştirilir. Yakınlığı belirlemek için anahtarın karmasını (H(k)) kullanmak yerine, geçerli tarih dizgesine eklenen anahtarın karmasını kullanırız, (H(k + YYYYMMDD)). Özgün anahtarı bir "yöneltme anahtarına" dönüştüren "yöneltme anahtarı oluşturucu" adlı bir işlev bunu yapar. Başka bir deyişle, "Ağ veritabanı" (NetDB) anahtar uzayının tamamı her gün UTC gece yarısında "döndürülür". Herhangi bir kısmi anahtar alanı saldırısının her gün yeniden oluşturulması gerekir. Çünkü döndürme işleminden sonra saldıran yönelticiler artık hedef anahtara veya birbirlerine yakın olmayacaktır.

Ağ boyutu büyüdükçe bu saldırı daha zor hale gelir. Bununla birlikte, son araştırmalar, anahtar uzayını döndürmenin özellikle etkili olmadığını göstermektedir. Bir saldırgan, çok sayıda yöneltici karma değerini önceden hesaplayabilir ve yalnızca birkaç yöneltici, döndürmeden sonraki yarım saat içinde anahtar uzayının bir bölümünü "tutturmak" için yeterlidir.

Günlük anahtar uzayı döndürmenin bir sonucu, dağıtılmış "Ağ veritabanının" (NetDB) döndürme işleminden birkaç dakika sonra güvenilmez olmasıdır. Yeni "en yakın" yöneltici henüz bir depolama almadığı için aramalar başarısız olur. Sorunun kapsamı ve hafifletme yöntemleri (örneğin gece yarısı "Ağ veritabanı" (NetDB) "terkleri") üzerinde daha fazla çalışılması gereken bir konudur.

Ön Yükleme Saldırıları

Bir saldırgan, yeniden oluşturulmuş bir web sitesini ele geçirerek veya geliştiricileri, yeniden oluşturulmuş web sitesini yönelticideki sabit kodlanmış listeye eklemeleri için kandırarak, yalıtılmış veya çoğunluğun denetimindeki bir ağda yeni yönelticiler başlatmayı deneyebilir.

Birkaç savunma önlemi alınabilir ve bunların çoğu planlanmıştır:

  • Yeniden tohumlama için HTTPS yerine HTTP iletişim kuralına dönülmesine izin vermeyin. Bir MITM saldırganı kolayca HTTPS erişimini engelleyip ardından HTTP iletişim kuralına yanıt verebilir.
  • Kurucuda yeniden çekirdek verilerinin paketlenmesi

Uygulanan savunmalar:

  • Yeniden tohumlama görevi, yalnızca tek bir site kullanmak yerine, birkaç yeniden oluşturulmuş sitenin her birinden bir "Yöneltici bilgileri" (RouterInfo) alt kümesi alacak şekilde değiştirildi.
  • Yeniden tohumlanmış web sitelerini düzenli olarak yoklayan ve verilerin eskimiş veya ağın diğer görünümleriyle tutarsız olmadığını doğrulayan ağ dışı bir yeniden izleme hizmeti oluşturuldu.
  • 0.9.14 sürümünden başlayarak, yeniden tohumlama verileri imzalanmış bir zip dosyasında paketleniyor ve indirildiğinde imza doğrulanıyor. See the su3 specification for details.

Sorgu Yakalama

Ayrıca lookup bölümüne bakabilirsiniz (Referans: Aşağıdaki yatık yazılmış terimler için Hashing out in Public 2.2 ve 2.3 bölümleri)

Ön yükleme saldırısına benzer şekilde, otomatik doldurma yönelticisi kullanan bir saldırgan, referanslarını döndürerek, eşleri kendisi tarafından kontrol edilen bir yöneltici alt kümesine "yöneltmeye" çalışabilir.

Bunun keşif yoluyla çalışması pek olası değildir. Çünkü keşif düşük sıklıkla yapılan bir görevdir. Yönelticiler, eş referanslarının çoğunu normal tünel oluşturma faaliyeti yoluyla elde eder. Keşif sonuçları genellikle birkaç yöneltici karmasıyla sınırlıdır ve her keşif sorgusu rastgele bir otomatik doldurma yönelticisine yönlendirilir.

0.8.9 sürümünden başlayarak yinelemeli aramalar uygulanıyor. Bir aramaya I2NP "Veritabanı arama yanıtı iletisi" (DatabaseSearchReplyMessages) ile döndürülen otomatik doldurma yönelticisi referansları için, bu referanslar arama anahtarına daha yakınsa (veya bir sonraki en yakınsa) izlenir. İstekte bulunan yöneltici, referansların anahtara daha yakın olduğuna güvenmez (yani, bunlar doğrulanabilir şekilde doğrudur. Arama, daha yakın bir anahtar bulunmadığında da durmaz, ancak zaman aşımına uğrayana ya da en fazla sorgu sayısına ulaşılana kadar sonfraki en yakın düğümünü sorgulanarak sürdürülür. Böylece, kötü niyetli bir otomatik doldurma yönelticisinin anahtar uzayının bir bölümünde kara delik oluşturması önlenir. Ayrıca, günlük anahtar uzayını döndürmek, bir saldırganın istenen anahtar alanı uzayında bir yöneltici bilgisini yeniden oluşturmasını gerektirir. Bu tasarım, Hashing it in Public bölümünde açıklanan sorgu yakalama saldırısının çok daha zor olmasını sağlar.

"Dağıtılmış karma tablosu" (DHT) temelli aktarıcı seçimi

(Referans: Hashing it out in Public 3. bölüm)

Bunun otomatik doldurma ile pek bir ilgisi yoktur. Yine de tüneller için eş seçiminin güvenlik açıkları hakkında bir tartışmayı görmek için eş seçimi sayfasına bakın.

Bilgi Kaçakları

(Referans: In Search of an Anonymous and Secure Lookup 3. bölüm)

Bu belgede, Torsk ve NISAN tarafından kullanılan "Finger Table" "Dağıtılmış karma tablosu" (DHT) aramalarındaki zayıflıklar ele alınmıştır. İlk bakışta, bunlar I2P için geçerli görünmüyor. İlk olarak, Torsk ve NISAN tarafındaki "Dağıtılmış karma tablosu" (DHT) kullanımı I2P üzerindekinden önemli ölçüde farklıdır. İkincisi, I2P "Ağ veritabanı" (netDB) aramaları, eş seçimi ve tünel oluşturma süreçleriyle yalnızca gevşek bir şekilde ilişkilidir. Tüneller için yalnızca önceden bilinen eşler kullanılır. Ayrıca, eş seçimi, herhangi bir "Dağıtılmış karma tablosu" (DHT) anahtar yakınlığı kavramıyla ilgisizdir.

Bunlardan bazıları, I2P ağı daha fazla genişlediğinde daha ilginç olabilir. Şu anda, her yöneltici ağın büyük bir bölümünü biliyor. Bu nedenle ağ veritabanında belirli Yöneltici Bilgilerini aramak, gelecekte bu yönelticiyi bir tünelde kullanma niyetinin güçlü bir göstergesi değildir. Belki ağ 100 kat daha büyük olduğunda, arama daha ilişkilendirilebilir olabilir. Tabii ki, daha büyük bir ağ, bir Sybil saldırısını çok daha zor hale getirir.

Ancak, I2P üzerindeki "Dağıtılmış karma tablosu" (DHT) bilgi sızıntısı genel konusunun daha fazla araştırılması gerekiyor. Otomatik doldurma yönelticileri, sorguları gözlemleyecek ve bilgi toplayacak bir konumdadır. Elbette, f = 0,2 (20% yazısında belirtildiği gibi; kötü niyetli düğümler) düzeyinde, tanımladığımız Sybil tehditlerinin çoğunun (burada, burada ve burada) belirtilen nedenlerle sorunlu hale gelmesini bekliyoruz.

Geçmiş

"Ağ veritabanı" (NetDB) tartışma sayfasına taşındı.

Gelecekte Yapılacak Çalışmalar

Ek "Ağ veritabanı" (NetDB) aramalarının ve yanıtlarının uçtan uca şifrelenmesi.

Arama yanıtlarını izlemek için daha iyi yöntemler.