アラートシステムの開発

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

ノードはアラートに対して 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月22日 20:23 UTC)

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

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

mizerydearia 2010年8月23日 08:50 UTC 原文 ·
lfmの投稿(2010年8月22日 20:28 UTC)
FreeMoneyの投稿(2010年8月22日 20:23 UTC)

一人の人間がメッセージを送信する能力を持つというアイデア自体、本当に好きになれない。今その人を信頼していても、後で信頼しなくなるかもしれないし、別の人物に変わるかもしれないし、拷問/買収/脅迫されるかもしれない。

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

全員が鍵を変更したり新しいバージョンにアップグレードしたりするのは大変な作業だ。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日 06:46 UTC)
  1. RSS/メール/Jabberで通知してくれ

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

lfm 2010年8月24日 03:58 UTC 原文 ·
mizerydeariaの投稿(2010年8月22日 23:50 UTC)
lfmの投稿(2010年8月22日 20:28 UTC)
FreeMoneyの投稿(2010年8月23日 05:23 UTC)

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

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

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

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

theymos 2010年8月24日 04:59 UTC 原文 ·

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

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

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

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

mizerydearia 2010年8月25日 00:11 UTC 原文 ·
サトシ・ナカモトの投稿(2010年8月24日 14: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日 14:51 UTC)

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

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

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

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

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

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

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

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

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

mizerydearia 2010年8月25日 09:14 UTC 原文 ·
Machoの投稿(2010年8月24日 18: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/

Macho 2010年8月25日 12:25 UTC 原文 ·
mizerydeariaの投稿(2010年8月25日 00: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 メソッドは通常通り機能する。

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

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

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

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

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

nelisky 2010年8月25日 16:41 UTC 原文 ·

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

jimbobway 2010年8月25日 16:45 UTC 原文 ·
BioMikeの投稿(2010年8月22日 20:15 UTC)

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

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

それとも不可能なのか?<ある政府>はどこまでできるのか?

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

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

jimbobwayの投稿(2010年8月25日 07:45 UTC)
BioMikeの投稿(2010年8月22日 20:15 UTC)

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

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

それとも不可能ですか?<ある政府>はどこまでできるでしょうか?

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

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

BioMikeの投稿(2010年8月22日 20:15 UTC)

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

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

neliskyの投稿(2010年8月24日 16:28 UTC)

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

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

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

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

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

mizerydeariaの投稿(2010年8月24日 15: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日 07:56 UTC)
BioMikeの投稿(2010年8月22日 20:15 UTC)

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

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

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

nelisky 2010年8月25日 19:02 UTC 原文 ·
サトシ・ナカモトの投稿(2010年8月25日 08:59 UTC)
neliskyの投稿(2010年8月24日 16:28 UTC)

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

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

RPCメソッドはJSON-RPCエラーを返し、エラーの説明は「Safe mode: 」の後にアラートで指定された追加テキストが続く。

-testsafemode スイッチを追加した。SVN rev 145。

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

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

FreeMoney 2010年8月25日 22:48 UTC 原文 ·

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

BioMikeの投稿(2010年8月25日 09:23 UTC)
サトシ・ナカモトの投稿(2010年8月25日 07: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、引用ボタンの方が返信ボタンより見つけやすいと思う。

では、理論的には、これは(誰かが)satoshiを逮捕して鍵を渡すよう要求し(あるいは彼のコンピューターから入手し)、ネットワーク全体を停止させられる、最初の制御システムということになるのか?

それともそれは不可能か?(誰かが)どこまでできる?

satoshiにいくつか修辞的な質問だ:

あなたは水責めに耐えられるか? 電気ショックには耐えられるか? あらゆる形の拷問にも? 最後に、あなたはひょっとしてジャック・バウアーじゃないだろうな? マジで。

アラートシステムに関して言えば、誰が気にするんだ? 鍵にできる最大のことは、サイト運営者が -disablesafemode スイッチを追加するかアップグレードするまで、6つのJSON-RPCコマンドを一時的に無効化することだけだ。全ノードは引き続き動作し、生成を続け、ネットワークは稼働したままだ。もし私が対応できなくなっても、どんなスクリプトキディでも2文字追加してアラートシステムを無効化する新バージョンを作る方法を見つけられる。一時的な不便でしかない。

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

では、理論的には、これは(誰かが)satoshiを逮捕して鍵を渡すよう要求し(あるいは彼のコンピューターから入手し)、ネットワーク全体を停止させられる、最初の制御システムということになるのか?

これこそ、反対している人々が何を言っているのか分かっていないと私が思う理由だ。それは「ネットワーク全体を停止」させられない。

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

nimnul 2010年8月27日 20:09 UTC 原文 ·
Machoの投稿(2010年8月23日 16:39 UTC)
nimnulの投稿(2010年8月23日 15:46 UTC)
  1. RSS/メール/Jabberで我々に通知する

それは中央集権的すぎるし、検閲もハックも可能だ。satochiだけが持つ特定の秘密鍵で署名されたメッセージというアイデアの方が理想的だ。任意のノードに導入でき、分散的な手段で広がっていくからだ。

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

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