{"id":356202,"date":"2024-05-20T23:24:42","date_gmt":"2024-05-20T23:24:42","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=356202"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-20T23:24:42","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=356202","title":{"rendered":"<span>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c TLS \u043f\u043e \u0431\u0430\u0439\u0442\u0430\u043c. \u0413\u0434\u0435 \u0441\u043e\u0431\u0430\u043a\u0438 \u0437\u0430\u0440\u044b\u0442\u044b?<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/nl\/az\/7a\/nlaz7alajlk9r8-4vbt7owncpje.png\" width=\"100%\" data-src=\"https:\/\/habrastorage.org\/webt\/nl\/az\/7a\/nlaz7alajlk9r8-4vbt7owncpje.png\"\/><\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0430\u0439\u0442\u0443 \u0431\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u043c, \u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0442 \u2014 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435\u043c \u0434\u0435\u0442\u044f\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0434\u0435\u0442\u0438 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u044f \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b? \u0410\u0445 \u0434\u0430, \u044d\u0442\u043e \u0436\u0435 \u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c TLS. <\/p>\n<p>  \u0412 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/752270\/\">\u043f\u0435\u0440\u0432\u043e\u0439<\/a> \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u00ab\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043a\u0430\u043a\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e, \u043a\u0442\u043e \u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u00ab\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u00bb. \u0421\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 TLS: \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u0438.<a name=\"habracut\"><\/a><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c<\/font><\/h2>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435, MAC, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u0435\u0442\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u043d\u0430\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b. \u041d\u0430\u043f\u043e\u043c\u043d\u044e: \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0447\u0442\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u0435\u043d \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043b\u044e\u0447. \u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 MAC \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0431\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u0438 (\u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e) \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442 \u0435\u0433\u043e \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u042d\u041f \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0430 \u043a\u043b\u044e\u0447\u0430 (\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f), \u0430 \u0434\u043b\u044f MAC \u2014 \u043e\u0434\u0438\u043d (\u0438 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438).<\/p>\n<p>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0414\u0438\u0444\u0444\u0438-\u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430 (DH(E)). \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u0445 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0443\u044e \u0440\u043e\u043b\u044c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438\u0433\u0440\u0430\u0435\u0442 \u0432 TLS. \u041d\u0430 \u0432\u0441\u0451\u043c \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u2014 \u044d\u0442\u043e \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/752270\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a>.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u0434\u0430\u0447\u0430<\/font><\/h2>\n<p>  \u0426\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438: \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<pre><code class=\"plaintext\">GET \/ HTTP\/1.1 Host: ok.ru <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">HTTP\/1.1 200 OK Content-Type: text\/html; charset=utf-8 Content-Length: 22  &lt;h1>\u041f\u0440\u0438\u0432\u0435\u0442!&lt;\/h1> <\/code><\/pre>\n<p>  \u0412 HTTP\/1.1 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0443\u043c\u0435\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0418 \u0432\u0441\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043d\u0438\u0436\u043d\u0438\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 TCP \u0438 TLS) \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<blockquote><p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0434 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u00ab\u0442\u0435\u043a\u0441\u0442\u00bb, \u00ab\u0441\u0442\u0440\u043e\u043a\u0430\u00bb, \u00ab\u0447\u0438\u0441\u043b\u043e\u00bb, \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb \u0438 \u043f\u0440. \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442\u043e\u0432. \u0412\u0441\u0435 \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b, \u043a\u043b\u044e\u0447\u0438, nonce, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u0440. \u2014 \u0442\u043e\u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442\u043e\u0432.  <\/p><\/blockquote>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 HTTP-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u0430\u0434\u043e \u0438\u0445 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 HTTP \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u044f \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<pre><code class=\"bash\"># \u0417\u0430\u043f\u0440\u043e\u0441 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a  # GET \/ HTTP\/1.1\\r\\n 48 6f 73 74 3a 20 6f 6b 2e 72 75 0d 0a 0d 0a     # Host: ok.ru\\r\\n\\r\\n <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"># \u0421\u0442\u0440\u043e\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 ASCII 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a  # HTTP\/1.1 200 OK\\r\\n 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20           # Content-Type:\u23b5 74 65 78 74 2f 68 74 6d 6c 3b 20                    # text\/html;\u23b5 63 68 61 72 73 65 74 3d 75 74 66 2d 38 0d 0a        # charset=utf-8\\r\\n 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 32 32 0d 0a         # Content-Length: 22\\r\\n 0d 0a                                                               # \\r\\n # \u0422\u0435\u043b\u043e \u0432 UTF-8 (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 Content-Type) 3c 68 31 3e d0 9f d1 80 d0 b8 d0 b2 d0 b5 d1 82 21 3c 2f 68 31 3e   # &lt;h1>\u041f\u0440\u0438\u0432\u0435\u0442!&lt;\/h1> <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043c\u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0435\u0442\u0438 \u0442\u0430\u043a\u0438\u0435 \u0431\u0430\u0439\u0442\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0435\u043a TCP\/IP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u00ab\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u00bb, \u0435\u0441\u043b\u0438 \u0441\u043b\u044b\u0448\u0430\u043b\u0438, \u043d\u043e \u043d\u0435 \u0442\u0435\u043c\u043e\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442\u043e\u0432 HTTP-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438 \u0432 \u0441\u0445\u0435\u043c\u0435 <code>http:\/\/<\/code>. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u044b \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f: \u043a\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u0440\u0430\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0451 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0412 \u0441\u0445\u0435\u043c\u0435 <code>https:\/\/<\/code> \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c TLS. \u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e.<\/p>\n<h3><font color=\"#454cee\">\u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/font><\/h3>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0432 \u0431\u043b\u043e\u043a\u0430\u0445, \u043a\u0430\u043a \u0432\u044b\u0448\u0435, \u0447\u0438\u0441\u043b\u0430 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 (\u0434\u0432\u0435 \u0446\u0438\u0444\u0440\u044b \u2014 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442), <code>#<\/code> \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0412\u0441\u0435 \u0431\u0430\u0439\u0442\u044b \u043f\u043e \u0441\u0435\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u043c: \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a \u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">474554202f20485454502f312e310d0a486f73743a206f6b2e72750d0a0d0a <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u043d\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u043e\u0439 <code>0x<\/code> \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435, \u0431\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u2014 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u00ab\u0431\u0430\u0439\u0442\u00bb \u0447\u0430\u0449\u0435 \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u00ab\u043e\u043a\u0442\u0435\u0442\u00bb \u2014 \u0442\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432. \u00ab\u0421\u0442\u043e\u0440\u043e\u043d\u044b\u00bb \u2014 \u044d\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0438\/\u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>  \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f TLS 1.3 \u2014 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0451. \u041e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0431\u0443\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0437\u0430\u0438\u043a\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f TLS 1.3 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc8446\">RFC 8446<\/a>. \u0415\u0451 \u0442\u0435\u043a\u0441\u0442 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043d\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432 \u043d\u0451\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0442\u0430\u043c \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>  TLS \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u044f\u043c\u0438. \u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c 160 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u043e\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c. \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0435 TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0434\u0435\u0442\u0430\u043b\u0438.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442<\/font><\/h2>\n<p>  \u041f\u043e\u0434 \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u043e\u0439 TLS \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 <em>\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u0438<\/em> (record protocol). \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u00ab\u0437\u0430\u043f\u0438\u0441\u0438\u00bb (records) \u2014 \u0442\u0430\u043a \u0432 TLS \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043e\u0431\u043c\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439. \u0417\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043f\u043e\u043b\u044f). \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438\u0437 \u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u044c. \u0414\u043b\u0438\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0432 \u043e\u043a\u0442\u0435\u0442\u0430\u0445.<\/p>\n<pre><code class=\"perl\">TLSPlaintextRecord {     # \"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\" \u0437\u0430\u043f\u0438\u0441\u0438     Type (1),     LegacyRecordVersion (2) = 0x0303,     Length (2),          # \"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435\" \u0437\u0430\u043f\u0438\u0441\u0438     Content (..), } <\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>Type (1 \u043e\u043a\u0442\u0435\u0442) \u2014 \u0442\u0438\u043f \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u0447\u0442\u043e \u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0438\u043f 0x16 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f.<\/li>\n<li>LegacyRecordVersion (2 \u043e\u043a\u0442\u0435\u0442\u0430) \u2014 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 TLS \u043e\u043d\u043e \u0438\u043c\u0435\u043b\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432 TLS 1.3 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u0415\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0432\u043d\u043e 0x0303. \u0422\u0430\u043a\u0438\u0445 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u043d\u0435\u043c\u0430\u043b\u043e.<\/li>\n<li>Length (2 \u043e\u043a\u0442\u0435\u0442\u0430) \u2014 \u0434\u043b\u0438\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u043e\u043a\u0442\u0435\u0442\u0430\u0445 (\u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0434\u043b\u0438\u043d\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430).<\/li>\n<li>Content (Length \u043e\u043a\u0442\u0435\u0442\u043e\u0432) \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<\/li>\n<\/ul>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e TLS \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0422\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0433 \u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"bash\"># \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 15     # \u0422\u0438\u043f 0x15 \u2014 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435 (Alert) 03 03  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 00 02  # \u0414\u043b\u0438\u043d\u0430 0x0002 = 2 \u043e\u043a\u0442\u0435\u0442\u0430 # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u043b\u0438\u043d\u043e\u0439 2 \u043e\u043a\u0442\u0435\u0442\u0430 02 28  # \u0417\u0434\u0435\u0441\u044c \u043a\u0430\u043a-\u0442\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u00ab\u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0430\u044f\u00bb \u0437\u0430\u043f\u0438\u0441\u044c: \u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 MAC. \u041d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0435\u0449\u0451 \u043d\u0435\u0442 \u043e\u0431\u0449\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/MAC. \u0421 \u043a\u0430\u043a\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0449\u0438\u0442\u0430, \u0438 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0437\u0436\u0435. \u0410 \u043f\u043e\u043a\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0433\u0432\u043e\u0437\u0434\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0420\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435<\/font><\/h2>\n<p>  \u041b\u044e\u0431\u043e\u0435 TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u0445\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442, \u0432 \u0447\u0451\u043c \u043e\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u0435\u0451 \u0437\u0434\u0435\u0441\u044c \u0432 \u0447\u0443\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435: \u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0434\u0435\u0442\u0430\u043b\u0435\u0439. \u0412\u0441\u0451, \u0447\u0442\u043e \u0442\u0430\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043e, \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c. \u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0442\u043e, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u043b \u00ab\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043b\u044e\u0447 DH\u00bb \u0437\u0434\u0435\u0441\u044c \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u00ab\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH\u00bb.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0414\u043e\u0440\u0438\u0441\u0443\u0439\u0442\u0435 \u0441\u043e\u0432\u0443<\/b>                         <\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ts\/-w\/-i\/ts-w-i_o-4nqfhciejw6nyct6qc.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/ts\/-w\/-i\/ts-w-i_o-4nqfhciejw6nyct6qc.jpeg\" data-blurred=\"true\"\/>  <\/div>\n<\/p><\/div>\n<p>  \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e <em>\u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0435<\/em> \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u2014 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DHE. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043d\u043e \u043e\u043d\u0438 \u043c\u0435\u043d\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0435.<\/p>\n<p>  <a name=\"psk\"><\/a><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PSK<\/b>                         <\/p>\n<div class=\"spoiler_text\">PSK (Pre-Shared Key) \u2014 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447. \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0442\u0430\u043c \u043c\u044b \u0437\u0430\u0431\u0440\u0430\u043a\u043e\u0432\u0430\u043b\u0438 \u0438\u0445 \u0437\u0430 \u043d\u0435\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0443 PSK \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u043e: \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PSK, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u2014 \u0430 \u044d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043c\u0435\u0440\u0442\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 PSK \u0442\u0430\u043a\u043e\u0435:<\/p>\n<ol>\n<li>\u0412\u044b \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u043a \u0441\u0430\u0439\u0442\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u043e. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u0441\u0443\u0434\u0438\u043c: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DHE.<\/li>\n<li>\u041a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u043d\u0430 \u043f\u043e\u0442\u043e\u043c \u2014 PSK.<\/li>\n<li>\u0423 \u0432\u0430\u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0439-\u0444\u0430\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b \u0437\u0430\u0431\u044b\u043b\u0438 \u0435\u0433\u043e \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c. \u0422\u0435\u043b\u0435\u0444\u043e\u043d \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f IP-\u0430\u0434\u0440\u0435\u0441.<\/li>\n<li>\u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e TLS \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e.<\/li>\n<li>\u0422\u0435\u043b\u0435\u0444\u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 PSK \u0432 ClientHello, \u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442. \u0422\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0438 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043e\u0447\u0435.<\/li>\n<\/ol>\n<p>  \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c PSK \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u043f\u043e TLS \u0431\u0435\u0437 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432. \u041d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0433\u0443\u0433\u043b\u0438\u0442\u044c \u043d\u0430\u0434\u043e \u043f\u0440\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 NewSessionTicket \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f pre_shared_key \u0438 psk_key_exchange_modes.  <\/div>\n<\/p><\/div>\n<p>  \u0418\u0442\u0430\u043a, \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439 c \u0442\u0438\u043f\u043e\u043c 0x16. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445 \u043b\u0435\u0436\u0430\u0442 \u00ab\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u00bb \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 <em>\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f<\/em> (handshake protocol). \u0412\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"perl\">HandshakeMessage {     # \u041f\u043e\u043b\u044f, \u043e\u0431\u0449\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439     Type (1),   # \u0422\u0438\u043f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f     Length (3), # \u0414\u043b\u0438\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u043e\u043a\u0442\u0435\u0442\u0430\u0445 (\u0434\u043b\u0438\u043d\u044b Type \u0438 Length \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f).     # \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0438\u043f\u0430     MessageData (..), } <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<p>  <a name=\"alert\"><\/a><\/p>\n<pre><code class=\"bash\"># \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 16     # \u0422\u0438\u043f 0x16 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f 03 03  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 00 95  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0438 0x95 = 149 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u0442\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 01        # \u0422\u0438\u043f 0x01 \u2014 ClientHello 00 00 91  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f 0x91 = 145 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 ...       # \u0415\u0449\u0451 145 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0434\u043b\u0438\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043e\u043a\u0442\u0435\u0442\u0430, \u0430 \u0434\u043b\u0438\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u2014 \u0442\u0440\u0438?<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u043e\u0435 (\u0437\u0430\u043f\u0438\u0441\u044c \u0432 TLS \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 2\u00b9\u2074 \u043e\u043a\u0442\u0435\u0442\u043e\u0432, \u0430 \u0441\u043e\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0437 \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432), \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043a\u0443\u0441\u043a\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043f\u043e\u0434\u0440\u044f\u0434.<\/p>\n<p>  \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c (\u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c). \u041d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c, \u0434\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c.  <\/div>\n<\/p><\/div>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041e\u0431\u043c\u0435\u043d \u043a\u043b\u044e\u0447\u0430\u043c\u0438<\/font><\/h2>\n<p>  \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u041a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442, \u043a\u0430\u043a\u0438\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/p>\n<ol>\n<li>\u0412\u0435\u0440\u0441\u0438\u044e TLS;<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c DHE;<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u042d\u041f (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439);<\/li>\n<li>\u00ab\u041d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432\u00bb (cipher suite), \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u043a\u0443 \u0438\u0437\n<ul>\n<li>\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AEAD<\/li>\n<li>\u0438 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439;<\/li>\n<\/ul>\n<p>  AEAD (Authenticated Encryption with Associated Data) \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 MAC. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043a\u0430\u043a \u0441 \u043d\u0438\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0437\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u0435\u043c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445.  <\/li>\n<\/ol>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 DH. <\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00abClientHello\u00bb, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 DH. \u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u00abServerHello\u00bb. \u0422\u0430\u043c \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 \u043a\u043b\u044e\u0447 DH.<\/p>\n<p>  \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 ClientHello \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u0438\u0437-\u0437\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442. \u041d\u0435 \u043e\u0442\u0447\u0430\u0438\u0432\u0430\u0435\u043c\u0441\u044f: \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 ClientHello, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435.<\/p>\n<pre><code class=\"perl\">ClientHello {     Type (1) = 0x01,     Length (3),      LegacyVersion (2) = 0x0303,     Random (32),      # \u0423\u0441\u0442\u0430\u0440\u0435\u043b\u043e     LegacySessionIdLength (1),     LegacySessionId (LegacySessionIdLength),      CipherSuitesLength (2),     CipherSuites (CipherSuitesLength),        # \u0423\u0441\u0442\u0430\u0440\u0435\u043b\u043e     LegacyCompressionMethods(2) = 0x0100,          ExtensionsLength (2),     Extensions (ExtensionsLength), } <\/code><\/pre>\n<p>  \u0428\u0442\u043e\u0448, \u043f\u043e\u0435\u0445\u0430\u043b\u0438.<\/p>\n<ul>\n<li>Type \u0438 Length \u2014 \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438. \u0423 ClientHello \u0442\u0438\u043f 0x01.<\/li>\n<li>LegacyVersion \u2014 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435. \u0420\u0430\u043d\u044c\u0448\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412 TLS 1.3 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 (\u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0432\u0438\u0434\u0438\u043c), \u0430 LegacyVersion \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0432\u043d\u043e 0x0303.<\/li>\n<li>Random \u2014 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u042d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0430\u0442\u0430\u043a \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f (replay attacks), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438. \u041d\u0435 \u0432\u0434\u0430\u044e\u0441\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0441\u0443\u0442\u044c \u0442\u0430\u043a\u0430\u044f: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f Random \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442, \u0438 \u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u043e\u043d\u0438 \u043e\u0431\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u0432\u0430 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u0441 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 (\u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438, \u043a\u043b\u044e\u0447\u0430\u043c\u0438 DH \u0438 \u0442.\u0434.), \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435.<\/li>\n<li>LegacySessionId (LegacySessionIdLength \u043e\u043a\u0442\u0435\u0442\u043e\u0432) \u2014 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u043e. \u0420\u0430\u043d\u044c\u0448\u0435 \u0432 TLS \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u00ab\u0441\u0435\u0441\u0441\u0438\u0438\u00bb \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0412 TLS 1.3 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 PSK (\u043a\u0430\u043a \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b <a href=\"#psk\">\u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0435<\/a>), \u0430 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438.<\/li>\n<li>CipherSuites (CipherSuitesLength \u043e\u043a\u0442\u0435\u0442\u043e\u0432) \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0448\u0438\u0444\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u0432\u044f\u0437\u043a\u0438 \u00ab\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c AEAD + \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439\u00bb. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0438 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0451 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432 TLS_AES_256_GCM_SHA384 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AEAD \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c AES_256_GCM \u0438 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 SHA384; \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 0x1302. \u0412\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 TLS \u043d\u0430\u0431\u043e\u0440\u044b \u0448\u0438\u0444\u0440\u043e\u0432 \u0438 \u0438\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043d\u0430 <a href=\"https:\/\/www.iana.org\/assignments\/tls-parameters\/tls-parameters.xhtml#tls-parameters-4\">\u0441\u0430\u0439\u0442\u0435 IANA<\/a>.  <\/li>\n<li>LegacyCompressionMethods \u2014 \u0443\u0433\u0430\u0434\u0430\u0439\u0442\u0435 \u0441 \u0442\u0440\u0451\u0445 \u0440\u0430\u0437. \u0420\u0430\u043d\u044c\u0448\u0435 TLS \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0441\u0436\u0430\u0442\u0438\u0435, \u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c (\u0433\u0443\u0433\u043b\u0438\u0442\u044c \u0430\u0442\u0430\u043a\u0443 CRIME). \u0412 \u0438\u0442\u043e\u0433\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0438 \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u0430 \u0432 TLS 1.3 \u0441\u0436\u0430\u0442\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0431\u0440\u0430\u043b\u0438 \u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u043e 0x0100, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 (0x01) \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0436\u0430\u0442\u0438\u044f \u2014 \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f (0x00).<\/li>\n<li>Extensions (ExtensionsLength \u043e\u043a\u0442\u0435\u0442\u043e\u0432) \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u0417\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0438\u0434\u0443\u0442 \u043f\u0440\u044f\u043c\u043e \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c, \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:\n<pre><code class=\"perl\">Extension {     Type (2),     Length (2),     Content (Length), } <\/code><\/pre>\n<\/li>\n<\/ul>\n<p>  \u0427\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441 \u043e\u0440\u043b\u0438\u043d\u044b\u043c \u0433\u043b\u0430\u0437\u043e\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0432 ClientHello \u043d\u0435 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u043d\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b\/\u043a\u043b\u044e\u0447\u0438 DH, \u043d\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u042d\u041f. \u0410 \u0432\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e DHE, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435.<\/p>\n<ul>\n<li>supported_versions (\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 0x2b) \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0440\u0441\u0438\u0439 TLS, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. \u041a\u0430\u0436\u0434\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 (TLS 1.3 \u2014 \u044d\u0442\u043e 0x0304, TLS 1.2 \u2014 0x0303 \u0438 \u0442.\u0434.). <br \/> \n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u043e\u0440\u043c\u0430\u0442 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"perl\">SupportedVersionsExtension {     Type (2) = 0x002b,     # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u0438\u043d\u0430 VersionsLength (1 \u043e\u043a\u0442\u0435\u0442) + \u0434\u043b\u0438\u043d\u0430 Versions     ExtensionLength (2),      # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u0438\u043d\u0430 Versions     VersionsLength (1),     Versions (VersionsLength), } <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ExtensionLength \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 1 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f VersionsLength, \u0432\u0430\u043c \u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f (\u0438 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u043a\u0430\u0437\u0443\u0441\u044b \u0435\u0441\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445). \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0435\u0439 TLS \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043f\u043e\u043b\u0435\u0439 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439. \u0418 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0440\u0441\u0438\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c\u0438 \u043e\u0431\u043e\u0438\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c ExtensionLength \u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0434\u0432\u0430 \u043e\u043a\u0442\u0435\u0442\u0430.<\/p>\n<p>  \u041d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442\u0443. \u0422\u0430\u043a\u0438\u0435 \u00ab\u043b\u0438\u0448\u043d\u0438\u0435\u00bb \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u043b\u0438\u043d \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u2014 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0438 \u0440\u0435\u0434\u043a\u0438\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043c \u0432\u0441\u0451 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<pre><code class=\"bash\"># \u041f\u0440\u0438\u043c\u0435\u0440 00 2b  # \u0422\u0438\u043f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u2014 supported_versions 00 05  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 5 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 04     # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0435\u0440\u0441\u0438\u0439 4 \u043e\u043a\u0442\u0435\u0442\u0430 03 04  # \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 TLS 1.3 03 02  # \u0418 TLS 1.1 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/li>\n<li>supported_groups (0x0a) \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b DHE, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. \u041e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D1%80%D1%83%D0%BF%D0%BF%D0%B0_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)\">\u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b<\/a> (\u0433\u0440\u0443\u043f\u043f\u044b \u0432\u044b\u0447\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u2014 \u043e\u0442\u0441\u044e\u0434\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434 \u00ab\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c DH\u00bb \u0438 \u00ab\u0433\u0440\u0443\u043f\u043f\u0430\u00bb \u044f \u0438\u043c\u0435\u044e \u0432 \u0432\u0438\u0434\u0443 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 (\u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e). \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0435\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, x25519 \u0438\u043b\u0438 secp256r1) \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e 0x001d \u0438 0x0017). \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u043e\u0432\u044c \u0435\u0441\u0442\u044c \u043d\u0430 <a href=\"https:\/\/www.iana.org\/assignments\/tls-parameters\/tls-parameters.xhtml#tls-parameters-8\">\u0441\u0430\u0439\u0442\u0435 IANA<\/a>.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u043e\u0440\u043c\u0430\u0442 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"perl\">SupportedGroupsExtension {     Type (2) = 0x000a,     ExtensionLength (2), # \u0412\u0441\u0435\u0433\u0434\u0430 \u043d\u0430 2 \u0431\u043e\u043b\u044c\u0448\u0435 GroupsLength      GroupsLength (2),     Groups (GroupsLength), } <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"bash\">00 0a  # \u0422\u0438\u043f supported_groups 00 06  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 6 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 04  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 4 \u043e\u043a\u0442\u0435\u0442\u0430 00 1d  # 1. \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443 x25519 00 17  # 2. \u0438 \u0433\u0440\u0443\u043f\u043f\u0443 secp256r1 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/li>\n<li>key_share (0x33) \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 DH \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 ClientHello \u043a\u043b\u0438\u0435\u043d\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0440\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439\/\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0437\u0434\u0435\u0441\u044c.\n<p>  \u0424\u043e\u0440\u043c\u0430\u0442 \u043a\u043b\u044e\u0447\u0435\u0439 \u0440\u0430\u0437\u043d\u044b\u0439 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f, \u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 ClientHello \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u0443\u044e \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 key_share \u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0433\u0440\u0443\u043f\u043f, \u0430 \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432 ServerHello, \u0432\u044b\u0431\u0440\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 supported_groups, \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0445\u043e\u0442\u044c \u0432\u0441\u0435. \u0415\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 key_share, \u043e\u043d \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c (\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c; \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u0433\u0443\u0433\u043b\u0438\u0442\u044c \u043f\u0440\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 HelloRetryRequest).  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u043e\u0440\u043c\u0430\u0442 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"perl\">ClientKeyShareExtension {     Type (2) = 0x0033,     ExtensionLength (2), # \u0412\u0441\u0435\u0433\u0434\u0430 \u043d\u0430 2 \u0431\u043e\u043b\u044c\u0448\u0435 ClientSharesLength      ClientSharesLength (2),     ClientShares (ClientSharesLength) }  # ClientShares \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 ClientShare {     Group (2), # \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0433\u0440\u0443\u043f\u043f\u044b, \u043a\u0430\u043a \u0432 supported_groups      ShareLength (2),     Share (ShareLength), # \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH } <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"bash\">00 33  # \u0422\u0438\u043f key_shares 00 6b  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 0x6b = 107 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 69  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 0x69 = 105 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 1d  # \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b x25519 (\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 0x001d) 00 20  # \u0414\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 0x20 = 32 \u043e\u043a\u0442\u0435\u0442\u0430 # \u0421\u0430\u043c \u043a\u043b\u044e\u0447 71 46 fe c3 d8 78 2c 70 72 ad 84 49 de d7 ef 87  7c 54 71 44 6b 96 c5 36 f5 d8 b1 57 5f a8 28 4c 00 17  # \u0412\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f secp256r1 00 41  # \u0414\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 0x41 = 65 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 # \u0421\u0430\u043c \u043a\u043b\u044e\u0447 04 36 f1 4f c7 98 4a b9 c3 48 fa 93 fe 33 1c 4a 44 39 ae ef 4e dc c1 78 26 bc 8a 3b 9d ce fd 14 9e 85 9c 50 28 15 65 69 e2 00 dc 19 8b 8e 7a ba be 2c a7 53 5e 02 f6 90 ba 9f af d2 3a 3a af 60 46 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/li>\n<li>signature_algorithms (0x0d) \u2014 \u043a\u0430\u043a\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u042d\u041f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e \u0432 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u0442 \u0432\u0441\u0435\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430, \u0430 \u043e\u0442 \u0435\u0433\u043e \u0445\u0435\u0448\u0430. \u0412 TLS \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u043e\u043a (\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u042d\u041f + \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f) \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0435\u0441\u0442\u044c <a href=\"https:\/\/www.iana.org\/assignments\/tls-parameters\/tls-parameters.xhtml#tls-signaturescheme\">\u0443\u0433\u0430\u0434\u0430\u0439\u0442\u0435 \u0433\u0434\u0435<\/a>.<br \/> \n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u043e\u0440\u043c\u0430\u0442 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"perl\">SignatureAlgorithmsExtension {     Type (2) = 0x000d,     ExtensionLength (2), # \u0412\u0441\u0435\u0433\u0434\u0430 \u043d\u0430 2 \u0431\u043e\u043b\u044c\u0448\u0435 AlgorithmsLengh     AlgorithmsLength (2),     Algorithms (AlgorithmsLength),  } <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"bash\">00 0d  # \u0422\u0438\u043f signature_algorithms 00 06  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 6 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 04  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 4 \u043e\u043a\u0442\u0435\u0442\u0430 # \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442   05 03  # 1. ecdsa_secp384r1_sha384 (\u043f\u043e\u0434\u043f\u0438\u0441\u044c ECDSA secp384r1, \u0445\u0435\u0448 SHA384) 08 07  # 2. ed25518 (\u043f\u043e\u0434\u043f\u0438\u0441\u044c Ed25519, \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/li>\n<\/ul>\n<p>  \u0423\u0440\u0430, \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443! \u042d\u0442\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c ClientHello, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0438 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u0441\u044f<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"># \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 16     # \u0422\u0438\u043f 0x16 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f 03 03  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 00 bb  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e 0xbb = 187 \u043e\u043a\u0442\u0435\u0442\u043e\u0432  # \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 01        # \u0422\u0438\u043f ClientHello 00 00 b7  # \u0414\u043b\u0438\u043d\u0430 0xb7 = 183 \u043e\u043a\u0442\u0435\u0442\u0430 03 03     # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435  # 32 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043e\u043a\u0442\u0435\u0442\u0430 de 74 ae bd 5c 44 a4 5a 35 fa 23 af d7 f1 7f 51  39 95 7e bb 77 45 87 a6 72 80 81 d1 cd 29 07 d9  00     # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 (\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0443\u0441\u0442\u044b\u043c) 00 06  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0448\u0438\u0444\u0440\u043e\u0432 \u2014 6 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 13 01  # \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440\u044b TLS_AES_128_GCM_SHA256, 13 02  # TLS_AES_256_GCM_SHA384 13 03  # \u0438 TLS_CHACHA20_POLY1305_SHA256 01 00  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u0441\u0436\u0430\u0442\u0438\u044f   # \u041d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 00 88  # \u0418\u0445 \u0434\u043b\u0438\u043d\u0430 0x88 = 136 \u043e\u043a\u0442\u0435\u0442\u043e\u0432  00 2b  # supported_versions 00 03  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 3 \u043e\u043a\u0442\u0435\u0442\u0430 02     # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 2 \u043e\u043a\u0442\u0435\u0442\u0430 03 04  # \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e TLS 1.3  00 0a  # supported_groups 00 06  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 6 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 04  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 4 \u043e\u043a\u0442\u0435\u0442\u0430 00 17  # \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443 x25519 00 1d  # \u0438 secp256r1  00 33  # key_share 00 6b  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 0x6b = 107 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 69  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 0x69 = 105 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 1d  # \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b x25519 00 20  # \u0414\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 0x20 = 32 \u043e\u043a\u0442\u0435\u0442\u0430 # \u041a\u043b\u044e\u0447 71 46 fe c3 d8 78 2c 70 72 ad 84 49 de d7 ef 87  7c 54 71 44 6b 96 c5 36 f5 d8 b1 57 5f a8 28 4c  00 17  # \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b secp256r1 00 41  # \u0414\u043b\u0438\u043d\u0430 0x41 = 65 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 # \u0421\u0430\u043c \u043a\u043b\u044e\u0447 04 36 f1 4f c7 98 4a b9 c3 48 fa 93 fe 33 1c 4a  44 39 ae ef 4e dc c1 78 26 bc 8a 3b 9d ce fd 14  9e 85 9c 50 28 15 65 69 e2 00 dc 19 8b 8e 7a ba  be 2c a7 53 5e 02 f6 90 ba 9f af d2 3a 3a af 60 46   00 0d  # signature_algorithms 00 04  # \u0414\u043b\u0438\u043d\u0430 4 \u043e\u043a\u0442\u0435\u0442\u0430 00 02  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 2 \u043e\u043a\u0442\u0435\u0442\u0430 04 03  # \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e ecdsa_secp256r1_sha256 <\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u0431\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432:<\/p>\n<pre><code class=\"bash\">16 03 03 00 bb 01 00 00 b7 03 03 de 74 ae bd 5c 44 a4 5a 35 fa 23 af d7 f1 7f 51 39 95 7e bb 77 45 87 a6 72 80 81 d1 cd 29 07 d9 00 00 06 13 01 13 02 13 03 01 00 00 88 00 2b 00 03 02 03 04 00 0a 00 06 00 04 00 17 00 1d 00 33 00 6b 00 69 00 1d 00 20 71 46 fe c3 d8 78 2c 70 72 ad 84 49 de d7 ef 87 7c 54 71 44 6b 96 c5 36 f5 d8 b1 57 5f a8 28 4c 00 17 00 41 04 36 f1 4f c7 98 4a b9 c3 48 fa 93 fe 33 1c 4a 44 39 ae ef 4e dc c1 78 26 bc 8a 3b 9d ce fd 14 9e 85 9c 50 28 15 65 69 e2 00 dc 19 8b 8e 7a ba be 2c a7 53 5e 02 f6 90 ba 9f af d2 3a 3a af 60 46 00 0d 00 04 00 02 04 03 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h3><font color=\"#454cee\">ServerHello<\/font><\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438\/\u043d\u0430\u0431\u043e\u0440\u044b \u0448\u0438\u0444\u0440\u043e\u0432\/\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u042d\u041f\/DHE \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f. \u0422\u043e\u0433\u0434\u0430 TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f: \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f <a href=\"#alert\">\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0438 \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 ServerHello. \u0422\u0430\u043c \u0436\u0435 \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043f\u0430\u0440\u0435 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c).<\/p>\n<pre><code class=\"perl\">ServerHello {     Type (1) = 0x02,     Length (3),          LegacyVersion (2) = 0x0303,     Random (32),          # \u0423\u0441\u0442\u0430\u0440\u0435\u043b\u043e     LegacySessionIdEchoLength (1),     LegacySessionIdEcho (LegacySessionIdEchoLength),      CipherSuite (2),     # \u0423\u0441\u0442\u0430\u0440\u0435\u043b\u043e     LegacyCompressionMethod (1) = 0x00,          ExtensionsLength (2),     Extensions (ExtensionsLength) } <\/code><\/pre>\n<p>  \u0423 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u0435\u0439 \u0441\u043c\u044b\u0441\u043b \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 ClientHello. \u0427\u0443\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f CipherSuite: \u0432 ClientHello \u044d\u0442\u043e \u0431\u044b\u043b \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u0430 \u0432 ServerHello \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0440\u0430\u043b. LegacySessionIdEcho \u2014 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435, \u043a\u0443\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 LegacySessionId \u0432 ClientHello, \u0438 \u0432\u0441\u0435 \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u043e \u043d\u0451\u043c \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442.<\/p>\n<p>  \u0412 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0438 \u0441 DHE \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 ServerHello \u043c\u043e\u0436\u0435\u0442 \u0438 \u043e\u0431\u044f\u0437\u0430\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f: supported_versions, key_share. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e TLS, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c DH (\u0433\u0440\u0443\u043f\u043f\u0443) \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH. supported_groups \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u0430 \u0438 \u0442\u0430\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 key_share; signature_algorithms \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u042d\u041f \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0437\u0436\u0435 \u0443\u0437\u043d\u0430\u0435\u0442 \u0438\u0437 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. \u0424\u043e\u0440\u043c\u0430\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443: \u043e\u043d \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0432 ClientHello, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432\u0435\u0437\u0434\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b. \u041b\u0443\u0447\u0448\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ServerHello, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u043f\u0440\u0438\u0439\u0442\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043d\u0430\u0448 ClientHello.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\"># \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 16     # \u0422\u0438\u043f 0x16 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f 03 03  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 00 58  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e 0x58 = 88 \u043e\u043a\u0442\u0435\u0442\u043e\u0432  # \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 02        # \u0422\u0438\u043f ServerHello 00 00 54 # \u0414\u043b\u0438\u043d\u0430 0x54 = 84 \u043e\u043a\u0442\u0435\u0442\u0430 03 03     # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 # 32 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043e\u043a\u0442\u0435\u0442\u0430 83 3b d9 07 d8 da 92 2d bc 82 3e 8c 65 5a 0e 2d 1e 09 10 02 a5 44 48 67 0e 28 65 3b 6b 80 ba 2a 00     # \u0423 \u043d\u0430\u0441 LegacySessionId \u0431\u044b\u043b\u043e \u043f\u0443\u0441\u0442\u044b\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0438 \u0442\u0443\u0442 \u043f\u0443\u0441\u0442\u043e\u0435  13 02  # \u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0440\u0430\u043b \u043d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432 TLS_AES_256_GCM_SHA384 00     # \u0421\u0436\u0430\u0442\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e  # \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 00 2c  # \u0414\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 0x2c = 44 \u043e\u043a\u0442\u0435\u0442\u0430  00 2b  # supported_versions 00 02  # \u0414\u043b\u0438\u043d\u0430 2 \u043e\u043a\u0442\u0435\u0442\u0430 03 04  # \u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0440\u0430\u043b TLS 1.3  00 33  # key_share 00 24  # \u0414\u043b\u0438\u043d\u0430 34 \u043e\u043a\u0442\u0435\u0442\u0430 00 1d  # \u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0440\u0430\u043b \u0433\u0440\u0443\u043f\u043f\u0443 x25519 00 20  # \u0414\u043b\u0438\u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 DH 32 \u043e\u043a\u0442\u0435\u0442\u0430 # \u0421\u0430\u043c \u043a\u043b\u044e\u0447 c5 26 6a b9 ca 84 9b ea 25 da 15 af 7d 91 9a 6d f2 ae 3e 9c fc b5 bb 6c 29 7f 2d a5 30 28 e7 65 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h3><font color=\"#454cee\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439<\/font><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u0430\u044f \u0445\u043e\u0437\u044f\u0439\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u043c\u0435\u0442\u044c \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u0435\u043c\u044c\u044e \u0430\u0440\u043e\u043c\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u043c\u0430? \u0422\u043e\u0433\u0434\u0430 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0434\u0430\u043b\u044c\u0448\u0435! \u0418\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u044b:<\/p>\n<ol>\n<li>\u0425\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432;<\/li>\n<li>\u0414\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 nonce (\u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AEAD);<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c DHE \u0438\u0437 supported_groups;<\/li>\n<li>\u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DHE \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0438\u0437 key_share. \u0427\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f key_share \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u2014 key_share \u0441\u0435\u0440\u0432\u0435\u0440\u0430;<\/li>\n<li>\u0421\u0432\u043e\u0439 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DHE;<\/li>\n<li><em>\u0421\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/em> (transcript) \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0431\u0430\u0439\u0442\u043e\u0432, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0438\u0445 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430: ClientHello \u0438 ServerHello. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043e\u043a\u0442\u0435\u0442\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0442\u0438\u043f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f). \u0412 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432\u0445\u043e\u0434\u044f\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f Random \u0438\u0437 ClientHello \u0438 ServerHello: \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d\u0438 \u0438 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043b\u044e\u0447\u0435\u0439.<\/li>\n<\/ol>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 ClientHello\/ServerHello \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0435\u0441\u0442\u044c \u0432\u0441\u044f \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \u043a\u0430\u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e.<\/p>\n<p>  \u0420\u0435\u0446\u0435\u043f\u0442 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0438\u0442\u0440\u044b\u0439. \u042f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0435\u0433\u043e \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e\u0435, \u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u0438. \u041d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0438\u043d\u0430\u0447\u0435 \u0437\u0430\u0441\u0442\u0440\u044f\u043d\u0435\u043c \u043d\u0430\u0434\u043e\u043b\u0433\u043e. \u0414\u0430 \u0438 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041a\u043e\u043c\u0443 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e: \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u0436\u0438\u043b\u044b\u043c \u0436\u0435\u043d\u0449\u0438\u043d\u0430\u043c \u0438 \u0431\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0434\u0435\u0442\u044f\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435, \u043a\u0430\u043a \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0438. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 cryptography.<\/p>\n<pre><code class=\"python\">from cryptography.hazmat.primitives import hashes, hmac from cryptography.hazmat.primitives.kdf.hkdf import HKDFExpand from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey, X25519PublicKey  # \u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 ClientHello\/ServerHello, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f  # \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043d\u0430\u0431\u043e\u0440 TLS_AES_256_GCM_SHA384 hash_algorithm = hashes.SHA384()         # \u0425\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f digest_size = hash_algorithm.digest_size # \u0414\u043b\u0438\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 cipher_key_length = 32                   # \u0414\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 \u0443 \u0448\u0438\u0444\u0440\u0430 AES_256_GCM cipher_iv_length = 12                    # \u0414\u043b\u0438\u043d\u0430 nonce \u0443 \u0448\u0438\u0444\u0440\u0430 AES_256_GCM  # \u0417\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\/\u0441\u0435\u0440\u0432\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439  # \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Hello. \u042f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u0434\u0432\u0443\u0445  # \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 DH: x25519 \u0438 secp256r1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u044e \u0434\u0432\u0430 \u043a\u043b\u044e\u0447\u0430. my_key_share_x25519 = X25519PrivateKey.generate() my_key_share_secp256r1 = ec.generate_private_key(ec.SECP256R1())  # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 key_share \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430. peer_key_share_x25519 = b'...' peer_key_share_secp256r1 = b'...'  # \u0421\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b client_hello_transcript = bytes.fromhex('01...') # \u0411\u0430\u0439\u0442\u044b, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 ClientHello server_hello_transcript = bytes.fromhex('02...') # \u0411\u0430\u0439\u0442\u044b, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 ServerHello  def derive_keys_and_iv(client_traffic_secret: bytes, server_traffic_secret: bytes):     \"\"\"     \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u043b\u0435 ServerHello \u044d\u0442\u043e     \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f client_handshake_traffic_secret \u0438 server_handshake_traffic_secret, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0441\u0447\u0451\u0442\u0430     \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0438\u0436\u0435. \u041f\u043e\u0441\u043b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u044e\u0447\u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 *_traffic_secret.     \"\"\"     client_write_key = hkdf_expand_label(client_traffic_secret, b'key', b'', cipher_key_length)     client_write_iv = hkdf_expand_label(client_traffic_secret, b'iv', b'', cipher_iv_length)      server_write_key = hkdf_expand_label(server_traffic_secret, b'key', b'', cipher_key_length)     server_write_iv = hkdf_expand_label(server_traffic_secret, b'iv', b'', cipher_iv_length)      return client_write_key, client_write_iv, server_write_key, server_write_iv  def derive_handshake_secrets(     psk_share: bytes,     dhe_share: bytes,     transcript: bytes, ):     \"\"\"     \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: client_handshake_traffic_secret \u0438 server_handshake_traffic_secret.     \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 psk_share (\u043c\u044b \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 PSK, \u0442\u0430\u043a \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437 digest_size \u043d\u0443\u043b\u0435\u0439);     dhe_share \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 DHE. \u041f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u0442\u044c \u043d\u0438\u0436\u0435;     transcript \u2014 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f (ClientHello + ServerHello)     \"\"\"     zero_string = b'\\0' * digest_size      early_secret = hkdf_extract(zero_string, psk_share)     derived_secret = derive_secret(early_secret, b'derived', b'')     handshake_secret = hkdf_extract(derived_secret, dhe_share)      client_handshake_traffic_secret = derive_secret(         handshake_secret,          b'c hs traffic',          transcript     )     server_handshake_traffic_secret = derive_secret(         handshake_secret,          b's hs traffic',          transcript     )      return handshake_secret, client_handshake_traffic_secret, server_handshake_traffic_secret  # \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 def hkdf_extract(salt: bytes, input_key_material: bytes) -> bytes:     \"\"\"\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 HKDF (RFC 5869).\"\"\"     hm = hmac.HMAC(salt, hash_algorithm)     hm.update(input_key_material)     return hm.finalize() def encode_vector(length_bytes_count: int, content: bytes):     \"\"\"     \u041a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u043a\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 TLS     (\u043f\u0440\u0438\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0434\u043b\u0438\u043d\u0443).     \"\"\"     return len(content).to_bytes(length_bytes_count, 'big') + content def hkdf_expand_label(secret: bytes, label: bytes, context: bytes, length: bytes) -> bytes:     \"\"\"     \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 RFC 8446 (\u0440\u0430\u0437\u0434\u0435\u043b 7.1).     \"\"\"     hkdf_label = (         length.to_bytes(2, 'big') +         # \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0441\u0442\u0440\u043e\u043a\u0430 b'tls13 ' \u0441 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c!         encode_vector(1, b'tls13 ' + label) +         encode_vector(1, context)     )     hkdf = HKDFExpand(         algorithm=hashes.SHA384(),          length=length,          info=hkdf_label,     )     return hkdf.derive(secret)  def derive_secret(secret, label, messages):     \"\"\"     \u0415\u0449\u0451 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 RFC 8446 (\u0440\u0430\u0437\u0434\u0435\u043b 7.1).     \"\"\"      # \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0445\u0435\u0448 \u043e\u0442 messages     h = hashes.Hash(hash_algorithm)     h.update(messages)     mesages_hash = h.finalize()       return hkdf_expand_label(         secret=secret,          label=label,          context=mesages_hash,          length=hash_algorithm.digest_size     )  # \u041f\u0440\u0438\u043c\u0435\u0440\u044b, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f dhe_share, \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f x25519 \u0438 secp256r1.  def derive_x25519_share():     peer_public_key = X25519PublicKey.from_public_bytes(peer_key_share_x25519)     return my_key_share_x25519.exchange(peer_public_key)  def derive_secp256r1_share():     # \u0412 cryptography \u0434\u043b\u044f secp256r1 \u043d\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u044f \u043d\u0435 \u0437\u043d\u0430\u044e),      # \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442 key_share \u0438 \u0434\u043e\u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0442\u0442\u0443\u0434\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 (\u043a\u0430\u043a \u0432\u044b\u0448\u0435      # X25519PublicKey.from_public_bytes). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.     curve = ec.SECP256R1()     curve_key_size = curve.key_size \/\/ 8     curve_x = peer_key_share_secp256r1[1:curve_key_size+1]     curve_y = peer_key_share_secp256r1[curve_key_size+1:]     curve_numbers = ec.EllipticCurvePublicNumbers(curve_x, curve_y, curve)     server_public_key = curve_numbers.public_key()      return my_key_share_secp256r1.exchange(server_public_key)   # \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 x25519, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 secp256r1 selected_group = 'x25519'   # \u041f\u0440\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c DHE \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, # \u043a\u0430\u043a\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u0435\u0440\u0432\u0435\u0440 match selected_group:     case 'x25519':         dhe_share = derive_x25519_share()     case 'secp256r1':         dhe_share = derive_secp256r1_share()     case _:         raise Exception('Unsupported group')  # handshake_secret \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 handshake_secret, \\ client_handshake_traffic_secret, \\ server_handshake_traffic_secret = \\     derive_handshake_secrets(         # \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 PSK, \u0442\u0443\u0442 \u0431\u044b \u0431\u044b\u043b PSK.         # \u0410 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0443\u0447\u0430 \u043d\u0443\u043b\u0435\u0439.         b'\\0' * digest_size,         dhe_share,         client_hello_transcript + server_hello_transcript     )  # \u0421\u0430\u043c\u0438 \u043a\u043b\u044e\u0447\u0438 client_write_key, client_write_iv, \\ server_write_key, server_write_iv = \\     derive_keys_and_iv(client_handshake_traffic_secret, server_handshake_traffic_secret) <\/code><\/pre>\n<p>  \u042f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 ClientHello\/ServerHello (\u0438 key_share \u0438\u0437 \u043d\u0438\u0445) \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">client_write_key = bytes.fromhex('2f1688e9db0251c5efba86aa0e367d797c55e9bad839652c34af645f87e762dc') client_write_iv  = bytes.fromhex('c8c393817ab1a926a361670e') server_write_key = bytes.fromhex('636b63af2c0a1e2126e93245f8ebc78449df9fcb29f2d3f1fe948f4f03666923') server_write_iv  = bytes.fromhex('b5067f19c3b9ec8a26a2072c') <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0447\u0438\u0441\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u044e\u0447. \u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435\u00b2: \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0438\u043a\u043e\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c! \u042f \u043f\u0438\u0448\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0443\u0436\u0435 \u0435\u0433\u043e \u0441\u043e\u0442\u0440\u0443 \u0438 \u0437\u0430\u0431\u0443\u0434\u0443. \u0410 \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0443\u0437\u043d\u0430\u0435\u0442 \u0432\u0430\u0448 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447, \u043f\u0440\u043e\u0449\u0430\u0439 \u0437\u0430\u0449\u0438\u0442\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">my_key_share_x25519 = X25519PrivateKey.from_private_bytes(bytes.fromhex('7146fec3d8782c7072ad8449ded7ef877c5471446b96c536f5d8b1575fa8284c')) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: client_write_key, client_write_iv, server_write_key \u0438 server_write_iv. \u041e\u043d\u0438 \u043d\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435: \u043a\u043b\u044e\u0447\u0438 \u0435\u0449\u0451 \u043f\u043e\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u041d\u043e \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u0449\u0438\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/font><\/h2>\n<p>  \u0412\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u0441\u043b\u0435 ServerHello \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 MAC (\u043a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0442\u043a\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e ChangeCipherSpec, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c AEAD \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432. \u0415\u043c\u0443 \u043d\u0443\u0436\u043d\u043e 4 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<ol>\n<li>\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447. \u042d\u0442\u043e client_write_key \u0438\u043b\u0438 server_write_key, \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c.<\/li>\n<li>Nonce. \u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u2014 \u0442\u043e\u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 replay-\u0430\u0442\u0430\u043a. \u0427\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0435\u0434\u0443\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 (\u0441 \u043d\u0443\u043b\u044f): \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c nonce, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e XOR \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e client_write_iv\/server_write_iv (\u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043f\u0438\u0441\u044c). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0448\u0438\u0444\u0440\u0443\u0435\u0442 (\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442) \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 nonce \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442<code>xor(0, server_write_iv)<\/code>.<\/li>\n<li>\u0421\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432:\n<pre><code class=\"perl\">TLSInnerText {     Content (?),     Type (1),     Padding (?), } <\/code><\/pre>\n<p>  Content \u0438 Type \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u0442\u0438\u043f, \u043a\u0430\u043a \u0432 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u044f\u0445. Padding (\u00ab\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u00bb) \u2014 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u043e\u043a\u0442\u0435\u0442\u043e\u0432. \u042d\u0442\u043e \u043c\u0435\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438: \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. <\/p>\n<p>  \u0414\u043b\u0438\u043d\u044b Content \u0438 Padding \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b, \u0430 \u0438\u0445 \u0432\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c. \u041d\u043e \u043e\u043d\u0438 \u0438 \u0442\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u043d\u044b: \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043e\u043a\u0442\u0435\u0442 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0438\u043f \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0430 \u043f\u0435\u0440\u0435\u0434 \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.  <\/li>\n<li>\u00ab\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435\u00bb \u0434\u0430\u043d\u043d\u044b\u0435 (associated data, AD). \u041e\u043d\u0438 \u043d\u0435 \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f, \u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 MAC: \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e, \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u043c. \u0412 TLS \u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:\n<pre><code class=\"perl\">AssociatedData {     OpaqueType (1) = 0x17,     LegacyRecordVersion (2) = 0x0303,     EncryptedLength (2) } <\/code><\/pre>\n<p>  EncryptedLength \u2014 \u0434\u043b\u0438\u043d\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f <em>\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435<\/em> \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AEAD. \u041e\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0434\u043b\u0438\u043d\u044b \u0448\u0438\u0444\u0440\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 AEAD \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f AES_256_GCM \u043e\u043d\u0430 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 16 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u043b\u0438\u043d\u044b TLSInnerText. \u0411\u043e\u043d\u0443\u0441\u043d\u044b\u0435 \u043e\u0447\u043a\u0438 \u0442\u043e\u043c\u0443, \u043a\u0442\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u0442\u0435\u0442\u043e\u0432 \u0432 \u044d\u0442\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 MAC.  <\/li>\n<\/ol>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0430, \u043e\u043d\u0430 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u043d\u0430 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<pre><code class=\"perl\">TLSProtectedRecord {     # \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a      OpaqueType (1) = 0x17,     LegacyRecordVersion (2) = 0x0303,     Length (2),      # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435     ProtectedContent (Length) } <\/code><\/pre>\n<p>  \u0422\u0438\u043f \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d 0x17 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438: \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0442\u0438\u043f \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0432 \u0437\u0430\u043f\u0438\u0441\u044c. ProtectedContent \u2014 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 AEAD. <\/p>\n<p>  \u0417\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442: \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (AD) \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 (\u043a\u0430\u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0435\u0451 \u043f\u043e\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c). \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0445 \u0441\u043c\u044b\u0441\u043b: \u043e\u043d\u0438 \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c \u2014 \u0434\u043b\u0438\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u043d\u0435\u043b\u044c\u0437\u044f. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0433 \u0431\u044b \u0435\u0451 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u0447\u0438\u0442\u0430\u043b \u0431\u044b \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u0438\u043d\u0430 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0430 \u044d\u0442\u0438\u0445 \u043a\u0430\u0434\u0440\u0430\u0445 \u0441\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u0414\u0438\u043a\u0430\u044f \u043f\u0440\u0438\u0440\u043e\u0434\u0430 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">from cryptography.hazmat.primitives.ciphers.aead import AESGCM  # \u041a\u043b\u044e\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 server_write_key = bytes.fromhex('636b63af2c0a1e2126e93245f8ebc78449df9fcb29f2d3f1fe948f4f03666923') server_write_iv  = bytes.fromhex('b5067f19c3b9ec8a26a2072c')  def get_nonce(sequence_number: int, write_iv: bytes):     xor = lambda x, y: bytes(a ^ b for a, b in zip(x, y))     # cipher_iv_length \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043b\u044e\u0447\u0435\u0439     return xor(write_iv, sequence_number.to_bytes(cipher_iv_length, 'big'))  def protect_record(sequence_number: int, write_key: bytes, write_iv: bytes,                     type: bytes, content: bytes):     inner_text = (content + type +          # 4 \u043e\u043a\u0442\u0435\u0442\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u0442\u0430\u043a \u0437\u0430\u0445\u043e\u0442\u0435\u043b.         # \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e         bytes.fromhex('00000000'))     associated_data = (bytes.fromhex('170303') +         # \u042f \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0438\u0444\u0440 AES_256_GCM. \u0423 \u043d\u0435\u0433\u043e          # \u0434\u043b\u0438\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 16 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u043b\u0438\u043d\u044b \u0442\u0435\u043a\u0441\u0442\u0430.         # \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0435\u0451 (len(inner_text) + 16) \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0432\u0438\u0434\u0435          # \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u043a\u0442\u0435\u0442\u043e\u0432.         (len(inner_text) + 16).to_bytes(2, 'big'))     # \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f     nonce = get_nonce(sequence_number, write_iv)      # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c AES_256_GCM     aesgcm = AESGCM(write_key)     protected_content = aesgcm.encrypt(nonce, inner_text, associated_data)      # \u0421\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c     protected_record = (         bytes.fromhex('170303') + # OpaqueType \u0438 LegacyRecordVersion         len(protected_content).to_bytes(2, 'big') + # \u0414\u043b\u0438\u043d\u0430         protected_content # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435     )     return protected_record   # \u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u0449\u0438\u0442\u044b \u0437\u0430\u043f\u0438\u0441\u0438 type = bytes.fromhex('16') # \u0422\u0438\u043f \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f content = bytes.fromhex('0800001200100010000c000a0008687474702f312e31') # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 # \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0435\u0451 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 0 protected = protect_record(0, server_write_key, server_write_iv,                            type, content) print(protected.hex()) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0435 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0438\u0437 \u043d\u0435\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0443\u044e:<\/p>\n<pre><code class=\"bash\">16                           17 03 03                        03 03 00 14                    =>  00 29  08 00 00 12 00 10 00 10      d2 77 6d de 60 69 9c 50 0d ac 06 f1 4b e1 00 0c 00 0a 00 08 68 74      0f 10 e8 41 80 b2 7e 38 ee 68 e2 f0 8a c1 74 70 2f 31 2e 31            9a 13 92 48 7c fc ac 32 7b 4a c6 71 a4  <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u0432\u0438\u0434\u0435, \u043a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u0441\u043b\u0435 ServerHello. \u041d\u043e \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u043b\u0435\u0432\u0430? \u0422\u0438\u043f 0x16 (\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f), \u0430 \u0442\u0438\u043f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f 0x08 \u2014 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438. \u0410\u0445 \u0434\u0430, \u044d\u0442\u043e \u0436\u0435<\/p>\n<h3><font color=\"#454cee\">EncryptedExtensions<\/font><\/h3>\n<p>  \u042d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0417\u0434\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0435 \u0438\u0441\u043f\u043e\u0433\u0430\u043d\u0438\u0432 \u043e\u0431\u043c\u0435\u043d \u043a\u043b\u044e\u0447\u0430\u043c\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435, \u043a\u0440\u043e\u043c\u0435 supported_versions, key_share \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 PSK, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438). <\/p>\n<p>  \u0414\u043e \u044d\u0442\u043e\u0433\u043e, \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u044f ClientHello, \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0445 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e (\u0435\u0441\u043b\u0438 \u0431\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0434\u0435-\u0442\u043e \u0431\u044b\u043b <a href=\"https:\/\/www.iana.org\/assignments\/tls-extensiontype-values\/tls-extensiontype-values.xhtml#tls-extensiontype-values-1\">\u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438<\/a>&#8230;). \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u044b\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0434\u0432\u0443\u0445 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445.<\/p>\n<ul>\n<li><a name=\"sni\"><\/a>Server Name Indication (SNI, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 0x00) \u2014 \u0434\u043e\u043c\u0435\u043d \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0434\u043e\u043c\u0435\u043d\u0430\u043c\u0438 \u2014 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u0420\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d.\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435, \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 HTTP (\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <code>Host<\/code> \u0432 HTTP\/1.1 \u0438\u043b\u0438 <code>:authority<\/code> \u0432 HTTP\/2 \u0438 HTTP\/3). \u041d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 TLS-\u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u0410 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0434\u043e\u043c\u0435\u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0433\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0440\u0430\u043b, \u043a\u0430\u043a\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442: \u0432\u0435\u0434\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 \u043e\u043d \u0441\u0432\u043e\u0439.<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 ClientHello \u043d\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 SNI \u0432\u0438\u0434\u044f\u0442 \u0432\u0441\u0435. \u0414\u043b\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u044d\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0437\u0430\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c. SNI \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0441\u0430\u0439\u0442\u0443 \u0432\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435\u0441\u044c, \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0442 \u0441\u0430\u0439\u0442 \u043d\u0435 \u043f\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0448\u0435\u043c\u0443 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e \u043a\u0430\u043a \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f: \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 Encrypted ClientHello (ECH) \u0441 \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c. \u041d\u043e \u043f\u043e\u043a\u0430 \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 SNI, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u0431\u044b\u0442\u044c \u0432 ClientHello<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">00     # \u0422\u0438\u043f server_name (SNI) 00 0a  # \u0414\u043b\u0438\u043d\u0430 10 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 08  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 8 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430) 00     # \u0422\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f (0x00, \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0435) 00 05  # \u0414\u043b\u0438\u043d\u0430 5 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 6f 6b 2e 72 75 # \u0414\u043e\u043c\u0435\u043d \"ok.ru\", \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d \u0432 ASCII <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/li>\n<li>Application Level Protocol Negotiation (ALPN, 0x10) \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 TLS.\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0432\u044b\u0431\u043e\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 HTTP. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b HTTP\/1.1 \u0438 HTTP\/2 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 TLS \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0440\u0442, \u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ALPN. \u041a\u043b\u0438\u0435\u043d\u0442 \u0432 ClientHello \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0432 EncryptedExtensions. \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/751338\/\">\u0441\u0442\u0430\u0442\u044c\u044f \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c HTTP\/2<\/a>, \u0442\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u0438 \u043e \u043d\u0430\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 ALPN, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u0431\u044b\u0442\u044c \u0432 ClientHello<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">00 10  # \u0422\u0438\u043f ALPN 00 0e  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f 14 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 0c  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 12 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 08     # \u0414\u043b\u0438\u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 8 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 68 74 74 70 2f 31 2e 31  # \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 HTTP\/1.1 (\u0441\u0442\u0440\u043e\u043a\u0430 \"http\/1.1\" \u0432 ASCII) 02     # \u0414\u043b\u0438\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e 2 \u043e\u043a\u0442\u0435\u0442\u0430 68 32  # \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 HTTP\/2 (\u0441\u0442\u0440\u043e\u043a\u0430 \"h2\" \u0432 ASCII) <\/code><\/pre>\n<p>  \u0412 \u0436\u0438\u0437\u043d\u0438 \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u0435, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/www.iana.org\/assignments\/tls-extensiontype-values\/tls-extensiontype-values.xhtml#alpn-protocol-ids\">\u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438<\/a>.  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 EncryptedExtensions \u0441 ALPN, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0433 \u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u044b\u0448\u0435.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">16 03 03 00 14 08        # \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 EncryptedExtensions 00 00 12  # \u0414\u043b\u0438\u043d\u0430 18 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 10  # \u0414\u043b\u0438\u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 16 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 10  # \u041f\u0435\u0440\u0432\u043e\u0435 (\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435) \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u2014 ALPN 00 0c  # \u0414\u043b\u0438\u043d\u0430 12 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 0a  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 10 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00 08  # \u0414\u043b\u0438\u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 8 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 68 74 74 70 2f 31 2e 31  # \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 HTTP\/1.1 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/font><\/h2>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0442\u043e \u044d\u0442\u043e\u0442 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440\u00bb \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u041f\u0440\u0430\u0432\u0434\u0430 \u0442\u043e\u0442, \u043a \u043a\u043e\u043c\u0443 \u043e\u043d \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u0438\u043b\u0438 \u0441 \u043f\u043e\u0434\u0432\u0438\u0445\u043e\u043c? <\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u2014 \u044d\u0442\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f: \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u044b\u0439. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH, \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0432\u0438\u0434\u0438\u043c, \u0432 TLS \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043c\u0435\u043b\u043e\u0447\u0438\u0442\u0441\u044f \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0451 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435. \u041e\u0442 \u044d\u0442\u043e\u0433\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043b\u044e\u0447\u0438 DH, \u043d\u043e \u0438 \u043d\u0430 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438: \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043d\u0430\u0431\u043e\u0440\u044b \u0448\u0438\u0444\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<p>  \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438, \u0435\u0441\u043b\u0438 \u0434\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u042d\u041f \u0438\u0437 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. \u0412 TLS \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0430\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Certificate \u0438 CertificateVerify.<\/p>\n<pre><code class=\"perl\">Certificate {     Type (1) = 0x0b,     Length (3),     CertificateRequestContextLength (1),     CertificateRequestContext (CertificateRequestContextLength),     CertificateListLength (3),     CertificateList (CertificateListLength) } # \u041f\u043e\u043b\u0435 CertificateList \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 CertificateEntry {     CertificateLength (3),     Certificate (CertificateLength),     ExtensionsLength (2),     Extensions (ExtensionsLength), } <\/code><\/pre>\n<p>  \u0412 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 Certificate \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u043b\u0435 CertificateRequestContext \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0443\u0441\u0442\u043e\u0435. \u0412 TLS \u043f\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443 \u043c\u043e\u0436\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u043e \u0438 \u043a\u043b\u0438\u0435\u043d\u0442: \u043c\u044b \u044d\u0442\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 CertificateRequestContext \u043d\u0435 \u043f\u0443\u0441\u0442\u043e.<\/p>\n<p>  \u0412 \u043f\u043e\u043b\u0435 CertificateList \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0432\u0441\u0435\u0433\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439) \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 (\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435) \u043c\u043e\u0433\u0443\u0442 \u0438\u0434\u0442\u0438 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435: \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c, \u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442), \u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043b\u0435\u0432\u044b\u0439 \u043d\u0435 \u0438\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 (\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u044f\u0441\u043d\u043e, \u0437\u0430\u0447\u0435\u043c).<\/p>\n<p>  \u041f\u043e\u043b\u0435 Certificate \u0432\u043d\u0443\u0442\u0440\u0438 CertificateEntry \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043e\u0432, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 X.509 (\u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442). Extensions \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u0441\u0432\u043e\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. \u041e\u043d\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c.<\/p>\n<p>  \u0423 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0451\u043d, \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u043e\u043d \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c SNI \u0438\u0437 ClientHello. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u042d\u041f, \u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c signature_algorithm. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442, TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u0443\u0436\u0434\u0435\u043d\u043e.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 Certificate \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u042f \u0432\u0437\u044f\u043b \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 (chain.crt). \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">16 03 03 04 04 # \u0414\u043b\u0438\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 0x404 = 1028 \u043e\u043a\u0442\u0435\u0442\u043e\u0432  0b        # \u0422\u0438\u043f Certificate 00 04 03  # \u0414\u043b\u0438\u043d\u0430 0x403 = 1027 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 00        # \u041f\u0443\u0441\u0442\u043e\u0435 CertificateContext 00 03 ff  # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 0x3ff = 1023 \u043e\u043a\u0442\u0435\u0442\u0430 00 01 \u0441e  # \u0414\u043b\u0438\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e 0x1ce = 462 \u043e\u043a\u0442\u0435\u0442\u0430 30 82 01 ca 30 ... # \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u0438\u043d\u043e\u0439 462 \u043e\u043a\u0442\u0435\u0442\u0430 00 00     # \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043d\u0435\u0442 00 02 27  # \u0414\u043b\u0438\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e 0x227 = 551 \u043e\u043a\u0442\u0435\u0442 30 82 02 23 30 ... # \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u0438\u043d\u043e\u0439 551 \u043e\u043a\u0442\u0435\u0442 00 00     # \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043d\u0435\u0442 <\/code><\/pre>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 ServerHello \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e \u0441\u0435\u0442\u0438 \u044d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"bash\">17 03 03  04 19  # \u0414\u043b\u0438\u043d\u0430 0x419 = 1049 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 9b d8 0b b4...  # 1049 \u043e\u043a\u0442\u0435\u0442\u043e\u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0438\u0432\u0430 <\/code><\/pre>\n<p>  \u0421\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u044f \u044d\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0423 \u043c\u0435\u043d\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0444\u0430\u0439\u043b\u0435 .\/chain.crt. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 .crt \u0438\u043b\u0438 .pem \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 (\u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f PEM): \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445. \u0411\u044b\u0432\u0430\u044e\u0442 \u0435\u0449\u0451 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, .p12): \u043a\u0430\u043a \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<pre><code class=\"python\">import base64  with open('.\/chain.crt', 'r') as chain:     chain = chain.read()     # \u0412 cryptography \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f x509.load_pem_x509_certificates, \u043a\u043e\u0442\u043e\u0440\u0430\u044f     # \u0443\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 PEM. \u041d\u043e \u044f \u0437\u0434\u0435\u0441\u044c \u0434\u0435\u043b\u0430\u044e \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438.     base64_certs = chain \\         .replace('-----BEGIN CERTIFICATE-----', '') \\         .split('-----END CERTIFICATE-----')[:-1]     certificates = [base64.b64decode(cert) for cert in base64_certs]  def get_certificate_entry(cert_bytes: bytes):     \"\"\"\u0421\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0437 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 CertificateEntry\"\"\"     return (         len(cert_bytes).to_bytes(3, 'big') + # \u0414\u043b\u0438\u043d\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430         cert_bytes + # \u0421\u0430\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442         bytes.fromhex('0000') # \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u0443\u0441\u0442\u043e\u0439     )  certificate_list = b''.join(get_certificate_entry(cert) for cert in certificates) certificate_message_content = (     bytes.fromhex('00') + # CerificateContext \u043f\u0443\u0441\u0442\u043e\u0435     len(certificate_list).to_bytes(3, 'big') + # \u0414\u043b\u0438\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430     certificate_list # \u0421\u0430\u043c \u0441\u043f\u0438\u0441\u043e\u043a ) certificate_message = (     bytes.fromhex('0b') + # \u0422\u0438\u043f Certificate     len(certificate_message_content).to_bytes(3, 'big') + # \u0414\u043b\u0438\u043d\u0430     certificate_message_content # \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ) # Certificate \u2014 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c (\u043f\u0435\u0440\u0432\u0430\u044f \u0431\u044b\u043b\u0430 EncryptedExtensions). # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u043d\u0435\u0439 \u0440\u0430\u0432\u043d\u043e 1. protected = protect_record(1, server_write_key, server_write_iv,                            b'\\x16', certificate_message) print(certificate_message.hex()) print(protected.hex()) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043c\u043e\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043a\u043b\u044e\u0447\u0438 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f: \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u0432\u043e\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u042d\u041f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u043e \u0445\u043e\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c.<\/p>\n<p>  \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 Certificate \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a, \u0442\u043e \u043e\u043d \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c:<\/p>\n<pre><code class=\"perl\">CertificateVerify {     Type (1) = 0x0f,     Length (3),     SignatureAlgorithm (2),     SignatureLength (2),     Signature (SignatureLength), } <\/code><\/pre>\n<p>  SignatureAlgorithm \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 (\u043a\u0430\u043a \u0432 signature_algorithms \u0432 ClientHello). Signature \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0451, \u043d\u0430\u0434\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e \u0438\u0437 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0435\u0440\u0443\u043d\u0434\u044b:<\/p>\n<ol>\n<li>\u041e\u043a\u0442\u0435\u0442 0x20, \u043f\u043e\u0432\u0442\u043e\u0440\u0451\u043d\u043d\u044b\u0439 64 \u0440\u0430\u0437\u0430.<\/li>\n<li>\u0421\u0442\u0440\u043e\u043a\u0430 <code>TLS 1.3, server CertificateVerify<\/code>, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432 ASCII.<\/li>\n<li>\u041e\u043a\u0442\u0435\u0442 0x00.<\/li>\n<li>\u0425\u0435\u0448 \u043e\u0442 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u0441\u0435\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (ClientHello, ServerHello, EncryptedExtensions, Certificate). \u0425\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432.<\/li>\n<\/ol>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u0438 \u0434\u0440\u0443\u0437\u044c\u044f\u043c, \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434 \u043f\u043e\u0434\u0443\u0448\u043a\u0443. \u0410 \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e, \u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0445\u0435\u0448 (\u0435\u0441\u043b\u0438 \u043e\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438) \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u042d\u041f. \u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0437\u0430 \u043f\u0440\u0438\u043a\u043e\u043b \u0441 \u043e\u043a\u0442\u0435\u0442\u043e\u043c 0x20: \u0443 \u043d\u0435\u0433\u043e <a href=\"https:\/\/github.com\/tlswg\/tls13-spec\/issues\/849\">\u0435\u0441\u0442\u044c<\/a> \u0441\u0430\u043a\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043c\u044b\u0441\u043b, \u043d\u043e \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0432\u0434\u0430\u044e\u0441\u044c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 ClientHello \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044c ecdsa_secp256r1_sha256 \u2014 \u0435\u0451 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u0423 \u043c\u0435\u043d\u044f \u043a\u043b\u044e\u0447 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0444\u0430\u0439\u043b\u0435 .\/server.key, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u042d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u044b\u043b \u043a\u043b\u044e\u0447 ECDSA secp256r1, \u043a\u0430\u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u043e.<\/p>\n<pre><code class=\"python\">from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec  # \u0425\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432 \u2014 SHA384 hash_algorithm = hashes.SHA384() # \u041a\u043b\u044e\u0447 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. with open('.\/server.key', 'br') as f:     signature_private_key = serialization.load_pem_private_key(         f.read(),         # \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u0438 \u043a\u043b\u044e\u0447, \u0430 \u0447\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c         # \u043d\u0430\u0434\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c.         password=b'...'     )  # \u0421\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b client_hello = b'01...' server_hello = b'02...' # \u0422\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, # \u0432 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 encrypted_extensions = b'08...' certificate = b'0b...' transcript = client_hello + server_hello + encrypted_extensions + certificate  # \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0445\u0435\u0448 \u043e\u0442 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b h = hashes.Hash(hash_algorithm) h.update(transcript) transcript_hash = h.finalize()  # \u0421\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0440\u0443\u043d\u0434\u0443 signature_content = (     b'\\x20' * 64 + # 64 \u0440\u0430\u0437\u0430 \u043e\u043a\u0442\u0435\u0442 0x20     b'TLS 1.3, server CertificateVerify' + # \u0412\u043e\u043b\u0448\u0435\u0431\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430     b'\\x00' + # \u041e\u043a\u0442\u0435\u0442 0x00     transcript_hash # \u0425\u0435\u0448 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b ) # \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c algorithm = ec.ECDSA(hashes.SHA256()) signature = signature_private_key.sign(signature_content, algorithm)  certificate_verify_content = (     bytes.fromhex('0403') + # \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0438 ecdsa_secp256r1_sha256      len(signature).to_bytes(2, 'big') +     signature ) certificate_verify = (     bytes.fromhex('0f') + # \u0422\u0438\u043f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f 0x0f     len(certificate_verify_content).to_bytes(3, 'big') +     certificate_verify_content )  # \u0417\u0430\u0449\u0438\u0449\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c. CertificateVerify \u2014 \u0442\u0440\u0435\u0442\u044c\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 # (\u043f\u0435\u0440\u0432\u043e\u0435 EncryptedExtensions, \u0432\u0442\u043e\u0440\u043e\u0435 Certificate), \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 2. protected_record = protect_record(2, b'\\x16', certificate_verify) print(certificate_verify.hex()) print(protected_record.hex()) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 CertificateVerify \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044c. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u0435\u0440\u043d\u0430, \u0442\u043e \u0443\u0440\u0430: c\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u044b\u0439. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u0443\u0436\u0434\u0435\u043d\u043e.<\/p>\n<h3><font color=\"#454cee\">Finished<\/font><\/h3>\n<p>  \u041e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433: \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Finished. \u041e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 CertificateVerify, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044c, \u0430 MAC \u043e\u0442 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u0441\u0435\u0433\u043e \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. <\/p>\n<p>  \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 Finished \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u0432\u0435 \u0446\u0435\u043b\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u043e\u043d\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u0447\u0442\u043e \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e, \u0438 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 (\u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0432\u0438\u0434\u0438\u043c). \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u0441 PSK \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 CertificateVerify \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Finished \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0432\u043c\u0435\u0448\u0430\u043b\u0441\u044f \u0438 \u0447\u0442\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u043a\u043b\u044e\u0447\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u0441 DHE \u0436\u0435 CertificateVerify \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u0435 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042f \u043d\u0435 \u0437\u043d\u0430\u044e \u043e\u0431 \u0430\u0442\u0430\u043a\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u043c\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432 CertificateVerify \u0441\u043e\u0432\u043f\u0430\u043b\u0430, \u043d\u043e MAC \u0432 Finished \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043c\u043e\u0451\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 Finished \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f: \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a\u043e\u0432 \u0431\u044b \u043d\u0438 \u0431\u044b\u043b \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f, \u043e\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c. \u041d\u043e \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u0442\u0430\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e Finished \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <em>\u0432 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0438 \u0441 DHE<\/em>, \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u0435\u043d.<\/p>\n<pre><code class=\"perl\">Finished {     Type (1) = 0x14,     Length (3),     VerifyData (?) } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c VerifyData \u2014 \u044d\u0442\u043e MAC, \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432. \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f VerifyData \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0445\u0438\u0442\u0440\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c. <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 VerifyData<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">from cryptography.hazmat.primitives import hashes, hmac  # \u0421\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0430. \u0421\u044e\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 ClientHello \u0434\u043e CertificateVerify \u0441\u0435\u0440\u0432\u0435\u0440\u0430 transcript = b'01...'  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f hkdf_expand_label \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 digest_size, server_handshake_traffic_secret, # hash_algorithm \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043b\u044e\u0447\u0435\u0439  base_key = server_handshake_traffic_secret finished_key = hkdf_expand_label(base_key, b'finished', b'', digest_size)  hmac = hmac.HMAC(finished_key, hash_algorithm) hmac.update(transcript) verify_data = hmac.finalize() <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 MAC \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 Finished, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c MAC \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d \u043f\u043e \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e server_handshake_traffic_secret \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 client_handshake_traffic_secret, \u0438 \u043a \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 Finished \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<h3><font color=\"#454cee\">\u041f\u0435\u0440\u0435\u0441\u0447\u0451\u0442 \u043a\u043b\u044e\u0447\u0435\u0439<\/font><\/h3>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0431\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c Finished, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f server_write_key, server_write_iv, client_write_key, client_write_iv. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432 \u0438\u0445 \u0440\u0430\u0441\u0447\u0451\u0442\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <em>\u0432\u0441\u0435\u0433\u043e<\/em> \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># \u0421\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u043e\u0442 ClientHello \u0434\u043e Finished \u0441\u0435\u0440\u0432\u0435\u0440\u0430  # (Finished \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f) transcript = b'01...'  def derive_traffic_secrets():     zero_string = b'\\0' * digest_size     # handshake_secret \u0437\u0434\u0435\u0441\u044c \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u0440\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043b\u044e\u0447\u0435\u0439.     # \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435.     derived_secret_2 = derive_secret(handshake_secret, b'derived', b'')     master_secret = hkdf_extract(derived_secret_2, zero_string)      client_application_traffic_secret_0 = derive_secret(master_secret, b'c ap traffic', transcript)     server_application_traffic_secret_0 = derive_secret(master_secret, b's ap traffic', transcript)      return client_application_traffic_secret_0, server_application_traffic_secret_0   client_application_traffic_secret_0, server_application_traffic_secret_0 = derive_traffic_secrets() client_write_key, client_write_iv, server_write_key, server_write_iv = \\     derive_keys_and_iv(client_application_traffic_secret_0, server_application_traffic_secret_0) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f nonce \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0. \u0412\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f \u044d\u0442\u0438\u043c\u0438 \u043d\u043e\u0432\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438. \u0420\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/font><\/h2>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0438 HTTP-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f! \u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u0438\u0442\u0440\u043e\u0433\u043e: \u043c\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u0430\u043a \u0431\u044b\u043b\u0438 \u0432 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0442\u0438\u043f\u043e\u043c 0x17 (\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u0432\u043c\u0435\u0441\u0442\u043e 0x16:<\/p>\n<pre><code class=\"bash\">17     # \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f 03 03  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 00 1f  # \u0414\u043b\u0438\u043d\u0430 # HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 47 45 54 20 2f 20 48 54 54 50  # GET \/ HTTP\/1.1... 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 6f 6b 2e 72 75 0d 0a 0d 0a <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438. \u0410 \u043f\u043e \u0441\u0435\u0442\u0438 \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"bash\"># \u0422\u0438\u043f 0x17, \u043d\u043e \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, # \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0432\u0441\u0435\u0445 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0438\u043f 0x17 17      03 03  # \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u043f\u043e\u043b\u0435 00 2f  # \u0414\u043b\u0438\u043d\u0430 # \u041c\u0435\u0441\u0438\u0432\u043e \u0438\u0437 \u0431\u0430\u0439\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u0438 MAC 9e 9d 56 56 d8 33 66 8f 8f 08 c4 7a b6 97 ba dd  54 5f a2 63 58 0d 9c 27 dc a8 fd 4e c2 59 b8 b7  9a c4 be 7f a8 aa 1c c0 4e fd 85 9a 8e 55 6b <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># \u041a\u043b\u0438\u0435\u043d\u0442  # \u0417\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 http_request = bytes.fromhex('474554202f20485454502f312e310d0a486f73743a206f6b2e72750d0a0d0a') # \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u0430 \u043a\u043b\u044e\u0447\u0435\u0439, \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441 0. # \u041a\u043b\u044e\u0447\u0438 client_write_key \u0438 client_write_iv \u0442\u0435, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u0430. protected_request = protect_record(0, client_write_key, client_write_iv,                                                      b'\\x17', http_request)  # \u041a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u043e\u043d \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e # \u0437\u043d\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f client_write_key, client_write_iv  <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"python\"># \u0421\u0435\u0440\u0432\u0435\u0440 http_response = bytes.fromhex('485454502f312e3120323030204f4b0d0a436f6e74656e742d547970653a20746578742f68746d6c3b20636861727365743d7574662d380d0a436f6e74656e742d4c656e6774683a2032320d0a0d0a3c68313ed09fd180d0b8d0b2d0b5d182213c2f68313e') # \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u043f\u044f\u0442\u044c 0. protected_response = protect_record(0, server_write_key, server_write_iv,                                                        b'\\x17', http_request) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u0432\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043a\u0443\u043b\u044c\u043c\u0438\u043d\u0430\u0446\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u043e\u0440\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c: \u043e\u0442 ClientHello \u0434\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0438 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u0441\u044f<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">### \u041a\u043b\u0438\u0435\u043d\u0442 => \u0421\u0435\u0440\u0432\u0435\u0440 ### 16 03 03 00 bb # \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 01 00 00 b7    # \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 ClientHello, 183 \u043e\u043a\u0442\u0435\u0442\u0430 03 03 # 32 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043e\u043a\u0442\u0435\u0442\u0430 de 74 ae bd 5c 44 a4 5a 35 fa 23 af d7 f1 7f 51  39 95 7e bb 77 45 87 a6 72 80 81 d1 cd 29 07 d9  00 00 06 13 01 13 02 13 03 # \u041d\u0430\u0431\u043e\u0440\u044b \u0448\u0438\u0444\u0440\u043e\u0432: TLS_AES_256_GCM_SHA384 \u0438 \u0435\u0449\u0451 \u0434\u0432\u0430 01 00 00 88 00 2b 00 03 02 03 04    # supported_versions: TLS 1.3 00 0a 00 06 00 04 00 17 00 1d # supported_groups: x25519, secp256r1 00 33 00 6b 00 69       # key_share # \u0414\u043b\u044f x25519 00 1d 00 20   71 46 fe c3 d8 78 2c 70 72 ad 84 49 de d7 ef 87  7c 54 71 44 6b 96 c5 36 f5 d8 b1 57 5f a8 28 4c  # \u0414\u043b\u044f secp256r1 00 17 00 41  04 36 f1 4f c7 98 4a b9 c3 48 fa 93 fe 33 1c 4a  44 39 ae ef 4e dc c1 78 26 bc 8a 3b 9d ce fd 14  9e 85 9c 50 28 15 65 69 e2 00 dc 19 8b 8e 7a ba  be 2c a7 53 5e 02 f6 90 ba 9f af d2 3a 3a af 60 46  00 0d 00 04 00 02 04 03 # signature_algorithms: ecdsa_secp256r1_sha256  ### \u0421\u0435\u0440\u0432\u0435\u0440 => \u041a\u043b\u0438\u0435\u043d\u0442 ### 16 03 03 00 58 02 00 00 54 03 03 # ServerHello 83 3b d9 07 d8 da 92 2d bc 82 3e 8c 65 5a 0e 2d 1e 09 10 02 a5 44 48 67 0e 28 65 3b 6b 80 ba 2a 00 13 02  # \u041d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 TLS_AES_256_GCM_SHA384 00 00 2c 00 2b 00 02 03 04 # \u0412\u0435\u0440\u0441\u0438\u044f TLS: 1.3 00 33 00 24 00 1d 00 20  # \u0413\u0440\u0443\u043f\u043f\u0430: x25519 # \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 DH c5 26 6a b9 ca 84 9b ea 25 da 15 af 7d 91 9a 6d f2 ae 3e 9c fc b5 bb 6c 29 7f 2d a5 30 28 e7 65  # \u0412\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043f\u043e \u0441\u0435\u0442\u0438 \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442\u0441\u044f. # \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0438\u0445 \u0432 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435.  16 03 03 00 06 08 00 00 02 00 00 # EncryptedExtensions, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043d\u0435\u0442  16 03 03 04 04 0b 00 04 03 00 # Certificate 00 03 ff  # \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 (\u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439) 00 01 \u0441e 30 82 01 ca 30 ... 00 00 # \u0412\u0442\u043e\u0440\u043e\u0439 (\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439) 00 02 27 30 82 02 23 30 ... 00 00  16 03 03 00 50 0f 00 00 4c 04 03  # CertificateVerify, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c ecdsa_secp256r1_sha256 00 48 2f 93 c1 ... # \u041f\u043e\u0434\u043f\u0438\u0441\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u042d\u041f \u0441\u0435\u0440\u0432\u0435\u0440\u0430  # \u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443, # \u0438 \u0447\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432\u0435\u0440\u043d\u0430  16 03 03 00 24 14 00 00 20     # Finished 82 aa b1 ...    # HMAC \u043e\u0442 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f  ### \u041a\u043b\u0438\u0435\u043d\u0442 => \u0421\u0435\u0440\u0432\u0435\u0440 ###  16 03 03 00 24 14 00 00 20     # Finished 92 28 eb ...    # HMAC \u043e\u0442 \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f  17 03 03 00 1f  # \u0417\u0430\u043f\u0438\u0441\u044c 0x17 (\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f) 47 45 54 20 ... # HTTP-\u0437\u0430\u043f\u0440\u043e\u0441  ### \u0421\u0435\u0440\u0432\u0435\u0440 => \u041a\u043b\u0438\u0435\u043d\u0442 ### 17 03 03 00 65 48 54 54 50 ... # HTTP-\u043e\u0442\u0432\u0435\u0442 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 TLS-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 TLS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u042d\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043d\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438<\/p>\n<ul>\n<li>\u041e\u0431\u043c\u0435\u043d \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PSK;<\/li>\n<li>\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0421\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f CertificateRequest, \u0442\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0434 \u0441\u0432\u043e\u0438\u043c Finished \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c Certificate \u0438 CertificateVerify;<\/li>\n<li>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f (alert protocol). \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0438\u0435\u043d\u0442\/\u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0443 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c; \u0438\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0448\u0438\u0444\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c; \u0438\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u0430);<\/li>\n<li>\u0418 \u043c\u043d\u043e\u0433\u043e\u0435, \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/li>\n<\/ul>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f. \u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u2014 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c TLS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0433\u0443\u0433\u043b\u043e\u043c): \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c ClientHello, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0438 \u0442.\u0434.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import socket  # \u041d\u0430\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:     s.connect((\"google.com\", 443))          s.sendall(b'160303...') # \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0441 ClientHello     response_type = s.recv(1) # \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043e\u0442\u0432\u0435\u0442\u0430     if response_type == b'\\0x16':        # \u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u0437\u0430\u043f\u0438\u0441\u0438 \u2014 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f, \u043f\u0430\u0440\u0441\u0438\u043c ServerHello        ...     else: ... <\/code><\/pre>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u044b \u0442\u0430\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 <a href=\"https:\/\/www.wireshark.org\/\">Wireshark<\/a> \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u043c\u0438.  <\/div>\n<\/p><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e TLS, \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435. \u0410 \u043c\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u0441 TLS.<\/p>\n<hr\/>\n<p>  <\/p>\n<h4><font color=\"#454cee\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u044d\u0442\u043e:<\/font><\/p>\n<ul>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/764526\/\">\u0421\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u0441\u0430\u043c \u043f\u043e\u0433\u043e\u043d\u044f\u043b: \u041a\u0430\u043a \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b 3D-\u0433\u043e\u043d\u043a\u0438 \u00ab\u043d\u0430 \u0436\u0438\u0433\u0443\u043b\u044f\u0445\u00bb \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441 \u043d\u0443\u043b\u044f?<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/751606\/\">\u041f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0435\u043d\u043d\u043e\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/765198\/\">Starting Electronics: \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c \u043d\u0430 Arduino. \u0417\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 \u0443\u0440\u043e\u043a \u0438 \u0438\u0442\u043e\u0433\u0438<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/company\/timeweb\/blog\/579148\/\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430: \u043e\u0442 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0430 \u0434\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/765900\/\">\u0420\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c Sid Meier&#8217;s Civilization II<\/a><\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/timeweb.cloud\/vds-vps?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\"\/><\/a><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/764260\/\"> https:\/\/habr.com\/ru\/articles\/764260\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/nl\/az\/7a\/nlaz7alajlk9r8-4vbt7owncpje.png\" width=\"100%\" data-src=\"https:\/\/habrastorage.org\/webt\/nl\/az\/7a\/nlaz7alajlk9r8-4vbt7owncpje.png\"\/><\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0430\u0439\u0442\u0443 \u0431\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u043c, \u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0442 \u2014 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435\u043c \u0434\u0435\u0442\u044f\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0434\u0435\u0442\u0438 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u044f \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b? \u0410\u0445 \u0434\u0430, \u044d\u0442\u043e \u0436\u0435 \u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c TLS. <\/p>\n<p>  \u0412 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/752270\/\">\u043f\u0435\u0440\u0432\u043e\u0439<\/a> \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u00ab\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043a\u0430\u043a\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e, \u043a\u0442\u043e \u043a\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u00ab\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u00bb. \u0421\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 TLS: \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0435\u0442\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-356202","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/356202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=356202"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/356202\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=356202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=356202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=356202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}