ビットコインについて調べていくと、「ハッシュ」とか「ハッシュ関数」などという用語がでてきます。
これらの用語はビットコインのシステムの上で重要な役割を担っており、ビットコインの取引をする人は知っておきたいワードです。
そこで今回は、ビットコインの「ハッシュ」について解説します。
仮想通貨の根幹とされるブロックチェーンでは、様々なところでハッシュ値を使用しています。
ハッシュ値は、あるデータを変換して別の文字列や値に変換(暗号化)されたもので、パスワードを知ることはできないため個人情報の漏洩、改ざんすることができません。
ビットコインを初めとする多くの仮想通貨では、中央のサーバーを持っていないため、監視装置のない状態でデータの正しさを担保する必要があります。
このデータを正当なものにするために、ブロックチェーンではマイニングと呼ばれる承認システムを行い適切なハッシュ値を計算する作業を行います。
ブロックチェーンでは、取引を示すトランザクションの中でもハッシュ関数を使用します。
現在のトランザクションは、1つ前のトランザクションが存在します。
そのトランザクションの中には、ハッシュ値が存在し、このハッシュ値は1つ前のトランザクションの一部をハッシュ関数により出力します。
複数のトランザクションはブロックとなり、次のブロックとチェーンで結ばれるような構成のためブロックチェーンと呼ばれます。
このチェーンとなるのがハッシュ値です。
ハッシュとは暗号化されたデータのことを指します。
とあるデータをハッシュ関数という関数にかけると、そのデータは暗号化された値で出力されます。この値をハッシュ、またはハッシュ値と呼びます。
ハッシュ関数は関数の一種で、入力に対して適当な値(ハッシュ値)で戻ってき、入力する内容が同じであれば、同じ値で返ってきます。
例えば、ビットコインが採用するSHA256というハッシュ関数があります。
このSHA256に「りんご」と入力すると
4261ABFC91324DC5319312592125610A16B0B0A996FCDFAE1D24766B918AFAE9
と値が出力されます。
この値がハッシュ、又はハッシュ値と言います。
仮にりんごではなく「りんこ」と一文字違いで入力すると
B58C008DBB58B8BA4ED8AB5AE5DDABF5E4E946AB02922DD821451D47234BA14F
とまったく別のハッシュ値が出力されます。
通常のハッシュアルゴリズムは、ハッシュ値(出力値)から入力したデータ(入力値)を求める(逆算)ことができないため、一方向ハッシュ関数とも呼ばれます。
この特性を生かし、ブロックに記録された取引情報を固定サイズのハッシュ値にしたり、過去のブロックの改ざんを防ぐことができるのです。
SHA256・RIPEMD-160
SHAとはSecure Hash Algorithmの略称で、一群の関連した暗号学的ハッシュ関数のことを指す。
これらのハッシュ関数は、アメリカ国家安全保障局(NSA)によって設計され、アメリカ国立標準技術研究所(NIST)によって標準ハッシュ関数Secure Hash Standardに指定されています。SHAにはいくつものバージョンが存在し、ビットコインが採用するSHA256もそのひとつです。
SHA256、RIPEMD-160は、ASICなど GPU で計算するのに向いています。
Ethash
Ethashの特徴としてASIC耐性があることが挙げられます。
ASICとは特定の集積回路の事で、計算処理に特化した集積回路の事を言います。
ビットコインマイニングでは、普通のコンピューター(パソコン)を利用しても計算能力で勝つことができず、ASICを利用する人が有利な状態です。
ASICは高価な事などから、全ての人が簡単に利用することができません。
その為、管理者不在であるはずのビットコインなどの仮想通貨において、マイニングにより権力が集中してしまう恐れがあります。
このような集中化を避けるために、EthashではASIC耐性が備わっています。
CryptoNight
CryptoNightもEthash同様、ASIC耐性が備わっています。
CryptoNightは、匿名性に特化したアルゴリズムで、リング署名を実装しています。
ハッシュ関数にはこの他にも、MD5ハッシュ、SHA1ハッシュ、RIPEMD160など、いくつものものが存在します。
ハッシュ値の大きな特徴は、出力値から入力値を逆算できないことです。
通常の関数では、出力値から入力値を求めることができますが、これではデータの外部漏洩や改ざんに弱いため、取引システムの管理には活用できません。
ブロックチェーンはハッシュ関数を用いることで、過去データの改ざんを難しくしています。
また、ハッシュ値の算出において前のブロックのハッシュ値を入力値として用いているのもポイントです。
仮に、ビットコインのブロックにあるデータを改ざんしようとしたとき、前のハッシュ値も変更する必要があるので、現在のハッシュ値を変更するためには、過去のハッシュ値をすべて変更しなければいけません。
この作業には膨大な時間と労力、電気代(資金)がかかり、非現実的とも言えます。
仮想通貨では、強固なシステムを構築するためこのような技術を用いています。