{"id":482140,"date":"2026-06-02T16:58:27","date_gmt":"2026-06-02T16:58:27","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=482140"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=482140","title":{"rendered":"\u041c\u0438\u0441\u0441\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u0430: \u041a\u0430\u043a \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c Max \u0438 E2E"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042d\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0445\u043e\u0431\u0431\u0438-\u043f\u0440\u043e\u0435\u043a\u0442, \u0438\u043b\u0438 <em>\u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f.<\/em><\/p>\n<p>\u0418\u0434\u0435\u044f \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u0446\u0438\u0440\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f. \u041f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0413\u041e\u0421<em>\u0422<\/em>-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440, <abbr class=\"habraabbr\" title=\"\u0418 \u043f\u043e\u043b\u0438\u0432\u0430\u044e\u0442...\" data-title=\"&lt;p&gt;\u0418 \u043f\u043e\u043b\u0438\u0432\u0430\u044e\u0442...&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u043f\u043e\u043b\u0438\u0432\u0430\u043b\u0438\">\u043f\u043e\u043b\u0438\u0432\u0430\u043b\u0438<\/abbr> \u0435\u0433\u043e \u0447\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0441\u043a\u043e\u0447\u0438\u043b\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044c: <em>\u0412 Max \u043d\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/em>&#8230;<\/p>\n<p>\u0418 \u0442\u0443\u0442 \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0433\u043b\u0443\u043f\u0430\u044f \u0438\u0434\u0435\u044f: \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f? \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u043e\u0442, \u0447\u0442\u043e \u0443 Telegram \u0438 Signal, \u043d\u043e \u0441\u0430\u043c\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438 \u0437\u0430\u0432\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442, \u0440\u0430\u0437\u0432\u0435 \u043d\u0435\u0442?!<\/p>\n<p><strong>\u0421\u043f\u043e\u0439\u043b\u0435\u0440:<\/strong> APK \u0432\u0435\u0441\u0438\u0442 11 \u041c\u0411 \u043f\u0440\u043e\u0442\u0438\u0432 120 \u041c\u0411 \u0443 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u043d\u0435 \u0433\u0440\u0435\u0435\u0442 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c ok[.]ru \u0438 vk[.]ru<\/p>\n<h3>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<\/h3>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u2014 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0437\u0430 <abbr class=\"habraabbr\" title=\"(\u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432)\" data-title=\"&lt;p&gt;(\u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432)&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u043f\u0430\u0440\u0443\">\u043f\u0430\u0440\u0443<\/abbr> \u0432\u0435\u0447\u0435\u0440\u043e\u0432. \u041d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 Signal, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u043d\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u0432 \u0441\u0444\u0435\u0440\u0435 \u043a\u0438\u0431\u0435\u0440\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e: \u043a\u0430\u043a\u0430\u044f \u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043e <abbr class=\"habraabbr\" title=\"\u041d\u0443\u0436\u043d\u0430 \u0441\u0432\u0435\u0440\u043a\u0430 \u043a\u043b\u044e\u0447\u0435\u0439: Telegram \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 3-4 \u044d\u043c\u043e\u0434\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u04152\u0415, \u0434\u043b\u044f \u0441\u0432\u0435\u0440\u043a\u0438\" data-title=\"&lt;p&gt;\u041d\u0443\u0436\u043d\u0430 \u0441\u0432\u0435\u0440\u043a\u0430 \u043a\u043b\u044e\u0447\u0435\u0439: Telegram \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 3-4 \u044d\u043c\u043e\u0434\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u0432 \u04152\u0415, \u0434\u043b\u044f \u0441\u0432\u0435\u0440\u043a\u0438&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"MITM\">MITM<\/abbr>, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u0440\u0430\u0436\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 XSS (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0438\u0436\u0435). \u0414\u0430 \u0438 \u0442\u043e\u0432\u0430\u0440\u0438\u0449 \u043c\u0430\u0439\u043e\u0440, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0441\u044f \u0432\u0430\u0448\u0435\u043c\u0443 \u0447\u0430\u0442\u0443, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041a\u043e\u0440\u043e\u0447\u0435, \u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438.<\/p>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h3>\n<p>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u043e\u043d \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f \u043d\u0435 \u0443\u043c\u0435\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0449\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0441 \u043d\u0443\u043b\u044f.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/tauri-apps\/tauri\" rel=\"noopener noreferrer nofollow\">Tauri<\/a>. \u041f\u043e\u0447\u0435\u043c\u0443? \u042f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b 10+ \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 (\u043d\u0430 Java, Python, \u0434\u0430 \u0434\u0430\u0436\u0435 \u043d\u0430 Go) \u0438 \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c \u0438 \u043d\u0435\u043f\u0440\u0438\u0445\u043e\u0442\u043b\u0438\u0432\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u0442\u043e Tauri \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 WebView \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043d\u0430 JS. \u0414\u0430, \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0432 Electron&#8230; \u041d\u043e \u0431\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0414\u0430, \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a Svelte Native&#8230; \u041d\u043e&#8230; \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.<\/p>\n<p>\u0423 Tauri \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u043d\u0434\u043b\u0430, \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u0440\u0438\u0434\u0436 \u043a Rust \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 WebView. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u0432 Tauri \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0432\u0435\u0431-\u0441\u0442\u0435\u043a, \u043c\u043d\u0435 \u043f\u0440\u0438\u0433\u043b\u044f\u043d\u0443\u043b\u0441\u044f Svelte. \u0421\u043b\u0430\u0432\u0430 \u0431\u043e\u0433\u0443, \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0435 \u0432\u0437\u043b\u043e\u043c\u044b \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 npm \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438. <sub>\u042d\u0442\u043e\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043d\u0435 \u0441\u043f\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Tauri \/ Svelte!<\/sub><\/p>\n<h3>\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440?<\/h3>\n<p>\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <abbr class=\"habraabbr\" title=\"Non-root \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u041c\u0430\u043a\u0441\u0443\u0442\u043a\u0438\" data-title=\"&lt;p&gt;Non-root \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u041c\u0430\u043a\u0441\u0443\u0442\u043a\u0438&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"PCAPdroid\">PCAPdroid<\/abbr> \u0438\u043b\u0438 \u0432\u0435\u0431-\u0432\u0435\u0440\u0441\u0438\u044e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b \u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 user\u2011agent, \u0437\u0430 \u043d\u0438\u043c \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0435 <abbr class=\"habraabbr\" title=\"\u0415\u0441\u043b\u0438 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u044b, \u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e.\" data-title=\"&lt;p&gt;\u0415\u0441\u043b\u0438 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u044b, \u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e\">\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e<\/abbr>, \u0430 \u0432\u0430\u043c \u0432 \u043e\u0442\u0432\u0435\u0442: \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u0447\u0430\u0442\u044b, \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0435\u0431\u0441\u043e\u043a\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u043a\u0435\u0442\u0430 \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u043c \u043e\u0442\u0447\u0435\u0442\u0435 \u043f\u043e \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0443 \u043e\u0442 <em>koval01<\/em>:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/koval01\/b0baae9a9a0ee4f0d65c0d5377d9b243\" rel=\"noopener noreferrer nofollow\">https:\/\/gist.github.com\/koval01\/b0baae9a9a0ee4f0d65c0d5377d9b243<\/a><\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 \u044f \u043f\u0435\u0440\u0435\u043d\u0451\u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"https:\/\/github.com\/MaxApiTeam\/PyMax\" rel=\"noopener noreferrer nofollow\">pymax<\/a> \u043d\u0430 <em><sub>[blazingly fast!]<\/sub><\/em> Rust. \u0414\u043e\u0431\u0440\u044b\u0435 \u043b\u044e\u0434\u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043f\u043e \u043a\u0443\u0441\u043a\u0430\u043c \u0438 \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0430 Python, \u0438 \u0446\u0435\u043b\u044b\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 Komet!<\/p>\n<h3>\u041a\u0430\u0440\u043a\u0430\u0441 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043a\u043b\u0435\u043f\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0438 \u0432\u0445\u043e\u0434, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u0441\u0430\u043c\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0438\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0445\u043e\u0436\u0438\u043c \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u0430 \u0435\u0441\u043b\u0438 \u0432\u044b\u0436\u0438\u0432\u0443, \u0442\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 &#171;\u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u0438\u0432\u0430\u043d\u0438\u0435\u043c&#187; \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430).<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u0448\u0438\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0442\u0430\u043a\u0430\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0432\u043e\u0434\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 <img decoding=\"async\" class=\"formula inline\" source=\"&lt;form&gt;\" alt=\"&lt;form&gt;\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2e\/2e9\/2e94324d6ac4e75e129a3719dd293e87.svg\" width=\"80\" height=\"16\" data-width=\"10.126\" data-height=\"2.059\" data-vertical-align=\"-0.464\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2e\/2e9\/2e94324d6ac4e75e129a3719dd293e87.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2e\/2e9\/2e94324d6ac4e75e129a3719dd293e87.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u0436\u043c\u0451\u0442 \u043a\u043d\u043e\u043f\u043a\u0443<\/p>\n<\/li>\n<li>\n<p>WebView \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0431\u0435\u043a\u0435\u043d\u0434\u0443 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a: <code>invoke(\u201cstart_login\u201d, { phone })<\/code><\/p>\n<\/li>\n<li>\n<p>Rust-\u0431\u0435\u043a\u0435\u043d\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 Max<\/p>\n<\/li>\n<li>\n<p>Max \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 SMS \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440<\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<blockquote>\n<p><strong>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/strong> (\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043e)<\/p>\n<\/blockquote>\n<p>1) \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u043d\u0430 <code>src\/components\/Login.svelte<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c invoke():<\/p>\n<pre><code class=\"javascript\">const code = someForm.value;const checkCode = await invoke(\"check_code\", { code });<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>2) \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 <code>src-tauri\/commands.rs<\/code> \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435:<\/p>\n<pre><code class=\"rust\">#[tauri::command]pub async fn check_code(    state: State&lt;'_, AppState&gt;,    code: String,) -&gt; Result&lt;Value, String&gt; {    state        .client        .check_code(code)        .await        .map(|r| json!({ \"success\": true, \"payload\": r.payload }))        .map_err(|e| format!(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: {}\", e))}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>3) \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"rust\">pub async fn check_code(&amp;self, code: String) -&gt; ClientResult&lt;Response&gt; {  let payload = json!({    \"authTokenType\": \"CHECK_CODE\",    \"token\": self.TEMP_TOKEN,    \"code\": code  });    let resp = self.send_and_wait(Opcode.CHECK_CODE, payload, 0).await?;    Ok(resp)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u0440\u0435\u0439\u0442\u043e\u043c, \u0442\u043e \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0431\u044b\u043b \u0431\u044b \u0441\u043b\u0438\u044f\u043d \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u0438 \u043a\u043e\u0434\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u041d\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043b\u0443\u0447\u0448\u0435, \u0442.\u043a \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0430 \u0434\u043b\u044f \u043d\u0435\u0433\u043e Tauri \u043d\u0435 \u043d\u0443\u0436\u0435\u043d (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0447\u0442\u043e \u0437\u0430 \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0437\u0432\u043e\u043d\u043a\u0438!)<\/p>\n<\/div>\n<\/details>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0447\u0430\u0442\u043e\u0432 \u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <abbr class=\"habraabbr\" title=\"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0432 Svelte\" data-title=\"&lt;p&gt;\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0432 Svelte&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"Svelte Store\">Svelte Store<\/abbr> \u0438 \u043f\u043b\u0430\u0433\u0438\u043d <abbr class=\"habraabbr\" title=\"\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u0411\u0414)\" data-title=\"&lt;p&gt;\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u0411\u0414)&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"Tauri Store\">Tauri Store<\/abbr>. \u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0438\u0445 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f.<\/p>\n<h3>End-to-end \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c.<\/p>\n<p>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0434\u0432\u0430 \u0441\u043b\u043e\u044f. \u041a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0447\u0430\u0442\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00bb, \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0447\u0430\u0442\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, <code><em>\u041f\u0440\u0438\u0432\u0435\u0442!<\/em><\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>\u5927\u8c61<\/code> (\u0438 \u043d\u0435\u0442, \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439)<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438. <\/strong>\u041d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u043e \u0441\u0432\u043e\u0435 \u0434\u0435\u043b\u043e \u0434\u0435\u043b\u0430\u0435\u0442.<\/p>\n<pre><code class=\"javascript\">function obfuscate(text, language, compression = \"max\") {  const alphabet = ALPHABETS[language];  const level = compression === \"max\" ? 9 : 1;  const inputBytes = fflate.strToU8(text);  const compressedBytes = fflate.deflateSync(inputBytes, { level });  const payload = encodeBitPacked(compressedBytes, alphabet);  const marker = makeMarker(alphabet, 5);  return marker + payload;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <code>fflate<\/code> \u0441\u0436\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, <code>encodeBitPacked<\/code> \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b &lt;-&gt; \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u00bb, \u0430 <code>makeMarker<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u043c\u0435\u0442\u043a\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u0438\u0435\u043d\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0443 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0439. \u0414\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <abbr class=\"habraabbr\" title=\"\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445\" data-title=\"&lt;p&gt;\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"Ed25519\">Ed25519<\/abbr>, \u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u2014 <abbr class=\"habraabbr\" title=\"\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043f\u043e \u0414\u0438\u0444\u0444\u0438-\u0425\u0435\u043b\u043c\u0430\u043d\u0443 (ECDH)\" data-title=\"&lt;p&gt;\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043f\u043e \u0414\u0438\u0444\u0444\u0438-\u0425\u0435\u043b\u043c\u0430\u043d\u0443 (ECDH)&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"Curve25519\">Curve25519<\/abbr> \u0447\u0435\u0440\u0435\u0437 libsodium.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (content key), \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438 \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u0447\u0435\u0440\u0435\u0437 ChaCha20-Poly1305.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430 envelope encryption. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u0447\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438 <abbr class=\"habraabbr\" title=\"Elliptic Curve Diffie-Hellman\" data-title=\"&lt;p&gt;Elliptic Curve Diffie-Hellman&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"ECDH-\u043e\u0431\u043c\u0435\u043d\u0430\">ECDH-\u043e\u0431\u043c\u0435\u043d\u0430<\/abbr>. \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u043d\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f <\/strong>\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 <code>libsodium-wrappers<\/code><\/p>\n<pre><code class=\"javascript\">async function getEncrypted(senderId, identity, recipients, plaintext) {  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u0440\u0443 \u043a\u043b\u044e\u0447\u0435\u0439  const eph = sodium.crypto_box_keypair();  \/\/ \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f  const contentKey = sodium.randombytes_buf(    sodium.crypto_aead_chacha20poly1305_ietf_KEYBYTES,  );  \/\/ \u0426\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c (\u0432\u0435\u0440\u0441\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430)  const timestamp = Date.now();  const aad = sodium.from_string(`1|${senderId}|${timestamp}`);  \/\/ \u0428\u0438\u0444\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435  const { content_nonce, ciphertext } = encryptWithContentKey(    contentKey,    plaintext,    aad,  );  const wrappers = [];  \/\/ \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0448\u0438\u0444\u0440\u0443\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e  for (const r of recipients) {    const r_curve = base64UrlToBuf(r.c);    \/\/ ECDH (\u043e\u0431\u043c\u0435\u043d \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u043c)    const shared = sodium.crypto_scalarmult(eph.privateKey, r_curve);    \/\/ \u041a\u0435\u043a (key encryption key)    const kek = deriveKek(shared, CONTEXT_WRAP);    const { wrapped, wrap_nonce } = wrapContentKey(kek, contentKey);    wrappers.push({      id,      wrapped,      nonce    });  }  \/\/ \u041f\u0430\u043a\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d  const envelope = {    senderId,    ephemeral_pub,    content_nonce,    cipherText,    wrappers,    timestamp  };  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c  const bytesForSign = canonicalizeForSign(envelope);  const sig = signEnvelope(base64UrlToBuf(identity.eds), bytesForSign);  \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447  envelope.signature = bufToBase64Url(sig);  envelope.sender_ed25519_pk = identity.edp;  return envelope;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<blockquote>\n<p><strong>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435<br \/><em>         \u2193<\/em><br \/>ChaCha20-Poly1305<br \/><em>         \u2193<\/em><br \/>\u0417\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 payload<br \/><em>         \u2193<\/em><br \/>Content Key \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f <u>\u043a\u0430\u0436\u0434\u043e\u0433\u043e<\/u> \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f<\/strong><\/p>\n<\/blockquote>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f Signal \u0437\u0434\u0435\u0441\u044c \u0435\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e. \u0412 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0435 \u043d\u0435\u0442 <abbr class=\"habraabbr\" title=\"\u0421\u043b\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u044e\u0447 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.\" data-title=\"&lt;p&gt;\u0421\u043b\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u044e\u0447 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"Double Ratchet\">Double Ratchet<\/abbr>, \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u0441\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 WebView \u0447\u0435\u0440\u0435\u0437 JavaScript, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 XSS \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u043e\u043c\u0430\u0435\u0442 \u0432\u0441\u044e \u0437\u0430\u0449\u0438\u0442\u0443.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0443\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u0434\u043b\u044f\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u00ab\u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u043e\u0432\u00bb.<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0442\u043e \u0441 \u043a\u0435\u043c \u0438 \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0434\u0430\u0436\u0435 <abbr class=\"habraabbr\" title=\"\u042d\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u044e\u0442 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b\" data-title=\"&lt;p&gt;\u042d\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u044e\u0442 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\">\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/abbr> \u0447\u0435\u0440\u0435\u0437 \u043b\u0435\u0442 \u044d\u0434\u0430\u043a 5\u201310.<\/p>\n<p>\u0415\u0441\u043b\u0438 Max \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0441\u043d\u043e\u0441\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b, \u0442\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u043c\u044b\u0441\u043b \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u0433\u0430\u043d\u043e\u0433\u0440\u0430\u0444\u0438\u044e.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u043e\u043c\u0430 \u00ab\u0412\u043e\u0439\u043d\u0430 \u0438 \u041c\u0438\u0440\u00bb, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 (\u0448\u0438\u0444\u0440\u0443\u044f \u0432 \u043d\u0438\u0445 \u0431\u0438\u0442\u044b). \u0418\u043b\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0447\u0430\u0441\u0442\u043e\u0442 \u0432 opus-\u043f\u043e\u0442\u043e\u043a\u0435 \u0437\u0432\u043e\u043d\u043a\u043e\u0432. \u0418\u043b\u0438 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0443 <abbr class=\"habraabbr\" title=\"Least Significant Bit, \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439\" data-title=\"&lt;p&gt;Least Significant Bit, \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"LSB\">LSB<\/abbr> \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445.<\/p>\n<h3>\u0422\u0430\u043a, \u0430 \u0447\u0442\u043e \u0441\u043e \u0437\u0432\u043e\u043d\u043a\u0430\u043c\u0438?<\/h3>\n<p>\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0430\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0432\u043e\u043d\u043a\u0438.<\/p>\n<p>\u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0437\u0430\u0434\u0443\u043c\u043a\u0430, \u043d\u043e \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435: \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 ECDH-\u043e\u0431\u043c\u0435\u043d, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043e\u0431\u0449\u0438\u0439 session key, \u0430\u0443\u0434\u0438\u043e \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Opus \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0443\u0434\u0438\u043e\u0444\u0440\u0435\u0439\u043c \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f ChaCha20-Poly1305.<\/p>\n<p>\u0418 \u0443\u0436\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0432\u043e\u043d\u043a\u0430 \u043a\u043b\u044e\u0447 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u043e\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u041c\u0430\u0445 \u0432\u0438\u0434\u0435\u043b \u0431\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 UDP\/WebRTC-\u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u042f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0432\u043e\u043d\u043a\u0430 (\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u0440\u0430\u043d\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c <abbr class=\"habraabbr\" title=\"Packet loss concealment \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b\" data-title=\"&lt;p&gt;Packet loss concealment \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\">\u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/abbr>.<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u0437\u0432\u043e\u043d\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u041a\u043b\u0438\u0435\u043d\u0442 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u00ab\u0437\u0432\u043e\u043d\u0438\u0442\u00bb \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0432\u043d\u0435 \u0427\u0435\u0431\u0443\u0440\u043d\u0435\u0442\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u0441\u0442\u0440\u0430\u0445\u0430 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0418\u0432\u0430\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0435\u0435\u0432\u0430.<\/p>\n<p>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0443 <abbr class=\"habraabbr\" title=\"\u0411\u043b\u0438\u043d, \u0430 \u044f \u0434\u0435\u043b\u0430\u043b \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u0435\u0449\u0451 \u0441 \u0430\u0432\u0433\u0443\u0441\u0442\u0430. \u041e\u043f\u0435\u0440\u0435\u0434\u0438\u043b\u0438!\" data-title=\"&lt;p&gt;\u0411\u043b\u0438\u043d, \u0430 \u044f \u0434\u0435\u043b\u0430\u043b \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u0435\u0449\u0451 \u0441 \u0430\u0432\u0433\u0443\u0441\u0442\u0430. \u041e\u043f\u0435\u0440\u0435\u0434\u0438\u043b\u0438!&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;\" data-abbr=\"\u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e\">\u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e<\/abbr> \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u044b\u0435 \u0440\u0443-\u0441\u0435\u0440\u0432\u0438\u0441\u044b:<br \/><a href=\"https:\/\/github.com\/kulikov0\/whitelist-bypas\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/kulikov0\/whitelist-bypass<\/a><\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0441\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e \u044d\u043a\u0440\u0430\u043d\u0430 (\u0445\u043e\u0442\u044f \u044f \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432 \u041c\u0430\u0445\u0435 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c)<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0451 \u0443\u0436\u0435 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0447\u0430\u0442. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 NAT traversal, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 MITM.<\/p>\n<h3>Safe Payload \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/h3>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043a\u043e\u0433\u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Poly1305, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u00ab\u0442\u0443\u043d\u043d\u0435\u043b\u044c\u00bb \u043f\u043e\u0432\u0435\u0440\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430.<\/p>\n<p>\u0412 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0444\u043e\u043d\u044b \u0447\u0430\u0442\u043e\u0432,<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0430\u043a\u0446\u0438\u0438 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u044b,<\/p>\n<\/li>\n<li>\n<p>\u0441\u0430\u043c\u043e\u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0442\u0438\u043f\u044b \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439,<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0438\u043a\u0435\u0440\u044b \u0438 emoji packs,<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u0430\u043a\u043e\u0439 payload \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 blob, \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044f \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 E2E \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u0432 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0441\u0432\u043e\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u043d\u0438\u044f \u043e \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 Android \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044f\u0436\u0435\u043b\u044b \u0438 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u044b \u0441\u0442\u0430\u043b\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b.<\/p>\n<p>\u041f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043d\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 payload \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043b\u0438\u0435\u043d\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0432\u043e\u043d\u043a\u0430\u043c\u0438, \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u043c\u0438. \u0418, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u0442\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u043e\u0433\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 (\u043a\u0430\u043a \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445 AuyGram \/ exteraGram), \u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0431\u0443\u0434\u0435\u0442, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443. \u0412\u043f\u0435\u0440\u0435\u0434, \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0435 \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435!<\/p>\n<blockquote>\n<p><strong><sub>P.S.<\/sub><\/strong><sub> \u0417\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c? \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u043c\u043e\u0449\u0438 \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 <\/sub><a href=\"https:\/\/github.com\/me0wkie\/maxplus\" rel=\"noopener noreferrer nofollow\"><sub>\u0442\u0443\u0442<\/sub><\/a><sub>.<\/sub><\/p>\n<\/blockquote>\n<\/div>\n<p>\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\/1042848\/\">https:\/\/habr.com\/ru\/articles\/1042848\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0445\u043e\u0431\u0431\u0438-\u043f\u0440\u043e\u0435\u043a\u0442, \u0438\u043b\u0438 \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f.\u0418\u0434\u0435\u044f \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u0446\u0438\u0440\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f. \u041f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0413\u041e\u0421\u0422-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440, \u043f\u043e\u043b\u0438\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0447\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0441\u043a\u043e\u0447\u0438\u043b\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044c: \u0412 Max \u043d\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f&#8230;\u0418 \u0442\u0443\u0442 \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0433\u043b\u0443\u043f\u0430\u044f \u0438\u0434\u0435\u044f: \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f? \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u043e\u0442, \u0447\u0442\u043e \u0443 Telegram \u0438 Signal, \u043d\u043e \u0441\u0430\u043c\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438 \u0437\u0430\u0432\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442, \u0440\u0430\u0437\u0432\u0435 \u043d\u0435\u0442?!\u0421\u043f\u043e\u0439\u043b\u0435\u0440: APK \u0432\u0435\u0441\u0438\u0442 11 \u041c\u0411 \u043f\u0440\u043e\u0442\u0438\u0432 120 \u041c\u0411 \u0443 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u043d\u0435 \u0433\u0440\u0435\u0435\u0442 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c ok[.]ru \u0438 vk[.]ru\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440\u0418\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u2014 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0437\u0430 \u043f\u0430\u0440\u0443 \u0432\u0435\u0447\u0435\u0440\u043e\u0432. \u041d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 Signal, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u043d\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u0432 \u0441\u0444\u0435\u0440\u0435 \u043a\u0438\u0431\u0435\u0440\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e: \u043a\u0430\u043a\u0430\u044f \u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043e MITM, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043a\u0440\u0430\u0436\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 XSS (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0438\u0436\u0435). \u0414\u0430 \u0438 \u0442\u043e\u0432\u0430\u0440\u0438\u0449 \u043c\u0430\u0439\u043e\u0440, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0441\u044f \u0432\u0430\u0448\u0435\u043c\u0443 \u0447\u0430\u0442\u0443, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041a\u043e\u0440\u043e\u0447\u0435, \u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438.\u0412\u044b\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u043e\u043d \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439, \u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f \u043d\u0435 \u0443\u043c\u0435\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0449\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0441 \u043d\u0443\u043b\u044f.\u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f Tauri. \u041f\u043e\u0447\u0435\u043c\u0443? \u042f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b 10+ \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 (\u043d\u0430 Java, Python, \u0434\u0430 \u0434\u0430\u0436\u0435 \u043d\u0430 Go) \u0438 \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c \u0438 \u043d\u0435\u043f\u0440\u0438\u0445\u043e\u0442\u043b\u0438\u0432\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442.\u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u0442\u043e Tauri \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 WebView \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043d\u0430 JS. \u0414\u0430, \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0432 Electron&#8230; \u041d\u043e \u0431\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0414\u0430, \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a Svelte Native&#8230; \u041d\u043e&#8230; \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.\u0423 Tauri \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u043d\u0434\u043b\u0430, \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u0440\u0438\u0434\u0436 \u043a Rust \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 WebView. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u0432 Tauri \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0432\u0435\u0431-\u0441\u0442\u0435\u043a, \u043c\u043d\u0435 \u043f\u0440\u0438\u0433\u043b\u044f\u043d\u0443\u043b\u0441\u044f Svelte. \u0421\u043b\u0430\u0432\u0430 \u0431\u043e\u0433\u0443, \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0435 \u0432\u0437\u043b\u043e\u043c\u044b \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 npm \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438. \u042d\u0442\u043e\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043d\u0435 \u0441\u043f\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Tauri \/ Svelte!\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440?\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 PCAPdroid \u0438\u043b\u0438 \u0432\u0435\u0431-\u0432\u0435\u0440\u0441\u0438\u044e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b \u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 user\u2011agent, \u0437\u0430 \u043d\u0438\u043c \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 \u0432\u0430\u043c \u0432 \u043e\u0442\u0432\u0435\u0442: \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u0447\u0430\u0442\u044b, \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412\u0435\u0431\u0441\u043e\u043a\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u043a\u0435\u0442\u0430 \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u043c \u043e\u0442\u0447\u0435\u0442\u0435 \u043f\u043e \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0443 \u043e\u0442 koval01:https:\/\/gist.github.com\/koval01\/b0baae9a9a0ee4f0d65c0d5377d9b243\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 \u044f \u043f\u0435\u0440\u0435\u043d\u0451\u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 pymax \u043d\u0430 [blazingly fast!] Rust. \u0414\u043e\u0431\u0440\u044b\u0435 \u043b\u044e\u0434\u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043f\u043e \u043a\u0443\u0441\u043a\u0430\u043c \u0438 \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0430 Python, \u0438 \u0446\u0435\u043b\u044b\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 Komet!\u041a\u0430\u0440\u043a\u0430\u0441 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043a\u043b\u0435\u043f\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0438 \u0432\u0445\u043e\u0434, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u0441\u0430\u043c\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0438\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0445\u043e\u0436\u0438\u043c \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u0430 \u0435\u0441\u043b\u0438 \u0432\u044b\u0436\u0438\u0432\u0443, \u0442\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 &#171;\u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u0438\u0432\u0430\u043d\u0438\u0435\u043c&#187; \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430).\u0418\u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u0448\u0438\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0442\u0430\u043a\u0430\u044f:\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0432\u043e\u0434\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432  \u0438 \u0436\u043c\u0451\u0442 \u043a\u043d\u043e\u043f\u043a\u0443WebView \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0431\u0435\u043a\u0435\u043d\u0434\u0443 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a: invoke(\u201cstart_login\u201d, { phone })Rust-\u0431\u0435\u043a\u0435\u043d\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 MaxMax \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 SMS \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043e)1) \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u043a\u043d\u0430 src\/components\/Login.svelte \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c invoke():const code = someForm.value;const checkCode = await invoke(&#171;check_code&#187;, { code });2) \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 src-tauri\/commands.rs \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435:#[tauri::command]pub async fn check_code(    state: State&lt;&#8216;_, AppState&gt;,    code: String,) -&gt; Result&lt;Value, String&gt; {    state        .client        .check_code(code)        .await        .map(|r| json!({ &#171;success&#187;: true, &#171;payload&#187;: r.payload }))        .map_err(|e| format!(&#171;\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: {}&#187;, e))}3) \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:pub async fn check_code(&amp;self, code: String) -&gt; ClientResult&lt;Response&gt; {  let payload = json!({    &#171;authTokenType&#187;: &#171;CHECK_CODE&#187;,    &#171;token&#187;: self.TEMP_TOKEN,    &#171;code&#187;: code  });    let resp = self.send_and_wait(Opcode.CHECK_CODE, payload, 0).await?;    Ok(resp)}\u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u0440\u0435\u0439\u0442\u043e\u043c, \u0442\u043e \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0431\u044b\u043b \u0431\u044b \u0441\u043b\u0438\u044f\u043d \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u0438 \u043a\u043e\u0434\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435.\u041d\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043b\u0443\u0447\u0448\u0435, \u0442.\u043a \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0430 \u0434\u043b\u044f \u043d\u0435\u0433\u043e Tauri \u043d\u0435 \u043d\u0443\u0436\u0435\u043d (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0447\u0442\u043e \u0437\u0430 \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0437\u0432\u043e\u043d\u043a\u0438!)\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b.\u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0447\u0430\u0442\u043e\u0432 \u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b Svelte Store \u0438 \u043f\u043b\u0430\u0433\u0438\u043d Tauri Store. \u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0438\u0445 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f.End-to-end \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c.\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0434\u0432\u0430 \u0441\u043b\u043e\u044f. \u041a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0447\u0430\u0442\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00bb, \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0447\u0430\u0442\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u041f\u0440\u0438\u0432\u0435\u0442! \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u5927\u8c61 (\u0438 \u043d\u0435\u0442, \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439)\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438. \u041d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u043e \u0441\u0432\u043e\u0435 \u0434\u0435\u043b\u043e \u0434\u0435\u043b\u0430\u0435\u0442.function obfuscate(text, language, compression = &#171;max&#187;) {  const alphabet = ALPHABETS[language];  const level = compression === &#171;max&#187; ? 9 : 1;  const inputBytes = fflate.strToU8(text);  const compressedBytes = fflate.deflateSync(inputBytes, { level });  const payload = encodeBitPacked(compressedBytes, alphabet);  const marker = makeMarker(alphabet, 5);  return marker + payload;}\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 fflate \u0441\u0436\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, encodeBitPacked \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b &lt;-&gt; \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u00bb, \u0430 makeMarker \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u043c\u0435\u0442\u043a\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u0438\u0435\u043d\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0443 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0439. \u0414\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Ed25519, \u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u2014 Curve25519 \u0447\u0435\u0440\u0435\u0437 libsodium.\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (content key), \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438 \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 \u0447\u0435\u0440\u0435\u0437 ChaCha20-Poly1305.\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430 envelope encryption. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u0447\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438 ECDH-\u043e\u0431\u043c\u0435\u043d\u0430. \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u043d\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 libsodium-wrappersasync function getEncrypted(senderId, identity, recipients, plaintext) {  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u0440\u0443 \u043a\u043b\u044e\u0447\u0435\u0439  const eph = sodium.crypto_box_keypair();  \/\/ \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f  const contentKey = sodium.randombytes_buf(    sodium.crypto_aead_chacha20poly1305_ietf_KEYBYTES,  );  \/\/ \u0426\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c (\u0432\u0435\u0440\u0441\u0438\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043a\u0430)  const timestamp = Date.now();  const aad = sodium.from_string(`1|${senderId}|${timestamp}`);  \/\/ \u0428\u0438\u0444\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435  const { content_nonce, ciphertext } = encryptWithContentKey(    contentKey,    plaintext,    aad,  );  const wrappers = [];  \/\/ \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0448\u0438\u0444\u0440\u0443\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e  for (const r of recipients) {    const r_curve = base64UrlToBuf(r.c);    \/\/ ECDH (\u043e\u0431\u043c\u0435\u043d \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u043c)    const shared = sodium.crypto_scalarmult(eph.privateKey, r_curve);    \/\/ \u041a\u0435\u043a (key encryption key)    const kek = deriveKek(shared, CONTEXT_WRAP);    const { wrapped, wrap_nonce } = wrapContentKey(kek, contentKey);    wrappers.push({      id,      wrapped,      nonce    });  }  \/\/ \u041f\u0430\u043a\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d  const envelope = {    senderId,    ephemeral_pub,    content_nonce,    cipherText,    wrappers,    timestamp  };  \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c  const bytesForSign = canonicalizeForSign(envelope);  const sig = signEnvelope(base64UrlToBuf(identity.eds), bytesForSign);  \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447  envelope.signature = bufToBase64Url(sig);  envelope.sender_ed25519_pk = identity.edp;  return envelope;}\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435         \u2193ChaCha20-Poly1305         \u2193\u0417\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 payload         \u2193Content Key \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f\u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f.\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f Signal \u0437\u0434\u0435\u0441\u044c \u0435\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e. \u0412 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0435 \u043d\u0435\u0442 Double Ratchet, \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u0441\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 WebView \u0447\u0435\u0440\u0435\u0437 JavaScript, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 XSS \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u043e\u043c\u0430\u0435\u0442 \u0432\u0441\u044e \u0437\u0430\u0449\u0438\u0442\u0443.\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0443\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u0434\u043b\u044f\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u00ab\u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u043e\u0432\u00bb.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0421\u0435\u0440\u0432\u0435\u0440 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0442\u043e \u0441 \u043a\u0435\u043c \u0438 \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0434\u0430\u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043b\u0435\u0442 \u044d\u0434\u0430\u043a 5\u201310.\u0415\u0441\u043b\u0438 Max \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0441\u043d\u043e\u0441\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b, \u0442\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u043c\u044b\u0441\u043b \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u0433\u0430\u043d\u043e\u0433\u0440\u0430\u0444\u0438\u044e.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u043e\u043c\u0430 \u00ab\u0412\u043e\u0439\u043d\u0430 \u0438 \u041c\u0438\u0440\u00bb, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 (\u0448\u0438\u0444\u0440\u0443\u044f \u0432 \u043d\u0438\u0445 \u0431\u0438\u0442\u044b). \u0418\u043b\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0447\u0430\u0441\u0442\u043e\u0442 \u0432 opus-\u043f\u043e\u0442\u043e\u043a\u0435 \u0437\u0432\u043e\u043d\u043a\u043e\u0432. \u0418\u043b\u0438 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0443 LSB \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445.\u0422\u0430\u043a, \u0430 \u0447\u0442\u043e \u0441\u043e \u0437\u0432\u043e\u043d\u043a\u0430\u043c\u0438?\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0430\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u0437\u0432\u043e\u043d\u043a\u0438.\u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0437\u0430\u0434\u0443\u043c\u043a\u0430, \u043d\u043e \u0441\u0445\u0435\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435: \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 ECDH-\u043e\u0431\u043c\u0435\u043d, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043e\u0431\u0449\u0438\u0439 session key, \u0430\u0443\u0434\u0438\u043e \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Opus \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0443\u0434\u0438\u043e\u0444\u0440\u0435\u0439\u043c \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f ChaCha20-Poly1305.\u0418 \u0443\u0436\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0432\u043e\u043d\u043a\u0430 \u043a\u043b\u044e\u0447 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u043e\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u041c\u0430\u0445 \u0432\u0438\u0434\u0435\u043b \u0431\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 UDP\/WebRTC-\u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u042f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0432\u043e\u043d\u043a\u0430 (\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-482140","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/482140","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=482140"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/482140\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=482140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=482140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=482140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}