【事件の表示】
　特願２０１１−２８８０８６「プログラム保護装置，プログラム保護方法，及びプログラム」拒絶査定不服審判事件〔平成２５年　７月１１日出願公開，特開２０１３−１３７６４６〕について，次のとおり審決する。
【結　論】
　本件審判の請求は，成り立たない。
【理　由】
１．手続の経緯
　本件審判請求に係る出願（以下，「本願」という。）は，平成２３年１２月２８日を出願日とする出願であって，平成２５年４月２日付けで審査請求がなされ，平成２６年２月３日付けで拒絶理由通知（同年２月５日発送）がなされ，同年４月３日付けで意見書が提出されると共に手続補正書が提出され，同年９月３０日付けで拒絶査定（同年１０月７日謄本送達）がなされ，これに対して，同年１２月２６日付けで審判請求がなされたものである。
２．本願発明
　本願の請求項１に記載された発明（以下，「本願発明」という。）は，上記平成２６年４月３日付け手続補正書により補正された特許請求の範囲の記載からみて，その特許請求の範囲の請求項１に記載された以下のとおりのものと認める。
「乱数データ又は予め設定されたデータを用いて暗号化用の共通鍵を作成し，作成した前記共通鍵を用いて，保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する，暗号化部と，
　暗号化された前記特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する，復号化処理モジュール生成部と，
　前記保護対象となるプログラムにおいて，前記特定のモジュールが呼び出されると，代わりに，前記復号化処理モジュールが呼び出されるように，前記復号化処理モジュールのコードを書き換える，コード書換部と，
を備え，
　前記復号化処理モジュール生成部は，前記復号化処理モジュールが，前記共通鍵を作成し，これを用いて，暗号化された前記特定のモジュールを復号化できるように，前記復号化処理モジュールに，前記共通鍵の作成に用いられた乱数データ又は予め設定されたデータを組み込ませる，
ことを特徴とするプログラム保護装置。」
３．引用文献
（１）引用文献１に記載されている技術的事項および引用発明１
　本願出願前に頒布され，原審の拒絶査定の理由である上記平成２６年２月３日付けの拒絶理由通知において引用された，特開２００２−１３２３６４号公報（平成１４年５月１０日出願公開，以下，「引用文献１」という。）には，以下の技術的事項が記載されている。
　（当審注：下線は，参考のために当審で付与したものである。）
Ａ　「【００１７】従って，本発明は，上述の如き従来の問題点を解決するためになされたもので，その目的は，プログラムを内部解析から保護する方法，コンピュータ読み取り可能な記録媒体及び内部解析の困難なプログラムの配布方法を提供することである。」
Ｂ　「【００３９】以下，図面を用いて本発明の実施例をより具体的に説明する。
図１は，本発明の一実施例に係わるソフトウェア解析保護方法を説明するブロック図である。尚，予め仮想機械及びその仮想機械上で実行可能なファイルを作成する為のパーサ，プリプロセッサ，コンパイラ（仮想コンパイラ），仮想リンクエディタといった処理系は実装されているものとする。
Ｃ　「【００４１】又，
ここでのソースコード１は，全体のプログラムを構成する要素（関数，ルーチンなど）の中で，特に秘匿性の要求の高い部分，或いは全体のプログラムを解析の上で要の部分のみをいう。
【００４２】そして，ステップＳ１では，
このソースコードを仮想コンパイラによってコンパイルして，仮想機械の仮想オブジェクトコード，即ち仮想機械の仮想オペレーションコードからなる実行コード３を得る。
【００４３】次に，ステップＳ２では，
この仮想オブジェクトコード３をエンクリプタで暗号化して，暗号化仮想オブジェクトコード５を得る。このエンクリプタは
例えばＤＥＳやＦＥＡＬといった秘密鍵暗号方式
を組み合わせて利用してもよい。
Ｄ　「【００４４】尚，
コンパイラとエンクリプタを統合して，ステップＳ１とステップＳ２を同時に行うことも可能である。
Ｅ　「【００４６】
次に，ステップＳ３では，この暗号化仮想オブジェクトコード５を，仮想機械ライブラリ（ＶＭライブラリ）及び復号ルーチン・ライブラリ７とリンクして，暗号化仮想オブジェクトコードを含んだ実オブジェクトコード９を得る。ここで，復号ルーチン・ライブラリは，前述のエンクリプタと対を成すもので，エンクリプタで暗号化したものを復号するためのユーティリティ・ライブラリである。
【００４７】
次に，ステップＳ４では，プログラムを構成する残りの要素に関する実オブジェクトコード及びその他の必要なライブラリ１１とリンクして，目的のプログラム１３を得る。
Ｆ　「【００５０】そのメモリモデルを図３に示す。先ず，
暗号化仮想オブジェクトコードを実行するには，そのエントリポイントを引数として，復号ルーチン・ライブラリを呼び出す（１１）。復号ルーチンは，エントリポイント以降の暗号化仮想オブジェクトコードを復号して，メモリの空いている領域に展開する（１３）。展開を終えると，今度は，復号された仮想オブジェクトコードのエントリポイントを引数として仮想機械を呼び出す（１５）。
　ここで，上記引用文献１に記載されている事項を検討する。
（ア）上記Ｃの「ここでのソースコード１は，全体のプログラムを構成する要素（関数，ルーチンなど）の中で，特に秘匿性の要求の高い部分，或いは全体のプログラムを解析の上で要の部分のみをいう。」，「このソースコードを仮想コンパイラによってコンパイルして，仮想機械の仮想オブジェクトコード，即ち仮想機械の仮想オペレーションコードからなる実行コード３を得る。」，「この仮想オブジェクトコード３をエンクリプタで暗号化して，暗号化仮想オブジェクトコード５を得る。」，「このエンクリプタは・・・（中略）・・・例えばＤＥＳやＦＥＡＬといった秘密鍵暗号方式・・・（中略）・・・を組み合わせて利用してもよい。」との記載からすると，
　「エンクリプタ」は，秘密鍵暗号方式を用いて，すなわち，秘密鍵を用いて暗号化するものと解されることから，
　引用文献１には，
「秘密鍵を用いて，全体のプログラムの中で秘匿性の要求の高い部分を暗号化して暗号化仮想オブジェクトコードを得る，エンクリプタ」が記載されていると解される。
（イ）上記Ｂの「実行可能なファイルを作成する為の・・・（中略）・・・仮想リンクエディタといった処理系」との記載，上記Ｅの「次に，ステップＳ３では，この暗号化仮想オブジェクトコード５を，仮想機械ライブラリ（ＶＭライブラリ）及び復号ルーチン・ライブラリ７とリンクして，暗号化仮想オブジェクトコードを含んだ実オブジェクトコード９を得る。ここで，復号ルーチン・ライブラリは，前述のエンクリプタと対を成すもので，エンクリプタで暗号化したものを復号するためのユーティリティ・ライブラリである。」，「次に，ステップＳ４では，プログラムを構成する残りの要素に関する実オブジェクトコード及びその他の必要なライブラリ１１とリンクして，目的のプログラム１３を得る。」との記載，上記Ｆの「暗号化仮想オブジェクトコードを実行するには，そのエントリポイントを引数として，復号ルーチン・ライブラリを呼び出す（１１）。復号ルーチンは，エントリポイント以降の暗号化仮想オブジェクトコードを復号して，メモリの空いている領域に展開する（１３）。展開を終えると，今度は，復号された仮想オブジェクトコードのエントリポイントを引数として仮想機械を呼び出す（１５）。」との記載からすると，
　復号ルーチンは，暗号化仮想オブジェクトコードを復号する機能と，復号された仮想オブジェクトコードを実行する機能を備えており，
　「仮想リンクエディタ」がリンク処理を行うことは技術常識であるから，
　引用文献１には，
「前記暗号化仮想オブジェクトコードを実行する際に呼び出される，エンクリプタで暗号化したものを復号して実行するため復号ルーチンとリンクして目的のプログラムを得る仮想リンクエディタ」が記載されていると解される。
（ウ）上記Ｂの「図１は，本発明の一実施例に係わるソフトウェア解析保護方法を説明するブロック図である。尚，予め仮想機械及びその仮想機械上で実行可能なファイルを作成する為のパーサ，プリプロセッサ，コンパイラ（仮想コンパイラ），仮想リンクエディタといった処理系は実装されているものとする。」との記載，上記Ｄの「コンパイラとエンクリプタを統合して，ステップＳ１とステップＳ２を同時に行うことも可能である。」との記載からすると，
　引用文献１には，
　上記（ア），（イ）で検討した「エンクリプタ」や「仮想リンクエディタ」を備えた「ソフトウェア解析保護方法の処理系」が記載されていると解される。
　以上，（ア）乃至（ウ）で検討した事項を踏まえると，引用文献１には，次の発明（以下，「引用発明１」という。）が記載されているものと認める。
「秘密鍵を用いて，全体のプログラムの中で秘匿性の要求の高い部分を暗号化して暗号化仮想オブジェクトコードを得る，エンクリプタと，
　前記暗号化仮想オブジェクトコードを実行する際に呼び出される，前記エンクリプタで暗号化したものを復号して実行するため復号ルーチンとリンクして目的のプログラムを得る仮想リンクエディタと，
を備えたソフトウェア解析保護方法の処理系。」
（２）引用文献２に記載されている技術的事項および引用発明２
　本願出願前に頒布され，原審の拒絶査定の理由である上記平成２６年２月３日付けの拒絶理由通知において引用された，特開２００７−１４８５７５号公報（平成１９年６月１４日出願公開，以下，「引用文献２」という。）には，以下の技術的事項が記載されている。
　（当審注：下線は，参考のために当審で付与したものである。）
Ｇ　「【０００１】
　本発明は，プログラム内部に含まれる保護対象の内容が読み出されないようにプログラムに部分的に保護（例えば暗号化）を加えるための技術に関する。」
Ｈ　「【００１０】
　
図３は，保護対象のコード部分を暗号化した暗号化プログラムを作成するための暗号化実行プログラム作成システムの一実施例を示す図である。このシステムは，コンパイラ３０２，対象関数指定部３０６，第１変換部３０８，リンカ３１０，第２変換部３１２を備える。
Ｉ　「【００１２】
　・・・（中略）・・・
保護対象の関数（以下「対象関数」と呼ぶ）
Ｊ　「【００１４】
　
第１変換部３０８は，コンパイラ３０２が生成したオブジェクトコード３０４に対し，対象関数指定部３０６が生成する対象関数のリストを用いて変換を行う。この変換を「変換１」と呼ぶことにする。
またこの変換１では，対象関数を適切に暗号化できるようにするため，及び暗号化されたその関数を実行時に適切に復号して実行できるようにするために，挿入関数を作成する。
Ｋ　「【００２１】
　
また「変換１」では，挿入関数４３４が作成される。第１変換部３０８は，この挿入関数４３４に対し，対象関数の元の関数名と同じ関数名funcAを与える。これにより，オブジェクトコード４３０中にある対象関数funcAを呼び出す命令は，対象関数ではなく挿入関数４３４を呼び出すことになる。
　ここで，上記引用文献２に記載されている事項を検討する。
（ア）上記Ｉの「保護対象の関数（以下「対象関数」と呼ぶ）」との記載，
上記Ｊの「第１変換部３０８は，コンパイラ３０２が生成したオブジェクトコード３０４に対し，対象関数指定部３０６が生成する対象関数のリストを用いて変換を行う。この変換を「変換１」と呼ぶことにする。」，「またこの変換１では，対象関数を適切に暗号化できるようにするため，及び暗号化されたその関数を実行時に適切に復号して実行できるようにするために，挿入関数を作成する。」との記載，上記Ｋの「また「変換１」では，挿入関数４３４が作成される。第１変換部３０８は，この挿入関数４３４に対し，対象関数の元の関数名と同じ関数名funcAを与える。これにより，オブジェクトコード４３０中にある対象関数funcAを呼び出す命令は，対象関数ではなく挿入関数４３４を呼び出すことになる。」との記載からすると，
　引用文献２には，
「暗号化された保護対象の対象関数を，実行時に復号して実行できるようにするための挿入関数を作成し，挿入関数の関数名を対象関数と同じ関数名とする第１変換部」が記載されていると解される。
（イ）上記Ｈの「図３は，保護対象のコード部分を暗号化した暗号化プログラムを作成するための暗号化実行プログラム作成システムの一実施例を示す図である。このシステムは，コンパイラ３０２，対象関数指定部３０６，第１変換部３０８，リンカ３１０，第２変換部３１２を備える。」との記載からすると，
　引用文献２には，
　上記（ア）で検討した第１変換部を備えた
「保護対象のコード部分を暗号化した暗号化プログラムを作成する暗号化実行プログラム作成システム」が記載されていると解される。
　以上，（ア）乃至（イ）で検討した事項を踏まえると，引用文献２には，次の発明（以下，「引用発明２」という。）が記載されているものと認める。
「暗号化された保護対象の対象関数を，実行時に復号して実行できるようにするための挿入関数を作成し，挿入関数の関数名を対象関数と同じ関数名とする第１変換部を備えた，
　保護対象のコード部分を暗号化した暗号化プログラムを作成する暗号化実行プログラム作成システム。」
４．参考文献
（１）本願出願前に頒布された，特開２００３−３０４２３７号公報（平成１５年１０月２４日出願公開，以下，「参考文献１」という。）には，関連する図面とともに，以下の技術的事項が記載されている。（当審注：下線は，参考のために当審で付与したものである。）
Ｌ　「【解決手段】ステップ308でデータαを生成し，ステップ310で
暗号／復号プログラム217にαを埋め込む。αは，任意の値であり，例えば128バイトの乱数である
αを埋め込まれた暗号／復号プログラムは，端末201でデータの暗号化をする際に，パスワードをαと合成し，新たな鍵（共通鍵）を生成する。この共通鍵による暗号文は，αの値を知らない限り復号できない。
Ｍ　「【００５８】データ守秘サービス提供サーバ202側では，ステップ306で，ダウンロード要請元の利用者認証確認を行い，OKであればステップ307以降のステップに進む。利用者認証確認は，利用者確認プログラム211により，利用者のパスワード及びＪａｖａプログラム実行可能携帯電話端末２０１の製造番号につき行われる。利用者のパスワード及びＪａｖａプログラム実行可能携帯電話端末２０１の製造番号は，利用者管理データ格納装置213へ予め記憶されている。ステップ307で動的プログラムの作成を開始し，ステップ308で，任意に決定したデータα（前述のシステム内固有ID）を生成し，ステップ309でαを利用者管理データ格納装置213に保存するとともに，ステップ310で
暗号／復号プログラム217にαを埋め込み，動的プログラムの作成を完了する
（２）本願出願前に頒布された特許第４７９６６５８号公報（平成２３年１０月１９日発行，以下，「参考文献２」という。）には，関連する図面とともに，以下の技術的事項が記載されている。（当審注：下線は，参考のために当審で付与したものである。）
Ｎ　「【００２９】
　
内内キーは，
暗号解読プログラム内
に定数として設定されているキーである。
内内キーの土台が暗号化プログラム内に設定されており，暗号化処理および暗号解読処理の際に外キーと内内キーの土台とに基づいて内内キーが演算されてもよい。
５．対比
　本願発明と引用発明１とを対比する。
（１）引用発明１の「エンクリプタ」は，プログラム中の一部を暗号化するものであるから，本願発明の「暗号化部」に対応するといえる。
　引用発明１の「秘密鍵」は，上記Ｃの「例えばＤＥＳやＦＥＡＬといった秘密鍵暗号方式」との記載からすると，公開鍵暗号法と異なり暗号化鍵と復号化鍵が共通である方式の鍵であるから本願発明の「共通鍵」に相当する。
　引用発明１の「全体のプログラム」，「秘匿性の要求の高い部分」は，プログラム及び暗号化対象となるその一部であるから，それぞれ本願発明の「保護対象となるプログラム」，「特定のモジュール」に相当する。
　そうすると，引用発明１の「エンクリプタ」と，本願発明の「暗号化部」とは，
“共通鍵を用いて，保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する，暗号化部”
である点で共通しているといえる。
（２）引用発明１の「復号ルーチン」は，プログラムの暗号化された一部を復号して実行するソフトウェアであるから，本願発明の「復号化処理モジュール」に相当することは明らかである。
　また，引用文献１の上記Ｅの「この暗号化仮想オブジェクトコード５を，仮想機械ライブラリ（ＶＭライブラリ）及び復号ルーチン・ライブラリ７とリンクして，暗号化仮想オブジェクトコードを含んだ実オブジェクトコード９を得る。」との記載からすると，
　引用発明１の「仮想リンクエディタ」は，復号ルーチン・ライブラリのコピーを生成して実行可能な形式にリンクするものといえるから，本願発明の「復号化処理モジュール生成部」に対応するといえる。
　したがって，引用発明１の「仮想リンクエディタ」と本願発明の「復号化処理モジュール生成部」とは，後記する点で相違するものの，
“暗号化された特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する，復号化処理モジュール生成部”である点で共通しているといえる。
（３）引用発明１の「ソフトウェア解析保護方法の処理系」は，全体のプログラムの一部を保護するものであるから，本願発明の「プログラム保護装置」とは，
　“プログラム保護装置”である点で共通しているといえる。
　以上から，本願発明と引用発明１とは，以下の点で一致し，また，以下の点で相違する。
　
（一致点） 
「共通鍵を用いて，保護対象となるプログラム中の暗号化対象となる特定のモジュールを暗号化する，暗号化部と，
　暗号化された特定のモジュールの復号化及び復号化された前記特定のモジュールの実行を行なう復号化処理モジュールを生成する，復号化処理モジュール生成部と，
　を備えたプログラム保護装置。」
（相違点１）
　本願発明では，特定のモジュールが呼び出されると，代わりに，復号化処理モジュールが呼び出されるように，「復号化処理モジュール」のコードを書き換えるコード書換部を備えるのに対して，
　引用発明１では，呼び出し元や本来の呼び出し先の「特定のモジュール」のコードを書き換えずに，呼び出し先の「復号化処理モジュール」のコードを書き換える点について特定されていない点。
（相違点２）
　暗号化部，及び，復号化処理モジュールに関し，
　本願発明では，乱数データ又は予め設定されたデータを用いて暗号化用の共通鍵を作成するのに対して，
　引用発明１では，共通鍵の生成処理について特定されていない点。
（相違点３）
　復号化処理モジュール生成部に関し，
　本願発明では，復号化処理モジュールに，乱数データ又は予め設定されたデータを組み込ませるのに対して，
　引用発明１では，そのような点は特定されていない点。
６．当審の判断
　上記相違点について検討する。
（１）相違点１について
　ここで，引用発明１の技術的課題について検討すると，引用文献１の上記Ａの記載から，プログラムを内部解析から保護することを目的とする旨が記載されていると解される。
　そして，上記のような引用発明１の技術的課題に関連した引用文献として，引用文献２が本願出願前に公知であり，上記の引用発明２が記載されているものと認められる。
　引用発明２は，引用文献２の上記Ｇの記載からすると，プログラム内部に含まれる保護対象の内容が読み出されないようにプログラムに部分的に保護（例えば暗号化）を加えるための技術である。
　そうすると，引用発明１，引用発明２は共に，プログラムの内部を保護することを課題とした技術の異なる態様であるといえる。
　引用発明１の「復号ルーチン」は，コードを書き換えている点について明記されていないものの，引用文献１の上記Ｆの「暗号化仮想オブジェクトコードを実行するには，そのエントリポイントを引数として，復号ルーチン・ライブラリを呼び出す（１１）。」との記載からすると，引用発明１でも，暗号化仮想オブジェクトコードの実行時に，暗号化仮想オブジェクトコードではなく復号ルーチンが呼び出されるように制御しているものといえる。
　一方，引用発明２の「第１変換部」は，暗号化された保護対象の対象関数を，実行時に復号して実行できるようにするための挿入関数を作成し，挿入関数の関数名を対象関数と同じ関数名とすることで，対象関数を呼び出す命令が，対象関数ではなく挿入関数を呼び出すようにしている。
　引用発明２の「対象関数」，「挿入関数」は，それぞれ本願発明の「特定のモジュール」，「復号化処理モジュール」に相当することは明らかである。
　してみると，引用発明１において，共通の課題を有する引用発明２を適用して，復号ルーチンについて，「秘匿性の要求の高い部分」が呼び出されると，代わりに，「復号ルーチン」が呼び出されるように関数名を書き換えること，すなわち，相違点１に係る構成とすることは，当業者であれば適宜なし得たものである。
（２）相違点２について
　引用発明１は，「エンクリプタ」及び「復号ルーチン」を備えるところ，
　「エンクリプタ」は，共通鍵を用いる「暗号化手段」の一態様であり，
　「復号ルーチン」は，共通鍵を用いる「復号化手段」の一態様である。
　ここで，暗号化手段や復号化手段が，乱数データ又は予め設定されたデータから共通の鍵を作成する機能を備えることは，例えば上記参考文献１，２に記載されるように，本願の出願前には暗号処理の技術分野において普通に採用されていた周知技術であった。
　そうすると，引用発明１において，上記周知技術を適用して，「エンクリプタ」及び「復号ルーチン」が，乱数データ又は予め設定されたデータから共通鍵を作成するようにすること，すなわち，相違点２に係る構成とすることは，当業者が容易に想到し得たことである。
（３）相違点３について
　引用発明１は，「復号ルーチン」を備えるところ，「復号ルーチン」は，共通鍵を用いる「復号化手段」の一態様である。
　また，復号化手段の内部に，鍵を作成するための情報を埋め込むことは，例えば上記参考文献１，２に記載されるように，本願の出願前には暗号処理の技術分野において普通に採用されていた周知技術であった。
　そうすると，引用発明１において，上記周知技術を適用して，「復号ルーチン」に，復号鍵を生成するためのデータを組み込ませること，すなわち，相違点３に係る構成とすることは，当業者が容易に想到し得たことである。
（４）小括
　上記で検討したごとく，相違点１乃至相違点３は格別のものではなく，そして，これらの相違点を総合的に勘案しても，本願発明の奏する作用効果は，上記引用発明１，引用発明２及び参考文献１，２に記載の周知技術の奏する作用効果から予測される範囲内のものにすぎず，格別顕著なものということはできない。
７．むすび 
　以上のとおり，本願の請求項１に係る発明は，特許法第２９条第２項の規定により特許を受けることができないものであるから，その余の請求項に係る発明について検討するまでもなく，本願は拒絶すべきものである。 
　よって，結論のとおり審決する。