{"id":95846,"date":"2020-10-04T01:42:23","date_gmt":"2020-10-03T23:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2"},"modified":"2020-10-04T01:42:23","modified_gmt":"2020-10-03T23:42:23","slug":"mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","title":{"rendered":"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/fc42fe5e99ce4412a0ce99eb63629a42.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ahoj, Habr!<\/p>\n<p>V <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521090\/\">prvn\u00ed \u010d\u00e1sti<\/a><\/noindex> V \u010dl\u00e1nku jsme prodiskutovali, pro\u010d m\u016f\u017ee b\u00fdt nezbytn\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla pro \u00fa\u010dastn\u00edky, kte\u0159\u00ed si vz\u00e1jemn\u011b ned\u016fv\u011b\u0159uj\u00ed, jak\u00e9 po\u017eadavky jsou kladeny na takov\u00e9 gener\u00e1tory n\u00e1hodn\u00fdch \u010d\u00edsel, a prozkoumali jsme dva p\u0159\u00edstupy k jejich realizaci.<\/p>\n<p>V t\u00e9to \u010d\u00e1sti \u010dl\u00e1nku podrobn\u011b prozkoum\u00e1me dal\u0161\u00ed p\u0159\u00edstup, kter\u00fd vyu\u017e\u00edv\u00e1 prahov\u00e9 podpisy.<\/p>\n<h3>Trocha kryptografie<\/h3>\n<p>Abychom pochopili, jak funguj\u00ed prahov\u00e9 podpisy, mus\u00edme m\u00edt n\u011bjak\u00e9 z\u00e1kladn\u00ed znalosti o kryptografii. Pou\u017eijeme dv\u011b koncepce: scal\u00e1ry, nebo jednodu\u0161e \u010d\u00edsla, kter\u00e1 budeme ozna\u010dovat mal\u00fdmi p\u00edsmeny (<em>x, y<\/em>) a body na eliptick\u00e9 k\u0159ivce, kter\u00e9 budeme ozna\u010dovat velk\u00fdmi p\u00edsmeny.<\/p>\n<p>Pro pochopen\u00ed z\u00e1klad\u016f prahov\u00fdch podpis\u016f nen\u00ed t\u0159eba rozum\u011bt tomu, jak funguj\u00ed eliptick\u00e9 k\u0159ivky, krom\u011b n\u011bkolika z\u00e1kladn\u00edch v\u011bc\u00ed:<\/p>\n<ol>\n<li>\n<p>Body na eliptick\u00e9 k\u0159ivce lze s\u010d\u00edtat a n\u00e1sobit scal\u00e1rem (n\u00e1soben\u00ed scal\u00e1rem budeme ozna\u010dovat jako <em>xG<\/em>, i kdy\u017e notace <em>Gx<\/em> se tak\u00e9 \u010dasto pou\u017e\u00edv\u00e1 v literatu\u0159e). V\u00fdsledek sou\u010dtu a n\u00e1soben\u00ed skal\u00e1rem \u2014 to je bod na elliptick\u00e9 k\u0159ivce.<\/p>\n<\/li>\n<li>\n<p>Zn\u00e1me-li pouze bod <em>G<\/em> a jeho n\u00e1sobek s scal\u00e1rem <em>xG<\/em> nelze vypo\u010d\u00edtat <em>x<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>Budeme tak\u00e9 pou\u017e\u00edvat koncept polynomu <em>p(x)<\/em> stupn\u011b <em>k<\/em>-1. Konkr\u00e9tn\u011b budeme vyu\u017e\u00edvat n\u00e1sleduj\u00edc\u00ed vlastnost polynom\u016f: pokud zn\u00e1me hodnotu <em>p(x) <\/em>pro jak\u00e9koli <em>k <\/em>r\u016fzn\u00e9 <em>x <\/em>(a nem\u00e1me \u017e\u00e1dn\u00e9 jin\u00e9 informace o <em>p(x)<\/em>), m\u016f\u017eeme vypo\u010d\u00edtat <em>p(x) <\/em>pro jak\u00e9koli jin\u00e9 <em>x<\/em>.<\/p>\n<p>Je zaj\u00edmav\u00e9, \u017ee pro jak\u00fdkoli polynom <em>p(x)<\/em> a n\u011bjak\u00fd bod na k\u0159ivce <em>G<\/em>, zn\u00e1me-li hodnotu <em>p(x)G<\/em> pro jak\u00e9koli <em>k<\/em> r\u016fzn\u00fdch hodnot <em>x<\/em>, lze tak\u00e9 vypo\u010d\u00edtat <em>p(x)G<\/em> pro jak\u00fdkoli <em>x<\/em>.<\/p>\n<p>Tyto informace sta\u010d\u00ed k tomu, abychom se pono\u0159ili do detail\u016f o tom, jak funguj\u00ed prahov\u00e9 podpisy a jak je pou\u017e\u00edt k generov\u00e1n\u00ed n\u00e1hodn\u00fdch \u010d\u00edsel.<\/p>\n<h3>Gener\u00e1tor n\u00e1hodn\u00fdch \u010d\u00edsel na prahov\u00fdch podpisech<\/h3>\n<p>P\u0159edstavme si, \u017ee <em>n<\/em> \u00fa\u010dastn\u00edk\u016f chce vygenerovat n\u00e1hodn\u00e9 \u010d\u00edslo, a chceme, aby \u00fa\u010dast jak\u00e9hokoli z nich byl dostate\u010dn\u00fd k vygenerov\u00e1n\u00ed \u010d\u00edsla, ale aby \u00fato\u010dn\u00edci, kte\u0159\u00ed kontroluj\u00ed <em>k<\/em> -1 nebo m\u00e9n\u011b \u00fa\u010dastn\u00edk\u016f, nemohli p\u0159edpov\u011bd\u011bt nebo ovlivnit vygenerovan\u00e9 \u010d\u00edslo. <em>k<\/em>P\u0159edstavme si, \u017ee existuje takov\u00fd polynom<\/p>\n<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/00d54b3b0ca237a1551cdbdc35688099.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>-1, \u017ee prvn\u00ed \u00fa\u010dastn\u00edk v\u00ed <em>p(x)<\/em> stupn\u011b <em>k<\/em>p(1) <em>, druh\u00fd v\u00ed<\/em>p(2), <em>a tak d\u00e1le ( <\/em>-\u00fd v\u00ed<em>n<\/em>p(n) <em>). Tak\u00e9 p\u0159edpokl\u00e1dejme, \u017ee pro n\u011bjak\u00fd p\u0159edem ur\u010den\u00fd bod<\/em>v\u0161ichni v\u011bd\u00ed <em>G<\/em> pro v\u0161echny hodnoty <em>p(x)G <\/em>. Budeme to naz\u00fdvat <em>x<\/em>. Budeme to naz\u00fdvat <em>p(i)<\/em> \"priv\u00e1tn\u00ed komponenta\u201c <em>i<\/em>-\u00ed \u00fa\u010dastn\u00edka (proto\u017ee pouze <em>i<\/em>-\u00fd \u00fa\u010dastn\u00edk to v\u00ed), a <em>p(i)G<\/em> \"ve\u0159ejn\u00e1 komponenta\u201c <em>i<\/em>-\u00ed \u00fa\u010dastn\u00edka (proto\u017ee v\u0161ichni \u00fa\u010dastn\u00edci to znaj\u00ed). Jak si pamatujete, znalost <em>p(i)G <\/em>nen\u00ed dostate\u010dn\u00e1 pro obnoven\u00ed <em>p(i).<\/em><\/p>\n<p>Vytvo\u0159en\u00ed takov\u00e9ho polynomu tak, aby pouze <em>i-<\/em>-\u00fd \u00fa\u010dastn\u00edk a nikdo jin\u00fd znal svou priv\u00e1tn\u00ed komponentu \u2013 to je nejt\u011b\u017e\u0161\u00ed a nejzaj\u00edmav\u011bj\u0161\u00ed \u010d\u00e1st protokolu, a to si podrobn\u011b rozebereme n\u00ed\u017ee. Zat\u00edm p\u0159edpokl\u00e1dejme, \u017ee takov\u00fd polynom m\u00e1me a v\u0161ichni \u00fa\u010dastn\u00edci znaj\u00ed sv\u00e9 priv\u00e1tn\u00ed komponenty.<\/p>\n<p>Jak m\u016f\u017eeme pou\u017e\u00edt takov\u00fd polynom k vygenerov\u00e1n\u00ed n\u00e1hodn\u00e9ho \u010d\u00edsla? Nejprve pot\u0159ebujeme n\u011bjak\u00fd \u0159et\u011bzec, kter\u00fd dosud nebyl pou\u017eit jako vstup pro gener\u00e1tor. V p\u0159\u00edpad\u011b blockchainu je hash posledn\u00edho bloku <em>h<\/em> \u2014 dobr\u00fd kandid\u00e1t pro takov\u00fd \u0159et\u011bzec. Nech\u0165 \u00fa\u010dastn\u00edci cht\u011bj\u00ed vytvo\u0159it n\u00e1hodn\u00e9 \u010d\u00edslo, pou\u017e\u00edvaj\u00edc\u00ed <em>h <\/em>jako seed. Nejprve \u00fa\u010dastn\u00edci p\u0159evedou <em>h<\/em> na bod na k\u0159ivce pomoc\u00ed jak\u00e9koli p\u0159edem definovan\u00e9 funkce:<\/p>\n<p><em>H = scalarToPoint(h)<\/em><\/p>\n<p>Pot\u00e9 ka\u017ed\u00fd \u00fa\u010dastn\u00edk <em>i<\/em> vypo\u010d\u00edt\u00e1 a zve\u0159ejn\u00ed <em>Hi = p(i)H, <\/em>co\u017e mohou ud\u011blat, proto\u017ee znaj\u00ed<em> p(i) a H. <\/em>Odhalen\u00ed<em> H<\/em>i neumo\u017e\u0148uje ostatn\u00edm \u00fa\u010dastn\u00edk\u016fm obnovit priv\u00e1tn\u00ed komponentu <em>i<\/em>-\u00ed \u00fa\u010dastn\u00edka, a proto jeden soubor priv\u00e1tn\u00edch komponent lze pou\u017e\u00edt od bloku k bloku. Tak\u017ee drah\u00fd algoritmus pro tvorbu polynomu, kter\u00fd je pops\u00e1n n\u00ed\u017ee, je t\u0159eba prov\u00e9st pouze jednou.<\/p>\n<p>Kdy\u017e <em>k<\/em> \u00fa\u010dastn\u00edci odhal\u00ed <em>Hi = p(i)H, <\/em>v\u0161ichni mohou vypo\u010d\u00edtat<em> H<\/em>x = <em>p(x)H<\/em> pro v\u0161echny <em>x<\/em> d\u00edky vlastnosti polynom\u016f, kter\u00e9 jsme prob\u00edrali v p\u0159edchoz\u00ed \u010d\u00e1sti. V tuto chv\u00edli v\u0161ichni \u00fa\u010dastn\u00edci vypo\u010d\u00edtaj\u00ed <em>H0 = p(0)H, <\/em>a to je v\u00fdsledn\u00e9 n\u00e1hodn\u00e9 \u010d\u00edslo. V\u0161imn\u011bte si, \u017ee nikdo nev\u00ed<em> p(0), <\/em>a tud\u00ed\u017e jedin\u00fd zp\u016fsob, jak spo\u010d\u00edtat<em> p(0)H \u2013 <\/em>je interpolace<em> p(x)H, <\/em>co\u017e je mo\u017en\u00e9 pouze tehdy, kdy\u017e<em> k <\/em>hodnoty<em> p(i)H <\/em>jsou zn\u00e1my. Odhalen\u00ed jak\u00e9hokoliv men\u0161\u00edho po\u010dtu<em> p(i)H <\/em>ned\u00e1v\u00e1 \u017e\u00e1dn\u00e9 informace o<em> p(0)H.<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/a91219381018f90f73b0a92976c92c79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>V\u00fd\u0161e uveden\u00fd gener\u00e1tor m\u00e1 v\u0161echny vlastnosti, kter\u00e9 chceme: \u00fato\u010dn\u00edci, kte\u0159\u00ed kontroluj\u00ed pouze <em>k-<\/em>1 \u00fa\u010dastn\u00edk\u016f, nebo m\u00e9n\u011b, nemaj\u00ed \u017e\u00e1dn\u00e9 informace a vliv na v\u00fdstup, zat\u00edmco jak\u00fdkoli <em>k<\/em> \u00fa\u010dastn\u00edk\u016f m\u016f\u017ee vypo\u010d\u00edtat v\u00fdsledn\u00e9 \u010d\u00edslo, a jak\u00fdkoli podmno\u017eina z <em>k<\/em> \u00fa\u010dastn\u00edk\u016f v\u017edy dos\u00e1hne stejn\u00e9ho v\u00fdsledku pro stejn\u00fd seed.<\/p>\n<p>Existuje jeden probl\u00e9m, kter\u00e9mu jsme se shodou okolnost\u00ed vyhnuli d\u0159\u00edve. Aby interpolace fungovala, je d\u016fle\u017eit\u00e9, aby hodnota<em> H<\/em>i, kterou zve\u0159ejnil ka\u017ed\u00fd \u00fa\u010dastn\u00edk, <em>i<\/em> skute\u010dn\u011b byla rovna <em>p(i)H.<\/em> Jeliko\u017e nikdo krom\u011b <em>i<\/em>-\u00e9ho \u00fa\u010dastn\u00edka nev\u00ed <em>p(i), <\/em>nikdo krom\u011b <em>i-<\/em>\u00e9ho \u00fa\u010dastn\u00edka nem\u016f\u017ee ov\u011b\u0159it, \u017ee <em>Ahoj, <\/em>skute\u010dn\u011b bylo spr\u00e1vn\u011b spo\u010d\u00edt\u00e1no, a bez n\u011bjak\u00e9ho kryptografick\u00e9ho d\u016fkazu spr\u00e1vnosti,<em> H<\/em>i \u00fato\u010dn\u00edk m\u016f\u017ee zve\u0159ejnit jakoukoli hodnotu jako <em>Ahoj, <\/em>a libovoln\u011b ovlivnit v\u00fdstup gener\u00e1toru n\u00e1hodn\u00fdch \u010d\u00edsel.<em>:<\/em><\/p>\n<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/694a86666806c49edb6e44dd9ec26b0f.png\" style=\"display:block;margin: 0 auto;\" \/>R\u016fzn\u00e9 hodnoty H_1, zaslan\u00e9 prvn\u00edm \u00fa\u010dastn\u00edkem, vedou k r\u016fzn\u00fdm v\u00fdsledn\u00fdm H_0.<\/p>\n<p>Existuj\u00ed alespo\u0148 dva zp\u016fsoby, jak prok\u00e1zat spr\u00e1vnost<em> H<\/em>i, kter\u00e9 probereme pot\u00e9, co se budeme v\u011bnovat generaci polynomu.<\/p>\n<h3>Generace polynomu<\/h3>\n<p>V p\u0159edchoz\u00edm odd\u00edle jsme p\u0159edpokl\u00e1dali, \u017ee m\u00e1me takov\u00fd polynom <em>p(x)<\/em> stupn\u011b <em>k<\/em>-1, kter\u00fd \u00fa\u010dastn\u00edk <em>i<\/em> zn\u00e1, <em>p(i)<\/em>a nikdo jin\u00fd nem\u00e1 \u017e\u00e1dn\u00e9 informace o t\u00e9to hodnot\u011b. V n\u00e1sleduj\u00edc\u00edm odd\u00edle bude tak\u00e9 nutn\u00e9, aby pro n\u011bjak\u00fd p\u0159edem stanoven\u00fd bod <em>G<\/em> v\u0161ichni v\u011bd\u011bli <em>p(x)G <\/em>pro v\u0161echny<em> x<\/em>.<\/p>\n<p>V tomto odd\u00edle budeme p\u0159edpokl\u00e1dat, \u017ee ka\u017ed\u00fd \u00fa\u010dastn\u00edk m\u00e1 lok\u00e1ln\u011b n\u011bjak\u00fd soukrom\u00fd kl\u00ed\u010d <em>xi, <\/em>tak, \u017ee v\u0161em je zn\u00e1m odpov\u00eddaj\u00edc\u00ed ve\u0159ejn\u00fd kl\u00ed\u010d<em> X<\/em>i.<\/p>\n<p>Jeden mo\u017en\u00fd protokol generace polynomu je n\u00e1sleduj\u00edc\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/ccd8afbc3c88a7f5a03714aeb6593361.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ol>\n<li>\n<p>Ka\u017ed\u00fd \u00fa\u010dastn\u00edk <em>i<\/em> lok\u00e1ln\u011b vytvo\u0159\u00ed libovoln\u00fd polynom <em>pi(x) stupn\u011b k-1. <\/em>Pot\u00e9 ka\u017ed\u00fd z nich za\u0161le ka\u017ed\u00e9mu \u00fa\u010dastn\u00edkovi<em> j <\/em>hodnotu<em> p<\/em>i(j), za\u0161ifrovanou ve\u0159ejn\u00fdm kl\u00ed\u010dem <em>Xj. <\/em>T\u00edmto zp\u016fsobem pouze<em> i-<\/em>\u00fd<em> <\/em>a<em> j-\u00fd \u00fa\u010dastn\u00edk v\u00ed<\/em>\u00fd<em> <\/em>i(j). \u00da\u010dastn\u00edk<em> p<\/em>tak\u00e9 ve\u0159ejn\u011b ozn\u00e1m\u00ed <em>i<\/em> pi(j)G <em>v\u010detn\u011b. <\/em>pro v\u0161echny<em> j <\/em>od<em> 1 <\/em>do<em> k <\/em>V\u0161ichni \u00fa\u010dastn\u00edci pou\u017e\u00edvaj\u00ed n\u011bjak\u00fd konsensus, aby vybrali<\/p>\n<\/li>\n<li>\n<p>\u00fa\u010dastn\u00edky, jejich\u017e polynomy budou pou\u017eity. Jeliko\u017e n\u011bkte\u0159\u00ed \u00fa\u010dastn\u00edci mohou b\u00fdt offline, nem\u016f\u017eeme \u010dekat, a\u017e v\u0161ichni<em> k <\/em>\u00fa\u010dastn\u00edci zve\u0159ejn\u00ed polynomy. V\u00fdsledek tohoto kroku je mno\u017eina<em> n <\/em>skl\u00e1daj\u00edc\u00ed se alespo\u0148<em> <\/em><strong><em>Z<\/em><\/strong><em> <\/em>polynom\u016f vytvo\u0159en\u00fdch v kroku (1)<em> k <\/em>\u00da\u010dastn\u00edci se ujist\u00ed, \u017ee jimi zn\u00e1m\u00e9 hodnoty<em>.<\/em><\/p>\n<\/li>\n<li>\n<p>i(j) odpov\u00eddaj\u00ed ve\u0159ejn\u011b ozn\u00e1men\u00fdm<em> p<\/em>pi(j)G. <em>Po tomto kroku by m\u011bly z\u016fstat pouze polynomy, pro kter\u00e9 soukrom\u011b p\u0159edan\u00e9 <\/em>vypo\u010d\u00edt\u00e1v\u00e1 svou soukromou komponentu<em> <\/em><strong><em>Z <\/em><\/strong>p(j)<em> p<\/em>pi(j)G. <em>Po tomto kroku by m\u011bly z\u016fstat pouze polynomy, pro kter\u00e9 soukrom\u011b p\u0159edan\u00e9<\/em><\/p>\n<\/li>\n<li>\n<p>Ka\u017ed\u00fd \u00fa\u010dastn\u00edk<em> j <\/em>jako sou\u010det<em> i(j) pro v\u0161echny <\/em>. Ka\u017ed\u00fd \u00fa\u010dastn\u00edk tak\u00e9 vypo\u010d\u00edt\u00e1 v\u0161echny hodnoty<em> p<\/em>pi(x)G pro v\u0161echny i, <em>i<\/em> v <strong><em>Z<\/em><\/strong>p(x) \u2013 <em>p(x)G <\/em>. Ka\u017ed\u00fd \u00fa\u010dastn\u00edk tak\u00e9 vypo\u010d\u00edt\u00e1 v\u0161echny hodnoty <em>to je skute\u010dn\u011b polynom stupn\u011b <\/em>v<em> <\/em><strong><em>Z<\/em><\/strong><em>.<\/em><\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/a7a92dba3b9de7a376c415fc6c330c46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>V\u0161imn\u011bte si, \u017ee<em> k-1, <\/em>proto\u017ee je to sou\u010det jednotliv\u00fdch<em> i(x), p\u0159i\u010dem\u017e ka\u017ed\u00fd z nich je polynom stupn\u011b. <\/em>proto\u017ee to je sou\u010det jednotliv\u00fdch<em> p<\/em>i(x), p\u0159i\u010dem\u017e ka\u017ed\u00fd z nich je polynom stupn\u011b <em>k<\/em>-1. Pot\u00e9 si uv\u011bdomte, \u017ee zat\u00edmco ka\u017ed\u00fd \u00fa\u010dastn\u00edk <em>j<\/em> zn\u00e1, <em>p(j), <\/em>nemaj\u00ed \u017e\u00e1dn\u00e9 informace o <em>p(x)<\/em> pro <em>x \u2260 j<\/em>. Skute\u010dn\u011b, aby tento hodnotu spo\u010d\u00edtali, mus\u00ed v\u011bd\u011bt v\u0161echny <em>pi(x), <\/em>a dokud \u00fa\u010dastn\u00edk<em> j <\/em>nezn\u00e1 alespo\u0148 jeden z vybran\u00fdch polynom\u016f, nemaj\u00ed dostatek informac\u00ed o<em> p(x).<\/em><\/p>\n<p>To je cel\u00fd proces generov\u00e1n\u00ed polynomu, kter\u00fd byl pot\u0159ebn\u00fd v p\u0159edchoz\u00ed \u010d\u00e1sti. Krok 1, 2 a 4 v\u00fd\u0161e maj\u00ed dostate\u010dn\u011b zjevnou realizaci. Krok 3 v\u0161ak nen\u00ed tak trivi\u00e1ln\u00ed.<\/p>\n<p>Konkr\u00e9tn\u011b, pot\u0159ebujeme b\u00fdt schopni dok\u00e1zat, \u017ee za\u0161ifrovan\u00e9<em> p<\/em>i(j) skute\u010dn\u011b odpov\u00eddaj\u00ed publikovan\u00fdm <em>Po tomto kroku by m\u011bly z\u016fstat pouze polynomy, pro kter\u00e9 soukrom\u011b p\u0159edan\u00e9 <\/em>Pokud to nedok\u00e1\u017eeme, \u00fato\u010dn\u00edk<em> i <\/em>m\u016f\u017ee poslat odpad m\u00edsto<em> p<\/em>i(j) \u00fa\u010dastn\u00edkovi <em>j<\/em>, a \u00fa\u010dastn\u00edk <em>j <\/em>nebude schopen z\u00edskat skute\u010dnou hodnotu <em>pi(j), <\/em>a nebude schopen vypo\u010d\u00edtat svou soukromou komponentu<em>.<\/em><\/p>\n<p>Existuje kryptografick\u00fd protokol, kter\u00fd umo\u017e\u0148uje vytvo\u0159it dal\u0161\u00ed zpr\u00e1vu<em> proof<\/em>i(j), tak\u017ee ka\u017ed\u00fd \u00fa\u010dastn\u00edk, maj\u00edc\u00ed ur\u010ditou hodnotu <em>e, <\/em>a tak\u00e9<em> proofi(j) <\/em>a<em> p<\/em>i(j)G, m\u016f\u017ee lok\u00e1ln\u011b ov\u011b\u0159it, \u017ee <em>e<\/em> \u2013 je skute\u010dn\u011b <em>pi(j), <\/em>za\u0161ifrovan\u00e9 kl\u00ed\u010dem \u00fa\u010dastn\u00edka<em> j. <\/em>Bohu\u017eel, velikost takov\u00e9ho d\u016fkazu je neuv\u011b\u0159iteln\u011b velk\u00e1, a vzhledem k tomu, \u017ee je t\u0159eba publikovat<em> O(nk) <\/em>takov\u00fdch d\u016fkaz\u016f, nelze je pro tento \u00fa\u010del pou\u017e\u00edt.<\/p>\n<p>M\u00edsto toho, abychom dok\u00e1zali, \u017ee <em>pi(j) <\/em>odpov\u00edd\u00e1<em> p<\/em>i(j)G m\u016f\u017eeme v protokolu generov\u00e1n\u00ed polynomu vy\u010dlenit velmi dlouhou dobu, b\u011bhem n\u00ed\u017e v\u0161ichni \u00fa\u010dastn\u00edci kontroluj\u00ed obdr\u017een\u00e9 za\u0161ifrovan\u00e9 <em>pi(j), <\/em>a pokud de\u0161ifrovan\u00e1 zpr\u00e1va neodpov\u00edd\u00e1 ve\u0159ejn\u00e9mu<em> p<\/em>i(j)G, publikuj\u00ed kryptografick\u00fd d\u016fkaz, \u017ee obdr\u017een\u00e1 za\u0161ifrovan\u00e1 zpr\u00e1va je chybn\u00e1. Dok\u00e1zat, \u017ee zpr\u00e1va <em>ne <\/em>odpov\u00edd\u00e1 <em>pi(G)<\/em> je mnohem jednodu\u0161\u0161\u00ed, ne\u017e dok\u00e1zat, \u017ee odpov\u00edd\u00e1. Je t\u0159eba poznamenat, \u017ee to vy\u017eaduje, aby se ka\u017ed\u00fd \u00fa\u010dastn\u00edk objevil v s\u00edti alespo\u0148 jednou b\u011bhem \u010dasu p\u0159id\u011blen\u00e9ho k vytv\u00e1\u0159en\u00ed takov\u00fdch d\u016fkaz\u016f, a spol\u00e9hat se na p\u0159edpoklad, \u017ee pokud takov\u00fd d\u016fkaz publikovali, doraz\u00ed ke v\u0161em ostatn\u00edm \u00fa\u010dastn\u00edk\u016fm do stejn\u00e9ho p\u0159id\u011blen\u00e9ho \u010dasu.<\/p>\n<p><img decoding=\"async\" alt=\"Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2\" src=\"\/wp-content\/uploads\/2020\/10\/f7d92f18c75aa6161a9e3f1724b57426.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Pokud se \u00fa\u010dastn\u00edk v tomto obdob\u00ed v s\u00edti neobjevil a opravdu m\u011bl alespo\u0148 jednu nespr\u00e1vnou komponentu, pak tento konkr\u00e9tn\u00ed \u00fa\u010dastn\u00edk nebude moci \u00fa\u010dastnit dal\u0161\u00ed generace \u010d\u00edsel. Protokol v\u0161ak bude st\u00e1le fungovat, pokud existuje alespo\u0148 <em>k<\/em> \u00fa\u010dastn\u00edk\u016f, kte\u0159\u00ed bu\u010f pr\u00e1v\u011b obdr\u017eeli spr\u00e1vn\u00e9 komponenty, nebo stihli poskytnout d\u016fkaz nespr\u00e1vnosti v p\u0159id\u011blen\u00e9m \u010dase.<\/p>\n<h3>D\u016fkazy spr\u00e1vnosti H_i<\/h3>\n<p>Posledn\u00ed \u010d\u00e1st, kterou je t\u0159eba prodiskutovat, je, jak prok\u00e1zat spr\u00e1vnost publikovan\u00fdch<em> H<\/em>i, konkr\u00e9tn\u011b \u017ee <em>Hi = p(i)H, <\/em>bez odhalen\u00ed<em> p(i).<\/em><\/p>\n<p>Vzpome\u0148me, \u017ee hodnoty<em> H, G, p(i)G <\/em>jsou ve\u0159ejn\u00e9 a zn\u00e1m\u00e9 v\u0161em.<em> <\/em>Operace z\u00edsk\u00e1v\u00e1n\u00ed<em> p(i) <\/em>znaje<em> p(i)G <\/em>a<em> G <\/em>se naz\u00fdv\u00e1 diskr\u00e9tn\u00ed logarithmus nebo<em> dlog, <\/em>a chceme prok\u00e1zat, \u017ee:<\/p>\n<p><em>dlog(p(i)G, G) = dlog(H<\/em>i, <em>H<\/em>)<\/p>\n<p>bez zve\u0159ejn\u011bn\u00ed <em>p(i)<\/em>. Konstrukce pro takov\u00e9 d\u016fkazy existuj\u00ed, nap\u0159\u00edklad<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_knowledge#Schnorr_protocol\"> <u>Schnorr Protocol<\/u><\/a><\/noindex>.<\/p>\n<p>S takovou konstrukc\u00ed ka\u017ed\u00fd \u00fa\u010dastn\u00edk spole\u010dn\u011b s <em>Ahoj, <\/em>odes\u00edl\u00e1 d\u016fkaz spr\u00e1vnosti podle konstrukce.<\/p>\n<p>Kdy\u017e je n\u00e1hodn\u00e9 \u010d\u00edslo generov\u00e1no, \u010dasto je t\u0159eba pou\u017e\u00edt ho \u00fa\u010dastn\u00edk\u016fm, kte\u0159\u00ed se li\u0161\u00ed od t\u011bch, kdo ho vygenerovali. T\u011bmto \u00fa\u010dastn\u00edk\u016fm je t\u0159eba spolu s \u010d\u00edslem pos\u00edlat v\u0161echny <em>Ahoj,<\/em> a souvisej\u00edc\u00ed d\u016fkazy.<\/p>\n<p>Zv\u00eddav\u00fd \u010dten\u00e1\u0159 se m\u016f\u017ee zeptat: proto\u017ee fin\u00e1ln\u00ed n\u00e1hodn\u00e9 \u010d\u00edslo je<em> H<\/em>0, a <em>p(0)G \u2013 <\/em>je to ve\u0159ejn\u00e1 informace, pro\u010d je pot\u0159eba d\u016fkaz pro ka\u017ed\u00e9 jednotliv\u00e9<em> H<\/em>i, pro\u010d m\u00edsto toho neodeslat d\u016fkaz, \u017ee<\/p>\n<p>dlog(<em>p(0)G, G) = dlog(H<\/em>0, <em>H<\/em>)<\/p>\n<p>Probl\u00e9mem je, \u017ee s pomoc\u00ed Schnorr Protocol nelze vytvo\u0159it takov\u00fd d\u016fkaz, proto\u017ee nikdo nezn\u00e1 hodnotu <em>p(0)<\/em>, pot\u0159ebnou k vytvo\u0159en\u00ed d\u016fkazu, a nav\u00edc cel\u00fd gener\u00e1tor n\u00e1hodn\u00fdch \u010d\u00edsel je zalo\u017een na tom, \u017ee nikdo nezn\u00e1 tuto hodnotu. Proto je nutn\u00e9 m\u00edt v\u0161echny hodnoty <em>Ahoj, <\/em>a jejich individu\u00e1ln\u00ed d\u016fkazy, aby bylo mo\u017en\u00e9 prok\u00e1zat spr\u00e1vnost.<em> H<\/em>0.<\/p>\n<p>Pokud by v\u0161ak na bodech eliptick\u00fdch k\u0159ivin byla n\u011bjak\u00e1 operace, kter\u00e1 je s\u00e9manticky podobn\u00e1 n\u00e1soben\u00ed, prok\u00e1z\u00e1n\u00ed spr\u00e1vnosti <em>H0 <\/em>by bylo trivi\u00e1ln\u00ed, prost\u011b bychom se ujistili, \u017ee<\/p>\n<p><em>H<\/em>0 \u00d7 <em>G<\/em> = <em>p(0)G \u00d7 H<\/em><\/p>\n<p>Pokud vybran\u00e1 k\u0159ivka podporuje <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@VitalikButerin\/exploring-elliptic-curve-pairings-c73c1864e627\"><u>elliptic curve pairings<\/u><\/a><\/noindex>, takov\u00fd d\u016fkaz funguje. V takov\u00e9m p\u0159\u00edpad\u011b<em> H<\/em>0 \u2013 to nen\u00ed jen v\u00fdstup gener\u00e1toru n\u00e1hodn\u00fdch \u010d\u00edsel, kter\u00fd m\u016f\u017ee zkontrolovat ka\u017ed\u00fd \u00fa\u010dastn\u00edk, jen\u017e zn\u00e1 <em>G, H<\/em> a <em>p(0)G. H<\/em>0 \u2013 to je tak\u00e9 podpis na zpr\u00e1v\u011b, kter\u00e1 byla pou\u017eita jako seed, potvrzuj\u00edc\u00ed, \u017ee <em>k<\/em> a <em>n <\/em>\u00fa\u010dastn\u00edci podepsali tuto zpr\u00e1vu. T\u00edm p\u00e1dem, pokud <em>seed \u2013 <\/em>je to hash bloku v protokolu blockchainu, pak <em>H0<\/em> \u2013 to je z\u00e1rove\u0148 multi-podpis na bloku a velmi dobr\u00e9 n\u00e1hodn\u00e9 \u010d\u00edslo.<\/p>\n<h4>Na z\u00e1v\u011br<\/h4>\n<p>Tento \u010dl\u00e1nek je sou\u010d\u00e1st\u00ed s\u00e9rie technick\u00fdch \u010dl\u00e1nk\u016f na blogu. <noindex><a rel=\"nofollow\" href=\"https:\/\/near.org\">NEAR<\/a><\/noindex>. NEAR je blokchain protokol a platforma pro v\u00fdvoj decentralizovan\u00fdch aplikac\u00ed se zam\u011b\u0159en\u00edm na snadnost v\u00fdvoje a u\u017eivatelskou p\u0159\u00edv\u011btivost pro koncov\u00e9 u\u017eivatele.<\/p>\n<p>K\u00f3d protokolu je otev\u0159en\u00fd, na\u0161e implementace je naps\u00e1na v jazyce Rust, lze ji nal\u00e9zt. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nearprotocol\/nearcore\">tady<\/a><\/noindex>.<\/p>\n<p>Pod\u00edvat se, jak vypad\u00e1 v\u00fdvoj na NEAR a vyzkou\u0161et si to v online IDE, lze. <noindex><a rel=\"nofollow\" href=\"https:\/\/examples.near.org\">zde<\/a><\/noindex>.<\/p>\n<p>Sledovat v\u0161echny novinky v ru\u0161tin\u011b lze v <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/near_protocol\">skupin\u011b na Telegramu<\/a><\/noindex> a v <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/nearprotocol\">skupin\u011b na VKontakte<\/a><\/noindex>, a anglicky na ofici\u00e1ln\u00edm <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/NEARProtocol\">Twitteru<\/a><\/noindex>.<\/p>\n<p>Na shledanou!<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/near\/blog\/521700\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0437\u0430\u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443, \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u043a \u0442\u0430\u043a\u0438\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95847,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95846","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-03T23:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-03T23:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Je mo\u017en\u00e9 generovat n\u00e1hodn\u00e1 \u010d\u00edsla, pokud si navz\u00e1jem ned\u016fv\u011b\u0159ujeme? \u010c\u00e1st 2 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443? \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/mozhno-li-generirovat-sluchajnye-chisla-esli-my-ne-doveryaem-drug-drugu-chast-2","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-03T23:42:23+00:00","article:modified_time":"2020-10-03T23:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95846","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:56:24","updated":"2022-09-30 13:54:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/95846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=95846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/95846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/95847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=95846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=95846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=95846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}