Această pagină a fost actualizată ultima dată în 2020-07 și deține informații clare pentru versiunea de router 0.9.46.

Prezentare generală

I2P este livrat cu o bibliotecă de denumire generică și o implementare de bază proiectata pentru a calcula un nume local la cartografierea destinației, precum și o aplicație suplimentară numită agenda de adrese. I2P acceptă de asemenea nume de gazdă Base32 similare cu adresele .onion ale lui Tor.

The addressbook is a web-of-trust driven secure, distributed, and human readable naming system, sacrificing only the call for all human readable names to be globally unique by mandating only local uniqueness. While all messages in I2P are cryptographically addressed by their destination, different people can have local addressbook entries for "Alice" which refer to different destinations. People can still discover new names by importing published addressbooks of peers specified in their web of trust, by adding in the entries provided through a third party, or (if some people organize a series of published addressbooks using a first come first serve registration system) people can choose to treat these addressbooks as name servers, emulating traditional DNS.

NOTĂ: Pentru raționamentul din spatele sistemului de denumire I2P, argumente comune împotriva acestuia și alternative posibile vezi discuția de denumire pagină.

Denumirea componentelor sistemului

În I2P nu există o autoritate de denumire centrală. Toate numele de gazdă sunt locale.

Sistemul de denumire este destul de simplu și cea mai mare parte a acestuia este implementată în aplicații externe routerului, dar incluse în pachet distribuția I2P. Componentele sunt:

  1. Serviciul de denumire local care efectuează căutări de asemenea, se ocupă cu numele de gazdă Base32.
  2. Proxy HTTP care solicită routerului căutări și puncte utilizatorul la serviciile de salt la distanță pentru a asista la căutările eșuate
  3. Formulare de adăugare de gazdă HTTP care permit utilizatorilor să adauge gazde la gazdele lor locale.txt
  4. Servicii de salt HTTP care oferă propriile lor căutări și redirecționare.
  5. Aplicația de adrese care se contopește extern liste de gazde, preluate prin HTTP, cu lista locală.
  6. Aplicația SusiDNS, care este un simplu front-end web pentru configurarea agendei de adrese și vizualizarea listelor de gazdă locale.

Servicii de denumire

All destinations in I2P are 516-byte (or longer) keys. (To be more precise, it is a 256-byte public key plus a 128-byte signing key plus a 3-or-more byte certificate, which in Base64 representation is 516 or more bytes. Non-null Certificates are in use now for signature type indication. Therefore, certificates in recently-generated destinations are more than 3 bytes.

Dacă o aplicație (i2ptunnel sau proxy HTTP) dorește să acceseze o destinație pe nume, routerul face o căutare locală foarte simplă pentru a rezolva acest nume.

Hosts.txt Serviciul de denumire

Hosts.txt Naming Service efectuează o simplă căutare liniară in fișiere text. Acest serviciu de denumire a fost implicit până la lansarea 0.8.8 când a fost înlocuit de serviciul de numire Blockfile. Formatul hosts.txt a devenit prea lent după ce fișierul a crescut la mii de înregistrări.

Efectuează o căutare liniară prin trei fișiere locale, în ordine, pentru a căuta numele gazdelor și le converta într-o cheie de destinație de 516 octeți. Fiecare fișier este într-un format simplu de fișier de configurare, cu hostname = base64, unul pe fiecare linie. Fișierele sunt:

  1. privatehosts.txt
  2. userhosts.txt
  3. hosts.txt

Serviciul de denumire Blockfile

Serviciul de denumire Blockfile stochează mai multe „adrese” într-un singur fișier de bază de date numit hostsdb.blockfile. Acest serviciu de denumire este implicit de la lansarea 0.8.8.

A blockfile is simply on-disk storage of multiple sorted maps (key-value pairs), implemented as skiplists. The blockfile format is specified on the Blockfile page. It provides fast Destination lookup in a compact format. While the blockfile overhead is substantial, the destinations are stored in binary rather than in Base 64 as in the hosts.txt format. In addition, the blockfile provides the capability of arbitrary metadata storage (such as added date, source, and comments) for each entry to implement advanced addressbook features. The blockfile storage requirement is a modest increase over the hosts.txt format, and the blockfile provides approximately 10x reduction in lookup times.

On creation, the naming service imports entries from the three files used by the hosts.txt Naming Service. The blockfile mimics the previous implementation by maintaining three maps that are searched in-order, named privatehosts.txt, userhosts.txt, and hosts.txt. It also maintains a reverse-lookup map to implement rapid reverse lookups.

Alte facilități de servicii de numire

The lookup is case-insensitive. The first match is used, and conflicts are not detected. There is no enforcement of naming rules in lookups. Lookups are cached for a few minutes. Base 32 resolution is described below. For a full description of the Naming Service API see the Naming Service Javadocs. This API was significantly expanded in release 0.8.7 to provide adds and removes, storage of arbitrary properties with the hostname, and other features.

Alternative și servicii de numire experimentală

The naming service is specified with the configuration property i2p.naming.impl=class. Other implementations are possible. For example, there is an experimental facility for real-time lookups (a la DNS) over the network within the router. For more information see the alternatives on the discussion page.

Proxy HTTP face o căutare prin router pentru toate numele de gazdă care se termină în „.i2p”. În caz contrar, transmite solicitarea către o programare HTTP configurată. Astfel, în practică, toate numele de gazdă HTTP (eepsit) trebuie să se încheie în pseudo-Top Level Domain ".i2p".

Am solicitat rezervarea TLD .i2p urmând procedurile specificate în RFC 6761.

Dacă routerul nu reușește să rezolve numele de gazdă, proxy-ul HTTP revine o pagină de eroare către utilizator cu link-uri către mai multe servicii de „salt”. Vezi mai jos pentru detalii.

Agendă

Abonamente primite și Fuziune

Aplicația de adrese periodice preia fișierele hosts.txt ale altor utilizatori și fuzionează ei cu gazdele locale.txt, după mai multe verificări. Conflictele de denumire sunt soluționate pentru un prim servit primul venit bază.

Abonarea la fișierul hosts.txt al altui utilizator implică oferindu-le o anumită încredere. Nu le doriți, de exemplu, „deturnează” un site nou prin introducerea rapidă în propria cheie pentru un nou site înainte de a trece noua intrare gazdă/cheie.

For this reason, the only subscription configured by default is http://i2p-projekt.i2p/hosts.txt (http://udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p/hosts.txt), which contains a copy of the hosts.txt included in the I2P release. Users must configure additional subscriptions in their local addressbook application (via subscriptions.txt or SusiDNS).

Câteva alte link-uri de abonament la agenda publică:

Operatorii acestor servicii pot avea diverse politici pentru listarea gazdelor. Prezența pe această listă nu implică aprobare.

Reguli de denumire

While there are hopefully not any technical limitations within I2P on host names, the addressbook enforces several restrictions on host names imported from subscriptions. It does this for basic typographical sanity and compatibility with browsers, and for security. The rules are essentially the same as those in RFC2396 Section 3.2.2. Any hostnames violating these rules may not be propagated to other routers.

Reguli de denumire:

  • Numele sunt convertite cu litere mici la import.
  • Numele sunt verificate pentru a intra în conflict cu numele existente în userhosts.txt și hosts.txt existente (dar nu privatehosts.txt) după conversie în minuscule.
  • Trebuie să conțină numai [a-z] [0-9] '. " și „-” după conversie în minuscule.
  • Nu trebuie să încep cu '.' sau „-”.
  • Trebuie să se termine cu „.i2p”.
  • Maximum 67 de caractere, inclusiv „.i2p”.
  • Nu trebuie să conțină „..”.
  • Nu trebuie să conțină „.-” sau „-”. (începând cu 0.6.1.33).
  • Nu trebuie să conțină „-” decât în ​​„xn--” pentru IDN.
  • Numele de gazdă Base32 (* .b32.i2p) sunt rezervate pentru utilizarea bazei 32 și astfel nu este permis să fie importate.
  • Anumite nume de gazdă rezervate pentru utilizarea proiectului nu sunt permise (proxy.i2p, router.i2p, console.i2p, * .proxy.i2p, * .router.i2p, * .console.i2p și altele)
  • Tastele sunt verificate pentru validitatea bazei 64.
  • Cheile sunt verificate pentru a intra în conflict cu cheile existente în hosts.txt (dar nu privatehosts.txt).
  • Lungimea minimă a cheii 516 octeți.
  • Lungimea maximă a cheii 616 bytes (pentru a contabiliza certuri de până la 100 de octeți).

Orice nume primit prin abonament care trece toate verificările este adăugat prin intermediul serviciului de denumire local.

Note that the '.' symbols in a host name are of no significance, and do not denote any actual naming or trust hierarchy. If the name 'host.i2p' already exists, there is nothing to prevent anybody from adding a name 'a.host.i2p' to their hosts.txt, and this name can be imported by others' addressbook. Methods to deny subdomains to non-domain 'owners' (certificates?), and the desirability and feasibility of these methods, are topics for future discussion.

Denumirile internaționale de domeniu (IDN) funcționează de asemenea în i2p (folosind formularul punycode „xn--” ). Pentru a vedea numele de domeniu IDN .i2p redate corect în bara de locații Firefox, adaugati 'network.IDN.whitelist.i2p (boolean) = true' in about:config.

Întrucât aplicația pentru agenda de adrese nu utilizează deloc privatehosts.txt, în practică acest fișier este singurul loc în care este potrivit să plasați aliasuri private sau "nume prietenesti" pentru site-urile care se află deja în hosts.txt.

Formatul avansat de feed pentru abonamente

As 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.

Abonamente efectuate

Carnetul de adrese va publica combinate hosts.txt într-o locație (în mod tradițional hosts.txt din directorul local al eepsitului) pentru a fi accesat de alții pentru abonamentele lor. Acest pas este opțional și este dezactivat implicit.

Hosting and HTTP Transport Issues

Aplicația de adrese, împreună cu eepget, salvează Etag și / sau Last-Modified informatii returnate de serverul web al abonamentului. Acest lucru reduce considerabil lățimea de bandă necesară, așa cum va fi serverul web întoarceți un „304 Not Modified” pe următoarea operațiune dacă nu s-a schimbat nimic.

Totuși, întregul hosts.txt este descărcat dacă s-a schimbat. Vezi mai jos pentru discuții pe această temă.

Gazde care servesc un hosts.txt static sau o aplicație CGI echivalentă sunt încurajați să livreze un antet cu lungimea conținutului și un antet Etag sau Ultima modificare. De asemenea, asigurați-vă că serverul livrează un „304 Nemodificat” atunci când este cazul. Aceasta va reduce dramatic lățimea de bandă a rețelei și reduce șansele de corupție.

Servicii de adăugare de gazdă

Un serviciu de adăugare de gazdă este o aplicație CGI simplă care are ca parametri un nume de gazdă și o cheie Base64 și adaugă asta la gazdele sale locale.txt. Dacă alți routeri se abonează la acel hosts.txt, noul nume / cheie gazdă va fi propagat prin rețea.

Se recomandă ca serviciile de adăugare de la gazdă să impună, cel puțin, restricțiile impuse de aplicația din agenda de adrese menționată mai sus. Serviciile de adăugare de gazdă pot impune restricții suplimentare pentru nume de gazdă și chei, de exemplu:

  • O limită a numărului de „subdomenii”.
  • Autorizarea „subdomeniilor” prin diferite metode.
  • Certificări Hashcash sau semnate.
  • Revizuire editorială a numelor de gazdă și / sau a conținutului.
  • Categorizarea gazdelor după conținut.
  • Rezervarea sau respingerea anumitor nume de gazdă.
  • Restricții privind numărul de nume înregistrate într-o anumită perioadă de timp.
  • Întârzieri între înregistrare și publicare.
  • Cerința ca gazda să fie pregătită pentru verificare.
  • Expirare și / sau revocare.
  • Respingerea spoofului IDN.

Servicii de salt

A jump service is a simple CGI application that takes a hostname as a parameter and returns a 301 redirect to the proper URL with a ?i2paddresshelper=key string appended. The HTTP proxy will interpret the appended string and use that key as the actual destination. In addition, the proxy will cache that key so the address helper is not necessary until restart.

Note that, like with subscriptions, using a jump service implies a certain amount of trust, as a jump service could maliciously redirect a user to an incorrect destination.

Pentru a oferi cel mai bun serviciu, ar trebuie ca un serviciu de salt sa fie abonat mai mulți furnizori de hosts.txt, astfel încât lista sa gazdă locală să fie actuală.

SusiDNS

SusiDNS is simply a web interface front-end to configuring addressbook subscriptions and accessing the four addressbook files. All the real work is done by the 'addressbook' application.

Currently, there is little enforcement of addressbook naming rules within SusiDNS, so a user may enter hostnames locally that would be rejected by the addressbook subscription rules.

Nume Base32

I2P supports Base32 hostnames similar to Tor's .onion addresses. Base32 addresses are much shorter and easier to handle than the full 516-character Base64 Destinations or addresshelpers. Example: ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p

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 addresses can be used in most places where hostnames or full destinations are used, however there are some exceptions where they may fail if the name does not immediately resolve. I2PTunnel will fail, for example, if the name does not resolve to a destination.