ソフトウェアフォレンジックとは、ソフトウェアのソースコードやバイナリコードを分析して、知的財産権の侵害や盗難があったかどうかを判断する科学です。 [ 1 ]これは、企業がソフトウェア特許、著作権、企業秘密に関する問題で争っている場合の訴訟、裁判、和解の中心となります。ソフトウェアフォレンジックツールは、コードを比較して相関関係を判断することができ、これはソフトウェアフォレンジック専門家を導くために使用できる指標です。
過去のコード比較方法には、ハッシュ化、統計分析、テキストマッチング、トークン化などがありました。これらの方法はソフトウェアコードを比較し、コピーが行われたかどうかを示す単一の指標を生成しました。しかし、これらの指標は結果が正確ではなく、アルゴリズムはコード内の単純な置換によって簡単に騙される可能性があり、コードがコピー以外の理由で類似している可能性があるという事実を考慮していないため、法廷で証拠として認められるほど正確ではありませんでした。[ 2 ]
ソフトウェアツールを使用してコードを比較し、相関関係の程度を判断した後、専門家は反復的なフィルタリングプロセスを用いて、相関関係のあるコードがサードパーティのコード、コード生成ツール、一般的に使用されている名前、一般的なアルゴリズム、一般的なプログラマー、またはコピーによるものかどうかを判断します。相関関係がコピーによるものであり、コピー者が権利者から許可を得ていなかった場合、著作権侵害が発生したことになります。
ソフトウェアには、企業に競争上の優位性をもたらす営業秘密が含まれている場合があります。営業秘密の窃盗を判断するには、著作権侵害の検出と同じツールとプロセスを使用できます。コードが無断でコピーされ、そのコードが営業秘密の特性(一般に知られていない、企業が秘密にしている、秘密にすることで企業にとっての価値が維持される)を備えている場合、コピーされたコードは営業秘密の窃盗に該当します。
営業秘密の窃盗には、コードを文字通りコピーすることなく、コードの機能を盗用する行為も含まれます。コードの機能を比較することは非常に困難な問題であり、合理的な時間で解決できるアルゴリズムはまだ存在しません。そのため、コード機能の窃盗を発見する作業は、依然としてほとんどが手作業で行われています。
営業秘密の機能と同様に、ソフトウェア特許は特定のソースコードではなく一般的な実装を対象としているため、ソフトウェア特許の侵害を科学的に検出することは現状では不可能です。例えば、特許取得済みの発明を実装するプログラムは、様々なプログラミング言語で記述でき、異なる関数名や変数名を使用したり、異なる順序で操作を実行したりすることができます。ソフトウェアで発明を実装する方法の組み合わせは非常に多く、最も高性能な最新のコンピュータでさえ、特許を侵害する可能性のあるコードのすべての組み合わせを考慮することはできません。この作業は依然として人間の専門家が知識と経験に基づいて行う必要がありますが、ソフトウェアフォレンジックの多くの研究者が、アルゴリズムの開発やプロセスの簡素化によって自動化しようと試みています。
フォレンジック分析における重要なルールの1つは、客観的事実を最初に考慮しなければならないということです。コード内のコメントを確認したり、インターネットでコードを配布している企業やコードを書いたプログラマーに関する情報を検索したりすることは、相関関係に関する客観的事実が考慮された後にのみ有効です。フォレンジックツールと手順を使用して分析が実行された後、アナリストはコード内のコメントなどの主観的証拠の検討を開始できます。その主観的証拠の情報が客観的分析と矛盾する場合、アナリストは主観的証拠を疑う必要があります。コピーを偽装するために、コピー後にソースコードに追加された偽の著作権表示、オープンソース通知、またはプログラマー名は、実際のコード盗難事件では珍しくありません。