創始者の言葉
以下2chより抜粋
BitZenyとは
ハッシュアルゴリズムをCPU向けに改造したBitcoinクローンです。
Yescryptとは
YescryptはPassword Hashing Competitionというコンペに参加中のアルゴリズムで、
Scryptを改善したアルゴリズムになっています。
また、LitecoinのScryptはメモリ使用量が128KB(N=10)で、これがダメだと言われていますが、
BitZenyのYescryptはメモリ使用量が2Mなので、GPU耐性は高いはずです。
どうすればASIC/GPU耐性が高くなるかについて、Yescryptの作者が作ったスライドがあるので、
興味があれば読んでみてください。
作者のコイン履歴
・2014/3/1
PC watchの記事でBitcoinに興味を持つ
ttp://pc.watch.impress.co.jp/docs/topic/feature/20140301_637587.html
自作PCをぶん回して遊ぶというところに惹かれました。
Monacoinを始めようかと思いましたが、Asicが出ようとしていて、
GPUを買うと損しそうな気がしたのでやめました。
結局、Monacoinは1枚も持っていません。
- 2014/4/28
KumacoinがCPUで掘れるということで仮想通貨デビュー
- 2014/4/?
2chを見ると、KumacoinのCPUプール作成に難航していたので、
NOMPでプールを作ってみました。
最大で170ノードが接続するプールとなりました。
ただし、Kumacoinのfork問題が発生した時に、プールは閉じてしまいました。
また、KumacoinのQuarkアルゴリズムについて調べ、
これはCPUよりもGPUのほうが効率が良い感じ、CPUでの採掘もやめました。
この時の経験から、アンチGPUってどうすべきなんだろうと思うようになりました。
- 2014/5/?
kumacoin用のabeを作る
ttp://kabe.proof-of.info/chain/Kumacoin
今でも続けています(あまりメンテしていませんが)
- 2014/5/27
Ringoでsync問題が発生していたので、パッチを送る
ttp://jbbs.shitaraba.net/bbs/read.cgi/internet/19552/1399658444/379
Ringoの以下のバージョンは私のコードか私のチェックが入ったコードになっています。
v1.0.4 [2014/6/1] PoS報酬のブロック数取得の修正(20001ブロック問題)、checkpointの追加
v1.0.3.1 [2014/5/29] 前回の修正で不十分だったPoS報酬のDiff参照の一部問題の修正
v1.0.3 [2014/5/28] PoS報酬のDiff参照の一部問題の修正、checkpointの追加
v1.0.2 [2014/5/28] Syncの不具合修正、checkpointの追加
以降は、Bitcoinのソースを弄ってみたりして、新しいコインを作ってみようか迷い続けて、
BitZenyでやっと出せたという感じです。
difficultyアルゴリズム、DarkGravityWave3を選んだ理由
- Bitcoinのアルゴリズム
- 2016ブロックごとにdiffを変更するアルゴリズム
- 前の2016ブロックが目標とする時間とどれだけズレていたか計算して、次のdiffに反映させる
- DigiShield
- 1ブロックごとにdiffを変更するアルゴリズム
- 前の1ブロックが目標とする時間とどれだけズレていたか計算して、次のdiffに反映させる
- DarkGravityWave3 (DGW)
- 1ブロックごとにdiffを変更するアルゴリズム
- 次のdiffは前の24ブロックの移動平均にズレ量を掛けて算出する
- Kimoto Gravity Well (KGW)
- DarkGravityWave3では、24ブロックの平均だったが、
何ブロックの平均にするかは、難しい式で算出する(たぶん)
#この書き方だと、DGWの後にKGWが出たように見えますが、
#実際はKGWの複雑さを取り除くために、DGWができたようです。
- DarkGravityWave3を選んだ理由
最初、DigiShieldにしようとしましたが、実際に動かしてみると目標時間からのズレが大きかったのでやめました。
実際にMonaや他のDigiShieldを採用したコインを見てみても、ズレているようです。
次に、KGWにしようとしましたが、大本のMegacoinがKGWのメンテをしているように見えなかったため、
信用が置けないように感じ、最終的にDGWにしました。
ただし、DGWは少し目標時間より長くなるようです。
実際のDarkcoin(150秒)の1000ブロック平均は以下のとおりです。
128000 - 129000 平均157秒
127000 - 128000 平均157秒
126000 - 127000 平均157秒
125000 - 126000 平均157秒
124000 - 125000 平均158秒
BitZenyも手元で回してみると、90秒のとこが、91秒ぐらいになることを確認しています。
自分としては、許容範囲内だと思ったのでDGWにしました。
KGW採用コインの平均値を見てみると、DGWよりも良さそうなので、
強い希望があればKGWにしようかなーと思っています。
ハッシュアルゴリズム、Yescryptを選んだ理由
Yescryptにした理由は、Scryptの後継になりそうなパスワードハッシュアルゴリズムだったためです。
まず、良いパスワードハッシュアルゴリズムとは何かについて書いた後に、
なぜ、Yescryptが優秀かについて書こうと思いましたが、
パスワードハッシュアルゴリズムの説明を書いて力尽きたので、今日はここまでにします。
- 良いパスワードハッシュアルゴリズムとは
パスワードのハッシュ化は必須ですが、どのようなハッシュアルゴリズムでも良いかというと、
そうではありません。
例えば、SHA256でハッシュ化したパスワードを全探索する場合を考えます。
パスワードが仮に8文字かつ64文字種だった時、パスワードの種類は約281兆5000億個です。
これに対し、最新のASICは1秒間に1兆回、SHA256を計算することができます。
つまり、SHA256のパスワードハッシュが流出した場合、282秒あれば元のパスワードが分かってしまいます。
これではダメなので、標準化されているPBKDF2ではハッシュを2000回繰り返すことが推奨されています。
繰り返しを大きくすれば、より安全になりますが、パスワード認証のためのサーバー負荷が増えることになります。
結局、普通のハッシュアルゴリズムでは、サーバー(CPU)の計算効率がASICの計算効率よりもひどく劣っていることが問題です。
CPUとASICで同じような効率のハッシュアルゴリズムが良いアルゴリズムと言えます。
そこで出てきたのがbcryptとscryptですが、scryptはASIC化されてしまいCPUよりずっと効率が良いのはご存知だと思います。
というわけで、より良いパスワードハッシュアルゴリズムを決めるためのコンペが開催されていて、
それがPassword Hashing Competitionになります。
現在、Password Hashing Competitionには22個のハッシュアルゴリズムがエントリーしていて、
その中から良い物を選定中です。
Yescryptはその中でもかなり優秀だと私は考えています。
なぜ【Zeny】にしたのか
命名するときに少し迷いましたが、
"Zeny" 適当なゲーム名 と "Zenny" 適当なゲーム名
で、検索した結果、Zenyの方が多かったのと、
Bitcoinのcoinを置き換えるときに、4文字のZenyの方が楽だったという理由からです。
なぜSSE4.1を利用するのか
初回起動時に一気にblockchainを持ってきますが、あの時間がネットワーク律速ではなく、
CPU律速になります。SSE4.1なしだとそれぐらい遅くなります。
64bitだとSSE4.1なしでもそこそこ速いので、公開してあります。
32bit版SSE4.1なしもURLを適当に変更すれば入手できるようにはしてありますが、オススメしません。
ただ、一応、動作検証はしています。
- 最終更新:2018-07-15 21:39:48