{"id":32343,"date":"2019-10-31T21:46:27","date_gmt":"2019-10-31T18:46:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne\/"},"modified":"2019-10-31T21:46:27","modified_gmt":"2019-10-31T18:46:27","slug":"cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne","title":{"rendered":"N\u00e1hodn\u00fd or\u00e1kul na z\u00e1klad\u011b digit\u00e1ln\u00edho podpisu v blockchainu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Od n\u00e1padu k realizaci: modifikujeme st\u00e1vaj\u00edc\u00ed sch\u00e9ma digit\u00e1ln\u00edho podpisu na eliptick\u00e9 k\u0159ivce, aby bylo deterministick\u00e9, a na jeho z\u00e1klad\u011b poskytujeme funkce pro z\u00edsk\u00e1v\u00e1n\u00ed ov\u011b\u0159iteln\u00fdch pseudon\u00e1hodn\u00fdch \u010d\u00edsel v r\u00e1mci blockchainu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"N\u00e1hodn\u00fd or\u00e1kul na z\u00e1klad\u011b digit\u00e1ln\u00edho podpisu v blockchainu\" src=\"\/wp-content\/uploads\/2019\/04\/91c321aa895498263f80f586aa336956.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ideya\">N\u00e1pad<\/h1>\n<p><\/p>\n<p>Na podzim 2018 byly v blockchainu Waves <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.wavesplatform.com\/smart-accounts-finally-activated-on-waves-mainnet-8bb7c7b67beb\">aktivov\u00e1ny prvn\u00ed smart kontrakty<\/a><\/noindex>, okam\u017eit\u011b se objevila ot\u00e1zka, zda je mo\u017en\u00e9 z\u00edskat <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_%D0%BF%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB\">pseudon\u00e1hodn\u00e1 \u010d\u00edsla<\/a><\/noindex>, kter\u00fdm lze d\u016fv\u011b\u0159ovat.<\/p>\n<p><\/p>\n<p>Po p\u0159em\u00fd\u0161len\u00ed o t\u00e9to ot\u00e1zce jsem dosp\u011bl k z\u00e1v\u011bru: jak\u00fdkoliv blockchain je klec, d\u016fv\u011bryhodn\u00fd zdroj entropie v uzav\u0159en\u00e9m syst\u00e9mu nen\u00ed mo\u017en\u00e9 z\u00edskat.<\/p>\n<p><\/p>\n<p>Ale jedna my\u0161lenka se mi p\u0159ece jen l\u00edbila: pokud <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB\">n\u00e1hodn\u00fd oracle<\/a><\/noindex> bude generovat podpis u\u017eivatelsk\u00fdch dat pomoc\u00ed deterministick\u00e9ho algoritmu, pak si u\u017eivatel v\u017edy bude moci tento podpis ov\u011b\u0159it ve\u0159ejn\u00fdm kl\u00ed\u010dem a bude m\u00edt jistotu, \u017ee z\u00edskan\u00e1 hodnota je unik\u00e1tn\u00ed. Oracle nem\u016f\u017ee nic zm\u011bnit, algoritmus poskytuje jednozna\u010dn\u00fd v\u00fdsledek. V podstat\u011b si u\u017eivatel zafixuje v\u00fdsledek, ale nev\u00ed ho, dokud ho oracle nezve\u0159ejn\u00ed. Tak\u017ee vlastn\u011b nen\u00ed t\u0159eba oraklovi d\u016fv\u011b\u0159ovat, ale je mo\u017en\u00e9 ov\u011b\u0159it v\u00fdsledek jeho pr\u00e1ce. Pak, v p\u0159\u00edpad\u011b \u00fasp\u011b\u0161n\u00e9ho ov\u011b\u0159en\u00ed, lze takov\u00fd podpis pova\u017eovat za zdroj entropie pro pseudon\u00e1hodn\u00e9 \u010d\u00edslo.<\/p>\n<p><\/p>\n<p>V blockchainov\u00e9 platform\u011b Waves se pou\u017e\u00edv\u00e1 podpisov\u00e9 sch\u00e9ma <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/EdDSA\">EdDSA<\/a><\/noindex> varianta <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/EdDSA#Ed25519\">Ed25519<\/a><\/noindex>. V tomto sch\u00e9matu se podpis skl\u00e1d\u00e1 z hodnot R a S, kde R z\u00e1vis\u00ed na n\u00e1hodn\u00e9 hodnot\u011b, a S se po\u010d\u00edt\u00e1 na z\u00e1klad\u011b podepisovan\u00e9 zpr\u00e1vy, soukrom\u00e9ho kl\u00ed\u010de a stejn\u00e9ho n\u00e1hodn\u00e9ho \u010d\u00edsla, kter\u00e9 je pou\u017eito pro R. To znamen\u00e1, \u017ee neexistuje jednozna\u010dn\u00e1 z\u00e1vislost, pro jednu a tut\u00e9\u017e u\u017eivatelskou zpr\u00e1vu existuje mnoho platn\u00fdch podpis\u016f.<\/p>\n<p><\/p>\n<p>Je z\u0159ejm\u00e9, \u017ee takov\u00fd podpis v \u010dist\u00e9 podob\u011b nelze pou\u017e\u00edt jako zdroj pseudon\u00e1hodn\u00fdch \u010d\u00edsel, proto\u017ee je nedeterministick\u00fd a tud\u00ed\u017e m\u016f\u017ee b\u00fdt snadno manipulov\u00e1n oraclem.<\/p>\n<p><\/p>\n<p>Ale jak se uk\u00e1zalo, je skute\u010dn\u011b mo\u017en\u00e9 u\u010dinit jej deterministick\u00fdm.<\/p>\n<p><\/p>\n<p>M\u011bl jsem velk\u00e9 nad\u011bje na <noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/draft-irtf-cfrg-vrf-04\">ov\u011b\u0159itelnou n\u00e1hodnou funkci (VRF)<\/a><\/noindex>, ale po prostudov\u00e1n\u00ed p\u0159edm\u011btu jsme se museli t\u00e9to variant\u011b vzd\u00e1t. A\u010dkoli VRF nab\u00edz\u00ed deterministickou variantu podpisu a jeho d\u016fkaz\u016f, v algoritmu se nach\u00e1z\u00ed podivn\u00e9 m\u00edsto, kter\u00e9 vytv\u00e1\u0159\u00ed \u010dernou d\u00edru pro manipulace or\u00e1kulem. Konkr\u00e9tn\u011b, p\u0159i v\u00fdpo\u010dtu hodnoty k (<noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/draft-irtf-cfrg-vrf-04#section-5.1\">odd\u00edl 5.1<\/a><\/noindex>) se pou\u017e\u00edv\u00e1 tajn\u00fd kl\u00ed\u010d, kter\u00fd z\u016fst\u00e1v\u00e1 u\u017eivateli nezn\u00e1m\u00fd, co\u017e znamen\u00e1, \u017ee u\u017eivatel nem\u016f\u017ee zkontrolovat spr\u00e1vnost v\u00fdpo\u010dtu k. To znamen\u00e1, \u017ee or\u00e1kulum m\u016f\u017ee pou\u017e\u00edt jakoukoli pot\u0159ebnou hodnotu k a z\u00e1rove\u0148 v\u00e9st datab\u00e1zi shod k a podepisovan\u00fdch dat, aby v\u017edy mohlo znovu vypo\u010d\u00edtat spr\u00e1vn\u00fd v\u00fdsledek z pohledu VRF. Uvid\u00edte slosov\u00e1n\u00ed zalo\u017een\u00e9 na VRF bez odhalen\u00ed tajn\u00e9ho kl\u00ed\u010de, m\u016f\u017eete se pustit do intelektu\u00e1ln\u00ed debaty: uv\u00e9st nutnost bu\u010f odhalit kl\u00ed\u010d, nebo jej vylou\u010dit z v\u00fdpo\u010dtu k, jinak bude tajn\u00fd kl\u00ed\u010d automaticky odhalen p\u0159i prvn\u00edm podpisu. Jak u\u017e bylo \u0159e\u010deno, podivn\u00fd syst\u00e9m pro n\u00e1hodn\u00e9ho or\u00e1kula.<\/p>\n<p><\/p>\n<p>Po trochu p\u0159em\u00fd\u0161len\u00ed a podpo\u0159e m\u00edstn\u00edch analytik\u016f se zrodil pl\u00e1n pr\u00e1ce VECRO.<\/p>\n<p><\/p>\n<p>VECRO je zkratka pro Verifiable Elliptic Curve Random Oracle, co\u017e znamen\u00e1 ov\u011b\u0159iteln\u00fd n\u00e1hodn\u00fd or\u00e1kul na eliptick\u00fdch k\u0159ivk\u00e1ch.<\/p>\n<p><\/p>\n<p>V\u0161echno se uk\u00e1zalo jako celkem jednoduch\u00e9, pro dosa\u017een\u00ed determinovanosti je pot\u0159eba fixovat hodnotu R p\u0159ed vznikem podepisovan\u00e9 zpr\u00e1vy. Pokud je R fixov\u00e1no a je sou\u010d\u00e1st\u00ed podepisovan\u00e9 zpr\u00e1vy, co\u017e nav\u00edc zaru\u010duje fixaci R v samotn\u00e9 podepisovan\u00e9 zpr\u00e1v\u011b, hodnota S je jednozna\u010dn\u011b ur\u010dena u\u017eivatelskou zpr\u00e1vou a tud\u00ed\u017e m\u016f\u017ee b\u00fdt pou\u017eita jako zdroj pro pseudon\u00e1hodn\u00e1 \u010d\u00edsla.<\/p>\n<p><\/p>\n<p>V takov\u00e9m sch\u00e9matu nez\u00e1le\u017e\u00ed na tom, jak\u00fdm zp\u016fsobem je R fixov\u00e1no, to z\u016fst\u00e1v\u00e1 v odpov\u011bdnosti or\u00e1kula. D\u016fle\u017eit\u00e9 je, \u017ee S je jednozna\u010dn\u011b ur\u010deno u\u017eivatelsk\u00fdm vstupem, ale jeho hodnota nen\u00ed zn\u00e1ma, dokud ji or\u00e1kulum nepublikuje. P\u0159esn\u011b jak jsme cht\u011bli!<\/p>\n<p><\/p>\n<p>Pokud jde o fixovan\u00e9 R, m\u011bjte na pam\u011bti, \u017ee <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jedisct1\/libsodium\/issues\/170\">opakovan\u011b pou\u017eit\u00e9 R<\/a><\/noindex> P\u0159i podepisov\u00e1n\u00ed r\u016fzn\u00fdch zpr\u00e1v jednozna\u010dn\u011b odhaluje priv\u00e1tn\u00ed kl\u00ed\u010d v sch\u00e9matu EdDSA. Pro vlastn\u00edka or\u00e1kula je nesm\u00edrn\u011b d\u016fle\u017eit\u00e9 vylou\u010dit mo\u017enost op\u011btovn\u00e9ho pou\u017eit\u00ed R pro podpis r\u016fzn\u00fdch zpr\u00e1v u\u017eivatele. To znamen\u00e1, \u017ee p\u0159i jak\u00fdchkoli manipulac\u00edch nebo dohod\u00e1ch or\u00e1kulum v\u017edy riskuje ztr\u00e1tu sv\u00e9ho priv\u00e1tn\u00edho kl\u00ed\u010de.<\/p>\n<p><\/p>\n<p>Celkov\u011b by or\u00e1kulum m\u011blo u\u017eivatel\u016fm poskytovat dv\u011b funkce: inicializaci, kter\u00e1 zafixuje hodnotu R, a podpis, kter\u00fd vrac\u00ed hodnotu S. P\u0159itom p\u00e1r R, S je b\u011b\u017en\u00fdm ov\u011b\u0159iteln\u00fdm podpisem u\u017eivatelsk\u00e9 zpr\u00e1vy obsahuj\u00edc\u00ed fixn\u00ed hodnotu R a libovoln\u00e9 \u00fadaje u\u017eivatele.<\/p>\n<p><\/p>\n<p>Lze nam\u00edtnout, \u017ee toto sch\u00e9ma pro blockchain nen\u00ed nic jin\u00e9ho ne\u017e b\u011b\u017en\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/348838\/\">sch\u00e9ma commit-reveal<\/a><\/noindex>. V podstat\u011b, ano, je to ono. Ale existuje n\u011bkolik nuanc\u00ed. Za prv\u00e9, or\u00e1kulum v\u017edy pracuje se stejn\u00fdm kl\u00ed\u010dem ve v\u0161ech operac\u00edch, nap\u0159\u00edklad je to pohodln\u00e9 pou\u017e\u00edvat v kontraktech. Za druh\u00e9, existuje riziko ztr\u00e1ty priv\u00e1tn\u00edho kl\u00ed\u010de or\u00e1kulem p\u0159i nespr\u00e1vn\u00e9m chov\u00e1n\u00ed, nap\u0159\u00edklad or\u00e1kulum umo\u017e\u0148uje prov\u00e1d\u011bt vzorky v\u00fdsledku, pak sta\u010d\u00ed prov\u00e9st pouh\u00e9 dva vzorky, aby se zjistil priv\u00e1tn\u00ed kl\u00ed\u010d a z\u00edskal pln\u00fd p\u0159\u00edstup k pen\u011b\u017eence. Za t\u0159et\u00ed, nativn\u011b ov\u011b\u0159iteln\u00fd podpis v blockchainu, kter\u00fd je zdrojem n\u00e1hody \u2014 to je hezk\u00e9.<\/p>\n<p><\/p>\n<p>P\u016fl roku se my\u0161lenka realizace vyv\u00edjela v hlav\u011b, dokud kone\u010dn\u011b nep\u0159i\u0161la motivace v podob\u011b <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/waves-lab\/waves-labs-announces-first-grant-recipients-7568f01fec22\">grantu od Waves Labs<\/a><\/noindex>. S velk\u00fdm grantem p\u0159ich\u00e1z\u00ed velk\u00e1 odpov\u011bdnost, znamen\u00e1 to, \u017ee projekt m\u00e1 b\u00fdt!<\/p>\n<p><\/p>\n<h1 id=\"realizaciya\">Implementace<\/h1>\n<p><\/p>\n<p>Tak\u017ee v tomto projektu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\">byl VECRO realizov\u00e1n<\/a><\/noindex> na blockchainu Waves v re\u017eimu dotaz-odpov\u011b\u010f pomoc\u00ed transakc\u00ed transferu mezi u\u017eivatelem a or\u00e1kulem. P\u0159itom na \u00fa\u010dtu or\u00e1kula je nastaven skript, kter\u00fd kontroluje pr\u00e1ci striktn\u011b v souladu s v\u00fd\u0161e popsanou logikou. Transakce or\u00e1kula proch\u00e1zej\u00ed kontrolou s obnovov\u00e1n\u00edm cel\u00e9 \u0159et\u011bzu interakce s u\u017eivatelem. V kontrole fin\u00e1ln\u00ed hodnoty se \u00fa\u010dastn\u00ed v\u0161echny \u010dty\u0159i transakce, chytr\u00fd kontrakt je pr\u016fb\u011b\u017en\u011b zaji\u0161\u0165uje na p\u0159\u00edsn\u00e9 kontroln\u00ed nitce, krok za krokem ov\u011b\u0159uje v\u0161echny hodnoty a nenech\u00e1v\u00e1 m\u00edsto pro jak\u00e9koli manipulace.<\/p>\n<p><\/p>\n<p>Je\u0161t\u011b jednou, aby to l\u00e9pe zapadlo a bylo jasn\u011bj\u0161\u00ed. Or\u00e1kulum nepracuje pouze podle navrhovan\u00e9ho sch\u00e9matu. Jeho \u010dinnost je pln\u011b kontrolov\u00e1na na \u00farovni blockchainu. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\/blob\/master\/vecro.ride\">napevno smart kontraktem<\/a><\/noindex>. Krok vlevo a transakce prost\u011b neprojde. Tak\u017ee pokud transakce skon\u010dila v blockchainu, u\u017eivatel ani nemus\u00ed nic kontrolovat, za n\u011bj to u\u017e ov\u011b\u0159ilo stovky uzl\u016f s\u00edt\u011b.<\/p>\n<p><\/p>\n<p>V sou\u010dasnosti je v hlavn\u00ed s\u00edti Waves spu\u0161t\u011bn jeden VECRO (m\u016f\u017eete spustit sv\u016fj, nen\u00ed to slo\u017eit\u00e9, sta\u010d\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/VECRO\/blob\/master\/config.sample.php\">se pod\u00edvat na uk\u00e1zku konfigurace<\/a><\/noindex>). Aktu\u00e1ln\u00ed k\u00f3d b\u011b\u017e\u00ed na PHP (na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deemru\/WavesKit\">WavesKit<\/a><\/noindex>, o kter\u00e9m <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446110\/\">jsem hovo\u0159il d\u0159\u00edve.<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Abyste mohli vyu\u017e\u00edt slu\u017ebu oracle, je nutn\u00e9:<\/p>\n<p><\/p>\n<ul>\n<li>Zafixovat R;\n<ul>\n<li>Poslat minim\u00e1ln\u011b 0.005 Waves na alias oracle init@vecr;<\/li>\n<li>Z\u00edskat R-k\u00f3d v poli attachment v p\u0159evodu 1 R-vecr tokenu od oracle u\u017eivateli;<\/li>\n<\/ul>\n<\/li>\n<li>Z\u00edskat podpis;\n<ul>\n<li>Poslat minim\u00e1ln\u011b 0.005 Waves na alias oracle random@vecr, a tak\u00e9 POVINN\u011a uv\u00e9st v poli attachment d\u0159\u00edve z\u00edskan\u00fd R-k\u00f3d a dal\u0161\u00ed u\u017eivatelsk\u00e1 data;<\/li>\n<li>Z\u00edskat S-k\u00f3d v poli attachment v p\u0159evodu 1 S-vecr tokenu od oracle u\u017eivateli;<\/li>\n<\/ul>\n<\/li>\n<li>Pou\u017e\u00edt S-k\u00f3d jako zdroj pseudon\u00e1hodn\u00e9ho \u010d\u00edsla.<\/li>\n<\/ul>\n<p><\/p>\n<p>Nuance aktu\u00e1ln\u00ed implementace:<\/p>\n<p><\/p>\n<ul>\n<li>Poslan\u00e9 Waves oracle se pou\u017e\u00edvaj\u00ed jako poplatek za zp\u011btnou transakci u\u017eivateli, a\u017e do maxim\u00e1ln\u011b 1 Waves;<\/li>\n<li>R-k\u00f3d je spojen\u00ed bytu symbolu 'R' a 32-bytn\u00ed hodnoty R v k\u00f3dov\u00e1n\u00ed base58;<\/li>\n<li>R-k\u00f3d v attachment by m\u011bl b\u00fdt prvn\u00ed, u\u017eivatelsk\u00e1 data jdou po R-k\u00f3du;<\/li>\n<li>S-k\u00f3d je spojen\u00ed bytu symbolu 'S' a 32-bytn\u00ed hodnoty S v k\u00f3dov\u00e1n\u00ed base58;<\/li>\n<li>S je v\u00fdsledkem d\u011blen\u00ed podle modulu, proto nelze pou\u017e\u00edvat S jako plnohodnotn\u00e9 256-bitov\u00e9 pseudon\u00e1hodn\u00e9 \u010d\u00edslo (toto \u010d\u00edslo m\u016f\u017ee b\u00fdt pova\u017eov\u00e1no maxim\u00e1ln\u011b za 252-bitov\u00e9 pseudon\u00e1hodn\u00e9 \u010d\u00edslo);<\/li>\n<li>Nejjednodu\u0161\u0161\u00ed varianta je pou\u017e\u00edt hash od S-k\u00f3du jako pseudon\u00e1hodn\u00e9 \u010d\u00edslo.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u0159\u00edklad z\u00edsk\u00e1n\u00ed S-k\u00f3du:<\/p>\n<p><\/p>\n<ul>\n<li>Inicializace: <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesexplorer.com\/tx\/8gc8jwM7JrPNehoDs7NVyos7BsufYktvkwVW1B6FAY6\">https:\/\/wavesexplorer.com\/tx\/8gc8jwM7JrPNehoDs7NVyos7BsufYktvkwVW1B6FAY6<\/a><\/noindex><\/li>\n<li>Z\u00edsk\u00e1n\u00ed R-k\u00f3du: <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesexplorer.com\/tx\/9eB25SbzEwvHEbm8pcKj7MGDrYv1u3Fxpj696FkJ96hd\">https:\/\/wavesexplorer.com\/tx\/9eB25SbzEwvHEbm8pcKj7MGDrYv1u3Fxpj696FkJ96hd<\/a><\/noindex><\/li>\n<li>\u017d\u00e1dost o v\u00fdsledek podpisu R-k\u00f3du a u\u017eivatelsk\u00fdch dat 'random': <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesexplorer.com\/tx\/6faoFJobEsugDFYmYmfsbtQYABmckNuE2kevaLh7ifzz\">https:\/\/wavesexplorer.com\/tx\/6faoFJobEsugDFYmYmfsbtQYABmckNuE2kevaLh7ifzz<\/a><\/noindex><\/li>\n<li>Z\u00edsk\u00e1n\u00ed S-k\u00f3du: <noindex><a rel=\"nofollow\" href=\"https:\/\/wavesexplorer.com\/tx\/C5VrFLQcprbA1KXAToaNvMP4Kg2rq43NkwWuADAA7wXX\">https:\/\/wavesexplorer.com\/tx\/C5VrFLQcprbA1KXAToaNvMP4Kg2rq43NkwWuADAA7wXX<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Z technick\u00e9ho hlediska je oracle pln\u011b p\u0159ipraven k pou\u017eit\u00ed, m\u016f\u017eete ho bez obav pou\u017e\u00edvat. Z pohledu b\u011b\u017en\u00e9ho u\u017eivatele chyb\u00ed pohodln\u00e9 grafick\u00e9 rozhran\u00ed, na to si budeme muset po\u010dkat.<\/p>\n<p><\/p>\n<p>R\u00e1d odpov\u00edm na ot\u00e1zky a p\u0159ijmu p\u0159ipom\u00ednky, d\u011bkuji.<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449340\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0442 \u0438\u0434\u0435\u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0418\u0434\u0435\u044f \u041e\u0441\u0435\u043d\u044c\u044e 2018 \u0432 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves \u0431\u044b\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0435\u0440\u0432\u044b\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c. \u041b\u043e\u043c\u0430\u044f \u0433\u043e\u043b\u043e\u0432\u0443 \u043d\u0430\u0434 \u044d\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24158,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32343","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=\"description\" content=\"\u041e\u0442 \u0438\u0434\u0435\u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430.\" \/>\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\/cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne\" \/>\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\udd47C\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043e\u0440\u0430\u043a\u0443\u043b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0432 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0442 \u0438\u0434\u0435\u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne\" \/>\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=\"2019-10-31T18:46:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:46:27+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\udd47N\u00e1hodn\u00fd or\u00e1kulum zalo\u017een\u00e9 na digit\u00e1ln\u00edm podpisu v blockchainu | ProHoster","description":"Od n\u00e1padu k realizaci: modifikujeme st\u00e1vaj\u00edc\u00ed sch\u00e9ma digit\u00e1ln\u00edho podpisu na eliptick\u00e9 k\u0159ivce, aby bylo deterministick\u00e9, a na jeho z\u00e1klad\u011b poskytujeme funkce pro z\u00edsk\u00e1v\u00e1n\u00ed ov\u011b\u0159iteln\u00fdch v r\u00e1mci blockchainu.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne","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\udd47C\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043e\u0440\u0430\u043a\u0443\u043b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0432 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 | ProHoster","og:description":"\u041e\u0442 \u0438\u0434\u0435\u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0435\u0451 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/cluchajnyj-orakul-na-osnove-tsifrovoj-podpisi-v-blokchejne","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":"2019-10-31T18:46:27+00:00","article:modified_time":"2019-10-31T18:46:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32343","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":"2026-01-21 10:26:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:00:23","updated":"2026-01-21 10:26:19","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\/32343","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=32343"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/32343\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/24158"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=32343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=32343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=32343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}