I2P рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рдЧрднрдЧ 15 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдЬрдм рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдпрд╛рддрд╛рдпрд╛рдд рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдерд╛, рдФрд░ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрдереНрдп рдирд╣реАрдВ рдерд╛ред рдЙрд╕ рд╕рдордп рдбреАрдкреАрдЖрдИ (рдЧрд╣рд░реЗ рдкреИрдХреЗрдЯ рдирд┐рд░реАрдХреНрд╖рдг) рдФрд░ рдпрд╛рддрд╛рдпрд╛рдд рдЕрд╡рд░реБрджреНрдз рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдордп рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрджреНрдпрдкрд┐ рдореМрдЬреВрджрд╛ I2P рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдПрдХ рдирдП рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЦрддрд░реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреАрдкреАрдЖрдИ, рдЬреЛ рдкреИрдХреЗрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд╡реАрдирддрдо рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЕрдЧреНрд░рд┐рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рд╣реИ ред рдЖрдзрд╛рд░
рд╢реЛрд░ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ SHA256 рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреАрдПрдЪ рдХреЗ рд░реВрдк рдореЗрдВ x25519 (рд╢реЛрд░ рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ)ред
рдирдИ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА
NTCP2 рдХреЗ рд▓рд┐рдП, I2P рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- x25519
- HMAC-SHA256
- Chacha20
- Poly1305
- AEAD
- Siphash
рд╕рд┐рдкрд╛рд╢ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рд╡реЗ рд╕рднреА рдУрдкрдирдПрд╕рдПрд▓ 1.1.0 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред Siphash, рдмрджрд▓реЗ рдореЗрдВ, 1.1sl рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреЛ рд╢реАрдШреНрд░ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред Opensl 1.0.2 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ OS рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, i2pd рдиреЗ i2pd рдбреЗрд╡рд▓рдкрд░реНрд╕
рдЬреЗрдл рдмреЗрдХрд░ , рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ I ps рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИред
NTCP рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, X25519 DH, AEAD / Cha20 / Poly1305 рдХреА рдЬрдЧрд╣ AES-256-CBC / Adler32, рдФрд░ Siphash рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдЭрд╛ рдХреБрдВрдЬреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдИ рд╣реИ: HMAC-SHA256 рдХреЛ рдХрдИ рдХреЙрд▓ рдХреЗ рд╕рд╛рдеред
рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рдореЗрдВ рдмрджрд▓рд╛рд╡
NTCP2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдореМрдЬреВрджрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ (рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╕рд┐рдЧреНрдиреЗрдЪрд░) рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рддреАрд╕рд░реА рдХреБрдВрдЬреА x25519 рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ рдХреБрдВрдЬреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП "s" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ RouterInfo рдПрдбреНрд░реЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрддрд╛ NTCP2 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ipv4 рдФрд░ ipv6, рддреЛ "s" рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрддреЗ рдореЗрдВ рдХреЗрд╡рд▓ "s" рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ "рд╣реЛрд╕реНрдЯ" рдФрд░ "рдкреЛрд░реНрдЯ" рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред NTCP2 рдХрд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ "v" рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдореЗрд╢рд╛ "2" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
NTCP2 рдкрддрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде "NTCP" рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди NTCP2 рдФрд░ NTCP2 рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдХреЗрд╡рд▓ NTCP2 рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ NTCP2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ I2P рдореЗрдВ, рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, i2pd рдореЗрдВ - рджреВрд╕рд░рд╛ред
рдпрджрд┐ рд╣реЛрд╕реНрдЯ рдЖрдиреЗ рд╡рд╛рд▓реЗ NTCP2 рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рди IV рдХреЗ рд╕рд╛рде "i" рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдкрд╛рд░реНрдЯрд┐рдпрд╛рдВ рдЕрд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА x25519 рдХреЗ рдЬреЛрдбрд╝реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдФрд░ рд╕реНрдереИрддрд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХреЗ рд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╕реНрдЯреЗрдЯрд┐рдХ рдХреА рдХреЛ рднреА рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ рдиреЗ рддреАрди рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛:
рд╕рддреНрд░рд╛рдиреБрдкрд╛рдд ------------------->
<- рд╕рддреНрд░рд╛рдВрдд
рд╕рддреНрд░рдХреЛрдирдлрд┐рд░рдореНрдб ----------------->
рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреБрдВрдЬреА x25519 рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ "рдЗрдирдкреБрдЯ рдХреБрдВрдЬреА рд╕рд╛рдордЧреНрд░реА" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдорд┐рдХреНрд╕рдХреЗрдИ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрдмрдХрд┐ рд╡реИрд▓реНрдпреВ рд╕реАрдХреЗ (рдЪреЗрдВрдЬрд┐рдВрдЧ рдХреА) рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдХреБрдВрдЬреА рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред ред MixKey рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдорд┐рдХреНрд╕рд░ рдХреЛрдбvoid NTCP2Establisher::MixKey (const uint8_t * inputKeyMaterial, uint8_t * derived) {
SessionRequest рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА 32-рдмрд╛рдЗрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА x25519 рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб AEAD / Chacha20 / Poly1305 16 рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ + 16 рдмрд╛рдЗрдЯ рд╣реИрд╢ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ (рдкреИрдбрд┐рдВрдЧ) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХреА рд▓рдВрдмрд╛рдИ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред SessionConfirmed рд╕рдВрджреЗрд╢ рдХреЗ рджреВрд╕рд░реЗ рдЫрдорд╛рд╣реА рдХреА рд▓рдВрдмрд╛рдИ рднреА рд╡рд╣рд╛рдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИред рдмреНрд▓реЙрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЕрд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА рдФрд░ рд╕рд░реНрд╡рд░ рдХреА рд╕реНрдерд┐рд░ рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред MixKey рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ ck рдХреЛ SHA256 ("Noise_XKaesobfse + hs2 + hs3_25519_ChaChaPoly_SHA256") рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА x25519 рдХреЗ 32 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдбреАрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдИрдПрд╕ -256-рд╕реАрдмреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рд╕рд░реНрд╡рд░ рдХреЗ рдкрддреЗ рдХрд╛ рд╣реИрд╢ рд╣реИ, рдФрд░ IV рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рдореЗрдВ рдкрддреЗ рдХреЗ "i" рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ
SessionCreated SessionRequest рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдХреБрдВрдЬреА рдХреА рдЧрдгрдирд╛ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреА рдЕрд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ IV рдХрд╛ рдЙрдкрдпреЛрдЧ SessionRequest рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди / рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд╛рдж рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди / рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП IV рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
SessionConfirmed рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕реНрдерд┐рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ RouterInfoред рдкрд┐рдЫрд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ AEAD / Chaha20 / Poly1305 рдХреЗ рд╕рд╛рде SessionCreated рдХреЗ рд╕рдорд╛рди рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреА рд▓рдВрдмрд╛рдИ 32 рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди 48 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рджреВрд╕рд░рд╛ рднрд╛рдЧ AEAD / Chaha20 / Poly1305 рдХреЗ рд╕рд╛рде рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирдИ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕рдХреА рдЧрдгрдирд╛ рд╕рд░реНрд╡рд░ рдХреА рдЕрд╕реНрдерд╛рдпреА рдХреБрдВрдЬреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕реНрдЯреИрдЯрд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рдХреА рд▓рдВрдмрд╛рдИ рдЕрд▓рдЧ рд╣реИред
рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреАрдврд╝реА
рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рд╣реИрд╢ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рднреА рдЪреЗрдХ рд╕рдлрд▓ рд░рд╣реЗ, рддреЛ рджреЛрдиреЛрдВ рддрд░рдл рдЕрдВрддрд┐рдо рдорд┐рдХреНрд╕рдХреЗ рдХреЗ рдмрд╛рдж рдПрдХ рд╣реА ck рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рддреАрди рд╕реЗрдЯ <k, sipk, sipiv> рдкреНрд░рддреНрдпреЗрдХ рдкрдХреНрд╖ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреЗ, рдЬрд╣рд╛рдБ k рдХреА AEAD рдХреБрдВрдЬреА рд╣реИ / Chaha20 / Poly1305, sipk Siphash рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, sipiv Siphash рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ IV рдорд╛рди рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рдж рдмрджрд▓рддрд╛ рд╣реИред
рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХреЛрдб void NTCP2Session::KeyDerivationFunctionDataPhase () { uint8_t tempKey[32]; unsigned int len;
Sipkeys рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ 16 рдмрд╛рдЗрдЯреНрд╕ Siphash рдХреБрдВрдЬреА рд╣реИрдВ, рджреВрд╕рд░реЗ 8 рдмрд╛рдЗрдЯреНрд╕ IV рд╣реИрдВред
рджрд░рдЕрд╕рд▓, рд╕рд┐рдлреНрд╢ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ 8 рдмрд╛рдЗрдЯреНрд╕ рдХреА рджреЛ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди i2pd рдореЗрдВ рдЙрдиреНрд╣реЗрдВ 16 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде 1 рдХреБрдВрдЬреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░
рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реНрд░реЗрдо рдореЗрдВ 3 рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
- Siphash рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдИ рдлреНрд░реЗрдо рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ 2 рдмрд╛рдЗрдЯреНрд╕
- рдЪрд╛рдЪрд╛ 20 рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛
- Poly1305 рд╣реИрд╢ рдХреЗ 16 рдмрд╛рдЗрдЯреНрд╕
рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ рд╕рдВрдЪрд░рд┐рдд рдбреЗрдЯрд╛ рдХреА рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ 65519 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
рд╕рдВрджреЗрд╢ рд▓рдВрдмрд╛рдИ рд╡рд░реНрддрдорд╛рди IV Siphash рдХреЗ рдкрд╣рд▓реЗ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде XOR рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдореЗрдВ рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ 3-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░ рдФрд░ рд▓рдВрдмрд╛рдИ рд╣реЛрддреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, I2NP рдмреНрд▓реЙрдХ рд╡рд╛рд▓реЗ I2NP рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЗрдбрд░ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ, рдХрдИ I2NP рдмреНрд▓реЙрдХ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмреНрд▓реЙрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рдЕрдВрддрд┐рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдирдХреЗ рдЕрд▓рд╛рд╡рд╛, NTCP2 рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ 3 рдФрд░ рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ - рдЖрдорддреМрд░ рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рд╕рд░реНрд╡рд░ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд▓рдбрдлрд┐рд▓реНрдб рдХреЗ рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдХ рдордирдорд╛рдирд╛ рдиреЛрдб рдХрд╛ рд░рд╛рдЙрдЯрд░рдЗрдиреНрдлреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдореЗрдВ рдзреНрд╡рдЬ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕рдорд╛рдкреНрддрд┐ - рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рдЬрдм рдЗрд╕рдХреА рдкрд╣рд▓ рдкрд░ рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рддрд╛ рд╣реИред
- рджрд┐рдирд╛рдВрдХ рд╕рдордп - рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдордпред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдпрд╛ рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рди рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдбреАрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рдФрд░ рддреЗрдЬ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдХрд╛рд░рдг рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд▓реЛрдб рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рд░рд╛рдЙрдЯрд░ рдЬреИрд╕реЗ рдХрдордЬреЛрд░ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, NTCP2 рд╕рдорд░реНрдерди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ I2P рдФрд░ i2pd рджреЛрдиреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЕрдЧрд▓реЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХреНрд░рдорд╢рдГ 0.9.36 рдФрд░ 2.20 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред I2pd рдореЗрдВ ntcp2 рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ ntcp2.enabled = true, рдФрд░ ntcp2.published = true рдФрд░ ntcp2.port = <port> рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред