特許第6692013号(P6692013)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 国立大学法人 奈良先端科学技術大学院大学の特許一覧

特許6692013ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム
<>
  • 特許6692013-ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム 図000002
  • 特許6692013-ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム 図000003
  • 特許6692013-ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム 図000004
  • 特許6692013-ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム 図000005
  • 特許6692013-ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム 図000006
  • 特許6692013-ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6692013
(24)【登録日】2020年4月16日
(45)【発行日】2020年5月13日
(54)【発明の名称】ソフトウェアビルドプロセス記録システムおよび方法ならびにソフトウェアビルドプロセス監視プログラム
(51)【国際特許分類】
   G06F 8/70 20180101AFI20200427BHJP
   G06F 21/64 20130101ALI20200427BHJP
【FI】
   G06F8/70
   G06F21/64
【請求項の数】7
【全頁数】13
(21)【出願番号】特願2018-205564(P2018-205564)
(22)【出願日】2018年10月31日
(65)【公開番号】特開2020-71691(P2020-71691A)
(43)【公開日】2020年5月7日
【審査請求日】2019年8月5日
【早期審査対象出願】
(73)【特許権者】
【識別番号】504143441
【氏名又は名称】国立大学法人 奈良先端科学技術大学院大学
(74)【代理人】
【識別番号】100163186
【弁理士】
【氏名又は名称】松永 裕吉
(72)【発明者】
【氏名】幾谷 吉晴
(72)【発明者】
【氏名】石尾 隆
(72)【発明者】
【氏名】吉上 康平
(72)【発明者】
【氏名】畑 秀明
(72)【発明者】
【氏名】松本 健一
【審査官】 三坂 敏夫
(56)【参考文献】
【文献】 特開2018−152050(JP,A)
【文献】 米国特許出願公開第2018/0046455(US,A1)
【文献】 特開2014−157536(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00− 8/38
8/60− 8/77
9/44− 9/451
21/64
(57)【特許請求の範囲】
【請求項1】
複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録するシステムであって、
ソフトウェアのビルドプロセスにおいて実行されるコマンドラインの不可逆変換であるハッシュ値、前記コマンドラインにおけるコマンドのバイナリファイルの不可逆変換であるハッシュ値、前記コマンドラインで指定されたファイルの不可逆変換であるハッシュ値、前記コマンドラインの実行時に呼び出される,前記指定されたファイル以外のファイルの不可逆変換であるハッシュ値、および前記コマンドラインを実行して得られたファイルの不可逆変換であるハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信するビルドプロセス監視機能を有する複数のノードと、
現在の最新ブロックのブロックヘッダの不可逆変換であるハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した,ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信するブロック生成機能を有するノードと、
これまでに生成されたブロックを保持しており、前記ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能を有する複数のノードと、を備えたソフトウェアビルドプロセス記録システム。
【請求項2】
前記ブロック保持機能を有する任意のノードに保持されている任意のブロックに含まれる任意のビルドプロセスデータとそのビルドプロセスデータの生成の元となったコマンドラインおよびファイルから再現したビルドプロセスデータとを比較してそのコマンドラインおよびファイルに対する改ざんの有無を検証するビルドプロセス検証機能を有するノードをさらに備えた請求項1に記載のソフトウェアビルドプロセス記録システム。
【請求項3】
前記ビルドプロセス監視機能が、ソフトウェアのビルドに関連するファイルの不可逆変換であるハッシュ値をさらに含むビルドプロセスデータを生成する請求項1または2に記載のソフトウェアビルドプロセス記録システム。
【請求項4】
前記ブロック保持機能が、前記ブロック生成機能を有するノードから受信したブロックの正しさを検証し、検証に成功した場合にそのブロックを新たに保持する請求項1ないし3のいずれかに記載のソフトウェアビルドプロセス記録システム。
【請求項5】
複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録する方法であって、
任意の複数のノードが、ソフトウェアのビルドプロセスにおいて実行されるコマンドラインの不可逆変換であるハッシュ値、前記コマンドラインにおけるコマンドのバイナリファイルの不可逆変換であるハッシュ値、前記コマンドラインで指定されたファイルの不可逆変換であるハッシュ値、前記コマンドラインの実行時に呼び出される,前記指定されたファイル以外のファイルの不可逆変換であるハッシュ値、および前記コマンドラインを実行して得られたファイルの不可逆変換であるハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信する第1の工程と、
任意のノードが、現在の最新ブロックのブロックヘッダの不可逆変換であるハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記第1の工程を実行する複数のノードから受信した,ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信する第2の工程と、
これまでに生成されたブロックを保持している任意の複数のノードが、受信したブロックを新たに保持する第3の工程と、を備えたソフトウェアビルドプロセス記録方法。
【請求項6】
任意のノードが、任意の複数のノードに保持されている任意のブロックに含まれる任意のビルドプロセスデータとそのビルドプロセスデータの生成の元となったコマンドラインおよびファイルから再現したビルドプロセスデータとを比較してそのコマンドラインおよびファイルに対する改ざんの有無を検証する工程をさらに備えた請求項5に記載のソフトウェアビルドプロセス記録方法。
【請求項7】
コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムであって、
コンピュータに入力されたコマンドラインを取得するコマンドライン取得手段、
前記取得されたコマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される,前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各パスを特定するファイルパス特定手段、
前記取得されたコマンドラインの不可逆変換であるハッシュ値および前記特定された各パスに存在するファイルの不可逆変換であるハッシュ値を計算するハッシュ値計算手段、
前記取得されたコマンドラインおよび前記特定された各パスを含むプロセスサマリを生成して所定の保存領域に保存するとともに、前記プロセスサマリにおける前記取得されたコマンドラインおよび前記特定された各パスを前記計算された各ハッシュ値に置き換えてビルドプロセスデータを生成するビルドプロセスデータ生成手段、および
複数のコンピュータで形成されるネットワークに前記生成されたビルドプロセスデータを送信する送信手段、としてコンピュータを機能させるソフトウェアビルドプロセス監視プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアのビルドプロセスを記録するシステムおよび方法ならびにコンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムに関する。
【背景技術】
【0002】
ソフトウェア製品の開発プロセスを事後的に検証可能にするソフトウェアトレーサビリティはソフトウェア製品が持つ重要な品質の一つである。CoEST(Center of Excellence for Software & Systems Traceability)の定義によれば、ソフトウェアトレーサビリティとは「ソフトウェア製品を構成する一意に識別可能な人工物を相互に関連付け、必要なリンクを維持し、それらのネットワークを使用して、ソフトウェア製品とその開発プロセスの両方の質問に答える能力」である。このようなソフトウェアトレーサビリティは訴訟による紛争解決時の有力な証拠になり得る。そのため、ソフトウェア内に存在する欠陥が人命や環境に大きな脅威を与え得る領域において、ソフトウェアトレーサビリティは特に重要視されている。
【0003】
ソフトウェアトレーサビリティを担保する情報として、企業や組織内部に大量に蓄積された要求仕様書、設計書、ソースコードなどの人工物間のリンクを手作業で作成することはコストが大きく、投資効果が低いことが指摘されている。そこで、企業や組織内部に蓄積された情報群から自動的に関連リンクを生成する技術が開発されている(例えば、非特許文献1および2を)。また、オープンソースソフトウェア(OSS)コンポーネントを使用したソフトウェア開発において各コンポーネントのライセンスコンプライアンス評価のために、ソフトウェアのビルド時に発生するシステムコールを監視して各コンポーネントの依存関係を自動構築している(例えば、非特許文献3を参照)。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】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.
【非特許文献2】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.
【非特許文献3】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.
【発明の概要】
【発明が解決しようとする課題】
【0005】
近年、ソフトウェア開発のグローバル化により、一つの開発プロジェクトに、地理的に分散した複数の開発拠点が参加するケースが増加している。例えば、北米に拠点を持つ企業がアジアに拠点を持つ企業に対してソフトウェア開発をアウトソーシングする場合が挙げられる。開発拠点の分散化によって開発スピードの向上やコスト削減が期待されるため、ソフトウェア開発のグローバル化・分散化の潮流は今後も拡大を続けると考えられる。一方で、時差の影響により適時のやりとりが不足し、関係者間の方向性の統一や信頼関係の構築が難しくなることが問題となる。特に、ソフトウェアトレーサビリティを担保する情報を複数の企業や組織間で活用する場合において、そのような情報の形式標準化や共有手法については未解決もしくは部分的な解決に留まっている。
【0006】
一方、医療や食品など、ソフトウェア以外の分野におけるトレーサビリティ担保の取り組みとして、近年、ブロックチェーンが活用され始めている。しかし、医療や食品などの分野で活用されているトレーサビリティの仕組みをそのままソフトウェア開発の分野に適用するのは困難である。なぜなら、1)ソフトウェア製品は数百から数万以上の人工物の集合から構成され、2)ソフトウェア製品を構成する人工物(特にソースコード)はコピーや流用されるリスクが高い、という特有の事情があるからである。
【0007】
上記問題に鑑み、本発明は、ソフトウェアのビルドプロセスの記録に適したシステム、およびそのようなシステムで使用され、コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一局面に従うと、複数のコンピュータで形成されるネットワーク上のブロックチェーンにソフトウェアのビルドプロセスを記録するシステムであって、ソフトウェアのビルドプロセスにおいて実行されるコマンドラインの不可逆変換であるハッシュ値、前記コマンドラインにおけるコマンドのバイナリファイルの不可逆変換であるハッシュ値、前記コマンドラインで指定されたファイルの不可逆変換であるハッシュ値、前記コマンドラインの実行時に呼び出される,前記指定されたファイル以外のファイルの不可逆変換であるハッシュ値、および前記コマンドラインを実行して得られたファイルの不可逆変換であるハッシュ値を含むビルドプロセスデータを生成して前記ネットワークに送信するビルドプロセス監視機能を有する複数のノードと、現在の最新ブロックのブロックヘッダの不可逆変換であるハッシュ値、タイムスタンプ、所定の条件を満たすように選ばれたナンス値、および前記ビルドプロセス監視機能を有する複数のノードから受信した,ブロックチェーンに未登録の複数のビルドプロセスデータのトップハッシュを含むブロックヘッダ、および前記複数のビルドプロセスデータを含むブロックを生成して前記ネットワークに送信するブロック生成機能を有するノードと、これまでに生成されたブロックを保持しており、前記ブロック生成機能を有するノードから受信したブロックを新たに保持するブロック保持機能を有する複数のノードと、を備えたソフトウェアビルドプロセス記録システムが提供される。
【0009】
また、本発明の別の一局面に従うと、コンピュータにソフトウェアのビルドプロセスを監視させるためのプログラムであって、コンピュータに入力されたコマンドラインを取得するコマンドライン取得手段、前記取得されたコマンドラインにおけるコマンドのバイナリファイル、前記コマンドラインで指定されたファイル、前記コマンドラインの実行時に呼び出される,前記指定されたファイル以外のファイル、および前記コマンドラインを実行して得られたファイルの各パスを特定するファイルパス特定手段、前記取得されたコマンドラインの不可逆変換であるハッシュ値および前記特定された各パスに存在するファイルの不可逆変換であるハッシュ値を計算するハッシュ値計算手段、前記取得されたコマンドラインおよび前記特定された各パスを含むプロセスサマリを生成して所定の保存領域に保存するとともに、前記プロセスサマリにおける前記取得されたコマンドラインおよび前記特定された各パスを前記計算された各ハッシュ値に置き換えてビルドプロセスデータを生成するビルドプロセスデータ生成手段、および複数のコンピュータで形成されるネットワークに前記生成されたビルドプロセスデータを送信する送信手段、としてコンピュータを機能させるソフトウェアビルドプロセス監視プログラムが提供される。
【発明の効果】
【0010】
本発明によれば、ブロックチェーンを利用してソフトウェアのビルドプロセスを記録するようにしたことで、大量のソフトウェアビルドプロセスの記録を地理的および組織的な制約なくグローバルに実施することができ、事後的な検証も容易である。また、ビルドプロセスデータにはコマンドラインのハッシュ値やコマンドラインの実行に関連するファイルのハッシュ値が記されるだけであり、ソフトウェア製品を構成する人工物(特にソースコード)を公開する必要がなく秘匿性が保たれる。
【図面の簡単な説明】
【0011】
図1】本発明の一実施形態に係るソフトウェアビルドプロセス記録システムの全体構成図
図2】一例に係るビルドプロセス監視機能を実現するソフトウェアのブロック図
図3】ビルドプロセスデータ生成処理のフローチャート
図4】コンパイルコマンドが実行される場合のビルドプロセスデータ生成例の模式図
図5】ソフトウェアビルドプロセス記録システムにおいて利用するブロックチェーンの模式図
図6】ビルドプロセスの事後検証処理を説明する図
【発明を実施するための形態】
【0012】
以下、適宜図面を参照しながら、実施の形態を詳細に説明する。ただし、必要以上に詳細な説明は省略する場合がある。例えば、既によく知られた事項の詳細説明や実質的に同一の構成に対する重複説明を省略する場合がある。これは、以下の説明が不必要に冗長になるのを避け、当業者の理解を容易にするためである。
【0013】
なお、発明者は、当業者が本発明を十分に理解するために添付図面および以下の説明を提供するのであって、これらによって特許請求の範囲に記載の主題を限定することを意図するものではない。
【0014】
≪システム構成例≫
図1は、本発明の一実施形態に係るソフトウェアビルドプロセス記録システムの全体構成図である。本実施形態に係るソフトウェアビルドプロセス記録システム(以下、「プロセス記録システム」と称する)100は、インターネット上に分散配置された複数のノード(パソコンやワークステーションといったコンピュータのこと)10で構成される。なお、図1では、便宜上、8個のノード10を例示しているが、プロセス記録システム100を構成するノード10は8個に限定されず、ノード10が8個未満の小規模な構成、あるいは数十、数百のノード10が参加する大規模な構成も可能である。
【0015】
ノード10に地理的あるいは組織的な制限はなく、世界中のさまざまなソフトウェアベンダーやソフトウェアハウスのコンピュータや世界各地のエンドユーザのコンピュータなどがノード10になり得る。例えば、北米のA社所属のコンピュータ、アジアのB社所属のコンピュータ、日本のエンドユーザーCのコンピュータなどがプロセス記録システム100の構成要素となることができる。
【0016】
プロセス記録システム100においてノード10はピアツーピア型のネットワーク20を形成している。すなわち、プロセス記録システム100においてノード10間でクライアント−サーバといった上下関係はなく、各ノード10は対等な立場で互いに通信し合う。なお、各ノード10が他のすべてのノード10に直接接続されているとは限らず、別のノード10を経由して相手のノード10と通信するようなノード10があってもよい。
【0017】
上記構成のプロセス記録システム100においてソフトウェア開発の証拠として残しておくべきソフトウェアのビルドプロセスの情報は所定時間ごとにデータの塊であるブロック(図5のブロック50)にまとめられ、そのようなブロックの連鎖、すなわちブロックチェーンが複数のノード10に分散して保持される。このようにプロセス記録システム100は、分散型台帳の一つであるブロックチェーンの技術を応用してソフトウェアのビルドプロセスの情報を記録する。
【0018】
ブロックチェーンを用いてソフトウェアのビルドプロセスの情報を記録するために、プロセス記録システム100は、ビルドプロセス監視機能11、ブロック生成機能12、およびブロック保持機能13の3つの機能を備えている。これら3つの機能は互いに独立しており、一つのノード10に任意の一または複数の機能をインストールすることができる。このうちブロック生成機能12を有するノード10が少なくとも一つあればプロセス記録システム100は全体として有効に機能する。また、任意のビルドプロセスを事後的に検証可能にするために、ビルドプロセス検証機能14を有するノード10がプロセス記録システム100に少なくとも一つあればよい。以下、各機能について順に説明する。
【0019】
≪ビルドプロセス監視機能≫
図2は、一例に係るビルドプロセス監視機能を実現するソフトウェアのブロック図である。図3は、ビルドプロセス監視機能を有するノード10におけるビルドプロセスデータ生成処理のフローチャートである。図4は、コンパイルコマンドが実行される場合のビルドプロセスデータ生成例の模式図である。以下、これら図を参照してビルドプロセス監視機能について詳細に説明する。
【0020】
ビルドプロセス監視機能11は、主にソフトウェアハウスやソフトウェアベンダーなどのソフトウェア開発者側のコンピュータにインストールされる機能であり、コンピュータを用いて行われるソフトウェア開発作業を監視し、実行されたコマンドラインやその実行に係る入出力ファイルの情報などを所定フォーマットのビルドプロセスデータにしてネットワーク20に送信する。
【0021】
図2に示すように、ビルドプロセス監視機能11は、オペレーティングシステム(OS)101のカーネルとして、あるいはOSとアプリケーションプログラム(AP)102との間に介在するミドルウェアとして実現することができる。具体的には、ビルドプロセス監視機能11は、コマンドライン取得部111、ファイルパス特定部112、ハッシュ値計算部113、ビルドプロセスデータ生成部114、および送信部115を備えている。
【0022】
ソフトウェア開発者がソフトウェアを開発する場合、キーボードからコンソールあるいはターミナルなどのCUI(Character User Interface)に直接コマンドを入力する、あるいはソフトウェア開発用アプリケーションにより提供されるGUI(Graphical User Interface)を通じてコマンドを入力するなどしてコンパイル、ビルド、メイクなどを実行し、ソースコードファイル、中間バイナリファイル、ライブラリファイルなどを読み込んでオブジェクトファイルを生成することがある。コマンドライン取得部111は、ソフトウェア開発者がAP102を通じてあるいはOS101のコンソールを通じてコンピュータに入力するコンパイル、ビルド、メイクなどのコマンドを監視し、その入力されたコマンドラインを取得する(図3のS1)。図4の例では、コマンドライン取得部111は、コンソールにコンパイルコマンド“gcc”が入力されたことを認識し、そのコマンドを含む“LANG=C /usr/bin/gcc /mysrc.c -o myprogram”というコマンドラインを取得している。
【0023】
ファイルパス特定部112は、コマンドライン取得部111が取得したコマンドラインの実行に関連するファイルの各パスを特定する(図3のS2)。具体的には、ファイルパス特定部112は、ファイルパスが省略されている場合には適宜補って、コマンドのバイナリファイル(以下、「コマンドバイナリ」という)、コマンドラインで指定されたファイル(例えば、ソースコードやMakefileなど)およびコマンドラインの実行時に呼び出されるその他のファイル(以下、「読み込みファイル」という)、コマンドラインを実行して得られたファイル(以下、「生成ファイル」という)の各パスを特定する。図4の例では、ファイル特定部112は、コマンドバイナリのファイルパスが“/usr/bin/gcc”であり、読み込みファイルのファイルパスが“/mysrc.c”、“/usr/include/stdlib.h”、“/usr/lib/glibc.o”であり、生成ファイルのファイルパスが“/myprogram”であることを特定している。このように、ファイルパス特定部112は、コマンドラインに明記されていない、ソースコード“/mysrc.c”において列挙されたヘッダファイルやライブラリオブジェクトなどのパスも特定する。
【0024】
ハッシュ値計算部113は、コマンドライン取得部111が取得したコマンドライン、ならびにファイルパス特定部112が特定した各パスに存在するコマンドバイナリ、読み込みファイル、および生成ファイルの各ハッシュ値を計算する(図3のS3)。具体的には、ハッシュ値計算部113は、RIPEMD(RACE Integrity Primitives Evaluation Message Digest)、RIPEMD-160、MD5(Message Digest Algorithm 5)、SHA(Secure Hash Algorithm)-256、SHA-3などのハッシュ関数を用いて、任意の長さの任意の文字列あるいは任意のサイズの任意のデータを受け、決められたサイズの出力を生成する。
【0025】
ビルドプロセスデータ生成部114は、コマンドライン取得部111が取得したコマンドライン、およびファイルパス特定部112が特定した各パスに存在するコマンドバイナリ、読み込みファイル、生成ファイルの各パスを含むプロセスサマリ30を生成して図略のストレージ装置に保存する(図3のS4)。また、ビルドプロセスデータ生成部114は、プロセスサマリ30におけるコマンドラインおよび各ファイルのパスを、ハッシュ値計算部113によって計算された各ハッシュ値に置き換えてビルドプロセスデータ40を生成する(図3のS5)。
【0026】
さらにビルドプロセスデータ生成部114は、ソフトウェアメトリクスや要求仕様書やソフトウェアインストール手順などの文書のほか、音声、画像、動画などソフトウェアのビルドに関連するあらゆる種類のファイルのパスをプロセスサマリ30に含めることができ、それらパスをハッシュ値計算部113によって計算されたハッシュ値(各パスに存在するファイルのハッシュ値)に置き換えてビルドプロセスデータ40を生成することができる。
【0027】
このようにプロセスサマリ30は、ソフトウェアのビルドプロセスにおいてどのようなコマンドラインが実行され、それによりどのファイルが読み込まれてどのファイルが生成されたのか、またどのようなファイルが紐づけられているかといったファイルリンク情報を表している。一方、ビルドプロセスデータ40は、プロセスサマリ30に記されたコマンドラインや入出力ファイルパスをハッシュ値に置き換え(ファイルパスはそのパスに存在するファイルのハッシュ値に置き換え)、そのビルドプロセスにおいて具体的にどのようなコマンドラインが実行され、どのファイルが読み込まれ、どのファイルが生成されたのかを秘匿化したものである。なお、プロセスサマリ30およびそれに記された各パスに存在するファイルは後にソフトウェアのビルドプロセスの検証において必要となるため、削除されることのないよう各企業において厳重に保管することが重要である。
【0028】
送信部115は、ビルドプロセスデータ生成部114によって生成されたビルドプロセスデータ40をネットワーク20に送信する(図3のS6)。より詳細には、送信部115は、いつ誰によってビルドプロセスデータ40が作成されたのかを記録するためにビルドプロセス40に電子署名をした上でネットワーク20に送信する。なお、ビルドプロセスデータ40はネットワーク20にブロードキャストしてもよいし、ブロック生成機能12を有する特定のノード10にユニキャストあるいはマルチキャストしてもよい。
【0029】
≪ブロック生成機能≫
図5は、プロセス記録システム10において利用するブロックチェーンの模式図である。プロセス記録システム100においてネットワーク20に送信されたビルドプロセスデータ40は所定時間ごとにブロック50にまとめられ、各ブロック50が一つ前のブロック50のハッシュ値を保持する形で繋がってブロックチェーン200が形成される。ブロック50は、ブロックヘッダ51と、複数のビルドプロセスデータ40とを含む。ブロックヘッダ51は、一つ前のブロック50のブロックヘッダ51のハッシュ値52と、ブロック50の生成時刻を表すタイムスタンプ53と、ナンス値54と、ブロック50に含まれる複数のビルドプロセスデータ40のトップハッシュ55とを含む。
【0030】
ブロック生成機能12を有するノード10は、ビルドプロセス監視機能11を有するノード10からネットワーク20に送信され、ブロックチェーン200に未登録のビルドプロセスデータ40を集めて新たなブロック50を生成する。例えば、現在の最新ブロック50のブロック番号が[n]であり、ブロック番号[n+1]のブロック50を生成する場合、ブロック生成機能12を有するノード10は、ブロック番号[n]のブロック50のブロックヘッダ51のハッシュ値52を計算し、ブロックチェーン200に未登録のビルドプロセスデータ40を集めてそのマークルツリーのルートに相当するトップハッシュ55を計算し、タイムスタンプ53および適当なナンス値54を設定してブロックヘッダ51を生成する。そして、ブロック生成機能12を有するノード10は、生成したブロックヘッダ51のハッシュ値が目標値よりも小さくなるようなナンス値54が見つかるまでナンス値54の変更を繰り返し、条件を満たすナンス値54が見つかればブロックヘッダ51を確定させてブロック番号[n+1]のブロック50をネットワーク20に送信する。なお、ブロック50はネットワーク20にブロードキャストしてもよいし、ブロック保持機能13を有する複数のノード10にマルチキャストしてもよい。
【0031】
プロセス記録システム10ではブロックチェーン200としてパブリック、プライベート、およびコンソーシアムのいずれのタイプも適用可能である。例えばパブリック型のブロックチェーン200を適用した場合、誰でも自由にブロック生成機能12を有するノード10としてプロセス記録システム100に参加することができる。この場合、最も早くブロック50を生成した者に報酬を支払うようなPoW(プルーフオブワーク)などのコンセンサスアルゴリズムを導入することでブロック50の生成機能を維持することができる。一方、プライベート型あるいはコンソーシアム型のブロックチェーン200を適用した場合、プロセス記録システム100に管理者を設定し、管理者または管理者に許可された者のみがブロック生成機能12を有するノード10としてプロセス記録システム100に参加することができる。
【0032】
≪ブロック保持機能≫
ブロック保持機能13を有するノード10はこれまでに生成されたブロック50を保持しており、ブロック生成機能12を有するノード10から受信したブロック50を新たに保持する。プライベート型またはコンソーシアム型のブロックチェーン200の場合、ブロック生成機能12を有するノード10が生成したブロック50は信頼できるため、ブロック保持機能13を有するノード10はそれをそのまま保持してもよいが、パブリック型のブロックチェーン200の場合、ブロック生成機能12を有するノード10が生成したブロック50の正しさを検証する必要がある。そこで、ブロック保持機能13を有するノード10は、ブロック生成機能12を有するノード10から受信したブロック50の正しさを検証し、検証に成功した場合にそのブロック50を新たに保持するようにしてもよい。より詳細には、そのようなブロック保持機能13を有するノード10は、ブロック生成機能12を有するノード10から受信したブロック50のブロックヘッダ51に含まれる一つ前のブロックのハッシュ値52が正しいかどうか、ナンス値54が所定の条件を満たしているかどうか、そのブロック50に含まれる複数のビルドプロセスデータ40のトップハッシュを計算し、それがそのブロック50のブロックヘッダ51に含まれるトップハッシュ55と一致するかなどの検証を行って、そのブロック50の正しさを判定する。このようにして正しく生成されたブロック50のみがブロックチェーン200に追加されていく。
【0033】
≪ビルドプロセス検証機能≫
プロセス記録システム100ではソフトウェアにウイルスやスパイウェアなどが仕込まれていないかどうかや報告されているソフトウェアメトリクスに疑義が生じた場合、誰でもビルドプロセス検証機能14を利用して任意のビルドプロセスデータ40を事後的に検証することができる。なお、ビルドプロセスデータ40の事後検証に当たって、そのビルドプロセスデータ40の生成に関わった企業や組織からそのビルドプロセスデータ40に対応するプロセスサマリ30およびそのプロセスサマリ30に列挙されたすべてのファイルを入手する必要がある。
【0034】
図6は、ビルドプロセスの事後検証処理を説明する図である。ビルドプロセス検証機能14を有するノード10は、ブロック保持機能13を有する任意のノード10に保持されている任意のブロック50に含まれる任意のビルドプロセスデータ40を取得する。一方、ビルドプロセス検証機能14を有するノード10は、企業や組織から別途入手したプロセスサマリ30およびファイル31からビルドプロセスデータ40Aを再現する。この再現手順は上述したビルドプロセスデータ生成と同じである。そして、ビルドプロセス検証機能14を有するノード10は、取得したビルドプロセスデータ40と再現したビルドプロセスデータ40Aとを比較して、両者が一致すればビルドプロセスデータ40は改ざんなしと判定し、一致しなければ改ざんありと判定する。
【0035】
≪効果≫
本実施形態によると次のような効果が奏される。
1)大量のソフトウェアビルドプロセスの記録を地理的および組織的な制約なくグローバルに実施することができる。
2)新たに生成されたビルドプロセスデータ40が次々とブロック50にまとめられて連結されることでソフトウェアビルドの順序関係が保証される。
3)ビルドプロセスデータ40にはコマンドラインのハッシュ値やコマンドラインの実行に関連するファイルのハッシュ値が記されるだけであり、ソフトウェア製品を構成する人工物(特にソースコード)を公開する必要がなく秘匿性が保たれる。
4)ブロックチェーン200を利用して多くの参加者でビルドプロセスデータ40を共有することで、ビルドプロセスの改ざんがしにくくなる。また、誰でも任意のビルドプロセスを事後的に検証することができ、ソフトウェアトレーサビリティが担保される。
5)パブリック型のブロックチェーン200を適用した場合にはプロセス記録システム100の管理者が不要となり、誰でも自由に参加できるプラットフォームが実現できる。
6)コンピュータにビルドプロセス監視機能11をインストールすることで、ソフトウェア開発作業の裏でコンピュータが自動的にビルドプロセスデータ40を生成してネットワーク20に送信し、それが記録されていくため、開発者はビルドプロセスの記録を意識することなくソフトウェア開発を行うことができる。
【0036】
≪変形例≫
コマンドが実行されたタイミングでビルドプロセスデータ40を生成する以外に、コマンドが実行されなくとも所定のタイミングで対象ファイルのスナップショットを取ってそのハッシュ値をビルドプロセスデータ40に登録するようにしてもよい。例えば、データベースのように連続稼働しているシステムが扱うファイルで有効である。
【0037】
また、最終的なソフトウェア製品とは関係のない一時的なテストファイルのビルドプロセスはプロセス記録システム100に記録する必要がないため、ビルドプロセス監視機能11の有効/無効の切り替えができるようにして不要なビルドプロセスデータ40が生成されないようにしてもよい。
【0038】
また、コマンドラインが一つ実行されるたびに逐一ビルドプロセスデータ40を生成するのではなく、複数のコマンドラインの実行を一括りにして一つのビルドプロセスデータ40を生成するようにしてもよい。これにより、ビルドプロセスデータ40の送信頻度を少なくすることができる。
【0039】
以上のように、本発明における技術の例示として、実施の形態を説明した。そのために、添付図面および詳細な説明を提供した。
【0040】
したがって、添付図面および詳細な説明に記載された構成要素の中には、課題解決のために必須な構成要素だけでなく、上記技術を例示するために、課題解決のためには必須でない構成要素も含まれ得る。そのため、それらの必須ではない構成要素が添付図面や詳細な説明に記載されていることをもって、直ちに、それらの必須ではない構成要素が必須であるとの認定をするべきではない。
【0041】
また、上述の実施の形態は、本発明における技術を例示するためのものであるから、特許請求の範囲またはその均等の範囲において種々の変更、置き換え、付加、省略などを行うことができる。
【符号の説明】
【0042】
100…ソフトウェアビルドプロセス記録システム、10…ノード(コンピュータ)、11…ビルドプロセス監視機能、12…ブロック生成機能、13…ブロック保持機能、14…ビルドプロセス検証機能、20…ネットワーク、111…コマンドライン取得部、112…ファイルパス取得部、113…ハッシュ値計算部、114…ビルドプロセスデータ生成部、115…送信部、30…プロセスサマリ、40…ビルドプロセスデータ、50…ブロック、51…ブロックヘッダ、52…一つ前のブロックのハッシュ値、53…タイムスタンプ、54…ナンス値、55…トップハッシュ、200…ブロックチェーン
図1
図2
図3
図4
図5
図6