{"id":191240,"date":"2013-08-26T10:24:03","date_gmt":"2013-08-26T06:24:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=191240"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=191240","title":{"rendered":"<span class=\"post_title\">\u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f: \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/ff3\/29e\/5fc\/ff329e5fc4ee48e53e9fc6909dd634eb.jpg\" alt=\"image\" align=\"left\"\/><br \/>  \u041f\u0440\u0438\u0432\u0435\u0442, %username%!<\/p>\n<p>  \u041f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043f\u043e\u0441\u0442 <a href=\"http:\/\/habrahabr.ru\/post\/188958\/\">\u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f: \u0442\u0435\u043e\u0440\u0438\u044f<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438. \u0422\u043e\u0442 \u043c\u043e\u0439 \u043f\u043e\u0441\u0442 \u043d\u043e\u0441\u0438\u043b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u0441\u043e\u0437\u0435\u0440\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u041d\u043e \u0447\u0442\u043e \u0437\u0430 \u0442\u0435\u043e\u0440\u0438\u044f \u0431\u0435\u0437 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438? \u0421 \u0446\u0435\u043b\u044c\u044e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0443\u043f\u0443\u0449\u0435\u043d\u0438\u0435 \u044f, \u0441\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u0434\u0443\u0445\u043e\u043c, \u0440\u0438\u043d\u0443\u043b\u0441\u044f \u0432 \u0431\u043e\u0439 \u0441 \u0413\u041e\u0421\u0422-\u043e\u043c 34.10-2012, \u0441\u0445\u0435\u043c\u043e\u0439 \u042d\u0426\u041f \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0442\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. <a name=\"habracut\"><\/a><br \/>  \u00ad<br \/>  \u00ad<br \/>  \u00ad  <\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439<\/h4>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442.\u043d. \u00ab\u043a\u0440\u0438\u0432\u044b\u0435 \u043d\u0430\u0434 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c\u00bb. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u0440\u0438\u0432\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u043e\u0447\u0435\u043a. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0447\u0435\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b>\u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u043a\u0440\u0438\u0432\u043e\u0439<\/b>. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0435\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u042d\u0442\u043e \u043e\u0431\u0443\u0441\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043a\u0440\u0438\u043f\u0442\u043e\u0441\u0442\u043e\u0439\u043a\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e \u0447\u0435\u043c \u044f \u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043e\u043f\u0443\u0441\u0435.<br \/>  \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<ol>\n<li>\u0412\u044b\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 a \u0438 b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0439 <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/22b\/cff\/93d\/22bcff93d1aac6c21be568e1d2bb76b4.png\" alt=\"image\"\/><\/li>\n<li>\u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439; <\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u043e\u0447\u0435\u043a \u0440\u044f\u0434\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. <\/li>\n<\/ol>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. <\/p>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043e\u0447\u0435\u043a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Schoof&#39;s_algorithm\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0428\u0443\u0444\u0430<\/a> \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/b12\/741\/b40\/b12741b40629ebcbfba8a91935c9efc3.png\" alt=\"image\"\/>. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043b\u043e\u0436\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431, \u0442.\u043d. <b>\u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f<\/b>. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0434\u043e\u0431\u0440\u044b\u0439 \u0445\u0430\u0431\u0440\u0430\u0447\u0435\u043b\u043e\u0432\u0435\u043a <a href=\"http:\/\/habrahabr.ru\/users\/grechnik\/\" class=\"user_link\">grechnik<\/a> \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u043e\u0441\u0442\u0435 <a href=\"http:\/\/habrahabr.ru\/post\/189618\/\">\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u0435\u043b \u0441\u0443\u043c\u043c\u043e\u0439 \u0434\u0432\u0443\u0445 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0440\u0438\u0432\u044b\u0435<\/a>. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0440\u0438\u0432\u044b\u0435 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u043e\u0447\u0435\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0428\u0443\u0444\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c, \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/tuprints.ulb.tu-darmstadt.de\/211\/1\/dissertation_harald_baier.pdf\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0441\u0441\u044b\u043b\u043a\u0443, <a href=\"http:\/\/habrahabr.ru\/users\/grechnik\/\" class=\"user_link\">grechnik<\/a>).<\/p>\n<p>  \u0411\u043b\u0430\u0433\u043e NIST, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 <s>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u044d\u043a\u0434\u043e\u0440\u043e\u0432<\/s> \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u0441 \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0445\u0435\u043c\u0430\u0445 \u042d\u0426\u041f. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0434\u043d\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u044f \u0438 \u0432\u044b\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043e\u043f\u044b\u0442\u043e\u0432. <\/p>\n<p>  \u0414\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u0440\u0438\u0432\u043e\u0439 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 NIST \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 6 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 D=(p,a,b,G,n,h), \u0433\u0434\u0435 <\/p>\n<p>  <b>p<\/b> \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043c\u043e\u0434\u0443\u043b\u044c \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439;<br \/>  <b>a, b <\/b> \u2014 \u0437\u0430\u0434\u0430\u044e\u0442 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/22b\/cff\/93d\/22bcff93d1aac6c21be568e1d2bb76b4.png\" alt=\"image\"\/>;<br \/>  <b>G<\/b> \u2014 \u0442\u043e\u0447\u043a\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u0447\u0438\u0441\u043b\u0430 \u043c\u0435\u043d\u044c\u0448\u0438\u0435, \u0447\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0442\u043e\u0447\u043a\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438;<br \/>  <b>n<\/b> \u2014 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0442\u043e\u0447\u043a\u0438 G;<br \/>  <b>h<\/b> \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0444\u0430\u043a\u0442\u043e\u0440. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u0449\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u043a \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0442\u043e\u0447\u043a\u0438 G. \u0414\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<h4>\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445<\/h4>\n<p>  \u041d\u0435 \u043e\u0441\u043e\u0431\u043e \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f\u0441\u044c \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0443\u044e NIST \u043a\u0440\u0438\u0432\u0443\u044e, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0432\u043d\u043e:<br \/>  p=6277101735386680763835789423207666416083908700390324961279;<br \/>  a=-3;<br \/>  b=2455155546008943817740293915197451784769108058161191238065;<br \/>  x<sub>G<\/sub>=602046282375688656758213480587526111916698976636884684818 (x-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0442\u043e\u0447\u043a\u0438 G);<br \/>  y<sub>G<\/sub>=174050332293622031404857552280219410364023488927386650641 (y-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0442\u043e\u0447\u043a\u0438 G);<br \/>  n=6277101735386680763835789423176059013767194773182842284081;<br \/>  h=1.<\/p>\n<p>  \u041e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <b>p<\/b>, \u0441\u043b\u0435\u0434\u0443\u044e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0414\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a <b>\u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c \u041c\u0435\u0440\u0441\u0435\u043d\u043d\u0430<\/b>, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0443\u043c\u043c\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u0434\u0432\u043e\u0439\u043a\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0447\u0438\u0441\u043b\u043e <b>p<\/b> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043a\u0430\u043a<br \/>  p=2<sup>192<\/sup>-2<sup>64<\/sup>-1.<br \/>  \u0412\u0441\u0435 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u043d\u0430\u0434 \u043f\u043e\u043b\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 NIST \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u0421\u0443\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0432 \u0434\u043b\u0438\u043d\u043e\u0439 32 \u0431\u0438\u0442\u0430, \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0430\u0435\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u0441\u043a\u043e\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/cryptography.programmation.ru\/58.shtml\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u0441\u043f\u0430\u0441\u0438\u0431\u043e <a href=\"http:\/\/habrahabr.ru\/users\/datacompboy\/\" class=\"user_link\">datacompboy<\/a> \u0437\u0430 \u043d\u0430\u0432\u043e\u0434\u043a\u0443).<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0442\u043e\u0447\u0435\u043a. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0432 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0430\u044f \u0442\u043e\u0447\u043a\u0430 G \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0436\u0430\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0447\u043a\u0443 G \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  G=0x 03 188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 y-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 2 (\u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e y-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0447\u0435\u0442\u043d\u0430\u044f) \u0438\u043b\u0438 3 (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435\u0447\u0435\u0442\u043d\u0430\u044f). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442 x-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443. <br \/>  \u0420\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u044d\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c y-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  \u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u043e\u0447\u043a\u0430 G \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/d7b\/89d\/dee\/d7b89ddee68b1f62563e751f127a648b.png\"\/><\/p>\n<p>  \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c <b>y<\/b> \u043a\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/02c\/9b6\/449\/02c9b6449da3f8995feedd01ed2ca8c4.png\"\/>.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043d\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e <b>p<\/b> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 <b>y<\/b> \u0438 <b>p-y<\/b>, \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u043e \u0447\u0438\u0441\u043b\u043e, \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0441\u0436\u0430\u0442\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 G.<\/p>\n<h4>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438<\/h4>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u042d\u0426\u041f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439. \u041e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043a\u043e\u043d\u0430\u0445 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u0430\u043b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043e\u0441\u0442\u0440\u044f\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. <br \/>  \u0421\u043a\u0430\u0436\u0443 \u043b\u0438\u0448\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0413\u041e\u0421\u0422 34.10 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<ul>\n<li>\u0421\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a; <\/li>\n<li>\u0423\u0434\u0432\u043e\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438; <\/li>\n<li>\u0423\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e. <\/li>\n<\/ul>\n<p>  <i>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/\u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f_\u043a\u0440\u0438\u0432\u0430\u044f\">\u0432\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438<\/a>.<\/i><\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u0430 ECPoint, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ECPoint.cs<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">    public class ECPoint     {         public BigInteger x;         public BigInteger y;         public BigInteger a;         public BigInteger b;         public BigInteger FieldChar;          public ECPoint(ECPoint p)         {             x = p.x;             y = p.y;             a = p.a;             b = p.b;             FieldChar = p.FieldChar;         }          public ECPoint()         {             x = new BigInteger();             y = new BigInteger();             a = new BigInteger();             b = new BigInteger();             FieldChar = new BigInteger();         }         \/\/\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0442\u043e\u0447\u0435\u043a P1 \u0438 P2         public static ECPoint operator +(ECPoint p1, ECPoint p2)         {             ECPoint p3 = new ECPoint();             p3.a = p1.a;             p3.b = p1.b;             p3.FieldChar = p1.FieldChar;              BigInteger dy = p2.y - p1.y;             BigInteger dx = p2.x - p1.x;              if (dx &lt; 0)                 dx += p1.FieldChar;             if (dy &lt; 0)                 dy += p1.FieldChar;              BigInteger m = (dy * dx.modInverse(p1.FieldChar)) % p1.FieldChar;             if (m &lt; 0)                 m += p1.FieldChar;             p3.x = (m * m - p1.x - p2.x) % p1.FieldChar;             p3.y = (m * (p1.x - p3.x) - p1.y) % p1.FieldChar;             if (p3.x &lt; 0)                 p3.x += p1.FieldChar;             if (p3.y &lt; 0)                 p3.y += p1.FieldChar;             return p3;         }         \/\/\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 P c \u0441\u043e\u0431\u043e\u0439 \u0436\u0435         public static ECPoint Double(ECPoint p)         {             ECPoint p2 = new ECPoint();             p2.a = p.a;             p2.b = p.b;             p2.FieldChar = p.FieldChar;              BigInteger dy = 3 * p.x * p.x + p.a;             BigInteger dx = 2 * p.y;              if (dx &lt; 0)                 dx += p.FieldChar;             if (dy &lt; 0)                 dy += p.FieldChar;              BigInteger m = (dy * dx.modInverse(p.FieldChar)) % p.FieldChar;             p2.x = (m * m - p.x - p.x) % p.FieldChar;             p2.y = (m * (p.x - p2.x) - p.y) % p.FieldChar;             if (p2.x &lt; 0)                 p2.x += p.FieldChar;             if (p2.y &lt; 0)                 p2.y += p.FieldChar;              return p2;         }         \/\/\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e x, \u043f\u043e \u0441\u0443\u0442\u0438 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 x \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0442\u043e\u0447\u043a\u0438 \u0441\u0430\u043c\u043e\u0439 \u0441 \u0441\u043e\u0431\u043e\u0439         public static ECPoint multiply(BigInteger x, ECPoint p)         {             ECPoint temp = p;             x = x - 1;             while (x != 0)             {                  if ((x % 2) != 0)                 {                     if ((temp.x == p.x) || (temp.y == p.y))                         temp = Double(temp);                     else                         temp = temp + p;                     x = x - 1;                 }                 x = x \/ 2;                 p = Double(p);             }             return temp;         }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <b>d<\/b>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <b>\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c<\/b> \u0441\u0445\u0435\u043c\u044b, \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043b\u0438\u0446\u0443.<br \/>  \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f M \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0413\u041e\u0421\u0422 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ol>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0445\u0435\u0448 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f M: <b>H<\/b>=h(M). \u041d\u0430 \u044d\u0442\u043e\u043c \u0448\u0430\u0433\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0421\u0442\u0440\u0438\u0431\u043e\u0433, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0443\u0436\u0435 <a href=\"http:\/\/habrahabr.ru\/post\/188152\/\">\u043f\u0438\u0441\u0430\u043b<\/a> \u043d\u0430 \u0445\u0430\u0431\u0440\u0435;<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <b>\u03b1<\/b>, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f H;<\/li>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c <b>e<\/b>=\u03b1 mod n, \u0435\u0441\u043b\u0438 e=0, \u0437\u0430\u0434\u0430\u0442\u044c e=1;<\/li>\n<li>\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <b>k<\/b>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e 0&lt;k&lt;n;<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 <b>C<\/b>=k*G; <\/li>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c <b>r <\/b>= x<sub>C<\/sub> mod n, \u0433\u0434\u0435 x<sub>C<\/sub> \u2014 x-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0442\u043e\u0447\u043a\u0438 C. \u0415\u0441\u043b\u0438 r=0, \u0442\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0448\u0430\u0433\u0443 4;<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>s<\/b> = (rd+ke) mod n. \u0415\u0441\u043b\u0438 s=0, \u0442\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0448\u0430\u0433\u0443 4;<\/li>\n<li>\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>r||s<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438. <\/li>\n<\/ol>\n<p>  \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>SingGen<\/b>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:  <\/p>\n<pre><code class=\"cs\">    public string SingGen(byte[] h, BigInteger d)     {             BigInteger alpha = new BigInteger(h);             BigInteger e = alpha % n;             if (e == 0)                 e = 1;             BigInteger k = new BigInteger();             ECPoint C=new ECPoint();             BigInteger r=new BigInteger();             BigInteger s = new BigInteger();             do             {                 do                 {                     k.genRandomBits(n.bitCount(), new Random());                 } while ((k &lt; 0) || (k &gt; n));                 C = ECPoint.multiply(k, G);                 r = C.x % n;                 s = ((r * d) + (k * e)) % n;             } while ((r == 0)||(s==0));             string Rvector = padding(r.ToHexString(),n.bitCount()\/4);             string Svector = padding(s.ToHexString(), n.bitCount() \/ 4);             return Rvector + Svector;      } <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>padding<\/b> \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b r \u0438 s \u0434\u043e \u0434\u043b\u0438\u043d\u044b \u043c\u043e\u0434\u0443\u043b\u044f p, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c.<\/p>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438<\/h4>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u0430 <b>Q<\/b>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0430\u044f \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0443 Q=d*G. \u0422\u043e\u0447\u043a\u0430 Q \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <b>\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u0445\u0435\u043c\u044b<\/b> \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0435\u043c\u0443.<br \/>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443:<\/p>\n<ol>\n<li>\u041f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 r \u0438 s. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 0&lt;r&lt;n \u0438 0&lt;s&lt;n, \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u00ab\u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043d\u0435 \u0432\u0435\u0440\u043d\u0430\u00bb; <\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0445\u0435\u0448 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f M: <b>H<\/b>=h(M); <\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <b>\u03b1<\/b>, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f H;<\/li>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c <b>e<\/b>=\u03b1 mod n, \u0435\u0441\u043b\u0438 e=0, \u0437\u0430\u0434\u0430\u0442\u044c e=1;<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c <b>v <\/b>= e<sup>-1<\/sup> mod n; <\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>z<sub>1<\/sub><\/b> = s*v s mod n \u0438 <b>z<sub>2<\/sub><\/b> = -r*v mod n;<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 C = z<sub>1<\/sub>*G + z<sub>2<\/sub>*Q;<\/li>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c R = x<sub>c<\/sub> mod n, \u0433\u0434\u0435 x<sub>c<\/sub> \u2014 x-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0442\u043e\u0447\u043a\u0438 C; <\/li>\n<li> \u0415\u0441\u043b\u0438 R=r, \u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432\u0435\u0440\u043d\u0430. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f.<\/li>\n<\/ol>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0444\u043e\u0440\u043c\u0443\u043b:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/b10\/63a\/d0d\/b1063ad0d247bba8c81c8cd4a704a404.png\"\/><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0442\u043e\u0447\u043a\u0443 C=k*G, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f SingVer, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443:  <\/p>\n<pre><code class=\"cs\">        public bool SingVer(byte[] H, string sing, ECPoint Q)         {             string Rvector = sing.Substring(0, n.bitCount() \/ 4);             string Svector = sing.Substring(n.bitCount() \/ 4, n.bitCount() \/ 4);             BigInteger r = new BigInteger(Rvector, 16);             BigInteger s = new BigInteger(Svector, 16);             if ((r &lt; 1) || (r &gt; (n - 1)) || (s &lt; 1) || (s &gt; (n - 1)))                 return false;             BigInteger alpha = new BigInteger(H);             BigInteger e = alpha % n;             if (e == 0)                 e = 1;             BigInteger v = e.modInverse(n);             BigInteger z1 = (s * v) % n;             BigInteger z2 = n + ((-(r * v)) % n);             this.G = GDecompression();             ECPoint A = ECPoint.multiply(z1, G);             ECPoint B = ECPoint.multiply(z2, Q);             ECPoint C = A + B;             BigInteger R = C.x % n;             if (R == r)                 return true;             else                 return false;         } <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <b>GDecompression()<\/b> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u00ab\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0443\u00bb \u0442\u043e\u0447\u0435\u043a.<\/p>\n<p>  \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043b\u0430\u0441\u0441 DSGost, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0413\u041e\u0421\u0422 34.10-2012 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">DSGost.cs<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">    class DSGost     {         private BigInteger p = new BigInteger();         private BigInteger a = new BigInteger();         private BigInteger b = new BigInteger();         private BigInteger n = new BigInteger();         private byte[] xG;         private ECPoint G = new ECPoint();                  public DSGost(BigInteger p, BigInteger a, BigInteger b, BigInteger n, byte[] xG)         {             this.a = a;             this.b = b;             this.n = n;             this.p = p;             this.xG = xG;         }          \/\/\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b         public BigInteger GenPrivateKey(int BitSize)         {             BigInteger d = new BigInteger();             do             {                 d.genRandomBits(BitSize, new Random());             } while ((d &lt; 0) || (d &gt; n));             return d;         }          \/\/\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 d \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0442\u043e\u0447\u043a\u0443 Q=d*G, \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447         public ECPoint GenPublicKey(BigInteger d)         {             ECPoint G=GDecompression();             ECPoint Q = ECPoint.multiply(d, G);             return Q;         }          \/\/\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 y \u0438\u0437 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b x \u0438 \u0431\u0438\u0442\u0430 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 y          private ECPoint GDecompression()         {             byte y = xG[0];             byte[] x=new byte[xG.Length-1];             Array.Copy(xG, 1, x, 0, xG.Length - 1);             BigInteger Xcord = new BigInteger(x);             BigInteger temp = (Xcord * Xcord * Xcord + a * Xcord + b) % p;             BigInteger beta = ModSqrt(temp, p);             BigInteger Ycord = new BigInteger();             if ((beta % 2) == (y % 2))                 Ycord = beta;             else                 Ycord = p - beta;             ECPoint G = new ECPoint();             G.a = a;             G.b = b;             G.FieldChar = p;             G.x = Xcord;             G.y = Ycord;             this.G = G;             return G;         }          \/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043d\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 q         public BigInteger ModSqrt(BigInteger a, BigInteger q)         {             BigInteger b = new BigInteger();             do             {                 b.genRandomBits(255, new Random());             } while (Legendre(b, q) == 1);             BigInteger s = 0;             BigInteger t = q - 1;             while ((t & 1) != 1)             {                 s++;                 t = t &gt;&gt; 1;             }             BigInteger InvA = a.modInverse(q);             BigInteger c = b.modPow(t, q);             BigInteger r = a.modPow(((t + 1) \/ 2), q);             BigInteger d = new BigInteger();             for (int i = 1; i &lt; s; i++)             {                 BigInteger temp = 2;                 temp = temp.modPow((s - i - 1), q);                 d = (r.modPow(2, q) * InvA).modPow(temp, q);                 if (d == (q - 1))                     r = (r * c) % q;                 c = c.modPow(2, q);             }             return r;         }          \/\/\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u041b\u0435\u0436\u0430\u043d\u0434\u0440\u0430         public BigInteger Legendre(BigInteger a, BigInteger q)         {             return a.modPow((q - 1) \/ 2, q);         }          \/\/\u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435         public string SingGen(byte[] h, BigInteger d)         {             BigInteger alpha = new BigInteger(h);             BigInteger e = alpha % n;             if (e == 0)                 e = 1;             BigInteger k = new BigInteger();             ECPoint C=new ECPoint();             BigInteger r=new BigInteger();             BigInteger s = new BigInteger();             do             {                 do                 {                     k.genRandomBits(n.bitCount(), new Random());                 } while ((k &lt; 0) || (k &gt; n));                 C = ECPoint.multiply(k, G);                 r = C.x % n;                 s = ((r * d) + (k * e)) % n;             } while ((r == 0)||(s==0));             string Rvector = padding(r.ToHexString(),n.bitCount()\/4);             string Svector = padding(s.ToHexString(), n.bitCount() \/ 4);             return Rvector + Svector;         }          \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c          public bool SingVer(byte[] H, string sing, ECPoint Q)         {             string Rvector = sing.Substring(0, n.bitCount() \/ 4);             string Svector = sing.Substring(n.bitCount() \/ 4, n.bitCount() \/ 4);             BigInteger r = new BigInteger(Rvector, 16);             BigInteger s = new BigInteger(Svector, 16);             if ((r &lt; 1) || (r &gt; (n - 1)) || (s &lt; 1) || (s &gt; (n - 1)))                 return false;             BigInteger alpha = new BigInteger(H);             BigInteger e = alpha % n;             if (e == 0)                 e = 1;             BigInteger v = e.modInverse(n);             BigInteger z1 = (s * v) % n;             BigInteger z2 = n + ((-(r * v)) % n);             this.G = GDecompression();             ECPoint A = ECPoint.multiply(z1, G);             ECPoint B = ECPoint.multiply(z2, Q);             ECPoint C = A + B;             BigInteger R = C.x % n;             if (R == r)                 return true;             else                 return false;         }          \/\/\u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043d\u0443\u043b\u044f\u043c\u0438 \u0441\u043b\u0435\u0432\u0430 \u0434\u043e \u0434\u043b\u0438\u043d\u044b n, \u0433\u0434\u0435 n - \u0434\u043b\u0438\u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0431\u0438\u0442\u0430\u0445         private string padding(string input, int size)         {             if (input.Length &lt; size)             {                 do                 {                     input = &quot;0&quot; + input;                 } while (input.Length &lt; size);             }             return input;         }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">        private void ECTest()         {             BigInteger p = new BigInteger(&quot;6277101735386680763835789423207666416083908700390324961279&quot;, 10);             BigInteger a = new BigInteger(&quot;-3&quot;, 10);             BigInteger b = new BigInteger(&quot;64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1&quot;, 16);             byte[] xG = FromHexStringToByte(&quot;03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012&quot;);             BigInteger n = new BigInteger(&quot;ffffffffffffffffffffffff99def836146bc9b1b4d22831&quot;, 16);                        DSGost DS = new DSGost(p, a, b, n, xG);             BigInteger d=DS.GenPrivateKey(192);             ECPoint Q = DS.GenPublicKey(d);                         GOST hash = new GOST(256);             byte[] H = hash.GetHash(Encoding.Default.GetBytes(&quot;Message&quot;));             string sign  = DS.SingGen(H, d);             bool result = DS.SingVer(H, sign, Q);                     } <\/code><\/pre>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u043d\u0430\u0434 \u043f\u043e\u043b\u0435\u043c \u0432\u044b\u0447\u0435\u0442\u043e\u0432 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. \u0418 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u043d\u0430\u0434 \u043f\u043e\u043b\u044f\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u0442\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435.<\/p>\n<h4>\u0421\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>  <\/p>\n<ol>\n<li><a href=\"http:\/\/www.altell.ru\/legislation\/standards\/gost-34.10-2012.pdf\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0413\u041e\u0421\u0422 34.10-2012;<\/a> <\/li>\n<li><a href=\"http:\/\/cs.ucsb.edu\/~koc\/ccs130h\/notes\/ecdsa-cert.pdf\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 ECDSA \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 \u043a\u0440\u0438\u0432\u044b\u0445.<\/a> <\/li>\n<li><a href=\"http:\/\/www.secg.org\/collateral\/sec2_final.pdf\">Standards for Efficient Cryptography, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 \u043a\u0440\u0438\u0432\u044b\u0445.<\/a><\/li>\n<\/ol>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/191240\/\"> http:\/\/habrahabr.ru\/post\/191240\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/ff3\/29e\/5fc\/ff329e5fc4ee48e53e9fc6909dd634eb.jpg\" alt=\"image\" align=\"left\"\/><br \/>  \u041f\u0440\u0438\u0432\u0435\u0442, %username%!<\/p>\n<p>  \u041f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u044f \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u043f\u043e\u0441\u0442 <a href=\"http:\/\/habrahabr.ru\/post\/188958\/\">\u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f: \u0442\u0435\u043e\u0440\u0438\u044f<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438. \u0422\u043e\u0442 \u043c\u043e\u0439 \u043f\u043e\u0441\u0442 \u043d\u043e\u0441\u0438\u043b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u0441\u043e\u0437\u0435\u0440\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u041d\u043e \u0447\u0442\u043e \u0437\u0430 \u0442\u0435\u043e\u0440\u0438\u044f \u0431\u0435\u0437 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438? \u0421 \u0446\u0435\u043b\u044c\u044e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0443\u043f\u0443\u0449\u0435\u043d\u0438\u0435 \u044f, \u0441\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u0434\u0443\u0445\u043e\u043c, \u0440\u0438\u043d\u0443\u043b\u0441\u044f \u0432 \u0431\u043e\u0439 \u0441 \u0413\u041e\u0421\u0422-\u043e\u043c 34.10-2012, \u0441\u0445\u0435\u043c\u043e\u0439 \u042d\u0426\u041f \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0442\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-191240","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/191240","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=191240"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/191240\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=191240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=191240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=191240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}