ソフトウェア泥棒を追いつめろ!—プログラム指紋(バースマーク)による盗用発見—

コンピュータ理工学部 コンピュータサイエンス学科 玉田 春昭 助教

ソフトウェアをいかにして守るか

 ワードやエクセルといったアプリケーションソフト、電子メール、インターネットブラウザから映像、音楽、ゲームソフトといったコンテンツにいたるまで、ソフトウェアは生活のあらゆる場面で欠かすことのできない存在になっています。ソフトウェアを対象とする「ソフトウェア工学」の中でも、ソフトウェアやその内部の秘密情報を保護する「ソフトウェアセキュリティ」の分野で活躍される玉田春昭先生に、盗用発見の新技術として世界で初めての提案となる“バースマークによるソフトウェアプロテクション”についてお話しいただきました。

増える盗用事例“プログラム指紋”で盗用を見つけ出す

 今年の6月には、Xbox360専用ゲームソフトにおいて、PlayStation2専用ゲームソフトのプログラムソースコードからの盗用があったことが明らかになりました。その他にも、エプソンコーワのLinux向けのスキャナソフトなどで、フリーソフトウェアの規約であるGPL※1に違反する部分が見つかるなど、意図しないものを含めて、ソフトウェアの違法コピーや盗用の事例は後をたちません。

 これまで、プログラムを暗号化する、簡単に読めないように難読化する、といった保護手段が多数考え出されてきましたが、新しい防御方法を考え出しては破られる、といういたちごっこが続いています。また、数え切れないほどのソフトウェアが開発されていますから、盗用を発見すること自体も難しくなっています。

 そこで私は、ソフトウェアの実行に不可欠な特徴に注目して、これを使った盗用発見の新しい技術「バースマーク(Birthmark)」を提案しました。推理小説からヒントを得て、“指紋”をソフトウェアに応用できないかと考え出した方法で、2003年の提案当初は「プログラム指紋」という名で研究を行っていました。ところが、ニュージーランドのある先生から「これはバースマークだね」と教えられて、Groverが定義していた「バースマーク」を盗用発見の道具として定義し直して使うことになったのです※2

※1 The GNU General Public Licenseの略で、フリーソフトウェアライセンスの一種。再配布や改良を自由に行うことができるが、その際にソースコードの開示を義務づける、著作権を明記するなどの条件がついている。

※2 Derrick Grover の『The Protection of ComputerSoftware - its Technology and Applications』(1989年)の中で「ソフトウェアが元来持っている特徴」といった意味で定義づけられている。

バースマークからソフトウェアの類似性をはかる

図

 盗まれたことを証明する手段としては、著作情報やユーザIDなどの情報をソフトウェアに密かに埋め込んでおく「電子透かし」の技術がよく知られています。しかし、1つのソフトウェアに1つしか埋め込むことができない電子透かしは、壊される可能性があることや、あらかじめ埋め込んでおかなければいけないといった点から、「盗用発見」の手段としては十分ではありません。ソフトウェアの設計図であるソースコードの類似度を測る方法やソースコードからコピーを見つける方法も提案されていますが、ほとんどのソフトウェアはソースコードをコンピュータ上で実行可能なバイナリコード※3に変換した形で出回っています。ですから、変換された状態で比較できることが求められるのです。

 そこで私は、@難読化も含めたプログラム変換を行っても変化しないこと(保存性)、A全く同じように機能するプログラムであっても、別の人が独立して作った場合、正しく区別できること(弁別性)、という2つの性質を満たすべきものとして、バースマークを定義しました。具体的な内容は省略しますが、ソフトウェアが持つ特徴に着目して4種類のバースマークを提案し、上記の性質が満たされることを確かめました。

 現在、17のバースマークをJavaクラスファイルから抽出して比較できるツール“stigmata”を、インターネット上で公開しています※4。平均的なサイズのソフトウェアであれば、10秒かからずに比較ができます。stigmataを使って市販ソフトウェアの盗用が発見されたという報告はまだありませんが、他大学で、学生のプログラミング課題の中から、いくつかのコピーを見つけ出したとの報告はあります。

 ただ、バースマークは比較によって類似性を見るものですから、一致したとしても、プログラムがコピーであるとは必ずしも断定できません。全く別々に作られたプログラムのバースマークが偶然一致する可能性もゼロではありません。盗用を証明する手段として100%ではありませんから、証明する手がかりにはなるものの、断定する手段としては「電子透かし」の方が適しているでしょう。

※3 「0 」と「1 」で構成される、機械(コンピュータ)が実行可能な表現形式。

※4 http://stigmata.sourceforge.jpで公開されている。

ソフトウェアの保守とバースマークの応用

 現在、バースマークは、日本はもちろんのこと、アメリカや韓国、ドイツなどでも提案されていて、合わせて30以上存在しています。しかし私としては、今後は新しいバースマークを考え出すのではなく、バースマークの評価方法と、応用について考えていきたいと思っています。

 バースマークの種類が増えることで互いに弱点を補うことができますが、比較にかかる時間も長くなってしまいます。他の手法より処理にかかる時間は短いとはいえ、 “どういう種類のソフトウェアには、どういった組み合わせのバースマークで比較するべきか”を選択できるようにして、より高速で無駄なく比較することができるバースマークの評価ツールを開発していきたいと考えています。

 プログラム内にある実行に不可欠な情報から抽出するため、後から手を加える必要がなく、手軽に扱えるという特性を活かして、盗用発見以外の方法も考えています。ソフトウェアはメンテナンス時に、元のデータのコピーに手を加えることで再開発を行うことが少なくありません。そうして開発したものをリリースする際に、新しい部分に不具合がないかどうかを確かめたい場合、これまでは人の記憶や感覚的なもので作業がされてきました。しかし、stigmataを使えば、元データと比べることで、どの部分でどの程度古いものを流用しているかを数値で表すことができるので、新しくなった部分を特定して、重点的にテストすることが可能になります。

 高速で、手軽に比較できますから、プログラムを整理する際に、ソフトファイル内からよく似た集団を探し出して、1つにまとめる作業にも使えます。前述のように、プログラミング課題のコピーの発見にも使えます。事例にあるような、リリース前に他のソフトウェアの盗用がないかを調べるためにも使えますが、この場合、開発側であればソースコードを見ることができるため、バースマークよりも認識率が高いソースコードによる比較が行われます。

 現在、あらゆる分野でソフトウェアが使われています。今後、その数はさらに増えるでしょう。こうした中で、他人の作成したソフトウェアを許可なく自分のソフトウェアに組み込んだり(盗用)、内部の秘密情報を改ざんしたり(クラック)することを抑止・防止するソフトウェアプロテクションの分野は、ますます重要な役割を担うようになると思います。

プログラミング初心者も安心―ロボットが助けるプログラミング教育

写真

 ソフトウェアをいかに読みにくくするかという研究は「いかに読みやすくするか」にもつながります。プログラミングでつまずく大学生が多いことから、最近では大学教育の分野での研究も進めています。プログラミング教育は、100人程度が一同に学ぶことがほとんどで、学生はそれぞれのパソコンで課題に取り組みます。プログラミングを学ぶ上で避けられないC言語では、特に頻繁にエラーが起こりますが、英語表示な上に原因を推測しにくい仕組みで、エラーを正確に理解できないことで必要以上にプログラミングを難しいと思い込む人が多いのが現状です。そこで、コンパイル※5エラーを翻訳してわかりやすく学習者に伝える学習支援法と、同時に個々のエラー情報を集めて教授者が教育サポートに利用できるシステムを考え出しました。本学の上田博唯先生と荻野晃大先生との共同研究です。学習支援のインタフェースには、3才の子どもをモデルとしたPhyno(S&T vol.7上田先生の記事参照)を使用。特定の条件でPhynoが動くように設定しておくことで、学習者にはシステムを意識させずにすみます(学習システムを使っていることを意識すると学習効率が下がるため)。ゲーム感覚を取り入れることで、楽しみながら学習できる工夫もしています。スペル間違いやコロンが抜けているなど、単純なエラーはPhynoが自動で内容を解説するなどのサポートを行い、一方で個々人のエラーデータの蓄積が教授者へ届く仕組みを作っておくことで、クラス全体で間違いが多く、理解が行き届いていない内容などについて教授者が対応できる環境を築いています。今後、実際の授業にも取り入れて、結果を検証していきたいと考えています。

※5 ソースコードをコンピュータが実行することのできる「0」、「1」という機械語(バイナリコード)に変換すること。

アドバイス

国語力のある人はプログラミングも得意!?

 数学は基礎能力として必要ですが、すごいプログラムを組む人というのは、国語力のある人が多いようです。この分野を目指す人には、本や新聞をたくさん読むなどして、高校生の間に国語力をしっかり身につけてきてほしいですね。また、趣味でもいいので「これだけは人に負けない」という分野が持てるといいと思います。これからの時代、どんな分野へ進むにしてもコンピュータを使いますし、ソフトウェアにも触れますから。自分の得意な分野でソフトウェアを活かせるようになれば、他の人にはない強みになるはずです。

コンピュータ理工学部 コンピュータサイエンス学科 玉田 春昭助教

プロフィール

博士(工学)。理系出身の父親の影響もあってか、コンピュータに関心があり、京都産業大学工学部情報通信工学科へ入学。2回生の頃からプログラムを書き出すと、4回生の頃には先生方から「プログラミングが得意な玉田くん」と認識されるほどに。修士課程修了後、プログラマーとして就職したが、社内の別のプロジェクトから自分のプログラムを発見したことから「ソフトウェアセキュリティ」の分野に関心を持つようになった。奈良先端科学技術大学院大学時代に「プログラム指紋(現在のバースマーク)」の手法を考え出す。「セキュリティをいかに守るかは、それをいかに破るかと同じこと。セキュリティに関わる人間はモラルを高く保つことが必要」というポリシーに、ソフトウェアプロテクションに関わる研究者としての自負がみえる。京都市立堀川高校OB。

PAGE TOP