Upgrade to Pro — share decks privately, control downloads, hide ads and more …

暗号通貨・ブロックチェーンをたしなむ JSフレンズ -初夏のJavaScript祭 in サーキュレーションビル ForPro- / crypto coin js

暗号通貨・ブロックチェーンをたしなむ JSフレンズ -初夏のJavaScript祭 in サーキュレーションビル ForPro- / crypto coin js

初夏のJavaScript祭 in サーキュレーションビル ForProでの登壇資料です。

* botをつくるのたのしい
* 暗号技術たのしい
* ブロックチェーンのデータ構造たのしい
* 分散合意たのしい
* ブロックチェーンプログラミングはJSでできる!

A6a5e01b331d18dbd9c5de1f2cc2879f?s=128

erukiti

May 19, 2018
Tweet

Transcript

  1. ҉߸௨՟ɾϒϩοΫ νΣʔϯΛͨ͠ͳΉ +4ϑϨϯζ !FSVLJUJ

  2. !FSVLJUJ w લ৬͸΢Σϒܥͷ๭ࣾʢ΄΅όοΫΤϯυʣ w ϑϦʔϥϯεΤϯδχΞʢि͋ͨΓɾ೔·ͰͷҊ݅ͱ͔ͳΒ ͝૬ஊʹ৐Ε·͢ʣ w HJUIVC 2JJUBଞͰɺ!FSVLJUJͰ׆ಈ w

    5ZQF4DSJQUେ޷͖ w KFTUͰ5%%େ޷͖ w ٕज़ॻϥΠςΟϯά΋ͨ͠ͳΉ
  3. /FYU1VCMJTIJOH4BNQMF #BCFMͱ"45Λ ࢖͍ ͜ ͳ ͠ ͯ +BWB4DSJQU։ൃΛՃ଎ ʂ ΠϯϓϨεR&Dʦ

    NextPublishing ʧ E-Book / Print Book s e r i e s ٕ ज़ ॻ య ࠤʑ໦ ढ़հ ஶ ιʔεΛղੳ ɾ Ճ޻ͯ͠ੜ࢈ੑʹࠩΛ͚ͭΔ ʂ JavaScript ASTೖ໳ ٕ ज़ ॻ య 9784844398226 1922055018009 ISBN978-4-8443-9822-6 C2055 ¥1800E Ձ֨ 1800 ԁʴ੫ ຊॻ͸ॻళͳͲͰͷൢചՁ֨Λ߆ଋ͍ͯ͠·ͤΜɻ ٕज़ॻయ ٕज़ॻయ ٕज़ॻయ ٕज़ॻయ ঎ۀԽ ঎ۀԽ
  4. ݱࡏൢചதͷຊ w ୯ஶ w IUUQTULSBCCJUIPVTFCPPUIQNJUFNT w IUUQTBN[OUP,Z.HS/ w IUUQTBN[OUP*U2):Q w

    ߹ಉࢽ w IUUQTBN[OUP,"/ZN
  5. ๻ͷϓϩάϥϛϯάɾ+4ཤྺ w ೥୅͔Β$ݴޠΛϝΠϯͱͯ͠ɺ೥͔Β3VCZ΋ซ ༻ͱ͍͏ܗͰͣͬͱ΍͖ͬͯͨ 1)1 +BWB  4DBMB (PͳͲ΋ʜ 

    w ೥ࠒʹ΄Μͷগ͚ͩ͠+BWB4DSJQUΛ৮͔ͬͯΒ೥Ҏ্ +4Λ৮ͬͯͳ͔ͬͨ w &MFDUSPO $PGGFF4DSJQU͕͖͔͚ͬͰ+4΍Γ͸͡ΊΔ w $PGGFF4DSJQUˠ&4 ˠ5ZQF4DSJQUYˠ&4  ˠXJUI'MPXˠ5ZQF4DSJQUY
  6. +BWB4DSJQUͨʔͷ͠ʔʂ

  7. ࠓ೔ͷ಺༰

  8. ҉߸௨՟ɾϒϩοΫνΣʔϯͷ ٕज़ΊͬͪΌָ͍͠ w CPU࡞Δͱָ͍͠Αʂ w ҉߸ٕज़ࣗମָ͕͍͠Αʂ w ϒϩοΫνΣʔϯٕज़΋ָ͍͠Αʂ

  9. None
  10. CPU

  11. CPU͸ͨͷ͍͠୊ࡐͰ͋Δ w ॳ৺ऀ͕΍Δͷʹͪΐ͏Ͳྑ͍୊ࡐ w ΄Ͳ΄Ͳʹ࿅शʹͳͬͯɺ͔ͭ൓Ԡ͕ฦͬͯ͘ Δ͔Βָ͍͠ w )VCPUͱ͔৭ʑͳϘοτϑϨʔϜϫʔΫ΍ศར ͳϥΠϒϥϦ΋͋Δ w

    ͔͠΋࣮༻త
  12. ͦ͜ͰUSBEFCPU w σʔλݚڀ΍τϨʔυͰ࣮རΛಘΒΕΔʢ໥͔Δ͜ͱΛอূ͠ ·ͤΜʣ w ૬৔΍ଞͷσʔλΛऔಘͯ͠ചΓങ͍ͷ஫จΛग़͢ w ๏ఆ௨՟҉߸௨՟ w ҉߸௨՟҉߸௨՟

    w ෳ਺औҾॴؒͷ૬৔ͷ͔ࠩΒརӹΛ͑ΔʢࡋఆऔҾʣ
  13. CPUMJCSBSZDMPVE w MJCSBSZ w IUUQTHJUIVCDPNDDYUDDYU w USBEJOHCPU w IUUQTHJUIVCDPNBTLNJLFHFLLP w

    IUUQTHJUIVCDPN%FWJB7JS[FOCPU w DMPVECPUTFSWJDF w IUUQTDSZQUPUSBEFSPSH w IUUQTDPJOUSBEFSDPKQ
  14. ଞʹ΋ʜ w ϏοτίΠϯࣗಈࡋఆऔҾγεςϜΛ։ൃɾ τϨʔυͨ݁͠ՌRJJUB w IUUQTOPUFNVIBTIUBH#05 w ͳͲͳͲ

  15. ҉߸ٕज़

  16. ҉߸ٕज़ w ڞ௨ݤ҉߸ w ެ։ݤ҉߸ w ҉߸తϋογϡؔ਺ w ిࢠॺ໊ w

    ཚ਺ʢͭ͡͸Ԟ͕;͔͍ʣ
  17. Φεεϝͷຊ w ҉߸ٕज़ೖ໳ୈ൛ൿີͷࠃͷΞϦε IUUQTBN[OUP,"W,)& w Ϛοϋ৽ॻ҉߸ٕज़Λ׬શʹཧղͨ͠ؾʹͳ ΕΔຊ IUUQTULSBCCJUIPVTFCPPUIQNJUFNT

  18. ほんとは怖い 暗号技術独⾃実装

  19. ͳͷͰ/PEFKT$SZQUP"1* w ϋογϡؔ਺ w ڞ௨ݤ҉߸ w Ұ෦ެ։ݤ҉߸ const crypto =

    require('crypto') // Crypto APIͰϋογϡؔ਺Λ࡞੒͢Δ const createHash = algorithm => buf => { assert(buf instanceof Buffer) const hash = crypto.createHash(algorithm) hash.write(buf) return hash.digest() } const sha256 = createHash('sha256')
  20. ϥΠϒϥϦʢόΠϯσΟϯάʣ w PQFOTTM IUUQTHJUIVCDPNNHDSFBOPEFPQFOTTMXSBQQFS w #JUDPJO$PSFͰ࢖ΘΕͯΔϥΠϒϥϦ IUUQTHJUIVCDPNDSZQUPDPJOKTTFDQLOPEF

  21. const {randomBytes} = require('crypto') const secp256k1 = require('secp256k1') /** *

    ପԁۂઢެ։伴҉߸ͷൿີ伴Λ࡞੒͢Δ * @returns {Buffer} ൿີ伴 */ const generatePrivateKey = () => { for (;;) { const privateKey = randomBytes(32) if (secp256k1.privateKeyVerify(privateKey)) { return privateKey } } } /** * ପԁۂઢެ։伴҉߸ͷެ։伴Λ࡞੒͢Δ * @param {Buffer} privateKey ൿີ伴 * @returns {Buffer} ެ։伴 */ const generatePublicKey = privateKey => { return secp256k1.publicKeyCreate(privateKey) }
  22. ϒϩοΫνΣʔϯͷσʔλߏ ଄

  23. σʔλߏ଄ w σʔλຊମʢϒϩϒʣ w ϒϩϒͷϋογϡ஋ʢϙΠϯλʣ ͋ΕʁͲ͔͜Ͱݟͨ͜ͱ͕͋Δͳʁ

  24. commit deadbeaf00... prev deadbeaf00... commit 01234567ab... prev 01234567ab... commit 2233445566...

    prev 01234567ab... commit 7766554433... SHA-1 hash tree src/ 13579bdf.... tree src/ 02468ace.... blob hoge.js 0000000.... blob hoge.js 1111111.... ΄͔ʹ΋
  25. #JUDPJOͷ৔߹ w ίΠϯͷૹ৴τϥϯβΫγϣϯ͚ͩΛԆʑஷ Ί͍ͯ͘ϥΠτΦϯϦʔͷσʔλߏ଄ w HJUͱҧͬͯྺ࢙͸Ұͭʹऩଋ͢Δ ঢ়گʹΑͬͯ͸SFPSH͕ൃੜͯ͠ɺྺ࢙͕վ ͟Μ͞ΕΔ͜ͱ͕ʜ

  26. ෼ࢄ߹ҙٕज़ͨͷ͍͠

  27. طଘͷฏ࿨ͳ෼ࢄ߹ҙ w QIBTFDPNNJU ࢖ͬͪΌ͍͚ͳ͍΍ͭ  w 1BYPT w 3BGU ͳͲͳͲ෼ࢄ%#Ͱ࢖ΘΕΔΑ͏ͳ΍ͭ

  28. ࡶʹɺ1BYPTͱ͔3BGUͱ͔ w օ͕σʔλΛߋ৽͢ΔͱͰͨΒΊʹͳΔͷͰɺϦʔμʔ Λબग़͢Δ w ϦʔμʔͷΈ͕ߋ৽ϦΫΤετΛͱΓ·ͱΊͯɺߋ৽৘ ใΛൃߦ͢Δ w ߋ৽৘ใʹैͬͯɺݸʑͷϊʔυͷσʔλΛΞοϓσʔ τ͢ΔʢεςʔτϚγϯϨϓϦέʔγϣϯʣ

    w !LVNBHJ͞Μͷهࣄͱ͔εϥΠυͱ͔ݟΔͱษڧʹͳΔ
  29. None
  30. ϒϩοΫνΣʔϯͰͷ෼ࢄ߹ҙ 1P81SPPGPG8PSL w φΧϞτατγ͕ൃ໌ͨ͜͠ͱͰ11ͷ׬શ෼ࢄܕ҉߸௨ ՟͕࢝Ί࣮ͯ༻ԽͰ͖ͨ w ਓؒͷཉ๬ʹཱ٭ͨ͠ήʔϜཧ࿦ͱ֬཰࿦ʹΑΔ෼ࢄ߹ҙ w શੈքͷϋογϡܭࢉྗͰʢ͓͓Αͦʣ෼͔͔Δ૯౰ͨ ΓܭࢉΛ੒ޭͤ͞Δӡήʔ

    #JUDPJOͷτϥϯβΫγϣϯ͕ ঝೝ͞ΕΔͷΫι஗͍ʂʂʂ
  31. ϚΠχϯά੒ޭ֬཰ ճ໨ ࢀߟճ ϚΠχϯά੒ޭ֬཰ ճ࿈ଓ ϚΠχϯά੒ޭ֬཰ ճ࿈ଓ ϚΠχϯά੒ޭ֬཰ ճ࿈ଓ PSQIBOFE

    CMPDL ฏۉ෼ ฏۉ෼ ฏۉ෼ ฏۉ෼ ฏۉ෼
  32. ͦ͜Ͱʂ औҾߴ଎Խͷҝʹ޻෉͢ΔϞφ w ϒϩοΫੜ੒Λ෼͔ΒඵʹॖΊͯऔҾߴ ଎Խ͢ΔϞφ w ϒϩοΫ೉қ౓ͷઃఆΛϒϩοΫ͔Βϒ ϩοΫʹมߋͯ͠ྑ͍ײ͡ʹ͢ΔϞφ

  33. " # औҾॴʹ ίΠϯചΓ·͢ ചͬͯ໯͔ͬͨΒ ઍສԁࢧ෷͏Αʂ " Ӆ͠ޱ࠲ʹ ίΠϯૹΓ·͢ ྺ࢙͕վ͟Μ͞Εͯ

    ઍສԁࣦͬͨʜʜ " " $ $ #
  34. ·ͱΊ

  35. ·ͱΊ w CPUΛͭ͘Δͷͨͷ͍͠ w ҉߸ٕज़ͨͷ͍͠ w ϒϩοΫνΣʔϯͷσʔλߏ଄ͨͷ͍͠ w ෼ࢄ߹ҙͨͷ͍͠ w

    ϒϩοΫνΣʔϯϓϩάϥϛϯά͸+4ͰͰ͖Δʂ IUUQTULSBCCJUIPVTFCPPUIQNJUFNT
  36. +BWB4DSJQUͨʔͷ͠ʔʂ ϒϩοΫνΣʔϯ ͨʔͷ͠ʔʂ