(57)【要約】【課題】ソフトウェアのビルドプロセスの記録に適したシステムを提供する。【解決手段】システム（１００）は、コマンドライン、コマンドのバイナリファイル、読み込まれるファイル、および生成されたファイルの各ハッシュ値を含むビルドプロセスデータを生成してネットワーク（２０）に送信するビルドプロセス監視機能（１１）を有するノード（１０）と、現在の最新ブロックのブロックヘッダのハッシュ値、タイムスタンプ、ナンス値、および未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および複数のビルドプロセスデータを含むブロックを生成してネットワークに送信するブロック生成機能（１２）を有するノード（１０）と、これまでに生成されたブロックを保持し、ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能（１３）を有するノード（１０）とを備える。【選択図】図１
2020071691.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録するシステムであって、
ソフトウェアのビルドプロセスにおいて実行されるコマンドライン、前記コマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各ハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信するビルドプロセス監視機能を有する複数のノードと、
現在の最新ブロックのブロックヘッダのハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した，ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信するブロック生成機能を有するノードと、
これまでに生成されたブロックを保持しており、前記ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能を有する複数のノードと、を備えたソフトウェアビルドプロセス記録システム。
【請求項２】
前記ブロック保持機能を有する任意のノードに保持されている任意のブロックに含まれる任意のビルドプロセスデータとそのビルドプロセスデータの生成の元となったコマンドラインおよびファイルから再現したビルドプロセスデータとを比較してそのコマンドラインおよびファイルに対する改ざんの有無を検証するビルドプロセス検証機能を有するノードをさらに備えた請求項１に記載のソフトウェアビルドプロセス記録システム。
【請求項３】
前記ビルドプロセス監視機能が、ソフトウェアのビルドに関連する文書、音声、画像、動画などの各種ファイルのハッシュ値をさらに含むビルドプロセスデータを生成する請求項１または２に記載のソフトウェアビルドプロセス記録システム。
【請求項４】
前記ブロック保持機能が、前記ブロック生成機能を有するノードから受信したブロックの正しさを検証し、検証に成功した場合にそのブロックを新たに保持する請求項１ないし３のいずれかに記載のソフトウェアビルドプロセス記録システム。
【請求項５】
複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録する方法であって、
任意の複数のノードが、ソフトウェアのビルドプロセスにおいて実行されるコマンドライン、前記コマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各ハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信する工程と、
任意のノードが、現在の最新ブロックのブロックヘッダのハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した，ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信する工程と、
これまでに生成されたブロックを保持している任意の複数のノードが、受信したブロックを新たに保持する工程と、を備えたソフトウェアビルドプロセス記録方法。
【請求項６】
任意のノードが、任意の複数のノードに保持されている任意のブロックに含まれる任意のビルドプロセスデータとそのビルドプロセスデータの生成の元となったコマンドラインおよびファイルから再現したビルドプロセスデータとを比較してそのコマンドラインおよびファイルに対する改ざんの有無を検証する工程をさらに備えた請求項５に記載のソフトウェアビルドプロセス記録方法。
【請求項７】
コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムであって、
コンピュータに入力されたコマンドラインを取得するコマンドライン取得手段、
前記取得されたコマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各パスを特定するファイルパス特定手段、
前記取得されたコマンドラインおよび前記特定された各パスに存在するファイルの各ハッシュ値を計算するハッシュ値計算手段、
前記取得されたコマンドラインおよび前記特定された各パスを含むプロセスサマリを生成して所定の保存領域に保存するとともに、前記プロセスサマリにおける前記取得されたコマンドラインおよび前記特定された各パスを前記計算された各ハッシュ値に置き換えてビルドプロセスデータを生成するビルドプロセスデータ生成手段、および
複数のコンピュータで形成されるネットワークに前記生成されたビルドプロセスデータを送信する送信手段、としてコンピュータを機能させるソフトウェアビルドプロセス監視プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのビルドプロセスを記録するシステムおよび方法ならびにコンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムに関する。
【背景技術】
【０００２】
ソフトウェア製品の開発プロセスを事後的に検証可能にするソフトウェアトレーサビリティはソフトウェア製品が持つ重要な品質の一つである。ＣｏＥＳＴ（Center of Excellence for Software & Systems Traceability）の定義によれば、ソフトウェアトレーサビリティとは「ソフトウェア製品を構成する一意に識別可能な人工物を相互に関連付け、必要なリンクを維持し、それらのネットワークを使用して、ソフトウェア製品とその開発プロセスの両方の質問に答える能力」である。このようなソフトウェアトレーサビリティは訴訟による紛争解決時の有力な証拠になり得る。そのため、ソフトウェア内に存在する欠陥が人命や環境に大きな脅威を与え得る領域において、ソフトウェアトレーサビリティは特に重要視されている。
【０００３】
ソフトウェアトレーサビリティを担保する情報として、企業や組織内部に大量に蓄積された要求仕様書、設計書、ソースコードなどの人工物間のリンクを手作業で作成することはコストが大きく、投資効果が低いことが指摘されている。そこで、企業や組織内部に蓄積された情報群から自動的に関連リンクを生成する技術が開発されている（例えば、非特許文献１および２を）。また、オープンソースソフトウェア（ＯＳＳ）コンポーネントを使用したソフトウェア開発において各コンポーネントのライセンスコンプライアンス評価のために、ソフトウェアのビルド時に発生するシステムコールを監視して各コンポーネントの依存関係を自動構築している（例えば、非特許文献３を参照）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Hazeline U. Asuncion, Arthur U. Asuncion, Richard N. Taylor, "Software traceability with topic modeling," Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering, pp. 95-104, May 01-08, 2010.
【非特許文献２】N. Ali, Y.-G. Gueheneuc, G. Antoniol, "Trustrace: Mining software repositories to improve the accuracy of requirement traceability links", IEEE Trans. Software Eng., vol. 39, no. 5, pp. 725-741, 2013.
【非特許文献３】S. van der Burg, E. Dolstra, S. McIntosh, J. Davies, D. M. German, A. Hemel, "Tracing software build processes to uncover license compliance inconsistencies," Proc. of the 29th ACM/IEEE Intl. Conf. on Automated Software Engineering (ASE), pp. 731-742, 2014.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、ソフトウェア開発のグローバル化により、一つの開発プロジェクトに、地理的に分散した複数の開発拠点が参加するケースが増加している。例えば、北米に拠点を持つ企業がアジアに拠点を持つ企業に対してソフトウェア開発をアウトソーシングする場合が挙げられる。開発拠点の分散化によって開発スピードの向上やコスト削減が期待されるため、ソフトウェア開発のグローバル化・分散化の潮流は今後も拡大を続けると考えられる。一方で、時差の影響により適時のやりとりが不足し、関係者間の方向性の統一や信頼関係の構築が難しくなることが問題となる。特に、ソフトウェアトレーサビリティを担保する情報を複数の企業や組織間で活用する場合において、そのような情報の形式標準化や共有手法については未解決もしくは部分的な解決に留まっている。
【０００６】
一方、医療や食品など、ソフトウェア以外の分野におけるトレーサビリティ担保の取り組みとして、近年、ブロックチェーンが活用され始めている。しかし、医療や食品などの分野で活用されているトレーサビリティの仕組みをそのままソフトウェア開発の分野に適用するのは困難である。なぜなら、１）ソフトウェア製品は数百から数万以上の人工物の集合から構成され、２）ソフトウェア製品を構成する人工物（特にソースコード）はコピーや流用されるリスクが高い、という特有の事情があるからである。
【０００７】
上記問題に鑑み、本発明は、ソフトウェアのビルドプロセスの記録に適したシステム、およびそのようなシステムで使用され、コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一局面に従うと、複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録するシステムであって、ソフトウェアのビルドプロセスにおいて実行されるコマンドライン、前記コマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各ハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信するビルドプロセス監視機能を有する複数のノードと、現在の最新ブロックのブロックヘッダのハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した，ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信するブロック生成機能を有するノードと、これまでに生成されたブロックを保持しており、前記ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能を有する複数のノードと、を備えたソフトウェアビルドプロセス記録システムが提供される。
【０００９】
また、本発明の別の一局面に従うと、コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムであって、コンピュータに入力されたコマンドラインを取得するコマンドライン取得手段、前記取得されたコマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各パスを特定するファイルパス特定手段、前記取得されたコマンドラインおよび前記特定された各パスに存在するファイルの各ハッシュ値を計算するハッシュ値計算手段、前記取得されたコマンドラインおよび前記特定された各パスを含むプロセスサマリを生成して所定の保存領域に保存するとともに、前記プロセスサマリにおける前記取得されたコマンドラインおよび前記特定された各パスを前記計算された各ハッシュ値に置き換えてビルドプロセスデータを生成するビルドプロセスデータ生成手段、および複数のコンピュータで形成されるネットワークに前記生成されたビルドプロセスデータを送信する送信手段、としてコンピュータを機能させるソフトウェアビルドプロセス監視プログラムが提供される。
【発明の効果】
【００１０】
本発明によれば、ブロックチェーンを利用してソフトウェアのビルドプロセスを記録するようにしたことで、大量のソフトウェアビルドプロセスの記録を地理的および組織的な制約なくグローバルに実施することができ、事後的な検証も容易である。また、ビルドプロセスデータにはコマンドラインのハッシュ値やコマンドラインの実行に関連するファイルのハッシュ値が記されるだけであり、ソフトウェア製品を構成する人工物（特にソースコード）を公開する必要がなく秘匿性が保たれる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に係るソフトウェアビルドプロセス記録システムの全体構成図
【図２】一例に係るビルドプロセス監視機能を実現するソフトウェアのブロック図
【図３】ビルドプロセスデータ生成処理のフローチャート
【図４】コンパイルコマンドが実行される場合のビルドプロセスデータ生成例の模式図
【図５】ソフトウェアビルドプロセス記録システムにおいて利用するブロックチェーンの模式図
【図６】ビルドプロセスの事後検証処理を説明する図
【発明を実施するための形態】
【００１２】
以下、適宜図面を参照しながら、実施の形態を詳細に説明する。ただし、必要以上に詳細な説明は省略する場合がある。例えば、既によく知られた事項の詳細説明や実質的に同一の構成に対する重複説明を省略する場合がある。これは、以下の説明が不必要に冗長になるのを避け、当業者の理解を容易にするためである。
【００１３】
なお、発明者は、当業者が本発明を十分に理解するために添付図面および以下の説明を提供するのであって、これらによって特許請求の範囲に記載の主題を限定することを意図するものではない。
【００１４】
≪システム構成例≫
図１は、本発明の一実施形態に係るソフトウェアビルドプロセス記録システムの全体構成図である。本実施形態に係るソフトウェアビルドプロセス記録システム（以下、「プロセス記録システム」と称する）１００は、インターネット上に分散配置された複数のノード（パソコンやワークステーションといったコンピュータのこと）１０で構成される。なお、図１では、便宜上、８個のノード１０を例示しているが、プロセス記録システム１００を構成するノード１０は８個に限定されず、ノード１０が８個未満の小規模な構成、あるいは数十、数百のノード１０が参加する大規模な構成も可能である。
【００１５】
ノード１０に地理的あるいは組織的な制限はなく、世界中のさまざまなソフトウェアベンダーやソフトウェアハウスのコンピュータや世界各地のエンドユーザのコンピュータなどがノード１０になり得る。例えば、北米のＡ社所属のコンピュータ、アジアのＢ社所属のコンピュータ、日本のエンドユーザーＣのコンピュータなどがプロセス記録システム１００の構成要素となることができる。
【００１６】
プロセス記録システム１００においてノード１０はピアツーピア型のネットワーク２０を形成している。すなわち、プロセス記録システム１００においてノード１０間でクライアント−サーバといった上下関係はなく、各ノード１０は対等な立場で互いに通信し合う。なお、各ノード１０が他のすべてのノード１０に直接接続されているとは限らず、別のノード１０を経由して相手のノード１０と通信するようなノード１０があってもよい。
【００１７】
上記構成のプロセス記録システム１００においてソフトウェア開発の証拠として残しておくべきソフトウェアのビルドプロセスの情報は所定時間ごとにデータの塊であるブロック（図５のブロック５０）にまとめられ、そのようなブロックの連鎖、すなわちブロックチェーンが複数のノード１０に分散して保持される。このようにプロセス記録システム１００は、分散型台帳の一つであるブロックチェーンの技術を応用してソフトウェアのビルドプロセスの情報を記録する。
【００１８】
ブロックチェーンを用いてソフトウェアのビルドプロセスの情報を記録するために、プロセス記録システム１００は、ビルドプロセス監視機能１１、ブロック生成機能１２、およびブロック保持機能１３の３つの機能を備えている。これら３つの機能は互いに独立しており、一つのノード１０に任意の一または複数の機能をインストールすることができる。このうちブロック生成機能１２を有するノード１０が少なくとも一つあればプロセス記録システム１００は全体として有効に機能する。また、任意のビルドプロセスを事後的に検証可能にするために、ビルドプロセス検証機能１４を有するノード１０がプロセス記録システム１００に少なくとも一つあればよい。以下、各機能について順に説明する。
【００１９】
≪ビルドプロセス監視機能≫
図２は、一例に係るビルドプロセス監視機能を実現するソフトウェアのブロック図である。図３は、ビルドプロセス監視機能を有するノード１０におけるビルドプロセスデータ生成処理のフローチャートである。図４は、コンパイルコマンドが実行される場合のビルドプロセスデータ生成例の模式図である。以下、これら図を参照してビルドプロセス監視機能について詳細に説明する。
【００２０】
ビルドプロセス監視機能１１は、主にソフトウェアハウスやソフトウェアベンダーなどのソフトウェア開発者側のコンピュータにインストールされる機能であり、コンピュータを用いて行われるソフトウェア開発作業を監視し、実行されたコマンドラインやその実行に係る入出力ファイルの情報などを所定フォーマットのビルドプロセスデータにしてネットワーク２０に送信する。
【００２１】
図２に示すように、ビルドプロセス監視機能１１は、オペレーティングシステム（ＯＳ）１０１のカーネルとして、あるいはＯＳとアプリケーションプログラム（ＡＰ）１０２との間に介在するミドルウェアとして実現することができる。具体的には、ビルドプロセス監視機能１１は、コマンドライン取得部１１１、ファイルパス特定部１１２、ハッシュ値計算部１１３、ビルドプロセスデータ生成部１１４、および送信部１１５を備えている。
【００２２】
ソフトウェア開発者がソフトウェアを開発する場合、キーボードからコンソールあるいはターミナルなどのＣＵＩ（Character User Interface）に直接コマンドを入力する、あるいはソフトウェア開発用アプリケーションにより提供されるＧＵＩ（Graphical User Interface）を通じてコマンドを入力するなどしてコンパイル、ビルド、メイクなどを実行し、ソースコードファイル、中間バイナリファイル、ライブラリファイルなどを読み込んでオブジェクトファイルを生成することがある。コマンドライン取得部１１１は、ソフトウェア開発者がＡＰ１０２を通じてあるいはＯＳ１０１のコンソールを通じてコンピュータに入力するコンパイル、ビルド、メイクなどのコマンドを監視し、その入力されたコマンドラインを取得する（図３のＳ１）。図４の例では、コマンドライン取得部１１１は、コンソールにコンパイルコマンド“gcc”が入力されたことを認識し、そのコマンドを含む“LANG=C /usr/bin/gcc /mysrc.c -o myprogram”というコマンドラインを取得している。
【００２３】
ファイルパス特定部１１２は、コマンドライン取得部１１１が取得したコマンドラインの実行に関連するファイルの各パスを特定する（図３のＳ２）。具体的には、ファイルパス特定部１１２は、ファイルパスが省略されている場合には適宜補って、コマンドのバイナリファイル（以下、「コマンドバイナリ」という）、コマンドラインで指定されたファイル（例えば、ソースコードやMakefileなど）およびコマンドラインの実行時に呼び出されるその他のファイル（以下、「読み込みファイル」という）、コマンドラインを実行して得られたファイル（以下、「生成ファイル」という）の各パスを特定する。図４の例では、ファイル特定部１１２は、コマンドバイナリのファイルパスが“/usr/bin/gcc”であり、読み込みファイルのファイルパスが“/mysrc.c”、“/usr/include/stdlib.h”、“/usr/lib/glibc.o”であり、生成ファイルのファイルパスが“/myprogram”であることを特定している。このように、ファイルパス特定部１１２は、コマンドラインに明記されていない、ソースコード“/mysrc.c”において列挙されたヘッダファイルやライブラリオブジェクトなどのパスも特定する。
【００２４】
ハッシュ値計算部１１３は、コマンドライン取得部１１１が取得したコマンドライン、ならびにファイルパス特定部１１２が特定した各パスに存在するコマンドバイナリ、読み込みファイル、および生成ファイルの各ハッシュ値を計算する（図３のＳ３）。具体的には、ハッシュ値計算部１１３は、RIPEMD（RACE Integrity Primitives Evaluation Message Digest）、RIPEMD-160、MD5（Message Digest Algorithm 5）、SHA（Secure Hash Algorithm）-256、SHA-3などのハッシュ関数を用いて、任意の長さの任意の文字列あるいは任意のサイズの任意のデータを受け、決められたサイズの出力を生成する。
【００２５】
ビルドプロセスデータ生成部１１４は、コマンドライン取得部１１１が取得したコマンドライン、およびファイルパス特定部１１２が特定した各パスに存在するコマンドバイナリ、読み込みファイル、生成ファイルの各パスを含むプロセスサマリ３０を生成して図略のストレージ装置に保存する（図３のＳ４）。また、ビルドプロセスデータ生成部１１４は、プロセスサマリ３０におけるコマンドラインおよび各ファイルのパスを、ハッシュ値計算部１１３によって計算された各ハッシュ値に置き換えてビルドプロセスデータ４０を生成する（図３のＳ５）。
【００２６】
さらにビルドプロセスデータ生成部１１４は、ソフトウェアメトリクスや要求仕様書やソフトウェアインストール手順などの文書のほか、音声、画像、動画などソフトウェアのビルドに関連するあらゆる種類のファイルのパスをプロセスサマリ３０に含めることができ、それらパスをハッシュ値計算部１１３によって計算されたハッシュ値（各パスに存在するファイルのハッシュ値）に置き換えてビルドプロセスデータ４０を生成することができる。
【００２７】
このようにプロセスサマリ３０は、ソフトウェアのビルドプロセスにおいてどのようなコマンドラインが実行され、それによりどのファイルが読み込まれてどのファイルが生成されたのか、またどのようなファイルが紐づけられているかといったファイルリンク情報を表している。一方、ビルドプロセスデータ４０は、プロセスサマリ３０に記されたコマンドラインや入出力ファイルパスをハッシュ値に置き換え（ファイルパスはそのパスに存在するファイルのハッシュ値に置き換え）、そのビルドプロセスにおいて具体的にどのようなコマンドラインが実行され、どのファイルが読み込まれ、どのファイルが生成されたのかを秘匿化したものである。なお、プロセスサマリ３０およびそれに記された各パスに存在するファイルは後にソフトウェアのビルドプロセスの検証において必要となるため、削除されることのないよう各企業において厳重に保管することが重要である。
【００２８】
送信部１１５は、ビルドプロセスデータ生成部１１４によって生成されたビルドプロセスデータ４０をネットワーク２０に送信する（図３のＳ６）。より詳細には、送信部１１５は、いつ誰によってビルドプロセスデータ４０が作成されたのかを記録するためにビルドプロセス４０に電子署名をした上でネットワーク２０に送信する。なお、ビルドプロセスデータ４０はネットワーク２０にブロードキャストしてもよいし、ブロック生成機能１２を有する特定のノード１０にユニキャストあるいはマルチキャストしてもよい。
【００２９】
≪ブロック生成機能≫
図５は、プロセス記録システム１０において利用するブロックチェーンの模式図である。プロセス記録システム１００においてネットワーク２０に送信されたビルドプロセスデータ４０は所定時間ごとにブロック５０にまとめられ、各ブロック５０が一つ前のブロック５０のハッシュ値を保持する形で繋がってブロックチェーン２００が形成される。ブロック５０は、ブロックヘッダ５１と、複数のビルドプロセスデータ４０とを含む。ブロックヘッダ５１は、一つ前のブロック５０のブロックヘッダ５１のハッシュ値５２と、ブロック５０の生成時刻を表すタイムスタンプ５３と、ナンス値５４と、ブロック５０に含まれる複数のビルドプロセスデータ４０のトップハッシュ５５とを含む。
【００３０】
ブロック生成機能１２を有するノード１０は、ビルドプロセス監視機能１１を有するノード１０からネットワーク２０に送信され、ブロックチェーン２００に未登録のビルドプロセスデータ４０を集めて新たなブロック５０を生成する。例えば、現在の最新ブロック５０のブロック番号が［ｎ］であり、ブロック番号［ｎ＋１］のブロック５０を生成する場合、ブロック生成機能１２を有するノード１０は、ブロック番号［ｎ］のブロック５０のブロックヘッダ５１のハッシュ値５２を計算し、ブロックチェーン２００に未登録のビルドプロセスデータ４０を集めてそのマークルツリーのルートに相当するトップハッシュ５５を計算し、タイムスタンプ５３および適当なナンス値５４を設定してブロックヘッダ５１を生成する。そして、ブロック生成機能１２を有するノード１０は、生成したブロックヘッダ５１のハッシュ値が目標値よりも小さくなるようなナンス値５４が見つかるまでナンス値５４の変更を繰り返し、条件を満たすナンス値５４が見つかればブロックヘッダ５１を確定させてブロック番号［ｎ＋１］のブロック５０をネットワーク２０に送信する。なお、ブロック５０はネットワーク２０にブロードキャストしてもよいし、ブロック保持機能１３を有する複数のノード１０にマルチキャストしてもよい。
【００３１】
プロセス記録システム１０ではブロックチェーン２００としてパブリック、プライベート、およびコンソーシアムのいずれのタイプも適用可能である。例えばパブリック型のブロックチェーン２００を適用した場合、誰でも自由にブロック生成機能１２を有するノード１０としてプロセス記録システム１００に参加することができる。この場合、最も早くブロック５０を生成した者に報酬を支払うようなＰｏＷ（プルーフオブワーク）などのコンセンサスアルゴリズムを導入することでブロック５０の生成機能を維持することができる。一方、プライベート型あるいはコンソーシアム型のブロックチェーン２００を適用した場合、プロセス記録システム１００に管理者を設定し、管理者または管理者に許可された者のみがブロック生成機能１２を有するノード１０としてプロセス記録システム１００に参加することができる。
【００３２】
≪ブロック保持機能≫
ブロック保持機能１３を有するノード１０はこれまでに生成されたブロック５０を保持しており、ブロック生成機能１２を有するノード１０から受信したブロック５０を新たに保持する。プライベート型またはコンソーシアム型のブロックチェーン２００の場合、ブロック生成機能１２を有するノード１０が生成したブロック５０は信頼できるため、ブロック保持機能１３を有するノード１０はそれをそのまま保持してもよいが、パブリック型のブロックチェーン２００の場合、ブロック生成機能１２を有するノード１０が生成したブロック５０の正しさを検証する必要がある。そこで、ブロック保持機能１３を有するノード１０は、ブロック生成機能１２を有するノード１０から受信したブロック５０の正しさを検証し、検証に成功した場合にそのブロック５０を新たに保持するようにしてもよい。より詳細には、そのようなブロック保持機能１３を有するノード１０は、ブロック生成機能１２を有するノード１０から受信したブロック５０のブロックヘッダ５１に含まれる一つ前のブロックのハッシュ値５２が正しいかどうか、ナンス値５４が所定の条件を満たしているかどうか、そのブロック５０に含まれる複数のビルドプロセスデータ４０のトップハッシュを計算し、それがそのブロック５０のブロックヘッダ５１に含まれるトップハッシュ５５と一致するかなどの検証を行って、そのブロック５０の正しさを判定する。このようにして正しく生成されたブロック５０のみがブロックチェーン２００に追加されていく。
【００３３】
≪ビルドプロセス検証機能≫
プロセス記録システム１００ではソフトウェアにウイルスやスパイウェアなどが仕込まれていないかどうかや報告されているソフトウェアメトリクスに疑義が生じた場合、誰でもビルドプロセス検証機能１４を利用して任意のビルドプロセスデータ４０を事後的に検証することができる。なお、ビルドプロセスデータ４０の事後検証に当たって、そのビルドプロセスデータ４０の生成に関わった企業や組織からそのビルドプロセスデータ４０に対応するプロセスサマリ３０およびそのプロセスサマリ３０に列挙されたすべてのファイルを入手する必要がある。
【００３４】
図６は、ビルドプロセスの事後検証処理を説明する図である。ビルドプロセス検証機能１４を有するノード１０は、ブロック保持機能１３を有する任意のノード１０に保持されている任意のブロック５０に含まれる任意のビルドプロセスデータ４０を取得する。一方、ビルドプロセス検証機能１４を有するノード１０は、企業や組織から別途入手したプロセスサマリ３０およびファイル３１からビルドプロセスデータ４０Ａを再現する。この再現手順は上述したビルドプロセスデータ生成と同じである。そして、ビルドプロセス検証機能１４を有するノード１０は、取得したビルドプロセスデータ４０と再現したビルドプロセスデータ４０Ａとを比較して、両者が一致すればビルドプロセスデータ４０は改ざんなしと判定し、一致しなければ改ざんありと判定する。
【００３５】
≪効果≫
本実施形態によると次のような効果が奏される。
１）大量のソフトウェアビルドプロセスの記録を地理的および組織的な制約なくグローバルに実施することができる。
２）新たに生成されたビルドプロセスデータ４０が次々とブロック５０にまとめられて連結されることでソフトウェアビルドの順序関係が保証される。
３）ビルドプロセスデータ４０にはコマンドラインのハッシュ値やコマンドラインの実行に関連するファイルのハッシュ値が記されるだけであり、ソフトウェア製品を構成する人工物（特にソースコード）を公開する必要がなく秘匿性が保たれる。
４）ブロックチェーン２００を利用して多くの参加者でビルドプロセスデータ４０を共有することで、ビルドプロセスの改ざんがしにくくなる。また、誰でも任意のビルドプロセスを事後的に検証することができ、ソフトウェアトレーサビリティが担保される。
５）パブリック型のブロックチェーン２００を適用した場合にはプロセス記録システム１００の管理者が不要となり、誰でも自由に参加できるプラットフォームが実現できる。
６）コンピュータにビルドプロセス監視機能１１をインストールすることで、ソフトウェア開発作業の裏でコンピュータが自動的にビルドプロセスデータ４０を生成してネットワーク２０に送信し、それが記録されていくため、開発者はビルドプロセスの記録を意識することなくソフトウェア開発を行うことができる。
【００３６】
≪変形例≫
コマンドが実行されたタイミングでビルドプロセスデータ４０を生成する以外に、コマンドが実行されなくとも所定のタイミングで対象ファイルのスナップショットを取ってそのハッシュ値をビルドプロセスデータ４０に登録するようにしてもよい。例えば、データベースのように連続稼働しているシステムが扱うファイルで有効である。
【００３７】
また、最終的なソフトウェア製品とは関係のない一時的なテストファイルのビルドプロセスはプロセス記録システム１００に記録する必要がないため、ビルドプロセス監視機能１１の有効／無効の切り替えができるようにして不要なビルドプロセスデータ４０が生成されないようにしてもよい。
【００３８】
また、コマンドラインが一つ実行されるたびに逐一ビルドプロセスデータ４０を生成するのではなく、複数のコマンドラインの実行を一括りにして一つのビルドプロセスデータ４０を生成するようにしてもよい。これにより、ビルドプロセスデータ４０の送信頻度を少なくすることができる。
【００３９】
以上のように、本発明における技術の例示として、実施の形態を説明した。そのために、添付図面および詳細な説明を提供した。
【００４０】
したがって、添付図面および詳細な説明に記載された構成要素の中には、課題解決のために必須な構成要素だけでなく、上記技術を例示するために、課題解決のためには必須でない構成要素も含まれ得る。そのため、それらの必須ではない構成要素が添付図面や詳細な説明に記載されていることをもって、直ちに、それらの必須ではない構成要素が必須であるとの認定をするべきではない。
【００４１】
また、上述の実施の形態は、本発明における技術を例示するためのものであるから、特許請求の範囲またはその均等の範囲において種々の変更、置き換え、付加、省略などを行うことができる。
【符号の説明】
【００４２】
１００…ソフトウェアビルドプロセス記録システム、１０…ノード（コンピュータ）、１１…ビルドプロセス監視機能、１２…ブロック生成機能、１３…ブロック保持機能、１４…ビルドプロセス検証機能、２０…ネットワーク、１１１…コマンドライン取得部、１１２…ファイルパス取得部、１１３…ハッシュ値計算部、１１４…ビルドプロセスデータ生成部、１１５…送信部、３０…プロセスサマリ、４０…ビルドプロセスデータ、５０…ブロック、５１…ブロックヘッダ、５２…一つ前のブロックのハッシュ値、５３…タイムスタンプ、５４…ナンス値、５５…トップハッシュ、２００…ブロックチェーン
【図１】
2020071691.tif 000003
【図２】
2020071691.tif 000004
【図３】
2020071691.tif 000005
【図４】
2020071691.tif 000006
【図５】
2020071691.tif 000007
【図６】
2020071691.tif 000008
【手続補正書】
【提出日】令和2年2月3日(2020.2.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録するシステムであって、
ソフトウェアのビルドプロセスにおいて実行されるコマンドラインの不可逆変換であるハッシュ値、前記コマンドラインにおけるコマンドのバイナリファイルの不可逆変換であるハッシュ値、前記コマンドラインで指定されたファイルの不可逆変換であるハッシュ値、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイルの不可逆変換であるハッシュ値、および前記コマンドラインを実行して得られたファイルの不可逆変換であるハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信するビルドプロセス監視機能を有する複数のノードと、
現在の最新ブロックのブロックヘッダの不可逆変換であるハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した，ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信するブロック生成機能を有するノードと、
これまでに生成されたブロックを保持しており、前記ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能を有する複数のノードと、を備えたソフトウェアビルドプロセス記録システム。
【請求項２】
前記ブロック保持機能を有する任意のノードに保持されている任意のブロックに含まれる任意のビルドプロセスデータとそのビルドプロセスデータの生成の元となったコマンドラインおよびファイルから再現したビルドプロセスデータとを比較してそのコマンドラインおよびファイルに対する改ざんの有無を検証するビルドプロセス検証機能を有するノードをさらに備えた請求項１に記載のソフトウェアビルドプロセス記録システム。
【請求項３】
前記ビルドプロセス監視機能が、ソフトウェアのビルドに関連するファイルの不可逆変換であるハッシュ値をさらに含むビルドプロセスデータを生成する請求項１または２に記載のソフトウェアビルドプロセス記録システム。
【請求項４】
前記ブロック保持機能が、前記ブロック生成機能を有するノードから受信したブロックの正しさを検証し、検証に成功した場合にそのブロックを新たに保持する請求項１ないし３のいずれかに記載のソフトウェアビルドプロセス記録システム。
【請求項５】
複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録する方法であって、
任意の複数のノードが、ソフトウェアのビルドプロセスにおいて実行されるコマンドラインの不可逆変換であるハッシュ値、前記コマンドラインにおけるコマンドのバイナリファイルの不可逆変換であるハッシュ値、前記コマンドラインで指定されたファイルの不可逆変換であるハッシュ値、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイルの不可逆変換であるハッシュ値、および前記コマンドラインを実行して得られたファイルの不可逆変換であるハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信する第１の工程と、
任意のノードが、現在の最新ブロックのブロックヘッダの不可逆変換であるハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記第１の工程を実行する複数のノードから受信した，ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信する第２の工程と、
これまでに生成されたブロックを保持している任意の複数のノードが、受信したブロックを新たに保持する第３の工程と、を備えたソフトウェアビルドプロセス記録方法。
【請求項６】
任意のノードが、任意の複数のノードに保持されている任意のブロックに含まれる任意のビルドプロセスデータとそのビルドプロセスデータの生成の元となったコマンドラインおよびファイルから再現したビルドプロセスデータとを比較してそのコマンドラインおよびファイルに対する改ざんの有無を検証する工程をさらに備えた請求項５に記載のソフトウェアビルドプロセス記録方法。
【請求項７】
コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムであって、
コンピュータに入力されたコマンドラインを取得するコマンドライン取得手段、
前記取得されたコマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各パスを特定するファイルパス特定手段、
前記取得されたコマンドラインの不可逆変換であるハッシュ値および前記特定された各パスに存在するファイルの不可逆変換であるハッシュ値を計算するハッシュ値計算手段、
前記取得されたコマンドラインおよび前記特定された各パスを含むプロセスサマリを生成して所定の保存領域に保存するとともに、前記プロセスサマリにおける前記取得されたコマンドラインおよび前記特定された各パスを前記計算された各ハッシュ値に置き換えてビルドプロセスデータを生成するビルドプロセスデータ生成手段、および
複数のコンピュータで形成されるネットワークに前記生成されたビルドプロセスデータを送信する送信手段、としてコンピュータを機能させるソフトウェアビルドプロセス監視プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
本発明の一局面に従うと、複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録するシステムであって、ソフトウェアのビルドプロセスにおいて実行されるコマンドラインの不可逆変換であるハッシュ値、前記コマンドラインにおけるコマンドのバイナリファイルの不可逆変換であるハッシュ値、前記コマンドラインで指定されたファイルの不可逆変換であるハッシュ値、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイルの不可逆変換であるハッシュ値、および前記コマンドラインを実行して得られたファイルの不可逆変換であるハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信するビルドプロセス監視機能を有する複数のノードと、現在の最新ブロックのブロックヘッダの不可逆変換であるハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した，ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信するブロック生成機能を有するノードと、これまでに生成されたブロックを保持しており、前記ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能を有する複数のノードと、を備えたソフトウェアビルドプロセス記録システムが提供される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
また、本発明の別の一局面に従うと、コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムであって、コンピュータに入力されたコマンドラインを取得するコマンドライン取得手段、前記取得されたコマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される，前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各パスを特定するファイルパス特定手段、前記取得されたコマンドラインの不可逆変換であるハッシュ値および前記特定された各パスに存在するファイルの不可逆変換であるハッシュ値を計算するハッシュ値計算手段、前記取得されたコマンドラインおよび前記特定された各パスを含むプロセスサマリを生成して所定の保存領域に保存するとともに、前記プロセスサマリにおける前記取得されたコマンドラインおよび前記特定された各パスを前記計算された各ハッシュ値に置き換えてビルドプロセスデータを生成するビルドプロセスデータ生成手段、および複数のコンピュータで形成されるネットワークに前記生成されたビルドプロセスデータを送信する送信手段、としてコンピュータを機能させるソフトウェアビルドプロセス監視プログラムが提供される。