{"id":394961,"date":"2024-06-29T11:55:47","date_gmt":"2024-06-29T11:55:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=394961"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=394961","title":{"rendered":"<span>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u0430 \u0428\u0430\u043c\u0438\u0440\u0430 \u0432 Hashicorp Vault<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0428\u0430\u043c\u0438\u0440\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u0432 Hashicorp vault. Hashicorp &#8212; \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b &#8212; terraform, consul, nomand, vault. Vault &#8212; \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043f\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043b-\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0445\u0435\u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u0428\u0430\u043c\u0438\u0440\u0430.<\/p>\n<ul>\n<li>\n<p> <a href=\"https:\/\/github.com\/hashicorp\/vault\/tree\/main\/shamir\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/valli0x\/shamir-description-ru\/blob\/main\/shamir\/shamir.go\" rel=\"noopener noreferrer nofollow\"> \u0424\u0430\u0439\u043b \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c<\/a><\/p>\n<\/li>\n<\/ul>\n<p>E\u0441\u0442\u044c 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; Split() \u0438 Combine(). \u0420\u0430\u0437\u0431\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0447\u0430\u0441\u0442\u0435\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u044e\u0447.<\/p>\n<h2>1. Split()<\/h2>\n<p>\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u0432 (<a href=\"https:\/\/habr.com\/ru\/post\/431392\" rel=\"noopener noreferrer nofollow\">\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 &#8212; \u0440\u0430\u0437\u0434\u0435\u043b \u041f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f<\/a>). \u042f \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0441\u0445\u0435\u043c\u0443 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0411\u0430\u0439\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0438\u0441\u043b\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 42. \u0420\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 2 \u043a\u043b\u044e\u0447\u0430 \u0441 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u043c \u043a\u043e\u043b-\u0432\u043e\u043c \u0432 2.<\/p>\n<ol>\n<li>\n<p>\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f(\u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d \u0438\u043b\u0438 \u043f\u043e\u043b\u0438\u043d\u043e\u043c) 1 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c y <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a1c\/07c\/486\/a1c07c48635dd8276a8e27cea24597d9.svg\" width=\"11\" height=\"12\"\/>, \u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0448\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c &#8212; 2x + 42 = y.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 x \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c y. 1 \u0442\u043e\u0447\u043a\u0430 &#8212; (x=1, y=44), 2 \u0442\u043e\u0447\u043a\u0430 &#8212; (x=2, y=46).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0437\u0431\u0438\u043b\u0438 \u0431\u0430\u0439\u0442 \u043d\u0430 2 \u043a\u043b\u044e\u0447\u0430 [1,44], [2,46]. \u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0431\u0430\u0439\u0442? \u0412 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 &#8212; \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430 &#8212; \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u043e\u0447\u043a\u0430\u043c. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f &#8212; <a href=\"https:\/\/planetcalc.ru\/8692\" rel=\"noopener noreferrer nofollow\">https:\/\/planetcalc.ru\/8692<\/a><\/p>\n<\/li>\n<li>\n<p>\u0412\u0432\u0435\u043b\u0438 \u043d\u0430 <a href=\"http:\/\/planetcalc.ru\/8692\" rel=\"noopener noreferrer nofollow\">planetcalc.ru\/8692<\/a>  2 \u0442\u043e\u0447\u043a\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c 2x+42=y. \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d \u043d\u0430\u0439\u0442\u0438 \u043b\u0435\u0433\u043a\u043e, \u043f\u0440\u0438 x = 0, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3d1\/633\/496\/3d1633496d83751b62392156dd7bcc1c.svg\" width=\"10\" height=\"16\"\/> \u0440\u0430\u0432\u0435\u043d \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443. \u0412 \u0438\u0442\u043e\u0433\u0435 2*0+42=42, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0430\u0448 \u0431\u0430\u0439\u0442 &#8212; 42.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e x \u0438 y. \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0430 1 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u043e 2 \u0442\u043e\u0447\u043a\u0438, \u0434\u043b\u044f 2 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 &#8212; 3. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0432 \u0433\u0440\u0430\u0444\u0438\u043a 2x + 42=y, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u0430\u044f, \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 2 \u0442\u043e\u0447\u0435\u043a. \u041f\u043e\u043b\u0438\u043d\u043e\u043c 2 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u0431\u043e\u043b\u0430, \u043d\u0443\u0436\u043d\u043e \u0443\u0436\u0435 3 (\u0447\u0435\u0440\u0435\u0437 2 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043f\u0430\u0440\u0430\u0431\u043e\u043b).<\/p>\n<\/li>\n<li>\n<p>\u0422.\u0435. \u0434\u043b\u044f \u043f\u043e\u0440\u043e\u0433\u0430 \u0432 2 \u043a\u043b\u044e\u0447\u0430 &#8212; \u0431\u0435\u0440\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d 1 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u0441 \u043f\u043e\u0440\u043e\u0433\u043e\u043c 3 &#8212; \u043f\u043e\u043b\u0438\u043d\u043e\u043c 2 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u0442.\u0434. \u0421\u0430\u043c\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e(\u043d\u0443, \u043a\u0430\u043a \u0438 \u0442\u043e\u0447\u0435\u043a), \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u0440\u043e\u0433\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0412 hashicorp vault \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0431\u0430\u0439\u0442\u0430\u043c \u043a\u043b\u044e\u0447\u0430, \u0441\u0442\u0440\u043e\u044f\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0441 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e &#8212; \u043f\u043e\u0440\u043e\u0433 \u043c\u0438\u043d\u0443\u0441 1 \u0438 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7fb\/423\/ddf\/7fb423ddf870c60a333c39dd802a19e0.svg\" width=\"10\" height=\"16\"\/>\u043f\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/753\/767\/3cd\/7537673cd4c19bb8a045b07ab3c71822.svg\" width=\"11\" height=\"12\"\/>(\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0432\u043e\u0439 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/13d\/187\/ebf\/13d187ebff60fb630bc0681bf4310251.svg\" width=\"11\" height=\"12\"\/>\u043d\u0430 \u043a\u043e\u043d\u0446\u0435). <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/355\/9c4\/cfe\/3559c4cfecdb48fd408d969fa6fce863.svg\" width=\"11\" height=\"12\"\/> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043b\u044e\u0447\u0435 \u043e\u0434\u0438\u043d.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a3b\/f5c\/d2b\/a3bf5cd2b8c5d0ae7ad4b6a9b0a3567b.png\" alt=\"\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 hashicorp vault(1 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430)\" title=\"\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 hashicorp vault(1 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430)\" width=\"942\" height=\"437\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a3b\/f5c\/d2b\/a3bf5cd2b8c5d0ae7ad4b6a9b0a3567b.png\"\/><figcaption>\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 hashicorp vault(1 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430)<\/figcaption><\/figure>\n<p>\u0417\u043d\u0430\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c 2 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f a1 + b = 44, a2 + b = 46 \u0438 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0448\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 10 \u0441\u0442\u0435\u043f\u0435\u043d\u0438, \u0432\u0441\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 n \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u043b\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/097\/175\/443\/0971754431ba9ecd2eb4556de2e6831e.svg\" width=\"10\" height=\"16\"\/> \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0445\u0435\u043c\u0443 \u0413\u043e\u0440\u043d\u0435\u0440\u0430 &#8212; \u0442\u043e\u0436\u0435 \u0447\u0443\u0442\u044c \u043b\u0435\u0433\u0447\u0435 \u0447\u0435\u043c \u0432 \u043b\u043e\u0431. \u0420\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u0434\u0430 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044e Split() \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438: <strong>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438 \u0441\u0430\u043c\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u043a\u043b\u044e\u0447\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439.<\/strong><\/p>\n<p><em>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/em>: secret &#8212; \u044d\u0442\u043e \u043d\u0430\u0448 \u043a\u043b\u044e\u0447 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, parts &#8212; \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439, threshold &#8212; \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043d\u0430\u0448\u0438 \u043a\u043b\u044e\u0447\u0438 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code class=\"go\">func Split(secret []byte, parts, threshold int) ([][]byte, error) <\/code><\/pre>\n<p><strong>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f<\/strong>:  <\/p>\n<ol>\n<li>\n<p>\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 255. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u0442.\u0435. 256 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439(\u043e\u0442 0 \u0434\u043e 255) \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f, \u0442.\u043a. \u043f\u0440\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 x \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043a\u043b\u044e\u0447\u0435\u0439, \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df0\/635\/e89\/df0635e89f606b7aca0a6a0517ffff27.svg\" width=\"10\" height=\"16\"\/> \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u043e\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u043e\u0433 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u043e\u0433 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 255.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u044e\u0447 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"go\">if parts &lt; threshold { return nil, fmt.Errorf(\"parts cannot be less than threshold\") } if parts > 255 { return nil, fmt.Errorf(\"parts cannot exceed 255\") } if threshold &lt; 2 { return nil, fmt.Errorf(\"threshold must be at least 2\") } if threshold > 255 { return nil, fmt.Errorf(\"threshold cannot exceed 255\") } if len(secret) == 0 { return nil, fmt.Errorf(\"cannot split an empty secret\") }<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043b\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0441\u043b\u0430\u0439\u0441 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 x. <a href=\"https:\/\/github.com\/hashicorp\/vault\/commit\/b4602fc2443dc3de451cd9aeac7c4d79390adbd8\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442 0 \u0434\u043e \u043a\u043e\u043b-\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0439.<\/a> \u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 &#8212; \u044f \u0432\u0438\u0434\u0435\u043b \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u043d\u0430 rust \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043b\u044e\u0447\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/add\/585\/208\/add585208fdd0b2556745594ef21309c.svg\" width=\"11\" height=\"12\"\/>. \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0432\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>\u0421\u043b\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441 \u043a\u043b\u044e\u0447 + 1 \u0431\u0430\u0439\u0442 \u0434\u043b\u044f x \u043d\u0430 \u043a\u043e\u043d\u0446\u0435. \u0421\u0442\u0430\u0432\u0438\u043c x \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043b\u0430\u0439\u0441\u0430.<\/p>\n<pre><code class=\"go\">mathrand.Seed(time.Now().UnixNano()) xCoordinates := mathrand.Perm(255)           \/\/ \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0441\u0430 \u0442\u043e\u0447\u0435\u043a x  out := make([][]byte, parts) for idx := range out { out[idx] = make([]byte, len(secret)+1)  \/\/\u0441\u043b\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0435\u0439 + \u0431\u0430\u0439\u0442 \u0434\u043b\u044f x out[idx][len(secret)] = uint8(xCoordinates[idx]) + 1 \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c x }                                                        \/\/ \u043d\u0430 \u043a\u043e\u043d\u0446\u0430\u0445 \u043a\u043b\u044e\u0447\u0435\u0439<\/code><\/pre>\n<p><strong>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/strong> \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u043a\u043b\u044e\u0447\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0441\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u043f\u043e\u0440\u043e\u0433-1 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0433\u0434\u0435 \u043d\u0430\u0448 \u0431\u0430\u0439\u0442 \u044d\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0438 x \u0441 \u043a\u043e\u043d\u0446\u043e\u0432 \u043a\u043b\u044e\u0447\u0435\u0439(\u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f9\/c82\/988\/8f9c829887a8d77c6c56042f2f6a7370.svg\" width=\"11\" height=\"12\"\/>\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0435\u0433\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/458\/359\/f2b\/458359f2bce9765961de45a292d16226.svg\" width=\"10\" height=\"16\"\/>. \u041e\u0434\u0438\u043d \u043a\u043b\u044e\u0447 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f0b\/d34\/b0b\/f0bd34b0b5054176dae15e906e61dc83.svg\" width=\"11\" height=\"12\"\/>\u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c26\/8bc\/7c6\/c268bc7c6a09a9da8d8e38a8360dd7c9.svg\" width=\"10\" height=\"16\"\/> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>1. \u0421\u0442\u0440\u043e\u0438\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0434\u043b\u044f \u0431\u0430\u0439\u0442\u0430 &#8212; \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0431\u0430\u0439\u0442 \u0438 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430(\u043f\u043e\u0440\u043e\u0433-1) \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>makePolynomial<\/code><\/p>\n<p>2. \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0432\u043e\u0439 \u0431\u0430\u0439\u0442 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 x(\u043e\u043d \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430) &#8212; <code>evaluate<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c <code>makePolynomial<\/code><strong> <\/strong><code>\u0438<\/code><strong> <\/strong><code>evaluate<\/code><strong> <\/strong><\/p>\n<pre><code class=\"go\">for idx, val := range secret { p, err := makePolynomial(val, uint8(threshold-1)) \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c if err != nil { return nil, fmt.Errorf(\"failed to generate polynomial: %w\", err) }  for i := 0; i &lt; parts; i++ {        \/\/ \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 x := uint8(xCoordinates[i]) + 1 \/\/ \u0431\u0435\u0440\u0435\u043c x \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 y := p.evaluate(x)              \/\/ \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c y \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 out[i][idx] = y                 \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043b\u044e\u0447\u0435 y } }<\/code><\/pre>\n<p><strong><em>makePolynomial<\/em><\/strong> &#8212; intercept \u043d\u0430\u0448 \u0431\u0430\u0439\u0442, \u043e\u043d \u0436\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d, degree &#8212; \u0441\u0442\u0435\u043f\u0435\u043d\u044c:<\/p>\n<pre><code class=\"go\">func makePolynomial(intercept, degree uint8) (polynomial, error)<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 &#8212; \u044d\u0442\u043e degree. \u0432\u0441\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b8\/42e\/14b\/5b842e14b3d4a94f602fe8be7889c05c.png\" width=\"248\" height=\"20\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b8\/42e\/14b\/5b842e14b3d4a94f602fe8be7889c05c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422.\u0435. \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e x. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043b\u0430\u0439\u0441 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c degree+1, \u0442.\u043a. \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u0431\u0430\u0439\u0442(\u043e\u043d \u0436\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d) \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u044b \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u043b\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0435.<\/p>\n<pre><code class=\"go\">func makePolynomial(intercept, degree uint8) (polynomial, error) {  p := polynomial{ coefficients: make([]byte, degree+1), }  p.coefficients[0] = intercept \/\/ \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - \u043d\u0430\u0448 \u0431\u0430\u0439\u0442(\u0441\u0432\u043e\u0431\u043e\u0434.\u043a\u043e\u044d\u0444.)  if _, err := rand.Read(p.coefficients[1:]); err != nil { \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c    return p, err                                        \/\/ \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 }                                                        \/\/ \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438  return p, nil }<\/code><\/pre>\n<p><strong><em>evaluate<\/em><\/strong> &#8212; x uint8 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 x \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 y \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0435<\/p>\n<pre><code class=\"go\">func (p *polynomial) evaluate(x uint8) uint8<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 x \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 y. \u0412 \u043b\u043e\u0431 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0442\u0435\u043f\u0435\u043d\u044f\u0445 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e. \u0415\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 &#8212; \u0441\u0445\u0435\u043c\u0430 \u0413\u043e\u0440\u043d\u0435\u0440\u0430. <a href=\"https:\/\/youtu.be\/H9teIpb62iI?t=180\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0435\u0439<\/a><\/p>\n<p><em>\u041a\u0440\u0430\u0442\u043a\u043e<\/em>: \u043f\u043e\u043b\u0438\u043d\u043e\u043c 4 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 &#8212; <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"2x^4 + 7x^3 - 2x^2 - 13x + 6\" alt=\"2x^4 + 7x^3 - 2x^2 - 13x + 6\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9d1\/3dc\/fa2\/9d13dcfa2c2395c4b8324f0184960f57.svg\" width=\"227\" height=\"22\"\/> x \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0434\u0430\u043b\u0435\u0435 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c x \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0438 \u0442.\u0434., \u0442.\u0435. x=1:<\/p>\n<p>    1) 1*2+7=9<\/p>\n<p>    2) 1*9+(-2)=7<\/p>\n<p>    3) 1*7+(-13)=-6<\/p>\n<p>    4) 1*(-6)+6=0<\/p>\n<p>\u041d\u0430\u0448 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y=0\" alt=\"y=0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/747\/ed2\/31d\/747ed231db54288d7df4c0147f3d777d.svg\" width=\"46\" height=\"21\"\/>(\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d 0, \u0441 \u0432\u0438\u0434\u0435\u043e \u0432\u0437\u044f\u043b \u043f\u0440\u0438\u043c\u0435\u0440). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438 x=0 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430\u0448 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0441\u0440\u0430\u0437\u0443 \u0435\u0433\u043e \u0432\u0435\u0440\u043d\u0435\u043c. <\/p>\n<p>\u041c\u044b \u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442(\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0430\u0439\u0441\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043a \u043c\u0435\u043d\u044c\u0448\u0435\u043c\u0443, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c \u0443 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0430 \u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043a \u043c\u0435\u043d\u044c\u0448\u0435\u0439) \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f8\/af2\/853\/0f8af28539a390a53ef75e4eedbe8535.svg\" width=\"11\" height=\"12\"\/>\u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442. \u0422\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c, \u0443\u043c\u043d\u043e\u0436\u0430\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b0\/d37\/291\/3b0d3729110e610c72378e52767395f4.svg\" width=\"11\" height=\"12\"\/>\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0448 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b32\/062\/ba8\/b32062ba816b9eb53f77cee030f03776.svg\" width=\"10\" height=\"16\"\/>.<\/p>\n<pre><code class=\"go\">func (p *polynomial) evaluate(x uint8) uint8 {    if x == 0 {                    \/\/ \u043f\u0440\u0438 x=0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0432\u0435\u043d \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443 return p.coefficients[0] }  degree := len(p.coefficients) - 1 \/\/ \u0431\u0435\u0440\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 out := p.coefficients[degree]     \/\/ \u0441\u0430\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443    for i := degree - 1; i >= 0; i-- {  coeff := p.coefficients[i]        out = add(mult(out, x), coeff) \/\/ \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 }                                  \/\/ \u0443\u043c\u043d\u043e\u0436\u0430\u044f x \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442    return out }<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0432\u043e\u0438 \u043d\u0430\u0431\u043e\u0440\u044b \u0442\u043e\u0447\u0435\u043a \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430.<\/p>\n<p><strong><u>\u0412\u0410\u0416\u041d\u0410\u042f \u0427\u0410\u0421\u0422\u042c<\/u><\/strong>: \u0444\u0443\u043d\u043a\u0446\u0438\u0438 add(a, b uint8) mult(a, b uint8) div(a, b uint8) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u044f, add() &#8212; \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f. \u041c\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0431\u0430\u0439\u0442\u0430, \u0442.\u0435. 256 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u043f\u043e\u043b\u0435.\u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f  \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421\u0430\u043c\u0438 hashicorp \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 <a href=\"http:\/\/www.samiam.org\/galois.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0443<\/a>, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<h2>2.Combine()<\/h2>\n<p><em>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/em>: parts &#8212; \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code class=\"go\">func Combine(parts [][]byte) ([]byte, error) <\/code><\/pre>\n<p>Combine() \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412\u0430\u043b\u0438\u0434\u0430\u0438\u044f \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u044b\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430<\/p>\n<\/li>\n<\/ol>\n<p><strong><em>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f<\/em><\/strong>:<\/p>\n<ol>\n<li>\n<p>\u041a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u0432\u0443\u0445<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2 \u0431\u0430\u0439\u0442(y,x &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e 2 \u0442\u043e\u0447\u043a\u0438 \u043d\u0443\u0436\u043d\u044b)  \u0438 \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0432\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443(\u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0432\u0441\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c)<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"go\">  if len(parts) &lt; 2 {   \/\/ 1 \u043f\u0443\u043d\u043a\u0442 - \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2 return nil, fmt.Errorf(\"less than two parts cannot be used to reconstruct the secret\") }  firstPartLen := len(parts[0]) \/\/ \u0431\u0435\u0440\u0435\u043c 1 \u043a\u043b\u044e\u0447 if firstPartLen &lt; 2 {         \/\/ \u043a\u043e\u043b-\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u043d\u0435\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2 return nil, fmt.Errorf(\"parts must be at least two bytes\") } for i := 1; i &lt; len(parts); i++ { \/\/ \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 if len(parts[i]) != firstPartLen { return nil, fmt.Errorf(\"all parts must be the same length\") } }<\/code><\/pre>\n<p>secret &#8212; \u043d\u0430\u0448 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 x \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0438\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043c\u0435\u043d\u044c\u0448\u0435. \u0414\u0430\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0442\u043e\u0447\u0435\u043a(\u0434\u043b\u044f x \u043e\u0434\u0438\u043d \u0441\u043b\u0430\u0439\u0441 \u0434\u043b\u044f y \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0430\u0439\u0441).             \u043a\u043b\u044e\u0447\u0438(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440):<\/p>\n<p>[23,7,2,45&#8230;5]<\/p>\n<p>[32,2,3,21&#8230;2]<\/p>\n<p>[18,9,32,1&#8230;15]<\/p>\n<p>\u0411\u0435\u0440\u0435\u043c \u0441 \u043a\u043e\u043d\u0446\u043e\u0432 x &#8212; 5, 2, 15 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u043b\u044f x \u0441\u043b\u0430\u0439\u0441. (\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043c \u0447\u0442\u043e\u0431\u044b x \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043a\u043b\u044e\u0447\u0438 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b)<\/p>\n<pre><code class=\"go\">secret := make([]byte, firstPartLen-1) \/\/ \u0441\u043b\u0430\u0439\u0441 \u0434\u043b\u044f \u0438\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430  x_samples := make([]uint8, len(parts)) \/\/ \u0441\u043b\u0430\u0439\u0441 \u0434\u043b\u044f x \u0442\u043e\u0447\u0435\u043a y_samples := make([]uint8, len(parts)) \/\/ \u0441\u043b\u0430\u0439\u0441 \u0434\u043b\u044f y \u0442\u043e\u0447\u0435\u043a  checkMap := map[byte]bool{}               \/\/ \u043c\u0430\u043f\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0434\u0443\u0431\u043b\u0438 for i, part := range parts {          samp := part[firstPartLen-1]          \/\/ samp - x \u0441 \u043a\u043e\u043d\u0446\u0430 \u0441\u043b\u0430\u0439\u0441\u0430        if exists := checkMap[samp]; exists { \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e\u0431\u044b x \u043d\u0430 \u0434\u0443\u0431\u043b\u0438              return nil, fmt.Errorf(\"duplicate part detected\") } checkMap[samp] = true        x_samples[i] = samp }<\/code><\/pre>\n<p><strong><em>\u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430<\/em><\/strong><em>.<\/em> \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 x \u0435\u0441\u0442\u044c. \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c y.                                              \u041a\u043b\u044e\u0447\u0438(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440):                                                                                                           <\/p>\n<p>[23,7,2,45&#8230;5]                                                                                                                         <\/p>\n<p>[32,2,3,21&#8230;2]                                                                                                                <\/p>\n<p>[18,9,32,1&#8230;15]<\/p>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u0438 &#8212; [5,23],[2,32],[15,18], \u0414\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e &#8212; \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 [5,7],[2,2],[15,9] \u0438 \u0442.\u0434. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u0444\u0443\u043a\u043d\u0446\u0438\u044e <strong>interpolatePolynomial<\/strong> \u043d\u0430\u0448 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 x \u0438 y. 3 &#8212; \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 &#8212; \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438, \u0442.\u0435. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84b\/8b1\/597\/84b8b1597ad048d6de5e95c7c5b7bf0c.svg\" width=\"11\" height=\"12\"\/>\u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6fc\/99f\/e63\/6fc99fe63a64f1ef75030a6a090b2af7.svg\" width=\"10\" height=\"16\"\/>\u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0435. \u041d\u0443\u0436\u0435\u043d \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 &#8212; \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0430\u0439\u0442, \u0430 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 x = 0. \u0422.\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 x=0 \u043d\u0430\u0448 \u0431\u0430\u0439\u0442(\u043e\u043d \u0436\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442). \u041d\u043e \u0437\u0430\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443.<\/p>\n<pre><code class=\"go\">for idx := range secret {  for i, part := range parts { \/\/ \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 y \u0441 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430  y_samples[i] = part[idx] \/\/ \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430, idx - \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u043e\u043b\u0431\u0438\u043a\u0430 }  val := interpolatePolynomial(x_samples, y_samples, 0)  secret[idx] = val }<\/code><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c <strong>interpolatePolynomial<\/strong> &#8212; x_samples, y_samples &#8212; \u044d\u0442\u043e<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fda\/ff6\/e5b\/fdaff6e5b4471f7d732927f08c0ed145.svg\" width=\"11\" height=\"12\"\/>\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043c<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f6\/730\/d43\/7f6730d4371a55529248a52d165523c0.svg\" width=\"10\" height=\"16\"\/>(\u0442.\u0435 \u043d\u0430\u0431\u043e\u0440 \u0442\u043e\u0447\u0435\u043a, 0 &#8212; \u044d\u0442\u043e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03b\/c12\/d52\/03bc12d52d55c4426b101da4b3702c56.svg\" width=\"11\" height=\"12\"\/>\u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0440\u0430\u0432\u0435\u043d \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443).                              <a href=\"https:\/\/www.youtube.com\/watch?v=nj2RBZ6xFeY\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0435 \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430<\/a> \u041d\u0435 \u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c \u0431\u0430\u0437\u0438\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430, \u0435\u0441\u043b\u0438 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0438\u043d\u0443\u0442 15 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430, \u0432\u0441\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0435\u0433\u0447\u0435. \u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/749\/90c\/117\/74990c1174cf08fa4142c7c9345784b9.png\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/749\/90c\/117\/74990c1174cf08fa4142c7c9345784b9.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0435 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/653\/eda\/a90\/653edaa90239617bb21f4e9404872b33.svg\" width=\"10\" height=\"16\"\/>\u043d\u0430 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0438 \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p><strong>\u041f\u0435\u0440\u0432\u044b\u0439 \u0446\u0438\u043a\u043b<\/strong> &#8212; \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c y \u043d\u0430 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c &#8212; \u0442.\u0435. \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0432\u043d\u0438\u0437\u0443: <strong>group<\/strong> &#8212; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 y \u043d\u0430 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c, <strong>result<\/strong> &#8212; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f.                                                                                                                    <strong>\u0412\u0442\u043e\u0440\u043e\u0439(\u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439)<\/strong> &#8212; \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0435\u0442 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c &#8212; \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0441\u0432\u0435\u0440\u0445\u0443. <strong><em><u>\u041d\u0430\u043f\u043e\u043c\u043d\u044e<\/u><\/em><\/strong>: add(a, b uint8) &#8212; \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u043f\u043e\u043b\u0435, \u043e\u043d\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b, div(a, b uint8) &#8212; \u0434\u0435\u043b\u0435\u043d\u0438\u0435, mult(a, b uint8) &#8212; \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"go\">func interpolatePolynomial(x_samples, y_samples []uint8, x uint8) uint8 { limit := len(x_samples)  var result, basis uint8  for i := 0; i &lt; limit; i++ {         \/\/ \u0431.\u043f. - \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c   basis = 1 for j := 0; j &lt; limit; j++ { \/\/ \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0431.\u043f. \u0434\u043b\u044f y if i == j {  \/\/ \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u043e\u0442 x, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 y \u0434\u043b\u044f continue \/\/ \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0431.\u043f. } num := add(x, x_samples[j]) \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044f \u0432 \u0434\u0440\u043e\u0431\u0438 \u0432 \u0431.\u043f. denom := add(x_samples[i], x_samples[j]) \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044f term := div(num, denom) \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0434\u0440\u043e\u0431\u0438 basis = mult(basis, term) \/\/ \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u043e\u0431\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431.\u043f. }  group := mult(y_samples[i], basis) \/\/ \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 y \u043d\u0430 \u0431.\u043f. result = add(result, group) \/\/ \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f y \u043d\u0430 \u0431.\u043f. } return result }<\/code><\/pre>\n<p>\u0411\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0434\u043b\u044f <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f82\/6ca\/73f\/f826ca73f96a12a348a88793c1ae3492.svg\" width=\"10\" height=\"16\"\/> \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u0435\u043c\u044b\u0445 \u0434\u0440\u043e\u0431\u0435\u0439:<\/p>\n<p><strong>num<\/strong> &#8212; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044f \u0434\u043b\u044f n \u0434\u0440\u043e\u0431\u0438. \u0412\u043e \u0432\u0441\u0435\u0445 \u0434\u0440\u043e\u0431\u044f\u0445 x \u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a x, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 x \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 y(\u0443\u0441\u043b\u043e\u0432\u0438\u0435 i==j). \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 x \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f x=0, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 0 &#8212; \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&#8230;<\/p>\n<p><strong>denom<\/strong> &#8212; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f n \u0434\u0440\u043e\u0431\u0438. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 x \u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f x, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0442\u043e\u0442 x \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 y(\u0443\u0441\u043b\u043e\u0432\u0438\u0435 i==j).<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f x \u043f\u043e\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 1 \u0432 \u0441\u043b\u0430\u0439\u0441\u0435:<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(x-x[0])\/(x[1]-x[0]) * (x-x[2])\/(x[1]-x[2]) * (x-x[3])\/(x[1]-x[3])\" alt=\"(x-x[0])\/(x[1]-x[0]) * (x-x[2])\/(x[1]-x[2]) * (x-x[3])\/(x[1]-x[3])\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d40\/2f2\/e78\/d402f2e780aa3b794f355f3614f21fc2.svg\" width=\"624\" height=\"22\"\/><\/p>\n<p>\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\" (x-x[1])\/(x[1]-x[1]) \" alt=\" (x-x[1])\/(x[1]-x[1]) \" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f5e\/8c4\/0fe\/f5e8c40fe03055ca5599560f4af6b4c7.svg\" width=\"196\" height=\"22\"\/> \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0443, \u0434\u0430 \u0438 \u043d\u043e\u043b\u044c \u0432 \u0437\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443 \u0436\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0443\u0436\u0435\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043f\u0440\u0438 x=0, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d, \u0442\u043e \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(0-x[0])\/(x[1]-x[0]) * (0-x[2])\/(x[1]-x[2]) * (0-x[3])\/(x[1]-x[3])\" alt=\"(0-x[0])\/(x[1]-x[0]) * (0-x[2])\/(x[1]-x[2]) * (0-x[3])\/(x[1]-x[3])\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7fe\/7b5\/5fe\/7fe7b55fe6ceebb13afeaf01456baf25.svg\" width=\"620\" height=\"22\"\/><\/p>\n<p><strong>term<\/strong> &#8212; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f <strong>num<\/strong> \u043d\u0430 <strong>denom<\/strong>, \u0442.\u0435. \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0434\u043d\u043e\u0439 \u0434\u0440\u043e\u0431\u0438. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(x-x[0])\/(x[1]-x[0])\" alt=\"(x-x[0])\/(x[1]-x[0])\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/09f\/43a\/f3f\/09f43af3f40304de20335df8aea50aa2.svg\" width=\"196\" height=\"22\"\/><\/p>\n<p><strong>basis<\/strong> &#8212; \u0432\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u0440\u043e\u0431\u0435\u0439(term) \u0431\u0430\u0437\u0438\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442, \u0442.\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u043b\u044e\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u043b\u0438. \u0422\u0430\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x, y\" alt=\"x, y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/141\/f15\/923\/141f15923451900d951cc6ace28d7ae2.svg\" width=\"30\" height=\"16\"\/>, \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 x=0 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u042f \u043f\u0438\u0441\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0435 \u0434\u043b\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u0432\u043d\u043e \u0432 \u0441\u0444\u0435\u0440\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438. \u041c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0428\u0430\u043c\u0438\u0440\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u043a\u0430\u043a \u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044f \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u043a\u0430\u0440\u0442\u044b (\u043a\u0443\u0434\u0430 \u043a\u043e\u043f\u0430\u0442\u044c).<\/p>\n<p>\u041d\u0435 \u043e\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043f\u043e\u043b\u044f \u0438\u043b\u0438 \u043f\u043e\u043b\u0435 \u0413\u0430\u043b\u0443\u0430. \u041e\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b \u0434\u043b\u044f \u043c\u0435\u043d\u044f. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f xor \u043d\u0435 \u0445\u043e\u0442\u0435\u043b. \u041d\u043e \u043a\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0432 hashicorp \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445 \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443. <a href=\"http:\/\/www.samiam.org\/galois.html\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e<\/a>.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/708230\/\"> https:\/\/habr.com\/ru\/articles\/708230\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u0441\u0445\u0435\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0428\u0430\u043c\u0438\u0440\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u0432 Hashicorp vault. Hashicorp &#8212; \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b &#8212; terraform, consul, nomand, vault. Vault &#8212; \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043f\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043b-\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0445\u0435\u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u0428\u0430\u043c\u0438\u0440\u0430.<\/p>\n<ul>\n<li>\n<p> <a href=\"https:\/\/github.com\/hashicorp\/vault\/tree\/main\/shamir\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/valli0x\/shamir-description-ru\/blob\/main\/shamir\/shamir.go\" rel=\"noopener noreferrer nofollow\"> \u0424\u0430\u0439\u043b \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c<\/a><\/p>\n<\/li>\n<\/ul>\n<p>E\u0441\u0442\u044c 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; Split() \u0438 Combine(). \u0420\u0430\u0437\u0431\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0447\u0430\u0441\u0442\u0435\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u044e\u0447.<\/p>\n<h2>1. Split()<\/h2>\n<p>\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u0432 (<a href=\"https:\/\/habr.com\/ru\/post\/431392\" rel=\"noopener noreferrer nofollow\">\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 &#8212; \u0440\u0430\u0437\u0434\u0435\u043b \u041f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f<\/a>). \u042f \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0441\u0445\u0435\u043c\u0443 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0411\u0430\u0439\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0438\u0441\u043b\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 42. \u0420\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0431\u0430\u0439\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 2 \u043a\u043b\u044e\u0447\u0430 \u0441 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u043c \u043a\u043e\u043b-\u0432\u043e\u043c \u0432 2.<\/p>\n<ol>\n<li>\n<p>\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f(\u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d \u0438\u043b\u0438 \u043f\u043e\u043b\u0438\u043d\u043e\u043c) 1 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c y , \u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0448\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c &#8212; 2x + 42 = y.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 x \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c y. 1 \u0442\u043e\u0447\u043a\u0430 &#8212; (x=1, y=44), 2 \u0442\u043e\u0447\u043a\u0430 &#8212; (x=2, y=46).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0437\u0431\u0438\u043b\u0438 \u0431\u0430\u0439\u0442 \u043d\u0430 2 \u043a\u043b\u044e\u0447\u0430 [1,44], [2,46]. \u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0431\u0430\u0439\u0442? \u0412 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 &#8212; \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430 &#8212; \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u043e\u0447\u043a\u0430\u043c. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f &#8212; <a href=\"https:\/\/planetcalc.ru\/8692\" rel=\"noopener noreferrer nofollow\">https:\/\/planetcalc.ru\/8692<\/a><\/p>\n<\/li>\n<li>\n<p>\u0412\u0432\u0435\u043b\u0438 \u043d\u0430 <a href=\"http:\/\/planetcalc.ru\/8692\" rel=\"noopener noreferrer nofollow\">planetcalc.ru\/8692<\/a>  2 \u0442\u043e\u0447\u043a\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c 2x+42=y. \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d \u043d\u0430\u0439\u0442\u0438 \u043b\u0435\u0433\u043a\u043e, \u043f\u0440\u0438 x = 0,  \u0440\u0430\u0432\u0435\u043d \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443. \u0412 \u0438\u0442\u043e\u0433\u0435 2*0+42=42, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0430\u0448 \u0431\u0430\u0439\u0442 &#8212; 42.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e x \u0438 y. \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0430 1 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u043e 2 \u0442\u043e\u0447\u043a\u0438, \u0434\u043b\u044f 2 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 &#8212; 3. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0432 \u0433\u0440\u0430\u0444\u0438\u043a 2x + 42=y, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u0430\u044f, \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 2 \u0442\u043e\u0447\u0435\u043a. \u041f\u043e\u043b\u0438\u043d\u043e\u043c 2 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u0431\u043e\u043b\u0430, \u043d\u0443\u0436\u043d\u043e \u0443\u0436\u0435 3 (\u0447\u0435\u0440\u0435\u0437 2 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043f\u0430\u0440\u0430\u0431\u043e\u043b).<\/p>\n<\/li>\n<li>\n<p>\u0422.\u0435. \u0434\u043b\u044f \u043f\u043e\u0440\u043e\u0433\u0430 \u0432 2 \u043a\u043b\u044e\u0447\u0430 &#8212; \u0431\u0435\u0440\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d 1 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u0441 \u043f\u043e\u0440\u043e\u0433\u043e\u043c 3 &#8212; \u043f\u043e\u043b\u0438\u043d\u043e\u043c 2 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u0442.\u0434. \u0421\u0430\u043c\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e(\u043d\u0443, \u043a\u0430\u043a \u0438 \u0442\u043e\u0447\u0435\u043a), \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u0440\u043e\u0433\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0412 hashicorp vault \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0431\u0430\u0439\u0442\u0430\u043c \u043a\u043b\u044e\u0447\u0430, \u0441\u0442\u0440\u043e\u044f\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0441 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e &#8212; \u043f\u043e\u0440\u043e\u0433 \u043c\u0438\u043d\u0443\u0441 1 \u0438 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c (\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0432\u043e\u0439 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435).  \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043b\u044e\u0447\u0435 \u043e\u0434\u0438\u043d.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption>\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 hashicorp vault(1 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430)<\/figcaption><\/figure>\n<p>\u0417\u043d\u0430\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c 2 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f a1 + b = 44, a2 + b = 46 \u0438 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0448\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 10 \u0441\u0442\u0435\u043f\u0435\u043d\u0438, \u0432\u0441\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 n \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u043b\u044f  \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0445\u0435\u043c\u0443 \u0413\u043e\u0440\u043d\u0435\u0440\u0430 &#8212; \u0442\u043e\u0436\u0435 \u0447\u0443\u0442\u044c \u043b\u0435\u0433\u0447\u0435 \u0447\u0435\u043c \u0432 \u043b\u043e\u0431. \u0420\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u0434\u0430 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044e Split() \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438: <strong>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438 \u0441\u0430\u043c\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u043a\u043b\u044e\u0447\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439.<\/strong><\/p>\n<p><em>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/em>: secret &#8212; \u044d\u0442\u043e \u043d\u0430\u0448 \u043a\u043b\u044e\u0447 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, parts &#8212; \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439, threshold &#8212; \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043d\u0430\u0448\u0438 \u043a\u043b\u044e\u0447\u0438 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code class=\"go\">func Split(secret []byte, parts, threshold int) ([][]byte, error) <\/code><\/pre>\n<p><strong>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f<\/strong>:  <\/p>\n<ol>\n<li>\n<p>\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 255. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u0442.\u0435. 256 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439(\u043e\u0442 0 \u0434\u043e 255) \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f, \u0442.\u043a. \u043f\u0440\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 x \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043a\u043b\u044e\u0447\u0435\u0439, \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f  \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u043e\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u043e\u0433 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u043e\u0433 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 255.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u044e\u0447 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"go\">if parts &lt; threshold { return nil, fmt.Errorf(\"parts cannot be less than threshold\") } if parts > 255 { return nil, fmt.Errorf(\"parts cannot exceed 255\") } if threshold &lt; 2 { return nil, fmt.Errorf(\"threshold must be at least 2\") } if threshold > 255 { return nil, fmt.Errorf(\"threshold cannot exceed 255\") } if len(secret) == 0 { return nil, fmt.Errorf(\"cannot split an empty secret\") }<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043b\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0441\u043b\u0430\u0439\u0441 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 x. <a href=\"https:\/\/github.com\/hashicorp\/vault\/commit\/b4602fc2443dc3de451cd9aeac7c4d79390adbd8\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442 0 \u0434\u043e \u043a\u043e\u043b-\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0439.<\/a> \u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 &#8212; \u044f \u0432\u0438\u0434\u0435\u043b \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u043d\u0430 rust \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043b\u044e\u0447\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 . \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0432\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>\u0421\u043b\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441 \u043a\u043b\u044e\u0447 + 1 \u0431\u0430\u0439\u0442 \u0434\u043b\u044f x \u043d\u0430 \u043a\u043e\u043d\u0446\u0435. \u0421\u0442\u0430\u0432\u0438\u043c x \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043b\u0430\u0439\u0441\u0430.<\/p>\n<pre><code class=\"go\">mathrand.Seed(time.Now().UnixNano()) xCoordinates := mathrand.Perm(255)           \/\/ \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0441\u0430 \u0442\u043e\u0447\u0435\u043a x  out := make([][]byte, parts) for idx := range out { out[idx] = make([]byte, len(secret)+1)  \/\/\u0441\u043b\u0430\u0439\u0441\u044b \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0435\u0439 + \u0431\u0430\u0439\u0442 \u0434\u043b\u044f x out[idx][len(secret)] = uint8(xCoordinates[idx]) + 1 \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c x }                                                        \/\/ \u043d\u0430 \u043a\u043e\u043d\u0446\u0430\u0445 \u043a\u043b\u044e\u0447\u0435\u0439<\/code><\/pre>\n<p><strong>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/strong> \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u043a\u043b\u044e\u0447\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0441\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u043f\u043e\u0440\u043e\u0433-1 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0433\u0434\u0435 \u043d\u0430\u0448 \u0431\u0430\u0439\u0442 \u044d\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0438 x \u0441 \u043a\u043e\u043d\u0446\u043e\u0432 \u043a\u043b\u044e\u0447\u0435\u0439(\u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0435\u0433\u043e . \u041e\u0434\u0438\u043d \u043a\u043b\u044e\u0447 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430  \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>1. \u0421\u0442\u0440\u043e\u0438\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c \u0434\u043b\u044f \u0431\u0430\u0439\u0442\u0430 &#8212; \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0431\u0430\u0439\u0442 \u0438 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430(\u043f\u043e\u0440\u043e\u0433-1) \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>makePolynomial<\/code><\/p>\n<p>2. \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0432\u043e\u0439 \u0431\u0430\u0439\u0442 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 x(\u043e\u043d \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430) &#8212; <code>evaluate<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c <code>makePolynomial<\/code><strong> <\/strong><code>\u0438<\/code><strong> <\/strong><code>evaluate<\/code><strong> <\/strong><\/p>\n<pre><code class=\"go\">for idx, val := range secret { p, err := makePolynomial(val, uint8(threshold-1)) \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c if err != nil { return nil, fmt.Errorf(\"failed to generate polynomial: %w\", err) }  for i := 0; i &lt; parts; i++ {        \/\/ \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 x := uint8(xCoordinates[i]) + 1 \/\/ \u0431\u0435\u0440\u0435\u043c x \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 y := p.evaluate(x)              \/\/ \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c y \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 out[i][idx] = y                 \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043b\u044e\u0447\u0435 y } }<\/code><\/pre>\n<p><strong><em>makePolynomial<\/em><\/strong> &#8212; intercept \u043d\u0430\u0448 \u0431\u0430\u0439\u0442, \u043e\u043d \u0436\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d, degree &#8212; \u0441\u0442\u0435\u043f\u0435\u043d\u044c:<\/p>\n<pre><code class=\"go\">func makePolynomial(intercept, degree uint8) (polynomial, error)<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 &#8212; \u044d\u0442\u043e degree. \u0432\u0441\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0422.\u0435. \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e x. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043b\u0430\u0439\u0441 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c degree+1, \u0442.\u043a. \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u0431\u0430\u0439\u0442(\u043e\u043d \u0436\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d) \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u044b \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u043b\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0435.<\/p>\n<pre><code class=\"go\">func makePolynomial(intercept, degree uint8) (polynomial, error) {  p := polynomial{ coefficients: make([]byte, degree+1), }  p.coefficients[0] = intercept \/\/ \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - \u043d\u0430\u0448 \u0431\u0430\u0439\u0442(\u0441\u0432\u043e\u0431\u043e\u0434.\u043a\u043e\u044d\u0444.)  if _, err := rand.Read(p.coefficients[1:]); err != nil { \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c    return p, err                                        \/\/ \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 }                                                        \/\/ \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438  return p, nil }<\/code><\/pre>\n<p><strong><em>evaluate<\/em><\/strong> &#8212; x uint8 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 x \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 y \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0435<\/p>\n<pre><code class=\"go\">func (p *polynomial) evaluate(x uint8) uint8<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 x \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 y. \u0412 \u043b\u043e\u0431 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0442\u0435\u043f\u0435\u043d\u044f\u0445 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e. \u0415\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 &#8212; \u0441\u0445\u0435\u043c\u0430 \u0413\u043e\u0440\u043d\u0435\u0440\u0430. <a href=\"https:\/\/youtu.be\/H9teIpb62iI?t=180\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0435\u0439<\/a><\/p>\n<p><em>\u041a\u0440\u0430\u0442\u043a\u043e<\/em>: \u043f\u043e\u043b\u0438\u043d\u043e\u043c 4 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 &#8212;  x \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0434\u0430\u043b\u0435\u0435 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c x \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0438 \u0442.\u0434., \u0442.\u0435. x=1:<\/p>\n<p>    1) 1*2+7=9<\/p>\n<p>    2) 1*9+(-2)=7<\/p>\n<p>    3) 1*7+(-13)=-6<\/p>\n<p>    4) 1*(-6)+6=0<\/p>\n<p>\u041d\u0430\u0448 (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d 0, \u0441 \u0432\u0438\u0434\u0435\u043e \u0432\u0437\u044f\u043b \u043f\u0440\u0438\u043c\u0435\u0440). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438 x=0 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0430\u0448 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0447\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0441\u0440\u0430\u0437\u0443 \u0435\u0433\u043e \u0432\u0435\u0440\u043d\u0435\u043c. <\/p>\n<p>\u041c\u044b \u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442(\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0430\u0439\u0441\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043a \u043c\u0435\u043d\u044c\u0448\u0435\u043c\u0443, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c \u0443 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0430 \u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043a \u043c\u0435\u043d\u044c\u0448\u0435\u0439) \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442. \u0422\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c, \u0443\u043c\u043d\u043e\u0436\u0430\u044f \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0448 .<\/p>\n<pre><code class=\"go\">func (p *polynomial) evaluate(x uint8) uint8 {    if x == 0 {                    \/\/ \u043f\u0440\u0438 x=0 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0432\u0435\u043d \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c\u0443 \u0447\u043b\u0435\u043d\u0443 return p.coefficients[0] }  degree := len(p.coefficients) - 1 \/\/ \u0431\u0435\u0440\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 out := p.coefficients[degree]     \/\/ \u0441\u0430\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443    for i := degree - 1; i >= 0; i-- {  coeff := p.coefficients[i]        out = add(mult(out, x), coeff) \/\/ \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 }                                  \/\/ \u0443\u043c\u043d\u043e\u0436\u0430\u044f x \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442    return out }<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0432\u043e\u0438 \u043d\u0430\u0431\u043e\u0440\u044b \u0442\u043e\u0447\u0435\u043a \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u041b\u0430\u0433\u0440\u0430\u043d\u0436\u0430.<\/p>\n<p><strong><u>\u0412\u0410\u0416\u041d\u0410\u042f \u0427\u0410\u0421\u0422\u042c<\/u><\/strong>: \u0444\u0443\u043d\u043a\u0446\u0438\u0438 add(a, b uint8) mult(a, b uint8) div(a, b uint8) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u044f, add() &#8212; \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f. \u041c\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0431\u0430\u0439\u0442\u0430, \u0442.\u0435. 256 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u043f\u043e\u043b\u0435.\u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f  \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421\u0430\u043c\u0438 hashicorp \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 <a href=\"http:\/\/www.samiam.org\/galois.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0443<\/a>, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u044d\u0442\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<h2>2.Combine()<\/h2>\n<p><em>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430<\/em>: parts &#8212; \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<pre><code class=\"go\">func Combine(parts [][]byte) ([]byte, error) <\/code><\/pre>\n<p>Combine() \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 2 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412\u0430\u043b\u0438\u0434\u0430\u0438\u044f \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u044b\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430<\/p>\n<\/li>\n<\/ol>\n<p><strong><em>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f<\/em><\/strong>:<\/p>\n<ol>\n<li>\n<p>\u041a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u0432\u0443\u0445<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2 \u0431\u0430\u0439\u0442(y,x &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e 2 \u0442\u043e\u0447\u043a\u0438 \u043d\u0443\u0436\u043d\u044b)  \u0438 \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0432\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443(\u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0432\u0441\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c)<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"go\">  if len(parts) &lt; 2 {   \/\/ 1 \u043f\u0443\u043d\u043a\u0442 - \u043a\u043e\u043b-\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2 return nil, fmt.Errorf(\"less than two parts cannot be used to reconstruct the secret\") }  firstPartLen := len(parts[0]) \/\/ \u0431\u0435\u0440\u0435\u043c 1 \u043a\u043b\u044e\u0447 if firstPartLen &lt; 2 {         \/\/ \u043a\u043e\u043b-\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u043d\u0435\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 2 return nil, fmt.Errorf(\"parts must be at least two bytes\") } for i := 1; i &lt; len(parts); i++ { \/\/ \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 if len(parts[i]) != firstPartLen { return nil, fmt.Errorf(\"all parts must be the same length\") } }<\/code><\/pre>\n<p>secret &#8212; \u043d\u0430\u0448 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 x \u043d\u0430 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0438\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043c\u0435\u043d\u044c\u0448\u0435. \u0414\u0430\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0442\u043e\u0447\u0435\u043a(\u0434\u043b\u044f x \u043e\u0434\u0438\u043d \u0441\u043b\u0430\u0439\u0441 \u0434\u043b\u044f y \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0430\u0439\u0441).             \u043a\u043b\u044e\u0447\u0438(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440):<\/p>\n<p>[23,7,2,45&#8230;5]<\/p>\n<p>[32,2,3,21&#8230;2]<\/p>\n<p>[18,9,32,1&#8230;15]<\/p>\n<p>\u0411\u0435\u0440\u0435\u043c \u0441<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-394961","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/394961","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=394961"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/394961\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=394961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=394961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=394961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}