ビットコイン・インスティテュート

アラートシステムの開発

アラートシステムの作成に取り組んでいる。アラートはネットワークを通じてブロードキャストされ、バージョン番号の範囲に適用される。アラートメッセージは私だけが持つ秘密鍵で署名される。

ノードはアラートに対して2つのことを行える:

  • ステータスバーに警告メッセージを表示する。
  • json-rpcインターフェースの金銭処理メソッドがエラーを返すようにする。

オーバーフローバグやユーザーが受信した支払いを信頼できないフォークのような場合、アラートによって旧バージョンがアップグレードするまでほぼ安全に保たれるはずだ。手動のユーザーは受信した支払いを確認する際にステータスバーの警告に気付くはずであり、json-rpcのセーフモードはアップグレードされるまで自動化されたウェブサイトがこれ以上取引を行うのを停止する。

アラート中にエラーを返すjson-rpcメソッドは:sendtoaddress getbalance getreceivedbyaddress getreceivedbylabel listreceivedbyaddress listreceivedbylabel

lfm 2010年8月23日04:16 UTC

ブロック生成をオフにすることは考えたかな? 考えたはずだ。なぜそれを含めないことにしたんだろう?

mizerydearia 2010年8月23日05:04 UTC

ところで、lfm、 ちょっと 冗長に感じる。 あなたの投稿が 最初の返信なのに、 最初の投稿の全文を 引用している。 もちろんあなたは あの投稿に 返信していたんだ! ひょっとして 投稿をもう少し ボリュームのある ように見せたかったのか? ^_^

ブロック生成を強制的にオフにするのは良いアイデアではないと思う。所有者/ユーザーが自分で明示的に無効化するまでは、ブロック生成を維持しておく方が良いと思う。ほとんどの場合、ブロック生成を自動的に無効化するのは役に立つように見えるかもしれないが、そうとは限らないケースもあるかもしれない。

リモートコントロールの実装が作られて、コミュニティの期待を妨げたり邪魔したりして他のコミュニティから反発を受けた前例があると思う。ブロック生成のリモート無効化の実装が同じように受け取られるかは確かではないが、考慮しておくべきことだ。

BioMike 2010年8月23日05:15 UTC

@mizerydearia、引用ボタンの方が返信ボタンより見つけやすいと思うよ。

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、ネットワーク全体をシャットダウンできる最初の制御システムということか?

それとも不可能なのかな? <ある政府>はどこまでやれるんだろう?

FreeMoney 2010年8月23日05:23 UTC · 解説

だめだ! そんなことをしたら、鍵を渡すまで拷問されるぞ、サトシ!

冗談はさておき、その鍵に停止する力があるなら、そのクライアントは動かさない。

1人がメッセージを送信できるというアイデア自体が好きではない。今はその人を信頼していても、後で信頼しなくなるかもしれないし、別の人になるかもしれないし、拷問/買収/脅迫されるかもしれない。

3.10にまだ切り替えていない人が多いのを見ての発想だろうか?

十分に多くの異なる実装があり、どれも過半数にならなければ、オーバーフローのようなバグは不適切にコーディングされたクライアントにのみ問題を引き起こし、チェーン全体には影響しない。新しいクライアントを書く人がほとんどあなたのコードをコピーすれば、問題はそのまま残る。しかしゼロから書かれていれば、問題は重複しない。

複数の実装があったら悪夢だと言っていたような覚えがあるんだが。なぜそう言ったかは思い出せない。

lfm 2010年8月23日05:28 UTC
FreeMoneyの投稿(2010年8月23日05:23 UTC)

1人がメッセージを送信できるというアイデア自体が好きではない。今はその人を信頼していても、後で信頼しなくなるかもしれないし、別の人になるかもしれないし、拷問/買収/脅迫されるかもしれない。

オープンソースだ! サトシを信頼しないか、強制されると思うなら、サトシの鍵を自分の鍵に置き換えれば、自分のノードをシャットダウンする権限は自分だけが持てる。

mizerydearia 2010年8月23日08:50 UTC
lfmの投稿(2010年8月23日05:28 UTC)
FreeMoneyの投稿(2010年8月23日05:23 UTC)

1人がメッセージを送信できるというアイデア自体が好きではない。今はその人を信頼していても、後で信頼しなくなるかもしれないし、別の人になるかもしれないし、拷問/買収/脅迫されるかもしれない。

オープンソースだ! サトシを信頼しないか、強制されると思うなら、サトシの鍵を自分の鍵に置き換えれば、自分のノードをシャットダウンする権限は自分だけが持てる。

全員が鍵を変更したり新しいバージョンにアップグレードしたりするのは大変な作業だ。0.3.0やおそらくそれ以前の古いバージョンをまだ使っている人がいることからも、それは認識されるべきだ。

nimnul 2010年8月23日15:46 UTC
  1. CentOS用パッケージ :-) アップデートが簡単になる
  2. メッセージ機能は実装しないでほしい
  3. RSS/メール/Jabberで通知してほしい
Macho 2010年8月23日16:39 UTC
nimnulの投稿(2010年8月23日15:46 UTC)
  1. RSS/メール/Jabberで通知してほしい

それは中央集権的すぎる/検閲されやすい/ハッキングされやすい。サトシだけが持つ特定の秘密鍵で署名されたメッセージのアイデアは理想的だ。任意のノードで導入でき、分散型の手段で広がる。

lfm 2010年8月24日03:58 UTC
mizerydeariaの投稿(2010年8月23日08:50 UTC)
lfmの投稿(2010年8月23日05:28 UTC)
FreeMoneyの投稿(2010年8月23日05:23 UTC)

1人がメッセージを送信できるというアイデア自体が好きではない。今はその人を信頼していても、後で信頼しなくなるかもしれないし、別の人になるかもしれないし、拷問/買収/脅迫されるかもしれない。

オープンソースだ! サトシを信頼しない、または強制されると思うなら、彼の鍵を自分のものに置き換えて、自分のノードをシャットダウンする権限を自分だけに持たせればいい。

全員が鍵を変更したり新しいバージョンにアップグレードしたりするのは大変な作業だ。0.3.0やおそらくそれ以前の古いバージョンをまだ使っている人がいることからも、それは認識されるべきだ。

設定ファイルかコマンドラインスイッチの単純なオプションであれば、大した労力はかからない。デフォルトでなくてもいい。オプトイン方式でもいい。緊急時に問題を起こさない保険として歓迎する人もいるだろう。

—disable-alertsスイッチがあるべきだ。

これについてヒステリックになるほど疑り深いのであれば、ステータスバーに警告メッセージが表示されたらウェブサイトとフォーラムを確かめるくらいには、間違いなく疑り深いはずだ。

オーバーフローバグのような別のバグが発生した場合、自動化されたウェブサイトが管理者が何が起きているか確認して対応を決定できるまで取引を停止することが重要だと思う。誤報だと判断してリスクを取りたい場合は、-disablesafemodeスイッチを使える。

これはバージョン0.3.11としてSVN rev 142に入っている。

mizerydearia 2010年8月25日00:11 UTC
サトシ・ナカモトの投稿(2010年8月24日23:51 UTC)

誤報だと判断してリスクを取りたい場合は、-disablesafemodeスイッチを使える。

http://www.bitcoin.org/wiki/doku.php?id=man_pageを見つけたが、-disablesafemodeへの言及がない。追加したほうがいいかもしれない! また、-4wayなど他のオプションも追加すべきだ。

MoonShadow 2010年8月25日00:24 UTC
サトシ・ナカモトの投稿(2010年8月24日23:51 UTC)

誤報だと判断してリスクを取りたい場合は、-disablesafemodeスイッチを使える。

-disablesafemodeは他に何をするの?

nelisky 2010年8月25日01:28 UTC
サトシ・ナカモトの投稿(2010年8月24日23:51 UTC)

これについてヒステリックになるほど疑り深いのであれば、ステータスバーに警告メッセージが表示されたらウェブサイトとフォーラムを確かめるくらいには、間違いなく疑り深いはずだ。

オーバーフローバグのような別のバグが発生した場合、自動化されたウェブサイトが管理者が何が起きているか確認して対応を決定できるまで取引を停止することが重要だと思う。誤報だと判断してリスクを取りたい場合は、-disablesafemodeスイッチを使える。

では、管理者はbitcoindからどのような警告を受けるのだろうか? debug.logからgrepできるものはあるだろうか? それともRPC呼び出しが特定のエラーを返すのだろうか? ユニットテストのために、ローカルでこれを強制的に発生させる方法はあるだろうか?

Macho 2010年8月25日03:03 UTC
サトシ・ナカモトの投稿(2010年8月24日23:51 UTC)

これについてヒステリックになるほど疑り深いのであれば、ステータスバーに警告メッセージが表示されたらウェブサイトとフォーラムを確かめるくらいには、間違いなく疑り深いはずだ。

分散型の疑似匿名取引システムを作り、信頼に依存せず強力な暗号技術を使うサトシが、我々を疑り深いと呼んでいる(笑)

自分のPCで動いているソフトウェアへのリモート操作を望まないのは、疑り深いのではなく常識だと思う。もちろん良いアイデアではあるが、ユーザーが明示的に要求した場合にのみ有効にすべきだ。オプトアウトではなくオプトインにすべきだ。この2つには大きな違いがある(Facebookに聞いてみるとよい)。デフォルトで有効になっていると、多くの人がその存在に気づかないことを前提とした、悪用可能な・悪意ある機能として認識されるだろう。そして、そうした懸念は正当化されないとは言えない……あなたがコミュニティの最善の利益を心にかけていることは確かだと思うが、このシステムは、どんな形であれ、一か所に集めた信頼には依存しないよう設計されたものであり、その原則を破るべきではない。

この機能を有効にするために、ユーザーに無効化を期待するのではなく、-enablesafetyを使うのはどうか? 自分のソフトウェアがリモートアラートに応答するようにしたいなら、明示的に有効にすべきであり、そうすれば自分が何をしているか認識し、自分の意思で行っていることが保証される。デフォルトで有効になっていると、多くの人はこの「機能」が有効であることに気づかず、リモートによる無効化を信頼の裏切りと受け取るかもしれない……もしこの可能性を知らずにソフトウェアが突然動かなくなり、許可を与えていない誰かによってリモートで無効にされたことを発見したら、自分なら確実にそう感じる。

この提案を検討してもらえると嬉しい……ありがとう

mizerydearia 2010年8月25日09:14 UTC
Machoの投稿(2010年8月25日03:03 UTC)

同意するが、ソースからコンパイルする場合、

rpc.cpp

!mapArgs.count("-disablesafemode")

を

mapArgs.count("-safemode")

に変更するだけで

// Observe lockdown
throw runtime_error(strWarning);

となる。 コードはこちらで確認できる:http://bitcoin.svn.sourceforge.net/viewvc/bitcoin/trunk/rpc.cpp?revision=142&view=markup

-enablesafetyを使ったときだけエラーを表示するのは少し奇妙だ。これが起きると安全でない、あるいはセキュリティ上問題があるのだろうか?

http://www.bitcoin.org/wiki/doku.php?id=api

コードを理解した限りでは、getinfo、help、stop、getgenerate、setgenerate以外のhttp://www.bitcoin.org/wiki/doku.php?id=apiのメソッドを使用する際、かつ警告がある場合:

-disablesafemodeが実行中のプロセスに渡されていれば、警告は表示されない -disablesafemodeが実行中のプロセスに渡されていなければ、警告が表示される

http://www.cplusplus.com/reference/std/stdexcept/runtime_error/

necrodearia> http://www.cplusplus.com/reference/std/stdexcept/runtime_error/ - Does this cause the running process to stop or does it just produce output to the terminal/shell?
<Adrinael> necrodearia, “this”?
<necrodearia> runtime_error
<Adrinael> necrodearia, if you create a runtime_error object, nothing happens. If you throw a runtime_error object, it all depends on if someone catches it, and where.
<Adrinael> { try { throw runtime_error(“Error, halp!”); } catch (runtime_error& e) { cout << “caught a runtime error: ” << e.what(); } cout << ” but still continuing…”; }
<clang> terminated by runtime_error: Error, halp!
<Adrinael> Hmm awesome
<Adrinael> geordi { try { throw runtime_error(“Error, halp!”); } catch (runtime_error& e) { cout << “caught a runtime error: ” << e.what(); } cout << ” but still continuing…”; }
<geordi> caught a runtime error: Error, halp! but still continuing…
<Sausage> How in the hell did it get that wrong?
<Adrinael> Asked Eelis on #geordi, now move along

Macho 2010年8月25日12:25 UTC
mizerydeariaの投稿(2010年8月25日09:14 UTC)

同意するが、ソースからコンパイルする場合、

それはポイントではない。ソースコードを変更するほど勤勉なら、-disablesafetyスイッチを適用するほど勤勉でもあるだろう。はるかに簡単だ。ここでの問題は公式クライアントのデフォルト動作だ。多くの人はただ新しいバージョンがあることに気づき、ダウンロードしてインストールするだけで、この新しいリモートコントロールが挿入されたことに気づかない。

ソースコードを調べたりフォーラムで公然と議論されたと言うのは、Facebookが「でもアカウント削除オプションがあります。利用規約のセクション76、346行目、so-appalling-that-nobody-would-ever-click-itという名前のリンクの下にあります。ページ2でキャプチャを解いて、ダイアログを確認してください。それでアカウントが無効になり、1週間ログインしなければ削除されます」と言うようなものだ。要するに…実際には誰もやらない…それがバッドウェアの振る舞いであり、Bitcoinにバッドウェアになってほしくない。

リモートセーフティ無効化機能がある場合、それを有効にしているすべてのユーザーは、それが何をするか知った上で意識的に有効にすべきだ。GUIクライアントでは有効化を促すダイアログを表示し、何をするか説明すればいい。デーモンの場合は同じ目的を果たす警告を表示すればいい。シンプルで効率的で全員が満足する。ユーザーを尊重し、ユーザーのために働くソフトウェアはそうあるべきだ。ほとんどの人は何をするか理解すれば有効にするだろう…しかしユーザーが望んでいることを確認せずにこの機能をこっそり入れるのは、ユーザーのために決定を下すことであり、私は自分のために決定を下されるのが好きではない 😉

これについて知っているのはフォーラムを読んでいるからだが、将来はどうか? (そしてフォーラムを読まない人はどうか)別の「機能」が挿入されて、通知もされず、何をするか説明もされず、望むかどうか聞かれないのか? それは好きではない…自分のCPU上のソフトウェアが何をしているか知りたいし、合理的な努力で情報を提供し、動作を認識していることを保証してくれなければ、バッドウェアと見なす。

少なくともそれが私の視点だ…そして修正は極めて簡単だ 😉

リモートで任意のアクションを実行することはできない。アラートシステムにもっと多くのことをさせるべきだと提案した他の投稿者に反応しているのかもしれないな?

アラートがある場合、以下のjson-rpcメソッドがエラーを返す:sendtoaddress getbalance getreceivedbyaddress getreceivedbylabel listreceivedbyaddress listreceivedbylabel

残りの14メソッドは通常通り機能する。

より安全なオプションがデフォルトで有効であるべきだと考えている。サーバーが取引を続け、受信しているお金がオーバーフローバグのお金のようなものかもしれないというアラートを無視したい場合は、スイッチを使えるが、お金を失っても他人を責めないでほしい。

アラートを有効にしたままの最悪のケースでは、アップグレードするか -disablesafemodeスイッチを追加するまでサイトが取引を停止する。

ノードが本来リスクにさらされるはずの時に一時的なダウンタイムで驚かされる方が、泥棒に在庫をすべて奪われて驚かされるよりましだ。

いつか、長期間新しいバグが見つからず、何も見つからないまま徹底的なセキュリティレビューが行われた時には、これを縮小できる。これが永遠の恒久的な方法だと主張しているわけではない。まだベータソフトウェアだ。

スイッチ名を -disablesafemodeに変更した。

nelisky 2010年8月25日16:41 UTC

RPCコールが返すエラーは何だろう? そしてもっと重要なのは、これをどうシミュレートできるだろう? サーバーを劣化モードで起動するフラグを追加してもらえないかな?

jimbobway 2010年8月25日16:45 UTC · 解説
BioMikeの投稿(2010年8月23日05:15 UTC)

@mizerydearia、引用ボタンの方が返信ボタンより見つけやすいと思うよ。

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、 ネットワーク全体をシャットダウンできる最初の制御システムということか?

それとも不可能なのかな? <ある政府>はどこまでやれるんだろう?

サトシへのいくつかの修辞的な質問:

ウォーターボーディングに耐えられるだろうか? 電気ショックには耐えられるだろうか? あらゆる形態の拷問に? 最後に、ひょっとしてジャック・バウアーだったりして? 真面目に。

jimbobwayの投稿(2010年8月25日16:45 UTC)
BioMikeの投稿(2010年8月23日05:15 UTC)

@mizerydearia、引用ボタンの方が返信ボタンより見つけやすいと思うよ。

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、ネットワーク全体をシャットダウンできる最初の制御システムということか?

それとも不可能なのかな? <ある政府>はどこまでやれるんだろう?

サトシへのいくつかの修辞的な質問:

ウォーターボーディングに耐えられるだろうか? 電気ショックには耐えられるだろうか? あらゆる形態の拷問に? 最後に、ひょっとしてジャック・バウアーだったりして? 真面目に。

アラートシステムに関して、誰が気にするのか? 鍵ができることは、サイト所有者が -disablesafemodeスイッチを追加するかアップグレードするまで、6つのjson-rpcコマンドを一時的に無効にすることだけだ。すべてのノードは稼働し続け生成を続け、ネットワークは維持される。私が不在でも、スクリプトキディでも2文字追加してアラートシステムを無効にする新バージョンを作る方法を理解できる。一時的な不便でしかない。

BioMike

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、ネットワーク全体をシャットダウンできる最初の制御システムということか?

これが、反対している人々が何を言っているかわかっていないと思わせる理由だ。「ネットワーク全体をシャットダウン」することはできない。

neliskyの投稿(2010年8月25日01:28 UTC)

では、管理者はbitcoindからどのような警告を受けるのだろうか? debug.logからgrepできるものはあるだろうか? それともRPC呼び出しが特定のエラーを返すのだろうか? ユニットテストのために、ローカルでこれを強制的に発生させる方法はあるだろうか?

getinfoには、ステータスバーに表示されるアラートメッセージやその他のエラーを表示する新しいフィールドがある。

RPCメソッドは、エラー説明「Safe mode: 」に続いてアラートで指定された追加テキストを含むjson-rpcエラーを返す。

あなたのために -testsafemodeスイッチを追加した。SVN rev 145だ。

これらは非常に新しいもので、まだ変更される可能性がある。

mizerydeariaの投稿(2010年8月25日00:11 UTC)

http://www.bitcoin.org/wiki/doku.php?id=man_pageを発見したが、-disablesafemodeへの言及がない。追加したほうがいいかもしれない! また -4wayなどの他のものも追加すべきだ。

多くのスイッチは意図的にドキュメント化されていない。機能がまだ開発中だったり、名前がまだ確定していなかったり、リリース向けでないテストコードだったりする場合だ。

-4wayは最終的に自動検出に置き換えられるべきだ。

BioMike 2010年8月25日18:23 UTC
サトシ・ナカモトの投稿(2010年8月25日16:56 UTC)
BioMikeの投稿(2010年8月23日05:15 UTC)

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、 ネットワーク全体をシャットダウンできる最初の制御システムということか?

これが、反対している人々が何を言っているかわかっていないと思わせる理由だ。「ネットワーク全体をシャットダウン」することはできない。

この変更/アイデアに反対したことは一度もない。可能かどうか、どの程度まで可能かを聞いているだけだ。 情報を得るのが、そんなにいけないことかな? 😉

nelisky 2010年8月25日19:02 UTC
サトシ・ナカモトの投稿(2010年8月25日17:59 UTC)
neliskyの投稿(2010年8月25日01:28 UTC)

では、管理者はbitcoindからどのような警告を受けるのだろうか? debug.logからgrepできるものはあるだろうか? それともRPC呼び出しが特定のエラーを返すのだろうか? ユニットテストのために、ローカルでこれを強制的に発生させる方法はあるだろうか?

getinfoには、ステータスバーに表示されるアラートメッセージやその他のエラーを表示する新しいフィールドがある。

RPCメソッドは、エラー説明「Safe mode: 」に続いてアラートで指定された追加テキストを含むjson-rpcエラーを返す。

あなたのために -testsafemodeスイッチを追加した。SVN rev 145だ。

これらは非常に新しいもので、まだ変更される可能性がある。

完璧だ、問題なく動作する。ありがとう。

FreeMoney 2010年8月25日22:48 UTC

わかった、もう心配していない。

BioMikeの投稿(2010年8月25日18:23 UTC)
サトシ・ナカモトの投稿(2010年8月25日16:56 UTC)
BioMikeの投稿(2010年8月23日05:15 UTC)

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、ネットワーク全体をシャットダウンできる最初の制御システムということか? それとも不可能なのかな? <ある政府>はどこまでやれるんだろう?

異議を唱えている人たちは何を言っているかわかっていないと思わせる理由だ。「ネットワーク全体をシャットダウン」することはできない。

この変更/アイデアに反対したことは一度もない。可能かどうか、どの程度まで可能かを聞いているだけだ。 情報を得ることの何が悪いのか?

申し訳ない、あなたの投稿は確かに声明ではなく質問だった。

jimbobway 2010年8月26日16:52 UTC
サトシ・ナカモトの投稿(2010年8月25日16:56 UTC)
jimbobwayの投稿(2010年8月25日16:45 UTC)
BioMikeの投稿(2010年8月23日05:15 UTC)

@mizerydearia、引用ボタンの方が返信ボタンより見つけやすいと思うよ。

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、ネットワーク全体をシャットダウンできる最初の制御システムということか?

それとも不可能なのかな? <ある政府>はどこまでやれるんだろう?

サトシへのいくつかの修辞的な質問:

ウォーターボーディングに耐えられるだろうか? 電気ショックには耐えられるだろうか? あらゆる形態の拷問に? 最後に、ひょっとしてジャック・バウアーだったりして? 真面目に。

アラートシステムに関して、誰が気にするのか? 鍵ができることは、サイト所有者が -disablesafemodeスイッチを追加するかアップグレードするまで、6つのjson-rpcコマンドを一時的に無効にすることだけだ。すべてのノードは稼働し続け生成を続け、ネットワークは維持される。私が不在でも、スクリプトキディでも2文字追加してアラートシステムを無効にする新バージョンを作る方法を理解できる。一時的な不便でしかない。

BioMike

で、理論的にはこれは<ある政府>がサトシを逮捕して鍵の引き渡しを要求し(あるいは彼のコンピューターから取得し)、ネットワーク全体をシャットダウンできる最初の制御システムということか?

これが、反対している人々が何を言っているかわかっていないと思わせる理由だ。「ネットワーク全体をシャットダウン」することはできない。

自分が何を言っているか分かっていなかったことは認める。あなたが何をしているのかを理解しようとしていただけだ。

nimnul 2010年8月27日20:09 UTC
Machoの投稿(2010年8月23日16:39 UTC)
nimnulの投稿(2010年8月23日15:46 UTC)
  1. RSS/メール/Jabberで通知してほしい

それは中央集権的すぎる/検閲されやすい/ハッキングされやすい。サトシだけが持つ特定の秘密鍵で署名されたメッセージのアイデアは理想的だ。任意のノードで導入でき、分散型の手段で広がる。

まあ、私のノードのほとんどはヘッドレスで動いており、GUIをほとんど開かない。だから他の通知手段はやはり便利だ。

サトシが説明する前は、元々のサトシの変更点を理解していなかった。だから今は、メッセージを実装すべきだという意見に賛成だ。