(57)【特許請求の範囲】
【請求項１】
リプレイ攻撃の検出のためのコンピュータで実施される方法であって、
ブロックチェーンに加えるための少なくとも一つの候補取引を取得することと、
前記候補取引の識別が識別データベースに存在するか否かを確認し、前記識別データベースは、確認範囲に対応する期間内のタイムスタンプを有する取引の複数の識別を備え、前記期間は、前記ブロックチェーンの最新のブロックが前記ブロックチェーンに加えられる時点から開始することと、
前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することと、
を備える方法。
【請求項２】
取得した前記候補取引は、タイムスタンプを備え、
前記候補取引の前記識別が前記識別データベースに存在するか否かを確認することは、前記タイムスタンプが前記確認範囲内に存在するか否か及び前記候補取引の前記識別が前記識別データベースに存在するか否かを確認することを備え、
前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することは、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することを備える請求項１に記載の方法。
【請求項３】
前記候補取引は、タイムスタンプと、取引情報と、を備え、
少なくとも一つの前記候補取引を取得した後であるとともに前記候補取引の識別が識別データベースに存在するか否かを確認する前に、少なくとも前記タイムスタンプ及び前記取引情報に基づいて、前記識別としての役割を果たすハッシュ値を決定することを更に備える請求項２に記載の方法。
【請求項４】
前記候補取引は、タイムスタンプと、取引情報と、少なくとも前記タイムスタンプ及び前記取引情報に基づいて決定されるとともに前記識別としての役割を果たすハッシュ値と、を備え、
少なくとも一つの前記候補取引を取得した後であるとともに前記候補取引の識別が識別データベースに存在するか否かを確認する前に、少なくとも前記タイムスタンプ及び前記取引情報に基づく前記ハッシュ値を確認することによって前記識別を確認することを更に備える請求項２に記載の方法。
【請求項５】
前記タイムスタンプは、少なくとも一つの前記候補取引を開始したユーザ端末によって構成され、
前記ブロックチェーンに加えるための少なくとも一つの前記候補取引を取得することは、前記候補取引を前記ユーザ端末から受け取ることを備える請求項２に記載の方法。
【請求項６】
前記タイムスタンプは、ブロックチェーンノードによって構成され、
前記ブロックチェーンに加えるための少なくとも一つの前記候補取引を取得することは、
少なくとも一つの開始した取引をユーザ端末から受け取ることと、
少なくとも一つの前記候補取引を取得するために開始した前記取引に前記タイムスタンプを付与することと、
を備える請求項２に記載の方法。
【請求項７】
前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記識別を前記識別データベースに加えることを更に備える請求項２に記載の方法。
【請求項８】
前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引を、前記候補取引を記憶するためのキャッシュメモリに加えることを更に備える請求項２に記載の方法。
【請求項９】
前記タイムスタンプが前記確認範囲内に存在しないという判断に応答して、エラーメッセージを、前記候補取引を提示したコンピュータデバイスに返すことを更に備える請求項２に記載の方法。
【請求項１０】
前記識別が前記識別データベースに存在するという判断に応答して、前記候補取引が前記リプレイ攻撃に関連すると判断することを更に備える請求項２に記載の方法。
【請求項１１】
コンセンサス確認を行うことを更に備え、前記候補取引は、前記候補取引が前記リプレイ攻撃に関連しないと判断された場合に前記コンセンサス確認に含まれる請求項２に記載の方法。
【請求項１２】
少なくとも一つの前記候補取引を取得する前に、
前記識別データベースを一つ以上の他のブロックチェーンに同期させることを更に備える請求項１に記載の方法。
【請求項１３】
前記確認範囲は、前記ブロックチェーンの最後のブロックの他のタイムスタンプに基づき、
前記確認範囲は、前記ブロックチェーンの起源ブロックに含まれる請求項１に記載の方法。
【請求項１４】
リプレイ攻撃の検出のためのシステムであって、一つ以上のプロセッサ及び前記一つ以上のプロセッサに結合された一つ以上の非一時的コンピュータ可読記憶媒体を備え、前記一つ以上の非一時的コンピュータ可読記憶媒体は、
ブロックチェーンに加えるための少なくとも一つの候補取引を取得することと、
前記候補取引の識別が識別データベースに存在するか否かを確認し、前記識別データベースは、確認範囲に対応する期間内のタイムスタンプを有する取引の複数の識別を備え、前記期間は、前記ブロックチェーンの最新のブロックが前記ブロックチェーンに加えられる時点から開始することと、
前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することと、
を備える動作を前記システムによって実行させるために前記一つ以上のプロセッサによって実行可能な命令を有するように構成されたシステム。
【請求項１５】
取得した前記候補取引は、タイムスタンプを備え、
前記候補取引の前記識別が前記識別データベースに存在するか否かを確認することは、前記タイムスタンプが前記確認範囲内に存在するか否か及び前記候補取引の前記識別が前記識別データベースに存在するか否かを確認することを備え、
前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することは、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することを備える請求項１４に記載のシステム。
【請求項１６】
前記候補取引は、タイムスタンプと、取引情報と、を備え、
少なくとも一つの前記候補取引を取得した後であるとともに前記候補取引の識別が識別データベースに存在するか否かを確認する前に、前記動作は、少なくとも前記タイムスタンプ及び前記取引情報に基づいて、前記識別としての役割を果たすハッシュ値を決定することを更に備える請求項１５に記載のシステム。
【請求項１７】
前記候補取引は、タイムスタンプと、取引情報と、少なくとも前記タイムスタンプ及び前記取引情報に基づいて決定されるとともに前記識別としての役割を果たすハッシュ値と、を備え、
少なくとも一つの前記候補取引を取得した後であるとともに前記候補取引の識別が識別データベースに存在するか否かを確認する前に、前記動作は、少なくとも前記タイムスタンプ及び前記取引情報に基づく前記ハッシュ値を確認することによって前記識別を確認することを更に備える請求項１５に記載のシステム。
【請求項１８】
前記タイムスタンプは、少なくとも一つの前記候補取引を開始したユーザ端末によって構成され、
前記ブロックチェーンに加えるための少なくとも一つの前記候補取引を取得することは、前記候補取引を前記ユーザ端末から受け取ることを備える請求項１５に記載のシステム。
【請求項１９】
前記タイムスタンプは、ブロックチェーンノードによって構成され、
前記ブロックチェーンに加えるための少なくとも一つの前記候補取引を取得することは、
少なくとも一つの開始した取引をユーザ端末から受け取ることと、
少なくとも一つの前記候補取引を取得するために開始した前記取引に前記タイムスタンプを付与することと、
を備える請求項１５に記載のシステム。
【請求項２０】
前記動作は、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記識別を前記識別データベースに加えることを更に備える請求項１５に記載のシステム。
【請求項２１】
前記動作は、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引を、前記候補取引を記憶するためのキャッシュメモリに加えることを更に備える請求項１５に記載のシステム。
【請求項２２】
前記動作は、前記タイムスタンプが前記確認範囲内に存在しないという判断に応答して、エラーメッセージを、前記候補取引を提示したコンピュータデバイスに返すことを更に備える請求項１５に記載のシステム。
【請求項２３】
前記動作は、前記識別が前記識別データベースに存在するという判断に応答して、前記候補取引が前記リプレイ攻撃に関連すると判断することを更に備える請求項１５に記載のシステム。
【請求項２４】
前記動作は、コンセンサス確認を行うことを更に備え、前記候補取引は、前記候補取引が前記リプレイ攻撃に関連しないと判断された場合に前記コンセンサス確認に含まれる請求項１５に記載のシステム。
【請求項２５】
少なくとも一つの前記候補取引を取得する前に、前記動作は、
前記識別データベースを一つ以上の他のブロックチェーンに同期させることを更に備える請求項１４に記載のシステム。
【請求項２６】
前記確認範囲は、前記ブロックチェーンの最後のブロックの他のタイムスタンプに基づき、
前記確認範囲は、前記ブロックチェーンの起源ブロックに含まれる請求項１４に記載のシステム。
【請求項２７】
ブロックチェーンに加えるための少なくとも一つの候補取引を取得することと、
前記候補取引の識別が識別データベースに存在するか否かを確認し、前記識別データベースは、確認範囲に対応する期間内のタイムスタンプを有する取引の複数の識別を備え、前記期間は、前記ブロックチェーンの最新のブロックが前記ブロックチェーンに加えられる時点から開始することと、
前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することと、
を備える動作を一つ以上のプロセッサによって実行させるために前記一つ以上のプロセッサによって実行可能な命令を有するように構成された非一時的コンピュータ可読記憶媒体。
【請求項２８】
取得した前記候補取引は、タイムスタンプを備え、
前記候補取引の前記識別が前記識別データベースに存在するか否かを確認することは、前記タイムスタンプが前記確認範囲内に存在するか否か及び前記候補取引の前記識別が前記識別データベースに存在するか否かを確認することを備え、
前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することは、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引がリプレイ攻撃に関連しないと判断することを備える請求項２７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２９】
前記候補取引は、タイムスタンプと、取引情報と、を備え、
少なくとも一つの前記候補取引を取得した後であるとともに前記候補取引の識別が識別データベースに存在するか否かを確認する前に、前記動作は、少なくとも前記タイムスタンプ及び前記取引情報に基づいて、前記識別としての役割を果たすハッシュ値を決定することを更に備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３０】
前記候補取引は、タイムスタンプと、取引情報と、少なくとも前記タイムスタンプ及び前記取引情報に基づいて決定されるとともに前記識別としての役割を果たすハッシュ値と、を備え、
少なくとも一つの前記候補取引を取得した後であるとともに前記候補取引の識別が識別データベースに存在するか否かを確認する前に、前記動作は、少なくとも前記タイムスタンプ及び前記取引情報に基づく前記ハッシュ値を確認することによって前記識別を確認することを更に備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３１】
前記タイムスタンプは、少なくとも一つの前記候補取引を開始したユーザ端末によって構成され、
前記ブロックチェーンに加えるための少なくとも一つの前記候補取引を取得することは、前記候補取引を前記ユーザ端末から受け取ることを備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３２】
前記タイムスタンプは、ブロックチェーンノードによって構成され、
前記ブロックチェーンに加えるための少なくとも一つの前記候補取引を取得することは、
少なくとも一つの開始した取引をユーザ端末から受け取ることと、
少なくとも一つの前記候補取引を取得するために開始した前記取引に前記タイムスタンプを付与することと、
を備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３３】
前記動作は、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記識別を前記識別データベースに加えることを更に備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３４】
前記動作は、前記タイムスタンプが前記確認範囲内に存在するとともに前記識別が前記識別データベースに存在しないという判断に応答して、前記候補取引を、前記候補取引を記憶するためのキャッシュメモリに加えることを更に備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３５】
前記動作は、前記タイムスタンプが前記確認範囲内に存在しないという判断に応答して、エラーメッセージを、前記候補取引を提示したコンピュータデバイスに返すことを更に備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３６】
前記動作は、前記識別が前記識別データベースに存在するという判断に応答して、前記候補取引が前記リプレイ攻撃に関連すると判断することを更に備える請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３７】
前記動作は、コンセンサス確認を行うことを更に備え、前記候補取引は、前記候補取引が前記リプレイ攻撃に関連しないと判断された場合に前記コンセンサス確認に含まれる請求項２８に記載の非一時的コンピュータ可読記憶媒体。
【請求項３８】
少なくとも一つの前記候補取引を取得する前に、前記動作は、
前記識別データベースを一つ以上の他のブロックチェーンに同期させることを更に備える請求項２７に記載の非一時的コンピュータ可読記憶媒体。
【請求項３９】
前記確認範囲は、前記ブロックチェーンの最後のブロックの他のタイムスタンプに基づき、
前記確認範囲は、前記ブロックチェーンの起源ブロックに含まれる請求項２７に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願は、一般的には、リプレイ攻撃の検出のためのシステム及び方法に関する。
【背景技術】
【０００２】
（プレイバック攻撃、フレッシュネス攻撃、中間者攻撃としても知られている）リプレイ攻撃は、有効なデータ送信が悪意を持って又は不正に繰り返される又は遅延されるネットワーク攻撃の形態である。これは、ノード（例えば、サーバ）に対する送信の発信元によって又はデータを盗む若しくはデータをノードに再送信する敵によって行われることがある。例えば、リプレイ攻撃は、インターネットプロトコル（ＩＰ）パケットの置き換えによる仮装攻撃の一部として行われる。リプレイ攻撃を説明する別の方法は、別のコンテキストから意図した（又は元の予測される）コンテキストへのメッセージのリプレイを用いるセキュリティプロトコルへの攻撃であり、これによって、プロトコルの実行の完了を成功したと（一つ以上の）オネストノード（ｈｏｎｅｓｔ  ｎｏｄｅ（ｓ））が騙される。例えば、プロトコルは、ブロックチェーン取引プロトコルであってもよい。ブロックチェーンは、同一のアドレス、暗号鍵及び取引システムに従う二つ以上のサブチェーンに分岐してもよい。サブチェーンの合法的取引は、リプレイ攻撃によって他のサブチェーンで悪意を持って繰り返されることがあり、これによって、発信者にとっての損失が生じる。
【０００３】
ブロックチェーンが通常のネットワークに対する様々な利点に対して有利であるとしても、リプレイ攻撃を受けやすい。例えば、ブロックチェーンを通じてＡからＢに２０イーサを送る取引は、継続的にＡの残高から抜き出すリプレイ攻撃においてＢによって繰り返される。したがって、リプレイ攻撃検出は、悪意を持ったブロックチェーン動作の回避及び個人財産の保管に重大である。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本願の種々の実施の形態は、リプレイ攻撃の検出のためのシステム、方法及び非一時的コンピュータ可読媒体を有する。
【課題を解決するための手段】
【０００５】
一態様によれば、リプレイ攻撃の検出のためのコンピュータで実施される方法は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することと、候補取引の識別が識別データベースに存在するか否かを確認し、識別データベースは、確認範囲内に複数の識別を備えることと、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することと、を備える。
【０００６】
一部の実施の形態において、取得した候補取引は、タイムスタンプを備え、候補取引の識別が識別データベースに存在するか否かを確認することは、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別が識別データベースに存在するか否かを確認することを備え、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することは、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することを備える。
【０００７】
一部の実施の形態において、候補取引は、タイムスタンプと、取引情報と、を備える。少なくとも一つの候補取引を取得した後であるとともに候補取引の識別が識別データベースに存在するか否かを確認する前に、少なくともタイムスタンプ及び取引情報に基づいて、方法は、識別としての役割を果たすハッシュ値を決定することを更に備える。
【０００８】
一部の実施の形態において、候補取引は、タイムスタンプと、取引情報と、少なくともタイムスタンプ及び取引情報に基づいて決定されるとともに識別としての役割を果たすハッシュ値と、を備える。少なくとも一つの候補取引を取得した後であるとともに候補取引の識別が識別データベースに存在するか否かを確認する前に、方法は、少なくともタイムスタンプ及び取引情報に基づくハッシュ値を確認することによって識別を確認することを更に備える。
【０００９】
一部の実施の形態において、タイムスタンプは、少なくとも一つの候補取引を開始したユーザ端末によって構成され、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することは、候補取引をユーザ端末から受け取ることを備える。
【００１０】
一部の実施の形態において、タイムスタンプは、ブロックチェーンノードによって構成され、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することは、少なくとも一つの開始した取引をユーザ端末から受け取ることと、少なくとも一つの候補取引を取得するために開始した取引にタイムスタンプを付与することと、を備える。
【００１１】
一部の実施の形態において、方法は、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、識別を識別データベースに加えることを更に備える。
【００１２】
一部の実施の形態において、方法は、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引を、候補取引を記憶するためのキャッシュメモリに加えることを更に備える。
【００１３】
一部の実施の形態において、方法は、タイムスタンプが確認範囲内に存在しないという判断に応答して、エラーメッセージを、候補取引を提示したコンピュータデバイスに返すことを更に備える。
【００１４】
一部の実施の形態において、方法は、識別が識別データベースに存在するという判断に応答して、候補取引がリプレイ攻撃に関連すると判断することを更に備える。
【００１５】
一部の実施の形態において、方法は、コンセンサス確認を行うことを更に備え、候補取引は、候補取引がリプレイ攻撃に関連しないと判断された場合にコンセンサス確認に含まれる。
【００１６】
一部の実施の形態において、方法は、識別データベースを一つ以上の他のブロックチェーンに同期させることと、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別が同期した識別データベースに存在するか否かを確認することと、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することと、候補取引の識別が同期した識別データベースに存在するという判断に応答して、候補取引がリプレイ攻撃に関連すると判断することと、を更に備える。
【００１７】
一部の実施の形態において、少なくとも一つの候補取引を取得する前に、方法は、識別データベースを一つ以上の他のブロックチェーンに同期させることを更に備える。
【００１８】
一部の実施の形態において、識別データベースは、確認範囲に対応する最近の期間内のタイムスタンプを有する取引の情報を備える。
【００１９】
一部の実施の形態において、確認範囲は、ブロックチェーンの最後のブロックの他のタイムスタンプに基づき、確認範囲は、ブロックチェーンの起源ブロックに含まれる。
【００２０】
一部の実施の形態において、確認範囲は、タイムスタンプが確認範囲内にあるか否かの確認を行うブロックチェーンノードの内部クロックに基づく。
【００２１】
他の態様によれば、リプレイ攻撃の検出のためのシステムは、一つ以上のプロセッサ及び一つ以上のプロセッサに結合された一つ以上の非一時的コンピュータ可読記憶媒体を備え、一つ以上の非一時的コンピュータ可読記憶媒体は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することと、候補取引の識別が識別データベースに存在するか否かを確認し、識別データベースは、確認範囲内に複数の識別を備えることと、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することと、を備える動作をシステムによって実行させるために一つ以上のプロセッサによって実行可能な命令を有するように構成される。
【００２２】
他の態様によれば、非一時的コンピュータ可読記憶媒体は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することと、候補取引の識別が識別データベースに存在するか否かを確認し、識別データベースは、確認範囲内に複数の識別を備えることと、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することと、を備える動作を一つ以上のプロセッサによって実行させるために一つ以上のプロセッサによって実行可能な命令を有するように構成される。
【００２３】
ここに開示したスステム、方法及び非一時的コンピュータ可読記憶媒体のこれらの特徴及び他の特徴並びに動作の方法及び構造の関連の素子及び製造のパーツ及び経済性の組合せの機能は、添付図面を参照することにより以下の説明及び添付した特許請求の範囲の考察から更に明らかになり、その全ては、明細書の一部を形成し、同様な参照願号を種々の図面の対応する部分に付す。しかしながら、図面が図示及び説明のみのためのものであるとともに発明の限定を規定することを意図しないことを明示的に理解すべきである。
【００２４】
本技術の種々の実施の形態の所定の特徴を、特に、添付した特許請求の範囲で説明する。技術の特徴及び利点の更なる理解は、発明の原理を利用する理解を助ける実施の形態を説明する以下の詳細な説明及び図面を参照することによって得られる。
【図面の簡単な説明】
【００２５】
【図１】種々の実施の形態によるリプレイ攻撃の検出のための例示的なシステムを示す。
【図２】種々の実施の形態によるリプレイ攻撃検出が行われる例示的な取引を示す。
【図３】種々の実施の形態によるリプレイ攻撃の検出のための例示的な方法のフローチャートである。
【図４Ａ】種々の実施の形態によるリプレイ攻撃の検出のための例示的な方法のフローチャートである。
【図４Ｂ】種々の実施の形態によるリプレイ攻撃の検出のための例示的な方法のフローチャートである。
【図５】種々の実施の形態によるリプレイ攻撃の検出のための例示的なコンピュータシステムのブロック図を示す。
【図６】種々の実施の形態によるリプレイ攻撃の検出のための例示的なコンピュータシステムのブロック図を示す。
【図７】ここで説明する実施の形態のいずれかを実現することができる例示的なコンピュータシステムのブロック図を示す。
【発明を実施するための形態】
【００２６】
ブロックチェーンを、一般的に分散型台帳と称される分散データベースと見なしてもよい。その理由は、動作がネットワークの種々のノード（例えば、コンピュータデバイス）によって実行されるからである。あらゆる情報をブロックチェーンに書き込むとともにブロックチェーンへの保存又はブロックチェーンからの読出しを行ってもよい。ノードは、例えば、ブロックチェーンネットワークをサポートするとともにブロックチェーンネットワークの運営を円滑に保つコンピュータデバイス又は大型コンピュータシステムである。各ノードは、ブロックチェーンの機能の一部又は全てを提供してもよい。例えば、コンセンサス確認を行うノードを、コンセンサス参加ノード（又はコンセンサスノード）と称してもよい。
【００２７】
種々の実施の形態において、コンセンサスは、一般的に受け入れられる処理結果を実現するためのブロックチェーンノードのネットワークの規則のアルゴリズムであってもよい。例えば、ブロックチェーンノードは、ネットワークラグのために異なる順序で取引を受け取ってもよく、その問題を、コンセンサスによって取り組んでもよい。一例において、「プルーフオブワーク」コンセンサスシステムの下で、ブロックチェーンノードは、ブロックチェーンのブロック及び受け取る報酬を確認するためにハードウェア又は計算能力を適用するマイナーの装置を備えてもよい。プルーフオブワークを生成することは、有効なプルーフオブワークが生成される前に概して多くの試行錯誤を必要とするために低い可能性を有するランダムなプロセスとなることがある。ビットコイン（登録商標）は、ハッシュキャッシュ（Ｈａｓｈｃａｓｈ）プルーフオブワークシステムを用いる。他の例において、「プルーフオブステーク／サービス」コンセンサスシステムの下では、所定のレベルの議決権を有するブロックチェーンノードを、非コンセンサスノードとは対照的に、取引確認の責任を引き受けるコンセンサス／マスタ／プライマリノードと称してもよい。コンセンサスノードは、新たなブロックチェーンブロックを生成するとともに、例えば、ブロックチェーンのサービス料を設定するブロックチェーンに代わって決定を下すことができる。コンセンサスノードは、多量の暗号通貨に関連するとともに互いに合意した所定のコンセンサス規則に基づいて新たな取引を確認してもよい。コンセンサスノードを決定する規則に基づいて、プルーフオブステーク／サービスコンセンサスシステムを、チェーンベースのプルーフオブステーク／サービスコンセンサスシステム、ビサンチンフォールトトレランスアルゴリズム（ＢＦＴ）プルーフオブステーク／サービスコンセンサスシステム等として実現してもよい。本明細書において、開示したブロックチェーンシステム又は他のブロックチェーンシステムのフルノード、コンセンサスノード又は他の同等のノードは、取引をブロックチェーンノードとして確認することができる。例えば、ブロックチェーンシステムは、パブリックブロックチェーン、コンソーシアムブロックチェーン、プライベートブロックチェーン等を備えてもよい。
【００２８】
ＵＴＸＯ（未使用トランザクションアウトプット）モデルとは異なり、イーサリアムは、大域状態（ｇｌｏｂａｌ  ｓｔａｔｅ）としての各勘定残高を追跡し続ける（アカウントベース取引モデルとも称される）勘定残高モデルに基づく。取引中、勘定残高は、勘定残高が使用される取引金額以上であることを確実にするためにチェックされる。勘定残高モデルがイーサリアムで作動する方法の一例を提供する。
【００２９】
１．アリスは、マイニングによって５イーサを獲得する。アリスが５イーサを有することがシステムに記録される。
【００３０】
２．アリスがボブに１イーサを与えることを所望し、システムは、アリスの預金額から１イーサを差し引き、したがって、アリスは、４イーサを有する。
【００３１】
３．その後、システムは、ボブの預金額を１イーサだけ増やす。システムは、ボブが最初に２イーサを有することを知っており、したがって、ボブの預金額は、３イーサに増える。
【００３２】
勘定残高モデルの下では、ブロックチェーンノードは、イーサ取引の全てに加えて各スマートコントラクトの最近の状態を記憶する。各イーサリアムアプリケーションに対して、ネットワークは、アカウントナンス、各ユーザの残高、全てのスマートコントラクトコード（例えば、２進コード）及び（例えば、ハッシュを記憶するための）記憶領域を含む「状態」又は現在の情報を記録してもよい。
【００３３】
以前の取引から使用されていない量として利用できる残高を規定することによってリプレイ攻撃又は二重支払いを防止するＵＴＸＯモデルとは異なり、勘定残高モデルは、リプレイ攻撃を確かめるための機構としてアカウントナンスを用いる。アカウントナンスは、リプレイ攻撃を防止するための各口座の取引カウンタである。アカウントナンスとプルーフオブワークナンスの両方が勘定残高モデルに存在することがあるとしても、アカウントナンスを、プルーフオブワークコンセンサスシステムのプルーフオブワークナンスと区別することができ、プルーフオブワークナンスは、ＵＴＸＯモデルの下でプルーフオブワーク条件を満たすことを試みるために調整することができるブロックの意味のない値である。勘定残高モデル（プルーフオブステーク／サービスシステム）を最も参照して説明したが、開示したシステム及び方法は、勘定残高モデル（例えば、イーサリアムシステム）の下での応用に限定されない。
【００３４】
リプレイ攻撃は、しばしば、所定の資産を二重払いすることによって違法に利益を得るために用いられる。二重払いを「成功させる」ために、悪意あるユーザは、典型的には、取引をある関係者に送り、関係者が手続を行うのを待機し、この第１の取引から返ってくるものを収集し、高いガス価格（ｇａｓ  ｐｒｉｃｅ）（イーサリアムでの計算の価格）を有する他の取引を迅速に送り、最初の取引を無効にする最初にマイニングされた第２の取引を有する。第２の取引は、しばしば、一部の変更（例えば、時間、ガス価格、受信者又は送信者によって構成される他のパラメータ）を有する第１の取引の複製である。第２の取引は、第１の取引と同一の識別（例えば、ハッシュ）を用いてもよい。高いガス価格が、第２の取引を最初にマイニングするマイナーに影響を及ぼすので、第１の取引の前にマイニングされた第２の取引を有することによって、悪意のあるユーザは、第２の取引を実行しながら第１の取引からの利益（ｒｅｔｕｒｎ）を保持できるようになることがあり、したがって、二重払いを実現する。アカウントナンスの使用は、この問題を除去することを意図する。
【００３５】
イーサリアムで取引を行うとき、連続番号が、アカウントナンスとして同一の口座の各取引に付される。したがって、アカウントナンスは、所定の口座アドレスから送られた取引の数を表してもよい。アカウントナンスは、ノードを含むブロックチェーンネットワークによって維持される。各ノードは、アカウントナンスの値に従って特定の口座からの取引を厳密に処理する。したがって、アカウントナンス値を正確に増分し損なう結果として、種々のエラーが生じる。例えば、最近のアカウントナンスが１２１であると仮定すると、口座の所有者が、（アカウントナンスの再使用を試みようとして）１２１以下のアカウントナンスの同一の口座に対する新たな取引を送る場合、ノードは、取引を拒否する。同一の仮定の下で、口座の所有者が、１２３以上のアカウントナンスの新たな取引を送る場合、取引は、このギャップが埋まるまで、すなわち、アカウントナンス１２２の取引が処理されるまで処理されない。
【００３６】
背景技術で説明したように、リプレイ攻撃検出は、悪意を持ったブロックチェーン動作の回避及び個人財産の保管に重大である。ブロックチェーンが分散型コンセンサス確認に有利であるとしても、リプレイ攻撃を受けやすい。特に、アカウントナンス機構は、所定の不都合又は欠陥を有する。例えば、取引を開始するために、ユーザ端末は、最初に、ブロックチェーンノードからアカウントナンスを取得する必要があり、これによって、通信負荷（ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｂｕｒｄｅｎ）がブロックチェーンノードに課される。他の例として、アカウントナンス機構は、以下のような複数の状況に対して信頼性がない。状況（１）において、口座は、同一の取引手数料の第１の取引及び次に行われる第２の取引を同一のブロックチェーンノードに送る。しかしながら、順序不同のネットワークデータパケット伝送のために第１の取引の前に第２の取引を受け取る場合、ブロックチェーンノードは、第２の取引を行った後に第１の取引を行い、これによって、アカウントナンス機構に従わないことによる両方の取引の実行の失敗が生じる。状況（２）において、口座は、第１の取引及び次に行われる第２の取引を同一のブロックチェーンノードに送り、第２の取引は、更に高い取引手数料を有する。利益を最大にするために、ブロックチェーンノードは、第２の取引を優先的に行った後に第１の取引を行うようにプログラムされることがあり、これによって、アカウントナンス機構に従わないことによる両方の取引の実行の失敗が生じる。状況（３）において、口座は、種々のユーザ端末から並列に種々の取引を送るが、これらの取引は、同一のアカウントナンス値を有する。その結果、取引のうちの最大でも一つしか処理が成功しない。
【００３７】
現在の技術の欠陥を少なくとも軽減し、上述した技術的課題の技術的解決を提供し、かつ、コンピュータ機能を向上させるために、リプレイ攻撃の検出のためのシステム及び方法を開示する。後に議論するように、種々の実施の形態において、タイムスタンプ確認及び取引識別確認の組合せを、安定したリプレイ攻撃の検出を実現するためにアカウントナンスの使用に取って代わるために用いることができる。したがって、悪意のある取引を、公正な取引から適時に識別するとともに廃棄することができる。
【００３８】
図１は、種々の実施の形態による種々の開示したステップ及び方法を実施する例示的なシステム１００を示す。図示したように、ブロックチェーンネットワークは、複数のブロックチェーンノード（例えば、ノード１、ノード２、ノード３、ノード４、ノードｉ等）を備えてもよい。ブロックチェーンノードは、通信を行う一つのブロックチェーンノードを有するネットワーク（例えば、ピアツーピアネットワーク）を形成してもよい。図示したようなブロックチェーンノードの順番及び数は、単なる例示であり、説明のために簡単化している。ブロックチェーンノードを、サーバ、コンピュータ等で実現してもよい。各ブロックチェーンノードは、ＴＣＰ／ＩＰのような種々のタイプの通信方法によって互いに結合された一つ以上の物理的はハードウェアデバイス又は仮想的なデバイスに対応してもよい。分類に応じて、ブロックチェーンノードは、フルノード、Ｇｅｔｈノード、コンセンサスノード等を備えてもよい。
【００３９】
種々の実施の形態において、ユーザＡ及びユーザＢは、ブロックチェーンコントラクト（例えば、スマートコントラクト）に関与する又は関与しない取引をブロックチェーンノードに行わせるためにラップトップ及び携帯電話のような対応する装置を用いてもよい。一例において、ユーザＡは、ユーザＡの口座の一部の資産をユーザＢの口座に移すことによってユーザＢとの取引を所望してもよい。ユーザＡ及びユーザＢは、取引の開始、進行又はアクセスを行うために適切なブロックチェーンソフトウェア（例えば、暗号通貨ウォレット）がインストールされた（ユーザ端末とも称される）対応するデバイスノードＡ及びデバイスノードＢを用いてもよい。ユーザＡのデバイスノードＡを、着信者ノードと称されるユーザＢのデバイスノードＢとの取引を開始する開始ノード称してもよい。ノードＡは、ノード１との通信を介してブロックチェーンにアクセスしてもよく、ノードＢは、ノード２との通信を介してブロックチェーンにアクセスしてもよい。ノードＡ、ノードＢ又は同様のノードは、取引をブロックチェーンに加えることを要求するためにノード１、ノード２又は同様のノードを介してブロックチェーンに取引を提示してもよい。ブロックチェーンをオフにすることによって、ノードＡ及びノードＢは、通信の他のチャネル（例えば、ノード１及びノード２を介することのない通常のインターネット通信）を有してもよい。一部の実施の形態において、ノードＡのブロックチェーンソフトウェアを、ブロックチェーンノード１のフロントエンドとみなしてもよく、ブロックチェーンノード１は、ブロックチェーンソフトウェアのバックエンドを実行する。
【００４０】
図１のノードの各々は、プロセッサと、ここで説明するリプレイ攻撃の検出のための種種の動作をノード（例えば、プロセッサ）によって実行させるためにプロセッサによって実行可能な命令を有するように構成された非一時的コンピュータ可読記憶媒体を備える。各ノードは、他のノード及び／又は他の装置と通信を行うためにソフトウェア（例えば、取引プログラム）及び／又はハードウェア（例えば、有線、無線接続）がインストールされてもよい。例えば、ノードＡ及びノードＢのようなユーザ装置に暗号通貨ウォレットのようなユーザエンドソフトウェアをインストールしてもよく、ブロックチェーンノードにブロックチェーン取引処理ソフトウェアをインストールしてもよい。ノードハードウェア及びソフトウェアの更なる詳細を、図５〜７を参照しながら後に説明する。
【００４１】
ブロックチェーンノードはそれぞれ、メモリを備えてもよい又はメモリに結合してもよい。一部の実施の形態において、メモリは、プールデータベースを格納してもよい。プールデータベースは、分散して複数のブロックチェーンノードにアクセス可能であってもよい。例えば、プールデータベースはそれぞれブロックチェーンノードのメモリに格納されてもよい。プールデータベースは、ユーザによって操作されるノードＡ及びノードＢのような一つ以上のユーザ装置によって提示される複数の取引を記憶してもよい。イーサリアムシステムに関連する一部の実施の形態において、未確認の取引の取引要求を受け取った後、着信者ブロックチェーンノードは、取引の一部の予備確認を行ってもよい。例えば、図１を参照すると、ノード１は、ノードＡからの取引を受け取った後に予備確認を行ってもよい。一旦確認が行われると、取引を、着信者ブロックチェーンノードのプールデータベースに記憶してもよく、着信者ブロックチェーンノードは、取引を一つ以上の他のブロックチェーンノード（例えば、ノード３、ノード４）に送ってもよく、他のブロックチェーンノードは、着信者ノードによって行われる処理を繰り返す。一旦対応するプールデータベースの取引が所定のレベルに到達すると、ブロックチェーンノードはそれぞれ、コンセンサス規則又は他の方法に従う対応するプールデータベースの取引のバッチを確認してもよい。取引がブロックチェーンコントラクトに関与する場合、ブロックチェーンノードは、ブロックチェーンコントラクトをローカルに実行してもよい。（例えば、コンセンサス規則に従う）取引のバッチの確認に成功する所定のブロックチェーンノードは、ブロックチェーンのローカルコピーを加えるとともに結果を他のブロックチェーンノードに分散させるために取引をパックしてもよい。所定のブロックチェーンノードは、最初の確認の成功を完了するもの、取得される確認権限（ｖｅｒｉｆｉｃａｔｉｏｎ  ｐｒｉｖｉｌｅｄｇｅ）を有するもの又は他のコンセンサス規則に基づいて決定されるものであってもよい。他のブロックチェーンノードは、取引をローカルに行い、（例えば、ハッシュ計算を行うことによって）実行結果を互いに確認し、ブロックチェーンのコピーを所定のブロックチェーンノードのコピーに同期させてもよい。ブロックチェーンのローカルコピーを更新することによって、ブロックチェーンノードは、そのような情報をローカルメモリに書き込んでもよい。確認をある時点で失敗した場合、取引は拒否される。
【００４２】
図２は、種々の実施の形態によるリプレイ攻撃検出を行う例示的な取引を示す。
【００４３】
一部の実施の形態において、開始ノードは、アドレス３ｄｆ５３ｈの口座（口座Ａ）からアドレス４５ｗｑｒ１の口座（口座Ｂ）への２イーサの取引Ｘを開始する。取引前に、口座Ａは、１０イーサを有し、口座Ｂは、１イーサを有する。取引Ｘを、開始ノード（例えば、コンピュータ、携帯電話）によってブロックチェーンノード（例えば、フルノード）に提示してもよい。例えば、取引Ｘが開始ノードによってブロックチェーンノードを介して提示されたとき、取引Ｘがブロックチェーンノードによって提示されたとき又は取引Ｘがコンセンサス確認を行う他のブロックチェーンノードによって受け取られたとき、取引Ｘをタイムスタンプに関連させてもよい。取引Ｘを、取引Ｘが確認されるとともにブロックチェーンに加えられる前の候補取引と称してもよい。ブロックチェーンノードは、候補取引Ｘを他の候補取引と共にプールデータベースに保存してもよい。ブロックチェーンノードは、取引Ｘの識別（例えば、ハッシュ）を識別データベース（例えば、ハッシュテーブル）に保存してもよい。
【００４４】
一部の実施の形態において、複数のブロックチェーンノードは、コンセンサス規則に従ってプールデータベースの候補取引を確認してもよい。例えば、ブロックチェーンノードは、送金する口座が十分な資金を有するか否か、送金する関係者及び受け取る関係者が取引を承認したか否か、取引口座が許可された範囲内にあるか否か等を確認してもよい。コンセンサス確認によって、ブロックチェーンノードは、識別データベースに記憶された取引の全ての識別を含むために識別データベースを同期させてもよい。例えば、識別データベースはそれぞれ、所定の最近の期間の取引を記憶してもよい。リプレイ攻撃検出のために、ブロックチェーンノードは、タイムスタンプが最近の期間内にあるか否かを確認し、タイムスタンプが最近の期間内にある場合に、識別データベースに対する候補取引をリプレイ攻撃から守ってもよい。
【００４５】
タイムスタンプ確認及び識別確認を、コンセンサス確認後に１回行ってもよい又はコンセンサス確認前及びコンセンサス確認後の２回行ってもよい。コンプライアンスを満たす場合、ブロックチェーンノードは、確認した候補取引を、ブロックチェーンに加えるために新たなブロックにパックしてもよい。したがって、取引Ｘがブロックチェーンに加えられたときに、２イーサを口座Ｂに移す口座Ａの取引Ｘが認識される。
【００４６】
図３は、種々の実施の形態によるリプレイ攻撃検出のための例示的なステップ３００を示す。ステップ３００を、図１のシステム１００の一つ以上の構成要素（例えば、ノードＡ、ノード１、ノードＡとノード１との組合せ、ノード２、ノードｉ）によって実現してもよい。後に示す動作は、説明を意図したものである。実現に応じて、例示的なステップ３００は、種々の順番で又は並列に実行される追加のステップ、更に少ないステップ又は代替的なステップを有してもよい。
【００４７】
種々の実施の形態において、上述したように、タイムスタンプが、例えば、勘定残高モデルの下で取引に付与される。一例において、取引開始ノード（例えば、図１のノードＡ）又は代替的なユーザ端末は、確認のためにブロックチェーンノードの未確認取引の提示にタイムスタンプ（例えば、タイムスタンプパラメータ）を付与してもよい。代替的には、未確認取引を受け取るブロックチェーンノード（例えば、図１のノード１）は、タイムスタンプを付与してもよい。タイムスタンプは、種々のレベル（例えば、ミリ秒レベル）で正確となることができる。タイムスタンプの精度を上げるに従って、開示したシステム及び方法は、単位時間内に一つの口座によって開始される更に多くの取引をサポートすることができる。例えば、タイムスタンプが１０ミリ秒で正確である場合、開示したシステム及び方法は、リプレイ攻撃として意図されたものを阻止しながら１００の互いに異なるユーザ端末にログオンされた同一の口座によって開始される最大で約１００の互いに異なる取引をサポートすることができる。
【００４８】
一部の実施の形態において、確認範囲を、アカウントナンスの上述した不都合を少なくとも克服するために用いてもよい。確認範囲は、最近の取引がリプレイ攻撃から守られた時間窓である。確認範囲を、例えば、最近のブロックのタイムスタンプがブロックチェーンで広く受け入れられた後のブロックチェーンの最近のブロックのタイムスタンプからの期間内で世界基準に関連して規定してもよい。例えば、ブロックチェーンの最近のブロックを２０１８年６月８日の８時４２分４４秒の北京時間に加えてもよく、確認範囲を、当該時間の２時間前及び／又は２時間後としてもよい。コンセンサス確認の前に、（例えば、内部クロックに基づく）ノードの現地時間を代替的に用いてもよい。コンセンサス確認の前後に、ノードの内部クロックが世界基準に略一致する場合、ノードの現地時間を代替的に用いてもよい。有効範囲を、リプレイ攻撃検出を効果的に持続するのに十分長くするとともにデータ記憶要求を制限するのに十分短くすることができる。有効範囲を、各ブロックノードが同一の確認範囲に合意するとともに用いることを確実にするためにブロックチェーンの起源ブロック（初めてのブロック）に含めてもよい。確認範囲を用いることによって、リプレイ攻撃検出は、開始ノードの時間とブロックチェーンノードの時間の間の同期も互いに異なるブロックチェーンノードの間のシステム時間の間の同期も必要としない。また、ブロックチェーンノードは、異なる時間で同一の候補取引を確認するとともに同一の結果を取得してもよい。
【００４９】
一部の実施の形態において、ブロックチェーンノードは、候補取引を受け取ると、確認範囲に基づいて候補取引のタイムスタンプを確認してもよい。タイムスタンプの確認が成功するとともにリプレイ攻撃が検出されない場合、ブロックチェーンノードは、確認範囲の候補取引の識別を記憶してもよい。例えば、ブロックチェーンノードは、確認した取引のハッシュをブロックチェーンノードのメモリ（例えば、キャッシュメモリ）の取引ハッシュテーブルに記憶させてもよい。キャッシュメモリへの記憶によって、取引ハッシュテーブルからの迅速なデータの問合せが可能になり、したがって、全体的な取引効率が上がる（例えば、１秒ごとの取引の数が増加する）。記憶されるハッシュテーブルは、確認範囲に対応する最近の期間（例えば、最近の２時間）内の情報を記憶してもよい。確認範囲を与えることによって、ブロックチェーンノードは、もはやブロックチェーン全体に対するリプレイ攻撃を調べる必要がなく、リプレイ攻撃を調べることは、しばしば、ハードディスクから調べることによって長時間を要し、ブロックチェーンに継続的に加えられるブロックが増加する。それに対し、確認範囲から収集した情報に対応するキャッシュメモリから調べることは、リプレイ攻撃検出の効率を著しく上げることができる。ステップの概要を以下で説明する。
【００５０】
ステップ３０１において、ブロックチェーンノードは、確認のために開始ノードによって提示されるとともにブロックチェーンに加えられる候補取引を取得してもよい。ステップ３０２において、ブロックチェーンノードは、取引タイムスタンプを確認してもよい。確認が成功した場合、ステップ３０３を実行し、ブロックチェーンノードは、候補取引の取引ハッシュがハッシュテーブルに存在するか否かを判断する。ハッシュテーブルは、確認範囲に対応する期間中の全ての取引のハッシュを記憶してもよい。候補取引の取引ハッシュがハッシュテーブルに既に存在する場合、候補取引がリプレイ攻撃に関するものであることを表し、確認が失敗する。それに対し、ステップ３０４で確認が成功すると、ステップ３０５において、ブロックチェーンノードは、取引ハッシュをハッシュテーブルに保存する。ステップ３０２の確認が失敗した場合、ステップ３０６を実行し、エラーメッセージを、取引を提示したユーザ端末に返す。ステップ３０３の判断が失敗である場合、ステップ３０６を実行し、最古のタイムスタンプを有する取引は、真正の取引として取り扱われ、後の全ての取引は、潜在的なリプレイ攻撃とみなされ、廃棄される。後の取引のハッシュをハッシュテーブルから除去してもよい。
【００５１】
一部の実施の形態において、各ノードによって（コンセンサス規則に従う取引を確認する）取引のマイニングを開始できるようにするコンセンサス合意に対して、リプレイ攻撃は、種々のブロックチェーンノードをターゲットとすることがあり、ターゲットにされたブロックチェーンノードは、コンセンサス規則に従う取引の確認を行う前に脅威を検出することができない。したがって、ブロックチェーンノードがコンセンサス規則に従う取引の確認を行った後に、ブロックチェーンノードは、ハッシュテーブルの完全な情報を取得するとともにリプレイ攻撃から守るためにステップ３０２〜３０５を実行することができる。したがって、ステップ３０２〜３０５を、ブロックチェーンノードがコンセンサス規則に従う取引の確認を行った後に実行してもよい。しかしながら、ステップ３０２〜３０５を、ブロックチェーンノードがコンセンサス規則に従う取引の確認を行う前に実行してもよい。取引の確認の前にステップ３０２〜３０５を実行することによって、潜在的なリプレイ攻撃を事前に除去することができる。すなわち、ステップ３０２〜３０５を、（１）コンセンサス規則に従う取引の確認を行う前とコンセンサス規則に従う取引の確認を行った後の両方で実行してもよい又は（２）コンセンサス規則に従う取引の確認を行った後に実行してもよい。ステップ３０２〜３０５を１回行うか２回行うかに関係なく、ステップ３０２及びステップ３０３０を、結果に影響を及ぼすことなく任意の順番で実行してもよい。
【００５２】
図４Ａは、本開示の種々の実施の形態による情報保護のための例示的な方法４００のフローチャートを示す。方法４００を、図１のシステム１００の一つ以上の構成要素（例えば、ノード１、ノードＡとノード１の組合せ、ノード２，．．．，ノードｉ）によって実施してもよい。方法４００を、一つ以上のブロックチェーンノードによって実施してもよい。方法４００を、システム又は装置（例えば、コンピュータ、サーバ）によって実施してもよい。システム又は装置は、一つ以上のプロセッサと、一つ以上のプロセッサに結合された一つ以上の非一時的コンピュータ可読媒体とを備え、非一時的コンピュータ可読媒体は、システム又は装置（例えば、プロセッサ）によって方法４００を実施させるために一つ以上のプロセッサによって実行可能な命令を有するように構成される。実現に応じて、方法４００は、種々の順番で又は並列に実行される追加のステップ、更に少ないステップ又は代替的なステップを有してもよい。
【００５３】
ブロック４４１は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得し、取得した候補取引は、タイムスタンプを備えることを備える。
【００５４】
ブロック４４２は、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別（例えば、ハッシュ値又は代替的な識別）が識別データベース（例えば、ハッシュテーブル）に存在するか否かを確認することを備える。
【００５５】
ブロック４４３は、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することを備える。
【００５６】
後に説明する方法４５０の種種の用語、実施の形態及び例を方法４００に同様に適用してもよい。
【００５７】
図４Ｂは、本開示の種々の実施の形態による情報保護のための例示的な方法４５０のフローチャートを示す。方法４５０を、図１のシステム１００の一つ以上の構成要素（例えば、ノード１、ノードＡとノード１の組合せ、ノード２，．．．，ノードｉ）によって実施してもよい。方法４５０を、一つ以上のブロックチェーンノードによって実施してもよい。方法４５０を、システム又は装置（例えば、コンピュータ、サーバ）によって実施してもよい。システム又は装置は、一つ以上のプロセッサと、一つ以上のプロセッサに結合された一つ以上の非一時的コンピュータ可読媒体とを備え、非一時的コンピュータ可読媒体は、システム又は装置（例えば、プロセッサ）によって方法４５０を実施させるために一つ以上のプロセッサによって実行可能な命令を有するように構成される。実現に応じて、方法４５０は、種々の順番で又は並列に実行される追加のステップ、更に少ないステップ又は代替的なステップを有してもよい。
【００５８】
ブロック４５１は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することを備える。取得した候補取引は、タイムスタンプを備えてもよい。一部の実施の形態において、ブロックチェーンは、勘定残高モデル（例えば、イーサリアムシステム、実用ビサンチンフォールトトレランス（ＰＢＦＴ）システムのようなＢＦＴシステム、ハニーバジャー又はハッシュグラフシステム）に基づいてもよいが、開示したシステムは、リプレイ攻撃の検知のための（存在する場合の）アカウントナンスの使用に取って代わる。
【００５９】
一部の実施の形態において、取得した候補取引は、タイムスタンプを備える。候補取引は、タイムスタンプと、取引情報と、少なくともタイムスタンプ及び取引情報に基づいて決定されるとともに識別としての役割を果たすハッシュ値と、を備える。少なくとも一つの候補取引を取得した後であるとともに候補取引の識別が識別データベースに存在するか否かを確認する前に、方法は、少なくともタイムスタンプ及び取引情報に基づくハッシュ値を確認することによって識別を確認することを更に備える。例えば、候補取引は、タイムスタンプ、起点（取引発信者アドレス）、宛先（取引着信者アドレス）、価値（取引アイテム）、データ（存在する場合のブロックチェーンコントラクト）、取引の支払い（例えば、ガスリミット（Ｇａｓ  Ｌｉｍｉｔ）、ガス価格）、ハッシュ値（取引の固有の識別として用いるためのハッシュ値）及び／又は他の情報（例えば、署名（発信者による承認の証明））のような一つ以上のパラメータを備えてもよい。そのようなパラメータを、取引構造体と集合的に称してもよい。タイムスタンプ（及び署名）以外に含まれるパラメータを取引情報と称してもよい。ハッシュ値を、例えば、タイムスタンプ及び取引情報を入力としてとるハッシュ関数を使って、取引情報に基づいて（例えば、候補取引を開始したノードＡのようなノードによって）決定してもよい。少なくともタイムスタンプ及び取引情報に基づいてハッシュ値を確認するために、候補取引を取得するブロックチェーンノード（例えば、ノード１）は、ハッシュ値をチェックするために入力を有するハッシュ関数を再計算してもよい。
【００６０】
一部の実施の形態において、候補取引は、タイムスタンプと、取引情報と、を備える。少なくとも一つの候補取引を取得した後であるとともに候補取引の識別が識別データベースに存在するか否かを確認する前に、少なくともタイムスタンプ及び取引情報に基づいて、方法は、識別としての役割を果たすハッシュ値を決定することを更に備える。例えば、候補取引は、タイムスタンプ、起点、宛先、価値、データ、取引の支払い及び／又は他の情報のような一つ以上のパラメータを備えてもよい。タイムスタンプ以外の含まれるパラメータを取引情報と称してもよい。ハッシュ値を、例えば、タイムスタンプ及び取引情報を入力としてとるハッシュ関数を使って、タイムスタンプ及び取引情報に基づいて（例えば、候補取引を受け取ったノード１のようなブロックチェーンノードによって）決定してもよい。
【００６１】
一部の実施の形態において、タイムスタンプは、少なくとも候補取引を開始したユーザ端末によって構成され、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することは、候補取引をユーザ端末から受け取ることを備える。例えば、ユーザ端末は、候補取引をノード１に送る図１のノードＡであってもよい。ノードＡは、候補取引をノード１に送る前に候補取引にタイムスタンプを付与してもよい。
【００６２】
一部の実施の形態において、タイムスタンプは、ブロックチェーンノードによって構成され、ブロックチェーンに加えるための少なくとも一つの候補取引を取得することは、少なくとも一つの開始した取引をユーザ端末から受け取ることと、少なくとも一つの候補取引を取得するために開始した取引にタイムスタンプを付与することと、を備える。例えば、ユーザ端末は、候補取引をノード１に送る図１のノードＡであってもよい。ノードＡは、候補取引をノード１に送る前に候補取引にタイムスタンプを付与しなくてもよく、ノード１は、受け取った候補取引にタイムスタンプを付与してもよい。候補取引を受け取る最初のブロックチェーンノードとして、ノード１は、ノード１の内部クロック又は代替的な時間源（ｔｉｍｅ  ｓｏｕｒｃｅ）に基づいてタイムスタンプを付与してもよい。一旦他のブロックチェーンノードが後に候補取引を受け取ると、他のブロックチェーンノードは、ノード１によって付与されたタイムスタンプを取得してもよい。
【００６３】
ブロック４５２は、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別（例えば、ハッシュ値又は代替的な識別）が識別データベース（例えば、プールデータベースのハッシュテーブル）に存在するか否かを確認し、識別データベースは、確認範囲内に複数の識別を備えることを備える。
【００６４】
一部の実施の形態において、候補取引の識別が識別データベースに存在するか否かを確認することは、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別が識別データベースに存在するか否かを確認することを備える。タイムスタンプの確認及び識別の確認を任意の順番で行うことができる。識別データベースを記憶媒体に格納してもよい。識別データベースをキャッシュメモリに格納してもよい。
【００６５】
一部の実施の形態において、識別データベースは、確認範囲に対応する最近の期間内のタイムスタンプを有する取引の情報を備える。例えば、各ブロックチェーンノードは、ブロックチェーンの最後のブロックのタイムスタンプから２時間の間にブロックチェーンノードによって受け取られた候補取引のハッシュを記憶する識別データベースを維持してもよい。ブロックチェーンノードは、記憶したハッシュをプールするために各コンセンサス確認で識別データベースの同期をとってもよい。各コンセンサス確認の後、新たなブロックをブロックチェーンに加えてもよく、ブロックチェーンの最後のブロックのタイムスタンプが適用される。例えば、ブロックチェーンの最後のブロックに所定の日付の午前５時を付与してもよく、確認範囲は、所定の日付の午前５時から午前７時までであってもよい。そして、新たなブロックに午前７時が付与された後、確認範囲は、所定の日付の午前７時から午前９時までとなる。したがって、識別データベースのハッシュを、確認範囲内のハッシュを加えることによって及び／又は確認範囲外のハッシュを除去することによって更新してもよい。各ハッシュを、ハッシュが確認範囲内であるか確認範囲外であるかを判断するために対応するタイムスタンプに関連させてもよい。
【００６６】
一部の実施の形態において、確認範囲は、ブロックチェーンの最後のブロックの他のタイムスタンプに基づき（例えば、ブロックチェーンネットワークによって一般的に合意された他のタイムスタンプ＋他のタイムスタンプからの確認範囲）、確認範囲は、ブロックチェーンの起源ブロックに含まれる。
【００６７】
一部の実施の形態において、確認範囲は、タイムスタンプが確認範囲内にあるか否かの確認を行うブロックチェーンノードの内部クロックに基づく。
【００６８】
ブロック４５３は、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することを備える。一部の実施の形態において、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することは、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することを備える。
【００６９】
一部の実施の形態において、方法４５０は、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、識別を識別データベースに加えることを更に備える。
【００７０】
一部の実施の形態において、方法４５０は、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引を、候補取引を記憶するためのキャッシュメモリに加えることを更に備える。例えば、キャッシュメモリは、プールデータベースであってもよい。キャッシュメモリは、識別データベース（例えば、ハッシュテーブル）も記憶してもよい。
【００７１】
一部の実施の形態において、方法４５０は、タイムスタンプが確認範囲内に存在しないという判断に応答して、エラーメッセージを、候補取引を提示したコンピュータデバイスに返すことを更に備える。候補取引は、リプレイ攻撃に関連しても関連しなくてもよいが、無効な取引である。その理由は、取引候補が確認範囲外（例えば、現在の時間よりずっと前）であるからである。したがって、候補取引をブロックチェーンに加えるのを拒否される。
【００７２】
一部の実施の形態において、方法４５０は、識別が識別データベースに存在するという判断に応答して、候補取引がリプレイ攻撃に関連すると判断することを更に備える。したがって、候補取引をブロックチェーンに加えるのを拒否される。
【００７３】
方法４５０を、イーサリアムシステム、ＰＢＦＴシステム、ハニーバジャー又はハッシュグラフシステムのような種々のブロックチェーンシステムで実施してもよい。一部の実施の形態において、方法は、コンセンサス確認を行うことを更に備え、候補取引は、候補取引がリプレイ攻撃に関連しないと判断された場合にコンセンサス確認に含まれる。例えば、イーサリアムシステムにおいて、タイムスタンプ及び識別確認を、コンセンサスノードがコンセンサス確認のラウンドを行う前に行ってもよい。開示したブロックチェーンシステムのいずれかにおいて、コンセンサス確認を行うことによってリプレイ攻撃を検出できないことがあり、開示した方法は、リプレイ攻撃検出を行うことができる。
【００７４】
一部の実施の形態において、方法４５０は、識別データベースを一つ以上の他のブロックチェーンに同期させることと、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別が同期した識別データベースに存在するか否かを確認することと、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断することと、候補取引の識別が同期した識別データベースに存在するという判断に応答して、候補取引がリプレイ攻撃に関連すると判断することと、を更に備える。例えば、イーサリアムシステムにおいて、オプションとして、タイムスタンプ及び識別確認を、コンセンサスノードがコンセンサス確認のラウンドを行った後に再び行ってもよい。コンセンサス確認によって、識別データベース及び／又はプールデータベースをブロックチェーンノードの間で同期させてもよい。
【００７５】
一部の実施の形態において、少なくとも一つの候補取引を取得する前に、方法４５０は、識別データベースを一つ以上の他のブロックチェーンに同期させることを更に備える。例えば、ＰＢＦＴシステムにおいて、単一のブロックチェーンノード（例えば、プライマリノード）がコンセンサス確認の開始を担ってもよい。候補取引を受け取った後、非プライマリブロックチェーンノード（例えば、バックアップノード）が候補取引をプライマリノードに送り出してもよい。プライマリノードは、候補取引を受け取った後及びコンセンサス確認を行う前に方法４５０を実施してもよい。コンセンサス確認を行った後、非プライマリノードは、候補取引を行うために候補取引のリストをプライマリノードに同期させてもよい。したがって、非プライマリノードは、候補取引を受け取った後及びコンセンサス確認を行う前に方法４５０を実施しても実施しなくてもよい。
【００７６】
他の例に対して、ハニーバジャー又はハッシュグラフシステムにおいて、各ブロックチェーンノードは、受け取る候補取引を送り出さなくてもよい。各ブロックチェーンノードは、受け取った候補取引のコンセンサス確認を開始してもよい。したがって、真正の取引及びリプレイ攻撃取引が、方法４５０を実施する互いに異なる二つのブロックチェーンノードにそれぞれ送られる場合、これらは両方をパスしてもよい。リプレイ攻撃を検出するために、コンセンサス確認が行われた後、ブロックチェーンノードは、コンセンサス確認を通じて候補取引を共有するとともに方法４５０を再び実施してもよい。すなわち、ハニーバジャー又はハッシュグラフシステムのブロックチェーンノードは、識別データベース及び／又はプールデータベースの同期をとるとともに方法４５０を実施してもよい。コンセンサス確認の後に方法４５０を実施することによって、ブロックチェーンノードは、（例えば、更新したブロックチェーンをローカルメモリに書き込むことによって）新たな取引をブロックチェーンに加えてもよい。
【００７７】
したがって、開示したシステム及び方法は、安定したリプレイ攻撃検出を行うために既存の技術の欠陥を軽減又は克服することができる。アカウントナンスをタイムスタンプ確認及び識別確認の開示した組合せに代えることによって、ユーザ端末は、もはやブロックチェーンノードにノンス値を問い合わせる必要がない。したがって、ユーザ端末とブロックチェーンノードの間の通信コストが低減される。
【００７８】
状況（１）に対して、口座は、同一の取引手数料の第１の取引及び次に行われる第２の取引を同一のブロックチェーンノードに送る。しかしながら、順序不同のネットワークデータパケット伝送のために第１の取引の前に第２の取引を受け取る場合、ブロックチェーンノードは、第２の取引を行った後に第１の取引を行い、これによって、アカウントナンス機構に従わないことによる両方の取引の実行の失敗が生じる。開示したシステム及び方法は、アカウントナンスをタイムスタンプ確認及び識別確認の開示した組合せに代えるものであり、これによって、同一の口座からの有効な取引を予め規定された順番で行う必要がなくなる。すなわち、同一の口座から有効な取引を受け取る順番は、取引の実行の成功を妨げない。
【００７９】
状況（２）に対して、口座は、第１の取引及び次に行われる第２の取引を同一のブロックチェーンノードに送り、第２の取引は、更に高い取引手数料を有する。利益を最大にするために、ブロックチェーンノードは、第２の取引を優先的に行った後に第１の取引を行うようにプログラムされることがあり、これによって、アカウントナンス機構に従わないことによる両方の取引の実行の失敗が生じる。開示したシステム及び方法は、この問題を回避することができる。その理由は、状況（１）と同様に、同一の口座から有効な取引を受け取る順番が取引の実行の成功を妨げないからである。
【００８０】
状況（３）に対して、口座は、種々のユーザ端末から並列に種々の取引を送るが、これらの取引は、同一のアカウントナンス値を有する。その結果、取引のうちの最大でも一つしか処理が成功しない。開示したシステム及び方法は、この問題を回避することができ、全ての取引の実行を成功させることができる。その理由は、アカウントナンスが切り離されるからである。また、上述したように、タイムスタンプの正確さは、新たなブロックを加える前に十分に互いに近い時間内に同一の口座によって開始される多数の取引の実行をサポートすることができる。
【００８１】
追加的には、ブロックチェーンのコンセンサス規則に従って候補取引を確認する前及びブロックチェーンのコンセンサス規則に従って候補取引を確認した後（又は直後）にリプレイ攻撃から守ることによって、アカウントナンスを確認することを含んだ元のコンセンサス確認の負荷を軽減させることができる。確認範囲の使用は、調べるためのデータベースのサイズを著しく減少させるとともにブロックチェーン全体を調べる必要をなくす。したがって、識別データベースによって、高効率かつ低コストでリプレイ攻撃を防ぐことができる。さらに、タイムスタンプと確認範囲とを関連させることによって、取引処理が途絶えることなく任意の順番で同一の口座からの複数の取引の提示を許容する。また、この確認範囲は、ユーザ端末とブロックチェーンノードの間の同期を必要としなくなり、ブロックチェーンノードは、同一の確認結果を実現するために互いに異なる時間で同一の取引を確認することができる。
【００８２】
ここで説明する技術は、一つ以上の専用コンピュータデバイスによって実現される。専用コンピュータデバイスを、デスクトップコンピュータシステム、サーバコンピュータシステム、ポータブルコンピュータシステム、携帯装置、ネットワーク装置又は技術を実現する有線及び／又はプログラム論理を包含する他の任意の装置若しくは装置の組合せとしてもよい。（一つ以上の）コンピュータ装置は、一般的には、オペレーティングシステムソフトウェアによって制御及び調整される。通常のオペレーティングシステムは、実行、メモリ管理の実現、ファイルシステムの提供、ネットワーキング、Ｉ／Ｏサービス及び特にグラフィカルユーザインタフェース（ＧＵＩ）のようなユーザインタフェースの提供のためにコンピュータ処理を制御及びスケジューリングする。
【００８３】
図５は、種々の実施の形態によるリプレイ攻撃を検出する例示的なコンピュータシステム５５０のブロック図を示す。システム５５０は、図１のシステム１００のノード１、ノードＡとノード１の組合せ、ノード２，．．．，ノードｉ又は同様な装置の例示的な実現であってもよい。方法４００を、コンピュータシステム５５０によって実施してもよい。コンピュータシステム５５０は、一つ以上のプロセッサと、一つ以上のプロセッサに結合された一つ以上の非一時的コンピュータ可読媒体（例えば、一つ以上のメモリ）とを備え、非一時的コンピュータ可読媒体は、システム又は装置（例えば、プロセッサ）によって方法４００を実施させるために一つ以上のプロセッサによって実行可能な命令を有するように構成されてもよい。コンピュータシステム５５０は、命令（例えば、ソフトウェア命令）に対応する種々のユニット／モジュールを備えてもよい。一部の実施の形態において、コンピュータシステム５５０は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得し、取得した候補取引は、タイムスタンプを備えるように構成された第１の取得モジュール５５１と、タイムスタンプが確認範囲内に存在するか否か及び候補取引の識別が識別データベースに存在するか否かを確認するように構成された第１の確認モジュール５５２と、タイムスタンプが確認範囲内に存在するとともに識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断するように構成された第１の判断モジュール５５３と、を備えてもよい。
【００８４】
図６は、種々の実施の形態によるリプレイ攻撃を検出する例示的なコンピュータシステム５６０のブロック図を示す。システム５６０は、図１のシステム１００のノード１、ノードＡとノード１の組合せ、ノード２，．．．，ノードｉ又は同様な装置の例示的な実現であってもよい。方法４５０を、コンピュータシステム５６０によって実施してもよい。コンピュータシステム５６０は、一つ以上のプロセッサと、一つ以上のプロセッサに結合された一つ以上の非一時的コンピュータ可読媒体（例えば、一つ以上のメモリ）とを備え、非一時的コンピュータ可読媒体は、システム又は装置（例えば、プロセッサ）によって方法４５０を実施させるために一つ以上のプロセッサによって実行可能な命令を有するように構成されてもよい。コンピュータシステム５６０は、命令（例えば、ソフトウェア命令）に対応する種々のユニット／モジュールを備えてもよい。一部の実施の形態において、コンピュータシステム５６０は、ブロックチェーンに加えるための少なくとも一つの候補取引を取得するように構成された第２の取得モジュール５６１と、候補取引の識別が識別データベースに存在するか否かを確認し、識別データベースは、確認範囲内に複数の識別を備えるように構成された第２の確認モジュール５６２と、識別が識別データベースに存在しないという判断に応答して、候補取引がリプレイ攻撃に関連しないと判断するように構成された第２の判断モジュール５６３と、を備えてもよい。
【００８５】
図７は、ここで説明する実施の形態のいずれかを実現することができる例示的なコンピュータシステム７００のブロック図を示す。システム７００を、ここで説明するノードのいずれかにおいて実現してもよく、リプレイ攻撃を検出する対応するステップを実行するように構成してもよい。コンピュータシステム７００は、情報の通信を行うためのバス７０２又は他の通信機構と、情報を処理するためにバス７０２に結合された一つ以上のハードウェアプロセッサ７０４と、を有する。（一つ以上の）ハードウェアプロセッサ７０４は、例えば、一つ以上の汎用マイクロプロセッサであってもよい。
【００８６】
コンピュータシステム７００は、情報と（一つ以上の）プロセッサ７０４によって実行される命令とを記憶するためにバス７０２に結合されたランダムアクセスメモリ（ＲＡＭ）、キャッシュ及び／又は他のダイナミック記憶装置のような主記憶装置７０６も有する。主記憶装置７０６を、（一つ以上の）プロセッサ７０４によって実行される命令の実行中に変数又は他の中間情報（ｉｎｔｅｒｍｅｄｉａｔｅ  ｉｎｆｏｒｍａｔｉｏｎ）を一時的に記憶するのに用いてもよい。そのような命令は、（一つ以上の）プロセッサ７０４にアクセス可能な記憶媒体に記憶されるときに、カスタマイズされた専用マシンのコンピュータシステム７００によって、命令で指定された動作を実行する。コンピュータシステム７００は、（一つ以上の）プロセッサ７０４の静的情報及び命令を記憶するためにバス７０２に結合されたリードオンリーメモリ（ＲＯＭ）も有する。磁気ディスク、光ディスク、ＵＳＢサムドライブ（フラッシュドライブ）のような記憶装置７１０を、情報及び命令を記憶するために設けるとともにバス７０２に結合する。
【００８７】
システム７００は、コンピュータシステムと協働してコンピュータシステム７００を専用マシンにする又は専用マシンにプログラムするカスタマイズされたハードワイヤード論理、一つ以上のＡＳＩＣ又はＦＰＧＡ、ファームウェア及び／又はプログラム論理を用いることによって、ここで説明する技術を実現してもよい。一実施の形態によれば、ここで説明する動作、方法及びプロセスを、主記憶装置７０６に含まれる一つ以上の命令の一つ以上のシーケンスを実行する（一つ以上の）プロセッサ７０４に応答してコンピュータシステム７００によって実行する。そのような命令を、記憶装置７１０のような他の記憶媒体から主記憶装置７０６に読み込んでもよい。主記憶装置７０６に含まれる命令のシーケンスを実行することによって、一つ以上のプロセッサ７０４は、ここで説明する処理工程を実行する。代替的な実施の形態において、ハードワイヤード回路を、ソフトウェア命令の代わりに又はソフトウェア命令と共に用いてもよい。
【００８８】
主記憶装置７０６、ＲＯＭ７０８及び／又は記憶装置７１０は、非一時的記憶媒体を有してもよい。ここで用いるような用語「非一時的媒体」及び同様な用語は、マシンを特定の方法で動作させるデータ及び／又は命令を記憶する媒体を意味し、当該媒体は、一時的な信号を除外する。そのような非一時的媒体は、不揮発性媒体及び／又は揮発性媒体を備えてもよい。不揮発性媒体は、例えば、記憶装置７１０のような光ディスク又は磁気ディスクを含む。揮発性媒体は、主記憶装置７０６のようなダイナミックメモリを含む。非一時的媒体の一般的形式は、例えば、フロッピーディスク（登録商標）、フレキシブルディスク、ハードディスク、固体ドライブ、磁気テープ又は他の任意の磁気データ記憶媒体、ＣＤ−ＲＯＭ、他の任意の光データ記憶媒体、孔のパターンを有する任意の物理媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、ＮＶＲＡＭ、他の任意のメモリチップ若しくはカートリッジ及びこれらのネットワーク形態を含む。
【００８９】
コンピュータシステム７００は、バス７０２に結合されたネットワークインタフェース７１８も有する。ネットワークインタフェース７１８は、一つ以上のローカルネットワークに接続された一つ以上のネットワークリンクに結合する双方向データ通信を提供する。例えば、ネットワークインタフェース７１８は、総合デジタル通信網（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム又は対応するタイプの電話線に対するデータ通信を提供するモデムであってもよい。他の例として、ネットワークインタフェース７１８は、互換性のあるＬＡＮ（又はＷＡＮと通信を行うＷＡＮ構成要素）に対するデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクを実現してもよい。そのようないずれかの実現において、ネットワークインタフェース７１８は、種々のタイプの情報を表すデジタルデータストリームを搬送する電気信号、電磁信号又は光信号を送受信する。
【００９０】
コンピュータシステム７００は、（一つ以上の）ネットワーク、ネットワークリンク及びネットワークインタフェース７１８を介してメッセージを送信するとともにプログラムコードを含むデータを受信することができる。インターネットの例において、サーバは、インターネット、ＩＳＰ，ローカルネットワーク及びネットワークインタフェース７１８を介して、アプリケーションプログラムの要求されるコードを送信する。
【００９１】
受信したコードを、受信の際に（一つ以上の）プロセッサ７０４によって実行してもよい及び／又は後の実行のために記憶装置７１０又は他の不揮発性記憶装置に記憶してもよい。
【００９２】
前のセクションで説明したプロセス、方法及びアルゴリズムの各々を、コンピュータハードウェアを備える一つ以上のコンピュータシステム又はコンピュータプロセッサによって実行されるコードモジュールで実施するとともに当該コードモジュールによって完全に又は部分的に自動化してもよい。プロセス及びアルゴリズムを、特定用途向け回路で部分的に又は完全に実現してもよい。
【００９３】
上述した種々の特徴及びプロセスを互いに独立して用いてもよい又は種々の方法で組み合わせて用いてもよい。全てのあり得る組合せ及び部分的組合せは、本開示の範囲に入ることを意図する。追加的に、所定の方法又は処理ブロックを一部の実現において省略してもよい。ここで説明する方法及びプロセスは、任意の特定の順番に限定されず、それに関連するブロック及び段階（ｓｔａｔｅ）を、適切な他の順番で実行してもよい。例えば、説明したブロック又は段階を特に開示した順番以外の順番で実行してもよい又は複数のブロック又は段階を単一のブロック又は段階で組み合わせてもよい。例示的なブロック又は段階を、シリアルに、並列に又は他の方法で実行してもよい。ブロック又は段階を開示した例示的な実施の形態に加えてもよい又は開示した例示的な実施の形態から除去してもよい。ここで説明する例示的なシステム及び構成要素を、開示したのと異なるように構成してもよい。例えば、素子を、開示した例示的な実施の形態に追加してもよい、開示した例示的な実施の形態から除外してもよい又は開示した例示的な実施の形態において位置を変えてもよい。
【００９４】
ここで説明する例示的な方法の種種の動作を、アルゴリズムによって少なくとも部分的に実行してもよい。アルゴリズムは、メモリ（例えば、上述した非一時的コンピュータ可読記憶媒体）に記憶されたプログラムコード又は命令に含まれてもよい。そのようなアルゴリズムは、機械学習アルゴリズムを備えてもよい。一部の実施の形態において、機械学習アルゴリズムは、機能を実行するためにコンピュータを明示的にプログラムしなくてもよいが、機能を実行する予測モデルを形成するためにトレーニングデータから学習を行うことができる。
【００９５】
ここで説明する例示的な方法の種種の動作を、関連の動作を実行するために（例えば、ソフトウェアによって）一時的に構成された又は永久的に構成された一つ以上のプロセッサによって少なくとも部分的に実行してもよい。一時的に構成されているか永久的に構成されているかに関係なく、そのようなプロセッサは、ここで説明する一つ以上の動作又は機能を実行するために動作するプロセッサで実施されるエンジンを構成してもよい。
【００９６】
同様に、ここで説明する方法を、ハードウェアの例である特定の一つ以上のプロセッサを用いることによって少なくとも部分的にプロセッサで実施してもよい。例えば、方法の動作の少なくとも一部を、一つ以上のプロセッサ又はプロセッサで実施されるエンジンによって実行してもよい。さらに、一つ以上のプロセッサは、「クラウドコンピューティング」環境において又は「サービスとしてのソフトウェア」（ＳａａＳ）として関連の動作の実行をサポートするように動作してもよい。例えば、動作の少なくとも一部を、（プロセッサを有するマシンの例としての）一群のコンピュータによって実行してもよく、これらの動作は、ネットワーク（例えば、インターネット）を介して及び一つ以上の適切なインタフェース（例えば、アプリケーションプログラムインタフェース（ＡＰＩ））を介して利用可能である。
【００９７】
所定の動作の性能（ｐｅｒｆｏｒｍａｎｃｅ）を、単一のマシン内に存在するプロセッサの間だけでなく複数のマシンに亘って配置されたプロセッサの間に分布させることができる。一部の例示的な実施の形態において、プロセッサ又はプロセッサで実施するエンジンを、（例えば、家庭環境、オフィス環境又はサーバファーム内の）単一の地理的な位置に配置してもよい。他の例示的な実施の形態において、プロセッサ又はプロセッサで実施するエンジンを、複数の地理的な位置にわたって分布させてもよい。
【００９８】
本明細書を通じて、複数の例は、単一の例として説明した構成要素、動作又は構造を実現してもよい。一つ以上の方法の個別の動作を個別の動作として図示及び説明したが、個別の動作の一つ以上を同時に実行してもよく、説明した順番で動作を実行する必要はない。例示的な形態において個別の構成要素として示した構造及び機能を、組み合わせた構造又は構成要素として実現してもよい。同様に、単一の構成要素として示した構造及び機能を、個別の構成要素として実現してもよい。これらの変形、変更、追加及び改善並びに他の変形、変更、追加及び改善は、ここでの主題の範囲内にある。
【００９９】
主題の概観を特定の例示的な実施の形態を参照しながら説明したが、種々の変更及び変形を、本開示の実施の形態の広い範囲から逸脱することなくこれらの実施の形態において行ってもよい。主題のそのような実施の形態を、本願の範囲を実際に一つ以上の開示又は概念が存在する場合の任意の一つの開示又は概念に自発的に限定することを意図することなく単なる便宜上の用語「発明」によって個別に又は集合的にここに示す。詳細な説明を限定の意味ととるべきではなく、種々の実施の形態の範囲は、添付した特許請求の範囲によって、そのような特許請求の範囲の権利が与えられる等価物の全範囲と共に規定される。
【図１】
0006905059.tif 000002
【図２】
0006905059.tif 000003
【図３】
0006905059.tif 000004
【図４Ａ】
0006905059.tif 000005
【図４Ｂ】
0006905059.tif 000006
【図５】
0006905059.tif 000007
【図６】
0006905059.tif 000008
【図７】
0006905059.tif 000009