web-dev-qa-db-ja.com

中断の悪用に対して2つのピア間のトランザクションを保証することは可能ですか?

これのひどい例を見てみましょう:

アリスとボブはポケモンのクローンを作りたいと思っています。

彼らはコンソールデバイス間の取引を設定しました。アリスのデバイスはデータのコピーをボブのデバイスに送信し、次にボブのデバイスはデータのコピーをアリスに送信します。各デバイスが結果の保存を開始すると、アリスはデバイスの電源を切り、保存を防ぎます。ボブはしません。ボブは今アリスのポケモンを持っています、そしてアリスはまだ彼女のデバイスにそれのコピーを持っています。

転送を開始する前にダーティビットを設定し、転送が完了していない場合は次の電源投入時に変更を元に戻そうとしたとします。それもうまくいかないようです。両方の当事者が完了した後、お互いに完了確認を送信します。ボブが確認を受信して​​処理している間、アリスは単にデバイスの電源を切る必要があります。ボブがクローンを取得すると、アリスのデータベースの状態が以前に戻ります。

メディエーターのない2つの同等のピアが、適切なタイミングで戦略的に採用されている通信遮断のリスクがある場合、単一のデータで同期できるようにすることは非常に難しいように思えます。しかし、それは不可能ですか?

2
Searinox

あなたが説明する状況は、アリスとボブの両方がデバイスとソフトウェアを完全に制御していないことを前提としています。そうしないと、アリスはローカルのポケモンの削除を防ぐ変更されたソフトウェアを使用する可能性があります。
この仮定が当てはまる場合、つまりアリスがデバイスとソフトウェアを改ざんできない場合は、複数の手順で転送を行うことができます。

  1. アリスはランダムな鍵を作成し、ポケモンを暗号化します
  2. アリスは暗号化されたポケモンをボブに送信しますが、まだキーは送信していません。アリスは、ボブが暗号化されたポケモンを受け取ったことの確認を待ちます。
  3. アリスは地元のポケモンを削除します。
  4. アリスは、確認を得るまで暗号化キーをボブに送信します。ボブは、復号化が成功した後に確認します。確認後にのみ、両方とも不要になったキーを破棄します。

最初の仮定が正しくない場合、つまり、アリスが取引所を管理しているソフトウェアを実際に変更できる場合は、すべての関係者が特定のポケモンの所有者を確認できる外部サービスが必要です。これは不正行為を不可能にすることはありませんが、ポケモンを所有していない誰かがポケモンを使用しているかどうかを検出するために使用できます。コメントに示されているように、ビットコインはそのようなサービスを実行する1つの方法です。

1
Steffen Ullrich