---
title: 3.3 セキュリティー
description: ブロックチェーンのソースコードは、Githubなどで公開されている。 つまり、セ…
url: "https://hashpeak.com/docs/3-3-%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e3%83%bc/"
updated: "2022-01-08"
category: 第3章：ブロックチェーンの5つの意味.
tags:
  - ブロックチェーン
---

# 3.3 セキュリティー

ブロックチェーンのソースコードは、Githubなどで公開されている。

つまり、セキュリティの仕組みを誰もが見ることができる。

しかしながら、ビットコインのネットワークは世界中のハッカーがアタックしてもこれまで破られたことはない。

ブロックチェーンは、Security by Design つまり、根本的に設計レベルでセキュリティが担保されている。ブロックチェーンの凄みはここにある。

ブロックチェーンは、暗号技術が巧妙に使用されている。

使用されている暗号技術のひとつがハッシュ関数という技術である。ハッシュとは英語のHashであり、その意味は「細切れにする」という意味である。ハッシュポテトのハッシュと同じだ。

ハッシュ関数にある値を入力すると、その入力値を細かくバラバラにして、意味をなさない英数字の羅列に変換し出力する。この出力された値をハッシュ値と呼ぶ。

ハッシュ関数にもいろいろな種類があるが、いまブロックチェーンで主に使われているハッシュ関数はSHA-256と呼ばれるものである。SHAとは、Secure Hash Algorithmの略である。

この関数を使うと、どのような値を関数に入力しても、どんな長さの文字列を入力しても、必ず64桁の英数字の羅列をハッシュ値として出力する。

ハッシュ関数を実際に使ってみたい人は[*こちら*](https://passwordsgenerator.net/sha256-hash-generator/)のリンクで試してみると良い。

この関数の特徴は、入力値からハッシュ値を得ることは極めて簡単だが、出力されたハッシュ値から入力値に戻したり推定したりすることは基本的に不可能ということである。

この性質からハッシュ関数は、一方向関数と呼ばれる。

特にこのSHA-256という関数は、256ビットの数字であるので、2^256≒1.158x10^77の出力値の組み合わせが存在する。つまり、ハッシュ値から入力値を見つけようとしてもと、統計的には78桁の数字のなかから１つの数字を当てる確率でしか見つからない。

ちなみに、一、十、百、千、万、億、兆と位をあげていった時の最後の単位が無量大数であるが、この桁数は68桁。また、宇宙にある原子の数が10の80乗個（81桁）である。

SHA-256の出力値は、無量大数をさらに10の10乗回（＝100億回）繰り返した数である。78桁の数字がどれだけ途方もない規模であるかわかるだろう。

現在の最高性能のスパコンでハッシュ値から入力値の推定をしようとしても非現実的な規模の計算となる。

ブロックチェーンは、現在のブロックの取引情報とその前のブロックが生成したハッシュ値を改めてハッシュ関数にかけて、次のブロックチェーンに引き継ぎながら、ブロックを数珠つなぎにしたものである。

ハッシュ関数をH()、ブロックナンバーnのハッシュ値をhn、ブロックナンバーnに含まれる情報をxnとすると数式では次のようになる。

H(h~n,x~n)=h~n+1

n=1のブロックは、ジェネシスブロックと言って最初のブロックになる。

このような仕組みにより、ブロックチェーンに書き込まれた取引情報を改ざんし、あたかも何もなかったかのように成り済ますことは極限的に難しい。
