{"id":465560,"date":"2025-07-01T21:00:20","date_gmt":"2025-07-01T21:00:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=465560"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=465560","title":{"rendered":"<span>KEKS \u043a\u043e\u0434\u0435\u043a \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 X.509 PKI \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ASN.1. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439, \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 KEKS, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432.<\/p>\n<p> <a name=\"habracut\"><\/a><\/p>\n<p> \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 (PKI) \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0410 \u043e\u043d \u0435\u0449\u0451 \u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p> \u0412\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d X.509. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u0435\u0433\u043e \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0446\u0435\u043f\u043e\u0447\u0435\u043a. \u0422\u043e\u0442 \u0436\u0435 OpenSSL. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0435\u0433\u043e \u0441 \u0447\u0438\u0441\u0442\u043e\u0439 \u0441\u043e\u0432\u0435\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c? \u041b\u0438\u0447\u043d\u043e \u044f \u0431\u044b \u043d\u0435 \u0441\u043c\u043e\u0433 \u043d\u0438 \u043f\u0440\u0438 \u043a\u0430\u043a\u0438\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445. \u0427\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u043e\u0434 \u0432 \u043d\u0451\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0432\u0435\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f. \u0425\u0443\u0436\u0435 \u043a\u043e\u0434\u0430 \u043f\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443, \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0441\u0440\u0435\u0434\u0438 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432 \u043d\u0451\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438\u0441\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 (EVP \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435), \u043d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043e\u0431\u0440\u043e\u0441 \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u043c\u0438 if\/ifdef. \u0418 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0434\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p> \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 X.509? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c X.509 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442? \u041d\u0430\u043c \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435\/\u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0438 \u0441 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u043c\u0438. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 link+cross \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 indirectCRL \u0438 name constraints. \u0414\u0438\u0447\u0430\u0439\u0448\u0430\u044f, \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0451\u043d\u043d\u043e\u0441\u0442\u044c (\u043a\u0440\u043e\u043c\u0435 \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043e\u043c\u0438\u0442\u0435\u0442\u043e\u0432 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u0432\u0448\u0438\u0445). \u041d\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f WebPKI \u0438 CA\/Browser Forum, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0436\u0435 \u0434\u0430\u0436\u0435 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0442 CRL, \u0434\u043e\u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0442\u0430\u0440\u0430\u044f\u0441\u044c \u0432\u0441\u0451 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c (\u043f\u0440\u0430\u0432\u0434\u0430, \u0446\u0435\u043d\u043e\u0439 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 WWW \u0432 \u0432\u0438\u0434\u0435 Let&#8217;s Encrypt). X.509 \u0438 ASN.1 \u0434\u0438\u043a\u0442\u0443\u0435\u0442 \u0431\u0438\u0437\u043d\u0435\u0441, \u0430 \u043d\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b.<\/p>\n<p> \u041c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebPKI \u0438 \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u0441 99%+ \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 X.509? \u041c\u043d\u043e\u0433\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 OpenSSL \u0431\u044b\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043d\u0435 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c, \u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 ASN.1 (BER\/DER) \u043a\u043e\u0434\u0435\u043a\u043e\u043c. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0441 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438 X.509 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b.<\/p>\n<h2>\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441 ASN.1<\/h2>\n<p> <a href=\"https:\/\/habr.com\/ru\/articles\/444272\/\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 ASN.1<\/a>.<\/p>\n<p> \u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043a\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 ASN.1 DER? \u0423 \u0432\u0441\u0435\u0445 \u0435\u0441\u0442\u044c BER (\u043f\u0443\u0441\u043a\u0430\u0439 \u0438 \u0431\u0435\u0437 REAL \u0442\u0438\u043f\u0430, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438). \u041d\u043e \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0433\u043e\u0433\u043e DER \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u044c: <\/p>\n<ul>\n<li>\u041a\u0430\u043a \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f BOOLEAN? TRUE \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f?<\/li>\n<li>\u0410 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 SET OF?<\/li>\n<li>\u0415\u0441\u0442\u044c \u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0444\u0430\u043a\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f INTEGER?<\/li>\n<\/ul>\n<p> \u041d\u0438 OpenSSL, \u043d\u0438 Go crypto\/tls, \u043d\u0438 Mbed TLS, \u043d\u0438 WolfSSL, \u043d\u0438 GNU Libtasn1, \u043d\u0438 Bouncy Castle, \u043d\u0438 cryptlib, \u043d\u0438 NSS \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e DER \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p> \u041c\u044b \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043d\u0435\u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432\u0438\u0434\u0435\u043b\u0438 \u0434\u0430\u0436\u0435 CA (!) \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043b\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0445\u0435\u043c\u0430\u043c ASN.1 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u0438\u043d\u0430 \u043f\u043e\u043b\u0435\u0439, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u0445) \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 DER \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435\u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 SET). \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043f\u043e\u043b\u043d\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432, \u0433\u0434\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 GeneralNames CHOICE \u0447\u0443\u0436\u0435\u0440\u043e\u0434\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c.<\/p>\n<p> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f X.509, \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0442\u043e \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0439 well-known \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u043e \u0434\u0430\u0436\u0435 ASN.1 DER \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u043e\u0432. \u0412 \u043c\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 PyDERASN \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 DER, \u043d\u043e \u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Python, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438 \u043e \u043a\u0430\u043a\u0438\u0445 embedded \u0441\u0438\u0441\u0442\u0435\u043c \u0440\u0435\u0447\u0438 \u043d\u0435 \u0438\u0434\u0451\u0442. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u043b\u0438 X.509 \u0438\u043b\u0438 CMS \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0440\u043e\u0445\u043e\u0442\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430.<\/p>\n<p> \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 ASN.1 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc5652\" rel=\"nofollow noopener noreferrer\">CMS \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/a> \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043c\u0435\u0441\u044c \u0438\u0437 BER \u0438 DER \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p> \u0421\u0430\u043c \u0444\u0430\u043a\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f ASN.1 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0430\u043a, \u0432 \u0432\u0438\u0434\u0443 \u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0411\u0440\u044e\u0441 \u0428\u043d\u0430\u0439\u0435\u0440 \u0435\u0449\u0451 \u0432 1990-\u0445 \u0432 \u00ab\u041f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438\u00bb \u0434\u0430\u0432\u0430\u043b \u0441\u043e\u0432\u0435\u0442: \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043b\u0443\u0447\u0448\u0435 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h2>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b ASN.1<\/h2>\n<p> \u041a\u0430\u043a\u0438\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0435\u0441\u0442\u044c? CV-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0432 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430\u0445 \u0441 \u0447\u0438\u043f\u0430\u043c\u0438 \u2014 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c ASN.1 DER \u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. \u041d\u043e \u043e\u043d\u0438 \u043f\u043e\u043a\u0440\u043e\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438. \u0424\u043e\u0440\u043c\u0430\u0442\u044b \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 JSON \u2014 \u0431\u0435\u0437\u0443\u043c\u0438\u0435 \u043f\u043e \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443, \u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Simple_public-key_infrastructure\" rel=\"nofollow noopener noreferrer\">Simple PKI<\/a> \u0442\u043e\u0436\u0435 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e PKI, \u043d\u043e \u043d\u0435 CMS.<\/p>\n<p> LibrePGP\/OpenPGP \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u043c, \u0447\u0435\u043c ASN.1 X.509, \u043d\u043e \u0432 \u043d\u0451\u043c \u043c\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u044b\u0445 \u0440\u0443\u0434\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0441\u0432\u043e\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043a\u043e\u043b \u043c\u0435\u0436\u0434\u0443 LibrePGP \u0438 OpenPGP, \u0438\u0434\u0443\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438.<\/p>\n<p> \u041d\u043e \u043a\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0437\u0430\u0434\u0430\u0447? \u041f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u0438\u0442\u0435\u0442 \u2014 \u043b\u0435\u0433\u043a\u043e. \u0410 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0435\u0449\u0438, \u043b\u0435\u0433\u043a\u043e \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0435 \u2014 \u0441\u043b\u043e\u0436\u043d\u043e. \u0424\u0430\u043a\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0432\u0441\u0435\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c.<\/p>\n<p> \u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438\u0434\u0443\u0442 \u043f\u043e \u043f\u0443\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432. \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0421\u0438-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u043e \u0441\u0435\u0442\u0438. \u0413\u0434\u0435-\u0442\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b\u0435 XDR \u043a\u043e\u0434\u0435\u043a\u043e\u043c. \u0413\u0434\u0435-\u0442\u043e Protocol Buffers. \u0413\u0434\u0435-\u0442\u043e MessagePack. \u0412\u0441\u0451 \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0445, \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0445 \u0438 \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u0430 \u043d\u0435 \u0434\u0435-\u044e\u0440\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0431\u0443\u043c\u0430\u0436\u043a\u0435.<\/p>\n<h2>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043a\u043e\u0434\u0435\u043a\u0443<\/h2>\n<p> \u041c\u044b \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u0441\u0445\u0435\u043c\u0443. \u0421\u0445\u0435\u043c\u0430 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0434\u0430\u0451\u0442 \u0440\u044f\u0434 \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432. \u041d\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e, \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c \u0441 schema-less \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0442\u0438\u043f\u0430 JSON, bencode, MessagePack \u2014 \u043f\u0435\u0440\u0435\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442. \u0412\u0438\u0434\u0438\u043c\u043e, \u043f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u043e\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ASN.1 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043d\u0438\u0445. \u0425\u043e\u0442\u044f \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 protobuf \u0431\u044b\u043b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p> \u0413\u043b\u0430\u0432\u043d\u0435\u0439\u0448\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u043a\u043e\u0434\u0435\u043a\u0443: \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0430\u043b\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430, \u0434\u0430\u0431\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0430\u0442\u0430\u043a\u0438. \u0415\u0441\u043b\u0438 \u043a\u043e\u0434\u0435\u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432\/\u0437\u0430 \u0434\u0435\u043d\u044c, \u0442\u043e \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u043f\u0430\u0434\u0430\u044e\u0442. \u0415\u0441\u043b\u0438, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432 \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c Lua \u043d\u0435\u0442 ASN.1, \u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0437\u044b\u043a. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0435\u043a\u0430 \u043d\u0430 Lua \u2014 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u043d\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<p> \u0414\u043b\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0435\u043a\u0430. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0435\u0440\u043d\u043e\u0435, \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0425\u043e\u0442\u044f \u0435\u0441\u0442\u044c \u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0432 JSON-based \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438: \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c JSON \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e JSON. \u041d\u043e \u044d\u0442\u043e \u0436\u0443\u0442\u043a\u0438\u0439 overhead \u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0431\u0435\u0437\u044b\u0441\u0445\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u0438 web-\u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p> \u0414\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0434\u043b\u044f \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c bare metal \u0431\u0435\u0437 \u041e\u0421: \u043a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e.<\/p>\n<p> \u041f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0430\u044f\/\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043c\u0435\u0440\u044b, \u0447\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c \u2014 \u043d\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c X.509 ASN.1 DER \u0432\u0435\u0440\u0441\u0438\u044f, \u0442\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u0432\u0435\u0434\u044c \u043c\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043c\u0430\u0440\u0442-\u043a\u0430\u0440\u0442\u044b, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u043d\u0430 \u0441\u0447\u0435\u0442\u0443.<\/p>\n<p> \u041f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c JSON, \u043a\u0430\u043a \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 BSON \u0438\u043b\u0438 MessagePack \u043a\u043e\u0434\u0435\u043a\u0430\u043c\u0438. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u0446\u0438\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445! \u041a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0433\u0438\u0431\u0438\u0431\u0430\u0439\u0442, \u0438\u0431\u043e \u043a\u0430\u043a\u043e\u0439 \u0436\u0435 \u044d\u0442\u043e general purpose \u043a\u043e\u0434\u0435\u043a, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0451\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c? \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0440\u043e\u0434\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 datetime \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432: \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b<\/h2>\n<p> \u041f\u043e\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0433\u043e \u0432\u0441\u0435\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043a\u043e\u0434\u0435\u043a\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c! \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435?<\/p>\n<p> <a href=\"http:\/\/cr.yp.to\/proto\/netstrings.txt\" rel=\"nofollow noopener noreferrer\">Netstrings<\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0438: printf(&#171;%d:%s,&#187;, len(s), s). \u041d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0438\u043b\u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u0438: \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 NS(NS(s0) || NS(s1) || &#8230;) \u0438 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Canonical_S-expressions\" rel=\"nofollow noopener noreferrer\">Canonical S-expressions<\/a> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b Netstring, \u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043e\u0447\u043a\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438. \u041d\u043e \u0442\u0435, \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 csexp \u0438 SPKI, \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u0433\u0435\u043c\u043e\u0440\u0440\u043e\u0435 \u043f\u043e\u0441\u0442-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p> <a href=\"https:\/\/wiki.theory.org\/BitTorrentSpecification#Bencoding\" rel=\"nofollow noopener noreferrer\">Bencode<\/a> \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u0434\u043b\u044f BitTorrent. <\/p>\n<ul>\n<li>printf(\u00abi%de, i) \u2014 integer<\/li>\n<li>printf(\u00bb%d:%s&#187;, len(s), s) \u2014 \u0441\u0442\u0440\u043e\u043a\u0430<\/li>\n<li>\u00abl\u00bb ||\u2026 ||\u2026 || \u00abe\u00bb \u2014 \u0441\u043f\u0438\u0441\u043a\u0438<\/li>\n<li>\u00abd\u00bb || str(key) ||\u2026 || \u00abe\u00bb \u2014 \u0441\u043b\u043e\u0432\u0430\u0440\u0438<\/li>\n<\/ul>\n<p> \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u0445 \u043a\u043b\u044e\u0447\u0438 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 (\u043a\u0440\u043e\u043c\u0435 \u0441\u0442\u0440\u043e\u043a), \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0430 \u043d\u0430 Python \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d). \u041d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0435\u043d, \u043d\u0435\u0442 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u0446\u0438\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p> <a href=\"https:\/\/www.JSON.org\/json-en.html\" rel=\"nofollow noopener noreferrer\">JSON<\/a> \u2014 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p> <a href=\"https:\/\/bsonspec.org\/\" rel=\"nofollow noopener noreferrer\">BSON<\/a> \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0447\u0435\u043c JSON, \u043d\u0435 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439,<br \/> \u043d\u0435\u0442 datetime, \u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p> <a href=\"https:\/\/ubjson.org\/\" rel=\"nofollow noopener noreferrer\">Universal Binary JSON<\/a> \u043d\u0435 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439, \u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u043d\u0435 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p> <a href=\"https:\/\/msgpack.org\/\" rel=\"nofollow noopener noreferrer\">MessagePack<\/a> \u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439, \u043d\u0435 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u0435\u0442 datetime, \u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p> <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc8949\" rel=\"nofollow noopener noreferrer\">CBOR<\/a>, \u0441\u0443\u0434\u044f \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u043e\u043c! \u0412\u0441\u0451 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u2014 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e \u0432 \u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041d\u043e \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438, \u043e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043f\u0430\u0434\u0430\u0435\u0442. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0451\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b (\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044f ASN.1). <\/p>\n<ul>\n<li> \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u0432 ASN.1. \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0451 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438. \u0412 MessagePack \u0435\u0441\u0442\u044c extension \u043f\u043e\u043b\u0435, \u043d\u043e \u043e\u043d\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043f\u043e\u0447\u0442\u0438?) \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0412 CBOR-\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u043b\u043e\u0448\u044c \u0438 \u0440\u044f\u0434\u043e\u043c. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 datetime \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0442\u044d\u0433\u0438. \u0415\u0441\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f CBOR \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u044d\u0433\u0438, \u0442\u043e \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 datetime.<\/li>\n<li> \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a \u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 int(1), \u00ab1\u00bb, True \u0438 1.0 \u043a\u043b\u044e\u0447\u0430\u043c\u0438? \u041a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432 Python, Lua, Tcl?<\/li>\n<li> \u041a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 CBOR \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c. \u041d\u0430\u0448\u0438 \u0434\u0432\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u0434\u043b\u044f CBOR. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435 \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u0435\u0449\u0451 \u0438 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/draft-mcnally-deterministic-cbor-11\" rel=\"nofollow noopener noreferrer\">dCBOR<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Unicode \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0427\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0437\u0443\u043c\u043d\u043e \u0434\u043b\u044f embedded \u0441\u0438\u0441\u0442\u0435\u043c.<\/li>\n<li> \u041a\u0430\u043a\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 CBOR \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u0440\u043e\u0433\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f CBOR \u0438\u043b\u0438 dCBOR? \u0421\u0440\u0435\u0434\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u0421\u0438 \u0438 Go \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0438 \u043e\u0434\u043d\u043e\u0439!<\/li>\n<li> \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u043b\u044f CBOR \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0431\u0430\u0439\u0442\u0430\u0445. \u0412\u043c\u0435\u0441\u0442\u043e \u043f\u043b\u044e\u0441-\u043c\u0438\u043d\u0443\u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u043a\u043b\u044e\u0447\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 \u0442\u044d\u0433\u0438. \u041f\u043e\u0447\u0442\u0438 \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 ASN.1 BER.<\/li>\n<\/ul>\n<h2>KEKS<\/h2>\n<p> \u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c MessagePack, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b <a href=\"https:\/\/saltpack.org\/\" rel=\"nofollow noopener noreferrer\">Saltpack<\/a>? \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e if-\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f? \u041f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u0432\/\u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439. 32-\u0431\u0438\u0442 \u0434\u043b\u0438\u043d\u044b \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 64-\u0431\u0438\u0442? \u041d\u043e \u044d\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043e\u043c \u043a\u043e\u0434\u0435\u043a.<\/p>\n<p> \u0410 \u0440\u0430\u0437 \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e (\u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0441\u0442\u044c, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445) \u043d\u0435\u0442, \u0434\u043e\u0434\u0435\u043b\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u0434\u0435\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0435\u043a\u0430 \u0441 \u043d\u0443\u043b\u044f. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p> \u0422\u0430\u043a \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f KEKS \u0444\u043e\u0440\u043c\u0430\u0442: <\/p>\n<pre> Kompakt (compact) Entschlossen (deterministic) Knapp (concise) Str\u00f6men\/stream(able) <\/pre>\n<p> \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 YAC: \u00abYet Another Codec\u00bb, \u00abYAC Ain&#8217;t CBOR\u00bb.<\/p>\n<p> \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 TLV-like (tag-length-value) \u043f\u043e\u0434\u0445\u043e\u0434, \u0433\u0434\u0435 \u00abL\u00bb \u0438 \u00abV\u00bb \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0435.<\/p>\n<p> \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0438 ASCII-\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u0438\u043d, varint \u0438\u043b\u0438 zig-zag \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f int-\u043e\u0432 \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 if-\u044b \u0432 \u0446\u0438\u043a\u043b\u0430\u0445, \u0447\u0442\u043e \u0432\u0440\u0435\u0434\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0422\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u0445! \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u043a, \u0442\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f!<\/p>\n<p> \u041a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 KEKS \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442? <\/p>\n<ul>\n<li>NIL (none, null), FALSE \u0438 TRUE \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u044d\u0433\u043e\u043c.<\/li>\n<li>HEXLET: \u0442\u044d\u0433 + 16 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0439\u0442. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c UUID, IPv6. \u041e\u043d \u043d\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u0435\u0435 \u0447\u0435\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0434\u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/li>\n<li>\u0443 \u0441\u0442\u0440\u043e\u043a \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d 8-\u0439 \u0431\u0438\u0442 \u0442\u044d\u0433\u0430.<br \/> \n<pre> 7-\u0439 \u0431\u0438\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u043b\u0438 \u043e\u043d\u0430 \u0438\u043b\u0438 UTF-8. \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 6 \u0431\u0438\u0442 \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442 \u0434\u043b\u0438\u043d\u0443:     \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f 0-60 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0441\u0442\u044c.     61 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 8 \u0431\u0438\u0442 + 61.     62: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 16-\u0431\u0438\u0442 + 255 + 62.     63: \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 64-\u0431\u0438\u0442 + 65535 + 255 + 63. <\/pre>\n<p> \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f 8\/16\/64 \u0431\u0438\u0442 as-is, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p> \u0414\u043b\u044f UTF-8 \u0441\u0442\u0440\u043e\u043a \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435: \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 UTF-8 codepoint-\u043e\u0432. \u0414\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c. \u041d\u043e UTF-8 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0441\u0447\u0443\u0440 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438. \u041a\u043e\u0434 \u043d\u0430 \u0421\u0438 \u0434\u043b\u044f UTF-8 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u044d\u043a\u0440\u0430\u043d\u0430. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0432 \u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442.<\/li>\n<li>\u0434\u043b\u044f \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0434\u0432\u0430 \u0442\u044d\u0433\u0430: \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043b\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435. \u041f\u043e\u0441\u043b\u0435 \u0442\u044d\u0433\u0430 \u0438\u0434\u0451\u0442 KEKS-\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f big-endian \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430. \u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a (-1 \u2014 value). \u0422\u0430\u043a \u0436\u0435, \u043a\u0441\u0442\u0430\u0442\u0438, \u0438 \u0432 CBOR \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f.<\/li>\n<li>FLOAT \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u044d\u0433 \u0441 \u0434\u0432\u0443\u043c\u044f KEKS-\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 INT-\u0430\u043c\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443 \u0438 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0443 (\u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044e 2). \u041d\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e, \u043d\u043e \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0434\u043a\u043e \u0433\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u043e\u0431\u0449\u0438\u0445\u00bb \u0437\u0430\u0434\u0430\u0447\u0430\u0445.<\/li>\n<li>LIST: \u0442\u044d\u0433 + \u0441\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043f\u0438\u0441\u043a\u0430 + EOC. EOC \u2014 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442.<\/li>\n<li>MAP \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0438 key-value \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041a\u043b\u044e\u0447 \u2014 \u043d\u0435 \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u0412\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0434\u043b\u0438\u043d\u044b (\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430).<\/li>\n<li>SET: \u044d\u0442\u043e MAP, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f NIL-\u0430\u043c\u0438. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430.<\/li>\n<li> \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f datetime \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0442\u0440\u0438 \u0442\u044d\u0433\u0430: TAI64, TAI64N, TAI64NA. \u042d\u0442\u043e <a href=\"http:\/\/cr.yp.to\/libtai\/tai64.html\" rel=\"nofollow noopener noreferrer\">\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439<\/a> \u0414\u044d\u043d\u0438\u0435\u043b\u0435\u043c \u0411\u0435\u0440\u043d\u0448\u0442\u0435\u0439\u043d\u043e\u043c (DJB) \u0444\u043e\u0440\u043c\u0430\u0442. 64-\u0431\u0438\u0442 big-endian \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e TAI \u0441\u0435\u043a\u0443\u043d\u0434 \u0441 1970-\u0433\u043e \u0433\u043e\u0434\u0430, \u043f\u043b\u044e\u0441 2**62. \u00ab\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u043b\u044f \u2014 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0440\u0435\u043c\u044f \u0434\u043e 1970 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. TAI64N \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a TAI64 32-\u0431\u0438\u0442 big-endian \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434. TAI64NA \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0451 32-\u0431\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0442\u0442\u043e\u0441\u0435\u043a\u0443\u043d\u0434.\n<p> \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u044d\u0442\u043e \u043d\u0435 UTC, \u0430 TAI \u2014 \u043d\u0435 \u0430\u0441\u0442\u0440\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435, \u0430 \u0430\u0442\u043e\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. TAI, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 UTC, \u0438\u0434\u0451\u0442 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e. \u0412 UTC \u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f TAI\u21d4UTC \u043d\u0443\u0436\u043d\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 leap seconds. \u041d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 27 32-\u0431\u0438\u0442 \u0447\u0438\u0441\u0435\u043b, \u0447\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 100 \u0431\u0430\u0439\u0442 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0446\u0438\u043a\u043b.<\/li>\n<li>BLOB: \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430:<br \/> \n<pre> \u0442\u044d\u0433 + 64-\u0431\u0438\u0442 big-endian chunk-len + BIN(chunk) + ... + BIN(last-chunk). <\/pre>\n<p> last-chunk \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0447\u0435\u043c chunk-len, \u043f\u0443\u0441\u043a\u0430\u0439 \u0434\u0430\u0436\u0435 \u043d\u0443\u043b\u0435\u0432\u0443\u044e.<\/p>\n<p> \u0412 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0442\u0438\u043f\u0430 ASN.1 CER, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 (chunk), \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e. \u0412 KEKS \u0436\u0435, \u0447\u0451\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u0435\u043c, \u0433\u0434\u0435 \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0439\u0442\u0438 \u2014 \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c BLOB.<\/p>\n<p> \u0420\u0430\u0437\u043c\u0435\u0440 chunk-\u0430 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0436\u0435\u043b\u0430\u043d\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 BLOB, \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0434\u043b\u0438\u043d\u044b chunk, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. chunk-\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043b\u0438\u043d\u0443 chunk-len + 1 (\u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 chunk-len != 0).<\/li>\n<li>MAGIC: 16 \u0431\u0430\u0439\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 \u00abKEKS\u00bb ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. 12 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0431\u0430\u0439\u0442 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0437\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0430\u043b\u0435\u0435. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 PEM-\u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u043a\u043b\u044e\u0447 \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442.<\/li>\n<\/ul>\n<p> \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 MAGIC, BLOB \u0438 FLOAT. \u0422\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 TAI\u21d4UTC \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/h2>\n<p> \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u0431\u044b \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u0430\u2026 \u0441\u0445\u0435\u043c\u0430. \u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438 \u0431\u0435\u0437 \u043d\u0435\u0451, \u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0441\u043b\u0435.<\/p>\n<p> \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c XML Schema \u0438\u043b\u0438 JSON Schema \u2014 \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0438\u0437-\u0437\u0430 \u0431\u0435\u0437\u0443\u043c\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0438 \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0414\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430 embedded \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u2014 \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p> \u0412 \u0447\u0451\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440? \u0412 90%+ \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c \u00ab\u0443\u0431\u0435\u0434\u0438\u0441\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 XXX\u00bb, \u00ab\u0443\u0431\u0435\u0434\u0438\u0441\u044c, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u043f\u043e\u043b\u044f \u0440\u0430\u0432\u043d\u0430 XXX\u00bb, \u00ab\u0443\u0431\u0435\u0434\u0438\u0441\u044c, \u0447\u0442\u043e \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0443 \u043f\u043e\u043b\u044f XXX\u00bb, \u0438 \u0442.\u0434\u2026 \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0431\u044b\u043b \u0431\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0435\u043a\u0430. \u041e\u043d, \u043f\u043e \u0441\u0443\u0442\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u043c \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0445\u0435\u043c\u044b. \u041d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p> \u0421\u0445\u0435\u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434. \u041a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u043c, \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0438\u0434\u0451\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043c\u0435\u044e\u0442\u0441\u044f? <\/p>\n<ul>\n<li> TAKE x \u2014 \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u00ab\u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435\u00bb \u044d\u043b\u0435\u043c\u0435\u043d\u0442 x. \u0415\u0441\u043b\u0438 x \u044d\u0442\u043e NIL, \u0442\u043e \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 x \u044d\u0442\u043e INT, \u0442\u043e \u0431\u0435\u0440\u0451\u0442\u0441\u044f x-\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430. \u0415\u0441\u043b\u0438 x \u044d\u0442\u043e STR, \u0442\u043e \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0443 x. \u0412\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f (\u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438) \u043d\u0430\u0434 taken \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f.<\/li>\n<li> EXISTS \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 (taken) \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/li>\n<li> TYPE t0 t1\u2026 \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 (t0, t1, &#8230;).<\/li>\n<li> LT x (\u0438\u043b\u0438 GT x) \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 (\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435) x. \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044d\u0442\u043e INT, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e BIN\/STR, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438. \u0415\u0441\u043b\u0438 LIST\/MAP, \u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/li>\n<li> EQ x \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0432\u043d\u043e x. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c BIN\/STR, MAGIC, HEXLET, TAI.<\/li>\n<li> UTC \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e TAI \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 UTC.<\/li>\n<li> TP x \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 TAI \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c (time precision) \u0434\u043e 10**(-x) \u0441\u0435\u043a\u0443\u043d\u0434. \u0413\u0434\u0435-\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434, \u0433\u0434\u0435-\u0442\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/li>\n<li> SCHEMA x \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0445\u0435\u043c\u044b x. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430: \u0432\u044b\u0437\u043e\u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0445\u0435\u043c\u044b.<\/li>\n<li> EACH \u2014 \u00ab\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c\u00bb \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 LIST\/MAP \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041f\u043e \u0441\u0443\u0442\u0438, \u043a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 taken \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432: TAKE \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c, \u0430 EACH \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c.<\/li>\n<\/ul>\n<p> \u041f\u043e\u043a\u0430 \u0438\u0445 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0447. \u041d\u043e \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b \u0438 \u0441\u0445\u0435\u043c\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 FLOAT \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p> \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u0441\u0445\u0435\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc8610\" rel=\"nofollow noopener noreferrer\">CDDL<\/a> \u0444\u043e\u0440\u043c\u0430\u0442\u0435: <\/p>\n<pre> ai = text .gt 0 fpr = bytes .size 32 our = {a: ai, v: bytes\/text, fpr: fpr, ?comment: text} <\/pre>\n<p> \u0421\u043b\u043e\u0432\u0430\u0440\u044c \u00abour\u00bb \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u00abcomment\u00bb \u043f\u043e\u043b\u0435, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u00abv\u00bb, \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u00abai\u00bb \u0438 \u00abfpr\u00bb \u0434\u043b\u0438\u043d\u043e\u0439 32 \u0431\u0430\u0439\u0442\u0430. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0430\u043a: <\/p>\n<pre> {\"our\": [     [\"TYPE\", \"MAP\"],      [\"TAKE\", \"a\"],     [\"EXISTS\"],     [\"TYPE\", \"STR\"],     [\"GT\", 0],      [\"TAKE\", \"v\"],     [\"EXISTS\"],     [\"TYPE\", \"BIN\", \"STR\"],      [\"TAKE\", \"fpr\"],     [\"EXISTS\"],     [\"TYPE\", \"BIN\"],     [\"GT\", 31],     [\"LT\", 33],      [\"TAKE\", \"comment\"],     [\"TYPE\", \"STR\"], ]} <\/pre>\n<p> \u0438\u043b\u0438 \u0442\u0430\u043a: <\/p>\n<pre> { \"ai\": [     [\"TYPE\", \"STR\"],     [\"GT\", 0], ], \"fpr\": [     [\"TYPE\", \"BIN\"],     [\"GT\", 31],     [\"LT\", 33], ], \"our\": [     [\"TYPE\", \"MAP\"],      [\"TAKE\", \"a\"],     [\"EXISTS\"],     [\"SCHEMA\", \"ai\"],      [\"TAKE\", \"v\"],     [\"EXISTS\"],     [\"TYPE\", \"BIN\", \"STR\"],      [\"TAKE\", \"fpr\"],     [\"EXISTS\"],     [\"SCHEMA\", \"fpr\"],      [\"TAKE\", \"comment\"],     [\"TYPE\", \"STR\"], ] } <\/pre>\n<p> \u0410 CDDL \u0441\u0445\u0435\u043c\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 INT): <\/p>\n<pre> latitude = -90..90 longitude = -180..180 where = [latitude, longitude] wheres = [+ where] <\/pre>\n<p> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u0442\u0430\u043a: <\/p>\n<pre> { \"where\": [     [\"TYPE\", \"L\"],     [\"GT\", 1],     [\"LT\", 3],      [\"EACH\"],     [\"TYPE\", \"INT\"],      [\"TAKE\", 0],     [\"GT\", -91],     [\"LT\", 91],      [\"TAKE\", 1],     [\"GT\", -181],     [\"LT\", 181], ], \"wheres\": [     [\"TYPE\", \"LIST\"],     [\"GT\", 0],     [\"EACH\"],     [\"SCHEME\", \"where\"], ], } <\/pre>\n<h2>KEKS\/Schema<\/h2>\n<p> \u041d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e just-for-fun \u0431\u044b\u043b \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d KEKS encoder \u043d\u0430 Tcl. \u0418\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0451\u043c \u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434. <\/p>\n<pre> MAP {     wheres {LIST {         {LIST {{STR TYPE} {STR LIST}}}         {LIST {{STR GT} {INT 0}}}         {LIST {{STR EACH}}}         {LIST {{STR SCHEME} {STR where}}}     }}     ... } <\/pre>\n<p> \u041d\u043e \u043d\u0430 Tcl \u043b\u0435\u0433\u043a\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c \u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439. \u041f\u0430\u0440\u0430 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u00abfield\u00bb: <\/p>\n<pre> ai {{field . {str} &gt;0}} fpr {{field . {bin} len=32}} our {     {field . {map}}     {field a {with ai}}     {field v {bin str}}     {field fpr {with fpr}}     {field comment {str} optional} } <\/pre>\n<p> <\/p>\n<pre> latitude {{field . {int} &gt;-91 &lt;91}} longitude {{field . {int} &gt;-181 &lt;181}} where {     {field . {list} len=2}     {field 0 {with latitude}}     {field 1 {with longitude}} } wheres {{field . {list} {of where} &gt;0}} <\/pre>\n<p> \u0410 \u0442\u0435\u043b\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: <\/p>\n<pre> pub-load {     {field . {map}}     {field id {with fpr}}     {field crit {} !exists} {# critical extensions}     {field ku {set} &gt;0 optional}     {field pub {list} {of av} &gt;0}     {field sub {map} {of type str} &gt;0} } av {     {field . {map}}     {field a {str} &gt;0} {# algorithm identifier}     {field v {bin}} } <\/pre>\n<p> \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u043d\u0435\u0435 \u0447\u0435\u043c XML\/JSON Schema. \u041a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 ASN.1 \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u2014 \u043f\u043e\u0439\u043c\u0443\u0442 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0439. \u0418 \u0432\u0441\u044f \u044d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0441 field: <\/p>\n<pre> {field N {T ...} [optional] [!exists] [{of type T}] [{of S}]     [&gt;n] [&lt;n] [len=n] [=v] [prec=p] [utc]} <\/pre>\n<p> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 KEKS-\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p> \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e KEKS-\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u041f\u043e\u043b\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 (\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430) \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 682 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041f\u0440\u0438\u0447\u0451\u043c \u0434\u0430\u0436\u0435 gzip-\u043e\u043c \u044d\u0442\u043e \u0441\u043e\u0436\u043c\u0451\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430.<\/p>\n<p> \u0417\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0430 ASN.1 CHOICE-\u043e\u0432 \u0438 DEFINED BY \u043f\u043e\u043b\u0435\u0439. \u041d\u0435\u0442 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0435\u0433\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0414\u0430 \u0438 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 ASN.1 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0434\u043a\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432 \u043a\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 switch \u043f\u043e \u043f\u043e\u043b\u044f\u043c \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<h2>\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442<\/h2>\n<p> \u0422\u0430\u043a \u043a\u0430\u043a\u0438\u043c \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430? \u0410 \u0442\u043e\u0447\u043d\u0435\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 KEKS\/CM (cryptographic messages), \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 CMS.<\/p>\n<p> \u0427\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445? \u041d\u0438\u0447\u0435\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0432\u0438\u0434\u043e\u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445? \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u00abcm\/signed\u00bb (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 MAGIC): <\/p>\n<pre> signed {     {field . {map}}     {field load {with load}}     {field sigs {list} {of sig} &gt;0 optional}     {field pubs {list} {of type map} &gt;0 optional} } load {     {field . {map}}     {field t {str} &gt;0}     {# field v is optional, arbitrary type} } sig {     {field . {map}}     {field tbs {with tbs}}     {field sign {with av}} } tbs {     {field . {map}}     {field sid {with fpr}}     {field nonce {bin} &gt;0 optional} {# random bytes}     {field when {tai} utc prec=ms optional} } <\/pre>\n<p> \u0412\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 CMS SignedData. \u0422\u0430\u043a \u0443\u0436 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e SignedData \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 PKCS#12. \u0410 \u0441\u0430\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 (pub-load) \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \/load\/v.<\/p>\n<p> \u041f\u043e\u0434\u043f\u0438\u0441\u044c sig \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430: <\/p>\n<pre> pub-sig-tbs {     {field . {map}}     {field sid {with fpr}}     {field cid {hexlet}}     {field exp {with expiration}}     {field nonce {bin} &gt;0 optional}     {field when {tai} utc prec=ms optional} } exp-tai {{field . {tai} prec=s utc}} expiration {{field . {list} {of exp-tai} len=2}} <\/pre>\n<p> \u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u044b\u0432\u0430\u044e\u0442 application use-case, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e. \u041f\u043e\u043b\u0435 \u0438\u043c\u0435\u043d\u0438 (\u00absub\u00bbject) \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 MAP \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438. \u00abid\u00bb \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u044d\u0448\u043e\u043c \u043e\u0442 \u043f\u043e\u043b\u044f \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e SubjectKeyIdentifier \u0438\u0437 X.509.<\/p>\n<p> \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439 \u043d\u0430\u0434 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 CA-specific \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0438\u0437 \u0442\u0435\u043b\u0430 pub-load \u0432 pub-sig-tbs \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 trust anchor.<\/p>\n<p> \u00absid\u00bb \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u044d\u0442\u043e \u00abid\u00bb \u043f\u043e\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u00abcid\u00bb \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0442\u0430\/CA. UUIDv7 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u041f\u043e\u0434\u043f\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0434: <\/p>\n<pre> \/load || \/sig\/.\/tbs <\/pre>\n<p> \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 (\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430): <\/p>\n<pre> MAGIC cm\/pub MAP {   load {MAP {     t {STR pub}     v {MAP {       id {BIN \"6aee...\"}       pub {LIST {         {MAP {           a {STR ed25519-blake2b}           v {BIN \"c1bf...\"}         }}       }}       sub {MAP {         N {STR test}       }}     }}   }}   sigs {LIST {     {MAP {       tbs {MAP {         cid {HEXLET 01963308-1033-75a7-bfb6-7d3ab3db6d63}         exp {LIST {           {TAI64 \"2025-04-14 06:41:28\"}           {TAI64 \"2026-04-14 06:41:28\"}         }}         sid {BIN \"0087...\"}       }}       sign {MAP {         a {STR ed25519-blake2b}         v {BIN \"7450...\"}       }}     }}   }} } <\/pre>\n<h2>Prehashed signature<\/h2>\n<p> \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \/load\/v \u043f\u043e\u043b\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e. \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0435 cm\/signature \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0434: <\/p>\n<pre> detached-data || \/load || \/sig\/.\/tbs <\/pre>\n<p> \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u00ab\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f\u00bb prehash \u0440\u0435\u0436\u0438\u043c. \u041c\u043d\u043e\u0433\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 prehash \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0438 \u00ab\u0447\u0438\u0441\u0442\u044b\u043c\u00bb, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b. \u041d\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 Ed25519 \u0438 SLH-DSA, \u044d\u0442\u043e \u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f, \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439, \u0433\u0434\u0435 prehash \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u00abcollision resilience\u00bb \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0431\u044b\u043b \u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043e\u0441\u043e\u0431\u044b\u0439 prehash \u0440\u0435\u0436\u0438\u043c.<\/p>\n<p> \u042d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0445\u043e\u0440\u043e\u0448 \u0435\u0449\u0451 \u0438 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0435 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a: <\/p>\n<pre> MAGIC(cm\/signed) || prehash || BLOB(detached-data) || cm\/signed <\/pre>\n<p> \u0433\u0434\u0435 prehash \u044d\u0442\u043e: <\/p>\n<pre> prehash {     {field . {map}}     {field t {str} =prehash}     {field algos {set} &gt;0} {# set of hash algorithm identifiers} } <\/pre>\n<p> \u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0441 300KiB \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 prehashed \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e SLH-DSA \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c: <\/p>\n<pre> Magic(cm\/signed) { 2   t: \"prehash\"   algos: { 1     slh-dsa-shake-256s-ph: NIL   } } BLOB[ 3 l=131072   0: 131072:E2D457B7...   1: 131072:55C74080...   2: 45056:A7E604CD6... ] { 2   load: { 1     t: \"some-type\"   }   sigs: [ 1     0: { 2       tbs: { 3         sid: 32:A437...         when: TAI64N(2025-06-26 13:06:46.571000000 TAI,                      2025-06-26 13:06:09.571000000 UTC)       }       sign: { 2         a: \"slh-dsa-shake-256s-ph\"         v: 29792:9E1...       }     }   ] } <\/pre>\n<p> \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0435\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 (cm\/signed \u0431\u0435\u0437 \u043f\u043e\u0434\u043f\u0438\u0441\u0438) \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438: <\/p>\n<pre> Magic(cm\/pub) { 1   load: { 2     t: \"pub\"     v: { 4       id: 32:A437...       ku: { 1         sig: NIL       }       pub: [ 1         0: { 2           a: \"slh-dsa-shake-256s\"           v: 64:2AC6...         }       ]       sub: { 1         what: \"ever\"       }     }   } } <\/pre>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0438<\/h2>\n<p> \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435: <\/p>\n<ul>\n<li> <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc8032\" rel=\"nofollow noopener noreferrer\">Ed25519<\/a>-BLAKE2b \u0438 \u0435\u0433\u043e prehash \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0411\u044b\u0441\u0442\u0440\u044b\u0439, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u043f\u043e \u043a\u043e\u0434\u0443, \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043f\u043e\u0440\u043e\u0433\u043e\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0412\u043c\u0435\u0441\u0442\u043e SHA2-512 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f BLAKE2b, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0435\u0449\u0451 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u0433\u043e \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0435\u0442 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c.<\/li>\n<li> \u0413\u041e\u0421\u0422 \u0420 34.10-2012 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u042d\u0434\u0432\u0430\u0440\u0434\u0441\u0430. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e prehash \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u041d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0420\u0424.<\/li>\n<li> <a href=\"https:\/\/csrc.nist.gov\/pubs\/fips\/205\/final\" rel=\"nofollow noopener noreferrer\">SLH-DSA<\/a>-SHAKE-256s (stateless hash-based digital signature algorithm), \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 <a href=\"https:\/\/sphincs.org\/\" rel=\"nofollow noopener noreferrer\">SPHINCS+<\/a>. \u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043a\u043e \u0432\u0437\u043b\u043e\u043c\u0443 \u043d\u0430 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445, \u0438\u0431\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0445\u044d\u0448\u0435\u0439. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u043e\u0434 30\u041a\u0411, \u0437\u0430\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439 \u0432 \u0435\u0433\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/li>\n<\/ul>\n<p> \u0411\u044b\u043b\u0438 \u043c\u044b\u0441\u043b\u0438 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0445 PQ\/T \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439, \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044f \u00ab\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u0443\u044e\u00bb \u0438 \u00ab\u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0443\u044e\u00bb \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u043d\u043e \u0438\u043c\u0435\u044f SPHINCS+ \u2014 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u0430. <a href=\"https:\/\/sphincs.cr.yp.to\/\" rel=\"nofollow noopener noreferrer\">Eliminate the state!<\/a> \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c SHA2 \u0432 SPHINCS+\/SLH-DSA \u043d\u0430 \u0421\u0442\u0440\u0438\u0431\u043e\u0433 \u0438 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0413\u041e\u0421\u0422\u043e\u0432.<\/p>\n<p> \u041f\u043e\u0447\u0435\u043c\u0443 \u0432 KEKS\/CM \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f BLAKE2, \u0434\u0430\u0436\u0435 \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u044f SHA2, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Ed25519? \u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0444\u0438\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430 SHA3 \u2014 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u044b. \u0418\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0437\u0430\u043f\u0430\u0441 \u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u2014 \u0437\u0430 \u0441\u0442\u043e\u043b\u044c \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043b\u0438\u0448\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u043b\u043e\u043c\u0430\u0442\u044c. \u041e\u043d \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443\/\u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f HChaCha \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 ChaCha20 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434\/\u0436\u0435\u043b\u0435\u0437\u043e \u0438 \u0434\u043b\u044f BLAKE2 \u0438 \u0434\u043b\u044f ChaCha20 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0411\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u043c Skein (\u0442\u043e\u0436\u0435 \u0444\u0438\u043d\u0430\u043b\u0438\u0441\u0442 SHA3), \u044f \u043c\u043d\u043e\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432 \u0435\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043d\u043e \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u0432\u0435\u0441\u043e\u043c\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430.<\/p>\n<p> \u042f \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 SHA2. \u0414\u0430, \u0435\u0433\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0430 \u0432\u043d\u0435 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439. \u041d\u043e \u043e\u043d \u0441\u0430\u043c\u044b\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0440\u0435\u0434\u0438 \u0445\u043e\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u041e\u0442\u043d\u044e\u0434\u044c \u043d\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0435\u043d \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0442\u0435\u0447\u0451\u0442 \u043f\u043e \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c. \u0412 Keccak (SHA3 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c) \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0415\u0433\u043e SHAKE \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b SHA2, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f). \u0418\u0437-\u0437\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 length-extension attack, \u0441 SHA2 \u043d\u0430\u0434\u043e \u0431\u044b\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445 \u043c\u044b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u0438\u0434\u0438\u043c SHAKE (\u0438\u043b\u0438 SHA3).<\/p>\n<h2>\u0414\u0435\u0440\u0435\u0432\u044c\u044f \u041c\u0435\u0440\u043a\u043b\u0430<\/h2>\n<p> \u0423 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 (\u043a\u0430\u043a \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u044d\u0448\u0435\u0439 \u0432 cm\/hashed) \u0435\u0441\u0442\u044c &#171;-merkle&#187; prehash \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0435\u0440\u0435\u0432\u0430 \u041c\u0435\u0440\u043a\u043b\u0430. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9162\" rel=\"nofollow noopener noreferrer\">Certificate Transparency<\/a> \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0432\u0441\u0435\u0433\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u043b\u043e\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0440\u043e\u043c\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e), \u043e\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0445\u044d\u0448, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0430\u0440\u044b \u0445\u044d\u0448\u0435\u0439 \u0434\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u0430: <\/p>\n<pre>             hash            \/    \\           \/      \\          \/        \\         \/          \\        \/            \\       k              l      \/ \\            \/ \\     \/   \\          \/   \\    \/     \\        \/     \\   g       h      i      j  \/ \\     \/ \\    \/ \\     |  a b     c d    e f     d6  | |     | |    | | d0 d1   d2 d3  d4 d5 <\/pre>\n<p> \u0412\u0441\u0451 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0441\u0447\u0451\u0442\u0430. \u0414\u0430\u0436\u0435 \u043d\u0435\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u0413\u041e\u0421\u0422 \u0421\u0442\u0440\u0438\u0431\u043e\u0433 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u043f\u043e\u0434 \u0413\u0438\u0411\/\u0441\u0435\u043a \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043c\u043e\u0451\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435.<\/p>\n<p> \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u044f\u0432\u043d\u0430\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u0446\u0438\u044f \u0445\u044d\u0448\u0435\u0439 \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 dX \u0438 \u0432\u044b\u0448\u0435\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043b\u0438\u0441\u0442\u044c\u0435\u0432. Certificate Transparency RFC \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c 0x00 \u0438\u043b\u0438 0x01 \u043f\u0435\u0440\u0435\u0434 \u0445\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0432 KEKS\/CM \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0443\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <\/p>\n<ul>\n<li> BLAKE2b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u00abNODE\u00bb \u0438\u043b\u0438 \u00abLEAF\u00bb, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u0432 BLAKE2b-MAC. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f BLAKE2b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432, \u043d\u043e \u043d\u0435 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u044d\u0442\u043e\u0442 API<\/li>\n<li> \u0412\u043c\u0435\u0441\u0442\u043e SHAKE \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f cSHAKE, \u0441 personalisation string \u0440\u0430\u0432\u043d\u044b\u043c \u00abNODE\u00bb \u0438\u043b\u0438 \u00abLEAF\u00bb<\/li>\n<\/ul>\n<h2>cm\/encrypted<\/h2>\n<p> \u0422\u0430\u043a \u0443\u0436 \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f KEKS\/CM, \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0442\u044c \u0444\u0430\u043a\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0439 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0432 age \u0443\u0442\u0438\u043b\u0438\u0442\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 use-case \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f GnuPG: <a href=\"https:\/\/habr.com\/ru\/articles\/786302\/\">Libre\/OpenPGP vs OpenSSH\/age<\/a>.<\/p>\n<p> \u0412 Go crypto\/tls \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u043e\u0433\u043e ML-KEM \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u0412 OpenSSH \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f Streamlined NTRU Prime (SNTRUP). \u0412 GnuPG \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 Kyber! \u0410 \u0432\u043e\u0442 age \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043d \u043e\u0442 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u043e\u0439 \u0443\u0433\u0440\u043e\u0437\u044b, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0440\u0430\u0437\u0430\u043c\u0438. \u0412 Saltpack \u043d\u0435\u0442 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. <a href=\"https:\/\/www.kryptor.co.uk\/specification\" rel=\"nofollow noopener noreferrer\">Kryptor<\/a>, <a href=\"https:\/\/www.wireguard.com\/\" rel=\"nofollow noopener noreferrer\">WireGuard<\/a>, <a href=\"https:\/\/datatracker.ietf.org\/doc\/rfc9180\/\" rel=\"nofollow noopener noreferrer\">HPKE<\/a> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 PQ \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 PSK (pre-shared key).<\/p>\n<p> \u0420\u0430\u0437 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 KEKS \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e KEKS\/CM, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u00abcm\/encrypted\u00bb \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 CMS EnvelopedData? <\/p>\n<pre> encrypted {     {field . {map}}     {field dem {with dem}}     {field kem {list} {of kem} &gt;0}     {field id {hexlet} optional}     {field payload {bin} optional} } dem {     {field . {map}}     {field a {str} &gt;0} } kem {     {field . {map}}     {field a {str} &gt;0}     {field cek {bin} &gt;0}     {# other fields depending on algorithm} } <\/pre>\n<p> \u042d\u0442\u043e \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c payload. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0434\u0451\u0442 \u043f\u043e\u0441\u043b\u0435 encrypted: <\/p>\n<pre> MAGIC(cm\/encrypted) || encrypted || BLOB(payload) <\/pre>\n<p> \u041f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 (\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0430) DEM (data encapsulation mechanism). DEM \u0442\u0440\u0435\u0431\u0443\u0435\u0442 CEK (content encryption key) \u043a\u043b\u044e\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u043c (\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c) \u0432\u0438\u0434\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 keywrap-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445, \u043a\u043b\u044e\u0447 KEK (key encryption key) \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0437\u043d\u0430\u0451\u0442\u0441\u044f \u0438\u0437 KEM (key encapsulation mechanism) \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u0430, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442\u0441\u044f. <\/p>\n<pre> KEM(recipient\/passphrase) =&gt; KEK keywrap(KEK, CEK) =&gt; secured(CEK) DEM(CEK, payload) =&gt; secured(payload) <\/pre>\n<p> <a href=\"https:\/\/habr.com\/ru\/articles\/692254\/\">\u041d\u0435\u0443\u0436\u0442\u043e \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b?<\/a><\/p>\n<h2>xchapoly-krkc DEM<\/h2>\n<p> DEM-\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f (AEAD) \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0437\u0430\u043f\u0430\u0441\u0443 \u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043c\u0430\u043b\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0443\u0442\u0435\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Salsa20 \u0438 \u0435\u0451 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 ChaCha20. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0435\u0439 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f Poly1305 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ChaCha20 \u0438 Poly1305 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043e\u0431\u0437\u044b\u0432\u0430\u044e\u0442 \u00abChaPoly\u00bb.<\/p>\n<p> \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043e\u043c \u0432\u0441\u0451 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0438 \u043d\u0430\u043c \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0443\u0442\u0435\u0447\u0435\u043a \u043f\u043e \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 128\u041a\u0438\u0411) \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u0430, \u044d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442\u0430 \u043a\u0430\u0436\u0434\u044b\u0445 128\u041a\u0438\u0411 \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 MAC \u0442\u044d\u0433\u0430, \u043d\u043e \u043d\u0435 \u0432\u0435\u043b\u0438\u043a\u0430 \u043f\u043e\u0442\u0435\u0440\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p> \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u0430\u043a-\u0442\u043e \u044f\u0432\u043d\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 chunk \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043d\u044b\u043c. \u0418\u043d\u0430\u0447\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0438 \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0431\u0438\u0442\u043e\u0432 nonce-\u0430, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043a ChaPoly. \u0415\u0441\u043b\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f chunk-\u0430 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0430, \u0442\u043e \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0430 (\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 chunk), \u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u0448 DEM \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0433 \u0431\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a: <\/p>\n<pre> H = BLAKE2b CK0 = CEK CKi = HKDF-Extract(H, salt=\"\", ikm=CK{i-1}) KEY = HKDF-Expand(H, prk=CKi, info=\"cm\/encrypted\/xchapoly-krkc\/key\") IV = HKDF-Expand(H, prk=CKi, info=\"cm\/encrypted\/xchapoly-krkc\/iv\", len=24) if {last chunk} then { IV[23] |= 0x01 } else { IV[23] &amp;= 0xFE } CIPHERTEXT || TAG = XChaCha20-Poly1305(key=KEY, ad=\"\", nonce=IV, data=chunk) <\/pre>\n<p> \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u0441\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 \u0438 nonce\/IV \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00abkey ratcheting\u00bb (\u0445\u0440\u0430\u043f\u043e\u0432\u0438\u043a \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430) \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 DEM \u0435\u0441\u0442\u044c \u00abkr\u00bb.<\/p>\n<p> \u0426\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f XChaCha20 \u0432\u043c\u0435\u0441\u0442\u043e ChaCha20 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u043d\u043e \u043e\u043d \u0434\u043e\u0440\u043e\u0436\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u0414\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u044b\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 nonce \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b, \u0445\u043e\u0442\u044f \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0431\u044b\u043b \u0431\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u0435\u043d.<\/p>\n<p> \u041d\u043e \u0443 Poly1305, \u043a\u0430\u043a \u0438 GCM \u0440\u0435\u0436\u0438\u043c\u0430, \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0441 AES, \u0435\u0441\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u043e\u043d\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u00abkey commitment\u00bb. \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c\/\u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043f\u0430\u0440\u0443 (\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435) \u043a\u043b\u044e\u0447\u0435\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e MAC \u0442\u044d\u0433\u0430 \u0434\u043b\u044f \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043c\u0443\u0441\u043e\u0440 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043a\u043b\u044e\u0447\u0430\u0445, \u043a\u0440\u043e\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e. \u041d\u043e MAC \u043d\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442. \u0414\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0433\u0434\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432\u044b\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e DH-\u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u0443 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0435\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0441\u043e\u0431\u044b\u0439 \u043a\u043b\u044e\u0447 \u2014 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 key commitment \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041d\u043e CEK \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e DEM \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0438\u0437\u0432\u043d\u0435, \u0438\u0437 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u043c KEM-\u0430. <a href=\"https:\/\/soatok.blog\/2024\/09\/10\/invisible-salamanders-are-not-what-you-think\/\" rel=\"nofollow noopener noreferrer\">Invisible Salamanders Are Not What You Think<\/a>. <a href=\"https:\/\/eprint.iacr.org\/2019\/016.pdf\" rel=\"nofollow noopener noreferrer\">Fast Message Franking<\/a>. <a href=\"https:\/\/cacr.uwaterloo.ca\/techreports\/2012\/cacr2012-07.pdf\" rel=\"nofollow noopener noreferrer\">Hybrid Encryption in the Multi-User Setting<\/a>.<\/p>\n<p> \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 hash-based MAC (HMAC) \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u043e\u0442 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041d\u043e \u0442\u043e\u0433\u0434\u0430 HMAC, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (ChaPoly \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440!). \u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b key commitment: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 16-32 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0431\u0430\u0439\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0445 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0434 \u00ab\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u00bb \u043a\u043b\u044e\u0447\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u0436\u0435 \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0443\u043b\u0435\u0439 \u2014 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430.<\/p>\n<p> \u041d\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044f\u0432\u043d\u044b\u0439 key commitment \u0445\u044d\u0448 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 AEAD \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442\u0430. \u0417\u0430\u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0431\u0430\u0439\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e. \u00abkc\u00bb \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u0435\u0441\u0442\u044c key commitment. <\/p>\n<pre> COMMITMENT = BLAKE2b-256(KEY || IV || TAG) CIPHERTEXT || TAG || COMMITMENT <\/pre>\n<p> \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc5869.html\" rel=\"nofollow noopener noreferrer\">HKDF<\/a>. \u042f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043e\u043d \u043c\u043d\u043e\u0433\u043e \u0433\u0434\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d, \u043a\u0430\u043a \u0438 \u0444\u0430\u043a\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f HMAC \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e. \u0411\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0445 XOF \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (BLAKE2X, SHAKE) \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u044d\u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041f\u043b\u044e\u0441 \u0435\u0433\u043e API \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>xchacha-krmr DEM<\/h2>\n<p> \u041c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0432\u044b\u0448\u0435, \u0447\u0442\u043e KEM-\u043e\u0432 (\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439) \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. KEM \u00ab\u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442\u00bb \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430\u0448 \u043e\u0431\u0449\u0438\u0439 CEK. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 KEM-\u0430.<\/p>\n<p> \u041d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e. \u041e\u043d \u0436\u0435 \u0437\u043d\u0430\u0435\u0442 \u043e\u0431\u0449\u0438\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 CEK! \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 cm\/signed), \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u0439 DEM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0431\u044b\u043b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d \u0432 multi-recipient (\u00abmr\u00bb \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430) \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445.<\/p>\n<p> \u00abFast Message Franking\u00bb \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u00abcompactly committing AEAD\u00bb \u0441\u0445\u0435\u043c\u044b \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0433\u0434\u0435 commitment \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b ccAEAD \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e KEM-\u0430, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 CEK-\u043e\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 cm\/encrypted.<\/p>\n<p> \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u043f\u043e \u043f\u0443\u0442\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044e, \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 KEM, \u043c\u044b \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0438\u0439 CEK, \u043d\u043e \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 per-recipient MAC \u043a\u043b\u044e\u0447 (prMAC). \u0410 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 128\u041a\u0438\u0411 \u0431\u043b\u043e\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c per-recipient MAC \u0442\u044d\u0433. <\/p>\n<pre> H = BLAKE2b CK0, prMACx0 = CEK || prMACx CKi = HKDF-Extract(H, salt=\"\", ikm=CK{i-1}) prMACxi = HKDF-Extract(H, salt=\"\", ikm=prMACx{i-1}) KEY = HKDF-Expand(H, prk=CKi, info=\"cm\/encrypted\/xchacha-krmr\/key\") IV = HKDF-Expand(H, prk=CKi, info=\"cm\/encrypted\/xchacha-krmr\/iv\", len=24) if {last chunk} then { IV[23] |= 0x01 } else { IV[23] &amp;= 0xFE } CIPHERTEXT = XChaCha20(key=KEY, nonce=IV, data=chunk) MACx = BLAKE2b-256-MAC(key=prMACxi, H(CIPHERTEXT)) CIPHERTEXT || MACx || MAC{x+1} [|| MAC{x+2} ...] <\/pre>\n<p> MAC \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0434 \u0445\u044d\u0448\u043e\u043c \u043e\u0442 \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0435\u0441\u044c 128\u041a\u0438\u0411 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c Poly1305 \u0442\u0443\u0442 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430. \u0410 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f hash-based MAC \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e key commitment-\u0430.<\/p>\n<h2>kuznechik-ctr-hmac-kr<\/h2>\n<p> \u0414\u043b\u044f \u0413\u041e\u0421\u0422\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 DEM \u0441 key commitment-\u043e\u043c \u0437\u0430 \u0441\u0447\u0451\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f HMAC: <\/p>\n<pre> H = Streebog-512 CK0 = CEK CKi = HKDF-Extract(H, salt=\"\", ikm=CK{i-1}) Kenc = HKDF-Expand(H, prk=CKi, info=\"cm\/encrypted\/kuznechik-ctr-hmac-kr\/enc\") IV = HKDF-Expand(H, prk=CKi, len=8, info=\"cm\/encrypted\/kuznechik-ctr-hmac-kr\/iv\") Kauth || KauthTail = HKDF-Expand(H, prk=CKi,     info=\"cm\/encrypted\/kuznechik-ctr-hmac-kr\/auth\") CIPHERTEXT = Kuznechik-CTR(key=Kenc, ctr=IV, data=chunk) CIPHERTEXT || HMAC(Streebog-256, key={Kauth|KauthTail}, data=CIPHERTEXT) <\/pre>\n<h2>keywrap<\/h2>\n<p> \u041a\u0430\u0436\u0434\u044b\u0439 KEM \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 KEK-\u043a\u043b\u044e\u0447\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c CEK) \u0434\u043b\u044f DEM. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 keywrap \u0440\u0435\u0448\u0435\u043d\u0438\u044f. <\/p>\n<ul>\n<li>\u00abxchapoly\u00bb:<br \/> \n<pre> NONCE = random(24 bytes) NONCE || XChaCha20-Poly1305(key=KEK, ad=\"\", nonce=NONCE, data=CEK) <\/pre>\n<\/li>\n<li>\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0413\u041e\u0421\u0422\u043e\u0432 \u00abkexp15\u00bb:<br \/> \n<pre> Kenc || IV || Kauth = KEK KExp15(Kenc, Kauth, IV, CEK) = Kuznechik-CTR(     Kenc, CEK || Kuznechik-CMAC(Kauth, IV || CEK), IV=IV) <\/pre>\n<\/li>\n<\/ul>\n<p> KEK \u043a\u043b\u044e\u0447 \u0432\u044b\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c KEM.<\/p>\n<h2>balloon-blake2b-hkdf KEM<\/h2>\n<p> \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0444\u0440\u0430\u0437\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430. \u041f\u043b\u044e\u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<p> \u0414\u043b\u044f \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u043a\u0438 KEK-\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u044b, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/crypto.stanford.edu\/balloon\/\" rel=\"nofollow noopener noreferrer\">Balloon<\/a> \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u0441\u0438\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 (memory hardened) \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439: <\/p>\n<pre> kem-balloon-blake2b-hkdf {     {field a {str} =balloon-blake2b-hkdf}     {field cek {bin} &gt;0} {# wrapped CEK}     {field salt {bin} &gt;0}     {field cost {with balloon-cost}} } balloon-cost {     {field s {int} &gt;0} {# space cost}     {field t {int} &gt;0} {# time cost}     {field p {int} &gt;0} {# parallel cost} }  H = BLAKE2b KEK = HKDF-Expand(H,     prk=Balloon(H, passphrase, \/kem\/salt, s, t, p),     info=\"cm\/encrypted\/balloon-blake2b-hkdf\" || \/id) <\/pre>\n<p> Balloon \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0437\u0436\u0435 password hashing competition, \u0433\u0434\u0435 \u0432\u044b\u0438\u0433\u0440\u0430\u043b Argon2. \u041d\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443 Balloon, \u0443 \u043d\u0435\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0435\u0439 \u0447\u0435\u043c \u0443 Argon2. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Balloon \u043d\u0435 \u0434\u0438\u043a\u0442\u0443\u0435\u0442 \u043a\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c: \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0434 \u0445\u044d\u0448\u043e\u043c, \u043a\u0430\u043a PBKDF2. Argon2 \u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c Balloon \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441\u043e \u0421\u0442\u0440\u0438\u0431\u043e\u0433\u043e\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043e\u0440\u0433\u0430\u043d\u043e\u0432. Balloon \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0425\u043e\u0442\u044c \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0438 \u0441\u043b\u0430\u0431\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d, \u0430 \u043d\u0435 Argon2, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d NIST-\u043e\u043c \u043a \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e.<\/p>\n<p> \u041d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 KEM-\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u044b. \u041d\u043e \u0441\u0442\u043e\u0439\u043a\u043e\u0441\u0442\u044c, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 \u0441\u0442\u043e\u0439\u043a\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0439 \u0441\u043b\u0430\u0431\u043e\u0439.<\/p>\n<h2>gost3410-hkdf KEM<\/h2>\n<p> \u041f\u043e\u043a\u0430 \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c KEM-\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0413\u041e\u0421\u0422 \u0420 34.10-2012. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. gost3410-hkdf \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0433\u0430\u043b\u043e\u0447\u043a\u0438. \u042d\u0442\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438 \u0435\u0433\u043e DH \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f.<\/p>\n<pre> kem-gost3410-hkdf {     {field . {map}}     {field a {str} =gost3410-hkdf}     {field cek {bin} &gt;0} {# wrapped CEK}     {field ukm {bin} len=16} {# additional keying material}     {field pub {bin} &gt;0} {# sender's ephemeral public key}     {field to {with fpr} optional} {# recipient's public key}     {field from {with fpr} optional} {# sender's public key} }  H = Streebog-512 DH(sk, pk) = GOSTR3410-VKO(prv=sk, pub=pk, ukm=UKM) PRK = HKDF-Extract(H, salt=\"\", ikm=DH(e, s)) if {specified sender}     PRK = HKDF-Extract(H, salt=PRK, ikm=DH(s, s)) KEK = HKDF-Expand(H, prk=PRK, info=\"cm\/encrypted\/gost3410-hkdf\" || \/id) <\/pre>\n<h2>Authcryption<\/h2>\n<p> \u0412\u044b\u0448\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u00absender\u00bb \u0438 \u043f\u043e\u043b\u044f \u00abfrom\u00bb.<\/p>\n<p> \u041f\u043e\u043b\u0435 \u00abto\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0430\u0440\u044b \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u043a\u0430\u043a \u0431\u044b \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u043c.<\/p>\n<p> \u0428\u0442\u0430\u0442\u043d\u043e cm\/encrypted \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u0435\u0449\u0451 \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0447\u0442\u043e-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p> \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c, cm\/signed \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 cm\/encrypted. \u041a\u0430\u043a \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 CMS \u0438 PGP. \u041f\u043e\u0434\u043f\u0438\u0441\u044c cm\/encrypted \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u0430: \u0442\u0430\u043a \u043c\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0436\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0447\u0435\u0439-\u0442\u043e \u0447\u0443\u0436\u043e\u0439 \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442, \u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u0430\u043a-\u0431\u0443\u0434\u0442\u043e \u044f \u0435\u0433\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442: \u043c\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 cm\/signed \u043a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0430 \u043f\u043e\u0434\u0443\u043c\u0430\u044e\u0442 \u0447\u0442\u043e \u044f \u0431\u044b\u043b \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u043e\u043c.<\/p>\n<p> \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0432\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044c) \u0432\u043c\u0435\u0441\u0442\u0435, \u0434\u0435\u043b\u0430\u0442\u044c \u00absigncryption\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044f \u043f\u043e\u043b\u0435 \/sigs\/*\/tbs\/encrypted-to \u0432 cm\/signed, \u044f\u0432\u043d\u043e \u0438 \u0447\u0451\u0442\u043a\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043a\u043b\u044e\u0447\u0435\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041f\u043e\u0434\u043f\u0438\u0441\u044c \u044f\u0432\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0448\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f\u043c.<\/p>\n<p> \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 non-repudiable \u0438 non-deniable: \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u044c \u0444\u0430\u043a\u0442 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0442\u0440\u0435\u0442\u044c\u0438\u0445 \u043b\u0438\u0446.<\/p>\n<p> \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0432\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0443-\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043b \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043b\u0438\u0446\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435: \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0432 \u0436\u0438\u0432\u0443\u044e \u0432\u0438\u0434\u0435\u043b \u043c\u0435\u043d\u044f \u0431\u0440\u043e\u0441\u0430\u044e\u0449\u0438\u043c \u0441\u043b\u043e\u0432\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u043b\u0438\u0446\u0430\u043c \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0445 \u043f\u0440\u043e\u0438\u0437\u043d\u0451\u0441.<\/p>\n<p> \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f TLS\/IPsec\/whatever \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u043c MAC-\u043e\u043c, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c MAC-\u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u0441\u043b\u0435. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0436\u0434\u0435, \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u0440\u0435\u043d\u0430 \u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b\u0445 MAC-\u043a\u043b\u044e\u0447\u0435\u0439 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e MAC \u0442\u044d\u0433\u0430 \u043b\u044e\u0431\u044b\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. \u041a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u043b \u043f\u0440\u0438 \u044d\u0442\u043e\u043c. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 deniable, repudiable \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<p> \u0422\u0430\u043a \u0432\u043e\u0442 cm\/encrypted KEM \u0441 \u00abfrom\u00bb \u043f\u043e\u043b\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u043f\u043e \u0435\u0433\u043e KEM-\u043a\u043b\u044e\u0447\u0443, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043f\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c. \u00abfrom\u00bb \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f. \u0415\u0433\u043e (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, \u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442) \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043b\u043e\u0436\u0438\u0442\u044c \u0438 \u0432 cm\/encrypted \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0440\u044f\u0434\u043e\u043c. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0443\u043b\u044f\u043c\u0438, \u044f\u0432\u043d\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043d\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u044f \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0432\u0441\u0451 \u0440\u0430\u0434\u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f. \u0424\u0430\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f sender \u043a\u043b\u044e\u0447\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 DH \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p> \u041d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e cm\/encrypted \u044d\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u043e-\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430\u043c\u0438 (round-trip). \u0422\u0443\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u00ab\u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e\u0441\u0442\u0438\u00bb (forward secrecy) \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u2014 \u0440\u0430\u043d\u0435\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 key compromise impersonation \u0430\u0442\u0430\u043a\u0430 (\u0442\u0443\u0442 \u0443\u0436 \u0438\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441\u043f\u0430\u0441\u0443\u0442).<\/p>\n<h2>sntrup761-x25519-hkdf-blake2b KEM<\/h2>\n<p> \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 KEM \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u0432 KEKS\/CM, \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 age \u0443\u0442\u0438\u043b\u0438\u0442\u044b. <\/p>\n<pre> kem-sntrup761-x25519-hkdf-blake2b {     {field . {map}}     {field a {str} =sntrup761-x25519-hkdf-blake2b}     {field cek {bin} &gt;0} {# wrapped CEK}     {field encap {bin} &gt;0}     {field to {with fpr} optional} {# recipient's public key}     {field from {with fpr} optional} {# sender's public key} } <\/pre>\n<p> \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u0443\u044e PQ\/T \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e: \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u00ab\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439\u00bb X25519 \u0441 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u043c Streamlined NTRU Prime. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b X25519 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 SNTRUP, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u043e\u0431\u0449\u0438\u0439 \u0441\u0435\u043a\u0440\u0435\u0442.<\/p>\n<p> \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438. \u041e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 <a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-josefsson-chempat\/\" rel=\"nofollow noopener noreferrer\">Chempat<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043d\u043e \u0445\u044d\u0448\u0438\u0440\u0443\u0435\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0440\u044f\u0434\u0430 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c. X-Wing, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0440\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 ML-KEM, \u043d\u0435 \u0445\u044d\u0448\u0438\u0440\u0443\u0435\u0442 \u043d\u0438 PQ \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442, \u043d\u0438 \u0435\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, \u043f\u043e\u043b\u0430\u0433\u0430\u044f\u0441\u044c \u043d\u0430 \u0443\u0447\u0451\u0442 \u043e\u043d\u044b\u0445 \u0432 ML-KEM \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435. \u0414\u043b\u044f \u043e\u0434\u043d\u0438\u0445 KEM \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d, \u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u043e\u0440\u043e\u0433\u043e\u0433\u043e Chempat. <\/p>\n<pre> H = BLAKE2b PRK = HKDF-Extract(H, salt=\"\", ikm=     sntrup761-shared-key || es-x25519-shared-key ||     H(sntrup761-sender-ciphertext || e-x25519-sender-public-key) ||     H(sntrup761-recipient-public-key || s-x25519-recipient-public-key)) if {specified sender}     PRK = HKDF-Extract(H, salt=PRK, ikm=         ss-x25519-shared-key ||         s-x25519-sender-public-key ||         s-x25519-recipient-public-key) KEK = HKDF-Expand(H, prk=PRK,     info=\"cm\/encrypted\/sntrup761-x25519-hkdf-blake2b\" || \/id) <\/pre>\n<p> \u0425\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 HKDF \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f SNTRUP \u044d\u0442\u043e \u0435\u0449\u0451 \u0442\u0435\u0440\u043f\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0451\u043c\u044b, \u0442\u043e \u0443 Classic McEliece \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430! \u0418\u0445 \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0438\u0445 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432. \u0425\u044d\u0448 \u043e\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 cm\/pub \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435.<\/p>\n<p> \u0422\u0430\u043a \u043a\u0430\u043a SNTRUP \u044d\u0442\u043e \u043d\u0435 DH, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e KEM, \u0442\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f. API KEM \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c X25519. \u041d\u043e \u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438, \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e.<\/p>\n<p> \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u044b\u0431\u0440\u0430\u043d SNTRUP, \u0430 \u043d\u0435 ML-KEM? \u0421\u0443\u0434\u044f \u043f\u043e: <a href=\"https:\/\/ntruprime.cr.yp.to\/warnings.html\" rel=\"nofollow noopener noreferrer\">NTRU Prime: Warnings<\/a>, <a href=\"http:\/\/blog.cr.yp.to\/20231003-countcorrectly.html\" rel=\"nofollow noopener noreferrer\">Debunking NIST&#8217;s calculation of the Kyber-512 security level<\/a>, \u0435\u0441\u0442\u044c (\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u0435) \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 NIST. \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 SNTRUP \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445, \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0432\u0448\u0438\u0445\u0441\u044f \u0432 OpenSSH, \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432 Kyber \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u043f\u043e\u0431\u0435\u0434\u044b.<\/p>\n<h2>mceliece6960119-x25519-hkdf-shake256 KEM<\/h2>\n<p> \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u043a \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e PQ\/T \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0439 KEM: <\/p>\n<pre> kem-mceliece6960119-x25519-hkdf-shake256 {     {field . {map}}     {field a {str} =mceliece6960119-x25519-hkdf-shake256}     {field cek {bin} &gt;0} {# wrapped CEK}     {field encap {bin} &gt;0}     {field to {with fpr} optional} {# recipient's public key}     {field from {with fpr} optional} {# sender's public key} } <\/pre>\n<p> <a href=\"https:\/\/classic.mceliece.org\/\" rel=\"nofollow noopener noreferrer\">Classic McEliece<\/a>. <a href=\"http:\/\/blog.cr.yp.to\/20250423-mceliece.html\" rel=\"nofollow noopener noreferrer\">McEliece standardization<\/a>. McEliece \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0442\u0430\u0440\u0435\u0439\u0448\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439. \u0417\u0430 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u0451\u043c \u043d\u0435 \u043d\u0430\u0448\u043b\u0438\u0441\u044c \u0441\u043a\u043e\u043b\u044c \u043b\u0438\u0431\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041e\u043d \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c \u043a\u043e \u0432\u0437\u043b\u043e\u043c\u0443 \u043d\u0430 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445. \u041a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p> \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0435\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430: 1047319 \u0431\u0430\u0439\u0442! \u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u0441 \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f cm\/encrypted \u0437\u0430\u0434\u0430\u0447, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043b\u044e\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 Classic McEliece 6960-119 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 194 \u0431\u0430\u0439\u0442 \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442.<\/p>\n<p> \u041f\u043e \u0441\u0443\u0442\u0438, \u0432\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f Classic McEliece \u0438 X25519 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 sntrup761-x25519-hkdf-blake2b. \u041d\u043e \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434 DJB \u0432 <a href=\"https:\/\/www.pqconnect.net\/\" rel=\"nofollow noopener noreferrer\">PQConnect<\/a>, \u0433\u0434\u0435 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 McEliece, \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u043e\u0431\u0449\u0438\u0439 \u043a\u043b\u044e\u0447, \u0437\u0430\u0442\u0435\u043c \u0448\u0438\u0444\u0440\u0443\u0435\u043c \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 X25519 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c DH \u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<pre> mceliece-ciphertext || XChaCha20-Poly1305(     key=decapKey,     nonce=decapNonce,     data=e-x25519-sender-public-key,     ad=mceliece-ciphertext)  H = SHAKE256 mceliece-ciphertext, mceliece-shared-key = KEM-Encap(mceliece-recipient-public-key) mceliece-shared-key = KEM-Decap(mceliece-recipient-private-key, mceliece-ciphertext)  decapKey, decapNonce = HKDF-Expand(H, prk=mceliece-shared-key,     info=\"cm\/encrypted\/mceliece6960119-x25519-hkdf-shake256\/decap\" || \/id) es-x25519-shared-key = X25519(e-x25519-sender-private-key,                               s-x25519-recipient-public-key) PRK = HKDF-Extract(H, salt=\"\", ikm=     mceliece-shared-key || es-x25519-shared-key ||     H(mceliece-sender-ciphertext || e-x25519-sender-public-key) ||     H(mceliece-recipient-public-key || s-x25519-recipient-public-key)) if {specified sender}     ss-x25519-shared-key = X25519(s-x25519-sender-private-key,                                   s-x25519-recipient-public-key)     PRK = HKDF-Extract(H, salt=PRK, ikm=         ss-x25519-shared-key || s-x25519-sender-public-key) KEK = HKDF-Expand(H, prk=PRK,     info=\"cm\/encrypted\/mceliece6960119-x25519-hkdf-shake256\" || \/id) <\/pre>\n<h2>\u0413\u0434\u0435 \u043a\u043e\u0434?<\/h2>\n<p> \u041f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044e \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0421\u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e. \u041d\u043e \u043d\u0435\u043a\u0438\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 proof-of-concept \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 <a href=\"http:\/\/www.keks.cypherpunks.su\/\" rel=\"nofollow noopener noreferrer\">KEKS<\/a> \u0441\u0430\u0439\u0442\u0435. \u0418\u043c\u0435\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>C99: encoder, decoder, KEKS\/Schema \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043f\u043e\u0447\u0435\u043a \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0413\u041e\u0421\u0422 \u0420 34.10 \u0438 Ed25519, \u0443\u0442\u0438\u043b\u0438\u0442\u044b pretty-printing, fuzzing \u0442\u0435\u0441\u0442\u044b. \u041c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 malloc, \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u0430 \u0441 MessagePack \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/li>\n<li>Tcl: encoder, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 KEKS\/Schema, \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0445\u0435\u043c, \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f fuzzing.<\/li>\n<li>Go: encoder, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 decoder, KEKS\/Schema \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440, fuzzing \u0442\u0435\u0441\u0442\u044b, KEKS\/RPC, \u0443\u0442\u0438\u043b\u0438\u0442\u044b pretty-printing. cmkeytool: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u0432\u044b\u043f\u0443\u0441\u043a \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432. cmhshtool: \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0435\u0436\u0438\u043c \u0441 \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438 \u041c\u0435\u0440\u043a\u043b\u0430. cmsigtool: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f detached \u0440\u0435\u0436\u0438\u043c \u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u041c\u0435\u0440\u043a\u043b\u0430. cmenctool: \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u0435 \u0438 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442\u0430. \u0425\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u0430 \u0441 MessagePack \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438.<\/li>\n<li>Python3: encoder, decoder, \u0442\u0435\u0441\u0442\u044b.<\/li>\n<\/ul>\n<p> \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f redo, \u0430 \u0435\u0433\u043e goredo \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u0430 \u0432 tarball. <a href=\"https:\/\/habr.com\/ru\/articles\/517490\/\">Make \u043d\u0430 \u043c\u044b\u043b\u043e, redo \u0441\u0438\u043b\u0430<\/a>!<\/p>\n<p> \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u044d\u0442\u043e \u0432\u0441\u0451 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435\u043c.<\/p><\/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\/923810\/\"> https:\/\/habr.com\/ru\/articles\/923810\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 X.509 PKI \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ASN.1. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439, \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 KEKS, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u043e\u0441\u0442-\u043a\u0432\u0430\u043d\u0442\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432.<\/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-465560","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/465560","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=465560"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/465560\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=465560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=465560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=465560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}