Stake Grinding攻撃とは

Kazuaki Fujioka
TeamGeekHash
Published in
3 min readFeb 13, 2019

Stake Grindingとは

Stake GrindingとはProof of Stakeを採用しているブロックチェーンに対して行われるもので、バリデータが自分の思い通りにブロック生成のランダム性を操作し、報酬を不当に得る攻撃のことです。

通常、バリデータたちはランダムでブロックの生成に成功しますが、特定の方法を用いて自分のブロック生成の成功確率を高める(連続して報酬を得る)ことができます。攻撃方法は対象となるブロックチェーンによって異なり、今回はNXTの場合について見ていきたいと思います。

PoSにおけるブロック生成のランダム性

PoSにおいては、ブロック生成者はコインの保有量によって確率的に決められます。(保有時間を考慮する場合もあります)

たとえば、現在アクティブなバリデータセットが、40ETHを保有するAlice、30ETHを保有するBob、20ETHを保有するCharlie、10ETHを保有するDavidで構成される場合、Aliceが次のブロック生成者になる確率は40%になり、30%の確率でBobに…という様になります。

NXTの場合

NXTでは、N + 1番目のブロック生成者はN番目のブロックに含まれる値を計算によって求めることでブロックの生成をすることができます。詳しく言うと、N番目のブロックを生成したバリデータの公開鍵とN+1番目のバリデータの公開鍵を連結させた文字列のハッシュを見つけることでN番目のブロックの生成が完了します。

つまり、バリデータたちは誰が自分が生成したブロックの次ブロックを生成するかがある程度知ることができるような設計になっています。

10ブロックごとにバリデータグループが入れ替わるNXTにおいては、自分の保有量が少なくても採掘ブロック生成確率があがる状況(他のバリデータの保有量も少ないとき)でブロック採掘をするほうがもらえる報酬は多くなります。

そのため、攻撃者は自分の次のブロック生成者を予測し、もし自身のブロック生成確率が低いときには自分の順番をスキップし、自身の確率が高いバリデータグループに属したときに専念するほうが効率的ということになります。

--

--