Comments
Description
Transcript
修士論文 使用回数を監視可能なソフトウェアライセンス管理方式 | 常時
NAIST-IS-MT9851043 修士論文 使用回数を監視可能なソフトウェアライセンス管理方式 | 常時接続を必要としない手法の提案 近藤 隆司 2000 年 2 月 14 日 奈良先端科学技術大学院大学 情報科学研究科 情報処理学専攻 本論文は奈良先端科学技術大学院大学情報科学研究科に 修士 (工学) 授与の要件として提出した修士論文である。 近藤 隆司 審査委員: 関 浩之 教授 伊藤 実 教授 楫 勇一 助教授 使用回数を監視可能なソフトウェアライセンス管理方式 | 常時接続を必要としない手法の提案3 近藤 隆司 内容梗概 コンピュータソフトウェアの不正なコピーや不正な使用が , 社会的に大きな問 題となっている. ソフトウェアの不正使用防止技術のひとつとして , ソフトウェア 起動時にユーザのライセンスチェックを行う方式が研究されており, 一部のソフ トウェアでは既に実用化されている. 本研究ではライセンスチェック方式の中で も特に , ソフトウェアの使用に対する従量性課金を可能とするような方式を検討 する. もしユーザの使用する計算機がネットワークに常時接続されており, ライ センスを管理するサーバと無制限に通信を行うことが可能であるならば , そのよ うな仕組みを実現することは容易である. 本研究では , 暗号技術を採り入れるこ とによって, ダ イヤルアップ回線やモバイル端末のように常時オンライン接続が 困難な環境においても安全かつ正当なライセンス管理および課金が可能となる方 式を提案する. キーワード ライセンス管理方式, セキュリティ, ソフトウェアの難読化, 電子商取引, ソフト ウェア配布 3 奈良先端科学技術大学院大学 情報科学研究科 情報処理学専攻 修士論文, MT9851043, 2000 年 2 月 14 日. i NAIST-IS- A Meter-rate License Check System for Software on a Partially O-line Network3 Takashi Kondoh Abstract Illegal copies and illegal use of computer software are signicant matters in the last decade. To embed a license check mechanism in a software can be one solution to prohibit malicious use of software. In this study, a new license check mechanism is proposed. With the proposed mechanism, a kind of the \meterrate" system is realized. If a license server and a user's computer is connected by a communication line which is available anytime, then such a license system can be realized rather easily. The proposed system is eective to partially oline systems such as dial-up or mobile terminals. Cryptographic tequniques are employed to prohibit malicious operations of a user. Keywords: license check mechanism, security, anti-readability of software, electric commerce, distribution of software 3 Master's Thesis, Department of Information Processing, Graduate School of Information Science, Nara Institute of Science and Technology, NAIST-IS-MT9851043, ii February 14, 2000. 目 次 1. はじめに 1 2. 既存のライセンス管理方式 3 2.1 情報事前配布型のライセンス管理方式 2.2 オンライン型のライセンス管理方式 : : 2.3 超流通システム : : : : : : : : : : : : : 3. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 提案方式 3.1 前提とする環境 : : : : : : 3.2 提案方式 : : : : : : : : : : 3.3 提案方式の安全性について 3 4 5 7 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7 9 12 4. ライセンスサーバの不正を防ぐ拡張方式 16 5. まとめと今後の課題 21 謝辞 22 参考文献 23 iii 図 目 次 1 2 ユーザの計算機の内部構成 : : : : : : : : : : : : : : : : : : : : : : 拡張方式におけるユーザの計算機の内部構成 iv : : : : : : : : : : : : 15 20 1. はじめに コンピュータソフトウェアの不正なコピーや不正な使用が , 社会的に大きな問 題 [1][6][7] となっている. この種の問題は従来から指摘されていたが , とくに近 年, パーソナルコンピュータの普及や計算機ネットワークの発展にともない, この ような不正行為によって引き起こされる被害が甚大となっている. 従来のように , ソフトウェアの流通が磁気テープや CD-ROM などの物理的な媒体により行われ る場合には, 流通媒体に不正コピーを抑止するような仕組み, 例えば独自のフォー マットで磁気テープに記録する方法や, ソフトウェア起動時に CD-ROM 等の流 通媒体の存在を確認する手法が , ある程度有効であると考えられてきた. しかし近年, コンピュータネットワークの普及に伴って, ソウトウェアの流通形 態が大きく変化しようとしており, 従来の手法はそのままでは適用できない可能 性がある. 典型的な一例として , シェアウェアと呼ばれる種類のソフトウェア流通 形態があげられる. シェアウェアの場合, ユーザは自由に, ネットワークを通じて ソフトウェアそのものを入手することができる. しかしそのままでは , ソフトウェ アの起動可能回数や使用期間に制限があったり, あるいは機能に制約があったり する. ユーザがそのソフトウェアを自由に使用するためには , ソフトウェア開発 者に料金を支払うことで, ソフトウェアの制限を取り除くためのパスワード 的な 情報を購入することが必要となる. シェアウェアは現在のところ, 個人的に製作 された小規模なソフトウェアを中心とした流通形態であるが , 将来的にはより大 規模な商用ソフトウェアにおいても類似の流通形態が普及する可能性がある. 一 見すると, シェアウェアは合理的な仕組みであるように思えるが , 積極的に不正を 働こうとするユーザに対しては有効ではない. 実際, パスワード 情報が不正ユー ザによって第三者に再配布されてしまうと , ソフトウェア開発者が本来得るべき 利潤が損なわれてしまうことになる. ソフトウェア市場の健全な発展のためには , ネットワークを介してソフトウェ アを流通させるような形態においても, 不正利用を抑止する仕組みが必要となる. そこで , 従来の不正使用防止技術の一般化として , ソフトウェア起動時にユーザの ライセンスチェックを行う手法が研究されている. これは , ソフトウェアを起動し ようとしているユーザが本当にそのソフトウェアを使用する権利を有するかど う 1 かを検査する仕組みである. 従来の, ソフトウェア起動時に CD-ROM 等の存在 を確認する方法も, ライセンスチェック方式の一種と考えることができる. そのよ うな方式をより一般化し , 物理的な媒体に頼らずにソフトウェア使用権の検査を 行う方式が広く模索されている. 本研究ではライセンスチェック方式の中でもとくに , ソフトウェアの使用に対 する従量性課金を可能とするような方式を検討する. 従来, ソフトウェア利用の 契約形態としては , ユーザがそのソフトウェアを何度でも限りなく利用する権利 を購入するような形態が主流であった. ソフトウェアを頻繁に利用するような場 合はこの形態でも問題ないが , そうでない場合, ユーザはソフトウェアの代金 (使 用契約料) に割高感を抱くことになり, ひいては不正使用を助長することにもな りかねない. 例えば郵便番号が5桁から7桁に変更される際, データ変更用のソ フトウェアが販売された . また, 携帯電話の番号が11桁に変更される際にも, 同 種のデータ変換ソフトウェアが発売となった. 通常のユーザならば , これらのソ フトウェアは一回だけ , あるいは少数回だけ実行すれば十分である. しかし従来 のライセンス契約形態では , この種のソフトウェアにど うしても割高感がつきま とうことになる. もしソフトウェアの使用時間や使用回数に基づいて料金を課金 するような方式が実用化されれば , 上で述べたタイプのソフトウェアの流通など も適切に行うことが可能になると考えられ , その実用的な価値は高い. もしユーザの使用する計算機がネットワークに常時接続されており, ライセン スを管理するサーバと無制限に通信を行うことが可能であるならば , そのような 仕組みを実現することは容易である. しかし , ダ イヤルアップ回線やモバイル端 末のようにネットワークへの常時接続が困難な場合において, ユーザの利便性と ライセンス管理の正当性を両立することは単純な方法では困難であると考えられ る. 本研究の目的は , 暗号技術を適切に採り入れることによって, 善良なユーザの 利便性を損なうことなく, 常時オンライン接続が困難な環境においても安全かつ 正当な従量性のライセンス管理・課金方式を実現するような方式を提案すること である. とくにユーザ側において特殊なハード ウェア等を要求することなく, 純 粋にソフトウェア的・情報理論的な手法のみを用いることで , より汎用性の高い 方式を提案する. 2 2. 既存のライセンス管理方式 ライセンス管理方式 [4] について体系的・学術的に取り扱った研究は , 筆者の調 べたかぎりにおいては見当たらなかった. ここでは , いくつかのソフトウェアに おいて実際に利用されている方式を紹介する. 2.1 情報事前配布型のライセンス管理方式 最も単純なライセンス管理方式としては , 実際にソフトウェアを使用するマシ ンに対して , ライセンスに関する情報を事前に配布しておくタイプのものがあげ られる. ソフトウェアはその起動時に , 同じ計算機上のファイルとして正当なラ イセンス情報が存在するかど うかを確認し , もしライセンス情報が不当であると 判断した場合には , 本来の機能をユーザに提供することなく終了する. ライセン ス情報をどのような形態でユーザの計算機上に保管するかによって, 本方式をさ らに細かく分類することができる. 最も単純なものは, 全てのユーザ, 全ての計算 機に対して同一の情報を配布するタイプのものである. この場合, ある計算機上 のライセンス情報 (ファイル ) を他の計算機にコピーすることにより, コピーされ た先の計算機においてもソフトウェアの起動が許可されることになる. その意味 で本方式の安全性は低いが , 実現が容易であるという利点がある. 本方式を改良 したものとして , ソフトウェアのシリアル番号等をライセンス情報に埋め込む方 法がある. ソフトウェアは, ライセンス中のシリアル番号が正当な形式に則って いるかど うかを検査することでライセンスの正当性検査を行う. 計算機ごとにラ イセンス情報 (ファイル ) は異なるものとなるが , ファイルのコピーによるライセ ンスの不当な複製に対しては , 最初の方法と同じく無力である. さらに改良を進 めたものとして , 計算機の固有情報をライセンスに埋め込むタイプのものがある. たとえば数式処理ソフトの Mathematica では , 計算機のホスト名や IP アドレス 等の情報をライセンスファイルに埋め込んでおき, ソフトウェア起動時に , 計算機 から得られた固有情報とライセンス内の情報を比較することで, ライセンスの正 当性検査を行う. よって, ある計算機のライセンスファイルを他の計算機にコピー したとしても, 通常は使用できないものとなるので, 上記二方式と比べて高い安全 3 性を有する. しかし本方式では , ユーザが都合よくライセンス情報を偽造するの を防止するような仕組み, たとえば一方向性関数を使って情報を保護するような 仕組みが必要となるため, 上記二方式に比べるとやや複雑となる. これらの方式に共通する長所として , 最初にライセンス情報を配布してしまえ ば , 後はネットワークの存在を必要としない点があげられる. したがって, ネット ワーク障害などに影響されることなく, ソフトウェアの利用が可能になる. 一方, これらの方式では , 本研究で目指すような「従量性」のソフトウェアライセンス 管理, すなわち, ユーザによるソフトウェア起動回数を制御可能な管理ができな い, あるいは困難であると考えられる. 2.2 オンライン型のライセンス管理方式 ネットワークを介してライセンス検査を行う方法は , 大きく以下の 2 種類に分 類できる. サーバライセンス方式:ライセンスを管理するライセンスサーバを設置し , ユーザがソフトウェアを起動する際に毎回ライセンスサーバと通信を行う ことにより, ライセンス検査を行う方式. 通常, ライセンスサーバと通信を 行う機能はソフトウェア内部に埋め込まれており, リバースエンジニアリン グ等によってソフトウェアが分析・解読されないかぎり, ソフトウェアの不 正使用が行われることはない. しかしその一方, ネットワーク障害等により ライセンスサーバとの通信ができない場合は, ソフトウェアの起動が不可能 となってしまう. 例えばライセンスサーバが一時的に停止している場合等, ユーザの環境は正常であるにもかかわらず , 完全に外部的な要因でソフト ウェアの使用が制限されてしまうため, 利便性は高いとはいえない. 同時使用ライセンス方式:ソフトウェア起動時に , ネットワークの同一セグ メント内で他に同じソフトウェアを使用しているユーザ・計算機があるか ど うかを検査する方式. 検査時にネットワークパケットのブロードキャスト を用いる方式や, セグ メント内にサーバ的なマシンを置く方式などがある. 比較的小規模のネットワークには向いているが , 大規模ネットワークにおい 4 ては , トラヒックの増加等の理由により, 望ましくない場合がある. 2.3 超流通システム 本研究で取り扱うライセンス管理方式とは少し異なるが , 同種の目的意識を持っ た研究として超流通システムがある. 特殊なマシンを仮定し , そのマシン上でし かデジタルコンテンツが利用できないように機構を構成した上で, コンテンツを 利用する事に対して対価を支払うようにする, といった事を実現するために考え 出されたのが超流通システム [10][11] である. 超流通システムは, 一定期間毎に使用記録を決済センタが回収し , それを元に 利用者に料金を請求し , コンテンツプロバイダに利益分配を行なうという複数の コンテンツプロバイダを想定した統括的な電子決済システムである. 超流通コンテンツに求められる性質としては , コンテンツは暗号によって保護 されていること, 世界で唯一のコンテンツIDをもつこと, 利用した結果誰に料金 を分配すれば良いのかなどの権利処理のデータ (超流通ラベルという) をもつこと がある. そして , このコンテンツは超流通ラベルを読む仕組み (超流通ラベルリー ダ ) をもったマシン (超流通マシン ) 上でのみ利用可能でなければならない. これ らの点を満足することで以下のような利点がある. まず, 電子的流通により流通 コストが抑えられることによる価格の低下があげられる. また, 無限の使用権を 獲得するために料金を支払う方式とは異なり, 使用しなければ料金は徴収されな いので , 十分に使用しないのに権利を取得するために高い代金を支払う必要がな いので , 最低限の費用で利用が可能となる. 次に , コンテンツの入手に料金がかか らないため, コンテンツの不正コピーという概念自体が無くなり, この問題が解消 されることになる. またこのことは中古売買の問題 [2] の解消も意味する。 さらに , 従来のように記録媒体にとらわれることがないため , 迅速に流通がで き, かつ供給量は無限大になり, 供給費用もかからない . しかも自由に配布がで き, 無料期間も設けることができるので, コンテンツに触れる機会を増やし , 購入 前に内容を理解することも出来るのでユーザに安心感を与えることになり, 新た な需要を産むことにも繋がる. 超流通システムの欠点は, 耐タンパーモジュールとして特別なハード ウェアを 5 使う点であり, 現在この点を耐タンパー性を持つ, ソフトウェアで実現する手法 [3] も考えられているが, まだ十分ではない. 6 3. 3.1 提案方式 前提とする環境 本研究では, ライセンスを発行・管理するライセンスサーバとユーザの管理す る計算機とが , 信頼のできる通信路によって接続されているような環境を考える. 本研究では簡単のため, ライセンスサーバとユーザ以外のエンティティはネット ワーク上に存在しないものと仮定する. 現実の世界においては , 通報の盗聴や改変 などの妨害操作を行おうとするエンティティが存在する可能性があるが , 暗号通 信の技術などを適切に使用することで, そのような第三者の存在を考慮する必要 のない環境を構築可能であると考えられる. また, ライセンスサーバ (ソフトウェ ア販売者) とユーザとの間には, 信頼できる決済手段が存在するものと仮定し , 実 際の決済方法には立ち入らないこととする. さらに, ユーザの計算機においては特 殊なハードウェアの存在を仮定しないこと, 信頼できる第三者機関 (trusted third party) の存在は仮定しないこととする. これらの存在を仮定すれば , 目標とする ライセンス管理方式を比較的容易に実現可能であると考えられるが , 方式の一般 性・実用性を損なうものとなる. よって本研究においては , これらの存在を仮定 しないものとした. ユーザの使用する計算機は , 通常のパーソナルコンピュータとする. 具体的に は , 計算機そのものにはユーザ認証の機能はなく, またユーザ計算機上の各種ファ イルに対して , ユーザは自由に操作することが可能であるとする. しかしその一 方, ユーザは実行形式ファイルの内容には関知できないものとする. すなわち, プ ログラム内部で使用されているアルゴリズムや, プログラム内に埋め込まれたデー タなどは , ユーザに知られることはないと仮定する. この仮定は , 近年さかんに研 究されているソフトウェアに対する難読化技術 [12][13][8][5] を利用することで実 現可能であると考えられる. また, 実行形式のプログラムは , 自分自身を書換える ことができないものとする. 自己書換えプログラムを構成することは技術的には さほど困難ではないと考えられるが , オペーレーティングシステムの制約や事故 が発生したときの安全性を考慮すると, 自己書換えプログラムを使用することは 得策ではないと考えられるためである. 現在広く流通している Windows システ 7 ムのパーソナルコンピュータは , 上記の仮定を全て満足する. また, 上記環境にお いて利用可能な方式は, UNIX オペレーティングシステムの稼働している計算機 においても利用可能である. 以上の環境において, 以下の目標を実現するようなライセンス管理方式を考案 する. ライセンスサーバはユーザに対し , 限られた回数だけソフトウェアを実行す る権利を販売する. 第一節で述べたように , 本研究では従量性課金を可能とする方式を考案す る. 実現方法はいくつか考えられるが , 本研究ではソフトウェアの実行回数 に制限があるようなライセンスを販売することで, 所期の目的を達成するこ とを考える. 悪意を持ったユーザは , 自分の計算機上のファイルを操作する ことで , ライセンスサーバに許可された回数以上にソフトウェアを実行しよ うと試みる可能性がある. 暗号技術を適切に使用することで, そのような不 正行為をできるだけ抑止するよう方式を設計する. ライセンスサーバとユーザ計算機との間の通信量・通信回数は , できるだけ 少なくする. もしライセンスサーバとユーザ計算機との間が常時接続されているならば , 上記第一の目標を達成する方式は比較的簡単に実現可能である. たとえば , ソフトウェア起動時に毎回ライセンスサーバと交信するような方式を考え れば , ユーザの不正を完全に防止することができる. しかし , そのような方 式は , ダ イアルアップ回線を使用している個人ユーザや, モバイル端末のよ うなネットワークに常時接続されていない環境においては, 利便性において 劣っていると考えられる. また, 常時ネットワーク接続されているような環 境においても, ネットワークに発生した障害が直接ユーザに影響を与えるた め , 必ずしも好ましくない. そこで本研究では , 何回分かの実行許可情報を まとめてユーザ側にわたすことで , 通信量・通信回数をできるだけ削減する ことを目標とする. 現在想定している環境において上記第二の目標を達成しようとすると, どのよう 8 な方式を採用するにしても, 以下に述べるようなライセンスのバックアップ攻撃 が可能となってしまう. バックアップ攻撃とは , ユーザがサーバから受け取った実 行許可情報をバックアップ (別形式で保存) しておき, 必要に応じてリストア (情 報を復帰) するような操作である. 基本的に , ユーザの計算機はユーザ自身によっ て管理されることを想定しているため , ユーザは自分の計算機を, 実行許可情報 を受け取った直後の状態に復帰させることが可能である. ユーザの計算機上のプ ログラムは, 同一計算機上に保存されている実行許可情報を検査して , そのユー ザがプログラムを実行する権利を有するかど うかを検査する. すなわちこの検査 はユーザの計算機という閉じた系の内部で完結することになる. バックアップ・ リストア操作で系全体が操作されてしまうと, ユーザの計算機上のプログラムは , ユーザの不正操作を検知することができなくなる. ユーザによるバックアップ攻 撃を完全に検知するためには, ソフトウェアの起動毎に, ユーザの計算機の外部に ある系からユーザの計算機の内部状態をチェックするような仕組みが必要となる が , そのためにはソフトウェア起動毎になんらかの通信を行う必要がある. 以上 のことより, 常時接続が保証されない環境における方式では , バックアップ攻撃を 完全に防止することは不可能であると予測される. 3.2 提案方式 本方式では DES[15] に代表されるような対称鍵暗号系を利用して , ユーザの不 正行為を防ぐことを考える. 鍵 を e(k; m) と表記し , 鍵 表記する. 任意の k , m k k を用いて平文 m を暗号化して得られた暗号文 を用いて暗号文 c を復号して得られた平文を d(k; c) と に対して d(k; e(k; m)) = m である. 暗号系が十分な強度 を持つということは , 暗号文 e(k; m) から k および m のどちらも推測できないこ とをいう. 以下では簡単のため, 鍵は適当な長さを持つ2進数であると仮定する. 提案する方式は以下のように与えられる. 1 より小さい実数とする. n を正整数とし , p を 0 より大きく は一度に購入する使用権の数であり, サーバへ接続しにいく確率である. n n n および p p はライセンス の取り方は任意であるが , 一般に を大きく取るとユーザの利便性は向上するが , 方式の安全性は低下するおそれ がある. また, p を大きくするとユーザとライセンスサーバ間の通信量は増大する 9 が , バックアップ攻撃などに対してより大きな耐性を有するようになる. ユーザ に提供するソフトウェアは , そのソフトウェアが提供する通常の機能の他に , ライ センスチェックを行う部分を含むよう設計される. ソフトウェア起動時には, 後に 述べる方法にてライセンスチェックを行い, もしユーザがそのソフトウェアの使 用権を有しないと判断される場合には , その場でプログラムを強制終了する. プ ログラム中のライセンスチェック部は, 難読化等の手法により, ユーザに解析また は除去されないよう設計されているものと仮定する. 後ほど 詳しく述べるが , ラ イセンスチェック部の内部には , 暗号方式の鍵長と同じ長さの秘密情報 k0 が埋め 込まれているものとする. ソフトウェアの配布とライセンスの発行 あるソフトウェアを使用しようとするユーザは , まずネットワーク等を通じて ソフトウェア本体を入手し , 自分の計算機上にインストールする. 次にライセン スサーバに対して , そのソフトウェアを n 回起動するだけの使用権を購入する旨 を伝える. これに伴う決済方式などは外部に存在するものとし , 本提案では触れ ない. ライセンスサーバはユーザからの要求に対し , 以下のようにライセンス情 報を構築して, ユーザに発行する. 1. 暗号方式の鍵長を持つ2進系列 ku をランダムに生成し , る. ここで 8 はビット毎の排他的論理和をあらわす. 2. 整数 i = 1; 2; . . . ; n に対して 3. L ci k = k0 8 ku とす = e(k; i) を計算する. = (c1 ; c2 ; . . . ; cn ) とする. 4. 3 字組 (1; L; ku ) をライセンス情報としてユーザに発行する. 5. このユーザのプログラム実行回数を 0 回として記録しておく. ユーザは , 発行されたライセンス情報を自分の計算機上のファイルとして保存す る. 本方式では , プログラムに内蔵された秘密情報 ごとに異なる値 ku k0 に加えて , ライセンス情報 を用いて暗号化を行う. これにより, 同一の契約条件 (起動可 能回数) でも, ライセンス情報は互いに異なったものとなる. 現段階の提案手法で 10 はこの性質を利用していないが , 将来的にはこの仕組みを利用して , 複数のユーザ が共謀して不正を行うような攻撃に対処可能とする予定である. ライセンスの正当性検査 ユーザの計算機にインストールされたプログラムのライセンスチェック部は , ファイルに保存されたライセンス情報から, 以下のように使用権の正当性を検証 する (図 1参照). 1. ファイルに保存されたライセンス情報 (i; L; ku ) を取り出す. ただし , i は 1 から n の間の値をとる整数, L = (c1 ; c2 ; . . . ; cn ) は n 個の暗号文のリスト , ku は暗号化方式の鍵長を持つ2進係列である. もしライセンス情報がこれ らの制約を満たさない場合, そのライセンス情報は不正であるとしてプログ ラムを終了させる. 2. L の中から i 番目の暗号文 ci を取り出す. 3. ライセンスチェック部内部に埋め込まれた情報 k0 とライセンス情報の第 3 要素 ku から , k = k0 8 ku を計算する. 4. i0 = d(k; ci ) を計算し , i0 が i と等しくなるかど うか検査する. もし等しく なければ , ライセンス情報は不正であるとし , プログラムを終了する. 両者 が等しければ , 以下の操作 5 を行う. 5. 0 から 1 の間の値を取る乱数値 r を一様に発生する. もし r > p ならば , 以 下の操作 6 を行う. もし r p ならば , ライセンスサーバに i の値を送り, サーバからの応答を待つ. サーバからの応答内容が「強制終了」であった場 合, あるいはサーバから規定時間内に応答が無い場合はプログラムを終了す る. サーバからの応答内容が「実行許可」であった場合は , 以下の操作 6 を 行う. 6. ライセンス情報の第 1 要素の値を 1 だけ増やし , (i + 1; L; ku ) とする. 7. プログラムの本来の実行部へジャンプする. 11 ライセンスサーバは , ユーザ側プログラムのライセンスチェック部から送られて きた値 i i を受け取ると, 自分で記録しておいたそのユーザのプログラム実行回数 0 と比較する. もし 0 ならば「実行許可」の応答を返し , 自分の記録を i に i > i 0 ならば「強制終了」の応答を返す. この場合ユーザが不正 行為を行ったと考えられるので, 必要に応じて法的処置を取る等, 然るべき処置を 更新する. 一方, i i 取る. 3.3 提案方式の安全性について 提案方式において最も特徴的なのは , プログラムのライセンスチェック部にお ける操作 5 である. もし , 選択した乱数値 r が p より大きければ , ソフトウェア のライセンスチェック部は, 閉じた系であるユーザの計算機の内部で全ての検査 を終了する. したがって単純に計算すると, 毎回ライセンスサーバに接続しにいく 方式と比べて, 通信量は p(< 1) 倍に減少することになる. またこの方式は , 単に 通信量を削減するだけではなく, たとえば常時接続環境にあるユーザにとっても, ネットワークの障害の影響を抑制する方向に働くこととなる. 実際, ソフトウェ ア起動時に毎回通信を行う方式では , ユーザの計算機とライセンスサーバとの通 信に障害が発生すると, ネットワーク障害が回復するまでソフトウェアの実行が 許可されないこととなる. 提案方式では, たとえ通信に失敗したとしても, プログ ラムを何度か再起動することでソフトウェアの起動が可能となる. また, 操作 5 の仕組みは , 悪意を持ったユーザのバックアップ攻撃に対する抑 止力になるとも考えられる. 定理 3.1 ユーザの計算機とライセンスサーバとの通信を完全に遮断してしまわ ない限り, バックアップ攻撃が無限に成功することはない (いつかはライセンス サーバに検知される). 上記定理を証明するため, まず以下の補題を示す. 補題 0を 3.2 n n より大きな整数とするとき, ユーザは以下の条件を満たすライ センス情報 (1; L0 ; ku0 ) を偽造できない. 0 は鍵長と同じ長さを持つ2進系列である. ku 12 0 は n0 個の暗号文からなるリスト L0 = (c1 ; c2 ; . . . ; cn ) で, その i (1 i 0 0 n ) 番目の要素 ci は ci = e(k0 8 k ; i) である. L 0 u 証明: ユーザが (1; L0 ; ku0 ) を偽造できると仮定すると, に対し , e(k0 には , 8 n < i 0 である整数 n i 0 ) が計算可能であることになる. e(k0 8 k 0 ; i) を計算するため u ku ; i 0 と i が必要となる. ここで, プログラムが難読化されているとの仮 k 0 , ku 定により, ユーザはライセンスチェック部の内部に埋め込まれている k0 を取り出 すことはできない. また, 暗号化方式が安全であるとの仮定より, 正当なライセン ス情報の内部に埋め込まれている k0 を取り出すこともできない. すなわち, ユー ザは k0 を入手することができないため, e(k0 8 0 ) を計算することができない. ku ; i 2 これはライセンス情報を偽造可能であることに矛盾する. 定理 3.1の証明: 悪意を持ったユーザによってバックアップ攻撃が行われ , 定数 ( 1) に対して cn 回ソフトウェアが起動されたと仮定する. 補題 3.2 より, ソフ トウェアが起動されるときのライセンス情報の第 1 要素は , 必ず 1 以上 n 以下の 整数である. cn 回のソフトウェア起動事象のうち, ソフトウェア起動時にライセン ス情報の第 1 要素が i (1 i n) であった事象の発生回数を yi とすると, yi c であるような整数 i (1 i n) が少なくとも一つ存在するはずである. 以下, 条 件 yi c を満たす i を一つ固定して考える. もし , これら yi 回の事象において 2 回以上ライセンスサーバと通信を行っていれば , バックアップ攻撃がライセンス サーバに検知されることとなる. したがって, この時点で不正が検知されないため の必要条件は , これら yi 回の事象において一度も通信が行われないか , 一度だけ通 信が行われるかのどちらかである. 乱数 r は一様に選ばれるので , 通信が一度も行 われない確率は (1 0 p)y , 一度だけ行われる確率は p(1 0 p)y 01 となる. これより, この時点で不正が検知されない確率は, 高々(1 0 p)y + p(1 0 p)y 01 = (1 0 p)y 01 となる. ここで yi c なので , この確率は (1 0 p)c01 以下となる. バックアップ 攻撃が無限に成功するということは c を無限に大きくすることに相当するが , そ の場合不正が検知されない確率は c に対して指数的に小さくなる. これはバック アップ攻撃がいつかはライセンスサーバによって検知されることを意味している. c i i i i i 2 提案手法を用いてもバックアップ攻撃を完全に防ぐことはできない. しかし定 13 理 3.1 が示すとおり, 提案手法を用いることで不正行為が際限無く行われること を防止することができる. 実際, 提案手法は技術的には万全のものでないにして も, 不正行為はいつか検知されるものであるとの認識をユーザに与えることがで きる. 現実世界への応用を考慮する際には , そのような心理的抑止力の影響も無 視できないと考えられるので , 定理 3.1 の意味するところはかなり大きいものと 考えられる. また, 提案方式を用いることで , ライセンス情報を複数の人間で使い回すよう な不正行為も検知できると考えられる. 実際, 定理 3.1 と同様にして , 不正を検出 する確率が , 不正にソフトウェアを使用する計算機の台数に対して指数的に増加 することを示すことができる. 新聞等の報道によると, 大学や企業などではしば しばソフトウェアを一式だけ購入して , それを複数台の計算機上で使用するよう な不正が行われているとの報告がある. 提案方式を用いれば , 大がかりな不正ほ ど 検知される確率が大きくなるので, この種のソフトウェアの不正コピー問題に 対する強力な一手法となることが期待される. 14 ライセンスチェック部 比較器 i e(k, 1) 同一 or 相違 e(k, i) 復号アルゴリズム e(k, n) ku + k0 ライセンス情報 図 1 ユーザの計算機の内部構成 15 4. ライセンスサーバの不正を防ぐ拡張方式 前節までの議論では , ユーザの不正行為を防止するためのメカニズムについて 議論してきた . しかし , ソフトウェアの使用権はユーザとソフトウェア開発者の 契約関係に基づいて発生するものである以上, 現実の世界ではソフトウェア開発 者, すなわちライセンスサーバの不正を防止する仕組みも必要となってくると予 測される. 本節では, 提案方式を拡張することで, ライセンスサーバの不正を防止 する手段について検討する. ライセンスサーバが行う不正として本論文で考慮するのは, 使用することので きないライセンス情報 (以下では偽ライセンス情報と呼ぶ) をユーザに発行する ことである. ユーザは秘密情報 k0 を知らないので , 実際にソフトウェアを起動し てみない限り, 購入したライセンス情報が正当なものであるかど うかを検証する 手段が無い. したがってライセンスサーバ側としては , 例えば 100 回分のライセ ンス購入要求に対して 50 回しか使えないようなライセンスを発行しておき, 適当 な時期に行方をくらますような売り逃げ行為が可能となってしまう. ユーザは, 51 回目にソフトウェアを起動するときになってはじめて , ライセンスサーバから偽 ライセンス情報を売りつけられたことに気付くが , そのときにはライセンスサー バと連絡不通となっており, 実質的に損害を被ることとなる. ライセンスサーバによるこのような不正行為を防止するためには , ユーザがラ イセンス情報の正当性を検証できるような仕組みを実現すれば良い. ただし , ユー ザの不正行為を防ぐために, ライセンス情報の検証はできても偽造はできないよ うな, ある種の一方向性を持った仕組みが必要となる. このような仕組みを実現 するため, 共通鍵暗号系ではなく公開鍵暗号系を使用することを考える. pk , sk を それぞれ公開鍵暗号系における公開鍵, 秘密鍵とする. 通常の公開鍵暗号系の定 義では , 任意の x に対して d(sk ; e(pk ; x)) = x となることが求められるが , 今回使 用する公開鍵暗号系は, 暗号化操作と復号操作が可換な公開鍵暗号系, すなわち, 任意の x に対して e(pk ; d(sk ; x)) = x となるような公開鍵暗号系を考える. 全て の公開鍵暗号系がこの性質を満たすとは限らないが , RSA[16] 等実用上重要な方 式のほとんどがこの性質を満たす. ライセンスサーバによる不正を防ぐため, 以下のような変更を加える (図 2 参 16 h i 照). ソフトウェア開発者は, 公開鍵暗号系の秘密鍵, 公開鍵の対 sk 0 ; pk 0 をあら かじめ定め, プログラムのライセンスチェック部に , k0 ではなく pk 0 を埋め込む ものとする. pk 0 は秘密に管理される必要はないが , 対応する秘密鍵 sk 0 はユー ザに知られないよう保管する. ライセンスサーバはユーザからの要求に対し , 以下のようにライセンス情報を 構築してユーザに発行する. 1. hsk 0 i とは異なる秘密鍵, 公開鍵の組 hsk pk i をランダムに生成する. ま た, pk = pk 1 8 pk 2 となる pk 1 , pk 2 を任意に定める. ; pk 0 ; 2. 整数 i = 1; 2; . . . ; n に対して 3. L ci = d(sk ; i) を計算する. = (c1 ; c2 ; . . . ; cn ) とする. 4. 6 字組 (1; L; pk ; d(sk 0 ; pk ); d(sk 0 ; pk 1 ); d(sk 0 ; pk 2 )) をライセンス情報として ユーザに発行する. 5. このユーザのプログラム実行回数を 0 回として記録しておく. ユーザの計算機上のプログラムは , 以下の手順でライセンスの正当性を検証する. 1. ファイルに保存されたライセンス情報 (i; L; pk ; y; y1 ; y2 ) を取り出し , 以下 の検査を行う. (a) i が 1 から (b) L (c) pk は n n の間の値をとる整数か. 個の暗号文のリストか . は公開鍵として正当か (正しい鍵長を持つか ). (d) e(pk 0 ; y ) = e(pk 0 ; y1 ) 8 e(pk 0 ; y2 ) = pk が成立するか. もし一点でも条件を満たさなければ , そのライセンス情報は不正であるとし てプログラムを終了させる. 2. L の中から i 番目の暗号文 ci を取り出す. 17 3. i0 = e(pk ; ci ) を計算し , i0 が i と等しくなるかど うか検査する. もし等しく なければ , ライセンス情報は不正であるとし , プログラムを終了する. 両者 が等しければ , 以下の操作 4 を行う. 4. 0 から 1 の間の値を取る乱数値 r を一様に発生する. もし r > p ならば , 以 下の操作 6 を行う. もし r p ならば , ライセンスサーバに i の値を送り, サーバからの応答を待つ. サーバからの応答内容が「強制終了」であった場 合, あるいはサーバから規定時間内に応答が無い場合はプログラムを終了す る. サーバからの応答内容が「実行許可」であった場合は , 以下の操作 5 を 行う. 5. ライセンス情報の第 1 要素の値を 1 だけ増やす. 6. プログラムの本来の実行部へジャンプする. この方式では , ライセンスチェック部で行われている正当性検査に必要な情報 は , 全てユーザに公開されている情報である. よってユーザ自身も, プログラムを 実際に起動することなく, ライセンスが正当であるかど うかを検証することがで きる. 以下では, この方式でも基本方式の安全性は損なわれていないこと, すなわ ち, ユーザがライセンスの偽造を行うことは事実上不可能であることを示す. 補題 0を 4.1 n n より大きな整数とするとき, ユーザは以下の条件を満たすライ センス情報 (1; L0 ; pk 0 ; y; y1 ; y2 ) を偽造できない. pk 0 は正しい鍵長を持つ. 0 は n0 個の暗号文からなるリスト L0 = (c1 ; c2 ; . . . ; cn ) で, その i (1 i 0 0 n ) 番目の要素 c に対して e(pk ; c ) = i である. L 0 i e i (pk 0 ; y) = e(pk 0 ; y1 ) 8 e(pk 0 ; y2 ) = pk 0 である. 証明: ユーザが e(pk 0 ; y ) = pk 0 となる y , pk 0 を構成できるのは , 始めに y を 定めてから pk 0 = e(pk 0 ; y ) を計算するときのみである. 実際, もしユーザが 0 0 pk を先に定めたとすると, y を得るために y = d(sk ; pk ) の計算を行う必要 0 18 があるが , sk 0 は秘密に保管された情報であるため , ユーザはこの計算を行うこ とはできない. 同様の理由により, e(pk 0 ; y1 ) 0 pk を構成できるのは , 始めに y1 , y2 8 e (pk 0 ; y2 ) = pk 0 となる y1 , y2 , を定めた場合のみである. 従って, pk 0 の 値は適当に選んだ暗号文を復号してのみ得られるものであり, ユーザがその値 を自由に選ぶことはできない. したがって, ユーザが定めた y , y1 , y2 に対して 0 e(pk 0 ; y ) = e(pk 0 ; y1 ) 8 e(pk 0 ; y2 ) = pk となる確率は非常に小さい. したがって, 0 y , y , y , pk が本補題の第三番目の要求を満足するのは , それらが元々正当なラ 1 2 イセンス情報の一部であったときのみである, としてもよい. ユーザがライセン 0 である整数 i に対して e(pk 0 ; ci ) = i で なければならない. そのような ci を構成するためには , ユーザは公開鍵 pk 0 に対 応する秘密鍵を sk 0 を知っている必要がある. なぜなら c は c = d(sk 0 ; i) とし スを偽造できると仮定すると, n < i n i i てしか構成できないためである. しかし , pk 0 が正当なライセンス情報の一部で あったとすると, その対応する秘密鍵 sk 0 はユーザに知らされていないはずであ る. よってユーザは, e(pk 0 ; ci ) = i となる ci を構成できず , 補題の条件を満たす 2 ような偽造ライセンス情報を構成できない. ライセンスサーバの不正としては , 偽ライセンス情報をユーザに発行すること 以外にも, 例えば使用回数情報を偽造して , ユーザがソフトウェアを使用するのを 不当に妨げるようなことも考えられる. すなわち, ユーザから使用回数情報とし て i という値が送られてきた場合でも, ライセンスサーバが 手に選択し , そのユーザは既に j j > i となる j を勝 回ソフトウェアを起動したと主張するような不 当行為である. ユーザは, 基本提案方式, 上記拡張方式のいずれにおいても, サー バの記憶の中に保存されている使用回数情報が正当なものであるかど うかを検証 する手段が無く, ライセンスサーバが不当行為を行ったとしてもそれを立証する ことができない. 本ライセンス方式の中にそのような不当行為を防止する仕組み を組み込むこともできるが , 実際には電子署名等, 本方式の外部の機構を用いるほ うが , そのような不正を容易に防止することができる. 例えば上の使用回数情報 偽造問題の場合, 使用回数情報にユーザの電子署名をつけて送るようにすること で , 万一ライセンスサーバが不正をはたらいたとしても, その不正を立証すること ができる.[9] [14] 19 ライセンスチェック部 比較器 i 同一 or 相違 d(sk, 1) ・ ・ ・ d(sk, i) ・ ・ ・ 復号アルゴリズム d(sk, n) 同一 相違 比較器 pk 同一 相違 d(sk 0 , pk) 比較器 復号アルゴリズム + d(sk 0, pk1 ) 復号アルゴリズム d(sk 0, pk2 ) 復号アルゴリズム ライセンス情報 pk 0 図 2 拡張方式におけるユーザの計算機の内部構成 20 5. まとめと今後の課題 常時接続が困難な環境において使用可能な, 従量性のライセンス管理方式を提 案した. 暗号の技術とソフトウェア難読化の技術を利用することにより, ユーザ の利便性とライセンス管理の正当性の両立が可能となっている. 本方式でも悪意 を持ったユーザによるバックアップ攻撃を完全に防止することはできないが , 不 法行為を重ねれば重ねるほど , より高い確率で不法行為がライセンス権利者の知 るところとなる. 実際, 提案手法では, 不法行為が成功する (露見しない) 確率は 不法行為の回数に対して指数的に減少していくため, ユーザが自分の計算機を完 全にネットワークから遮蔽してしまわない限り, いつかは不法行為が露見するこ ととなる. 本方式ではこの性質が理論的に証明されているため, 不正を行おうと するユーザの心理に対してより大きな抑止効果があると期待される. また, ソフ トウェアのライセンスはユーザとソフトウェア製作者との契約関係に基づいて発 行されるべきものであるため, 一方的にユーザの不正を防止するだけでは不十分 であり, ライセンスサーバの不正を防止する仕組みも必要となる. 本研究では, 提 案した基本方式の拡張として , 公開鍵暗号系を利用することによってライセンス サーバの不正を防止する方式も提案した. 今後の課題として , 提案手法の安全性 をより綿密に検証すること, バックアップ攻撃をより効果的に防止する手法を開 発することなどがあげられる. 21 謝辞 本研究および本論文作成やゼミナール発表の際に, 丁寧な御指導と, 他数の貴 重な御指摘等をいただきました, 関浩之教授, 伊藤実教授, 楫勇一助教授に心から 感謝いたします. 最後に , 研究だけでなく, 学生生活や就職活動などの様々な局面で , 大変お世話 になりました情報基礎学講座の皆さんに感謝いたします. 22 参考文献 [1] 朝日新聞, \ソフト違法コピーの被害は1兆4000億円 昨年1年全世界で", (May. 10 1997). [2] 大阪地方裁判所, \著作権侵害行為差止請求訴訟 (平成 10 年 (ワ)6979 号)". [3] 末松俊成, 今井秀樹, \超流通ラベルリーダを使用しない超流通システムの一構 成方法", 1996 年暗号と情報セキュリティシンポジウム講演論文集, SCIS96-15B (Jan. 1996). [4] ソフトウェアライセンス研究会編,\ソフトウェアライセンス管理", クオリティ (1995). [5] 寺西栄作, 岡本栄司, 満保雅浩, \ソフトウェアプログラムの著作権保護方式の一 提案", 1997 年暗号と情報セキュリティシンポジウム講演論文集, SCIS97-10B (Jan. 1997). [6] 日経産業新聞, \ソフト7社、 「ソフトを社内で不正にコピー」、2000 万円賠償 求め提訴", (Dec.3 1999). [7] 毎日新聞, \パソコンソフトの違法コピー、個人ユーザーに拡大|パソコン通 信利用、バイト感覚"(Mar.6 1996). [8] 満保雅浩, 岡本栄司, \ソフトウェアの難読化における課題", 1997 年暗号と情 報セキュリティシンポジウム講演論文集, SCIS97-10A (Jan. 1997). [9] 宮崎真悟, 櫻井幸一, \電子現金システムにおける内部管理者の不正に対する考 察", 1999 年暗号と情報セキュリティシンポジウム講演論文集, SCIS99 W4-3.4 (Jan. 1999). [10] 森亮一, 河原正治, 大瀧保広, \超流通: 知的財産権処理のための電子技術", 情 報処理, Vol. 37, No.2, pp. 155-161 (Feb. 1996). 23 [11] 森亮一, 田代秀一, \ソフトウェア・サービス・システム (SSS) の提案", 電子 情報通信学会論文誌, Vol. J70-D, No.1, pp.70-81 (Jan. 1987). [12] 門田暁人, 高田義広, 鳥居宏次,\プログラムの難読化法の提案", 第 51 回情報 処理学会全国大会, pp.4-263{4-264 (Sep. 1995). [13] 門田暁人, 高田義広, 鳥居宏次,\ループを含むプログラムを難読化する方法の 提案", 電子情報通信学会論文誌, Vol.J80-D-I, No.7, pp.644-652 (July 1997). [14] Niels Ferguson, \Single Term O-Line Coins,", Advances in Cryptology EUROCRYPTO '93, LNCS 765, pp.318-328 (1994). [15] NIST, \Data Encryption Standard," FIPS PUB 46-2 (1993) (URL:http://csrc.nist.gov/ps/). [16] R. Rivest, A. Shamir and L. M. Adleman, \A method for obtaining digital signatures and publickey cryptosystems," Communications of the ACM, Vol.21, No.2, pp.120-126 (1978). 24