Placeholder Image

字幕表 動画を再生する

  • What does it mean to *have* a Bitcoin?

    ビットコインを「持つ」とはどういうことか?

  • Many people have heard of Bitcoin that

    多くの人がビットコインのことを、

  • it's a fully digital currency with no government to issue it;

    政府が発行しないデジタル通貨で、

  • and that no banks need to manage accounts and verify transactions;

    銀行も一切関与しないものだと理解している。

  • and also that no one really knows who invented it.

    加えて誰も考案者の正体を知らない。

  • And yet, many people don't know the answer to this question, at least not in full.

    この疑問に対する、完璧な答えを知っている人は多くない。

  • To get there,

    完璧な答えとその根底にある技術的な要素を実感してもらうために、

  • and to make sure that the technical details underlying the answer actually feel motivated,

    着実に順序立てて説明するので、

  • what we're going to do is walk through step by step

    ビットコインの変種を自分で作れるレベルにまで頑張って理解してほしい。

  • how you might have invented your own version of Bitcoin.

    元帳を使って友達との支払いの様子を記録することから始まり、

  • We'll start with you keeping track of payments with your friends using a communal ledger.

    次第に友達を含めた周囲すべてを信じなくなり、

  • And then, as you start to trust your friends and the world around you less and less,

    暗号論に準じた解決策をシステムに付け加えることで、

  • and if you're clever enough to bring in a few ideas from cryptography

    性善説に頼る必要性を減らし、

  • to help circumvent the need for trust,

    最終的に暗号通貨と呼ばれるものになる。

  • what you end up with is what's called a "cryptocurrency".

    承知の通り、ビットコインは最初に運用が始まった暗号通貨であり、

  • You see, Bitcoin is just the first implemented example of a cryptocurrency.

    現在では政府発行の一般的通貨よりも多くの変種が生まれている。

  • And now, there are thousands more on exchanges with traditional currencies.

    変種を自分で作成することは、仮想的取引の上で

  • Walking the path of inventing your own can help to set the foundations

    相手が試みようとする事の認識と、どの部分で

  • for understanding some of the more recent players in the game

    なぜ変種が生まれるのかについて見解を見出すことに繋がる。

  • and recognizing when and why there's room for different design choices.

    なぜこのトピックを選んだのかの理由の一つは、

  • In fact, one of the reasons I chose this topic is that

    去年(2016年)ものすごい多くの関心を集め、取引がなされており、

  • in the last year, there's been a huge amount of attention and investment

    暗号通貨に個人的に興奮したからである。

  • and, well, honestly hype directed at these currencies.

    現在や未来の為替レートについて、計算したり議論するつもりはない。

  • And I'm not going to comment or speculate on the current or future exchange rates,

    しかし暗号通貨を購入しようと

  • but I think we'd all agree that

    考えている人が、その実態を正しく理解するのは当然であろう。

  • anyone looking to buy a cryptocurrency should really know what it is.

    これは別に実際の貴金属採掘と関連があるアナログ的なことではなく、

  • And I don't just mean in terms of analogies with vague connections to gold mining,

    暗号通貨の転送時に、コンピュータが一体何をしているかの

  • I mean an actual direct description of what the computers are doing

    明瞭で的を射た説明である。

  • when we send, receive and create cryptocurrencies.

    ここで強調しておきたいのは、

  • One thing worth stressing, by the way, is that

    この動画で暗号通貨の深い領域まで探る事は、

  • even though you and I are going to dig into the details here,

    有意義な時間とはなるが、

  • and that takes meaningful time,

    ただ暗号通貨を運用したいだけなら、詳細を知る必要はない点である。

  • you don't actually need to know those details if you just want to use the cryptocurrency,

    クレジットカードを使う際にも、裏で一体何が行われているのか知る必要はないのと同じである。

  • just like you don't need to know the details of what happens under the hood when you swipe a credit card.

    デジタル的な支払いにおいて、ユーザーフレンドリーなものは多くあり、

  • Like any digital payment, there're lots of user-friendly applications that

    取引の最中に何が行われるのかを、全く考えずに通貨を扱える。

  • let you just send and receive the currencies without thinking about what's going on.

    両者の違いは、後ろで支えているのが、

  • The difference is that the backbone underlying this

    銀行か、そうではないかの点である

  • is not a bank that verifies transactions.

    銀行の代わりに、暗号論上で生み出された数学をベースに、

  • Instead, it's a clever system of decentralized trust-less verification

    非中央集権化された認証に信用不要の賢いシステムがある。

  • based on some of the math born in cryptography.

    実際に暗号通貨の説明に入る前に、数分ほど別の事柄に時間を割く。

  • But to start,

    これから始めるのは、より現実味がある話、元帳とデジタル署名である。

  • I want you to actually set aside the thought of cryptocurrencies and all that just for a few minutes.

    もし夕食の勘定などにおいて、

  • We're going to begin the story with something more down-to-earth: ledgers and digital signatures.

    友達と頻繁に金銭を交換する場合、

  • If you and your friends exchange money pretty frequently,

    貨幣をその都度交換するのは不便である。

  • you know, paying your share of the dinner bill and such,

    すると元帳という方式が生まれる。

  • it can be inconvenient to exchange cash all the time.

    これによって、その後行われる支払いのすべてを記録する。

  • So you might keep a communal ledger

    例えば、アリスはボブに20ドル支払う、

  • that records all of the payments that you intend to make some point in the future.

    ボブはチャーリーに40ドル支払う、のように。

  • You know, Alice pays Bob $20,

    この元帳は公開されており、ウェブページのように誰でも参照できる。

  • Bob pays Charlie $40, things like that.

    更に誰でも新たな取引記録を追加できる。

  • This ledger is going to be something public and accessible to everyone,

    月末になると皆が集まり、

  • like a website, where anyone can go and just add newlines.

    リストを見て実際に支払いを行う。

  • And let's say that at the end of every month,

    もし受け取った額よりも多くの額を支払ったのなら、ポットに金を置く。

  • you all go together, look at the list of transactions and settle up.

    もし支払いよりも多くの受取額があるなら、ポットからその分を取る。

  • If you spent more than you received, you put that money in the pot;

    この単純明快なプロトコルの叙述は次のようになる。

  • and if you received more than you spent, you take that money out.

    誰でも取引記録を元帳に追加できる。

  • So the protocol for being part of this very simple system might look like this:

    月末に最終的な差し引きを現金で交換する。

  • anyone can add lines to the ledger;

    このような元帳に関わる一つの問題として、誰もが取引記録を追加できることから、

  • and at the end of every month you all get together and settle up.

    アリスの了承を得ないまま、「アリスはボブに100ドル支払う」という記録を追加できることである。

  • Now, one problem with a public ledger like this is that anyone can add a line,

    元帳にある全ての記録が、送金者の意図があって

  • so what's to prevent Bob from going in writing "Alice pays Bob $100" without Alice approving?

    行われたものだと信頼するのは難しい。

  • How are we supposed to trust that all of these transactions

    ここで最初の暗号論的要素が入る、デジタル署名である。

  • are what the sender meant them to be?

    手で書く署名と同じく、

  • Well, this is where the first bit of cryptography comes in: digital signatures.

    アリスは取引記録の横に何か付随するものを加える。

  • Like handwritten signatures,

    これによりアリスの意図を持って行われたことを証明する。

  • the idea here is that Alice should be able to add something next to that transaction

    当然、誰もその署名を真似出来ないようにしなければらない。

  • that proves that she has seen it and that she's approved of it.

    するとデジタル署名というのは実現不可能のように思える。

  • And it should be infeasible for anyone else to forge that signature.

    どんなに署名が複雑でも、コンピュータがコピーしてしまえばおしまいである。

  • At first, it might seem like a digital signature shouldn't even be possible.

    どうすればこれを防げるか。

  • I mean, whatever data makes up that signature can just be read and copied by a computer,

    そのためには「公開鍵秘密鍵ペア」を全員が作成することで解決する。

  • so how do you prevent forgeries?

    各々の鍵はビットの塊のようなものである。

  • Well, the way this works is that everyone generates what's called a "public key - private key pair",

    「秘密鍵」は「私有鍵」とも呼ばれる。

  • each of which looks like some string of bits.

    秘密鍵(Secret Key)は「sk」と略し、公開鍵(Public Key)は「pk」と略す。

  • The "private key" is sometimes also called a "secret key",

    名前が指し示す通り、秘密鍵は本人しか知り得ないものである。

  • so that we can abbreviate it as "sk", while abbreviating the public key is "pk".

    現実世界において、手書きの署名は時と場所にかかわらず、ほぼ同じ形になるが、

  • Now as the name suggests, this secret key is something you want to keep to yourself.

    デジタル署名はより強力で、

  • In the real world, your handwritten signature looks the same no matter what document you're signing.

    記録ごとに違うものになる。

  • But a digital signature is actually much stronger,

    署名は0と1の連続であり、大体256ビットである。

  • because it changes for different messages.

    署名する記録が少しでも異なれば、

  • It looks like some string of ones and zeros, commonly something like 256 bits;

    その署名は全く異なるものになる。

  • and altering the message even slightly

    より正確に言えば、

  • completely changes what the signature on that message should look like.

    署名の生成には記録と秘密鍵を引数とする関数を用い、

  • Speaking a little more formally,

    この秘密鍵が署名の発行が本人のものであると保証する。

  • producing a signature involves a function that depends both on the message itself and on your private key.

    また、署名が記録に依存することは、

  • The private key ensures that only you can produce that signature,

    他の記録にある署名を単純にコピーすることはできないことを意味する。

  • and the fact that it depends on the message

    二つ目の関数は、これと対になるもので、署名の認証を行う。

  • means that no one can just copy one of your signatures and then forge it on another message.

    ここで公開鍵が威力を発揮する。

  • Hand-in-hand with this is a second function used to verify that a signature is valid.

    戻り値は「真」か「偽」で、

  • And this is where the public key comes into play.

    署名が認証に使用した公開鍵に対応する

  • All it does is output "true" or "false"

    秘密鍵で生成されたかどうかを示す。

  • to indicate if this was a signature produced by the private key

    この二つの関数がどのように動作するかの詳細は説明しないが、

  • associated with the public key that you're using for verification.

    秘密鍵がなければ正当な署名を生成するのが事実上不可能というアイデアは、

  • I won't go into the details of how exactly both these functions work,

    理解していただけると思う。

  • but the idea is that it should be completely infeasible to find a valid signature

    つまり署名を偽造するのに、適当に署名を作り出し、すでに知っている公開鍵を使って、

  • if you don't know the secret key.

    正当性をチェックする以外の方法はない。

  • Specifically, there's no strategy better than just guessing and checking random signatures,

    さて256ビット長の署名が取りうる値の大きさはどれ位か。

  • which you can check using the public key that everyone knows.

    それは2の256乗である。

  • Now think about how many signatures there are with a length of 256 bits,

    これはとてつもなく大きな数で、

  • that's 2^256.

    天文学的数字と呼んでもまだ真の大きさを表していない程である。

  • This is a stupidly large number.

    これに関して、その大きさを表現する補足動画を作成したので、そちらを参照してほしい。

  • To call it astronomically large would be giving way too much credit to astronomy.

    ここでは、受け取った記録と

  • In fact, I made a supplemental video devoted just to illustrating what a huge number this is.

    その署名が正当であると保証されたとき、

  • Right here, let's just say that

    その生成に対応する秘密鍵が使われたことを、全く疑いなく

  • when you verified that a signature against a given message is valid,

    信用することが出来るとだけに留めておく。

  • you can feel extremely confident that the only way someone could have produced it

    皆がこのルールに従って元帳に記録する時、

  • is if they knew the secret key associated with the public key you used for verification.

    一つ問題点がある。

  • Now making sure that people sign transactions on the ledger is pretty good,

    アリスが「アリスはボブに100ドル支払う」という記録を付けたとき、

  • but there's one slight loophole:

    新たな記録にボブは署名を加える事はできないが、

  • if Alice signs a transaction, like "Alice pays Bob $100",

    その記録自体を何回もコピーすることはできる。

  • even though Bob can't forge Alice's signature on a new message,

    記録と署名はすでに認証されている。

  • he could just copy that same line as many times as he wants.

    これを防ぐため、記録を付ける度に、

  • I mean, that message-signature combination remains valid.

    各々特別な符号を作り、その符号を記録に含めることにする。

  • To get around this, what we do is make it so that when you sign a transaction,

    これにより、もし実際にアリスがボブに複数回100ドル支払ったとき、

  • the message has to also include some sort of unique ID associated with that transaction.

    各々の記録につく署名は完全に異なるものになる。

  • That way, if Alice pays Bob $100 multiple times,

    素晴らしい。

  • each one of those lines on the ledger requires a completely new signature.

    デジタル署名は、元々のプロトコルにある性善説の考え方を取り除く。

  • All right, great!

    しかし、実際にこの方式を運用すると、

  • Digital signatures remove a huge aspect of trust in this initial protocol,

    まだ人々の信頼に頼っていることに気づく。

  • but even still, if you were to really do this,

    つまり皆が元帳に記録に従って、

  • you would be relying on an honor system of sorts.

    月末に現金の交換をすることを信じている。

  • Namely, you're trusting that everyone will actually follow through

    例えばチャーリーが多額の借金を溜め込んだとして、

  • and settle up in cash at the end of each month.

    そのまま逃げたらどうだろう。

  • What if, for example, Charlie racks up thousands of dollars in debt

    月末の現金のやり取りが破綻する決定的な理由は、

  • and just refuses to show up.

    (チャーリーのような)ある人が負債を負った場合である。

  • The only real reason to revert back to cash to settle up

    保有する金銭よりも多くの額を使わせないように、

  • is if some people (I'm looking at you, Charlie) owe a lot of money.

    そして現金のやり取りをする必要性をなくすために、

  • So maybe, you have the clever idea that you never actually have to settle up in cash,

    皆が始めからポットに100ドルを入れるとする。

  • as long as you have some way to prevent people from spending too much more than they take in.

    元帳にその事をまず記録する。

  • Maybe what you do is start by having everyone pay $100 into the pot,

    「アリスは100ドルを得る」、「ボブは100ドルを得る」、「チャーリーは100ドルを得る」のように。

  • and then have the first few lines of the ledger read

    ここで各々が元帳において保持している額を超えるような

  • "Alice gets $100", "Bob gets $100", "Charlie gets $100", etc.

    金額を指定する取引は受け入れないこととする。

  • Now, just don't accept any transactions

    例えば、最初の二つの取引が、

  • where someone is spending more than they already have on that ledger.

    「チャーリーはアリスに50ドル支払う」、「チャーリーはボブに50ドル支払う」の時、

  • For example, if the first two transactions are

    更に「チャーリーはあなたに20ドル支払う」と付け足すことはできない。

  • "Charlie pays Alice $50" and "Charlie pays Bob $50",

    署名がないのと同様の扱いである。

  • if he were to try to add "Charlie pays you $20", that would be invalid,

    結果的に取引の認証には、

  • as invalid as if he had never signed it.

    関連する以前の取引すべての情報が必要となる。

  • Notice, this means that verifying a transaction

    この事は暗号通貨においても、若干適応される。

  • requires knowing the full history of transactions up to that point.

    最適化の余地はまだあるが。

  • And this is more or less also going to be true in cryptocurrencies,

    興味深いのは、

  • though there is a little room for optimization.

    これによって元帳と物理的な米ドルとの関係が消えたことである。

  • What's interesting here is that

    理論的には、世界の全員がこの元帳に従えば、

  • this step removes the connection between the ledger and actual physical US Dollars.

    実際の米ドルに両替することなく、

  • In theory, if everyone in the world was using this ledger,

    元帳の上での取引だけで人生を過ごすことができる。

  • you could live your whole life just sending and receiving money on this ledger

    この事実をより明確に強調するため、

  • without ever having to convert to real US Dollars.

    元帳での額の量を元帳ドル(LD)としよう。

  • In fact, to emphasize this point,

    もちろん元帳ドルと米ドルの両替は自由である。

  • let's start referring to the quantities on the ledger as "ledger dollars", or "LD" for short.

    例えば、アリスがボブに10ドルを現実世界で渡し、

  • You are, of course, free to exchange ledger dollars for real US Dollars.

    その対価として、「ボブはアリスに10元帳ドル支払う」を、

  • For example, maybe Alice gives Bob a $10 bill in the real world

    ボブは元帳に署名付きで追加する。

  • in exchange for him adding and signing the transaction

    しかしこの様な両替はプロトコルによって保証されていない。

  • "Bob pays Alice 10 LD" to this communal ledger.

    米ドルをユーロに替えたりするのと同じく、

  • But exchanges like that, they're not going to be guaranteed by the protocol.

    アナログ的である。

  • It's now more analogous to how you might exchange dollars for Euros,

    これは別の領域の問題である。

  • or any other currency on the open market,

    ビットコインや、その他暗号通貨に関して最初に理解する必要がある事は、

  • it's just its own independent thing.

    その実態は元帳であり、取引の歴史自体が通貨である事である。

  • This is the first important thing to understand about Bitcoin or any other cryptocurrency:

    ビットコインの仕組みの中では、

  • what it is is a ledger, the history of transactions is the currency.

    当然の事ながら、現実の貨幣が元帳と一切関わっておらず、

  • Of course, with Bitcoin,

    暗号通貨のみで完結している。

  • money doesn't enter the ledger with people buying in using cash.

    その説明に入る前に、元帳ドルと暗号通貨の間には

  • I'll get to how new money enters the ledger in just a few minutes,

    大きな違いがあることを示しておく。

  • but before that, there's actually an even more significant difference

    先程、この元帳はウェブページのように公開されており、

  • between our current system of ledger dollars and how cryptocurrencies work.

    誰でも記録を追加できると説明した。

  • So far, I've said that this ledger is in some public place,

    しかしこれでは信頼できる中心機関が必要となる。

  • like a website, where anyone can add newlines.

    問題は「誰が保管するのか?」

  • But that would require trusting a central location,

    「誰が記録のルールを管理するのか?」である。

  • namely "who hosts the website?",

    信頼の必要性を消すため、皆が元帳のコピーを持つこととする。

  • "who controls the rules of adding new lines?".

    これでアリスがボブに100元帳ドル支払うなどの取引を追加したら、

  • To remove that bit of trust, we'll have everybody keep their own copy of the ledger.

    そのことを世界全体に伝えて、

  • Then when you want to make a transaction, like Alice pays Bob 100 LD,

    人々が各々の持つ元帳を更新できるようにする。

  • what you do is broadcast that out into the world

    しかしこれでは、システム全体が簡単に崩壊する。

  • for people to hear and to record on their own private ledgers.

    今現在正しい元帳がどれかを確かめるすべがない。

  • But, unless you do something more, this system is absurdly bad.

    ボブが、アリスがボブに10元帳ドル支払うなどの取引記録を受け取ったとき、

  • How could you get everyone to agree on what the right ledger is?

    ボブ以外の全員が同じ記録を受け取ったかどうか確かめられない。

  • When Bob receives a transaction, like Alice pays Bob 10 LD,

    これではその10元帳ドルを使ってチャーリーと取引することも難しい。

  • how can he be sure that everyone else received and believes that same transaction

    ただ取引記録を聞くだけの立場にいると想像してほしい。

  • that he'll be able to later on go to Charlie and use those same 10 LD to make a transaction?

    自分以外の全員が全く同じ順序で全く同じ取引を記録しているか確信できない。

  • Really, imagine yourself just listening to transactions being broadcast,

    これは深刻な問題で、

  • how can you be sure that everyone else is recording the same transactions and in the same order?

    解決しがいがある。

  • This is really the heart of the issue.

    取引の認証と拒否をしながらも、同じプロトコルの使用者全員が、

  • This is an interesting puzzle.

    常に同様の元帳のコピーを持っていることを、

  • Can you come up with a protocol for how to accept or reject transactions

    保証してくれるようなプロトコルの設計を、

  • and in what order so that you can feel confident that

    どの様にすれば出来るだろうか。

  • anyone else in the world who's following that same protocol

    これは最初のビットコインの提案書で肝心となっていた点である。

  • has a personal ledger that looks the same as yours?

    ビットコインが提供する精錬された解決方法は、

  • This is the problem addressed in the original Bitcoin paper.

    最も計算量の多いワークが含まれている元帳を信用するというものである。

  • At a high level, the solution that Bitcoin offers is

    これが何を意味するかの説明には少し時間がいる。

  • to trust whichever ledger has the most computational work put into it.

    まず「暗号論的ハッシュ関数」の知識が必要になる。

  • I'll take a moment to explain exactly what that means,

    このアイデアの目的は、

  • it involves this thing called a "cryptographic hash function".

    信頼性の確認するため、計算量の多いワークを使うことで、

  • The general idea that we'll build to

    不正な取引や元帳の競合を起こさせるのを、

  • is that if you use computational work as a basis for what to trust,

    極めて困難にすることである。

  • you can make it so that fraudulent transactions and conflicting ledgers

    しつこいようだが、ただ暗号通貨を使う分には、

  • would require an infeasible amount of computation to bring about.

    全く理解する必要のない仕組みである。

  • Again, I'll remind you that this is getting well into the weeds

    ただこのアイデアは面白い。

  • beyond what anyone would need to know just to use a currency like this,

    理解できれば、ビットコインやその他すべての暗号通貨の根幹を理解できたことになる。

  • but it's a really cool idea!

    まず始めに、ハッシュ関数とは何か。

  • And if you understand it, you understand the heart of Bitcoin and all other cryptocurrencies.

    関数の入力は如何なる値も取る事ができる。

  • So first things first, what's a hash function?

    そこに問題はない。

  • The inputs for one of these functions can be any kind of message or file,

    出力は256ビットのような一定の長さを持つビット列である。

  • it really doesn't matter.

    この出力結果を「ハッシュ」または記録の「要約値」と呼ぶ。

  • And the output is a string of bits with some kind of fixed length, like 256 bits.

    出力はランダムに見える。

  • This output is called the "hash" or the "digest" of the message.

    実際にはランダムではなく、同じ入力に対して常に同じ出力を返す。

  • And the intent is that it looks random.

    重要なのは、

  • It's not random - it always gives the same output for a given input.

    入力をほんの少しだけでも変えたときには、

  • But the idea is that

    出力が全く別物になることである。

  • if you slightly change the input, maybe editing just one of the characters,

    いま紹介しているのはSHA256というハッシュ関数である。

  • the resulting hash changes completely.

    入力の違いによる出力の相違点は完全に予測不能である。

  • In fact, for the hash function that I'm showing here, called SHA256,

    これはハッシュ関数の特徴ではなく、

  • the way the output changes as you slightly change that input is entirely unpredictable.

    暗号論的ハッシュ関数の特徴である。

  • You see, this is not just any hash function,

    つまり、逆の計算をコンピュータがするのが不可能という意味である。

  • it's a cryptographic hash function.

    もし適当なゼロとイチの列を見せられて、

  • That means it's infeasible to compute in the reverse direction.

    SHA256で計算すると、

  • If I show you some string of ones and zeros,

    出力がその列と完全に一致するような、入力を特定しろと言われたとき、

  • and ask you to find an input

    ただ予想して確認するのを繰り返す以外の解き方はない。

  • so that the SHA256 hash of that input gives this exact string of bits,

    先に述べた通り、2の256乗分の1の確率というのが一体どれくらい想像を絶する物なのかは、

  • you will have no better method than to just guess and check.

    補足動画で確認してほしい。

  • And again, if you want to feel for how much computation would be needed to go through 2^256 guesses,

    とても楽しい動画に仕上がっている。

  • just take a look at the supplement video.

    更に深い領域に進んで、この関数の中身を正確無比に完全理解すれば、

  • I actually had way too much fun writing that thing.

    予想と確認を繰り返さずに、出力を得る方法が見つかるかもしれない。

  • You might think that if you just really dig into the details of how exactly this function works,

    しかし誰も達成できていない。

  • you could reverse engineer the appropriate input without having to guess and check.

    面白いのは、逆の計算が非常に難しいという事を厳密には証明できていないという点である。

  • But no one has ever figured out a way to do that.

    しかし現代のセキュリティは、

  • Interestingly, there's no cold hard rigorous proof that it's hard to compute in the reverse direction.

    暗号論的ハッシュ関数の特性に深く依存している。

  • And yet, a huge amount of modern security

    銀行のサイトにアクセスしているときや、

  • depends on cryptographic hash functions and the idea that they have this property.

    今YouTubeとブラウザの間で行われているセキュア通信の

  • If you were to look at what algorithms underlie the secure connection

    中身を探れば、