目次

    全ての目次を見る
  1. 【概要】SHA-256とは
  2. 【予備知識】①ハッシュ関数
  3. 【予備知識】②SHA-2
  4. 【仕組み】SHA-256アルゴリズム
  5. 【問題点】ハッシュ衝突,量子コンピューターによる危機
  6. SHA-256とASICマイニング
  7. 【比較】他の仮想通貨で使われているアルゴリズム
  8. 【まとめ】SHA-256
Large sha 256

ビットコインに関する文脈で、SHA-256(シャニゴロ)という言葉を耳にする機会は少なくないでしょう。

特に、「ビットコインのマイニング」を調べていて、SHA-256について調べ始めた方は多いのではないでしょうか。

本記事では、
SHA-256の概要や、仕組み
SHA-256の懸念点や問題点
ビットコイン以外の通貨に使用されているハッシュアルゴリズム

をわかりやすくご説明いたします。

SHA-256とは、Secure Hash Algorithm 256-bitの略称であり、SHA-2に分類されるハッシュ関数の一つです。

ハッシュ関数については、後述しますが、簡単にいうと「入力した値から、固定の長さの、全く異なる値を得る関数」を指します。

名前の通り、SHA-256は、256bit(32バイト)長のハッシュ値を生成する関数です。

また、32バイトは文字数で表すと64文字です。

SHA-256はビットコインのブロックチェーンだけでなく、SSL/TLS証明書などの「通信の暗号化」や「Webサイトの認証」にも使われています。

ビットコインとSHA-256

ビットコインにおいて、ハッシュ関数であるSHA-256は、「マイニングプロセスにおけるブロックの生成」や「アドレスの生成」に関わります。

マイニングにおいて、どのようにSHA-256が関わるかを少し見てみましょう。

ビットコインにおける、マイニングとは、ブロックデータのハッシュ値が一定以下の数値を示すようなナンスを見つけるための膨大な計算作業を指します。

ナンスとは、ブロックを新規生成する際に必要な数値です。

つまり、「ブロック全体をハッシュ化した値」と「ナンス」をハッシュ関数である「SHA-256」でハッシュ化し、一定の数値以下になった場合にマイニング成功となります。

ナンスを求める計算競争(マイニング)

ハッシュ関数は、1文字でも異なると、全く異なるハッシュ値を返す性質をもっており、一定の数値以下に変化させることができるナンスを求めるには、膨大な計算が必要なのです。

ビットコインのマイニングについて詳しく知りたい方は、以下の記事をご覧ください。

ハッシュ関数とは、あるデータが与えられた時にそのデータに対する数値を得る関数です。

また、その時に得られた数値はハッシュ値、または単にハッシュと呼ばれます。

ハッシュ関数の特徴としては、以下の3つが挙げられます。

  1. 不可逆性(原像計算困難性)
  2. 弱衝突耐性(第2原像計算困難性)
  3. 強衝突耐性(衝突耐性)

それぞれ具体例も提示しながら、詳しくご説明いたします。

【不可逆性】ハッシュ関数

不可逆性とは、「元の状態に戻すことができない」性質です。

ハッシュ関数では、生成されたハッシュ値からはもとのデータに戻すことは極めて困難であるとされています。

では、SHA-256を使用した場合、どのようなハッシュ値が得られるのでしょうか。

実際に、「ビットコイン」という文字列を入力して、ハッシュ値を出してみましょう。

すると、以下の様なデータが得られました。


ビットコイン
B89AE3280372363341C1ACEF577B58D 1E5B7DF65A3775C7C8F1788AEF9A04B66


ご覧の通り、生成されたハッシュ値は、元のデータを連想しうる文字列ではなく、ハッシュ値から元データを割り出すことは、極めて困難なのです。

こちらのツール を使用すると、自分で入力した文字列を簡単にハッシュ化できるので、一度実際に試されてみることをおすすめします。

弱衝突耐性とは、ある元のデータと同じハッシュ値をもつ、別の元データを見つけることが困難であることを指します。

例えば、「ビットコイン」という元データと、そのハッシュ値「B89AE3280372363341C1ACEF577B58D 1E5B7DF65A3775C7C8F1788AEF9A04B66 」がある時、同じハッシュ値に至る値「X」が見つかりづらいのです。

強衝突耐性とは、同じハッシュ値になる2つの元データを求めることが困難な性質です。

単に、衝突耐性と呼ばれることもあります。

弱衝突耐性が「与えられたあるデータ」と同じハッシュ値をもつ元データを求めることが困難な性質であるのに対し、強衝突耐性は、同じハッシュ値をもつ2つの元データを求めることが困難な性質を指します。

単純化すると、「与えられたデータがあるかないか」の違いといえるでしょう。

また、少し名前がややこしく、勘違いしやすいですが、弱と強という名前の印象とは裏腹に、強衝突耐性よりも、弱衝突耐性の方が突破は困難です。

なぜなら、与えられたデータに対して衝突を起こす方が確率論的に難しいためです。

SHA-2の前身であったSHA-1は電子署名、秘密鍵など暗号基盤として広く使われていました。

しかし、SHA-1の安全が保障されなくなり、マイクロソフトやGoogleがSHA-1廃止を唱え、今ではSHA-2 が主流となっています。

具体的には、SHA-1の強衝突耐性が突破できることを証明されたためです。

SHA-256とは、そのSHA-2の内の1つに規格されているものであり、他にはSHA-224、SHA-384、SHA-512、SHA-512/224、SHA-512/256の5つがあります。

数字が高くなるにつれて、生成されるハッシュ値のビット長も長くなるため、安全性が高まります。

中でも、SHA-256実装のしやすさ計算速度安全性のバランスといった点で広く普及しています。

まずSHA-256アルゴリズムを理解する上で以下の4つの用語について説明します。

  • 初期ハッシュ値
  • 入力データ
  • メッセージブロック
  • パディング処理

①初期ハッシュ値
SHAのアルゴリズムには、初めから設定されているハッシュ値が存在する。これを初期ハッシュ値と呼ぶ。初期ハッシュ値のサイズは32バイト。

②入力データ
ハッシュ値に変える前の元のデータ。

➂メッセージブロック
SHA-256では入力データを64バイトごとのブロックに分割する。これをメッセージブロックと呼ぶ。

④パディング処理
必ずしも分割した最後のメッセージブロックが64バイトになるとは限らない。パディング処理とは、端数になってしまったメッセージブロックを64バイトに帳尻を合わせる処理のこと。

SHA-256ハッシュ化のプロセス

では、ハッシュ値を求めるまでのプロセスを順を追ってみていきましょう。

まず、入力データを64バイトごとのかたまりに分割します。(分割したデータはメッセージブロックと呼ぶ)

つぎに、最初に設定されている、初期ハッシュ値を、メッセージブロックを利用してハッシュ化。

「8つにわけたハッシュ値(32bit)」と「メッセージブロックを32bit毎に分割した値」を利用し、「64回の繰り返しの処理」を行うことで、値をどんどん変化させていき、ハッシュ値を導きます。

このハッシュ化のプロセスは複雑であり、簡潔に説明するのは難しいため、ここでは詳細には踏み込みません。

これだけでは、完全な理解は難しいかもしれませんが、このプロセスを経ることで、逆算が困難なハッシュ値が生まれるのです。

暗号学的に安全とされるハッシュ関数ですが問題とされることもあります。 それは、主に以下の2点が挙げられます。

  1. ハッシュ衝突
  2. 量子コンピューターによる危機

ハッシュ衝突とは、本来異なるデータから同じハッシュ値が生成されてはいけないのですが、それが起きてしまう現象のことを指します。

SHA-2の前身であるSHA-1では、Googleがハッシュ衝突を起こすことに実際に成功しており、SHA-1は安全ではないことが確実となりました。

具体的には、SHA-1の強衝突耐性が突破できることを証明されたためです。

SHA-1は多くの所でSHA-2に移行が行われており、今ではSHA-2が主流となっています。

現時点ではSHA-2に対する有効な攻撃法は見つかっていない為、安全であるとみなされています。 しかし、今後攻撃手段が発見される可能性もあります。その為、必ずしも今後も安全であるとは言い切ることができません。
出典:Google Security Blog

量子コンピューターとは簡単に言うと、量子力学の原理を取り入れることで非常に計算に特化したコンピューターのことです。

量子コンピューターは、現在の一般的なコンピュータの1億倍もの計算力をもつともいわれています。

AIへの応用や医薬品開発、さらに未知なる領域での適用にも期待されています。

一方で、51%問題と呼ばれる、取引承認の妨害や、二重支払などの危険性が非常に高くなってしまうことが懸念されているのです。

量子耐性を備えた仮想通貨

量子コンピュータの登場を危惧し、量子コンピューターに耐性をもつことを掲げている仮想通貨がすでに開発されています。

たとえば、SHIELDという仮想通貨はLamport署名BLISS署名といった量子耐性が期待される署名方式を実装予定です。

出典:SHIELD FORTUNE-PROOFIING THE BLOCKCHAIN

SHA-256が採用されている、ビットコインのマイニングにおいては、マイニングの中央集権化が懸念されています。

ASICとは、特定の用途のために特化してつくられた集積回路です。

よって、その特化された目的で卓越した性能を発揮します。

SHA-256マイニングアルゴリズムに対応したASICがすでに開発されており、ビットコインのマイニングはASICでのマイニングが主流となっています。

ASICに比べると、CPUやGPUではマイニングの成功確率が低く、ソロマイニングは困難です。

また、ASICは1台あたりの価格が高価なため個人での購入は難しく、必然、大量に購入させて稼働させることが可能な事業者がビットコインの全体のハッシュレート(計算力)に占める割合が大きくなります。

実際、ビットコインでは中国のマイニング事業者3,4社でハッシュレートの過半数を占めています。

そのため、51%攻撃への懸念や、仕様変更における意思決定に大きな影響を与えるといったマイニングの中央集権化が危惧されているのです。

SHA-256はビットコインで採用されていますが、通貨によって採用されているアルゴリズムは異なります。

ここでは以下の2つのアルゴリズムをご紹介いたします。

  1. Scrypt(スクリプト)
  2. Ethash(イーサハッシュ)

Scrypt(スクリプト)は、ライトコインが採用していることで知られるマイニングアルゴリズムです。

ScryptはSHA-256よりも計算が複雑でメモリを多く必要としていて、さらに一般的なCPUでもマイニングできるように設定されています。

ライトコインが発行された当時はASICの開発がされておらず、マイニングの中央集権化の対策として画期的でしたが、現在はビットコイン同様にAsicが開発されているという状態です。

また、ブロックの生成期間がビットコインの4倍な為、取引の認証速度が4倍であるということも特徴です。
その反面、セキュリティレベルの低下ブロックチェーンのサイズが大きくなるなどのデメリットも挙げられています。

Ethashはイーサリアムネットワークがフロンティアからホームステッドへと移行した際に、以前までのDagger Hashimotoに改良を加えたPowアルゴリズムです。

ビットコインのマイニングはASICが開発されていましたが、Ethashはメモリーを大量に消費するのでASICを作成してもGPUマイニングより効率が落ちてしまいます。

GPUでもマイニングが可能なことで、マイニングの中央集権化を防ぐ狙いがあります。

SHA-256はビットコインのブロックチェーンを支える重要な暗号技術です。
旧来のSHA-1からSHA-2への移行は広まっており、今やSHA-2が主流となっています。
通貨ごとのアルゴリズムを比較する上でも、理解しておきたい技術と言えるでしょう。