オンラインウォレットサービスの作り方

科学・IT プログラミング

29 Res. 15.14114 MONA 7 Fav.

1 :びっとぶりっと六段:2014/07/28 08:34:25 (9年前)  1.14114MONA/1人

現在 monacoin のオンラインウォレットを作ろうと考えております。
そこで質問があります。

現在ユーザーごとのアカウントを getnewaddress と setaccount で割り当てて分別管理しようと考えております。あとはコールドウォレット化なんですが、コールドウォレットの定義がよくわかっていません。


monacoind が動いてるサーバーに xmlrpc でアクセスできるサーバーを ip で制限をかける構成にしようと思っているのですが、これでもってコールドウォレット化と呼べるのでしょうか?

一番始めに的確な回答をくれた方に 5mona 差し上げます。その他参考になりそうなご回答には 1mona から 2mona 差し上げます。よろしくお願い致します。

2 :とりめし九段:2014/07/28 09:17:38 (9年前)  1.5MONA/1人

オンラインウォレットの時点ですべてホットウォレットなのでは?
定義的には、その端末自体がインターネットから隔離されたものがコールドウォレットだったはず。

ホットウォレット(インターネットに繋がる端末)ではいかに信頼性の高いシステムにアクセスするかが問題だけど、
IPでの制御はやはり不安かな。不正アクセスが割と容易だし。

3 :脇山P名人教士聖人:2014/07/28 10:27:40 (9年前)  2MONA/1人

不特定の誰かがネット上でアクセスできる可能性がある時点で
コールドウォレットとは呼ばないです

ちなみにmonacoin.confのallowipのオプションで
ip制限はかけれますよ
allowip=localhost //自分自身
allowip=192.168.0.x //192.168.0.xのネットワーク内のホストのみ許可

4 :AliceLiddell七段錬士:2014/07/28 11:22:48 (9年前)  2MONA/1人

コールドウォレットの定義は脇山Pの言っている通りですね。
ウェブウォレットの全てのcoinをコールドウォレットにするのは、おそらく不可能でしょう。
不可能でなくても、かなり利便性が落ちる為、現実的では無いです。

100万MONAの入ったオンラインウォレットがあったとすると、短時間のうちに100万MONA全てが引き出されるなんてことは、まず有り得ないですよね。
そこで、例えば100万MONAのうち、70万MONAをネットワークから隔離された、ローカルのウォレットに移動させておく、という考え方です。
銀行のように、1日の出金上限額を設定できるようにしておくと、ユーザが出金しようと思った時に『ホットウォレットにMONAが無い!』という事態は回避できます。

5 :もなむーる名無し八段:2014/07/28 11:34:03 (9年前)  5MONA/1人

trade.monaco-ex.org からトレーディング部分を外すと,最小機能のオンラインウォレットになります.ソースコードは MITライセンスです. https://bitbucket.org/altcoinstools/monacoex

コールドウォレットの定義は, >>2-3 の通り.コールドウォレット"化"は,たぶん privkey の export を指しているの…かな.ならば,coind の dumpprivkey コマンド辺りを参照.

なお,allowip=localhost は,必要最低限の手当てでしかありません.
他の脆弱性を突かれてlocalhostにログインされたら一巻の終わりです.
OSが持つパケットフィルタ(Linux なら ipchains)や,外部の防火壁を必ず併用してください.
取引所開設して実感しましたが,破ろうとするヤンチャさんは想像以上に多いです.

6 :びっとぶりっと六段:2014/07/28 21:57:38 (9年前)  0MONA/0人

みなさま、ご回答ありがとうございます。

コールドウォレットとコールドウォレット"化"をわけて解説頂いた5さんに5mona差し上げたいと思います。4さんのおっしゃる一部をコールドウォレットにする方法はたしかに現実的なようですが、ユーザーの coin を個別管理するのが不可能になるのでやめておこうと思います。

個別管理を取るかコールドウォレットを取るかですが、僕は個別管理を取りたいと思います。

その上で monacoind が動作するサーバーは iptables で極限までアクセスを絞って更に allowip をセットします。allowip=localhostは monacoind が動作するサーバーとアプリケーションサーバーが一緒なので、そのようにせず分けます。外部とのssh通信できるサーバーはアプリケーションサーバーのみとして、これも ip を絞る上にキー認証にしておけばまずセキュリティ面では心配ないと思います。

むしろ心配なのは内部からの反抗ですね。MtGoxは実は内部からの反抗による説が濃厚と聞いたことがあります。

実はほぼほぼものはできてまして、出来たら公開します。よろしくお願い致します

この

7 :もなむーる名無し八段:2014/07/28 22:30:48 (9年前)  0MONA/0人

そうですね.coind はプライベートネットに置けるなら,そのほうがよいです.(P2Pポートは開けざるを得ませんけれども)
trade.monaco-ex.org も,DBとHTTPdとcoindはそれぞれ別のインスタンスに割り振っています.

突発的なアクセス増加でもスケールし易くなるというメリットもありますし.

8 :びっとぶりっと六段:2014/07/28 22:35:37 (9年前)  0MONA/0人

一応、コールドウォレットを採用しない理由を以下に述べます。
コールドウォレットを採用すると残高を管理するためのデータベースが必要となります。これは誰がいくらもっているのかを管理するためのもので非常に重要です。monacoind が管理する wallet.dat と同等に重要です。コールドウォレットを採用するとこれが消失してしまうリスクを抱えることになります。
さらにコールドウォレットの仕組みを持つことでシステムが複雑になり、データの不整合といったバグが発生しやすくなります。
一方でコールドウォレットには上に掲げたデメリットがある代わりにその分預かり資産が盗まれるリスクは低減できます。


ただ僕はこのように考えています。オンライン"ウォレット"なのだからある程度盗難のリスクはあっても管理部分はシンプルにすべき。さらにユーザーはウォレットには全 coin を入れるのではなく必要最小限の coin のみを入れて頂くことにし、別途オンライン"金庫"のようなサービスを用意してそこは完全に盗難のリスクがないシステムにしたいと思っています。そのような金庫サービスは根本的にオンラインウォレットと構システムがことなっていて、1ユーザーに1VM、1monacond を割り当てるようにして、必要なときだけシステムが起動して coin の出し入れをしたら直ちに停止するようなものと考えています。

9 :名無しM@STER三段:2014/07/28 23:42:34 (9年前)  0MONA/0人

日銀の準備預金

10 :もなむーる名無し八段:2014/07/28 23:47:15 (9年前)  0MONA/0人

ん? コールドウォレットの用語定義に何か齟齬があるような.

あと,VMなりコンテナなりでcoindの起動時間に制限をかけたとしても,ウォレットがセキュアに保たれたりはしませんよ.coindに脆弱性があるなら別ですが.

"金庫"の辺りをマジメにやるおつもりなら,オンラインでのペーパーウォレット作成支援を行ってくれるサイトをお調べになるとよいかもしれません.
基本的な戦略としては,コインアドレスのprivkeyを,顧客指定のパスフレーズや公開鍵で暗号化して保存することになるでしょう.たぶん.

11 :びっとぶりっと六段:2014/07/29 00:07:46 (9年前)  0MONA/0人

>>ん? コールドウォレットの用語定義に何か齟齬があるような.

齟齬というよりですね、4の方がおっしゃるコールドウォレットの仕組みについての考えを述べた感じですねー。

おそらく monappy も 4の方がおっしゃる仕組みをなんじゃないかと思っています。

12 :fxr六段:2014/07/29 00:17:44 (9年前)  1MONA/1人

coindを直接操作して出金してもアカウントの残高は保たれますよ
アカウントの数字はcoindの残高に関係なく100万にも-100万にも出来ます

大量のアカウントを持つ場合はひとつのcoindでは処理しきれなくなるため、専用のデータベースを用意した方がいいという話は聞いたことがあります

13 :びっとぶりっと六段:2014/07/29 01:10:51 (9年前)  0MONA/0人

専用のデータベースはデータベースの消失や改ざんリスクを抱えてしまいます。
専用のデータベースがなくても、例えばユーザーIDが10000以上は coind Aを使い 20000以上は coind B を使うみたいに並列化できますよ。むしろ専用のデータベースを持たないほうが柔軟に設計ができます。

なんにしろトレードオフですね。

14 :Takenaka五段:2014/07/29 03:15:38 (9年前)  1.5MONA/1人

ウォレットのアカウントで残高を管理する場合ウォレットのバックアップが課題になります。
アカウントの残高に動きがある度にそれ以前のバックアップではそのアカウントの最新の残高を復元できないからです。
ウォレットのバックアップについては下記を参照してください。
http://askmona.org/59#res_37

15 :もなむーる名無し八段:2014/07/29 06:24:24 (9年前)  0MONA/0人

何事もトレードオフですけれども….

Webインタフェースを持つなら,おそらくユーザログイン用のデータベースは持つであろうわけでして.

Wallet以外のデータベースに消失や改ざんのリスクがある,という主張は,Wallet以外のデータベースを管理しきれないかも,と言っているのと相似ですよ….
サービス提供(予定)者としての発言としては,不用意かもですね.

16 :びっとぶりっと六段:2014/07/29 08:31:20 (9年前)  0MONA/0人

>>14

ありがとうございます。とても参考になりました。現在 cron で1日1回ウォレットのバックアップを取るように設定してるのですが、ユーザー数が多くなったらもっとこまめにバックアップとるようにしないとダメですね。

>>15

たしかにユーザーログイン用のデータベースは持ちますね。その事もリスクになり得ますね。逆にWallet以外のデータベースに消失や改ざんのリスクがないと考えてる方が怖い気がします。。。がおそらく、そういう事をおっしゃってるのではないのですよね。
すみません、心構えとして不用意でした。

17 :びっとぶりっと六段:2014/07/29 08:44:13 (9年前)  0MONA/0人

トレードオフなのはやはり確かで、以下の方針にしたいと思います。

4さんの仕組みはある程度預かり資産があってこそ意味があるものです(預かり資産 100mona程度しかない状態で持ってても意味がない) 。
そこである程度のユーザー数、預かり資産が集まった時点で4さんの仕組みを導入検討したいと思います。
今のシステムがシンプルなので、導入するのは割と用意です。メンテナンスのため半日ほどサービス止めるとは思いますが。

18 :びっとぶりっと六段:2014/07/29 09:45:49 (9年前)  0MONA/0人

>>15

もしかして、trade.monaco-ex.org を運営されめる方だったりしますか??
そうでしたら、もっと色々詳しくお伺いしたいなと思う次第です!!

19 :もなむーる名無し八段:2014/07/29 09:47:40 (9年前)  1MONA/1人

>>16
サービスを組む側の人たちは,トレードオフの意味は分かるのですけれど,使う側も見ていますからね….
リスクがあると認識しているものを使っているとなると,見る目厳しいです.

ところで,ふと思ったのですけれど,wallet の管理に神経を集中させるなら,coind に手を入れて webログイン用のパスワードハッシュも投げ込んでしまえば,と.
永続化可能KVSとして使う範囲での,Berkeley DBの性能は割と良いので,意外とアリかも.

20 :もなむーる名無し八段:2014/07/29 09:48:46 (9年前)  0MONA/0人

>>18 はい,なかのひとです.

21 :びっとぶりっと六段:2014/07/29 14:06:17 (9年前)  0MONA/0人

>>19
失礼しました、こういう場では使う側も見ているという点を心がけます。

なるほど!!!!! coind 自体をオンラインウォレットサービスで使われる事を想定した仕様に変えてしまうんですね!!

setaccountpassphrase <account> <passphrase> みたいな api を用意するというわけですか。なるほどー、この発想はなかったのですが、これはいいかもすね。こっちの方向でも検討していきたいと思います。

もしよろしかったら、一度この件や仮想通貨の将来についてオフ会的にお話できませんでしょうか。。。当方関東内でしたら行けます。

22 :AliceLiddell七段錬士:2014/07/29 14:09:19 (9年前)  0MONA/0人

>>21
gikopoolさんの企画していたデベロッパーズキャンプは中止になってしまったけど、私が8月23日に渋谷で勉強会を開く予定です。
私もサービス開発者として、ぜひお話したいです(・ω・)ノ

23 :もなむーる名無し八段:2014/07/29 18:31:59 (9年前)  0MONA/0人

>>21
wallet を DB の軸にするっていうのは,(たぶん前例が少ないはずなので)いろいろと地雷を踏むとは思いますが….軌道に乗れば面白いことになりそうですね.

私も関東圏の住人ですが,仮想通貨に関しては新参者でして,将来を考えられるほどのアタマもありませんし,いま足りていない諸々のサービスを実現していくだけで精一杯ですので….
11月頃にイベントという話が持ち上がっているようですので,その際に,機会がありましたなら. http://askmona.org/1665

24 :もなむーる名無し八段:2014/07/29 21:14:25 (9年前)  0MONA/0人

>>22
界隈の情報に疎いゆえ,間抜けなコメントが多くてごめんなさい.
https://atnd.org/events/54451 ですね.
日本語の情報が著しく少ないなかで,サービス開発への興味をお持ちの方にとって,役に立ちそうなイベントですね.

25 :びっとぶりっと六段:2014/07/29 23:39:06 (9年前)  0MONA/0人

1です。名前をびっとぶりっとに変更しましたよろしくお願い致します


>>14

etwingsさんはもしや、あの取引所の運営者の方だったりしますか??

26 :びっとぶりっと六段:2014/07/29 23:40:41 (9年前)  0MONA/0人

>>22
勉強会参加させて頂きました。よろしくお願い致します。

>>23
かしこまりました。11月頃に機会がありましたらお会いしましょう

27 :びっとぶりっと六段:2014/07/30 21:11:59 (9年前)  0MONA/0人

8/1 (金)の夜に公開予定です!!

よろしくお願いしま〜〜す!!

28 :びっとぶりっと六段:2014/08/01 00:51:56 (9年前)  0MONA/0人

検証完了です。予定通り本日夜公開いたします!!

本登録して頂いた先着100名様に 2mona プレゼント致します。

よろしくお願いします!!

29 :びっとぶりっと六段:2014/08/01 13:09:30 (9年前)  0MONA/0人

ううう、mona の価値が上がって 2mona キツイすなあ。。。 1mona でも登録してくれますかー?

お気に入り

新規登録してMONAをもらえた

本サイトはAsk Mona 3.0に移行しましたが、登録すると昔のAsk Monaで遊ぶことができます。

新規登録ログイン