IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

特開2022-123064分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証
<>
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図1
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図2-1
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図2-2
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図3
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図4
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図5
  • 特開-分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022123064
(43)【公開日】2022-08-23
(54)【発明の名称】分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証
(51)【国際特許分類】
   G06F 21/64 20130101AFI20220816BHJP
   H04L 9/32 20060101ALI20220816BHJP
【FI】
G06F21/64
H04L9/32 200F
【審査請求】有
【請求項の数】9
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022097487
(22)【出願日】2022-06-16
(62)【分割の表示】P 2020511189の分割
【原出願日】2018-08-13
(31)【優先権主張番号】62/549,893
(32)【優先日】2017-08-24
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/864,970
(32)【優先日】2018-01-08
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】サロモン,ホベルト
(57)【要約】      (修正有)
【課題】ソースコードのコンパイル済みバイナリの起源を保証するとともに、バイナリファイルの、バイナリファイルを生成したソースコードまでのトレーサビリティを確実にする媒体、装置、方法及びシステムを提供する。
【解決手段】方法は、デジタルアセットの最初のソースファイルの第1のハッシュを演算することと、最初のソースファイルのバージョンを特定することと、ブロックチェーンの1つ以上のノードを選択して、第1のハッシュを最初のソースファイルのバージョンに対応するデジタルアセットのバージョンに関連付けてブロックチェーンにコミットすることと、ソースファイルをバイナリファイルに変換することによって、デジタルアセットのバイナリバージョンをもたらすことと、バイナリファイルの第2のハッシュを演算することと、第2のハッシュをデジタルアセットのバージョンに関連付けてブロックチェーンにコミットすることと、を含む。
【選択図】図3
【特許請求の範囲】
【請求項1】
1つ以上のプロセッサによって実行するべき論理を含む1つ以上の有形な媒体であって、前記論理は、実行されると、ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするように動作可能であり、当該方法は、
前記ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定することと、
前記デジタルアセットの最初のソースファイルの第1のハッシュを演算することと、
前記最初のソースファイルのバージョンを特定することと、
前記ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、前記第1のハッシュを前記最初のソースファイルの前記バージョンに対応する前記デジタルアセットのバージョンに関連付けて前記分散型台帳にコミットすることと、
前記ソースファイルをバイナリファイルに変換することによって、前記デジタルアセットのバイナリバージョンをもたらすことと、
前記バイナリファイルのハッシュである第2のハッシュを演算することと、
前記第2のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳にコミットすることとを備える、1つ以上の有形な媒体。
【請求項2】
前記第2のハッシュに関連付けられたバージョン情報および前記第1のハッシュに関連付けられたバージョン情報を用いて、前記分散型台帳内の1つ以上のバイナリファイルハッシュを、ソースファイルリポジトリ内の1つ以上のソースファイルと、前記ソースファイルが生じたワークステーションと、前記ソースファイルのデベロッパとに関連付けることをさらに含み、前記分散型台帳はブロックチェーンを含み、前記デジタルアセットはソフトウェアを含む、請求項1に記載の1つ以上の有形な記憶媒体。
【請求項3】
前記ネットワーク化されたコンピューティング環境の1つ以上のクライアントデバイスならびに関連する1人以上のそれぞれの認証および許可されたユーザに対して、前記1人以上の認証および許可されたユーザに割付けられた1つ以上の許可に従って、前記バイナリファイルを選択的に利用可能にすることをさらに含み、前記1つ以上のクライアントデバイスは、前記ネットワーク化されたコンピューティング環境において提供される1つ以上のクラウドサービスの1人以上の顧客の1つ以上のコンピュータを含む、請求項2に記載の1つ以上の有形な記憶媒体。
【請求項4】
前記1つ以上のクライアントデバイスならびに付随する1人以上のそれぞれの認証および許可されたユーザに対して前記ブロックチェーン内のデータを選択的にアクセス可能にすることによって、前記1人以上のそれぞれの認証および許可されたユーザが、前記ブロックチェーン内の前記バイナリファイルについての登録済みハッシュを、得られたバイナリファイルと比較できるようにすることをさらに含む、請求項3に記載の1つ以上の有形な記憶媒体。
【請求項5】
公開鍵インフラストラクチャ(PKI)を用いることで、前記ブロックチェーン内のデータへのユーザアクセス許可を認証することをさらに含む、請求項4に記載の1つ以上の有形な記憶媒体。
【請求項6】
選択することはさらに、
プルーフオブステークメカニズムに従って、前記ネットワーク化されたコンピューティング環境の1つ以上のノードを選択して、前記第1のハッシュを前記ブロックチェーンにコミットすることと前記第2のハッシュを前記ブロックチェーンにコミットすることとを実現することを含み、前記プルーフオブステークメカニズムは、
前記1つ以上のノードの識別情報および関連する許可を参照して、前記1つ以上のノ
ードが1つ以上のブロックを前記ブロックチェーンにコミットすることが許可されていることを確認することによって、一組の1つ以上の確認済みノードをもたらすステップと、
前記1つ以上の確認済みノードのうちのどのノードがソースファイルまたはバイナリファイルを最初に受信したかを判断するステップと、
前記1つ以上の確認済みノードの中から1つのノードを選択して、登録エントリを前記ブロックチェーンにコミットするための計算を行なうことによって、選択済みノードをもたらすステップと、
前記選択済みノードを用いて、前記登録エントリを、前記登録エントリをブロックとして前記ブロックチェーンにコミットする前記選択済みノードのインジケータと組合わせて前記ブロックチェーンにコミットすることによって、前記ブロックが前記インジケータを含むようにするステップとを実行する、請求項2に記載の1つ以上の有形な記憶媒体。
【請求項7】
前記バイナリファイルをプロダクションサーバにサブミットすることと、
1つ以上の品質管理メカニズムがアクセス可能なソースコードリポジトリに前記ソースファイルを格納することと、
前記バイナリファイルをバイナリコードリポジトリに格納することとをさらに含む、請求項6に記載の1つ以上の有形な記憶媒体。
【請求項8】
更新済みソースファイルと称される前記ソースファイルの新しいバージョンが前記ソースコードリポジトリ内にロードされたことを検出したことに応答して、前記ブロックチェーンを更新済みソースファイル登録情報で更新することをさらに含み、前記更新済みソースファイル登録情報は、前記更新済みソースファイルを前記最初のソースファイルにリンクする情報を含み、さらに、
前記最初のソースファイルの前記更新済みソースファイルのバージョンが新しいバイナリファイルにコンパイルされたことを検出したことに応答して、前記ブロックチェーンを更新済みバイナリ登録情報で更新することを含む、請求項7に記載の1つ以上の有形な記憶媒体。
【請求項9】
前記デジタルアセットの登録要求は、前記ソースファイルを開発したコンピュータまたは前記ソースファイルをサブミットしたコンピュータから生じ、前記第1のハッシュは、すべて前記コンピュータに関連付けられているかまたは前記コンピュータを特徴付けている、前記ソースファイルのデジタルフィンガープリント、ユーザ識別(ID)、中央処理装置(CPU)ID、およびメディアアクセス制御(MAC)アドレス、を入力として受信する第1のハッシュ関数を用いて演算される、請求項1に記載の1つ以上の有形な記憶媒体。
【請求項10】
前記第1のハッシュは1つ以上のソフトウェア品質管理サーバがアクセス可能であり、
前記1つ以上の品質管理サーバを用いて、前記第1のハッシュをソースファイルバージョン情報に関連付けて前記分散型台帳に選択的に登録することをさらに含む、請求項9に記載の1つ以上の有形な記憶媒体。
【請求項11】
ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするための方法であって、
前記ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定する動作と、
前記デジタルアセットの最初のソースファイルの第1のハッシュを演算する動作と、
前記最初のソースファイルのバージョンを特定する動作と、
前記ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、前記第1のハッシュを前記最初のソースファイルの前記バージョンに対応する前記デジタルアセットのバージョンに関連付けて前記分散型台帳にコミットする動作と、
前記ソースファイルをバイナリファイルに変換することによって、前記デジタルアセットのバイナリバージョンをもたらす動作と、
前記バイナリファイルのハッシュである第2のハッシュを演算する動作と、
前記第2のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳にコミットする動作とを備える、方法。
【請求項12】
前記第2のハッシュに関連付けられたバージョン情報および前記第1のハッシュに関連付けられたバージョン情報を用いて、前記分散型台帳内の1つ以上のバイナリファイルハッシュを、ソースファイルリポジトリ内の1つ以上のソースファイルと、前記ソースファイルが生じたワークステーションと、前記ソースファイルのデベロッパとに関連付けることをさらに含み、前記分散型台帳はブロックチェーンを含み、前記デジタルアセットはソフトウェアを含む、請求項11に記載の方法。
【請求項13】
前記ネットワーク化されたコンピューティング環境の1つ以上のクライアントデバイスならびに関連する1人以上のそれぞれの認証および許可されたユーザに対して、前記1人以上の認証および許可されたユーザに割付けられた1つ以上の許可に従って、前記バイナリファイルを選択的に利用可能にすることをさらに含み、前記1つ以上のクライアントデバイスは、前記ネットワーク化されたコンピューティング環境において提供される1つ以上のクラウドサービスの1人以上の顧客の1つ以上のコンピュータを含む、請求項12に記載の方法。
【請求項14】
前記1つ以上のクライアントデバイスならびに付随する1人以上のそれぞれの認証および許可されたユーザに対して前記ブロックチェーン内のデータを選択的にアクセス可能にすることによって、前記1人以上のそれぞれの認証および許可されたユーザが、前記ブロックチェーン内の前記バイナリファイルについての登録済みハッシュを、得られたバイナリファイルと比較できるようにすることをさらに含む、請求項13に記載の方法。
【請求項15】
公開鍵インフラストラクチャ(PKI)を用いることで、前記ブロックチェーン内のデータへのユーザアクセス許可を認証することをさらに含む、請求項14に記載の方法。
【請求項16】
選択することはさらに、
プルーフオブステークメカニズムに従って、前記ネットワーク化されたコンピューティング環境の1つ以上のノードを選択して、前記第1のハッシュを前記ブロックチェーンにコミットすることと前記第2のハッシュを前記ブロックチェーンにコミットすることとを実現することを含み、前記プルーフオブステークメカニズムは、
前記1つ以上のノードの識別情報および関連する許可を参照して、前記1つ以上のノードが1つ以上のブロックを前記ブロックチェーンにコミットすることが許可されていることを確認することによって、一組の1つ以上の確認済みノードをもたらすステップと、
前記1つ以上の確認済みノードのうちのどのノードがソースファイルまたはバイナリファイルを最初に受信したかを判断するステップと、
前記1つ以上の確認済みノードの中から1つのノードを選択して、登録エントリを前記ブロックチェーンにコミットするための計算を行なうことによって、選択済みノードをもたらすステップと、
前記選択済みノードを用いて、前記登録エントリを、前記登録エントリをブロックとして前記ブロックチェーンにコミットする前記選択済みノードのインジケータと組合わせて前記ブロックチェーンにコミットすることによって、前記ブロックが前記インジケータを含むようにするステップとを実行する、請求項12に記載の方法。
【請求項17】
前記バイナリファイルをプロダクションサーバにサブミットすることと、
1つ以上の品質管理メカニズムがアクセス可能なソースコードリポジトリに前記ソース
ファイルを格納することと、
前記バイナリファイルをバイナリコードリポジトリに格納することとをさらに含む、請求項16に記載の方法。
【請求項18】
更新済みソースファイルと称される前記ソースファイルの新しいバージョンが前記ソースコードリポジトリ内にロードされたことを検出したことに応答して、前記ブロックチェーンを更新済みソースファイル登録情報で更新することをさらに含み、前記更新済みソースファイル登録情報は、前記更新済みソースファイルを前記最初のソースファイルにリンクする情報を含み、さらに、
前記最初のソースファイルの前記更新済みソースファイルのバージョンが新しいバイナリファイルにコンパイルされたことを検出したことに応答して、前記ブロックチェーンを更新済みバイナリ登録情報で更新することを含む、請求項17に記載の方法。
【請求項19】
前記デジタルアセットの登録要求は、前記ソースファイルを開発したコンピュータまたは前記ソースファイルをサブミットしたコンピュータから生じ、前記第1のハッシュは、すべて前記コンピュータに関連付けられているかまたは前記コンピュータを特徴付けている、前記ソースファイルのデジタルフィンガープリント、ユーザ識別(ID)、中央処理装置(CPU)ID、およびメディアアクセス制御(MAC)アドレス、を入力として受信するハッシュ関数によって実現され、前記第1のハッシュは1つ以上のソフトウェア品質管理サーバがアクセス可能であり、前記方法はさらに、
前記1つ以上の品質管理サーバを用いて、前記第1のハッシュをソースファイルバージョン情報に関連付けて前記分散型台帳に選択的に登録することを含む、請求項11に記載の方法。
【請求項20】
装置であって、
1つ以上のプロセッサと、
論理とを含み、前記論理は、前記1つ以上のプロセッサによって実行するべき1つ以上の有形な媒体において符号化され、前記論理は、実行されると、
ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定し、
前記デジタルアセットの最初のソースファイルの第1のハッシュを演算し、
前記最初のソースファイルのバージョンを特定し、
前記ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、前記第1のハッシュを前記最初のソースファイルの前記バージョンに対応する前記デジタルアセットのバージョンに関連付けて前記分散型台帳にコミットし、
前記ソースファイルをバイナリファイルに変換することによって、前記デジタルアセットのバイナリバージョンをもたらし、
前記バイナリファイルのハッシュである第2のハッシュを演算し、
前記第2のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳にコミットする
ように動作可能である、装置。
【発明の詳細な説明】
【発明の概要】
【0001】
関連出願の相互参照
本願は、2017年8月24日に出願された、「分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証(DIGITAL ASSET TRACEABILITY AND ASSURANCE USING A DISTRIBUTED LEDGER)」と題された米国仮特許出願連続番号第62/549,893号と
、2018年1月8日に出願された、「分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証(DIGITAL ASSET TRACEABILITY AND ASSURANCE USING A DISTRIBUTED
LEDGER)」と題された米国特許出願連続番号第15/864,970号との利益を主張
するものであって、上記出願は、あらゆる目的で本願中に十分に記載されるように、引用によってここに援用されている。
【0002】
本願は、「分散型台帳を用いて公共のソフトウェアコンポーネント・エコシステムを管理するためのシステムおよび方法(SYSTEM AND METHOD FOR MANAGING A PUBLIC SOFTWARE
COMPONENT ECOSYSTEM USING A DISTRIBUTED LEDGER)」と題された、2017年12月
1日に出願された米国特許出願連続番号第15/829,684号(弁理士事件番号:ORACP0200/顧客事件番号:ORA180001-US-NP)に関するものであって、上記出願は、あらゆる目的で本願中に十分に記載されるように、引用によってここに援用されている。
【0003】
背景
本願は、コンピューティングに関し、より特定的には、ネットワーク化されたコンピューティング環境においてデジタルアセットをトレースするとともに品質管理を実現するためのソフトウェアおよび付随する方法に関する。
【0004】
デジタルアセットをトレースするためのシステムおよび方法は、悪意のあるサイバー攻撃(たとえばランサムウェア攻撃)を防止および/または軽減する、ソフトウェア知的財産(IP)権を行使してソフトウェア所有者を特定する、ソフトウェア更新を容易にする、などのために、著作権のある音楽、映像、ソフトウェアアプリケーション、ファイルなどをトレースすることを含む、要求の厳しいさまざまなアプリケーションにおいて使用されている。そのようなアプリケーションは、デジタルアセット起源を追跡およびトレースするための効率的なメカニズムを必要とすることが多い。
【0005】
セキュリティに対する意識が高い組織および業界(たとえば、諜報機関、医療、金融など)は、デジタルアセットをトレースまたは追跡するための効率的な、正確な、かつ実質的に耐タンパー性のメカニズムを必要とすることが多い。そのような効率的なメカニズムは、組織が(たとえばマルウェア攻撃の)責任を突き止め、それによって関連する負債を軽減することを可能にし得る。デジタルアセット・トレーサビリティは、たとえばソフトウェア著作権などの知的財産権を保護および行使するためにも重要であり得る。しかしながら、ロバストで効率的なデジタルアセット・トレーサビリティ、ならびに他の予防的なセキュリティおよびトレーサビリティメカニズムは依然として達成できていない。
【0006】
従来より、デジタルアセットを追跡およびトレースするために、たとえば企業、政府、大学などの組織は、特定のコンピューティング環境を管理する集中制御システム(たとえばアプリストア)を調整することに依拠している。このため、たとえば、マルウェアから防御するために、そのような集中制御システムには、たとえばマルウェア対策ソフトウェアなどの付加的なセキュリティ機能が搭載されている場合がある。
【0007】
しかし、そのようなセキュリティ対策は往々にして、セキュリティ侵害が既に起こった後で、たとえばゼロデイマルウェア攻撃の後で、初めて実現される。概して、そのような集中システムを用いる組織は、顧客の信頼に依拠しなければならないことが多い。したがって、マルウェア攻撃に応じてなどの信託違反は、顧客にとってだけでなく、顧客を失う可能性がある組織にとっても特に問題となり得る。
【0008】
概要
例示的な実施形態は、ソースコードおよび関連するコンパイル済みバイナリファイル(たとえばブロックチェーンなどの分散型台帳に、当該ファイルの暗号ハッシュを用いて登録されている(または登録される予定))のためのリポジトリを部分的に用いることによって、ネットワーク化されたコンピューティング環境におけるソフトウェア品質管理およびトレースを容易にするためのシステムおよび方法を開示する。分散型台帳の履歴記録(すなわち、台帳に既にコミットされているエントリ)は更新および読出しが可能であるが、所与のパーティシパンントシステムが容易に変更することはできない。ブロックチェーン記録、すなわちブロックは、ソースコードハッシュおよびバイナリハッシュをソフトウェアバージョンおよび/またはタイムスタンプに関連付けて格納する。
【0009】
したがって、所与のバイナリファイルを、ブロックチェーンにログされた、そのバージョン、および/またはタイムスタンプによって、そのソースコードまでトレースできる。さらに、ソースコード登録および関連するハッシュは、ソースコードのフィンガープリント(たとえば、チェックサム、MD-5ハッシュ、または他のメカニズム)を、ワークステーション識別子(たとえば、ソースコードを開発した(もしくはソースコードをソースコードリポジトリにディスパッチした)ワークステーションの中央処理装置(CPU)ID、メディアアクセス制御(MAC)アドレス、および/またはユーザIDなど)と組合わせて用いて演算される。
【0010】
(ソースコードおよび対応するバイナリの両方について)格納されたハッシュを用いることで、ソースコードファイルおよび/またはバイナリ画像が変更されていないことを検証することができるとともに、関連するソフトウェアバージョンに対応する著者およびワークステーションを判定および/または検証することができる。
【0011】
さらに、この明細書中に記載されるブロックチェーンとノードの付随する機能とを用いることによって、さまざまな付加的な能力が容易に生じる。たとえば、デジタルアセットバージョン管理、トレース、監視、および通知;コードリリース・シーケンシング;IP保護;ソフトウェア・バグトレース、通知、および軽減;マルウェア攻撃検出、トレース、および軽減;品質保証ソースコードフィルタリング;バイナリファイル破損または変更の顧客検出;コンポーネント・ネスティング追跡;未登録コードのプロダクションサーバのフラグ立て、などを容易にするためのメカニズムはすべて、この明細書中に記載されるブロックチェーンならびに付随するシステムおよび方法を用いて容易に実現可能である。
【0012】
さらに、クライアントシステム(たとえばコンシューマシステム)および関連する顧客はこれによって、たとえば、ダウンロード済みバイナリファイルのハッシュを、ブロックチェーンに登録された対応するハッシュと比較することによって、ソフトウェアをインストールするための準備として、当該ダウンロード済みバイナリファイルの保全性を容易に検証することができる。代替的には、または付加的には、クラウドサービスプロバイダは、たとえば、(プロダクションサーバに送信すべき)バイナリのハッシュを、ブロックチェーンに登録されたバイナリファイルについての関連するハッシュと比較することによって、当該プロダクションサーバに送信すべき1つの(または複数の)バイナリファイルが変更されていないことを容易に検証してもよい。
【0013】
ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするための別の例示的な方法は、ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定することと、デジタルアセットの最初のソースファイルの第1のハッシュを演算することと、最初のソースファイルのバージョンを特定することと、ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、第1のハッシュを最初のソースファイルのバージョンに対応するデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることと、ソースファイルをバイナリファイルに変換することによって、デジタルアセットのバイナリバージョンをもたらすことと、バイナリファイルのハッシュである第2のハッシュを演算することと、第2のハッシュをデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることとを含む。
【0014】
別の例示的な方法は、ソースコードファイルを生成することと、ソースコードファイルをリポジトリに格納することと、ソースコードファイルのハッシュをブロックチェーンに格納することと、ソースコードファイルをコンパイルしてバイナリファイル(この明細書中においては単に「バイナリ」とも称される)を生成することと、バイナリファイルのハッシュをブロックチェーンのブロックに格納することと、パーティシパントが分散型台帳を用いることで、バイナリファイルをコンパイルする際に用いられるソースコードファイルの起源を識別することができるように、バイナリファイルを分散させることとを含む。
【0015】
したがって、この明細書中に記載される分散型台帳技術(たとえばブロックチェーン技術)または他の好適な信頼できるデータベースを用いて、ブロックチェーンを介したソースファイルからバイナリまでのコンピュータコードのトレーサビリティを確実にすることによって、デジタルアセットバージョン管理;コードリリース・シーケンシング;IP保護;ソフトウェア・バグトレースおよび軽減;マルウェア攻撃防止、トレース、軽減、などを可能にするための関連する効率的な方法が容易に生じる。
【0016】
したがって、さまざまな実施形態は、ソースコードをコンパイル済みバイナリにリンクして、当該バイナリの起源を保証するとともに、当該バイナリの、当該バイナリを生成したソースコードまでのトレーサビリティを確実にすることができる、装置、方法、システム、または方法のための命令を提供する。
【0017】
この明細書中に開示される特定の実施形態の性質および利点のさらなる理解は、明細書の残りの部分および添付の図面を参照することよって認識されるだろう。
【図面の簡単な説明】
【0018】
図1】分散型台帳を用いて、ソフトウェアアプリケーションまたはコンポーネントのソースコードを、コンパイル済みバージョン(この明細書中においてはバイナリと称される)にだけでなく、当該ソースコードおよびバイナリが関連付けられているワークステーションおよびデベロッパにもリンクすることを容易にするように実装された、第1の例示的なシステムおよび付随するコンピューティング環境を示す図である。
図2-1】たとえば図1のコンピューティング環境などの例示的なコンピューティング環境のさまざまなモジュール間で発生し得る例示的なメッセージングを示す、例示的なメッセージシーケンス図である。
図2-2】図2-1の続きの図である。
図3】デジタルアセット・トレーサビリティなどを容易にするための、図1-2のコンピューティング環境によって実現可能な第1の例示的な方法のフロー図である。
図4】ユーザ(コンシューマ)が図1-2の分散型台帳(ブロックチェーン)を用いて、実行すべき(走らせるべき)1つ以上のバイナリファイルが改ざんされていないことまたは破損していないことを確認できるようにするための、図1図3の実施形態によって実現可能な第2の例示的な方法のフロー図である。
図5図1図4の実施形態を実現するために使用可能なシステムおよび付随するコンピューティング環境の概略ブロック図である。
図6図1図5の実施形態を実現するために使用可能なコンピューティングデバイスの概略ブロック図である。
【発明を実施するための形態】
【0019】
実施形態の詳細な説明
多くのアプリケーションにおいて、コンピュータソースコード、実行可能コード、データオブジェクトなどのデジタルアセットの起源およびその後の修正についての詳細を知っていることが望ましく、不可欠でさえある。しかし、異なる場所にいてお互いを知らない可能性がある異なるユーザまたは顧客間でこれらのアセットがやり取りおよび修正された場合、アセットを認証してトレースすることは困難である。企業は、集中型バージョン管理システムに専念することによってこの問題の解決に努めてきた。しかしこの場合、ユーザが中央当局を信頼することが必要である。
【0020】
中央当局の必要性を減らすかまたはなくすための1つの方法は、分散型台帳アプローチを用いることである。分散型台帳の例は、今日知られているさまざまなブロックチェーン実現例において見つけることができる。ブロックチェーン特徴の1つ以上は、この明細書中に記載されるデジタルアセットとともに使用されるように適合され得る。具体的な特徴が説明され得るが、すべての特徴が各実施形態において実現される必要があるとは限らない。いくつかの実施形態においては、オープンソースコードを含む第三者コードを用いて機能の一部またはすべてを実現してもよい。
【0021】
バージョン管理システムの特徴を、この明細書中に記載される分散型台帳システムの特徴と組合わせることができる。概して、バージョン管理システムまたは同様のデジタルアセット開発支援の多数のおよび多くのタイプの特徴を分散型台帳機能と組合わせて、所望のトレースならびにアセットの組織化された修正および分散を提供することができる。オープンソースのHyperledgerプロジェクトが提供するHyper-Fabricアーキテクチャコンポ
ーネントなどの、既存のコンポーネントを用いてもよい。特徴は、安全な開発サービスの一部として商品化されて販売されてもよい。既存の営利会社、およびフリーまたはオープンソースソフトウェアプロジェクトは、自身のバージョン管理または連続的な展開製品に統合されたかまたは関連付けられた、記載される特徴を用いることができる。
【0022】
説明の便宜上、ソフトウェア・エコシステムは、分散型コンピューティングリソース(たとえば、カタログインスタンス、付随する分散型ブロックチェーンなど)への/からのソフトウェアコンポーネントのアップロードおよび/またはダウンロードを可能にするように構成された、ネットワーク化された分散型コンピューティングリソースの集合を含むものであれば如何なるコンピューティング環境であってもよい。ネットワーク化されたコンピューティング環境は、相互通信コンピュータ、すなわち、コンピュータネットワーク、たとえば、ローカルエリアネットワーク(local area network:LAN)、ワイドエリアネットワーク(wide area network:WAN(たとえば、インターネット))、クラウ
ドインフラストラクチャおよびサービスなど、を含むものであれば如何なるコンピューティング環境であってもよい。同様に、ネットワーク化されたソフトウェアアプリケーションは、ネットワークを介して1つ以上のコンピューティングリソース(たとえば、サーバ)と通信することまたはそれらを用いることを容易にするように適合されたコンピュータコードであってもよい。
【0023】
なお、コンピューティングリソース(たとえば、エコシステムのネットワークを介して相互に通信し得るコンピュータシステム)の集合がこの明細書中においてノードと称され
ていることに留意されたい。所与のノード(たとえば、ソフトウェアコンポーネントカタログのインスタンス(この明細書中においてはカタログインスタンスと称される))は、他のノードと相互に通信するとともに選択的にデータ(たとえば、エコシステムについての登録情報を含むブロックチェーンのレプリカ)を共有するためのソフトウェアと、(たとえば、さまざまな登録の完了を案内するためのユーザインターフェイスソフトウェアによる)トランザクションの生成を容易にするためのソフトウェアと、エコシステムのルールへの準拠を確実にすることによりピア・ツー・ピア・エコシステムの実現を可能にするためのソフトウェアとを含んでいてもよい。
【0024】
説明の便宜上、ピア・ツー・ピア・ネットワークまたはエコシステムは、コンピュータネットワークにわたって分散されるとともに、プロセスワークロードの共有を容易にするために相互に通信し得るコンピューティングリソース(たとえば、コンピュータシステムおよび/またはソフトウェアアプリケーション)、すなわちノード、の任意の集合であってもよい。
【0025】
なお、従来から、ピア・ツー・ピア・ネットワークのピアまたはノードは、ネットワークによって提供されるデータおよび機能にアクセスする同様の特権を有していることに留意されたい。しかしながら、ピア・ツー・ピア・ネットワークのピアまたはノードは、その用語がこの明細書中において用いられている場合、同様に特権が付与される必要はない。たとえば、フルノードと称されるいくつかのノードには最大限に特権が与えられており、すなわち、エコシステムブロックチェーンからの読出しおよびエコシステムブロックチェーンへの書込みを行う特権を維持している。さほど特権が与えられていないノードは、エコシステムブロックチェーンにアクセスするためのプロキシとしてフルノードを使用する必要があるかもしれない。なお、「ピア・ツー・ピア・ネットワーク」および「ピア・ツー・ピア・エコシステム」という語はこの明細書中では同義で用いられる可能性があることに留意されたい。
【0026】
説明の便宜上、ソフトウェア機能は、コンピュータコード(すなわち、ソフトウェア)を介して提供される如何なる機能、能力または特徴(たとえば、格納されたデータまたは配置されたデータ)であってもよい。概して、ソフトウェア機能はユーザインターフェイスおよび付随するユーザインターフェイス制御および特徴を用いることによってアクセス可能になり得る。ソフトウェア機能は以下の動作を含み得る。たとえば、コンピューティングオブジェクト(たとえば、トランザクションに関連付けられたビジネスオブジェクト)に関するデータを検索する動作、企業の人員を昇進させたり、採用したり解雇したりするなどの企業関連のタスクを実行する動作、注文する動作、分析を計算する動作、特定のダイアログボックスを開始する動作、検索を実行する動作、などである。
【0027】
ブロックチェーンは、ブロックと称される、リンクされた記録の順番付けされたリストであってもよく、この場合、ブロックチェーンは、新しいブロックをブロックチェーンの終端に加えることによって発展させることができるが、より前のブロックの挿入は、より後のブロックが最初にブロックチェーンから展開されないかまたは削除されない限り、禁止される。ブロックチェーンのうちさまざまなブロックには、ブロックチェーンへの組込み時にタイムスタンプが付されることが多い。ブロックチェーンは、たとえば、所与のコンピューティング環境またはエコシステムのノードにインストールされ得る分散型ソフトウェアプリケーションまたはネットワーク化されたソフトウェアアプリケーションを用いて実現されてもよい。ブロック間のリンクは、新しいブロックに適用される1つ以上のハッシュを実現することによって実現されてもよい。この場合、1つ以上のハッシュは、1つ以上の前のブロックからの情報を活用または使用する。ブロックチェーンを用いることでトランザクションの分散型台帳を実現することができる。
【0028】
説明の便宜上、分散型台帳は、ネットワークの複数のノード間で共有される共有デジタルデータの集合であってもよく、そのコピーが複数のノード間で複製されて格納され得る。分散型台帳によって維持されるデータはノード間で同期されてもよい。
【0029】
したがって、分散型台帳は、一種の分散型データベース(すなわち、複数のエンティティのネットワークに連結されたさまざまなエンティティ間でデータを格納するためのメカニズム)として機能し得る。ノードは、ネットワークに連結される如何なるコンピュータシステムおよび/またはソフトウェアアプリケーションおよび/またはソフトウェアシステムまたはこれらのグループであってもよい。ここに記載されるノードは一般に「カタログインスタンス」と称される。というのも、これらノードは、付随するコンピューティング・エコシステムの他のノードおよび/またはパーティシパントがカタログに格納されたデータにアクセスするのを容易にするからである。
【0030】
トランザクションは、エコシステムの1つ以上の局面を記述しているイベント、状態、プロパティまたは他の情報を記載する情報の任意の集合であり得る。この場合、1つ以上の局面は、参加しているデベロッパエンティティ、ソフトウェアコンポーネントコンシューマエンティティ、コントリビュータエンティティ、プロキシ化されたエコシステムパーティシパントおよびシステム、ソフトウェアコンポーネント相互関係、ソフトウェアコンポーネントのダウンロードおよび/またはアップロードのインスタンス、ソフトウェアコンポーネントのサポート状態、コンポーネントプロヴェナンス(provenance)情報などを含み得る。トランザクションは、この用語が用いられている文脈に応じて、エコシステムにおける活動(たとえば、デベロッパエンティティ登録、ネームスペース登録、コントリビュータ登録など)を記述するデータの集合を指すこともある。または、代替的には、トランザクションは、実際の活動(たとえば、コンポーネントをダウンロードすること)を指すこともある。
【0031】
活動またはタスクを表しているトランザクションは十分に自動化されてもよく、またはマニュアルでの承認または他の検証活動などの人のワークフロータスクを含んでいてもよい。したがって、トランザクションはブロックチェーンにおける単一のもの(たとえば、情報の集合)として表わされる可能性もあるが、トランザクションのいくつかの形態は、実際には、ワークフローが処理されるのに応じて台帳中に記録することができる別個のサブトランザクションに分解されてもよい。したがって、「トランザクション」という語はまた、その語が用いられている文脈に応じて、情報(たとえばコンピューティングオブジェクト)の集合を伝達する動作を指している可能性もあり、情報(たとえばコンピューティングオブジェクト)の実際の集合を指している可能性もある。
【0032】
たとえば、個々のソフトウェアデベロッパ(たとえば、コンポーネントコントリビュータ)がコンポーネントエコシステムに登録する場合、この明細書中に記載されているように、コントリビュータ登録プロセスに関する(たとえば、これを文書化する)情報は、エコシステムのブロックチェーンに組込むための準備として、カタログインスタンスのうち1つ以上の未検証の待ち行列に伝搬されてもよい。情報の収集および/または転送はトランザクションと称されてもよく、収集された情報を維持するコンピューティングオブジェクトはまた、トランザクション(たとえば、デベロッパ登録トランザクション)と称されてもよい。
【0033】
所与のノードには、所与のコンピューティング環境またはエコシステムにおいて異なる特権が割付けられてもよい。同様の特権を持つノードは、それが1つ以上の特定のタスクの実現に関係しているので、タスクを完了させるためのピアと称されている。説明の便宜上、ピア・ツー・ピア・エコシステムは、少なくとも部分的に、エコシステムの別々のノードまたはピアを介して実現される1つ以上の分散型またはネットワーク化ソフトウェア
アプリケーションによって実現される如何なるエコシステムまたはコンピューティング環境であってもよい。
【0034】
この明細書中に記載されるさまざまな例示的な実施形態は、ソフトウェアコンポーネントカタログインスタンスのノードを含むピア・ツー・ピア・ソフトウェア・エコシステムによって実現される。以下により十分に記載される例示的なソフトウェアコンポーネントカタログインスタンスはさまざまなソフトウェアアプリケーションを実行し得る。これらさまざまなソフトウェアアプリケーションは、(ソフトウェアコンポーネントのデータベースを含み得る)ローカルデータストアを維持および管理するためのソフトウェア、セキュリティおよび許可機能を実現するためのソフトウェア、さまざまなタイプの登録(それらの例が以下においてより十分に記載されている)を可能にするためのユーザインターフェイス(UI)ディスプレイスクリーンを生成するためのソフトウェア、エコシステムのための未検証のトランザクション待ち行列を管理するためのソフトウェア、他のカタログインスタンスと通信するためのソフトウェア、エコシステムブロックチェーンのレプリカを維持するためのソフトウェア、エコシステムのブロックチェーンのための新しいブロックをコンピューティングする(すなわち、検証するかまたは確認する)ためのソフトウェア、エコシステムの1つ以上のカタログインスタンスによる検証(およびブロックチェーンブロックへの包含)のためのトランザクションをサブミットするためのソフトウェア、1つ以上のブロックをブロックチェーンに追加するのに必要な演算を実行するためにカタログインスタンスを選択するための任意のアルゴリズムを実現するためのソフトウェア、ブロックをブロックチェーンに追加するのに必要なハッシュを演算するためのソフトウェア、などを含み得る。
【0035】
概して、デベロッパおよび/またはビジネスのコミュニティは、ソフトウェア・エコシステムを用いて、情報、リソースおよびコンポーネントのやり取りを可能にするかまたは容易にする共通の技術的プラットフォームを用いてソフトウェアおよびサービスのための共有の市場と協働的に対話してもよい。
【0036】
ソフトウェア・エコシステムは、デベロッパ、ベンダーおよび顧客によって使用される再使用可能なソフトウェアコンポーネントのオープンなエコシステムとして実現され得る。このようなエコシステムは、ネットワーク化されたインフラストラクチャまたは「クラウド」インフラストラクチャならびに付随するプロセスおよびサービスのまわりに構築されてもよい。しかしながら、本発明の特定の実施形態は特定の処理プラットフォーム、技術およびインフラストラクチャに関して記載され得るが、他の変形例も可能であり、異なるシステムに適合されてもよい。
【0037】
従来より、ソフトウェアデベロッパは、ソフトウェアアプリケーションの開発および関連するファイルの格納を容易にするために特定のクラウドサービスをサブスクライブし得る。ソフトウェアアプリケーションまたはプロセスフロー開発のために構成されるクラウドサービスは、ここではプロセスクラウドサービス(Process Cloud Service:PCS)
と称される。
【0038】
プロセスクラウドサービスは、開発されている所与のソフトウェアプログラムによって用いられるファイルおよび他のオブジェクトを格納するためにネットワーク化されたデータベースを使用する可能性がある。サーバ側開発環境は、デベロッパがブラウザを介してアクセス可能であってもよい。開発環境は、開発されたソフトウェアアプリケーションファイルがPCSデータベースに格納されるように、PCSにバックアップされていてもよい。
【0039】
説明の便宜上、コンピューティング環境は、コンピュータ処理を伴う1つ以上のタスク
を実行するために用いられるコンピューティングリソースの如何なる集合であってもよい。コンピュータはメモリと通信する如何なるプロセッサであってもよい。コンピューティングリソースは、コンピューティング環境の如何なるコンポーネント、メカニズムまたは能力もしくはその量であってもよく、プロセッサ、メモリ、ソフトウェアアプリケーション、ユーザ入力デバイスおよび出力デバイス、サーバなどを含むがこれらに限定されない。コンピューティングリソースの例は、1つ以上のウェブサービス、アプリケーションプログラミングインターフェイス(Application Programming Interface:API)などに
よって提供されるデータおよび/またはソフトウェア機能を含む。
【0040】
エンタープライズコンピューティング環境はビジネスまたは組織のために用いられる如何なるコンピューティング環境であってもよい。一例としてのエンタープライズコンピューティング環境は、ネットワークにわたって分散されたさまざまなコンピューティングリソースを含み、さらに、イントラネットウェブサーバ、データベース、ローカルのハードディスクまたはファイルサーバ上のファイル、電子メールシステム、ドキュメント管理システム、ポータルなどの上にあるプライベートの共有コンテンツを含み得る。
【0041】
所与のソフトウェアアプリケーションは、構成するソフトウェアアプリケーションまたはモジュール(たとえば、サービス、機能、手順、コンピューティングオブジェクト、など)含み得る(が、必ずしも含むものではない)。したがって、「ソフトウェアアプリケーション」という語は、ネットワーク化されたソフトウェアアプリケーションまたはそれらが一体化されたグループを含んでいてもよい。
【0042】
この明細書中に記載される特定の実施形態は、プロセスベースのソフトウェアアプリケーションの開発、展開および実現に特に有用である。プロセスベースのソフトウェアアプリケーションは、プロセス要素またはソフトウェア活動とも称されるステップの1つ以上のシーケンスによって定義可能な如何なるソフトウェアアプリケーションであってもよい。「プロセス要素」、「フロー要素」、「ソフトウェア要素」および「ソフトウェアプロセス要素」という語はこの明細書中では同義で用いられ、たとえば、イベント、活動、ゲートウエイ、サブプロセスなどの任意のステップを指していることもある。プロセスベースのソフトウェアアプリケーションのステップのシーケンスはプロセスフローと称されることもある。プロセスフローは、ユーザインターフェイス(UI)ディスプレイスクリーンにおけるスイムレーンを介してモデル化されて例示されることが多い。プロセスベースのアプリケーションは、さまざまなプロセスステップのためのさまざまなウェブサービスおよび関連するソフトウェアコンポーネントを利用し得る複合アプリケーションによって実現されることが多い。
【0043】
明瞭にするために、いくつかの周知のコンポーネント、たとえば、ハードドライブ、プロセッサ、オペレーティングシステム、電源、ルータ、インターネット・サービス・プロバイダ(Internet Service Provider:ISP)、ワークフロー・オーケストレータ、プ
ロセススケジューラ、プロセスクラウド、ビジネスプロセスマネジメントシステム、エコシステムデベロッパエンティティ、エコシステムコントリビュータエンティティ、統合開発環境、プロキシシステム、アイデンティティ管理システム(たとえば、アイデンティティドメイン)、認証機関(Certificate Authority:CA)などは、図中に必ずしも明確
にコールアウトされているわけではない。しかしながら、この教示を利用できる当業者であれば、所与の実現例についてのニーズを満たすためにいずれのコンポーネントを実装するべきかと、それらコンポーネントを如何に実装するべきかとについて認識するだろう。
【0044】
図1は、分散型台帳18を用いて、ソフトウェアアプリケーションまたはコンポーネントのソースコードを、コンパイル済みバージョン(この明細書中においてはバイナリと称される)にだけでなく、当該ソースコードおよびバイナリが関連付けられているワークス
テーション12およびデベロッパにもリンクすることを容易にするように実装された、第1の例示的なシステム10および付随するコンピューティング環境を示す。システム10全体がソフトウェア・エコシステムとして機能し、これによって、ワークステーション12を使用するデベロッパは、たとえばソースコードリポジトリ46およびバイナリリポジトリ48にソフトウェアを提供することができ、当該ソフトウェアは、以下により十分に記載されるように、顧客システム20および/またはプロダクションサーバ16に対して選択的に利用可能にされ得る。
【0045】
例示的なシステム10は、インターネットなどのネットワークを介して分散型サーバ14(たとえばクラウド)と通信する1つ以上のワークステーション(たとえば、それぞれのソフトウェアデベロッパによって操作されるコンピュータ)12を含む。例示的なワークステーション12は、ソフトウェアアプリケーションを開発するためのクライアント側ソフトウェア24を含む。クライアント側ソフトウェア24は、ソースコードファイル26を開発するためのクライアント側デベロッパツールと、分散型サーバ14によって提供される機能にアクセスするためのブラウザとを含んでいてもよい。
【0046】
しかし、実施形態はクライアント側ソフトウェア開発環境に限定されず、サーバ側開発環境、およびブラウザがアクセス可能なウェブベースのまたはクラウドベースのソフトウェア開発機能を含み得る他の統合開発環境(Integrated Development Environment:IDE)をさらに含んでいてもよいことに留意されたい。さらに、ワークステーション12は、単にサーバ側コンパイラ36に依拠するのみではなく、コンパイラをさらに含んでいてもよい。
【0047】
クライアント側ソフトウェア24は、ソフトウェア開発機能にアクセスするための、かつ分散型サーバ14を介したソースコード、バイナリなどのブロックチェーン18への登録を開始するための、ユーザオプションおよび制御を含む、さまざまなユーザインターフェイス(UI)ディスプレイスクリーン22を表示することを容易にする。当該ユーザオプションおよび制御は、分散型サーバ14のサーバがブロックチェーンノードとして働くこと可能にする機能を含む。
【0048】
説明の便宜上、UIディスプレイスクリーンは、ディスプレイ上に提示される如何なるソフトウェア生成描写であってもよい。描写の例は、ウィンドウ、ダイアログボックス、表示されたテーブル、および他のグラフィカルユーザインターフェイス特徴、たとえば、ブラウザなどのソフトウェアを介してユーザに提示されるユーザインターフェイス制御などを含む。単一の境界内に含まれているユーザインターフェイスディスプレイスクリーンはビューまたはウィンドウと称される。ビューまたはウィンドウは、サブビューまたはサブウィンドウ、ダイアログボックス、グラフ、テーブルなどのセクションを含み得る。いくつかの場合には、ユーザインターフェイスディスプレイスクリーンは、ディスプレイ上にその時点で表示されているすべてのアプリケーションウィンドウを指していることもある。
【0049】
UI制御は、ユーザがデータを入力および閲覧すること、および/またはユーザインターフェイスと対話すること、を可能にするように適合されたユーザインターフェイスディスプレイスクリーンのうち表示された任意の要素またはコンポーネントであってもよい。ユーザインターフェイス制御の追加の例は、ボタン、ドロップダウンメニュー、メニューアイテム、タップアンドホールド機能などを含む。同様に、ユーザインターフェイス制御信号は、ソフトウェアのための入力として提供される如何なる信号であってもよい。この場合、入力は、ソフトウェアに関連付けられたユーザインターフェイスディスプレイスクリーンおよび/または付随するソフトウェアアプリケーションに影響を及ぼす。
【0050】
なお、一般的に、システム10のさまざまなモジュールのグループ分けは例示的なものであって、さまざまに異なっていてもよく、たとえば、この教示の範囲から逸脱することなく、特定のモジュールが他のモジュールと組合わされてもよく、もしくは他のモジュール内に実装されてもよく、または、それ以外の場合には、モジュールが、ネットワーク間で、もしくは1つ以上のコンピューティングデバイスもしくは仮想マシン内において(図示されるのとは)異なる態様で分散されていてもよいことに留意されたい。
【0051】
たとえば、図1では、たとえばブロックチェーンなどの分散型台帳18はワークステーション12および分散型サーバ14とは別個のエンティティとして現われているが、実際には、ブロックチェーン18は、分散型サーバ14のまわりに分散され得る、分散された一組の複製済みデータおよび機能(たとえばブロックチェーンレプリカ)として実現される。
【0052】
さらに、図1では、ソースコードハッシュ関数(単にソースハッシュ関数とも称される)の実現例は分散型サーバ14(たとえば分散型ソフトウェア品質管理サーバ)の1つ以上によって実現されるものとして示されているが、代わりに、そのようなハッシュ関数はワークステーション12上で実現され得ることに留意されたい。さらに、分散型サーバ14はブロックチェーンインターフェイス機能44を含むものとして示されているが、特定の実施形態においては、そのような機能はワークステーション12にも含まれていてもよいことに留意されたい。さらに、ワークステーション12には、この教示の範囲から逸脱することなく、たとえばワークステーション12が分散型サーバ14のうちのサーバの1つとして働き得るように、さらに付加的な機能が搭載されていてもよい。
【0053】
分散型サーバ14は、以下により十分に記載されるように、ソフトウェア・バグトレース、マルウェア検出、ソフトウェアリリース・シーケンシング、ソフトウェアIP保護および行使メカニズム、などを容易にするためのコードおよび機能を組込んでいるため、この明細書中においては「品質管理サーバ」と称される。そのような機能は、エコシステム10によってコンシューマシステム22および/またはプロダクションサーバ16に提供されるソフトウェアの品質を保証するのに役立つ。
【0054】
この例示的な実施形態においては、分散型サーバ14はコントローラ28を含む。コントローラ28は、さまざまなモジュール30~48のインターフェイス化、ならびにさまざまなモジュール30~48間の相互通信およびルーティングの制御を容易にするミドルウェアを組込んでいる。コントローラ28はまた、ワークステーション12との通信を処理してルーティングし、さらに、ワークステーションUI制御およびオプション22についてのUIレンダリング命令を容易にするための命令または機能を含んでいてもよい。
【0055】
例示的なサーバ側モジュールおよび機能30~48は、ソースコード(この明細書中においては単に「ソース」とも称される)フィンガープリンティングモジュール30と、ソースハッシュ関数32と、バイナリハッシュ関数34と、コンパイラ36と、ソフトウェアバージョンコントローラ36と、ソフトウェアリリース・シーケンシングモジュール38と、品質保証(Quality Assurance:QA)モジュール40と、ソフトウェアプロヴェ
ナンスアナライザ42と、ブロックチェーンインターフェイス機能44とを含む。コントローラ28は、以下により十分に記載されるように、ソースコードリポジトリ46およびバイナリコードリポジトリ48のゲートキーパーとしても機能し、プロダクションサーバ16と通信を行ない、任意にコンシューマシステム20と通信を行なう。
【0056】
例示的なシナリオにおいては、(クレデンシャル(たとえばユーザID)をたとえばサブミットすることによって)分散型サーバ14にソースコードを供給することが許可されている、ワークステーション12を使用するデベロッパが、デベロッパツール24を用い
て1つ以上のソースコードファイル26を作成する。1つ以上のソースコードファイル26は、1つ以上のソフトウェアプログラムおよび/またはコンポーネントを規定するプログラミング言語命令を含むソースコードを表わしている。
【0057】
次いで、ワークステーション12を使用するデベロッパは、ソースコードを分散型サーバ14に登録するオプションを(たとえばUI制御およびオプション22の中から)選択する。次いで、ソースコードファイル26は、ワークステーション識別情報(たとえば、CPU ID、MACアドレス、およびユーザID)とともに、分散型サーバ14の1つ以上のコントローラ28に送られる。なお、いくつかの実施形態においては、ワークステーション12および関連するデベロッパを識別するのに好適な、他の数または組合わせの1つ以上の数または識別コードを代わりに用いてもよいことに留意されたい。
【0058】
次いで、コントローラ28は、フィンガープリンティングモジュール30によって実現されるフィンガープリンティングアルゴリズムに従って(1つまたは複数の)ソースコードファイルのフィンガープリントを得るために、(1つまたは複数の)ソースコードファイルをソースフィンガープリンティングモジュール30に入力する。フィンガープリンティングアルゴリズムについての正確な詳細は実現例特有のものであって、所与の実現例についてのニーズに応じて異なり得る。この例示的な実施形態においては、ソースフィンガープリンティングモジュール30は、MD-5ハッシュアルゴリズム、または他の好適なチェックサムもしくはハッシュ関数を用いる。ソースフィンガープリンティングモジュール30の出力は、(1つまたは複数の)入力ソースファイルを識別するのに使用可能な数(または、たとえばメッセージダイジェストなどのコード)を表わしている。理論的には、所与のソースファイルの少しでも変更されたバージョンを含む異なるソースファイルは、ソースフィンガープリンティングモジュール30から出力される異なるソースコードフィンガープリントを(衝突がなければ)もたらす。
【0059】
次いで、結果として生じるソースコードフィンガープリントがコントローラ14によってソースハッシュ関数32にルーティングされ、ソースファイル26とともに(ワークステーション12から)コントローラ28に供給されたCPU ID、MACアドレス、およびユーザIDと組合されて、ソースハッシュ関数32への入力としてサブミットされる。次いで、ソースハッシュ関数32は(1つまたは複数の)ソースファイル26、CPU
ID、MACアドレス、およびユーザIDを入力としてハッシュアルゴリズムを実行して、ソースハッシュ(この明細書中においてはソースコードハッシュとも称される)を出力として生成する。
【0060】
したがって、ソースハッシュ関数32によって戻されるソースハッシュは、(たとえばCPU IDおよびMACアドレスによる)ワークステーション12についての情報、(たとえばユーザIDによる)ユーザについての情報、およびソースファイル26についての情報を含む。次いで、結果として生じるソースハッシュおよび関連するソースコードファイル26は、ソースコードおよびハッシュリポジトリ46に格納されるためにコントローラ28によってルーティングされる。
【0061】
なお、コントローラ28は、この教示の範囲を逸脱することなく、ソースコードファイル26をソースコードおよびハッシュリポジトリ46にまず格納してからソースコードファイル26をソースフィンガープリンティングモジュール30にルーティングしてもよいことに留意されたい。さらに、受信したCPU ID、ユーザID、およびMACアドレスは、分散型サーバ14のローカルキャッシュ内に維持されてもよく、ならびに/または、ソースコードおよびハッシュリポジトリ46に一時的に格納されてもよいことに留意されたい。
【0062】
次いで、コントローラ28はブロックチェーンインターフェイシングコード44を用いて、ブロックチェーン18によって登録するための(ソースハッシュを含む)対応するトランザクションを生成する。ソースハッシュを含むブロックチェーン18のブロックがブロックチェーン18の1つ以上のノード(この場合、ノードは分散型サーバ14に対応する)によって検証されてブロックチェーン18にコミットされると、ソースハッシュはブロックチェーン18に登録されたかまたはブロックチェーン18にコミットされたと言われる。
【0063】
ブロックチェーンインターフェイシングモジュール44は、ブロックを検証してブロックチェーン18にコミットする機能だけでなく、他のノード14のそれぞれのブロックチェーンインターフェイシングモジュール44を介して他のノード14と通信する機能、および、ノード14のうちのどのノードがトランザクションならびにブロック検証およびコミット機能を実行して特定のブロックをブロックチェーン18にコミットするかを判断するための任意のコンセンサスアルゴリズムに準拠する機能も含む。ブロックチェーンインターフェイシングモジュール44はさらに、更新済みローカルブロックチェーンレプリカを維持する命令、および、(ブロックチェーン18の1つ以上のブロックにコミットされる予定の)受信したトランザクションの表示を他のパーティシパントノード14に伝搬する命令を含む。
【0064】
この例示的な実施形態においては、ノード14の中の1つのノードが、プルーフオブワーク(proof-of-work)メカニズムではなく、プルーフオブステーク(proof-of-stake)
コンセンサスメカニズムに従って選択される。説明の便宜上、プルーフオブステークメカニズムは、ブロックをブロックチェーンにコミットする処理(ブロックを演算するレース(すなわち、プルーフオブワークメカニズム)を含まない)を実行するために1つ以上のノードを選択する如何なるノード選択アルゴリズムであってもよい。使用する正確なプルーフオブステーク法は、所与の実現例についてのニーズに応じて異なり得る。
【0065】
この例示的な実施形態においては、特定のブロックをブロックチェーン18にコミットするために選択されるノードは、ワークステーション12からソースファイル26を最初に受信したノードである。代替的には、または付加的には、ノードはさらに、ノード14の各々の許可、利用可能なコンピューティングリソース、または他の基準に基づいて、スクリーニングされて選択され得る。1つ以上のアイデンティティドメインが、エコシステム10の認証済みノード14およびワークステーション12および他のユーザ(たとえば、コンシューマシステム20を使用するコンシューマ)間で許可を管理して割付けてもよい。これによって、より計算的に高価なプルーフオブワークメカニズムの必要性を減らすかまたはなくすことができる。
【0066】
しかしながら、この実施形態においては、特定のノード14がブロックをブロックチェーン18にコミットすると、ノード14は識別インディシアを当該ブロックに追加し、これによって、ノード14はブロックの起源を確認することができる。なお、ワークステーション12がブロックチェーン18のノードとして機能する代替の実現例においては、必要な識別インディシアはソースハッシュに既に含まれていてもよいことに留意されたい。これは、ブロックをコミットするために選択されるワークステーション12が登録すべきソースコードファイル26のプロバイダでもある場合に起こり得る。
【0067】
なお、ブロックチェーン18は(ハッシュポインタによって前のブロックにリンクされる)リンク済みブロックのチェーンとして示されているが、実際には、ブロックチェーン18のノード14はいわゆる未検証の待ち行列も維持することに留意されたい。未検証の待ち行列は、ノード14間でも複製される。未検証の待ち行列は、ブロックチェーン18のブロックにコミットされるための準備として集められている1つ以上のトランザクショ
ンを含む。未検証の待ち行列内にある間、たとえば、ブロックチェーン18へのコミット前に未検証の待ち行列内のトランザクションデータの妥当性および保全性を確認することを容易にするために、さまざまな試験が行なわれ得る。そのような未検証の待ち行列の使用法は、「分散型台帳を用いて公共のソフトウェアコンポーネント・エコシステムを管理するためのシステムおよび方法(SYSTEM AND METHOD FOR MANAGING A PUBLIC SOFTWARE COMPONENT ECOSYSTEM USING A DISTRIBUTED LEDGER)」と題された、2017年12月1
日に出願された上記の関連の米国特許出願連続番号第15/829,684号(弁理士事件番号:ORACP0200/顧客事件番号:ORA180001-US-NP)においてより十分に記載されており、上記出願は引用によってここに援用されている。
【0068】
この例示的な実施形態においては、ソースハッシュがブロックチェーン18に登録される前に、さまざまなタイプの品質管理処理および試験が行なわれる。たとえば、バージョンコントローラ36は、ソフトウェアアプリケーションまたはそれによって規定されるコンポーネントのバージョンに対応する、ソースファイル26のバージョンを判定する。バージョンコントローラ36はまた、QAモジュール40によって処理されたソースファイル26のみが、たとえばコンパイラ36によるコンパイルなどのさらなる処理のためにリリースされることを確実にする外部論理をソースファイル26と結合して追加してもよい。これによって、高品質のコードがコンパイルおよびさらなる試験のためにリリースされ得るため、低品質のコードまたは感染コードがリリースされることに関連するコストを削減することができる。
【0069】
この例示的な実施形態においては、QAモジュール40は複数の分析段階を含んでおり、これによって、コードが1つの処理段階を通らない場合は、さらなる処理が不要となり得る。QAモジュール40によって実行可能な試験の例は、ソフトウェアバグ(たとえば、「ゼロ除算」の可能性などの論理エラー)および/またはマルウェアを検出およびトレースすること、発見されたバグまたはマルウェアのインスタンスをデベロッパに通知すること、それによってソフトウェアのバグまたは他の問題となる特徴を軽減するのに役立つこと、を含む。
【0070】
なお、いくつかの実現例においては、ソースファイルのバージョンはタイトルを有する必要はなく、代わりにタイムスタンプ(たとえばファイル完成日)および/またはソースファイル26とともに含まれている他のメタデータであってもよいことに留意されたい。付加的には、または代替的には、ソースファイル26についてデベロッパが選択した名前の代わりとして、または当該名前と組合されて、付加的なタイムスタンプが用いられてもよい。ソースコードファイル26を受信すると付加的なタイムスタンプがサーバ14によって適用されてもよい。さらに別のタイムスタンプが、ソースハッシュが登録されるブロックチェーン18のブロックに適用される。
【0071】
そのようなタイミング情報はプロヴェナンスアナライザ42によって用いられることで、本来のデベロッパ以外の誰かによって受信された所与の一組のソースファイル26が、開発されたソフトウェアに対する本来のデベロッパのIP権を侵害していないことを確実にするのに役立ち得る。プロヴェナンスアナライザ42は、IP考慮に適用されるそのようなプロヴェナンス判定を容易にするために、デベロッパによってサブミットされたソースコードファイル26に適用され得る。さらに、プロヴェナンスアナライザ42は、たとえばバイナリコードおよびハッシュリポジトリ48内に維持されるなど、コンパイル済みバイナリにも適用され得ることに留意されたい。デベロッパ間でIPコンフリクトが発生した場合、プロヴェナンスアナライザ42は、どのデベロッパが最初にソースコードファイルをサーバ14にサブミットしたかを立証するのに役立ち得る。
【0072】
さらに、この実施形態においては、プロダクションサーバ16もコンシューマシステム
20も、ソースコードおよびハッシュリポジトリ46内に維持されているソースコードファイル26にアクセスする必要がないことに留意されたい。これは、コンシューマシステム20のオペレータの1人が他のデベロッパのソースコードファイルまたはそのセクションを、本来のデベロッパからのライセンスを用いて自身のコードに容易に組込む可能性を低くするのにさらに役立つ。
【0073】
なお、プロヴェナンスアナライザ42はコード開発および改訂のタイムラインを生成する機能も含むことに留意されたい。次いで、タイムライン、バージョンシーケンス、および/またはソフトウェアパッチシーケンスがソフトウェアリリース・シーケンシングモジュール38によって用いられることで、そのコードが適切な順序でリリースされることが確実になる。なお、ソフトウェアリリース・シーケンシングモジュール38およびプロヴェナンスアナライザ42は両方とも、特定のソフトウェアアプリケーションについての登録データ(たとえば、ソースハッシュおよび/またはバイナリハッシュ)を使用できることに留意されたい。登録データはタイムスタンプ情報も含み、ハッシュを用いることで、特定のソースファイルおよび/またはバイナリファイルが登録済みバージョンから変更されていないことまたは変えられていないことを確認できる。
【0074】
ソースハッシュ関数32から出力された(かつ、対応するソースコードに関連付けてソースコードおよびハッシュリポジトリ46内に維持された)ソースハッシュがブロックチェーン18に登録された後、かつ、たとえば、QAモジュール40、ソフトウェアプロヴェナンスアナライザ42、およびソフトウェアリリース・シーケンシングモジュール38などのさまざまなモジュールによる処理の後、ソースファイル26はコンパイル、すなわちバイナリ(1つ以上のバイナリファイル)への変換に進み得る。(コンパイラ36による)バイナリへの変換の後、コンパイラ36から出力されたバイナリを用いて、対応するバイナリハッシュがバイナリハッシュ関数34によって演算される。
【0075】
コンパイラ36からバイナリを得るために、コントローラ28はソースコードファイル26をコンパイラ36に入力し、コンパイラ36はバイナリを戻す。次いで、結果として生じるバイナリは、プロヴェナンスアナライザ42によって判定された、ソースコードファイル26と同じバージョン情報であり得るバージョン情報に関連付けて、バイナリコードおよびハッシュリポジトリ48に格納され得る。なお、バイナリコードおよびハッシュリポジトリ48内のバイナリファイルのバージョンを、ソースコードおよびハッシュリポジトリ46内のソースコードの対応するバージョンと一致させることで、たとえば、ソースコードファイルの対応するバージョンと一致するバイナリコードのバージョンを見つけることができることに留意されたい。これは、たとえば、IPの行使、バグの(本来のデベロッパまでの)トレースおよび通知、マルウェア検出およびトレースなどのために、プロヴェナンスアナライザ42およびQAモジュール40がトレース動作を完了するのに役立つ。
【0076】
なお、バイナリハッシュ関数およびソースハッシュ関数32についての正確な詳細は実現例特有のものであって、所与の実現例についてのニーズに応じて異なり得ることに留意されたい。この教示を利用できる当業者であれば、過度の実験なしに、所与の実現例についてのニーズを満たすために好適なハッシュ関数を容易に選択および/または開発するだろう。
【0077】
連続的な展開シナリオにおいて、ソフトウェアリリース・シーケンシングモジュール38は、(バイナリ画像50に対応する)バイナリ出力を生成するためにソースコードをコンパイラ36にリリースし、当該バイナリ出力は、ソフトウェアリリース・シーケンシングモジュール38によって決定されたシーケンスでプロダクションサーバ16によって実行されるためにプロダクションサーバ16に送られる。
【0078】
代替的には、または付加的には、ソフトウェアリリース・シーケンシングモジュール38は、バイナリコードおよびハッシュリポジトリ48内に存在する既にコンパイルされたバイナリを用いてもよい。この場合は、バイナリコードおよびハッシュリポジトリ48内の(格納された特定のソフトウェアアプリケーションについての)バイナリファイルが、バイナリ画像50として実行されるために、コントローラ28を介してプロダクションサーバ16に順次リリースされる。
【0079】
クライアント側インストールシナリオにおいては、コンシューマ(たとえば、自身のコンシューマシステム20にバイナリをダウンロードおよびインストールすることを望んでいる分散型サーバ14をホストするクラウドのクラウドサービスの顧客)が、ブロックチェーン18への読出しアクセスを可能にするブロックチェーンクライアントを自身のシステム20にインストールしてもよい。コンシューマシステム20が、たとえばバイナリコードおよびハッシュリポジトリ48から、インストールおよび実行するための一組の1つ以上のバイナリファイルを得ると、ダウンロード済みバイナリに対応する1つ以上のブロックチェーンエントリが用いられることで、ダウンロード済みバイナリが、ブロックチェーン18内の1つまたは複数の対応するハッシュエントリに鑑みて予期されるものと一致するハッシュを示すことが確認され得る。したがって、コンシューマはこうして、特定のダウンロード済みバイナリファイルが改ざんされていないこと、または破損していないこともしくは変更されていないことを容易に判定または確認できる。
【0080】
図1では、コンシューマシステム20は、バイナリコードおよびハッシュリポジトリ48と直接通信を行なうものとして示されている。しかし、コンシューマシステム20はこれに代えて(またはこれに加えて)、コントローラ28介してバイナリコードおよびハッシュリポジトリ48からのバイナリに選択的にアクセスしてもよい。代替的には、コンシューマシステム20は、コントローラ28介して、コンパイラ36から出力されたバイナリを得てもよい。
【0081】
この例示的な実施形態においては、コンシューマシステム20は、認証されて適切に許可された後、ブロックチェーン18への読出しアクセス、バイナリコードおよびハッシュリポジトリ48へのアクセス、および/または分散型サーバ14へのアクセス、のみが与えられている。コンシューマシステム20とシステム10全体の他のモジュールとの間の対話の一部として、公開鍵インフラストラクチャ(Public Key Infrastructure:PKI
)を用いてもよい。この場合、コンシューマシステム20の特定のコンシューマに与えられた許可に応じて、コンシューマには、システム10の他のモジュールにアクセスする際に用いる1つ以上公開鍵および1つ以上の秘密鍵が発行されてもよい。
【0082】
なお、公開鍵で暗号化されるメッセージ(たとえば、コンシューマシステム20のうちの1つへのクライアント側インストールのために暗号化されたバイナリファイルを含むメッセージ)には、(メッセージ本体と秘密鍵との組合わせを表わす)デジタル署名が添付され得ることに留意されたい。メッセージの受信者は公開鍵を用いて、デジタル署名が有効である(すなわち、有効な秘密鍵で行なわれた)ことを確かめてもよい。しかし、有効な秘密鍵は、公開鍵で符号化されたメッセージ全体を復号すること、およびそれによってダウンロード済みバイナリのインストールを可能にすることが必要とされる。
【0083】
なお、この教示の範囲から逸脱することなく、(公開鍵暗号化以外の)他のタイプの非対称暗号化を用いて実施形態を実現してもよいことに留意されたい。さらに、この明細書中に記載される実施形態の原理は、例示的なエコシステム10と同様に、既に信頼されているコンピューティング環境に限定される必要はないことに留意されたい。例示的なエコシステム10は、すべてのパーティシパンントがエコシステム10に参加することが既に
認証および許可されているため、既に信頼されていると言われる。
【0084】
なお、図1を参照して記載された実施形態においてはソースコードハッシュおよびバイナリハッシュの登録が記載されているが、実際には、エコシステム10において発生する(たとえば、分散させるソフトウェアアプリケーションを作成するプロセスの最中に発生する)実質的にすべての対話をブロックチェーン18または他の信頼できるデータベースメカニズムに安全にログできることに留意されたい。したがって、ブロックチェーン18は、所与のソフトウェアアーティファクトの作成に寄与する実質的にすべてのコード変更、ビルド、使用するコードライブラリ、およびパッケージ化イベントを記録し得る詳細なオーディットトレイルを維持し得る。(たとえば、1つのアプリケーションまたはコンポーネントが別のアプリケーションまたはコンポーネントの一部として用いられるようにする)ソフトウェアコンポーネントおよび/またはアプリケーション試験のインスタンスでさえも容易に追跡およびトレースできる。ブロックチェーン18を用いると、たとえば、ブロックチェーン18が公衆に見える(が公衆によって変更不可能である)ために、コンシューマおよび潜在的なコンシューマが、エコシステム10において利用可能となるコードのプロヴェナンスを確認および信頼することができるとともに、場合によっては所与のソフトウェアアプリケーションに対して作業した人物を特定できる、代替の実施形態を容易にすることができる。
【0085】
なお、この明細書中に記載されるシステム10の使用およびブロックチェーン技術の付随する使用によって、プロダクションサーバ内の任意のバイナリファイルまたは実行可能画像を特定の一組の1つ以上のソースファイルまでトレースできることに留意されたい。これはセキュリティを高めるのに役立つ。この明細書中に記載される実施形態は、たとえば金融機関などのさまざまな組織の収益に直接影響を及ぼす運用リスク指数を低下させることが期待される。
【0086】
品質管理組織またはシステムはこうして、適切なリリース順序をブロックチェーン18に追加することによって、コンパイルのためにコードをリリースするメカニズムを有する。品質管理組織またはシステムによって承認されたコードのみにコンパイルおよび試験が許可されるように、(たとえば、チェーンコードまたは外部論理の形態の)論理が追加され得る。これによって、高品質のコードがコンパイルおよび試験のためにリリースされるため、不適切なコードまたは低品質のコードが試験のためにリリースされることに起因するコストを削減することができる。
【0087】
ソフトウェア試験はこうして、どの1つのファイルまたは複数のファイルが訂正が必要であるかを正確に特定することによって、どのコードファイルがどのバイナリ画像をもたらすかを特定することができるため、試験過程は開発を支援することができる。
【0088】
したがって、要約すると、実施形態の基本的なステップおよび/または特徴は以下の1つ以上を含む。
【0089】
1- コードのハッシュ(たとえばMD5など)とともにワークステーションのメディアアクセス制御(MAC)アドレス、CPU IDおよびユーザIDから生成されたハッシュは、任意の特定のワークステーションにおいて生成されたソースコードファイルに起因する。
【0090】
2- ソースファイルはリポジトリ(たとえばソースコードおよびハッシュリポジトリ46)にチェックインされ、ファイルのハッシュはブロックとしてブロックチェーン18に格納される。
【0091】
3- ファイルが変更されて新しいバージョンが既存のバージョン管理システムにおいて確かめられると、コードの進化を証明するために、かつファイルバージョンをそれらのデベロッパおよびエディタまでトレースするために、ステップ1と同じハッシュ論理を用いる新しいブロックがブロックチェーン18に追加される。
【0092】
4- 品質管理
4.1- 品質管理組織はこうして、適切なリリース順序をブロックチェーン18に追加することによって、コンパイルのためにコードをリリースするメカニズムを有する。
【0093】
4.2- (たとえばサーバ14によって表わされる)品質管理組織またはシステムによって承認されたコードのみにコンパイルおよび試験が許可されるように、(チェーンコードまたは外部論理の形態の)論理が追加され得る。これによって、高品質のコードがコンパイルおよび試験のためにリリースされるため、不適切なコードまたは低品質のコードが試験のためにリリースされることに起因するコストを削減することができる。
【0094】
5- ソースコードがコンパイルされると、結果として生じるバイナリのハッシュが、コンパイルされたコードバージョンを示す新しいブロックとしてブロックチェーン18上に追加される。次いで、生成済みバイナリのハッシュは、生成されている任意のバイナリを、特定のデベロッパによって特定のワークステーションに書込まれた特定のコードまでトレースすることを可能にする。
【0095】
6- 試験
6.1- ソフトウェア試験はこうして、どのコードファイルがどのバイナリ画像をもたらすかを特定することができる。これによって、試験過程は、どの1つのファイルまたは複数のファイルが訂正が必要であるかを正確に特定することによって、開発を支援することができる。
【0096】
6.2- 品質管理ステップと同様に、適切なリリース順序をブロックチェーン18に追加することによって、承認されたコードがパッケージ化および製造のためにリリースされる。
【0097】
7- ブロックチェーン18全体、またはその一部が、データベース内のデータの保全性を保証するサーバのネットワークにおいて公開されて分散され得る。システムを監査することで、監査人が本来のソースファイルにアクセスしなくても、本来のソースファイルを識別することができる。
【0098】
任意のパーティシパント(たとえば、ワークステーション12の任意のオペレータおよびコンシューマシステム20の任意のオペレータ)がブロックを生成してブロックチェーン18にコミットできる実施形態においては、ブロックチェーン18への包含が信頼されているブロックはコンセンサスモデルによって決定される。「ビットコイン」などのいくつかのブロックチェーン実現例における当該コンセンサスモデルは、「プルーフオブワーク」モデルを用いる。プルーフオブワークモデルでは、パーティシパントのコンピュータが、高度に特別にフォーマット化されたハッシュコードの計算を競うハッシュ化ノードとして用いられる。しかし、このコンセンサスモデルは非常に高価であり、既にある程度の信頼および/または認証があるビジネス環境などのいくつかの実現例についてはエネルギ的に非効率であり得る。プルーフオブワークの代わりに、上記により十分に記載したプルーフオブステークに基づくモデルを用いることができる。
【0099】
したがって、より制御された環境をとる実施形態においては、ブロックは計算集約的なハッシュ解決によって「マイニング」される必要はない。むしろ、ブロックの起源は、ブ
ロックチェーンネットワークのピアノードによって確認されるデジタル署名および認証を用いることによって確認することができる。署名認証は、上述のHyperledgerアーキテク
チャにおけるコンポーネントなどの既存のコンポーネントによって提供され得る。
【0100】
しかしながら、実施形態はプルーフオブステークの使用に限定されず、いくつかの実現例、特に潜在的に信頼できないノードを含む実現例においては、プルーフオブワークがやはり用いられてもよい。
【0101】
図2-1は、たとえば図1のコンピューティング環境10などの例示的なコンピューティング環境のさまざまなモジュール12、46、18、36、48、40、20、16の間で発生し得る例示的なメッセージングを示す、例示的なメッセージシーケンス図である。なお、メッセージシーケンス60全体は図2-1から図2-2にわたっており、たとえば、QA制御シーケンス68、(ソースコードファイルがコンシューマによる使用のためにリリースされると発生する)コンパイラリリースシーケンス80、(図2-2に示される)コンシューマソフトウェア・インストールシーケンス90、(これも図2-2に示される)連続的な展開シーケンス96など、さまざまなグループのメッセージシーケンスを含むことに留意されたい。
【0102】
さらに、図2-1および図2-2に示されるシナリオの一部は図1を参照して記載されたものとは異なることに留意されたい。したがって、図1の例示的なエコシステム10は、図2のメッセージシーケンシング60を実現するシステムの代替の実施形態を表わしている可能性もあり、その逆も同様である。
【0103】
たとえば、図1とは異なり、図2-1および図2-2のシーケンス60は、ソースコードハッシュがワークステーション12上で演算されてから、ワークステーション12上で実行されるソフトウェアによってブロックチェーン18に登録されていることを示唆している。このため、ワークステーション12は、(図1のワークステーション12上には存在するものとして示されていない)ブロックチェーンインターフェイシングコードをさらに含み得る。
【0104】
さらに、図2-1および図2-2では、バイナリハッシュは、図1のサーバ14の1つ以上の上で実行される(図1の)別個のバイナリハッシュ関数モジュール34によってではなく、コンパイラ36の1つ以上のモジュールによって演算される。なお、図1では、ハッシュ演算は、分散型台帳、すなわちブロックチェーン18を形成するブロックチェーンレプリカをホストするノードとして機能する1つ以上の分散型品質管理サーバ14にオフロードされることに留意されたい。
【0105】
さらに、図2-1および図2-2では、たとえば要求メッセージの送受信を伴うメッセージングなど、他のタイプの一般的なメッセージングは明瞭にするために省略されていることに留意されたい。しかし、この教示を利用できる当業者であれば、過度の実験なしに、所与の実現例についてのニーズを満たすために適切な要求メッセージングおよび他のタイプのメッセージングを容易に実現するだろう。
【0106】
メッセージシーケンス60全体は、ワークステーション12からソースコードリポジトリ46に送信されるソースコードを含む第1のメッセージ62を含む。第2のメッセージ64は、ソースコードハッシュおよびワークステーション識別情報を登録のためにブロックチェーン18に送信する。第3のメッセージ66において、前のメッセージ64を介してブロックチェーン18に登録されたコードハッシュが、(1つ以上のソースコードファイルに含まれ得る)対応するソースコードに関連付けて格納されるためにソースコードリポジトリ46に転送される。
【0107】
次に、QA制御シーケンス68が示されている。QA制御シーケンス68は、ソースコードリポジトリ46からコンパイラ36に第4のメッセージ70を送信することを含む。第4のメッセージ70は、ソースコードリポジトリ46に以前に格納されたソースコードファイルと、ブロックチェーン18に登録されているそのハッシュとを含む。
【0108】
次いで、コンパイラ36はソースコードファイルをバイナリファイルに変換し、当該バイナリファイルは第5のメッセージ72としてコンパイラ36からバイナリリポジトリ48に送信される。次いで、バイナリリポジトリ48は、第6のメッセージ74を介して、バイナリファイルを分析のためにQAモジュールまたはサービス40にリリースする。バイナリファイルのバイナリハッシュがブロックチェーン18に既に登録されている場合は、QAモジュール40は第7のメッセージ76を介してブロックチェーン18からバイナリハッシュを取出す。
【0109】
QAモジュール40がバイナリファイルの試験を完了した後、試験結果が、バイナリファイルに関連付けてブロックチェーン18に登録されるために転送される。試験結果が合格結果である場合は、コンパイラリリースシーケンス80が行なわれる。
【0110】
コンパイラリリースシーケンス80は、ソースコードリポジトリ46からコンパイラ36に送信される第9のメッセージ82を含む。第9のメッセージ82は、QAモジュール40によって試験されたバイナリに対応するソースコードを含む。次いで、コンパイラ36は、第10のメッセージ84を介して、以前に登録されたソースコードハッシュをブロックチェーン18から取出す。
【0111】
次いで、コンパイラ36は取出したソースコードファイルおよびソースコードハッシュを用いて、コンパイラ36によって実現されるバイナリハッシュ関数に従ってバイナリハッシュを演算する。次いで、演算されたバイナリハッシュは、第11のメッセージ86を介して、登録されるためにブロックチェーン18に送信される。(なお、このシナリオは、バイナリハッシュがコンパイラ36とは別個に演算されるものとして示されている図1とは異なることに留意されたい。)次いで、バイナリファイルは、第12のメッセージ88を介して、コンパイラ36によってバイナリリポジトリ48に送信される。
【0112】
図2-2は図2-1の続きである。バイナリファイルが図2-1の第12のメッセージ88を介してバイナリリポジトリ48に格納された後、任意のコンシューマソフトウェア・インストールシーケンス90が行なわれる。
【0113】
コンシューマソフトウェア・インストールシーケンス90は、第13のメッセージ92を介して、バイナリおよび関連するバイナリハッシュファイルをクライアントまたは顧客(この明細書中においてはコンシューマと称される)システム20にリリースすることを含む。次いで、コンシューマシステム20は、第14のメッセージ94を介して、ブロックチェーン18に登録されたバイナリハッシュを取出す。次いで、コンシューマシステム20は、バイナリリポジトリ48から得られたハッシュファイルを登録済みハッシュファイルと比較して、ダウンロード済みバイナリが破損していないことまたは変更されていないこと、すなわちバイナリハッシュ同士が一致することを確実にする。
【0114】
次に、代替の連続的な展開シーケンス96が発生する。連続的な展開シーケンス96は、コンパイラ36が、第15のメッセージ98を介して、ソースコードおよび対応するソースコードハッシュファイルをソースコードリポジトリ46から取出すことを含む。コンパイラ36は取出したソースコードを用いてバイナリファイルを生成するとともに、当該バイナリファイルのハッシュを演算する。
【0115】
この例示的な実施形態においては、結果として生じるバイナリハッシュは、第16のメッセージ100を介して、ソースコードリポジトリ46に格納されている対応するソースコードに関連付けて格納されるためにソースコードリポジトリ46に転送されるものとして示されている。しかし、バイナリハッシュは、代替的には、または付加的には、(たとえば、バイナリリポジトリ48にまだ格納されていない場合は)バイナリリポジトリ48に格納されるために転送されてもよいことに留意されたい。
【0116】
次に、コンパイラ36は、たとえば、ソフトウェアアプリケーションをウェブアプリケーションとしてホストするための準備として、バイナリを(たとえば実行可能な画像として)プロダクションサーバ16に転送する。
【0117】
図3は、デジタルアセット・トレーサビリティなどを容易にするための、図1-2のコンピューティング環境によって実現可能な第1の例示的な方法110のフロー図である。例示的な方法110は、ソースおよびバイナリファイルを各々に適用されるバージョン化によってリンクし、また、ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定または受信することを伴う第1のステップ112を含む。
【0118】
図1および図3を参照して、当該要求は、1つ以上のネットワーク化されたサーバ14、すなわちブロックチェーンノードを介してブロックチェーン18と通信を行ない得るワークステーション12によって発行されてもよい。
【0119】
第2のステップ114は、デジタルアセットの最初のソースファイルの第1のハッシュを演算することを含む。図1および図3を参照して、第1のハッシュの演算はソースハッシュ関数32によって実現されてもよく、ソースファイルはソースコードファイル26に対応する。
【0120】
第3のステップ116は、最初のソースファイルのバージョンを特定することを含む。図1および図3を参照して、第1のソースファイルのバージョンは、バージョンコントローラ36および/またはプロヴェナンスアナライザ42によって、たとえば、特定のソースコードバージョンに関するタイムスタンプデータ、コードの名前、などを含み得るブロックチェーン18内のソースコード登録情報を参照することによって、判定され得る。なお、バージョン情報は、場合によっては、図1の最初のソースコードファイル26とともに送信されるソースファイルメタデータの分析によって抽出することもできることに留意されたい。
【0121】
第4のステップ118は、ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、第1のハッシュを最初のソースファイルのバージョンに対応するデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることを含む。図1および図3を参照して、1つ以上のノードは分散型サーバ14に対応してもよく、分散型台帳はブロックチェーン18に対応する。コミット処理は、たとえば、上述のようにプルーフオブステークなどのコンセンサス法に従って、ブロックチェーンインターフェイシングモジュール44の1つ以上によって実現されてもよい。
【0122】
第5のステップ120は、ソースファイルをバイナリファイルに変換することによって、デジタルアセットのバイナリバージョンをもたらすことを含む。図1および図3を参照して、ソースファイルのバイナリファイルへの変換は、コンパイラ36などのコンパイラによって行なわれる。
【0123】
第6のステップ122は、バイナリファイルのハッシュである第2のハッシュを演算す
ることを含む。図1および図3を参照して、バイナリファイルの第2のハッシュの演算はバイナリハッシュ関数34によって行なわれ得る。
【0124】
第7のステップ124は、第2のハッシュをデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることを含む。図1および図3を参照して、コミット処理は、第2のハッシュおよびバージョン情報を含むトランザクションを検証してブロックチェーン18に登録することを伴う。
【0125】
なお、第1の例示的な方法110はこの教示の範囲から逸脱することなく変更され得ることに留意されたい。たとえば、方法110は、第2のハッシュに関連付けられたバージョン情報および第1のハッシュに関連付けられたバージョン情報を用いて、分散型台帳内の1つ以上のバイナリファイルハッシュを、ソースファイルリポジトリ内の1つ以上のソースファイルと、ソースファイルが生じたワークステーションと、ソースファイルのデベロッパとに関連付けるステップをさらに規定するように拡張されてもよい。第1の例示的な方法110はさらに、分散型台帳がブロックチェーンを含み、デジタルアセットがソフトウェアを含むことを規定してもよい。
【0126】
第1の例示的な方法110はさらに、ネットワーク化されたコンピューティング環境の(たとえば、図1のコンシューマシステム20に対応する)1つ以上のクライアントデバイスならびに関連する1人以上のそれぞれの認証および許可されたユーザ(たとえば、コンシューマシステム20を使用するコンシューマ)に対して、当該1人以上の認証および許可されたユーザに割付けられた1つ以上の許可に従って、バイナリファイルを選択的に利用可能にすることを含み得る。1つ以上のクライアントデバイスは、ネットワーク化されたコンピューティング環境において提供される1つ以上のクラウドサービスの1人以上の顧客の1つ以上のコンピュータを含む。
【0127】
第1の例示的な方法110の別の任意のステップは、1つ以上のクライアントデバイスならびに付随する1人以上のそれぞれの認証および許可されたユーザに対してブロックチェーン内のデータを選択的にアクセス可能にすることによって、1人以上のそれぞれの認証および許可されたユーザが、ブロックチェーン内のバイナリファイルについての登録済みハッシュを、得られたバイナリファイルと比較できるようにすることを含む。公開鍵インフラストラクチャ(PKI)および付随する公開鍵暗号法を用いることで、ブロックチェーン内のデータへのユーザアクセス許可を認証してもよい。
【0128】
第4のステップ118はさらに、プルーフオブステークメカニズムに従って、ネットワーク化されたコンピューティング環境の1つ以上のノード選択して、第1のハッシュをブロックチェーンにコミットすることと第2のハッシュをブロックチェーンにコミットすることとを実現することを含み得る。特定の実現例においては、プルーフオブステークメカニズムは、1つ以上のノードの識別情報および関連する許可を参照して、1つ以上のノードが1つ以上のブロックをブロックチェーンにコミットすることが許可されていることを確認することによって、一組の1つ以上の確認済みノードをもたらすステップと、1つ以上の確認済みノードのうちのどのノードがソースファイルまたはバイナリファイルを最初に受信したかを判断するステップと、1つ以上の確認済みノードの中から1つのノードを選択して、登録エントリをブロックチェーンにコミットするための計算を行なうことによって、選択済みノードをもたらすステップと、選択済みノードを用いて、登録エントリを、登録エントリをブロックとしてブロックチェーンにコミットする選択済みノードのインジケータと組合わせてブロックチェーンにコミットすることによって、ブロックがインジケータを含むようにするステップとを実現する。
【0129】
第1の例示的な方法110はさらに、バイナリファイルをプロダクションサーバにサブ
ミットするステップと、1つ以上の品質管理メカニズムがアクセス可能なソースコードリポジトリにソースコードを格納するステップと、バイナリファイルをバイナリコードリポジトリに格納するステップとを規定してもよい。
【0130】
第1の例示的な方法110はさらに、ソースコードの新しいバージョンがソースコードリポジトリ内にロードされたことを検出したことに応答して、ブロックチェーンを更新済みソースコード登録情報で更新することを含んでもよく、更新済みソースコード登録情報は、更新済みソースコードを本来のソースコードにリンクする情報を含み、方法110はさらに、ソースコードの新しいバージョンが新しいバイナリファイルにコンパイルされたことを検出したことに応答して、ブロックチェーンを更新済みバイナリ登録情報で更新することを含んでもよい。
【0131】
デジタルアセットの登録要求は、ソースコードを開発したコンピュータまたはソースコードをサブミットしたコンピュータ(たとえば、図1のワークステーション12)から生じてもよい。第1のハッシュは、すべてコンピュータに関連付けられているかまたはコンピュータを特徴付けている、ソースコードのデジタルフィンガープリント、ユーザ識別(ID)、中央処理装置(CPU)ID、およびメディアアクセス制御(MAC)アドレス、を入力として受信するハッシュ関数によって実現されてもよい。
【0132】
第1のハッシュ関数は、第1のハッシュに対応するとともに、1つ以上のソフトウェア品質管理サーバ(たとえば図1のサーバ14)がアクセス可能な出力ハッシュ(たとえば図1の第1のハッシュ関数32からの出力)を提供する。1つ以上の品質管理サーバは、第1のハッシュをソースファイルバージョン情報に関連付けて分散型台帳(たとえば図1のブロックチェーン18)に選択的に登録する機能を含む。
【0133】
図4は、エコシステムパーティシパント(たとえば、コンシューマ、デベロッパ、プロダクションサーバの所有者など)が図1図2の分散型台帳(ブロックチェーン)を用いて、実行すべき(走らせるべき)1つ以上のバイナリファイルが改ざんされていないことまたは破損していないことを確認できるようにするための、図1図3の実施形態によって実現可能な第2の例示的な方法130のフロー図である。
【0134】
第2の例示的な方法は、たとえば図1のデベロッパツール24を用いてソースコードファイルを生成することを伴う、最初のソースコード生成ステップ132を含む。
【0135】
次に、ソースコード格納ステップ136は、たとえば図1のソースコードおよびハッシュリポジトリ46などのリポジトリにソースコードファイルを格納することを含む。
【0136】
続いて、第1のハッシュ格納ステップ138は、たとえば図1のブロックチェーン18などのブロックチェーンにソースコードファイルのハッシュを格納することを含む。
【0137】
次に、ソースコードコンパイルステップ140は、ソースコードファイルを(たとえば図1のコンパイラ36によって)コンパイルすることによって、生成済みバイナリファイルをもたらすことを含む。
【0138】
次に、第2のハッシュ格納ステップ142は、バイナリファイルのハッシュ(すなわち、バイナリハッシュ)をブロックチェーンのブロックに格納することを含む。
【0139】
最後に、分散ステップ144は、エコシステムパーティシパントが分散型台帳を用いることで、バイナリファイルをコンパイルする際に用いられるソースコードファイルの起源を識別することができるように、バイナリファイルを分散させることを含む。
【0140】
なお、第2の方法130はこの教示の範囲から逸脱することなく変更され得ることに留意されたい。たとえば、第2の例示的な方法130はさらに、たとえば、(たとえば登録機能を含む)ブロックチェーンメカニズムを提供して、登録済みバイナリファイルのハッシュを、ユーザ入力に応じて取出されたバイナリファイルのハッシュと比較できるようにすることによって、バイナリファイルをソースコードファイル(この明細書中においては単にソースファイルとも称される)に関連付けることと、次いで、バイナリファイルをインストールおよび実行のために1つ以上のコンピューティングデバイス(たとえば図1のコンシューマシステム20および/またはプロダクションサーバ16)に送信することとを規定してもよい。
【0141】
したがって、特定のバイナリファイルおよびソースファイルについてのブロックチェーン内の登録エントリは、当該ソースファイルおよびバイナリファイルのバージョンを示すバージョン情報を含み、これらを用いることでバイナリファイルをそのソースファイルまでトレースできる。登録済みソースコードハッシュをさらに用いることで、たとえば、ユーザIDおよび(CPU ID、MACアドレスなどの)ワークステーション識別情報を含む、図1の第1のハッシュ関数32への入力によって、関連するソースファイルを本来のデベロッパおよびワークステーションまでトレースできる。
【0142】
この明細書中に記載されているように、バイナリファイルを対応するソースコードファイルにリンクすることを可能にするトレーサビリティによって、デジタルアセットバージョン管理、コードリリース・シーケンシング、IP保護、ソフトウェア・バグトレース、マルウェア攻撃トレースおよびマルウェア作成者の識別、などを容易にすることを含む、当該技術における長年にわたるニーズに対するさまざまな追加の効率的な解決策が可能になる。
【0143】
なお、この明細書中に記載される特定の実施形態においては、ブロックチェーン18の履歴記録は、図1のワークステーション12およびコンシューマシステム20の1人以上のユーザによって実質的に変えることができないことに留意されたい。
【0144】
ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするとともにソフトウェア品質管理を容易にするための代替の方法は、受信したソースファイルを送信したワークステーションのソースコードファイルおよびIDを受信することと、ソースコードファイルのフィンガープリントを演算することと、ソースコードファイルのフィンガープリントおよびIDを用いて第1のハッシュを計算することと、ソースコードファイルを選択的にコンパイルすることによってバイナリファイルを生成することと、バイナリファイルを用いて第2のハッシュを計算することと、第1のハッシュおよび第2のハッシュを共通のソフトウェアバージョンに関連付けて分散型台帳に登録することによって、第1の登録および第2の登録をもたらすことと、第1の登録および第2の登録を用いて、ネットワーク化されたコンピューティング環境におけるソフトウェア品質管理を容易にすることとを含む。
【0145】
図5は、図1図4の実施形態を実現するのに使用可能なシステム900および付随するコンピューティング環境を示す概略ブロック図である。例示的なシステム900は、本発明の実施形態に従った分散型ソフトウェア・エコシステムを実現することができる。実施形態は、(たとえば、ユーザデバイスに常駐している)スタンドアロンのアプリケーションとして、または、クライアント側およびサーバ側のコードの組合わせを用いて実現されるウェブベースのアプリケーションとして、実現され得る。
【0146】
汎用システム900は、デスクトップコンピュータ960、ノートブックコンピュータ
970、スマートフォン980、携帯電話985およびタブレット990を含むユーザデバイス960~990を含む。汎用のシステム900は、ウェブページまたは他のタイプの電子文書およびUIならびに/または実行アプリケーションを表示およびナビゲートすることができるシンクライアントコンピュータ、インターネット接続可能な携帯電話、モバイルインターネットアクセスデバイス、タブレット、電子ブック、または携帯情報端末などの如何なるタイプのユーザデバイスともインターフェイスを取ることができる。システム900は5つのユーザデバイスとともに示されてるが、ユーザデバイスはいくつでもサポートされ得る。
【0147】
ウェブサーバ910は、ウェブページ、電子文書、企業データまたは他のコンテンツ、およびユーザコンピュータからの他のデータについての、ウェブブラウザおよびスタンドアロンのアプリケーションからの要求を処理するために用いられる。ウェブサーバ910はまた、企業活動に関するデータの、RSSフィードなどのプッシュデータまたはシンジケート化コンテンツを提供してもよい。
【0148】
アプリケーションサーバ920は1つ以上のアプリケーションを操作する。アプリケーションは、任意のプログラミング言語、たとえば、Java(登録商標)、C、C++、C#など、または任意のスクリプト言語、たとえば、JavaScript(登録商標)もしくはECMAScript(European Computer Manufacturers Association Script(欧州コンピュータ製造者協会スクリプト))、Perl、PHP(Hypertext Preprocessor:ハイパーテキストプリプロセッサ)、Python、RubyまたはTCL(Tool Command Language:ツールコマンド言語)などで書込まれた1つ以上のスクリプトまたはプログラムとして実現することができる。アプリケーションは、Rails、Enterprise JavaBeans、または、.NETなどのライブラ
リまたはアプリケーションフレームワークを用いて構築することができる。ウェブコンテンツは、HTML(HyperText Markup Language:ハイパーテキスト・マークアップ言語
)、CSS(Cascading Style Sheets:カスケーディング・スタイル・シート)、ならびに、テンプレート言語およびパーサーを含む他のウェブ技術を用いて作成され得る。
【0149】
アプリケーションサーバ920上で実行されるデータアプリケーションは、入力データおよびユーザコンピュータ要求を処理するように適合されており、データストレージデバイスまたはデータベース930からのデータを格納するかまたは検索することができる。データベース930は、データアプリケーションによって作成されて用いられるデータを格納している。一実施形態においては、データベース930は、SQLフォーマットコマンドまたは他のデータベースクエリ言語に応答して、データを格納、更新および検索するように適合されたリレーショナルデータベースを含む。他の実施形態は、非構造的なデータストレージアーキテクチャおよびNoSQL(Not Only SQL)データベースを用いてもよい。
【0150】
一実施形態においては、アプリケーションサーバ920は、プログラムまたはスクリプトを実行することができる1つ以上の汎用コンピュータを含む。一実施形態においては、ウェブサーバ910は、1つ以上の汎用コンピュータ上で実行されるアプリケーションとして実現される。ウェブサーバ910およびアプリケーションサーバ920は同じコンピュータ上で組合わされて実行されてもよい。
【0151】
電子通信ネットワーク940~950は、ユーザコンピュータ960~990と、ウェブサーバ910と、アプリケーションサーバ920と、データベース930との間の通信を可能にする。一実施形態においては、ネットワーク940~950はさらに、有線ネットワーク940および無線ネットワーク950を含む電気通信デバイスまたは光通信デバイスのいずれかの形態を含み得る。ネットワーク940~950はまた、イーサネット(登録商標)ネットワークなどの1つ以上のローカルエリアネットワーク、インターネット
などのワイドエリアネットワーク;セルラーキャリアデータネットワーク;および、仮想プライベートネットワークなどの仮想ネットワークを組込んでいてもよい。
【0152】
当該システムは、本発明の一実施形態に従ってアプリケーションを実行するための一例である。別の実施形態においては、アプリケーションサーバ910、ウェブサーバ920および任意にはデータベース930は、単一のサーバコンピュータアプリケーションおよびシステムと組合わせることができる。さらに別の実施形態においては、アプリケーションサーバ910、ウェブサーバ920およびデータベース930の1つ以上を実現するために、仮想化および仮想マシンアプリケーションが用いられてもよい。
【0153】
さらに別の実施形態においては、ウェブおよびアプリケーションサービング機能のすべてまたは一部は、ユーザコンピュータの各々の上で実行されるアプリケーションに一体化されていてもよい。たとえば、ユーザコンピュータ上のJavaScriptアプリケーションは、アプリケーションのデータ部分および表示部分を検索するかまたは分析するために用いられてもよい。
【0154】
一例として、図1および図5を参照して、図5のウェブサーバ910、アプリケーションサーバ920およびデータストレージデバイス/データベース930は、ブラウザを介して個々のコンピュータシステムにさらにアクセス可能である分散型サーバ14に対応するサーバ側アプリケーションをホストすることによって、図1の分散型台帳18を実現するために用いられてもよい。図1のワークステーション12およびコンシューマシステム20は、図5のデスクトップコンピュータ960、タブレット900、スマートフォン980、携帯電話985、またはノートブックコンピュータ970の1つ以上によって実現されてもよい。図1のソースコードおよびハッシュリポジトリ46ならびにバイナリコードおよびハッシュリポジトリ48は、図5のデータストレージデバイス/データベース930によって実現されてもよい。
【0155】
代替的には、または付加的には、個々のコンピューティングデバイス950、985、970、980、990は、有線ネットワーク940および/または無線ネットワーク950を用いて、当該デバイスをピア・ツー・ピア・ソフトウェア・エコシステムにネットワーク化して実施形態を実現するために用いられる(図1のサーバ14内に示される)ブロックチェーンノードソフトウェアおよび付随する機能を実行してもよい。
【0156】
図6は、図1図5の実施形態を実現するために使用可能なコンピューティングデバイスを示す概略ブロック図である。図6のシステム500は、この明細書中における特定の実現例に記載されているステップを実行することを容易にするものとして記載されている一方で、記載されたステップを実行するために、システム500の任意の好適なコンポーネントもしくはコンポーネントの組合わせ、または、システム500に関連付けられた任意の好適な1つのプロセッサもしくは複数のプロセッサが用いられてもよい。
【0157】
図6は、この明細書中に記載される実現例のために用いられ得る例示的なコンピューティングシステム500のブロック図を示す。たとえば、コンピューティングシステム500は、図5のサーバデバイス910および920を実現するとともに、この明細書中に記載される方法の実現例を実行するために用いられてもよい。いくつかの実現例においては、コンピューティングシステム500は、プロセッサ502、オペレーティングシステム504、メモリ506、および入出力(input/output:I/O)インターフェイス508を含んでいてもよい。さまざまな実現例においては、プロセッサ502は、この明細書中に記載されるさまざまな機能および特徴を実現するとともに、この明細書中に記載される方法の実現例を実行するために用いられてもよい。プロセッサ502がこの明細書中に記載される実現例を実行するものとして記載されているが、システム500の任意の好適な
コンポーネントもしくはコンポーネントの組合わせ、または、システム500に関連付けられた任意の好適な1つのプロセッサまたは複数のプロセッサ、または、任意の好適なシステムが、記載されるステップを実行してもよい。この明細書中に記載される実現例は、ユーザデバイス上で、サーバ上で、またはこれら両方の組合わせに対して実行されてもよい。
【0158】
コンピューティングデバイス500はまた、メモリ506上に格納され得るか、または、他の好適な任意の記憶位置もしくはコンピュータ読取可能媒体上に格納され得るソフトウェアアプリケーション510を含む。ソフトウェアアプリケーション510は、プロセッサ502がこの明細書中に記載される機能および他の機能を実行することを可能にする命令を提供する。コンピューティングシステム500のコンポーネントは、1つ以上のプロセッサによって、または、ハードウェアデバイスの任意の組合わせによって、さらには、ハードウェア、ソフトウェア、ファームウェアなどの任意の組合わせによって、実現されてもよい。
【0159】
例示を容易にするために、図6は、プロセッサ502、オペレーティングシステム504、メモリ506、I/Oインターフェイス508およびソフトウェアアプリケーション510の各々ごとに1つのブロックを示す。これらのブロック502、504、506、508および510は、複数のプロセッサ、オペレーティングシステム、メモリ、I/Oインターフェイス、およびソフトウェアアプリケーションを表わし得る。さまざまな実現例においては、コンピューティングシステム500は図示されるコンポーネントをすべて有していなくてもよく、および/または、この明細書中に示される以外の他のタイプのコンポーネント、もしくはこの明細書中に記載されるものに加えて他のタイプのコンポーネントを含む他の要素を有していてもよい。
【0160】
一例として、図1および図6を参照して、図6のコンピューティングデバイス500は、図1のワークステーション12およびコンシューマシステム20を実現するために用いられてもよい。コンピューティングデバイス500はまた、図1のサーバ14の各々を実現するために用いられてもよい。
【0161】
特定の実施形態に関して説明がなされてきたが、これらの特定の実施形態は単に例示的なものに過ぎず、限定的なものではない。たとえば、この明細書中に記載される特定の実施形態では、ソフトウェアファイル(たとえば、ソフトウェアアプリケーションについてのソースまたはバイナリファイル)に関する登録情報を維持するためにブロックチェーンを用いているが、実施形態はこれに限定されない。たとえば、この教示の範囲から逸脱することなく、特定の実施形態において別のタイプのデータベースが用いられてもよい。
【0162】
さらに、実施形態は、ソフトウェアバイナリおよびソースファイルをリンクしてトレースする際の使用に必ずしも限定されるわけではない。たとえば、この明細書中に記載される実施形態のバージョンは、(たとえば書かれた音楽を含む)楽譜または文書を、当該音楽の対応するデジタル化実現例(たとえばMP3ファイル)に選択的にリンクするために用いられ得る。これによって、上述のようにソフトウェアについて用いられる態様と同様の態様で著作権行使が容易になり得る。
【0163】
如何なる好適なプログラミング言語を用いても、C、C++、Java、アセンブリ言語などを含む特定の実施形態のルーチンを実現することができる。手続き指向型またはオブジェクト指向型などのさまざまなプログラミング技術を用いることができる。ルーチンは単一の処理装置または複数のプロセッサ上で実行することができる。ステップ、動作または演算は特定の順序で表わされ得るが、この順序はさまざまな特定の実施形態において変更されてもよい。いくつかの特定の実施形態においては、この明細書中で連続的なもの
として示されている複数のステップは同時に実行することができる。
【0164】
特定の実施形態は、命令実行システム、装置、システムもしくはデバイスによって、またはそれらに関連付けて用いられるようにコンピュータ読取可能記憶媒体において実現されてもよい。特定の実施形態は、ソフトウェアもしくはハードウェアまたはそれらの組合わせで制御論理の形態で実現することができる。制御論理は、1つ以上のプロセッサによって実行されると、特定の実施形態において記載されているものを実行するように動作可能であり得る。
【0165】
特定の実施形態は、特定用途向け集積回路、プログラマブルロジックデバイス、フィールドプログラマブルゲートアレイ、光学的、化学的、生物学的、量子的またはナノ設計型のシステム、コンポーネントおよびメカニズムを用いることによる、プログラムド汎用デジタルコンピュータを用いることによって実現されてもよい。一般に、特定の実施形態の機能は当該技術において公知である如何なる手段によっても達成することができる。分散型のネットワーク化システム、コンポーネントおよび/または回路を用いることができる。データの通信または転送は有線、無線または他のいずれかの手段によってなされてもよい。
【0166】
添付の図面/図に示される要素のうちの1つ以上が、特定用途に応じて有用となるように、さらに分離された態様もしくは一体化された態様で、または場合によっては削除されるかもしくは動作不能にされた態様で実現可能であることも認識されるだろう。コンピュータが上述の方法のうちのいずれかを実行することを可能にするために機械読取り可能媒体に記憶することができるプログラムまたはコードを実現することも精神および範囲内にある。
【0167】
「プロセッサ」は、データ、信号または他の情報を処理する任意の好適なハードウェアおよび/もしくはソフトウェアシステム、メカニズムまたはコンポーネントを含む。プロセッサは、汎用の中央処理装置、複数の処理装置、機能を達成するための専用回路部を有するシステム、または他のシステムを含み得る。処理は地理的な場所に限定される必要はなく、時間的な限定を有する必要もない。たとえば、プロセッサはその機能を「リアルタイム」で、「オフライン」で、「バッチモード」で、などで実行することができる。処理の一部は、異なる(または同じ)処理システムによって異なる時間に異なる場所で実行され得る。処理システムの例は、サーバ、クライアント、エンドユーザデバイス、ルータ、スイッチ、ネットワーク化されたストレージ、などを含み得る。コンピュータはメモリと通信する如何なるプロセッサであってもよい。当該メモリは、ランダムアクセスメモリ(RAM)、読出専用メモリ(ROM)、磁気もしくは光学ディスク、またはプロセッサによって実行するべき命令を格納するのに好適な他の有形な媒体などの、如何なる好適なプロセッサ読取可能記憶媒体であってもよい。
【0168】
この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「a」、「an」および「the」という語は、文脈に別段明確な指示がない限り、複数の指示対象を含んでいる。また、この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「in」の意味は、文脈に別段明確な指示がない限り、「において(in)」および「の上に(on)」の意味を含んでいる。
【0169】
このように、特定の実施形態をこの明細書中に記載してきたが、上述の開示において変更、さまざまな変形および置換えの許容範囲が意図されており、場合によっては、特定の実施形態のいくつかの特徴が、上述の範囲および精神から逸脱することなく他の特徴を対応させて使用することなく採用され得ることが認識されるだろう。したがって、特定の状況または材料を本質的な範囲および精神に適合させるために多くの変更がなされてもよい
図1
図2-1】
図2-2】
図3
図4
図5
図6
【手続補正書】
【提出日】2022-06-24
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ネットワーク化されたコンピューティング環境におけるデジタルアセットのトレースの品質管理を容易にするための、コンピュータで実現される方法であって、前記方法は、
デジタルアセットの最初のソースファイルの第1のハッシュを演算することと、
ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、前記第1のハッシュを前記デジタルアセットのバージョンに関連付けて前記分散型台帳のエントリにコミットすることと、
前記最初のソースファイルをバイナリファイルに変換することと、
前記バイナリファイルのハッシュである第2のハッシュを演算することと、
前記第2のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳の第2のエントリにコミットすることと、
前記バイナリファイルをバイナリコードリポジトリに格納することと、
前記バイナリファイルをインストールおよび実行するために前記バイナリコードリポジトリからクライアントデバイスに提供することと、
前記クライアントデバイスが、提供された前記バイナリファイルを前記第2のハッシュと比較して、提供された前記バイナリファイルが変更されていないと判断することを可能にすることとを備える、方法。
【請求項2】
前記クライアントデバイスは、前記バイナリファイルへのアクセスが認証および許可されているコンシューマユーザのデバイスである、請求項1に記載の方法。
【請求項3】
前記バイナリファイルを暗号化して、前記バイナリファイルを復号する1つ以上の秘密鍵を前記コンシューマユーザに提供することをさらに備える、請求項2に記載の方法。
【請求項4】
クラウドサーバが、前記バイナリコードリポジトリからの前記バイナリファイルを前記第2のハッシュと比較して、提供された前記バイナリファイルが変更されていないと判断することと、
前記バイナリファイルが変更されていないと判断したことに応答して、前記バイナリファイルをプロダクションサーバに提供することとをさらに備える、請求項1~3のいずれか1項に記載の方法。
【請求項5】
前記バイナリファイルは、ソフトウェアアプリケーションをウェブアプリケーションとしてホストするための準備として、前記プロダクションサーバに提供される、請求項4に記載の方法。
【請求項6】
前記第2のハッシュを演算することは、前記分散型台帳を形成するブロックチェーンレプリカをホストする1つ以上のノードによって行われる、請求項1~5のいずれか1項に記載の方法。
【請求項7】
前記第1のハッシュを演算することは、前記最初のソースファイルのデジタルフィンガープリント、ユーザ識別(ID)、前記最初のソースファイルを生成するコンピューティングデバイスの中央処理装置(CPU)ID、および前記コンピューティングデバイスのメディアアクセス制御(MAC)アドレス、を入力として使用するハッシュ関数によって実現される、請求項1~5のいずれか1項に記載の方法。
【請求項8】
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサによって実行される、1つ以上のコンピュータ読取可能媒体において符号化された論理とを備え、前記論理は実行されると、動作を実行するように動作可能であり、前記動作は、
デジタルアセットの最初のソースファイルの第1のハッシュを演算することと、
ネットワーク化されたコンピューティング環境の分散型台帳の1つ以上のノードを選択して、前記第1のハッシュを前記デジタルアセットのバージョンに関連付けて前記分散型台帳のエントリにコミットすることと、
前記最初のソースファイルをバイナリファイルに変換することと、
前記バイナリファイルのハッシュである第2のハッシュを演算することと、
前記第2のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳の第2のエントリにコミットすることと、
前記バイナリファイルをバイナリコードリポジトリに格納することと、
前記バイナリファイルをインストールおよび実行するために前記バイナリコードリポジトリからクライアントデバイスに提供することと、
前記クライアントデバイスが、提供された前記バイナリファイルを前記第2のハッシュと比較して、提供された前記バイナリファイルが変更されていないと判断することを可能にすることとを備える、システム。
【請求項9】
請求項1~7のいずれか1項に記載の方法を1つ以上のプロセッサに実行させるためのプログラム。
【外国語明細書】