良くある質問:CodeMeterのセキュリティについて

日頃、お客様とお話ししていると、CodeMeterのセキュリティに関するご質問を沢山頂きます。時には2時間近くこの件に関してご説明することもあります。しかし、多くのお客様は最後には「100%セキュアなものは存在しないけれど、CodeMeterは最も優れた選択肢に思えます。」と話されます。

この記事では、実際に受けた質問内容に対して、弊社のキューゲラーが説明したCodeMeterの優れた点について紹介します。

ミーティングでの最初の質問から始めます。

お客様:AxProtectorは、具体的にどのように私たちのソフトウェアを暗号化するのでしょうか?

私:CodeMeter Protection Suiteでは、パフォーマンスとセキュリティの両方をバランスよく向上させることができています。ソフトウェアを暗号化すると、1つまたは複数の擬似ランダムソフトウェアキーが作成されます。これらのキーは、アプリケーションまたはその一部をAES 256ビットで暗号化するために使用されます。そして、キーそれ自体が暗号化され、CodeMeterライセンスに含まれる複数のCodeMeterキーとともにソフトウェアに保存されるのです。

アプリケーションの実行、もしくは暗号化された箇所へのアクセス時に、これら複数のCodeMeterキーのうちの1つが選ばれ、ソフトウェアキーが復号されます。その後、ソフトウェアも同様に復号されます。正しいライセンスがない場合、必要なソフトウェアキーが取得できないため、ソフトウェアの復号または実行も不可能です。

お客様:CmActLicenseは、ドングルに比べてセキュアでないように感じます。CmDongleの場合、一般的なUSBインターフェイスを使用しますが、CmActLicenseの場合、非対称暗号化メカニズムを使用しますよね?

私:アプリケーションのように大量のデータを暗号化する場合には、AES 256ビットといった対称暗号化メカニズムが必要となります。また、1つのインストーラパッケージをすべてのエンドユーザーのもとで動作させたい場合、キーはすべてのライセンスにおいて共通でなければなりません。CmDongleCmActLicenseCmCloudContainerのいずれを使用した場合であっても、非対称プロセスにおいて、対称鍵はコンテナ内へ転送されます。CmDongleの場合はスマートカードチップ、CmActLicenseの場合はライセンスファイル(デバイスの特定のプロパティにバインド)、CmCloudContainerの場合はクラウドに保存されます。CmDongleやCmCloudContainerを使用する場合、CodeMeterキーは、エンドユーザーが所有するデバイスのメモリに格納されることはありません。しかし、CmActLicenseの場合は異なります。キーをメモリに保存する必要はありますが、それはほんの一瞬であり、さらにメモリ保存時はアンチリバースエンジニアリング機能で保護されます。「存在しないものを盗むことはできない」ー これだけは覚えておいてください。

お客様:しかし、盗み見ることはできるのではないですか?USBインターフェイスをハッキングすれば、CmDongleを疑似操作することもできてしまうと思うのです。

私:繰り返しになりますが、CodeMeterには複数のメカニズムが組み込まれています。まず、CodeMeter RuntimeとCmDongle間の通信は常に暗号化されています。そして、ライセンスには常に対称鍵と非対称鍵が共に含まれています。保護された鍵は、ランダムチャレンジを作成し、CmDongleはそれと対になる秘密鍵を用意する必要があります。その後、ソフトウェアは公開鍵を用いて中身を確認します。秘密鍵がなければ、この確認を偽装することはできません。しかし、それが全てではありません。先ほど申し上げたように、1つのソフトウェアキーを暗号化するために、私たちは、複数のCodeMeterキーを使用しています。つまり、実際にソフトウェアが起動した際に、複数の選択肢の中から1つのキーが選ばれるのです。但し、たとえソフトウェアを1000回以上起動したとしても、すべてのキーが使用されないよう設計されています。従って、すべての繋がりを記録したシミュレーターは、決して完全とは言えず、その機能は大きく制限されることになります。

お客様:それでは、ソフトウェアの更新はどうするのでしょうか?その際、同じキーを使ってもよいのでしょうか?それとも、軽微な更新であっても、その都度、新規ライセンスを作成したほうが安全なのでしょうか?

私:いいえ、その必要はありません。同じライセンスで、その都度、更新を保護することができます。これこそがCodeMeterの特長です。CodeMeterは、セキュアな保護を提供するだけでなく、ライセンシングプロセスの簡素化にも貢献します。すべてのライセンスの背後には、ルートキーであるプロダクトアイテムシークレットキー(PISK)があり、そこから必要なCodeMeterキーが(CmDongle上で)暗号化時に作成されます。キーは、保護したいアプリケーションのチェックサムをもとに作成されます。

同一アプリケーション/同一ライセンス → 同一キー → 同一保護アプリケーション

異なるアプリケーション(例:軽微な更新後)/同一ライセンス → 異なるキー → 異なる保護アプリケーション

お客様:私の同僚は、サイドチャネル攻撃によって、あるチップのキーが読み取られる可能性があることを発見しました。CmDongleでも同じことができてしまうのではないでしょうか?

私:こちらに対しても、私たちはいくつかの対策を講じています。まず、サイドチャネル攻撃を想定して製造された、セキュアなスマートカードチップを使用しています。また、ファームウェアに独自の仕掛けを施しています。さらに、PISKを直接使用することは不可能であるため、ルートキーが直接攻撃される恐れはありません。

お客様:それから、CodeMeterのライセンスがなくてもソフトウェアを使用できるIP(知的財産)保護モードの安全性はどうなのでしょうか?

私: 率直に申し上げますと、この種の保護は、CodeMeterのライセンスが提供する保護レベルには到底及びません。CodeMeterのライセンスでは、セキュアに格納されたキーがソフトウェアとリンクしています。一方、IP保護モードでは、ソフトウェアキーは暗号化されますが、そのキーは、保護されたアプリケーションの中に保管されます。キーの隠蔽は、私たちが提供する主要な技術の一つですが、ソフトウェアとライセンスを切り離すことで、保護レベルを一層強化することができます。

お客様:.NETの場合、マシンコードよりも解読しやすい中間コードが含まれるため、C/C++のネイティブアプリケーションにおける自動保護は、.NETアプリケーションよりも優れているとの理解で合っていますか?

私: 矛盾しているように聞こえるかもしれませんが、正しくはその逆です。AxProtector .NETでは、解読しやすい中間コードが含まれるため、AxProtector Windowsよりもはるかに高い保護レベルが実現できます。 AxProtector Windowsでは、アプリケーション全体を一度に暗号化・復号しますが、AxProtector .NETでは、アプリケーションを個々の機能に分割した後、断片的に暗号化します。実行時には、アクティブな状態で使用されている部分のみが復号され、マシンコードに変換されます。そして、そのコードは、直ちにワーキングメモリから削除されます。これにより、保護レベルが一段と強化されます。

お客様:では、攻撃者は、.NETアプリケーションの全機能を読み出し、復号することはできないのでしょうか?

私: 理論的には可能です。これは、動的解析のようにコードが実行されるわけではないため、「静的解析」と呼ばれます。しかし、AxProtector .NETには、これを防ぐためのトラップが組み込まれています。これらのトラップは、一見、普通のコードのように見えますが、攻撃者が復号し始めるとライセンスがロックされる仕掛けになっています。このトラップにはまると、静的解析であっても、復号を続けることは不可能になります。

C/C++、Delphi、Fortranなどのネイティブアプリケーションでは、実行時に動的復号を選択し、それにトラップを含めることもできます。但し、その場合、関数やトラップをアプリケーション内で定義する必要があります。つまり、手間が増えることになります。

お客様:CodeMeterとAxProtectorを用いて、最高水準の保護を実現したい場合、どのようなものがおすすめでしょうか?

私: C/C++アプリケーションについては、CTP (Compile Time Protection)という、AxProtectorで新しいタイプの難読化機能を導入しています。これは、コンパイル時にアプリケーションを変更し、その構造を解読できないようにするものです。このテクノロジーは、IP保護モードをはるかに上回る保護機能を有し、CodeMeterのライセンスのある無しに関わらず使用することができます。但し、Clangコンパイラーは必要です。

また、CmDongleもしくはCmCloudContainerを使用している場合、機密性の高いコードをCmContainerに移動させることをおすすめします。書いたコードを暗号化した後、CmContainerに移動させ、そこで復号・実行します。このメカニズムをCodeMovingと呼んでいます。暗号化されていない状態でコンピューターのメモリに触れることのないコードを攻撃者が見ることは不可能であるため、CodeMovingは、リバースエンジニアリング対する最大の武器となります。

上記のように、私は、CodeMeterのセキュリティ機能について、私たちが提供するテクノロジーの潜在的な限界も含めて、詳細に説明しました。Wibu-Systemsでは、ネガティブな面も含めすべてをオープンにする姿勢を大事にしています。約140年前、ケルクホフスの原理を提唱したアウグスト・ケルクホフス氏は、「真のセキュリティは、メカニズムや原理を秘密にすることで得られるものではない。秘密にしておくべきものは、キーである」と考えていました。そして、そのキーをセキュアに保管する場所として最適なのは、CmDongleなのです。

関連製品/ページ

 

貴社の課題をCodeMeterで解決しませんか?
お気軽にお問合せください。製品説明および最適な使い方をご提案します。

お問合せ

KEYnote 45 – Edition Spring/Summer 2023

To top