Bu çeviri makine öğrenimi kullanılarak oluşturulmuştur ve %100 doğru olmayabilir. İngilizce versiyonu görüntüle

Ortak Yapılar Belirtimi

Tüm I2P protokollerinde ortak olan veri türleri

Bu belge, I2NP , I2CP , SSU vb. gibi tüm I2P protokollerinde ortak olan bazı veri türlerini açıklar.

Ortak tür belirtimi

Tamsayı

Açıklama

Negatif olmayan bir tamsayıyı temsil eder.

İçindekiler

Network byte order (big endian) ile işaretsiz bir tamsayıyı temsil eden 1 ila 8 bayt.

Tarih

Açıklama

GMT saat diliminde 1 Ocak 1970 gece yarısından bu yana geçen milisaniye sayısı. Sayı 0 ise, tarih tanımsız veya null’dur.

İçindekiler

8 bayt Integer

Dize

Açıklama

UTF-8 kodlanmış bir dizeyi temsil eder.

İçindekiler

İlk baytın string’deki bayt sayısını (karakter sayısını değil!) belirttiği ve kalan 0-255 baytın null ile sonlandırılmamış UTF-8 kodlanmış karakter dizisi olduğu 1 veya daha fazla bayt. Uzunluk sınırı 255 bayttır (karakter değil). Uzunluk 0 olabilir.

PublicKey

Açıklama

Bu yapı ElGamal veya diğer asimetrik şifreleme yöntemlerinde kullanılır ve yalnızca üssü temsil eder, sabit olan ve kriptografi spesifikasyonunda ELGAMAL tanımlanan asal sayıları değil. Diğer şifreleme şemaları tanımlanma sürecindedir, aşağıdaki tabloyu görün.

İçindekiler

Anahtar türü ve uzunluğu bağlamdan çıkarılır veya bir Destination ya da RouterInfo’nun Key Certificate’ında veya bir LeaseSet2 ya da diğer veri yapılarındaki alanlarda belirtilir. Varsayılan tür ElGamal’dır. 0.9.38 sürümünden itibaren, bağlama bağlı olarak diğer türler de desteklenebilir. Aksi belirtilmedikçe anahtarlar big-endian formatındadır.

X25519 anahtarları, 0.9.44 sürümünden itibaren Destination’larda ve LeaseSet2’de desteklenmektedir. X25519 anahtarları, 0.9.48 sürümünden itibaren RouterIdentity’lerde desteklenmektedir.

TypeLength (bytes)SinceUsage
ElGamal256Deprecated for Router Identities as of 0.9.58; use for Destinations, as the public key field is unused there; discouraged for leasesets
P25664TBDReserved, see proposal 145
P38496TBDReserved, see proposal 145
P521132TBDReserved, see proposal 145
X25519320.9.38Little-endian. See ECIES and ECIES-ROUTERS
MLKEM512_X25519320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM768_X25519320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM1024_X25519320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM5128000.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM76811840.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM102415680.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM512_CT7680.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM768_CT10880.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM1024_CT15680.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/PublicKey.html

PrivateKey

Açıklama

Bu yapı ElGamal veya diğer asimetrik şifre çözmede kullanılır ve yalnızca üssü temsil eder, kriptografi spesifikasyonunda ELGAMAL sabit olarak tanımlanan asal sayıları değil. Diğer şifreleme şemaları tanımlanma sürecindedir, aşağıdaki tabloya bakın.

İçindekiler

Anahtar tipi ve uzunluğu bağlamdan çıkarılır veya bir veri yapısında ya da özel anahtar dosyasında ayrı olarak saklanır. Varsayılan tip ElGamal’dır. 0.9.38 sürümünden itibaren, bağlama bağlı olarak diğer tipler desteklenebilir. Aksi belirtilmedikçe anahtarlar big-endian formatındadır.

TypeLength (bytes)SinceUsage
ElGamal256Deprecated for Router Identities as of 0.9.58; use for Destinations, as the public key field is unused there; discouraged for leasesets
P25632TBDReserved, see proposal 145
P38448TBDReserved, see proposal 145
P52166TBDReserved, see proposal 145
X25519320.9.38Little-endian. See ECIES and ECIES-ROUTERS
MLKEM512_X25519320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM768_X25519320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM1024_X25519320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM51216320.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM76824000.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
MLKEM102431680.9.67See ECIES-HYBRID, for handshakes only, not for Leasesets, RIs or Destinations
JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/PrivateKey.html

SessionKey

Açıklama

Bu yapı simetrik AES256 şifreleme ve şifre çözme için kullanılır.

İçindekiler

32 bayt

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/SessionKey.html

SigningPublicKey

Açıklama

Bu yapı imzaları doğrulamak için kullanılır.

İçindekiler

Anahtar türü ve uzunluğu bağlamdan çıkarılır veya bir Destination’ın Key Certificate’inde belirtilir. Varsayılan tür DSA_SHA1’dir. 0.9.12 sürümünden itibaren, bağlama bağlı olarak diğer türler desteklenebilir.

TypeLength (bytes)SinceUsage
DSA_SHA1128Deprecated for Router Identities as of 09.58; discouraged for Destinations
ECDSA_SHA256_P256640.9.12Deprecated Older Destinations
ECDSA_SHA384_P384960.9.12Deprecated Rarely used for Destinations
ECDSA_SHA512_P5211320.9.12Deprecated Rarely used for Destinations
RSA_SHA256_20482560.9.12Deprecated Offline signing, never used for Router Identities or Destinations
RSA_SHA384_30723840.9.12Deprecated Offline signing, never used for Router Identities or Destinations
RSA_SHA512_40965120.9.12Offline signing, never used for Router Identities or Destinations
EdDSA_SHA512_Ed25519320.9.15Recent Router Identities and Destinations
EdDSA_SHA512_Ed25519ph320.9.25Offline signing, never used for Router Identities or Destinations
RedDSA_SHA512_Ed25519320.9.39For Destinations and encrypted leasesets only, never used for Router Identities
#### Notlar
  • Bir anahtar iki elemandan oluştuğunda (örneğin X,Y noktaları), her eleman gerekirse önünde sıfırlar eklenerek uzunluk/2’ye tamamlanarak serileştirilir.

  • EdDSA ve RedDSA hariç tüm türler Big Endian formatındadır; EdDSA ve RedDSA Little Endian formatında saklanır ve iletilir.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/SigningPublicKey.html

SigningPrivateKey

Açıklama

Bu yapı imza oluşturmak için kullanılır.

İçindekiler

Anahtar türü ve uzunluğu oluşturulurken belirtilir. Varsayılan tür DSA_SHA1’dir. 0.9.12 sürümü itibariyle, bağlama bağlı olarak diğer türler de desteklenebilir.

TypeLength (bytes)SinceUsage
DSA_SHA120Deprecated for Router Identities as of 09.58; discouraged for Destinations
ECDSA_SHA256_P256320.9.12Deprecated Older Destinations
ECDSA_SHA384_P384480.9.12Deprecated Rarely used for Destinations
ECDSA_SHA512_P521660.9.12Deprecated Rarely used for Destinations
RSA_SHA256_20485120.9.12Deprecated Offline signing, never used for Router Identities or Destinations
RSA_SHA384_30727680.9.12Deprecated Offline signing, never used for Router Identities or Destinations
RSA_SHA512_409610240.9.12Offline signing, never used for Router Identities or Destinations
EdDSA_SHA512_Ed25519320.9.15Recent Router Identities and Destinations
EdDSA_SHA512_Ed25519ph320.9.25Offline signing, never used for Router Identities or Destinations
RedDSA_SHA512_Ed25519320.9.39For Destinations and encrypted leasesets only, never used for Router Identities
#### Notlar
  • Bir anahtar iki elementten oluştuğunda (örneğin X,Y noktaları), gerekirse her element başına sıfırlar eklenerek uzunluk/2’ye tamamlanarak serileştirilir.

  • Tüm türler Big Endian formatındadır, EdDSA ve RedDSA hariç - bunlar Little Endian formatında saklanır ve iletilir.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/SigningPrivateKey.html

İmza

Açıklama

Bu yapı, bazı verilerin imzasını temsil eder.

İçindekiler

İmza türü ve uzunluğu kullanılan anahtarın türünden çıkarılır. Varsayılan tür DSA_SHA1’dir. 0.9.12 sürümünden itibaren, bağlama bağlı olarak diğer türler de desteklenebilir.

TypeLength (bytes)SinceUsage
DSA_SHA140Deprecated for Router Identities as of 09.58; discouraged for Destinations
ECDSA_SHA256_P256640.9.12Deprecated Older Destinations
ECDSA_SHA384_P384960.9.12Deprecated Rarely used for Destinations
ECDSA_SHA512_P5211320.9.12Deprecated Rarely used for Destinations
RSA_SHA256_20482560.9.12Deprecated Offline signing, never used for Router Identities or Destinations
RSA_SHA384_30723840.9.12Deprecated Offline signing, never used for Router Identities or Destinations
RSA_SHA512_40965120.9.12Offline signing, never used for Router Identities or Destinations
EdDSA_SHA512_Ed25519640.9.15Recent Router Identities and Destinations
EdDSA_SHA512_Ed25519ph640.9.25Offline signing, never used for Router Identities or Destinations
RedDSA_SHA512_Ed25519640.9.39For Destinations and encrypted leasesets only, never used for Router Identities
#### Notlar
  • Bir imza iki elemandan oluştuğunda (örneğin R,S değerleri), her eleman gerekirse başına sıfırlar eklenerek length/2 uzunluğuna doldurularak serileştirilir.

  • Tüm türler Big Endian formatındadır, EdDSA ve RedDSA hariç; bunlar Little Endian formatında saklanır ve iletilir.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/Signature.html

Hash

Açıklama

Bazı verilerin SHA256 değerini temsil eder.

İçindekiler

32 bayt

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/Hash.html

Oturum Etiketi

Not: ECIES-X25519 hedefleri (ratchet) ve ECIES-X25519 router’ları için Session Tag’ler 8 bayttır. Bkz. ECIES ve ECIES-ROUTERS .

Açıklama

Rastgele bir sayı

İçindekiler

32 bayt

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/SessionTag.html

TunnelId

Açıklama

Bir tunnel içindeki her router için benzersiz olan bir tanımlayıcı belirler. Tunnel ID genellikle sıfırdan büyüktür; özel durumlar dışında sıfır değeri kullanmayın.

İçindekiler

4 bayt Integer

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/TunnelId.html

Sertifika

Açıklama

Sertifika, I2P ağı boyunca kullanılan çeşitli makbuzlar veya iş kanıtları için bir kapsayıcıdır.

İçindekiler

Sertifika türünü belirten 1 bayt Integer , ardından sertifika yük boyutunu belirten 2 bayt Integer , sonra o kadar bayt.

+----+----+----+----+----+-/
|type| length  | payload
+----+----+----+----+----+-/

type :: Integer
        length -> 1 byte

length :: Integer
          length -> 2 bytes

payload :: data
           length -> $length bytes

Notlar

  • Router Identities için, Certificate 0.9.15 sürümü dahil olmak üzere her zaman NULL’dur. 0.9.16 sürümünden itibaren, anahtar türlerini belirtmek için bir Key Certificate kullanılır. 0.9.48 sürümünden itibaren, X25519 şifreleme public key türlerine izin verilir. Aşağıya bakınız.

  • Garlic Cloves için, Certificate her zaman NULL’dur, şu anda başka hiçbiri uygulanmamıştır.

  • Garlic Messages için, Certificate her zaman NULL’dur, şu anda başka hiçbiri uygulanmamıştır.

  • Destinations için, Sertifika NULL olmayabilir. 0.9.12 sürümünden itibaren, imzalama genel anahtar türünü belirtmek için bir Anahtar Sertifikası kullanılabilir. Aşağıya bakınız.

  • Geliştiriciler, Sertifikalarda fazla veri bulunmasını yasaklamaları konusunda uyarılır. Her sertifika türü için uygun uzunluk zorlanmalıdır.

Sertifika Türleri

Aşağıdaki sertifika türleri tanımlanmıştır:

TypeType CodePayload LengthTotal LengthNotes
Null003
HashCash1variesvariesDeprecated, unused. Payload contains an ASCII colon-separated hashcash string.
Hidden203Deprecated, unused. Hidden routers generally do not announce that they are hidden.
Signed340 or 7243 or 75Deprecated, unused. Payload contains a 40-byte DSA signature, optionally followed by the 32-byte Hash of the signing Destination.
Multiple4variesvariesDeprecated, unused. Payload contains multiple certificates.
Key54+7+Since 0.9.12. See below for details.
#### Anahtar Sertifikaları

Key certificate’lar 0.9.12 sürümüyle tanıtıldı. Bu sürümden önce, tüm PublicKey’ler 256 baytlık ElGamal anahtarlarıydı ve tüm SigningPublicKey’ler 128 baytlık DSA-SHA1 anahtarlarıydı. Key certificate, Destination veya RouterIdentity içindeki PublicKey ve SigningPublicKey türünü belirtmek ve standart uzunlukları aşan herhangi bir anahtar verisini paketlemek için bir mekanizma sağlar.

Sertifikadan önce tam olarak 384 bayt koruyarak ve fazla anahtar verilerini sertifikanın içine koyarak, Destination’ları ve Router Identity’lerini ayrıştıran herhangi bir yazılım için uyumluluğu korumuş oluruz.

Anahtar sertifikası yükü şunları içerir:

DataLength
Signing Public Key Type (Integer)2
Crypto Public Key Type (Integer)2
Excess Signing Public Key Data0+
Excess Crypto Public Key Data0+
Uyarı: Anahtar türü sırası beklediğinizin tersine; İmzalama Public Key Türü ilk sırada.

Tanımlanmış İmzalama Genel Anahtarı türleri şunlardır:

TypeType CodeTotal Public Key LengthSinceUsage
DSA_SHA101280.9.12Deprecated for Router Identities as of 0.9.58; discouraged for Destinations
ECDSA_SHA256_P2561640.9.12Deprecated Older Destinations
ECDSA_SHA384_P3842960.9.12Deprecated Rarely if ever used for Destinations
ECDSA_SHA512_P52131320.9.12Deprecated Rarely if ever used for Destinations
RSA_SHA256_204842560.9.12Deprecated Offline only; never used in Key Certificates for Router Identities or Destinations
RSA_SHA384_307253840.9.12Deprecated Offline only; never used in Key Certificates for Router Identities or Destinations
RSA_SHA512_409665120.9.12Offline only; never used in Key Certificates for Router Identities or Destinations
EdDSA_SHA512_Ed255197320.9.15Recent Router Identities and Destinations
EdDSA_SHA512_Ed25519ph8320.9.25Offline only; never used in Key Certificates for Router Identities or Destinations
reserved (GOST)964Reserved, see Prop134
reserved (GOST)10128Reserved, see Prop134
RedDSA_SHA512_Ed2551911320.9.39For Destinations and encrypted leasesets only; never used for Router Identities
reserved (MLDSA)12Reserved, see Prop169
reserved (MLDSA)13Reserved, see Prop169
reserved (MLDSA)14Reserved, see Prop169
reserved (MLDSA)15Reserved, see Prop169
reserved (MLDSA)16Reserved, see Prop169
reserved (MLDSA)17Reserved, see Prop169
reserved (MLDSA)18Reserved, see Prop169
reserved (MLDSA)19Reserved, see Prop169
reserved (MLDSA)20Reserved, see Prop169
reserved65280-65534Reserved for experimental use
reserved65535Reserved for future expansion
Tanımlanmış Kripto Açık Anahtar türleri şunlardır:
TypeType CodeTotal Public Key LengthSinceUsage
ElGamal0256Deprecated for Router Identities as of 0.9.58; use for Destinations, as the public key field is unused there
P256164Reserved, see proposal 145
P384296Reserved, see proposal 145
P5213132Reserved, see proposal 145
X255194320.9.38See ECIES and proposal 156
MLKEM512_X255195320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM768_X255196320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
MLKEM1024_X255197320.9.67See ECIES-HYBRID, for Leasesets only, not for RIs or Destinations
reserved (NONE)255Reserved, see Prop169
reserved65280-65534Reserved for experimental use
reserved65535Reserved for future expansion
Key Certificate mevcut olmadığında, Destination veya RouterIdentity içindeki önceki 384 byte, 256-byte ElGamal PublicKey ve ardından 128-byte DSA-SHA1 SigningPublicKey olarak tanımlanır. Key Certificate mevcut olduğunda, önceki 384 byte aşağıdaki gibi yeniden tanımlanır:
  • Crypto Public Key’in tamamı veya ilk kısmı

  • İki anahtarın toplam uzunluğu 384 bayttan azsa rastgele dolgu

  • İmza Public Key’inin tamamı veya ilk kısmı

Crypto Public Key başlangıçta hizalanır ve Signing Public Key sonunda hizalanır. Dolgu (varsa) ortadadır. Sertifikalardaki başlangıç anahtar verisi, dolgu ve fazla anahtar verisi bölümlerinin uzunlukları ve sınırları açıkça belirtilmez, ancak belirtilen anahtar türlerinin uzunluklarından türetilir. Crypto ve Signing Public Key’lerin toplam uzunlukları 384 baytı aşarsa, geri kalanı Key Certificate’te yer alacaktır. Crypto Public Key uzunluğu 256 bayt değilse, iki anahtar arasındaki sınırı belirleme yöntemi bu belgenin gelecekteki bir revizyonunda belirtilecektir.

Belirtilen ElGamal Crypto Public Key ve Signing Public Key türünü kullanan örnek düzenler:

Signing Key TypePadding LengthExcess Signing Key Data in Cert
DSA_SHA100
ECDSA_SHA256_P256640
ECDSA_SHA384_P384320
ECDSA_SHA512_P52104
RSA_SHA256_20480128
RSA_SHA384_30720256
RSA_SHA512_40960384
EdDSA_SHA512_Ed25519960
EdDSA_SHA512_Ed25519ph960
JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/Certificate.html

Notlar

  • Uygulayıcıların Key Certificate’larda fazla veri bulunmasını yasaklaması tavsiye edilir. Her sertifika türü için uygun uzunluk zorlanmalıdır.

  • 0,0 (ElGamal,DSA_SHA1) türlerindeki bir KEY sertifikası izin veriliyor ancak önerilmiyor. İyi test edilmemiştir ve bazı uygulamalarda sorunlara neden olabilir. (ElGamal,DSA_SHA1) Destination veya RouterIdentity’nin kanonik temsilinde KEY sertifikası kullanmaktan 4 bayt daha kısa olacak bir NULL sertifikası kullanın.

Eşleme

Açıklama

Bir anahtar/değer eşlemeleri veya özellikler kümesi

İçindekiler

2-byte boyutunda Integer ardından String=String; çiftleri serisi.

UYARI: Mapping kullanımlarının çoğu imzalı yapılarda olup, Mapping girdilerinin anahtar değerine göre sıralanması gerekir, böylece imza değiştirilemez hale gelir. Anahtar değerine göre sıralama yapılmaması imza hatalarına neden olacaktır!

+----+----+----+----+----+----+----+----+
|  size   | key_string (len + data)| =  |
+----+----+----+----+----+----+----+----+
| val_string (len + data)     | ;  | ...
+----+----+----+----+----+----+----+
size :: `Integer`
        length -> 2 bytes
        Total number of bytes that follow

key_string :: `String`
              A string (one byte length followed by UTF-8 encoded characters)

= :: A single byte containing '='

val_string :: `String`
              A string (one byte length followed by UTF-8 encoded characters)

; :: A single byte containing ';'

Notlar

  • Kodlama optimal değil - ya ‘=’ ve ‘;’ karakterlerine ya da string uzunluklarına ihtiyacımız var, ikisine birden değil

  • Bazı belgelerde dizgelerin ‘=’ veya ‘;’ karakterlerini içeremeyeceği belirtilse de bu kodlama bunları destekler

  • String’ler UTF-8 olarak tanımlanmıştır ancak mevcut uygulamada I2CP UTF-8 kullanır fakat I2NP kullanmaz. Örneğin, bir I2NP Database Store Message içindeki RouterInfo seçenekleri eşlemesindeki UTF-8 string’ler bozulacaktır.

  • Kodlama duplicate anahtarlara izin verir, ancak eşlemenin imzalandığı herhangi bir kullanımda, duplicate’lar imza hatasına neden olabilir.

  • I2NP mesajlarında bulunan eşlemeler (örneğin RouterAddress veya RouterInfo’da) imzanın değişmez olması için anahtara göre sıralanmalıdır. Yinelenen anahtarlara izin verilmez.

  • Bir I2CP SessionConfig içinde bulunan eşlemeler, imzanın değişmez olması için anahtar bazında sıralanmış olmalıdır. Yinelenen anahtarlara izin verilmez.

  • Sıralama yöntemi, karakterlerin Unicode değerlerini kullanarak Java String.compareTo() metodunda olduğu gibi tanımlanır.

  • Uygulamaya bağlı olmakla birlikte, anahtarlar ve değerler genellikle büyük/küçük harf duyarlıdır.

  • Anahtar ve değer dizesi uzunluk limitleri her biri için 255 bayt (karakter değil) artı uzunluk baytıdır. Uzunluk baytı 0 olabilir.

  • Toplam uzunluk sınırı 65535 bayt artı 2 baytlık boyut alanı, yani toplamda 65537’dir.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/DataHelper.html

Ortak yapı spesifikasyonu

KeysAndCert

Açıklama

Bir şifreleme public key’i, bir imzalama public key’i ve RouterIdentity ya da Destination olarak kullanılan bir sertifika.

İçindekiler

Bir PublicKey ardından bir SigningPublicKey ve sonra bir Certificate .

public_keyPublicKey (partial or full), 256 bytes or as specified in key cert
padding (optional)random data, pub + pad + sig == 384 bytes
signing_keySigningPublicKey (partial or full), 128 bytes or as specified
certificateCertificate, >= 3 bytes
View original ASCII diagram
+----+----+----+----+----+----+----+----+
| public_key                            |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| padding (optional)                    |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| signing_key                           |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| certificate                           |
+----+----+----+-/

public_key :: `PublicKey` (partial or full)
              length -> 256 bytes or as specified in key certificate

padding :: random data
           length -> 0 bytes or as specified in key certificate
           public_key length + padding length + signing_key length == 384 bytes

signing__key :: `SigningPublicKey` (partial or full)
                length -> 128 bytes or as specified in key certificate

certificate :: `Certificate`
               length -> >= 3 bytes

total length: 387+ bytes
#### Dolgu Oluşturma Yönergeleri

Bu kılavuzlar Öneri 161’de önerilmiş ve API sürüm 0.9.57’de uygulanmıştır. Bu kılavuzlar 0.6 (2005) sürümünden itibaren tüm sürümlerle geriye dönük uyumludur. Geçmiş bilgi ve daha fazla ayrıntı için Öneri 161’e bakınız.

ElGamal + DSA-SHA1 dışında şu anda kullanılan herhangi bir anahtar türü kombinasyonu için dolgu mevcut olacaktır. Ayrıca, hedefler için 256-bayt’lık genel anahtar alanı sürüm 0.6’dan (2005) beri kullanılmamaktadır.

Uygulayıcılar, Destination genel anahtarları ve Destination ile Router Identity dolgusu için rastgele veri üretirken, çeşitli I2P protokollerinde sıkıştırılabilir olmasını sağlamalı, güvenliği koruyarak Base 64 temsillerinin bozuk veya güvensiz görünmesini önlemelidir. Bu yaklaşım, dolgu alanlarını kaldırmanın faydalarının çoğunu disruptif protokol değişiklikleri olmadan sağlar.

Kesin olarak konuşmak gerekirse, tek başına 32-byte’lık imzalama public key’i (hem Destination’larda hem de Router Identity’lerde) ve 32-byte’lık şifreleme public key’i (sadece Router Identity’lerde) bu yapıların SHA-256 hash’lerinin kriptografik olarak güçlü olması ve network database DHT’sinde rastgele dağıtılması için gerekli tüm entropi’yi sağlayan rastgele bir sayıdır.

Ancak, aşırı ihtiyatlı olmak adına, ElG public key alanında ve padding’de minimum 32 bayt rastgele veri kullanılmasını öneriyoruz. Ayrıca, alanların hepsi sıfır olsaydı, Base 64 hedefleri uzun AAAA karakter dizileri içerecekti ve bu da kullanıcılarda alarm veya karışıklığa neden olabilirdi.

Tam KeysAndCert yapısının I2NP Database Store Message, Streaming SYN, SSU2 handshake ve yanıtlanabilir Datagrams gibi I2P protokollerinde yüksek oranda sıkıştırılabilir olması için gerektiği kadar 32 baytlık rastgele veriyi tekrarlayın.

Örnekler:

  • X25519 şifreleme türü ve Ed25519 imza türüne sahip bir Router Identity, rastgele verinin 10 kopyasını (320 bayt) içerecektir ve sıkıştırıldığında yaklaşık 288 bayt tasarruf sağlayacaktır.

  • Ed25519 imza türüne sahip bir Destination, rastgele verinin 11 kopyasını (352 bayt) içerecek ve sıkıştırıldığında yaklaşık 320 bayt tasarruf sağlayacaktır.

Uygulamalar, elbette, tam 387+ bayt yapısını saklamalıdır çünkü yapının SHA-256 hash’i tüm içeriği kapsar.

Notlar

  • Bunların her zaman 387 bayt olduğunu varsaymayın! Bunlar 387 bayt artı 385-386 baytlarında belirtilen sertifika uzunluğudur ve bu uzunluk sıfırdan farklı olabilir.

  • 0.9.12 sürümünden itibaren, sertifika bir Key Certificate ise, anahtar alanlarının sınırları değişebilir. Ayrıntılar için yukarıdaki Key Certificate bölümüne bakın.

  • Crypto Public Key başlangıçta hizalanır ve Signing Public Key sonunda hizalanır. Dolgu (varsa) ortadadır.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/KeysAndCert.html

RouterIdentity

Açıklama

Belirli bir router’ı benzersiz şekilde tanımlamanın yolunu belirler

İçindekiler

KeysAndCert ile aynı.

Padding alanı için rastgele veri üretme konusunda yönergeler için KeysAndCert bölümüne bakın.

Notlar

  • RouterIdentity için sertifika 0.9.12 sürümüne kadar her zaman NULL idi.

  • Bunların her zaman 387 bayt olduğunu varsaymayın! Bunlar 387 bayt artı 385-386 baytlarında belirtilen sertifika uzunluğudur ve bu uzunluk sıfır olmayabilir.

  • 0.9.12 sürümü itibariyle, eğer sertifika bir Key Certificate ise, anahtar alanlarının sınırları değişebilir. Ayrıntılar için yukarıdaki Key Certificate bölümüne bakın.

  • Crypto Public Key başlangıçta hizalanır ve Signing Public Key sonunda hizalanır. Dolgu (varsa) ortadadır.

  • Key certificate (anahtar sertifikası) ve ECIES_X25519 public key içeren RouterIdentity’ler 0.9.48 sürümünden itibaren desteklenmektedir. Bundan önce, tüm RouterIdentity’ler ElGamal idi.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/router/RouterIdentity.html

Hedef

Açıklama

Bir Destination, mesajların güvenli teslimat için yönlendirilebileceği belirli bir uç noktayı tanımlar.

İçindekiler

KeysAndCert ile aynıdır, ancak public key hiçbir zaman kullanılmaz ve geçerli bir ElGamal Public Key yerine rastgele veri içerebilir.

Public key ve padding alanları için rastgele veri üretme yönergeleri için KeysAndCert bölümüne bakın.

Notlar

  • Hedefin public key’i, 0.6 sürümünde (2005) devre dışı bırakılan eski i2cp-to-i2cp şifrelemesi için kullanılıyordu, şu anda kullanımdan kaldırılan LeaseSet şifrelemesi için IV dışında kullanılmamaktadır. Bunun yerine LeaseSet içindeki public key kullanılır.

  • Bunların her zaman 387 bayt olduğunu varsaymayın! Bu değerler 387 bayt artı 385-386 baytlarında belirtilen sertifika uzunluğudur ve bu uzunluk sıfır olmayabilir.

  • Sürüm 0.9.12 itibariyle, sertifika bir Key Certificate ise, anahtar alanlarının sınırları değişebilir. Ayrıntılar için yukarıdaki Key Certificate bölümüne bakın.

  • Crypto Public Key başlangıçta hizalanır ve Signing Public Key sonunda hizalanır. Dolgu (varsa) ortadadır.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/Destination.html

Lease

Açıklama

Belirli bir tunnel’ın bir Destination ‘ı hedefleyen mesajları almak için yetkilendirmesini tanımlar.

İçindekiler

Gateway router’ın RouterIdentity ‘sinin SHA256 Hash ‘i, ardından TunnelId ve son olarak bitiş Date ‘i.

tunnel_gwHash of the RouterIdentity of the tunnel gateway, 32 bytes
tunnel_idTunnelId, 4 bytes
end_dateDate, 8 bytes
View original ASCII diagram
+----+----+----+----+----+----+----+----+
| tunnel_gw                             |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+
|     tunnel_id     |      end_date
+----+----+----+----+----+----+----+----+
                    |
+----+----+----+----+

tunnel_gw :: Hash of the `RouterIdentity` of the tunnel gateway
             length -> 32 bytes

tunnel_id :: `TunnelId`
             length -> 4 bytes

end_date :: `Date`
            length -> 8 bytes
JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/Lease.html

LeaseSet

Açıklama

Belirli bir Destination için şu anda yetkilendirilmiş tüm Lease ’leri, garlic mesajlarının şifrelenebileceği PublicKey ‘i ve ardından yapının bu belirli sürümünü iptal etmek için kullanılabilecek SigningPublicKey ‘i içerir. LeaseSet, ağ veritabanında saklanan iki yapıdan biridir (diğeri RouterInfo ‘dur) ve içerdiği Destination ‘ın SHA256’sı altında anahtarlanır.

İçindekiler

Destination , ardından şifreleme için bir PublicKey , sonra LeaseSet’in bu sürümünü iptal etmek için kullanılabilecek bir SigningPublicKey , ardından kümede kaç tane Lease yapısı olduğunu belirten 1 byte’lık bir Integer , bunu takip eden gerçek Lease yapıları ve son olarak Destination ‘ın SigningPrivateKey ‘i ile imzalanmış önceki byte’ların Signature ‘ı.

destinationDestination, >= 387+ bytes
encryption_keyPublicKey, 256 bytes
signing_keySigningPublicKey, 128 bytes or as specified in destination's key cert
numInteger, 1 byte, number of leases (0-16)
Lease 0Lease, 44 bytes
Lease 1Lease, 44 bytes
Lease ($num-1)Lease, 44 bytes
signatureSignature, 40 bytes or as specified in destination's key cert
View original ASCII diagram
+----+----+----+----+----+----+----+----+
| destination                           |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| encryption_key                        |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| signing_key                           |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| num| Lease 0                          |
+----+                                  +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| Lease 1                               |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| Lease ($num-1)                        |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| signature                             |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+

destination :: `Destination`
               length -> >= 387+ bytes

encryption_key :: `PublicKey`
                  length -> 256 bytes

signing_key :: `SigningPublicKey`
               length -> 128 bytes or as specified in destination's key
                         certificate

num :: `Integer`
       length -> 1 byte
       Number of leases to follow
       value: 0 <= num <= 16

leases :: [`Lease`]
          length -> $num*44 bytes

signature :: `Signature`
             length -> 40 bytes or as specified in destination's key
                       certificate
#### Notlar
  • Hedefin genel anahtarı, sürüm 0.6’da devre dışı bırakılan eski I2CP-to-I2CP şifrelemesi için kullanılıyordu, şu anda kullanılmıyor.

  • Şifreleme anahtarı uçtan uca ElGamal/AES+SessionTag şifrelemesi ELGAMAL-AES için kullanılır. Şu anda her router başlangıcında yeniden oluşturulur, kalıcı değildir.

  • İmza, hedefin imzalama genel anahtarı kullanılarak doğrulanabilir.

  • Sıfır Lease içeren bir LeaseSet’e izin verilir ancak kullanılmaz. Bu, uygulanmamış olan LeaseSet iptali için tasarlanmıştı. Tüm LeaseSet2 varyantları en az bir Lease gerektirir.

  • signing_key şu anda kullanılmamaktadır. LeaseSet iptal işlemi için tasarlanmıştı ancak bu özellik henüz uygulanmamıştır. Şu anda her router başlatılışında yeniden oluşturulur ve kalıcı değildir. Signing key türü her zaman hedefin signing key türüyle aynıdır.

  • Tüm Lease’lerin en erken sona erme tarihi, LeaseSet’in zaman damgası veya sürümü olarak kabul edilir. Router’lar genellikle bir LeaseSet’in saklanmasını, mevcut olandan “daha yeni” olmadığı sürece kabul etmezler. En eski Lease’in önceki LeaseSet’teki en eski Lease ile aynı olduğu yeni bir LeaseSet yayınlarken dikkatli olun. Yayınlayan router bu durumda genellikle en eski Lease’in sona erme süresini en az 1 ms artırmalıdır.

  • 0.9.7 sürümünden önce, kaynak router tarafından gönderilen bir DatabaseStore Mesajına dahil edildiğinde, router tüm yayınlanan lease’lerin sona erme sürelerini aynı değere, yani en erken lease’in süresine ayarlıyordu. 0.9.7 sürümünden itibaren, router her lease için gerçek lease sona erme süresini yayınlar. Bu bir uygulama detayıdır ve yapı spesifikasyonunun bir parçası değildir.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/LeaseSet.html

Lease2

Açıklama

Belirli bir tunnel’ın bir Destination ‘ı hedefleyen mesajları alması için yetkilendirmeyi tanımlar. Lease ile aynıdır ancak 4-byte end_date içerir. LeaseSet2 tarafından kullanılır. 0.9.38 sürümünden itibaren desteklenir; daha fazla bilgi için proposal 123’e bakın.

İçindekiler

Gateway router’ın RouterIdentity ‘sinin SHA256 Hash ‘i, ardından TunnelId ve son olarak 4 byte’lık bitiş tarihi.

tunnel_gwHash of the RouterIdentity of the tunnel gateway, 32 bytes
tunnel_idTunnelId, 4 bytes
end_date4 byte date, seconds since epoch, rolls over in 2106
View original ASCII diagram
+----+----+----+----+----+----+----+----+
| tunnel_gw                             |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+
|     tunnel_id     |      end_date     |
+----+----+----+----+----+----+----+----+

tunnel_gw :: Hash of the `RouterIdentity` of the tunnel gateway
             length -> 32 bytes

tunnel_id :: `TunnelId`
             length -> 4 bytes

end_date :: 4 byte date
            length -> 4 bytes
            Seconds since the epoch, rolls over in 2106.
#### Notlar
  • Toplam boyut: 40 bayt

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/Lease2.html

OfflineSignature

Açıklama

Bu, LeaseSet2Header ‘ın isteğe bağlı bir parçasıdır. Ayrıca streaming ve I2CP’de de kullanılır. 0.9.38 sürümünden itibaren desteklenir; daha fazla bilgi için proposal 123’e bakın.

İçindekiler

Bir son kullanma tarihi, bir sigtype ve geçici SigningPublicKey ile bir Signature içerir.

expires4 byte date, seconds since epoch, rolls over in 2106
sigtype2 byte type of the transient_public_key
transient_public_keySigningPublicKey, as inferred from sigtype
signatureSignature, as inferred from sigtype of the Destination's key
View original ASCII diagram
+----+----+----+----+----+----+----+----+
|     expires       | sigtype |         |
+----+----+----+----+----+----+         +
|       transient_public_key            |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|           signature                   |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+

expires :: 4 byte date
           length -> 4 bytes
           Seconds since the epoch, rolls over in 2106.

sigtype :: 2 byte type of the transient_public_key
           length -> 2 bytes

transient_public_key :: `SigningPublicKey`
                        length -> As inferred from the sigtype

signature :: `Signature`
             length -> As inferred from the sigtype of the signing public key
                       in the `Destination` that preceded this offline signature.
             Signature of expires timestamp, transient sig type, and public key,
             by the destination public key.
#### Notlar
  • Bu bölüm çevrimdışı oluşturulabilir ve oluşturulmalıdır.

LeaseSet2Header

Açıklama

Bu, LeaseSet2 ve MetaLeaseSet ‘in ortak kısmıdır. 0.9.38 sürümünden itibaren desteklenmektedir; daha fazla bilgi için 123 numaralı öneriyi inceleyin.

İçindekiler

Destination , iki zaman damgası ve isteğe bağlı bir OfflineSignature içerir.

destinationDestination, >= 387+ bytes
published4 byte date, seconds since epoch, rolls over in 2106
expires2 byte time, offset from published in seconds, 18.2 hours max
flags
offline_signatureOfflineSignature, varies, optional (present if flags bit 0 set
View original ASCII diagram
+----+----+----+----+----+----+----+----+
| destination                           |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|     published     | expires |  flags  |
+----+----+----+----+----+----+----+----+
| offline_signature (optional)          |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+

destination :: `Destination`
               length -> >= 387+ bytes

published :: 4 byte date
             length -> 4 bytes
             Seconds since the epoch, rolls over in 2106.

expires :: 2 byte time
           length -> 2 bytes
           Offset from published timestamp in seconds, 18.2 hours max

flags :: 2 bytes
  Bit order: 15 14 ... 3 2 1 0
  Bit 0: If 0, no offline keys; if 1, offline keys
  Bit 1: If 0, a standard published leaseset.
         If 1, an unpublished leaseset.
  Bit 2: If 0, a standard published leaseset.
         If 1, this unencrypted leaseset will be blinded and encrypted when published.
  Bits 15-3: set to 0 for compatibility with future uses

offline_signature :: `OfflineSignature`
                     length -> varies
                     Optional, only present if bit 0 is set in the flags.
#### Notlar
  • Bayraklar (2 bayt):

    • Bit 0: Ayarlanmışsa, çevrimdışı anahtarlar mevcut (OfflineSignature bölümüne bakın)
    • Bit 1: Ayarlanmışsa, bu yayınlanmamış bir leaseset
    • Bit 2: Ayarlanmışsa, bu köreltilmiş bir leaseset
    • Bit 15-3: Ayrılmış, 0’a ayarlanır
  • Toplam boyut: minimum 395 bayt

  • Maksimum gerçek son kullanma süresi LeaseSet2 için yaklaşık 660 (11 dakika) ve MetaLeaseSet için 65535’tir (tam 18,2 saat).

  • LeaseSet (1) bir ‘published’ alanına sahip değildi, bu nedenle sürüm kontrolü için en erken lease’in aranması gerekiyordu. LeaseSet2 bir saniyelik çözünürlüğe sahip bir ‘published’ alanı ekler. Router’lar yeni leaseset’leri floodfill’lere gönderme hızını saniyede bir defadan çok daha yavaş bir hızla sınırlamalıdır (her destination için). Bu uygulanmazsa, kod her yeni leaseset’in ‘published’ zamanının bir öncekinden en az bir saniye sonra olduğundan emin olmalıdır, aksi halde floodill’ler yeni leaseset’i saklamaz veya flood etmez.

LeaseSet2

Açıklama

Tip 3 I2NP DatabaseStore mesajında bulunur. 0.9.38 sürümünden itibaren desteklenir; daha fazla bilgi için 123 numaralı öneriyi inceleyin.

Belirli bir Destination için şu anda yetkilendirilmiş tüm Lease2 ’leri ve garlic mesajlarının şifrelenebileceği PublicKey ‘i içerir. LeaseSet, ağ veritabanında saklanan iki yapıdan biridir (diğeri RouterInfo ), ve içerdiği Destination ‘ın SHA256 değeri altında anahtarlanır.

İçindekiler

LeaseSet2Header , ardından seçenekler, sonra şifreleme için bir veya daha fazla PublicKey , kümede kaç Lease2 yapısı bulunduğunu belirten Integer , ardından gerçek Lease2 yapıları ve son olarak önceki baytların Destination ‘ın SigningPrivateKey veya geçici anahtarı tarafından imzalandığı bir Signature .

ls2_headerLeaseSet2Header, varies
optionsMapping, varies, 2 bytes minimum
numkInteger, 1 byte, number of encryption keys (1 <= numk <= max TBD)
keytype0Encryption type of PublicKey, 2 bytes
keylen0Length of PublicKey, 2 bytes
encryption_key_0PublicKey, keylen bytes
keytypenEncryption type of PublicKey, 2 bytes
keylennLength of PublicKey, 2 bytes
encryption_key_nPublicKey, keylen bytes
numInteger, 1 byte, number of Lease2s (0-16)
Lease2 0Lease2, 40 bytes
Lease2 ($num-1)Lease2, 40 bytes
signatureSignature, 40 bytes or as specified in destination's key cert
View original ASCII diagram
+----+----+----+----+----+----+----+----+
|         ls2_header                    |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|          options                      |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|numk| keytype0| keylen0 |              |
+----+----+----+----+----+              +
|          encryption_key_0             |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| keytypen| keylenn |                   |
+----+----+----+----+                   +
|          encryption_key_n             |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| num| Lease2 0                         |
+----+                                  +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| Lease2($num-1)                        |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| signature                             |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+

ls2header :: `LeaseSet2Header`
             length -> varies

options :: `Mapping`
           length -> varies, 2 bytes minimum

numk :: `Integer`
        length -> 1 byte
        Number of key types, key lengths, and `PublicKey`s to follow
        value: 1 <= numk <= max TBD

keytype :: The encryption type of the `PublicKey` to follow.
           length -> 2 bytes

keylen :: The length of the `PublicKey` to follow.
          Must match the specified length of the encryption type.
          length -> 2 bytes

encryption_key :: `PublicKey`
                  length -> keylen bytes

num :: `Integer`
       length -> 1 byte
       Number of `Lease2`s to follow
       value: 0 <= num <= 16

leases :: [`Lease2`]
          length -> $num*40 bytes

signature :: `Signature`
             length -> 40 bytes or as specified in destination's key
                       certificate, or by the sigtype of the transient public key,
                       if present in the header
#### Şifreleme Anahtarı Tercihi

Yayınlanmış (sunucu) leaseSet’ler için, şifreleme anahtarları sunucu tercihine göre sıralanır, en tercih edilen ilk sırada yer alır. İstemciler birden fazla şifreleme türünü destekliyorsa, sunucu tercihini gözetmeleri ve sunucuya bağlanmak için destekledikleri ilk türü şifreleme yöntemi olarak seçmeleri önerilir. Genel olarak, daha yeni (daha yüksek numaralı) anahtar türleri daha güvenli veya verimlidir ve tercih edilir, bu nedenle anahtarlar anahtar türünün ters sırasına göre listelenmelidir.

Ancak, istemciler uygulama-bağımlı olarak bunun yerine kendi tercihlerine göre seçim yapabilir veya “birleşik” tercihi belirlemek için bazı yöntemler kullanabilir. Bu, bir yapılandırma seçeneği olarak veya hata ayıklama için yararlı olabilir.

Yayınlanmamış (istemci) leaseset’lerdeki anahtar sırası etkili bir şekilde önemli değildir, çünkü yayınlanmamış istemcilere genellikle bağlantı girişiminde bulunulmaz. Bu sıra, yukarıda açıklandığı gibi birleşik bir tercihi belirlemek için kullanılmadığı sürece.

Seçenekler

API 0.9.66 itibariyle, servis kaydı seçenekleri için standart bir format tanımlanmıştır. Ayrıntılar için öneri 167’ye bakınız. Farklı bir format kullanan servis kayıtları dışındaki seçenekler gelecekte tanımlanabilir.

LS2 seçenekleri anahtar değerine göre sıralanmalıdır, böylece imza değişmez kalır.

Servis kaydı seçenekleri aşağıdaki gibi tanımlanır:

  • serviceoption := optionkey optionvalue
  • optionkey := _service._proto
  • service := İstenen hizmetin sembolik adı. Küçük harf olmalıdır. Örnek: “smtp”. İzin verilen karakterler [a-z0-9-] ve ‘-’ ile başlayamaz veya bitemez. REGISTRY veya Linux /etc/services’den standart tanımlayıcılar orada tanımlanmışsa kullanılmalıdır.
  • proto := İstenen hizmetin aktarım protokolü. Küçük harf olmalıdır, “tcp” veya “udp” olabilir. “tcp” akış demektir ve “udp” yanıtlanabilir datagram’lar demektir. Ham datagram’lar ve datagram2 için protokol göstergeleri daha sonra tanımlanabilir. İzin verilen karakterler [a-z0-9-] ve ‘-’ ile başlayamaz veya bitemez.
  • optionvalue := self | srvrecord[,srvrecord]*
  • self := “0” ttl port [appoptions]
  • srvrecord := “1” ttl priority weight port target [appoptions]
  • ttl := yaşam süresi, saniye cinsinden tamsayı. Pozitif tamsayı. Örnek: “86400”. En az 86400 (bir gün) önerilir, ayrıntılar için aşağıdaki Öneriler bölümüne bakın.
  • priority := Hedef ana bilgisayarın önceliği, düşük değer daha tercih edilir demektir. Negatif olmayan tamsayı. Örnek: “0” Sadece birden fazla kayıt varsa yararlıdır, ancak tek kayıt olsa bile gereklidir.
  • weight := Aynı önceliğe sahip kayıtlar için göreceli ağırlık. Yüksek değer seçilme şansının daha fazla olması demektir. Negatif olmayan tamsayı. Örnek: “0” Sadece birden fazla kayıt varsa yararlıdır, ancak tek kayıt olsa bile gereklidir.
  • port := Hizmetin bulunacağı I2CP portu. Negatif olmayan tamsayı. Örnek: “25” Port 0 desteklenir ancak önerilmez.
  • target := Hizmeti sağlayan hedefin ana bilgisayar adı veya b32’si. NAMING bölümündeki gibi geçerli bir ana bilgisayar adı. Küçük harf olmalıdır. Örnek: “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b32.i2p” veya “example.i2p”. Ana bilgisayar adı “iyi bilinen”, yani resmi veya varsayılan adres defterlerinde olmadığı sürece b32 önerilir.
  • appoptions := uygulamaya özgü keyfi metin, " " veya “,” içeremez. Kodlama UTF-8’dir.

Örnekler:

LS2’de aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b32.i2p için, bir SMTP sunucusuna işaret ederek:

“_smtp._tcp” “1 86400 0 0 25 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b32.i2p”

LS2’de aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b32.i2p için, iki SMTP sunucusuna işaret eden:

“_smtp._tcp” “1 86400 0 0 25 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b32.i2p,86400 1 0 25 cccccccccccccccccccccccccccccccccccccccccccc.b32.i2p”

LS2’de bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b32.i2p için, kendisini bir SMTP sunucusu olarak gösteren:

“_smtp._tcp” “0 999999 25”

Notlar

  • Hedefin public key’i, 0.6 sürümünde devre dışı bırakılan eski I2CP-to-I2CP şifrelemesi için kullanılıyordu, şu anda kullanılmıyor.

  • Şifreleme anahtarları uçtan uca ElGamal/AES+SessionTag şifrelemesi ELGAMAL-AES (tip 0) veya diğer uçtan uca şifreleme şemaları için kullanılır. ECIES ve 145 ve 156 numaralı tekliflere bakın. Her router başlangıcında yeniden oluşturulabilir veya kalıcı olabilirler. X25519 (tip 4, ECIES bakın) 0.9.44 sürümü itibariyle desteklenmektedir.

  • İmza, yukarıdaki verinin ÖNCESİNE DatabaseStore türünü içeren tek bayt (3) EKLENMİŞ haliyle yapılır.

  • İmza, hedefin imzalama genel anahtarı veya leaseset2 başlığında çevrimdışı bir imza bulunuyorsa geçici imzalama genel anahtarı kullanılarak doğrulanabilir.

  • Her anahtar için anahtar uzunluğu sağlanır, böylece floodfill’ler ve istemciler tüm şifreleme türleri bilinmese veya desteklenmese bile yapıyı ayrıştırabilir.

  • LeaseSet2Header içindeki ‘published’ alanıyla ilgili nota bakın

  • Seçenekler eşlemesi, boyut birden büyükse, anahtar tarafından sıralanmalıdır, böylece imza değişmez olur.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/LeaseSet2.html

MetaLease

Açıklama

Belirli bir tunnel’ın bir Destination ‘ı hedefleyen mesajları alması için yetkilendirmeyi tanımlar. Lease2 ile aynıdır ancak tunnel id yerine bayraklar ve maliyet içerir. MetaLeaseSet tarafından kullanılır. Tip 7 I2NP DatabaseStore mesajında bulunur. 0.9.38 sürümünden itibaren desteklenir; daha fazla bilgi için proposal 123’e bakın.

İçindekiler

Gateway router’ın RouterIdentity ‘sinin SHA256 Hash ‘i, ardından bayraklar ve maliyet, ve son olarak 4 byte’lık bitiş tarihi.

+----+----+----+----+----+----+----+----+
| tunnel_gw                             |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+
|    flags     |cost|      end_date     |
+----+----+----+----+----+----+----+----+

tunnel_gw :: Hash of the `RouterIdentity` of the tunnel gateway,
             or the hash of another `MetaLeaseSet`.
             length -> 32 bytes

flags :: 3 bytes of flags
         Bit order: 23 22 ... 3 2 1 0
         Bits 3-0: Type of the entry.
         If 0, unknown.
         If 1, a `LeaseSet`.
         If 3, a `LeaseSet2`.
         If 5, a `MetaLeaseSet`.
         Bits 23-4: set to 0 for compatibility with future uses
         length -> 3 bytes

cost :: 1 byte, 0-255. Lower value is higher priority.
        length -> 1 byte

end_date :: 4 byte date
            length -> 4 bytes
            Seconds since the epoch, rolls over in 2106.

Notlar

  • Toplam boyut: 40 bayt

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/MetaLease.html

MetaLeaseSet

Açıklama

Tip 7’li bir I2NP DatabaseStore mesajında bulunur. 0.9.38 sürümünden itibaren tanımlanmıştır; 0.9.40 sürümünden itibaren çalışması planlanmıştır; daha fazla bilgi için 123 numaralı öneriye bakınız.

Belirli bir Destination için şu anda yetkilendirilmiş tüm MetaLease ve garlic mesajlarının şifrelenebileceği PublicKey içerir. LeaseSet, ağ veritabanında saklanan iki yapıdan biridir (diğeri RouterInfo olan) ve içerdiği Destination ‘ın SHA256’sı altında anahtarlanır.

İçindekiler

LeaseSet2Header , ardından seçenekler, sette kaç tane Lease2 yapısı olduğunu belirten bir Integer , ardından gerçek Lease2 yapıları ve son olarak önceki baytların Destination ‘ın SigningPrivateKey ‘i veya geçici anahtar tarafından imzalanmış Signature ‘ı.

+----+----+----+----+----+----+----+----+
|         ls2_header                    |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|          options                      |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| num| MetaLease 0                      |
+----+                                  +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| MetaLease($num-1)                     |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|numr|                                  |
+----+                                  +
|          revocation_0                 |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|          revocation_n                 |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| signature                             |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+

ls2header :: `LeaseSet2Header`
             length -> varies

options :: `Mapping`
           length -> varies, 2 bytes minimum

num :: `Integer`
        length -> 1 byte
        Number of `MetaLease`s to follow
        value: 1 <= num <= max TBD

leases :: `MetaLease`s
          length -> $numr*40 bytes

numr :: `Integer`
        length -> 1 byte
        Number of `Hash`es to follow
        value: 0 <= numr <= max TBD

revocations :: [`Hash`]
               length -> $numr*32 bytes

signature :: `Signature`
             length -> 40 bytes or as specified in destination's key
                       certificate, or by the sigtype of the transient public key,
                       if present in the header

Notlar

  • Hedefin genel anahtarı, 0.6 sürümünde devre dışı bırakılan eski I2CP-to-I2CP şifrelemesi için kullanılıyordu, şu anda kullanılmamaktadır.

  • İmza, yukarıdaki verilerin üzerinde olup, DatabaseStore türünü (7) içeren tek baytın BAŞINA EKLENMESİ ile oluşturulur.

  • İmza, hedefin imzalama genel anahtarı kullanılarak doğrulanabilir veya leaseset2 başlığında çevrimdışı bir imza bulunuyorsa geçici imzalama genel anahtarı kullanılarak doğrulanabilir.

  • LeaseSet2Header içindeki ‘published’ alanına ilişkin nota bakın

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/MetaLeaseSet.html

EncryptedLeaseSet

Açıklama

Tip 5 I2NP DatabaseStore mesajında bulunur. 0.9.38 sürümünden itibaren tanımlanmıştır; 0.9.39 sürümünden itibaren çalışmaktadır; daha fazla bilgi için öneri 123’e bakın.

Sadece blinded key ve son kullanma tarihi açık metin olarak görülebilir. Gerçek lease set şifrelidir.

İçindekiler

İki baytlık imza türü, kör edilmiş SigningPrivateKey , yayınlanma zamanı, son kullanma tarihi ve bayraklar. Ardından, iki baytlık uzunluk ve şifrelenmiş veri. Son olarak, kör edilmiş SigningPrivateKey veya geçici anahtar tarafından imzalanmış önceki baytların Signature ‘ı.

+----+----+----+----+----+----+----+----+
| sigtype |                             |
+----+----+                             +
|        blinded_public_key             |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|     published     | expires |  flags  |
+----+----+----+----+----+----+----+----+
| offline_signature (optional)          |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|  len    |                             |
+----+----+                             +
|         encrypted_data                |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| signature                             |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+

sigtype :: A two byte signature type of the public key to follow
           length -> 2 bytes

blinded_public_key :: `SigningPublicKey`
                      length -> As inferred from the sigtype

published :: 4 byte date
             length -> 4 bytes
             Seconds since the epoch, rolls over in 2106.

expires :: 2 byte time
           length -> 2 bytes
           Offset from published timestamp in seconds, 18.2 hours max

flags :: 2 bytes
  Bit order: 15 14 ... 3 2 1 0
  Bit 0: If 0, no offline keys; if 1, offline keys
  Bit 1: If 0, a standard published leaseset.
         If 1, an unpublished leaseset. Should not be flooded, published, or
         sent in response to a query. If this leaseset expires, do not query the
         netdb for a new one.
  Bits 15-2: set to 0 for compatibility with future uses

offline_signature :: `OfflineSignature`
                     length -> varies
                     Optional, only present if bit 0 is set in the flags.

len :: `Integer`
        length -> 2 bytes
        length of encrypted_data to follow
        value: 1 <= num <= max TBD

encrypted_data :: Data encrypted
                  length -> len bytes

signature :: `Signature`
             length -> As specified by the sigtype of the blinded pubic key,
                       or by the sigtype of the transient public key,
                       if present in the header

Notlar

  • Hedefin genel anahtarı, 0.6 sürümünde devre dışı bırakılan eski I2CP-to-I2CP şifrelemesi için kullanılıyordu, şu anda kullanılmıyor.

  • İmza, yukarıdaki veriler üzerindedir ve DatabaseStore türünü (5) içeren tek bayt ile BAŞINA EKLENMİŞTİR.

  • İmza, hedefin imzalama public key’i kullanılarak doğrulanabilir veya leaseset2 başlığında çevrimdışı imza bulunuyorsa geçici imzalama public key’i kullanılarak doğrulanabilir.

  • Kör etme ve şifreleme EncryptedLeaseSet içinde belirtilmiştir

  • Bu yapı LeaseSet2Header kullanmaz.

  • Maksimum gerçek sona erme süresi yaklaşık 660’tır (11 dakika), şifreli bir MetaLeaseSet olmadığı sürece.

  • Şifrelenmiş leaseSet’ler ile çevrimdışı imzaların kullanımına ilişkin notlar için 123 numaralı öneriyi inceleyin.

  • LeaseSet2Header içindeki ‘published’ alanı hakkındaki nota bakın (aynı sorun, burada LeaseSet2Header formatını kullanmasak bile)

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/EncryptedLeaseSet.html

RouterAddress

Açıklama

Bu yapı, bir router ile taşıma protokolü aracılığıyla iletişim kurma yöntemlerini tanımlar.

İçindekiler

Adresi kullanmanın göreceli maliyetini tanımlayan 1 byte Integer , burada 0 ücretsiz ve 255 pahalı anlamına gelir, ardından adresin kullanılmaması gereken son kullanma Date tarihi gelir, veya null ise adresin süresi asla dolmaz. Bundan sonra bu router adresinin kullandığı taşıma protokolünü tanımlayan bir String gelir. Son olarak, IP adresi, port numarası, e-posta adresi, URL vb. gibi bağlantıyı kurmak için gerekli tüm taşıma protokolüne özgü seçenekleri içeren bir Mapping bulunur.

+----+----+----+----+----+----+----+----+
|cost|           expiration
+----+----+----+----+----+----+----+----+
     |        transport_style           |
+----+----+----+----+-/-+----+----+----+
|                                       |
+                                       +
|               options                 |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+

cost :: `Integer`
        length -> 1 byte

        case 0 -> free
        case 255 -> expensive

expiration :: `Date` (must be all zeros, see notes below)
              length -> 8 bytes

              case null -> never expires

transport_style :: `String`
                   length -> 1-256 bytes

options :: `Mapping`

Notlar

  • Maliyet genellikle SSU için 5 veya 6, NTCP için 10 veya 11’dir.

  • Expiration şu anda kullanılmamaktadır, her zaman null’dur (tüm sıfırlar). 0.9.3 sürümünden itibaren, expiration sıfır olarak varsayılır ve saklanmaz, bu nedenle sıfır olmayan herhangi bir expiration RouterInfo imza doğrulamasında başarısız olacaktır. Expiration’ın uygulanması (veya bu byte’lar için başka bir kullanım) geriye dönük uyumsuz bir değişiklik olacaktır. Router’lar bu alanı tüm sıfırlar olarak ayarlamalıdır (MUST). 0.9.12 sürümünden itibaren, sıfır olmayan expiration alanı tekrar tanınmaktadır, ancak ağın büyük çoğunluğu bunu tanıyana kadar bu alanı kullanmak için birkaç sürüm beklemeliyiz.

  • Aşağıdaki seçenekler zorunlu olmamakla birlikte standart kabul edilir ve çoğu router adresinde bulunması beklenir: “host” (bir IPv4 veya IPv6 adresi ya da host adı) ve “port”.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/router/RouterAddress.html

RouterInfo

Açıklama

Bir router’ın ağın görmesi için yayınlamak istediği tüm verileri tanımlar. RouterInfo , ağ veritabanında saklanan iki yapıdan biridir (diğeri LeaseSet ) ve içerdiği RouterIdentity ’nin SHA256’sı altında anahtarlanır.

İçindekiler

RouterIdentity ardından girişin yayınlandığı Date

+----+----+----+----+----+----+----+----+
| router_ident                          |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| published                             |
+----+----+----+----+----+----+----+----+
|size| RouterAddress 0                  |
+----+                                  +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| RouterAddress 1                       |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
| RouterAddress ($size-1)               |
+                                       +
|                                       |
~                                       ~
~                                       ~
|                                       |
+----+----+----+----+-/-+----+----+----+
|psiz| options                          |
+----+----+----+----+-/-+----+----+----+
| signature                             |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+                                       +
|                                       |
+----+----+----+----+----+----+----+----+

router_ident :: `RouterIdentity`
                length -> >= 387+ bytes

published :: `Date`
             length -> 8 bytes

size :: `Integer`
        length -> 1 byte
        The number of `RouterAddress`es to follow, 0-255

addresses :: [`RouterAddress`]
             length -> varies

peer_size :: `Integer`
             length -> 1 byte
             The number of peer `Hash`es to follow, 0-255, unused, always zero
             value -> 0

options :: `Mapping`

signature :: `Signature`
             length -> 40 bytes or as specified in router_ident's key
                       certificate

Notlar

  • peer_size Integer değerini, o kadar router hash’inin listesi takip edebilir. Bu şu anda kullanılmamaktadır. Henüz uygulanmamış olan kısıtlı rotalar (restricted routes) için tasarlanmıştı. Belirli uygulamalar, imzanın değişmez olması için listenin sıralanmasını gerektirebilir. Bu özelliği etkinleştirmeden önce araştırılmalıdır.

  • İmza, router_ident’in imzalama genel anahtarı kullanılarak doğrulanabilir.

  • Tüm router bilgilerinde bulunması beklenen standart seçenekler için network veritabanı sayfasındaki NETDB-ROUTERINFO bölümüne bakın.

  • Çok eski router’lar, imzanın değişmez olması için adreslerin verilerinin SHA256’sına göre sıralanmasını gerektiriyordu. Bu artık gerekli değil ve geriye dönük uyumluluk için uygulanmaya değmez.

JavaDoc: http://docs.i2p-projekt.de/javadoc/net/i2p/data/router/RouterInfo.html

Teslimat Talimatları

Tunnel Message Delivery Instructions, Tunnel Message Specification TUNNEL-DELIVERY belgesinde tanımlanmıştır.

Garlic Message Delivery Instructions, I2NP Mesaj Spesifikasyonunda GARLIC-DELIVERY tanımlanmıştır.

Kaynaklar

Was this page helpful?