トップ回答者
製作したソフトの使用制限

質問
-
最近社命でVC++を触るようになった超初心者です。現在会社用のソフトウェアを開発中なのですが、上司の指示で、「許可した人間のみしか使用できないようにしろ」と言われました。考えているのは、許可を与えたコンピューターでしか動作しないようにし、許可外のコンピューターではインストールしても使用できないように出来ないかなと思っています。パスワードも考えましたが、社内でのパスワードの秘匿なんてやってもらえないと思い、他の方法を考えている内に上記の方法を思い当たりました。VisualSutudio2008にて開発していますが、VC++ではWindowsにアクセスして、コンピューター名を取得することが出来ると聞いたことがあります。いろいろ検索単語を変えて検索してみましたが、該当するものがなかなか出てこず、ほとほと困っております。最悪パスワードを頻繁に(月ごと等)変えつつ行うしかないと思っています。宜しくお願いします。
回答
-
どの程度使用者の善意に信用をおけるか、どの程度厳密な使用者の認証行う必要があるかで、Check項目が変わってきます。
>許可を与えたコンピューターでしか動作しないようにし
「許可したPC」なら、交換頻度の低いHardwareをCheckして
「許可したPC」か判断するのが、それなりに効果のある方法でしょう。
例えばNICのMAC Addressです。
それに加え、NetBIOS name(Computer Name)やLogon nameによるCheckを行えば、
「許可した人間」をそれなりに特定できるでしょう。
[MSDN日本語版]
・GetComputerNameEx
http://msdn.microsoft.com/ja-jp/library/cc429736.aspx
・GetUserNameEx
http://msdn.microsoft.com/ja-jp/library/cc429832.aspx
何れにせよ、Applicationで許可するか否かの情報を管理しなければなりません。
その場合、安易に読み取られ修正されないように、それらの情報を暗号化しておくなどの手段も
検討する必要があるかもしれません。
まずは、どの程度のセキュリティが必要になるか、もう少し掘り下げたほうが良いと思います。
すべての返信
-
どの程度使用者の善意に信用をおけるか、どの程度厳密な使用者の認証行う必要があるかで、Check項目が変わってきます。
>許可を与えたコンピューターでしか動作しないようにし
「許可したPC」なら、交換頻度の低いHardwareをCheckして
「許可したPC」か判断するのが、それなりに効果のある方法でしょう。
例えばNICのMAC Addressです。
それに加え、NetBIOS name(Computer Name)やLogon nameによるCheckを行えば、
「許可した人間」をそれなりに特定できるでしょう。
[MSDN日本語版]
・GetComputerNameEx
http://msdn.microsoft.com/ja-jp/library/cc429736.aspx
・GetUserNameEx
http://msdn.microsoft.com/ja-jp/library/cc429832.aspx
何れにせよ、Applicationで許可するか否かの情報を管理しなければなりません。
その場合、安易に読み取られ修正されないように、それらの情報を暗号化しておくなどの手段も
検討する必要があるかもしれません。
まずは、どの程度のセキュリティが必要になるか、もう少し掘り下げたほうが良いと思います。 -
ただ、MAC アドレスによる識別も完全ではないです。
理由は、MAC アドレスを書き換えることができるためです。
完全な対策は非常に困難です。
どの程度のコストまで投入でき、どの程度のセキュリティを確保できれば良いか、ご自身の環境で吟味して選択する必要があります。
例:
・HASP などのハードウェアキーという手もあるが、1カ所でしか実行しないのであれば採算性が悪い。
・MAC アドレス書き換えによる詐称は考えられるが、可能性を低いと見て採用する。
・インストーラでは設定しないレジストリキーを知っている人が設定し、そのキーがないと起動しないようにする。(キーがばれればダメなので、パスワードとほぼ同等。ただし、利用者は意識しない)
・あるファイルをどこかに空で置いておくと起動できる。そのファイルがないと起動しないようにする。(ファイル情報がばれればダメなので、パスワードとほぼ同等。ただし、利用者は意識しない)
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
> 完全な対策は非常に困難です。
> どの程度のコストまで投入でき、どの程度のセキュリティを確保できれば良いか、ご自身の環境で吟味して選択する必要があります。
Azulean さんの仰るとおり、この辺の話って色んな落とし穴があって、考え出すと本当にキリがないんですよね。
私も以前、オンラインソフトの配布で、使用制限や試用版の問題で散々頭を悩ませていた時期がありました。
結局自前で実装するのを諦めて、サードパーティー製の製品を使うことにした記憶があります。
ちなみにその時のソフトは Delphi で開発してましたが、使用制限にはニュートンの Protectkit を使ってました。
私が使っていたのは Protectkit 2 でしたが、今は 3 が出ているのですね。久々にニュートンのホームページを覗いて懐かしく感じました。- 回答の候補に設定 anningo 2010年1月12日 4:02
-
なるほど。
上司に言われているのは、社内からの持ち出しについてのセキュリティなので、社内においては正直言って、他部署の人間が使用しようがかまわないとのことです。作成中のソフトは会社の製品の原価計算をするソフトなので、社外の流出を避けたいわけです。例えば、退職者がソフトを持ち出し、転職先で使用したりすることを避ける意味合いが強いです。
この場合なら、サードパーティー製の製品を使うまでもないと思います。
ソフト起動時にネットワークのサーバーに接続させて、認証処理を行わないと使わせないようにする方法が考えられます。
現在開発中のシステムも、同様の方法(リモートサーバーに接続ですが)を採用しています。 -
なるほど。
上司に言われているのは、社内からの持ち出しについてのセキュリティなので、社内においては正直言って、他部署の人間が使用しようがかまわないとのことです。作成中のソフトは会社の製品の原価計算をするソフトなので、社外の流出を避けたいわけです。例えば、退職者がソフトを持ち出し、転職先で使用したりすることを避ける意味合いが強いです。
この場合なら、サードパーティー製の製品を使うまでもないと思います。
ソフト起動時にネットワークのサーバーに接続させて、認証処理を行わないと使わせないようにする方法が考えられます。
現在開発中のシステムも、同様の方法(リモートサーバーに接続ですが)を採用しています。
あるいは、肝心なロジックはウェブ サーバーに置き、クライアントに配布するアプリケーションは、Web Service から結果を取り出して表示するだけ、とか。
Jitta@わんくま同盟 -
LANに繋がったPCでのみ動作すれば良いのであれば、
計算に必要なパラメータ類を外出ししてそれを認証が必要なサーバーにおいておくとかでも
良いかもしれません。ただし、どこのサーバーにそのデータがおいてあるとかは
伏せておくべきでしょうし、ファイルのパスは中に組み込みにして暗号化するとか
した方が良いかもしれませんけれど。
いずれにしても何処までシビアに管理したいかによりますね。
但し、上記のようにLANに頼ったシステムにするとスタンドアロンでは動かなくなるので
それが許される事が前提になると思います。
例え社内においてあるPCであってもLANに繋がっていなければだめと言う事になるので。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。