ライセンス認証の概略については、FUGOのFAQのページに記載させて頂いておりますが、ここではより、技術的に一歩踏み込んで、FUGOのライセンス認証通信の仕組み、及びその設計思想について説明いたします。
基本的な仕様
- 1日1回 (FUGOの初回起動時に)ライセンス認証を実行
- ライセンス管理サーバ(Google App Engineを使用)と通信を行い、Professional版ライセンスの有無を確認しています。
- ライセンスの有無に応じて、以下のように使える機能が変わります。
- 【有の場合】
Professional版として起動
特許明細書特有のチェック機能、及び日本語/英語の基本的なチェック機能が利用可能 - 【無の場合】
Free版として起動
日本語/英語のチェック機能のみ利用可能
※ 一度認証後に回線を意図的に切断して頂く(または、ファイアウォールでFUGOの通信をブロックする)ことで、少なくとも明細書のチェック『中に』、外部と通信を行っていないことは、確認できるものと思います。
ライセンス認証のタイミング(1日1回)について
近年のPCの高速化に伴いMicrosoftやAdobeなど大手企業の製品であっても固定されたライセンス認証(製品固有のプロダクトキーを用いる方式)では不正なプロダクトキーの生成・ライセンスの取得が横行しております。製品固有のプロダクトキーを用いる方法では、プロダクトキーの仕組みを解析するためにかける時間を、解析する側が自由に確保できてしまうため、比較的クラッキングが容易です。一方、昨今では、短い時間を有効期限とし、そのときどきでパスワード(ライセンス認証の場合プロダクトキー)を変えるような、ワンタイムパスワード方式が多用されてきています。この場合、1つのプロダクトキーを解析するためにかけられる時間は有限時間となるため、その時間を適宜短くすることで、理論上、現状のPCの性能ではクラッキングできなくなります。
このような技術的背景を踏まえ、FUGOではワンタイムパスワード方式の認証を行っています。不正利用防止の観点からは、起動の都度、認証を行う方が、望ましかったのですが、
- 短期間の間であればクラッキングされ不正利用されたとしても金銭的損害が限定的であること
- 不要な通信はユーザの方にとって好ましくないこと
- またユーザーの方が購入後にライセンスが移動させたいといった場合の取り扱いをなるべく楽にすること
これがベストの仕様とは考えておりませんが、ユーザの方の利便性と、FUGOの開発を事業として行えるバランスを考慮した上で、まずまず妥当なところに落とし込んだと考えております。
ライセンス認証のための通信内容について(ユーザのプライバシー、セキュリティへの配慮)
通信にあたっては、ライセンスサーバ側に利用者に関する必要以上の情報が送られないようにするとともに、最悪、第3者に傍受されても利用者の個人情報に関わらない情報のみを、やりとりするようにしています。具体的には、FUGOからライセンスサーバに送信する情報は、FUGOを使用するPCごとに固有となるようにランダムに生成したKey 情報と、使用中のFUGOのVer.情報です。
また、サーバから受信する情報は、ライセンスの有無を示すランダム文字列と、最新のFUGOのVer.です。より詳しい通信内容(パケットの内容)については、お問い合わせ頂ければ開発資料を送付いたします。
※ FUGOのVer.情報は本来的には不要なのですが、設計当初、サーバーのリソース消費(通信コスト)を抑えるために、ライセンス認証と合わせてバージョンアップ通知を行うようにしたため、送受信するようになっています。仕様を変更するタイミングがあれば、削除しても構わないと考えております。
なお、通信内容は個人情報に関わるものを含まないため第3者に傍受されることによる問題はないと考え、ユーザーの方が上記の公約(仕様)通りの通信がされているか確認できるように、意図的に「暗号化されていない」状態 (素のHTTP)でやりとりしております。
このため、パケットキャプチャソフト(例えば、Wiresharkなど)を用いて頂くことで仕様書通りに通信がされているかを、直接ご確認頂けます。
※ 巷には、SSL通信を用いているので安全であると謳っているアプリが存在しますが、SSL通信は、アプリ・サーバ間の通信の中継地点での第3者による傍受は防げるものの、通信が安全であること(すなわち、アプリがサーバに対して不正な情報を送信していないこと)を保証するものではありません。
FUGOでは、SSL通信によるユーザの方のメリットと、ユーザの方が通信内容を確認し辛くなるというデメリット、を考慮し、SSLの採用に代えて通信内容を工夫することで第3者による傍受対策を行うとともに、ユーザの方自身が通信内容を容易に確認できるようにしています。
※ 余談になりますが、Webアプリ版のFUGO Onlineでは明細書データを直接サーバに送信するため、第3者による傍受対策としてSSL通信を行っております。また、サーバで受信したデータは保存することなく、チェック処理を行った後はそのまま破棄しています。
最後に
なお「不定期に明細書データを送信するなど、仕様外の振る舞いをしないのか?」といった疑問については、こちらとしては、将来にわたって証明する手立てはなく「プログラマとしての矜持にかけて断じてしない」としか回答できません。巷では裏で仕様外のネットワーク通信を行うような「悪意をもったアプリ」も存在していることは周知のことと存じます。月並みな言葉となりますが、最後には、「ユーザの方がアプリ作成者を信用するかどうか」に尽きると考えております。