JP2011521366A - ソフトウェアアプリケーションのホワイトボックス実装を生成するためのシステムおよび方法 - Google Patents

ソフトウェアアプリケーションのホワイトボックス実装を生成するためのシステムおよび方法 Download PDF

Info

Publication number
JP2011521366A
JP2011521366A JP2011509832A JP2011509832A JP2011521366A JP 2011521366 A JP2011521366 A JP 2011521366A JP 2011509832 A JP2011509832 A JP 2011509832A JP 2011509832 A JP2011509832 A JP 2011509832A JP 2011521366 A JP2011521366 A JP 2011521366A
Authority
JP
Japan
Prior art keywords
white box
data
file
generating
call
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011509832A
Other languages
English (en)
Other versions
JP5460699B2 (ja
Inventor
アイゼン,フィリップ,アラン
グッズ,グラント,スチュアート
マードック,ダニエル,エリー
Original Assignee
イルデト カナダ コーポレーション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by イルデト カナダ コーポレーション filed Critical イルデト カナダ コーポレーション
Publication of JP2011521366A publication Critical patent/JP2011521366A/ja
Application granted granted Critical
Publication of JP5460699B2 publication Critical patent/JP5460699B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/101Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by binding digital rights to specific entities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/16Obfuscation or hiding, e.g. involving white box

Abstract

ホワイトボックス暗号法を用いて、DRM保護付きファイルといったファイルを生成するための開発スイートである。かかるスイートは、コード生成ツール、データ変換エンジン、ホワイトボックスデータ生成ツール、およびホワイトボックスライブラリから構成される。ホワイトボックス暗号法の文脈においては、データ変換エンジンは、暗号化操作と周辺のコードとの境界を保護するように用いられる。特に、データ変換エンジンは、暗号化操作に対する入出力にデータ変換を適用するように用いられる。ユーザが、ホワイトボックスパラメータ化ファイルを介して変換が必要であると指定すると、コード生成ツールは、ユーザによって指定された情報をデータ変換エンジンが理解する形式、すなわち、データ変数の修飾子および関数プロトタイプにする。データ変換エンジンは、指定された変換を適用し、どの変換が選択されたのかに関する情報をデータ生成ツールに渡す。
【選択図】 図6

Description

本発明は、概して暗号法に関する。より具体的には、本発明は、攻撃者が実行中のソフトウェアに対してフルアクセスおよび制御を有する環境において、安全に動作するように設計されたソフトウェアアプリケーションの開発に関する。
ホワイトボックス暗号化ソフトウェアは、ホワイトボックス攻撃の文脈において、すなわち、ソフトウェアアプリケーションの少なくとも一部かつ潜在的には実装全体が、かかるソフトウェアがその上で実行されるプラットフォームの少なくともある程度の制御、かつ恐らくは完全な制御を有する攻撃者に対して潜在的にさらされる環境において、暗号化関数を行うソフトウェアである。
このような文脈は、例えば、テレビ番組、映画、音楽等が、放送を介するまたはDVDプレイヤを介する従来のテレビジョン上ではなく、パーソナルコンピュータ(PC)または他の同様のコモディティコンピュータデバイス上に表示されるデジタル著作権管理(DRM)といった暗号化アプリケーションに関連して発生する。このようなコモディティデバイスの多くの所有者は著作権法を遵守するが、中には、媒体コンテンツの違法コピーを製造および販売することによって、コンテンツの所有者に使用料を支払うことなくコンテンツを盗んでPCまたは同様のデバイス用の媒体から利益を得ようと試みる人がいる。PCは特に無防備な環境であり、知識豊富な攻撃者は、デバイスの完全な制御を獲得して、実行中のソフトウェアを詳細に観察して、デバッガを用いてその実行を制御、停止、または修正することができ、また、悪用されうる挙動のパターンを求めて同じコードを繰り返し実行することができる。
ホワイトボックス暗号化ソフトウェアは、このような文脈において実行するように設計される。暗号化関数は、ホワイトボックス攻撃の文脈を対象とするが、この暗号化関数は、従来の暗号(cipher)も実装しうるが、攻撃者がソフトウェアの動作方法を理解することを防止するために、従来とは多いに異なった方法で実装する。例えば、通常、鍵は、部分評価によってホワイトボックス暗号化ソフトウェアの残りの部分に埋め込まれるか、または、符号化される。さらに、暗号の入力および出力テキストは、通常、符号化されて、それにより、ホワイトボックス暗号化実装に攻撃を開始する際に、その暗号の従来の実装に関する攻撃者の知識がそれほど役には立たないようにする。
従来は、ユーザは、ホワイトボックスライブラリツールにアクセスするために用いられるAPI呼び出しも含むユーザ定義ソフトウェア内に組み込まれうるセキュリティパラメータを決定かつ指定することが求められていた。つまり、従来では、ホワイトボックス暗号化操作は、構築済みのホワイトボックス実装をソフトウェア内に含め、そのインターフェイスデータ(例えば、暗号化(encryption)では、インターフェイスデータは、通常、鍵、プレーンテキスト入力、およびサイファテキスト出力を含む)を、Cloakware TranscoderTMといった難読化および/または改ざん防止ツールを用いて任意選択的に保護することによってソフトウェアアプリケーションに投入されてきている。暗号化機能(functionality)を採用するソフトウェア、それを実装するソフトウェア、鍵(または、公開鍵暗号法の場合には複数の鍵)、テキスト入力、およびテキスト出力を互いに正しく接続するための責任は暗号化機能を利用するプログラマ(プログラマ/ユーザ)にある。
どのステップもプログラマ/ユーザの制御下にあるので、人間が完全なパフォーマンスを期待してしまうことから来るあらゆる問題がある。プログラマ/ユーザが成功すると、結果として得られるのは、意図した通りの機能である。プログラマ/ユーザがステップを飛ばすとまたはステップを間違って行うと、機能は、意図したものとは全体的にまたは微妙に異なりうる。微妙に異なる場合ははるかに危険である。全体的なエラーは通常テスト時に見つけられるが、微妙なエラーは見落とし易いからである。
したがって、ホワイトボックス暗号化実装の出現によってDRMコンテンツ配信システムをより実現可能としたが、それにも関わらず、この実装の、いわゆる、ペリクリプティック(peri-cryptic)(暗号化されていないテキストがホワイトボックス実装に入るまたは離れる)側面、および、インタークリプティック(inter-cryptic)(暗号化されたテキストが1つの暗号化形式から別の暗号化形式に移る)側面に大きな問題が残ることは明らかである。ホワイトボックス暗号または暗号化ハッシュ自体に加え、ホワイトボックス暗号または暗号化ハッシュがその中に駐在するソフトウェアの構築、かつ、システムが複数の暗号およびハッシュを採用する場合に、暗号化またはハッシュ化されたコンテンツが移動する情報パイプの「配管(plumbing)」を形成する様々な暗号化コンポーネント間の接続の構築を改善する必要があることを見出した。ソフトウェアのペリクリプティックおよびインタークリプティック部分は、従前は、知識が豊富なユーザによって詳細に手動で構築されなくてはならなかった。
ホワイトボックス暗号法を用いて保護付きソフトウェアアプリケーションを生成する、コンピュータによって実装される方法と、かかる方法を具現化するコンピュータプログラムプロダクトが提供される。かかる方法は、アプリケーションソースコードおよび抽象化されたホワイトボックス関数呼び出しを含む少なくとも1つの入力ソースファイルを受け取ることと、各抽象化されたホワイトボックス関数呼び出しに対する暗号化ドメインパラメータを含むパラメータ化ファイルを受け取ることとを含む。次に、各抽象化されたホワイトボックス関数呼び出しをその暗号化ドメインパラメータに従って定義するホワイトボックス呼び出し定義データが生成される。次に、変換済みソースファイルおよび変換済みホワイトボックス呼び出し定義データをそれぞれ生成するように入力ソースファイルおよびホワイトボックス呼び出し定義データに、ブロックまたは非対称暗号といった少なくとも1つのデータ変換が適用される。次に、ホワイトボックス呼び出し定義データおよび変換済みホワイトボックス呼び出し定義データに従って各ホワイトボックス関数呼び出しに対するインスタンス固有のデータを含むデータ初期設定が生成される。次に、変換済みソースファイル、変換済みホワイトボックス定義データ、およびデータ初期設定コードがコンパイルされ、実行可能ソフトウェアアプリケーションを提供するように結果として得られたコンパイル済みコードがホワイトボックスライブラリにリンクされる。ホワイトボックス呼び出し定義データは、ホワイトボックス実装アプリケーション・プロシージャル・インターフェイス(API)をアプリケーションソースコードに接続するコード、および、ホワイトボックス実装APIを別のホワイトボックス実装APIに、これらのAPIがやり取りをしなければならない場合に、接続するコードを自動に生成する。
この態様の実施形態では、ホワイトボックス呼び出し定義データは、ホワイトボックス呼び出し定義ファイル、および、各ホワイトボックス関数呼び出しに対して選択されるパラメータを指定するホワイトボックスメタデータを含むことができ、また、変換済みホワイトボックス呼び出し定義データに少なくとも1つのデータ変換を適用することは、変換済み弱いとボックス呼び出し定義ファイル、および、選択されたパラメータに対して転宅されるデータ変換を指定する変換メタデータを生成する。データ初期設定を生成することは、ホワイトボックスメタデータおよび変換メタデータに従ってデータ初期設定ファイルを生成することを含むことができる。
本発明の他の態様および特徴は、添付図面と共に本発明の具体的な実施形態の以下の説明を確認することにより当業者には明らかとなろう。
本発明の実施形態を、添付図面を参照しながらほんの一例として以下に説明する。
図1は、本発明の一実施形態によるホワイトボックス暗号法統合のための基本的な設計フロー図である。 図2は、本発明の一実施形態によるホワイトボックス暗号法のための拡張された設計フロー図である。 図3は、本発明の一実施形態による連鎖暗号化シナリオの図である。 図4は、本発明の一実施形態による、連鎖暗号化APIが使用される連鎖暗号化シナリオの図である。 図5は、本発明の一実施形態およびその操作を示す略図である。 図6は、本発明の一実施形態によるロバストな実装を構築するためのステップを示す図である。
ホワイトボックス暗号化機能を採用するアプリケーションのペリクリプティックおよびインタークリプティック部分を構築するステップを自動化できる方法およびシステムが必要であることは明らかであり、それにより、現行のエラーが発生しやすいそのようなシステムを構築する方法をより信頼のおける自動化方法によって置換できるようにする。これを達成するために、上記の自動化システムに適合するようにアプリケーションの通常のイントラクリプティック部分(ホワイトボックス操作を実際に行う部分)が従来よりも柔軟性があるようになった実施形態が開示される。
このようなシステムの利点は、手書きでアセンブリコードを書くのではなく、コードをコンパイルすることによって達成される利点に類似する。理論上は、有能なプログラマは、手書きのアセンブリコードでアプリケーションを書くことができるべきである。しかし、実際には、手書きのアセンブリコードは非常にエラーを発生しやすく、また、コンパイラは、低水準の非常に詳細なソフトウェア構築レジームをよりはるかに自動化されたものに置換することによって、アセンブリコードレベルでは達成することのなかった複雑さを有するソフトウェアシステムを可能にする。
本出願の1つの態様は、ホワイトボックス実装のペリクリプティックおよびインタークリプティック側面が抽象化されかつ自動化されるシステムおよび方法を提供し、それにより、そのユーザが、ペリクリプティックおよびインタークリプティックの手書きのコードのソフトウェアによって達成することが以前は困難または実現不可能であった複雑さのレベルでホワイトボックス暗号化実装の使用を実装することを可能にし、同時に、手書きのアセンブリコードをC++といった高水準言語のソースコードからコンパイルされたコードによって置換することによるさらに単純なプログラム利益と同様に、プログラマ/ユーザがホワイトボックス暗号法を作成することをはるかに簡単にすることによってホワイトボックス暗号法のより簡単な使用からも利益を得る。
この自動化の側面は、様々な形式の暗号化機能が表現される方法の単一化(unification)である。例えば、C++といったコンパイラ型言語では、加算されるのが2つの整数であろうと、2つの浮動小数点数であろうと、2つの複素数であろうと、同じ統語型式が加算に用いられる。言語およびそのコンパイラは、実装がコンパイラに構築される(整数と浮動小数点数の場合)か、または標準ライブラリの一部(複素数の場合)であるか否かに関係なく、加算を概念として抽象化し、この概念は、その概念が用いられる各文脈に対して適切に実装される。同様の単一化を、本明細書において、ホワイトボックス暗号化操作についても開示する。各暗号化操作がその独自の一意のインターフェイスを有しまたその独自の一意の表現様式を必要とするならば、自動化はほとんど不可能であり、適切な選択をする責任の大部分は、必然的にプログラマ/ユーザになくてはならない。インターフェイスおよび表現様式が単一化されたのならば、システムは、特定の暗号を捨象(abstract away)し、かつ、各文脈の必要性に自動的に対処することができる。
したがって、セキュリティに関するパラメータを、ホワイトボックスライブラリツールにアクセスするために用いられるAPI呼び出しを含むユーザ定義ソフトウェアから切り離す実施形態が開示される。これにより、ユーザ定義ソフトウェアを変更する必要なく単にパラメータを変更することによって、アプリケーションに適用される保護のタイプおよびセキュリティレベルを簡単に変更することができる。このことは、セキュリティ実装およびコードを変更することができる、または、保護の追加のツールおよび/またはレベルを利用することができるフィールドアップグレード可能機能を可能にする。ハッカーがセキュリティを破る場合、このようなシステムは、パラメータを変更してアプリケーションをリコンパイルすることによって、ハッカーに対して新しいおよび/または追加の難関を与えることによって対応できる。
現在好適な実施形態は、各アプリケーションに対して多数のセキュリティ手段が可能である多くの様々なセキュリティ実装の使用を可能にする。このことは、1つの実装に対して成功する攻撃が、ホワイトボックス暗号法を採用する所与のソフトウェアアプリケーションのすべてのまたは多くの実装に対して成功する攻撃とはならないということを確実にするために有益である。
一般に、開示する実施形態は、APIと、アプリケーションまたはファイルを暗号化する、難読化する、またはそうでなければ保護するために用いられるパラメータとを切り離すことを含む、ソフトウェアファイルにホワイトボックス暗号法を統合するための、コンピュータに実装される方法およびシステムを提供する。このような統合型開発スイートの特定の利点は、アプリケーション内で適用可能でありかつホワイトボックス暗号化実装によって理解されるデータ変換の使用を介した、暗号化アプリケーションと周辺のアプリケーションとの境界の保護である。
以下の記載において、説明の目的のために、本発明の十分な理解を提供するために多くの詳細を記載する。しかし、当業者であれば、これらの具体的な詳細は、本発明を実施するために必要ではないことは明らかであろう。他の場合では、周知の電気構造および回路を、本発明を曖昧としないためにブロック図型式で示す。例えば、本明細書に記載の本発明の実施形態がソフトウェアルーチン、ハードウェア回路、ファームウェア、またはこれらの組み合わせとして実装されるかどうかについては特定の記載はない。本発明の実施形態は、機械可読媒体(内部にコンピュータ可読プログラムコードが具現化されたコンピュータ可読媒体、プロセッサ可読媒体、またはコンピュータ使用可能媒体とも呼ばれる)内に記憶されたソフトウェアプロダクトとして提示されうる。機械可読媒体は、ディスケット、コンパクトディスク読み出し専用メモリ(CD−ROM)、メモリデバイス(揮発性または不揮発性)、または、同様のストレージ機構を含む、磁気、光学、または電気ストレージ媒体を含む任意の好適な有形媒体であってよい。機械可読媒体は、様々なセットの命令、コードシーケンス、コンフィグレーション情報、または他のデータを含んでよく、これらは、実行される場合に、プロセッサに本発明の一実施形態による方法におけるステップを行わせる。当業者であれば、記載の発明を実施するために必要な他の命令および演算も機械可読媒体上に記憶されうることは理解できよう。機械可読媒体から実行されるソフトウェアは回路と連動して記載のタスクを行わせうる。
本文書全体に亘って、用語「ホワイトボックス」は接頭辞として頻繁に用いて、「ホワイトボックス呼び出し」、「ホワイトボックスライブラリ」、「ホワイトボックス関数」等のように用語を作成する。そのような接頭辞として用いられる場合、用語「ホワイトボックス」は、「ホワイボックス攻撃者に対するセキュリティを与えるように設計された暗号化実装」の省略表現である。同様に、用語「ホワイトボックス暗号法」は、それ自体が「ホワイトボックス攻撃者に対するセキュリティを与えるように設計された暗号化実装」の省略表現である。明確にするために、「ホワイトボックス」の接頭辞は、物(item)自体を指すことはなく、これは記載の実施形態はソフトウェア環境において機能するからである。これらの実施形態およびユーザのアプリケーションは、攻撃者が容易に理解できるものであると考えると、つまり、これらの実施形態およびユーザのアプリケーションはホワイトボックスである。実際には、これらの用語は、単なる他の省略表現である。例えば、「ホワイトボックスライブラリ」は、ホワイトボックス攻撃者に対するセキュリティを与える暗号化関数の実装を含むライブラリ、または、よりやや簡潔には、ホワイトボックス暗号法を含むライブラリである(ここでは、したがって、いかに「ホワイトボックスライブラリ」が二重の省略表現(double shorthand))であるかが分かる)。「ホワイトボックス関数」とは、ホワイトボックスライブラリにおける関数の1つである。「ホワイトボックス関数呼び出し」または単に「ホワイトボックス呼び出し」とは、ホワイトボックス関数に対する呼び出しである。他の用語も同様に解釈されるべきである。
記載の実施形態は、ホワイトボックス暗号法をソフトウェア開発スイートに統合する。図1を参照すると、非常に高いレベルでは、本発明によるアプリケーションへのホワイトボックス暗号法の統合には、ユーザが、ユーザのアプリケーション全体に亘る暗号化機能と、クリティカルセキュリティパラメータのフローとについて関数およびロバスト性に関する幾つかの選択をすることが含まれる。符号100に示すように、ユーザは、抽象化された呼び出し(wbfunc(…)と示す)をホワイトボックスAPIに追加して所望の暗号化機能を実装し、さらに、ユーザのコード全体にコマンドを追加してクリティカルセキュリティパラメータに必要な保護を特定する。幾つかのホワイトボックスツールおよびライブラリを用いて(ステップ102)ロバストコード104が作成され、このロバストコードはコンパイルされてホワイトボックスライブラリ108にリンクされて(ステップ106)、安全な方法で暗号化操作を行いかつアプリケーションのデータフロー全体に亘ってクリティカルセキュリティパラメータを保護する実行可能ファイル109が作成される。
しかし、概念上は、このプロセスを、ユーザが最初にユーザのアプリケーションにおいて暗号化機能および鍵のフローについて最も基本的な選択をしてかつそれを実装し、次に、関数型パラメータ(functional parameter)をさらに絞り込み、最終的にロバスト性を追加するステップを行う進化として理解した方が簡単である。各段階において、アプリケーションをビルドしかつテストする能力(ability)があり、最終的には、ユーザはロバストアプリケーションを調整しかつ任意選択的に各ビルドをパーソナライズする。この拡張された設計フローは、図2に示され、また、スタブビルド(stub build)110、スムーズビルド(smooth build)112、およびロバストビルド(robust build)114を含む。スタブビルド110およびスムーズビルド112は任意選択的であり、また、広義においてのみ説明する。これらの実装は、当業者には明らかであるように設計上の選択であり、また、本明細書では本発明によるホワイトボックスアプリケーション開発フローの一実施形態を説明する目的のためだけに説明する。
スタブビルド110では、ユーザは、ホワイトボックス関数呼び出しを適切なホワイトボックス暗号法APIに追加して、対称暗号化、非対称暗号化、およびハッシュ法といった機能を追加して入力ソースファイル100を作成する。ユーザは、ホワイトボックススタブライブラリ118内に定義されるホワイトボックス呼び出しのスタブ実装に対してユーザのプログラムをコンパイルかつリンクして(ステップ116)、スタブ実行ファイル120を生成し、スタブ実行ファイルは次にテストされて(ステップ122)、鍵のフローにおける基本的なエラーは当然ながらコンパイルおよびリンクエラーがないかチェックされる。スタブライブラリ118内に実装されるスタブ暗号化関数は単純だが、一致するパラメータが両関数に渡されていない限り復号化および暗号化が互いの逆になり得ないような方法で構築される。例えば、動的鍵復号化は、元のメッセージを回収するためには動的鍵暗号化と同じ鍵を用いなければならない。これらの鍵が同じでなければ、符号化エラーによって、スタブ復号化は、スタブ暗号化の結果を適切に復号化して元のメッセージを生成する可能性は低い。
スムーズビルド112では、ユーザは、幾つかの最初の、機能に関する選択をして各呼び出しをパラメータ化し、これらの選択を詳述するホワイトボックスパラメータ化ファイル124を作成する。ユーザは、次に、コード生成ツールを適用して(ステップ126)行った選択を適用し、スムーズバージョンのホワイトボックスライブラリ130内に定義されるホワイトボックス呼び出しのスムーズ実装に対してユーザのプログラムをコンパイルかつリンクする(ステップ128)。スムーズバージョンのホワイトボックスライブラリ130とは、単に、真のホワイトボックスライブラリと同じAPIを実装するが、スムーズであるライブラリを指す。結果として得られるスムーズ実行ファイル132をテストして(ステップ134)、基本機能が正常に動いていることを確実にする。
ロバストビルド114では、ユーザは、ユーザの保護付きアプリケーションにおけるサイズ、速度、およびセキュリティのトレードオフに関する選択をする。ユーザは、以下に詳述するホワイトボックス暗号法ツールを適用し(ステップ136)、ロバストな変換済みコード138を生成する。ロバストな変換済みコード138は、次に、コンパイルされて、ホワイトボックスライブラリ144内のホワイトボックス呼び出しの安全な実装にリンクされて(ステップ140)、保護付き実行ファイル146が生成される。この保護付き実行ファイルは次にテストされて(ステップ147)、機能とセキュリティの両方を確実にする。ユーザは次に任意選択的に、より軽量のプロセスを用いて、個別化のためにデータの多くの多様なインスタンス149を生成する(ステップ148)。
ロバストビルドのプロセスおよびコンポーネントを、図5および図6を参照しながらより詳細に以下に説明する。図5はロバストビルドの簡易化した概観を示し、図6は以下に詳述する詳細な実装の一実施形態を示す。
図5の実施形態は、例えばソフトウェアアプリケーションファイルである保護付きファイルを生成するための3つのモジュール、すなわち、ホワイトボックスコード生成ツール(wbcodegen)150、データ変換エンジン(xcode)152、およびホワイトボックスデータ生成ツール(wbdatagen)154を含む。ホワイトボックス暗号法の文脈では、データ変換エンジン152は、暗号化操作と周辺のコードとの境界を保護するために用いられる。特に、データ変換エンジン152は、暗号化操作への入力および暗号化操作からの出力にデータ変換を適用するように用いられる。ユーザが、ホワイトボックスパラメータ化ファイル124を介して変換が必要であることを指定すると、wbcodegen150は、ユーザによって指定された情報を、データ変換エンジン152が理解できる形式、すなわち、データ変数の修飾子および関数プロトタイプにする。データ変換エンジン152は次に指定された変換を適用して、どの変換が選択されたのかに関する情報をwbdatagen154に渡す。
このことを達成するデータフローは、図5のハイレベルで示す。ホワイトボックスコード生成ツール150は、アプリケーションソースコードと抽象化されたホワイトボックス関数呼び出しを含む少なくとも1つの入力ソースファイル100(userCode)と、抽象化された各ホワイトボックス関数呼び出しに対する暗号化ドメインパラメータを含むパラメータ化ファイル124とを受信する。ホワイトボックスコード生成ツール150は、これらの入力を処理して、抽象化された各ホワイトボックス関数呼び出しをその暗号化ドメインパラメータに従ってかつデータ変換エンジン152によって理解される方法で定義するホワイトボックス呼び出し定義データ156(wb_glue.c)を生成する。データ変換エンジン152は次に1つ以上のデータ変換を入力ソースファイル100およびホワイトボックス呼び出し定義データ156に適用して、変換済みソースファイル160および変換済みホワイトボックス呼び出し定義データ158(wb.xwbm)を生成する。データ生成ツール154は、次に変換済みホワイトボックス呼び出し定義データ158に応じて各ホワイトボックス関数呼び出しに対するインスタンス固有データを含むデータ初期設定(initializations)162(wb−glue data)を生成する。データ初期設定162および変換済みソースファイル160は、次にネイティブコンパイラを用いてコンパイルされて、ホワイトボックスライブラリにリンクされうる。
ホワイトボックスAPI
ユーザは、ユーザのアプリケーションにおいて暗号法が必要であることを確認すると、ユーザが行うAPIへの各呼び出しについて2つの選択肢を有する。これらの選択肢は、ユーザのアプリケーションの基本的な鍵のフローを決定する。(1)行われるべき暗号化操作は何か? 可能な操作には、暗号化、復号化、署名、署名認証、ハッシュ法等が含まれる。(2)この呼び出しのための鍵はランタイムにおいてのみ利用可能であるのか、またはその前に利用可能となるのか? セッション鍵またはコンテンツ鍵といった鍵は、通常、動的に生成されるか、または、非対称復号化の結果として計算される。このような鍵を動的であると広く呼ぶことにする。その一方で、ビルド時間において既知である、または、オフラインサブスクリプション/更新プロセスを介して得ることのできる鍵は、固定鍵と呼ぶ。当然ながらすべての鍵を動的に取り扱うこともできるが、固定鍵として取り扱える場合には、セキュリティ上の優位点がある。
上述の決定がなされると、ユーザアプリケーションコードを書き込んでかかる選択に適したAPIを起動させることができる。入力ソースファイル100であるユーザアプリケーションは、非常に最小限のAPIを用いる、鍵スケジューリング、暗号化、復号化等の暗号化操作の起動を含むソースコード(例えばCまたはC++で表される)から構成される。サイファテキスト、プレーンテキスト、iv等といった鍵ユーザから提供されるデータは、パラメータとして、これらの起動に、関連する呼び出しを単一の暗号化ドメインにまとめるために用いられる数値定数IDパラメータと共に渡される。1つの好適な実施形態では、ユーザアプリケーションコードは、ホワイトボックスタイプとマクロを定義するインクルードファイル170:xc/xc_wb.hを含むことが必要とされる。すべての暗号化操作は、このインクルードファイル170からのマクロを使用して起動されることが可能である。好適には、ホワイトボックスインクルードファイル170(xc/xc_wb.h)は、あらゆる暗号タイプに対する暗号化操作のそれぞれに対して単一のマクロ定義を提供する。マクロは、パラメータとして、ユーザから供給されたパラメータの最小のセット(通常、プレーンテキスト/サイファテキストといったアプリケーションデータ)、(操作の暗号化ドメインを特定する)単一のIDパラメータ、およびオプションパラメータを受け取る。例えばブロック暗号の暗号化呼び出し(block cipher encrypt call)を以下に示す。なお、マクロ起動(XC_Fixed_Key_Block_Cipher_Encrypt)は非常に抽象化されており、また、暗号化操作のために必要な実際のアプリケーションデータしか指定しないことに留意されたい。
ホワイトボックスインクルードファイル170(xc/xc_wb.h)は、ユーザアプリケーションコードの観点からホワイトボックスAPI全体を定義する。このAPIは、アプリケーションコードにおける使用のために利用可能であるすべての抽象的な暗号化操作を定義する関数形式マクロの形式をとる。さらに、このインクルードファイル170は、こちらもマクロ定義の形式で、以下に示すホワイトボックスグルーファイルのコンテンツを記述する。以下の例示的なコードスニペットは、固定鍵、ブロック暗号の暗号化操作のための単一の抽象的なAPIのハイレベルの詳細を示す。
多くの場合、暗号化関数は単独では行われない。代わりに、アプリケーションは、通常は階層構造にある一連の鍵を含み、暗号化操作は連鎖状にされ、階層構造において最下位の鍵はコンテンツを保護するために用いられ、より重要な鍵は下位の鍵を保護するために用いられる。階層構造の最上位では、1つ以上の「ルーツ・オブ・トラスト(roots of trust)」鍵があり、それらの開示は他の鍵すべてを、保護されていない状態にすることになり、したがって、完全なセキュリティ侵害がもたらされる。
階層構造の単純な一例としては、コンテンツ鍵と呼ばれるランダム鍵を用いたAES暗号化を用いて保護される音楽ファイルといったコンテンツを有することである。コンテンツ鍵自体は、クライアント固有の公開鍵を用いたRSA暗号化を用いて保護される。その場合、ルーツ・オブ・トラストは、クライアントアプリケーションの一部である(しばしば固定の)RSA秘密鍵である。この階層構造は図3に示す。概して、1つの暗号化操作の出力が、後続の暗号化操作への入力の1つになる任意のシナリオは、連鎖暗号化(chained encryption)と呼ばれる。連鎖暗号化の別の頻出例はトランスクリプション(transcription)である。トランスクリプションには、1つのアルゴリズムおよび鍵を用いて一部のコンテンツを復号化し、その後に別のアルゴリズムおよび鍵を用いてその同じコンテンツを直ぐに再暗号化することが含まれる。トランスクリプションは、しばしば、互いにやり取りする2つのプログラム間の境界かまたはソフトウェアとハードウェアとの境界において行われる。
これは、連鎖暗号化操作を単一の操作として考えると明白なセキュリティ上の利点である。すなわち、1つの操作から次の操作へ渡される値は、2つの操作間の境界において保護されていない状態になるのとは対照的にうまく隠される。この値を操作間の境界において変換することも当然実現可能でありかつ保護を提供するが、連鎖操作の真の混合は、適用できるセキュリティ技術においてより大きい柔軟性を提供し、したがってより優れた全体的な保護を提供する。
本明細書に記載するホワイトボックスインフラストラクチャおよびAPIは、複数の連鎖暗号化シナリオをサポートするよう容易に拡張することができる。具体例を以下に示す。この例は、図3のクライアント側に対応し、RSAおよびAES復号化を単一の連鎖復号化に組み合わせるよう修正されている。図4はこの変更を示す。なお、復号化されたコンテンツ鍵は図面に登場していない。この例は例示に過ぎない。
ホワイトボックスパラメータ化
ユーザは、その鍵のフローの妥当性を確認すると、各ホワイトボックス暗号法関数呼び出しをさらにパラメータ化するために一連の関数に関する選択をしなければならない。これらの質問の多くは暗号に固有であるが、幾つかの一般的な質問例は次の通りである。(1)どのアルゴリズムが必要か? 大抵の場合、使用するアルゴリズムは関連のある標準によって指定される。(2)必要な鍵のサイズは何か? ここでは有効な選択はアルゴリズムに依存する。これらの決定は、ユーザによって提供されるホワイトボックスパラメータ化ファイル124内に保存され、ホワイトボックスパラメータ化ファイルは、次にユーザのソースコードと共に処理されて実行ファイルをビルドする。
暗号化操作の固有の側面についてユーザが選択をする(使用するアルゴリズムといった基本的なことから使用する鍵といった具体的なこと)主な機構は、ホワイトボックスパラメータ化ファイル124を介する。このファイルは、ユーザによって書き込まれ、ホワイトボックス関数への各呼び出しについて詳述する。一実施形態では、ホワイトボックスパラメータ化ファイル124の形式は、暗号化ドメインパラメータ名および暗号化ドメインパラメータ値から構成される行指向のテキストである。これらのパラメータ名/値の対(以下「暗号化ドメインパラメータ」または単に「パラメータ」と呼ぶ)は、個別のホワイトボックスパラメータ化レコードを作成するよう分類される。各レコードの始まりは、識別子(ID)パラメータの存在によって区切られ、次の識別子(またはエンド・オブ・ファイル)の発生において終了する。パラメータ化レコードの範囲において、任意の数の一意パラメータが列挙されてよい(任意のパラメータ名の重複はエラーである)。当業者であれば理解できるように、特定のパラメータが省略されてもまたデフォルト値を有してもよく、その一方で他のパラメータは必須でなければならない。いずれにせよ、個別のパラメータの範囲は、現在のパラメータ化レコードまでである。
IDパラメータの値を用いてホワイトボックス呼び出しを特定する。したがって、次のことが好適である。
1.所与の呼び出しがパラメータ化ファイル124内の所与のレコードに一貫してマッピングされるように、IDはリテラル整数定数である。
2.パラメータ化ファイル124内の所与のレコードが一意の呼び出しにマッピングされるように、各呼び出しには一意のIDが与えられる。この規則には次の例外があってもよい。
a.データを共有するように選択された呼び出しは同じIDが与えられなければならない。
b.他の暗号に固有の例外。
各IDについて、ホワイトボックスパラメータ化ファイル124はレコードを含み、このレコードは、かかるレコードに関連付けられた特定のパラメータが列挙され、1つのパラメータがファイルの1行に記載される。ホワイトボックスレコードのパラメータは、3つの広いカテゴリに分類することができる。
●カテゴリ化パラメータ。これらのパラメータは、ブロック暗号または非対称暗号、および、固定鍵対動的鍵といった、用いられるべき暗号化アルゴリズムのカテゴリを記述する。これらのパラメータは2つの目的を有する。第一に、これらのパラメータは、ユーザはレコードを見て対応するホワイトボックス呼び出しの挙動を正確に知ることができるという点でパラメータ化ファイルのレコードを自己充足型にする。第二に、これらのパラメータの仕様によってどのユーザ提供パラメータが期待されるのかを正確に決定されるので、これらのパラメータはエラーチェックを可能にする。
●関数型パラメータ(functional parameter)。これらのパラメータは、ラウンド数といった、用いられるべき暗号化アルゴリズムの特定の属性を記述し、ホワイトボックスAPIにパラメータまたはオプションとして渡される(これは自動的に行われるのでエンドユーザにはトランスペアレントである)。なお、アルゴリズムは関数型パラメータ(例えば、アルゴリズム=AES対アルゴリズム=DES)であって、カテゴリ化パラメータとは見なされない。
●ロバスト性パラメータ。これらのパラメータは、選択されたパラメータに対する変換といった、ホワイトボックス起動のロバスト性特徴に関する特定の決定を記述する。
最上位のカテゴリ化パラメータはFunctionTypeである。他の有効なカテゴリ化パラメータの他にまた関数型パラメータおよびロバスト性パラメータは、FunctionTypeに対して指定された値に依存する。以下の例は、ブロック暗号のための典型的なホワイトボックスパラメータ化エントリを示す。記載するパラメータの多くは暗号に固有であり、それらの意味はここには記載しない。
この時点で、ユーザは、幾つかのセキュリティに関する選択をしなければならない。可能な限り、ホワイトボックス暗号法関数に対する呼び出しへの入力および呼び出しからの出力は変換されるべきである。特にブロック暗号の場合、プレーンテキスト、サイファテキスト、(動的鍵関数用の)鍵、および(ECB以外のモード用の)初期化ベクトルは変換されるべきである。一例として、セキュリティが高くなる順番で利用可能な変換のセットは、次の通りである。
好適には、あらゆるデータ変換を入力および出力に用いることができる。ユーザは、ホワイトボックスパラメータ化ファイル124内に入力および出力のための論理変換形式を指定しうる。例えば、ユーザは、所与のidに対して、次のエントリ:PlainTransform blueを指定しうる。これは、所与のIDに対応する呼び出しのプレーンテキストが、「ブルー」論理変換形式を用いて変換されることを示す。すべての変換されるべき暗号入力および出力は、ホワイトボックスパラメータ化ファイル124内に適切なTransformエントリを有さなくてはならない。多くのホワイトボックス関数(最も注目すべきはホワイトボックスAES)は、幾つか異なる方法で実装されることが可能である。暗号化形式として知られるこれらの方法のそれぞれは、サイズ、速度、およびセキュリティ間で異なるトレードオフがなされる。ユーザは、ホワイトボックスパラメータ化ファイル124内に記載される各論理変換形式に対してマッピングされる変換形式を提供する責任がある。これは、通常、コンフィグファイルを介して行われるが、コマンドライン上を直接供給されてもよい。
上述したように、ホワイトボックス呼び出しとパラメータ化ファイルレコードとの接続(したがって、コードおよびデータを含むインスタンス固有セット)は、IDパラメータである。したがって、同じ関数への2つの呼び出しが、IDパラメータについて同じ値を与えられる場合、これらの呼び出しは、同じホワイトボックスパラメータ化ファイルレコードを参照し、最終的には同じホワイトボックスライブラリ呼び出しに帰着することになり、それによりその呼び出しに関連付けられたデータを共有する。換言すれば、2つのホワイトボックス呼び出しがデータを共有するためには、これらの2つのホワイトボックス呼び出しには同じIDが与えられることができる。なお、共有されたデータは、これらの2つの呼び出しが同じ抽象化されたAPIに対するものである場合、かつ、入力および出力へのデータ変換が同一である場合にのみ意味をなす。
ユーザが、ホワイトボックス暗号法呼び出しのデータを外部のどこに記憶すると選択しようとも、外部データを検索しそのデータを適切な形式にするために対応する呼び出しが追加されなければならない。例えば、固定鍵ブロック暗号の暗号化(fixed-key block cipher encrypt)例は、次の通りに向上しうる。
例示的な入力ソースファイルは次の通りである。
例示的なパラメータ化ファイル(wbinfo.wbp)は次の通りである。
ホワイトボックスコード生成
攻撃を阻止することの難しさの1つとしては、ホワイトボックス暗号化実装自体が鍵の代わりとなりうる点である。ホワイトボックスソフトウェア実装が部分評価によって鍵を埋め込み、復号化を実装する場合、そのアプリケーション全体を、復号化を行う鍵の代わりに用いることができる。つまり、どの暗号が実装されているかまた何が鍵であるのかを判断する代わりに、攻撃者は単にホワイトボックス復号化実装全体を抽出してそれを復号化に利用できてしまう。これは、ホワイトボックス暗号化を「スニッピングする(snipping)」または「コードリフティングする(code-lifting)」と言う。
そのような攻撃に対して防御する複雑さは、ホワイトボックス暗号法を使用するシステムのペリクリプティックおよびインタークリプティック側面を自動化するための利点の良い例を与える。例えば、ホワイトボックス暗号化実装は、データのアレイを使用する。「スニッピング」によって取り外すことが難しいこのようなアレイまたはテーブルを作るために、各テーブルを2つの部分に分割することができる。1つの部分は、ホワイトボックス実装以外のソフトウェア内のどこかにある実行可能コードのセグメントである。もう1つの部分は、コードセグメントの対応する部分の排他的論理和が取られると所望のテーブルをもたらす「xor」データを含む、同じサイズのデータテーブルである。これにより、ホワイトボックスコードは、必要なデータセグメントが存在する場合にのみ正しく実行するので、ホワイトボックスコードを盗む(lift)ことが困難となる。別の方法は、コードセグメントを、ホワイトボックス暗号化実装以外の他のアプリケーションデータによって置換し、それにより、ホワイトボックス実装以外のデータなしでは、内部のデータアレイは役に立たないようにする方法である。さらに別の方法では、データテーブルが、ホワイトボックス暗号法を使用するプログラム全体に亘る散在位置にアクセスするテーブルによって置換されうる。各データテーブルは、適切なデータ片が見つけられうるプログラムの残りの部分のコードまたはデータ全体に亘る多くの位置を指すポインタのテーブルによって置換される。つまり、元のテーブルはそれぞれ、所望の元のデータを含む位置を指すポインタのテーブルによって置換される。これらの方法は、実行可能なコードを編集し、元のテーブルを「xor」データと置換するかそうでなければテーブルを修正するために、ツール、および、アプリケーションの残りの部分のコンパイルされたバイナリコードへのアクセスを有する熟練プログラマが必要となる。ホワイトボックスコード生成ツール150は、このような方法を自動化し、かつ、「グルー」コードを生成して暗号化操作の境界における入力および出力が効果的に難読化されることを確実にする。
パラメータ化ファイル124が作成されると、ユーザは、パラメータ化ファイル124を構文解析し、ホワイトボックスライブラリへと適切な呼び出しをするホワイトボックス呼び出し定義ファイル172を生成するホワイトボックスコード生成ツール150を実行しなければならない。ホワイトボックスコード生成ツール150は、以下、wbcodegen150と呼ぶ。wbcodegen150は主に、ホワイトボックスパラメータ化ファイル124と共にユーザアプリケーションコード(特に、ホワイトボックス暗号化APIへの呼び出しを含むファイル)を処理し、また、データ変換エンジン152によって理解される変換修飾子を含むホワイトボックス呼び出し定義データ(本明細書ではホワイトボックス呼び出し定義または「グルー」ファイルとも呼ぶ)を生成することに対して責任がある。ホワイトボックス呼び出し定義データは、ユーザアプリケーションに使用される高度に抽象化されたAPIと、ホワイトボックスライブラリ内に与えられる低水準ホワイトボックスルーチンとの間をマッピングする「グルー」ルーチンの関数定義のセットを提供する。
wbcodegenツール150は、ユーザのソースコードにおけるホワイトボックスAPIの起動に基づいたホワイトボックスグルーコードの生成、および、ホワイトボックスパラメータ化ファイル124内に含まれる暗号化ドメインの記述に対して責任がある。ホワイトボックスグルーコードは、ユーザのソースコード内の高度に抽象化されたAPIと、ホワイトボックスライブラリ暗号化操作の実際の起動との間のシムとして機能し、また、ホワイトボックスパラメータ化への変更がある場合にユーザソースコードを修正する必要がないことを確実にする。wbcodegen150は、処理速度を向上するためにプリプロセッサの拡張部として設計されてもよい。好適には、wbcodegen150は、データ変換エンジン152とは完全に別個である。
好適には、wbcodegen150は、ユーザアプリケーションコードをいかようにも修正せず、また、wbcodegen150が生成するホワイトボックスグルーファイルは、最終アプリケーションへとコンパイルかつリンクされることを意図する別個のソースファイル内にある。したがって、wbcodegen150は、ホワイトボックスパラメータ化ファイル124の検証ツールとしても機能することができる(パラメータ名が合法であり、パラメータ値が有効であることを確認し、また、あるレコード内の指定されたパラメータの整合性チェックをする)。最後に、wbcodegen150は、ユーザのアプリケーションコード(例えば、ブロック暗号操作の非対称暗号を参照するIDパラメータの仕様)においてホワイトボックス操作に対する明示的および黙示的パラメータエラーの両方を含むエラーを検出するために用いられてもよい。
wbcodegen150は、入力として、パラメータ化ファイル124およびホワイトボックス暗号法呼び出しを含む入力ソースファイル100を受け取る。出力は、見出されたホワイトボックス暗号法のそれぞれに対する定義を含むホワイトボックス呼び出し定義ファイル172(userCode−glue.c)である。ツールはさらに、例えば「グルー」ルーチンの外部宣言(extern declarations)のセットである生成された関数のそれぞれに対するプロトタイプを含む、対応するホワイトボックスグルーヘッダ174または単にヘッダファイル(userCode−glue.h)を生成する。外部宣言は、IDと基本暗号化操作との組み合わせについて1つある。wbcodegen150はさらに、各ホワイトボックス呼び出しに対して行った選択に関するメタデータを保持する出力ホワイトボックスメタデータファイル176を生成する。このメタデータは、以下に説明するデータ生成ツール154(wbdatagen)に渡される。
ユーザは、抽象化されたホワイトボックスAPIの新しい起動でアプリケーションコードが更新されるか、または、ホワイトボックスパラメータ化ファイル124が修正されると常にwbcodegen150を再実行することに対して責任がある。
上述したように、wbcodegenツール150は、ホワイトボックスパラメータ化ファイル124と共にユーザのソースコードを処理すること、および、十分にパラメータ化された呼び出しへのユーザの抽象化されたホワイトボックスAPI起動を低水準ホワイトボックスライブラリルーチンに拡張することに対して責任がある。wbcodegenツール150は、パラメータを受け取りかつ構文解析する最高水準のPerlフロントエンド(またはドライバ)から構成されうる。Perlフロントエンドも、パラメータ化ファイルのコンテンツの妥当性を確認し、行指向のテキストコンテンツにおける統語的/意味論的エラーをチェックし、パラメータ化ファイルのコンテンツをwbcodegenバックエンドが許容可能な形式に変換する。wbcodegenバックエンドは、ユーザのソースコードを変換済みパラメータ化ファイルと共に処理することができる。
wbcodegenバックエンドが行わなくてはならないことの大部分は、マクロ展開に非常に似ている。抽象化されたホワイトボックスAPIの各起動は、IDパラメータが起動名の一部とされる「マングル(mangled)」形式に拡張される。各ホワイトボックスAPI起動のソース位置は、別個のメタデータファイルに記録される。一意のマングルされた名前(すなわち、添付のIDパラメータを有するホワイトボックスAPI名)の最初の起動によって、実際の下にあるホワイトボックスライブラリ関数を起動する適切な関数定義の生成がトリガされる。様々な形式のパラメータ整合性チェックも行うことができ、また、エラーは、コンパイル/リンク/実行時間の前にユーザアプリケーションおよびパラメータ化ファイル124の正確さを確実にするために放出される。
コマンドラインパラメータ/オプション構文解析は、Perlドライバによって行われることが可能である。Perlドライバは、パラメータ値にサニティチェックを行い、また、ホワイトボックスパラメータ化ファイルプリプロセッサ/検証ツール(図示せず)を任意選択的に起動させることができる。ドライバは、次に、各コマンドライン指定ソースファイルに対してwbcodegenバックエンドを起動することができる。このアプローチの1つの複雑さは、特定の状態情報が、wbcodegenバックエンドの起動間で持続しなければならない点である(具体的には、wbcodegenバックエンドは、一意のグルーコード関数定義を適切に生成することの他に重複する起動を警告できるように、どのホワイトボックス操作/IDの組み合わせが前に処理されたソースファイル内で既に見られているか把握する必要がある)。この問題を解決するために、wbcodegenドライバは、各バックエンド起動に渡されかつ任意のそのような状態情報を含むテンポラリファイルを開くよう設定されることが可能である。このテンポラリファイルの存続期間は、wbcodegen150の1つの起動であり、wbcodegen150が終了する前に取り外されることが可能である。したがって、このファイルは、ユーザに完全に不可視である。
ホワイトボックスパラメータ化ファイルのフォーマット化が比較的複雑であること(パラメータはないにも関わらずある文脈ではあると暗示される、すなわち、パラメータはデフォルト値を有する)によって、または、他のパラメータ値との組み合わせにおいて違法でありうる。結果としては、wbcodegen150による構文解析の前に、パラメータ化ファイル124の前処理が実装されうる。前処理ツールは、Perl内に、当該言語の強力な正規表現によって書き込むことができる。ホワイトボックスパラメータ化検証ツール(図示せず)は、デフォルト値を有するレコードを明示的に挿入することによって欠けているデフォルトパラメータを取り扱い、また、パラメータ値が合法であり、かつ、パラメータの組み合わせが一貫していることを確認するように含められうる。同時に、ホワイトボックスパラメータ化プリプロセッサは、自由形式テキストIDレコードを適切なマクロ起動に変換することができる。
典型的な使用シナリオには、複数の入力ソースファイル100と単一のホワイトボックスパラメータ化ファイル124のアプリケーションビルドが含まれ、したがって、(単一のホワイトボックスパラメータ化ファイル124と共にホワイトボックスAPIへの呼び出しを含むあらゆるソースファイルを、入力として、受け取る)wbcodegen150の1つの起動があることを暗示する。しかし、設計において、アプリケーションを、それぞれその独自のホワイトボックスパラメータ化ファイル124(またはすべてのモジュールに共通の単一ホワイトボックスパラメータ化ファイル124)を有する幾つかのモジュールに分割することと、これらのモジュールのそれぞれを対応するwbcodegen150の起動によって処理することを妨げるものは何もない。
1つのデベロッパがwbcodegen150を実行すると、他のデベロッパはそれを他のデベロッパのビルドの一部として再実行する必要がない。代わりに、デベロッパは、上述したような生成されたヘッダファイル174を含み、また、生成されたファイルをビルドスクリプトに追加することができる。この時点で、アプリケーションをコンパイルおよびリンクしたい人は誰でもネイティブコンパイルツールさえ持っていればよい。
ホワイトボックスデータ変換
コード生成ツール150が実行されると、ホワイトボックス呼び出しに対する入力および出力を保護するためにデータ変換を行うことが望ましい。図中、xcodeと示すデータ変換エンジン152は、この関数(本明細書では「トランスコーディング」とも言う)を入力ソースファイル100とホワイトボックス関数呼び出し定義を含むグルーコードに対して行う。Cloakware TranscoderTMといったデータ変換エンジン152を用いて、記載した実装において、データ変換を用いてホワイトボックス機能を提供する。このデータ変換の出力は、隠され(cloaked)または難読化された変換済みソースファイル180(userCode.cloaked.c)と、隠されまたは難読化された呼び出し定義ファイル182(userCode−glue.cloaked.c)と、外部変換メタデータを含むファイル184(グルーメタデータ)である。生成された変換メタデータファイル184は、ホワイトボックスグルー関数に対して選択されたパラメータのデータ変換選択を記述する。
ホワイトボックス暗号法実装は、アプリケーションデータについての変換(例えば、暗号化のためのプレーン、復号化のための暗号、加えて、必要に応じて鍵およびIV)は、ホワイトボックス呼び出しの範囲外で適用されていると想定し、また、これらの変換を初期ステップにおいて安全に取り除く。同様に、出力変数についての変換(例えば、暗号化のための暗号、復号化のためのプレーン)は、暗号化操作の最終ステップにおいて安全に適用され、データ変換エンジン152は、これらの変数におけるデータは変換されていると想定する。
データ変換エンジン152の機能は、本文書の範囲外であるが、概して、変数を難読化または隠すようにデータ変換を適用し、データに特に暗号化操作である数学操作を適用して、それにより、データが攻撃者に可視ではなくかつクリティカルアセットに損害を与える情報を明らかにしないように確実にすることであると理解される。データ変換エンジン152はさらに制御フロー変換を適用してアプリケーションのプログラムフローを偽装することもでき、それにより、攻撃者がアプリケーションの操作を静的または動的にトレースすることを非常に困難にしうる。データ変換エンジン152は、ソースコードを数学的に修正されたソースコードに変換するユーティリティと見なされうる。変換済みアプリケーションは、関数的には元のアプリケーションと同一であるが、リバースエンジニアリングおよび改ざん攻撃に対する耐性が高い。保護付きアプリケーションは、専用ハードウェアまたは追加のソフトウェアを必要とすることなくオープンコンピュータプラットフォーム上で信頼性が高く実行される。
データ変換エンジン152はさらに、ホワイトボックス暗号法をコード変換とリンクして、個別の技術だけの場合よりもはるかに安全である統合型および層状の保護を与える。ホワイトボックス暗号法は、その詳細も本記載の範囲外であるが、ハッカーが完全な詳細で暗号化操作を観察できる環境において、攻撃者が暗号化鍵を入手すること(または非対称「公開鍵」暗号法の場合には、秘密鍵を入手すること)、または、鍵の代用となりうる何かを入手することを阻止するような方法で標準暗号化アルゴリズムを実装する。ホワイトボックス暗号法は、RSAおよびAESといった暗号を実装して、暗号化操作時であっても、確実にクリティカル鍵データが露呈しないにする。
データ変換およびホワイトボックス暗号法実装の例は、以下の特許文書に見出すことができる。「TAMPER RESISTANT SOFTWARE ENCODING AND ANALYSIS」なる名称の米国特許公開第2004/0236955‐A1号、「SOFTWARE CONDITIONAL ACCESS SYSTEM」なる名称の米国特許公開第2005/0039025‐A1号、「METHOD AND SYSTEM FOR SECURE ACCESS」なる名称の米国特許第7,325,141号、「METHOD AND SYSTEM FOR SUSTAINABLE DIGITAL WATERMARKING」なる名称の米国特許公開第2005/0021966‐A1号、「SECURE METHOD AND SYSTEM FOR BIOMETRIC VERIFICATION」なる名称の米国特許公開第005/0138392‐A1号、「SECURE METHOD AND SYSTEM FOR COMPUTER PROTECTION」なる名称の米国特許公開第2004/0268322‐A1号、「SECURE METHOD AND SYSTEM FOR HANDLING AND DISTRIBUTING DIGITAL MEDIA」なる名称の米国特許公開第2005/0021989‐A1号、「SYSTEM AND METHOD FOR OBSCURING BIT-WISE AND TWO’S COMPLEMENT INTEGER COMPUTATIONS IN SOFTWARE」なる名称の米国特許公開第2005/0166191‐A1号、「SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK」なる名称の米国特許公開第2006/0140401‐A1号、「SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK」なる名称の米国特許公開第2004/0139340‐A1号、「SYSTEM AND METHOD OF FOILING BUFFER-OVERFLOW AND ALIEN-CODE ATTACKS」なる名称の米国特許公開第003/0172293‐A1号、「SYSTEM AND METHOD OF HIDING CRYPTOGRAPHIC PRIVATE KEYS」なる名称の米国特許公開第2005/0002532‐A1号、「TAMPER RESISTANT SOFTWARE-CONTROL FLOW ENCODING」なる名称の米国特許第6,779,114号、「TAMPER RESISTANT SOFTWARE ENCODING」なる名称の米国特許第6,594,761号、「TAMPER RESISTANT SOFTWARE ENCODING」なる名称の米国特許第6,842,862号、「TAMPER RESISTANT SOFTWARE-MASS DATA ENCODING」なる名称の米国特許第7,350,085号。これらの内容は、本明細書に参考としてその全体をすべて組み込むものとする。
ホワイトボックスデータ生成
ホワイトボックス暗号法関数に対して一意に識別された呼び出しのそれぞれは関連データを有し、この関連データは、かかる呼び出しに対してなされた関数およびセキュリティに関する選択に基づいて生成されなければならない。このデータを生成するホワイトボックスデータ生成ツール154は、以下、wbdatagen154と呼ぶ。
wbdatagenツール154は、ホワイトボックス呼び出し用のインスタンス固有データの初期設定を、ホワイトボックスライブラリにより必要とされる初期化されたテーブルデータの形式に生成することに対して責任がある。ユーザアプリケーション内のどこかで暗号化操作に使用される各暗号化ドメインは、このテーブルデータの生成を必要とする。初期化されたデータの正確な値は、ユーザのソースコードの任意の変換によって生成される、ユーザの暗号化データ(プレインテキスト/サイファテキスト等)の変換に依存する。例えば、異なる呼び出し(たとえ同じ関数型パラメータを有するものであっても)は、異なる鍵を使用し、その入力および出力に異なる変換を有する可能性が高い。さらに、ランダムな実装選択が、各ホワイトボックス呼び出しに対してツールチェーンによってなされる。wbdatagen154は、これらのすべての選択肢をカプセル化する実装固有のデータを生成する。
起動時、このデータは、鍵および変換にとらわれないホワイトボックスライブラリコード(xc_wb.xlib)に渡される。wbcodegen150が既にソースコードを分析して任意の必要情報をホワイトボックスメタデータ176に書き込んでいることが予想されるので、wbdatagen154はユーザアプリケーションコード自体を処理する必要はない。
wbdatagenツール154は、入力として、wbcodegen150によって生成されたホワイトボックスメタデータ176と、(グルーコードが変換された場合に)データ変換エンジン152によって作成された外部変換またはグルーメタデータ184とを受け取る。この情報は、wbdatagen154に、どの暗号化操作がユーザアプリケーションコード内に見出されたのか、これらの操作に対してホワイトボックスパラメータ化ファイル内のどの暗号化パラメータが指定されたのか、また、実パラメータとして渡されるユーザデータにどのデータ変換が適用されたのかを伝える。wbdatagenツール154は、ホワイトボックスデータを定義するコードと、任意選択的にエクスポートデータファイル186を生成する。
wbdatagen154の出力は、パラメータ化ファイル124内の各レコードに対応するデータを含むデータ初期設定ファイル188(userCode_data.c)である。データ初期設定ファイル188は、各ホワイトボックス呼び出しに対するインスタンス固有のデータをカプセル化するデータ変数のセット(「データ初期設定」)を含む。データ値はもこのファイルに記憶されるか、または、パラメータ化ファイル124内のユーザによって指定される1つ以上の出力ファイルに記憶される。生成されるべきデータがすべてエクスポートデータである場合、wbdatagen154は、実際に、コンパイルおよびリンク後に実行させることが可能である。wbdatagen154を、単独のデベロッパによって埋め込みデータ(および任意選択的にエクスポートデータ)を生成するように実行させることが可能である。この時点で、アプリケーションをコンパイルおよびリンクしたい人は誰でもネイティブコンパイルツールさえ持っていればよい。
ホワイトボックステーブルデータパラメータの定義がwbdatagen154によって生成されるが、グルーコードは、必要に応じて、これらの定義が実パラメータとしてホワイトボックスライブラリ呼び出しに渡されることを確実にしなければならない。特に留意されたいのは、例示的なホワイトボックスインクルードファイル170に関連して上述したサブインクルーデッドファイル(xc_wb_bc_fk_aes_tables.h.等)である。これらのファイルは、ホワイトボックス暗号化操作の各可能な変形に対する仮パラメータを詳細に定義し、また、ホワイトボックスグルーファイル172、174におけるテキストのバルクを生成するように用いられる。これらのサブインクルードファイルは、好適には、ホワイトボックスライブラリコード自体も生成するプログラムによって自動生成される。このようにして、完全形式の低水準ホワイトボックスAPIへの依存の多くが自動的に維持される。
wbdatagen154は、一般に、抽象化されたホワイトボックスAPIの新しい起動でアプリケーションコードが更新されるか、または、ホワイトボックスパラメータ化ファイル124が修正されるか、または、アプリケーションコードが変換されると常に再実行される。
変換済みコードのコンパイルおよびリンク
トランスコード済みまたは変換済みコードをコンパイルおよびリンクするために、ユーザアプリケーションコードをコンパイルするために用いられる同じネイティブツーリングコンパイラ190を用いて、変換済みソースファイル180(userCode.cloaked.c)と、変換済みホワイトボックス呼び出し定義ファイル182(userCode−glue.cloaked.c)と、データ初期設定ファイル(userCode−data.c)をコンパイルして、オブジェクトファイル192を生成し、また、リンカー194(xlink)によってホワイトボックスライブラリ196(xc_wb.lib)に対してリンクされて保護付き実行可能ファイル198を生成する。ホワイトボックスライブラリによって実装される暗号化操作および個々のサブルーチンの正確なAPIの詳細は、本明細書の範囲外である。
パフォーマンスのチューニング
変換済みコードのテスト中に、ユーザは、そのアプリケーションのパフォーマンスまたはサイズに不満足であることに気が付くかもしれない。あるいは、パフォーマンスは申し分なく、セキュリティを向上することができる領域があることを見出すかもしれない。この時点で、前のステップにおいてなされた機能またはセキュリティに関する選択はいずれも再検討されてよく、変更はパラメータ化ファイル124に対してのみ行えばよい。幾つかのパラメータを変更して異なるサイズ/速度/セキュリティのトレードオフをすることができる。例えば、
●暗号化形式を、より高いパフォーマンスの変形またはより高いセキュリティの変形に変更してよい。
●高パフォーマンスおよび小さいサイズのために、ラウンド数を(意味のある場合には)減らすか、または、高セキュリティのために増やしてよい。
●高セキュリティのためにデータシャッフリング機能をオンにするか、または、高パフォーマンスのためにオフにしてよい。
●サイズを減少するために異なるホワイトボックス呼び出しに同じIDを与えるか、または、セキュリティを向上するために同じIDを有していた呼び出しに違うIDを与えてよい。
●アプリケーションコードまたは生成されたコードの変換がそれに基づくデータ変換設定を、パフォーマンスを向上するために下げるか、または、セキュリティを向上するために上げてよい。ユーザはさらには、生成されたコードを全く変換しないことを選択してもよい。
記載したホワイトボックスツールチェーンは、ユーザのアプリケーションにおけるアンチデバッグおよびインテグリティ検証を使用するユーザの能力には影響を与えない。さらに、ユーザは、ユーザのホワイトボックス呼び出しに、例えば、そのような呼び出しの前後にアンチデバッグタイミングポイントを配置するか、または、ホワイトボックスライブラリを含むモジュールの署名およびインテグリティチェックを行うことによって、徹底的な防御を追加することができる。
多様なインスタンスの生成
セキュリティの観点から、アプリケーションの2つ以上のインスタンスを有することが有利であることが多い。アプリケーションの多様性(diversity)とは、幾つかの異なるが機能的には等しいバージョンのアプリケーションをユーザベースに分配するか、または、既知の脆弱性を軽減する若しくは攻撃が二度と発生しないようにフィールドされた(fielded)アプリケーションに頻繁に更新を行うこと(このような種類の「時間における多様性」を行う能力は更新可能性(renewability)として知られる)を意味しうる。
当然ながら、単に、各インスタンスに対して1回、上述したステップを数回実行することによってホワイトボックス暗号法を用いてアプリケーションの多様なインスタンスを作成することが可能である。しかし、このアプローチは、低速であることに加えて、各インスタンスを別個にテストすることを必要とし、このことは適用可能な多様性の量を大幅に制限する。異なるアプローチは、アプリケーションの大部分がインスタンス間で変らないようにし、また、多様性はデータによって決定されるようにすることであり、これは、多様なインスタンスはアプリケーションが既にコンパイルかつリンクされた後でも実際に作成できることを意味する。データに基づいた多様性は、大抵の場合、クライアントに関するデータを更新することができるチャネルが適所にあるので、更新可能性をもっと簡単にする。既にビルドされたアプリケーションに対して多様性データを生成するこのプロセスは、「個別化(individualization)」と呼ばれる。ホワイトボックス暗号法データの個別化は、エクスポートテーブルを用いることと、アプリケーションがビルドされた後にwbdatagen154を繰り返し実行することによって達成することができる。これを達成する1つの方法は、wbdatagen154を使用して、明白に異なる固定鍵をアプリケーションの各インスタンスに関連付けることである。wbdatagen154が実行される度にパラメータ化ファイル124を変更する必要なくこの使用を容易にするために、固定鍵はさらにコマンドライン上に指定されることも可能である。
要旨
上記セクションでは、ホワイトボックス暗号化機能をアプリケーションに統合するために必要なステップを記載した。これらのステップは、次の通りにまとめることができる。
●ユーザは、ホワイトボックス暗号APIへの呼び出しを、ユーザのアプリケーションに追加する。
●ユーザはホワイトボックスパラメータ化ファイルを作成して各呼び出しに対してレコードを追加する。
●ユーザはwbcodegenを実行して、次にxcodeが続き、次にwbdatagenが続いて、トランスコードされたビルド用のサポートコードおよびデータが生成される。
●ユーザは、ユーザのアプリケーションをコンパイルし、リンクし、テストする。
●ユーザは、サイズ、パフォーマンス、およびセキュリティに満足するまでステップを繰り返す。
●ユーザは、wbdatagenを繰り返し実行して、サポートデータの多様なインスタンスを作成する。
上述した本発明の実施形態は例示を目的とするに過ぎない。特定の実施形態を、本発明の範囲から逸脱することなく当業者によって変更、修正、および変化させることが可能である。本発明の範囲は添付の特許請求の範囲によってのみ定義される。

Claims (20)

  1. ホワイトボックス暗号法を用いて保護付きソフトウェアアプリケーションを生成する、コンピュータに実装される方法であって、
    アプリケーションソースコードおよび抽象化されたホワイトボックス関数呼び出しを含む少なくとも1つの入力ソースファイルを受け取ることと、
    各抽象化されたホワイトボックス関数呼び出しに対する暗号化ドメインパラメータを含むパラメータ化ファイルを受け取ることと、
    各抽象化されたホワイトボックス関数呼び出しをその暗号化ドメインパラメータに従って定義するホワイトボックス呼び出し定義データを生成することと、
    変換済みソースファイルおよび変換済みホワイトボックス呼び出し定義データをそれぞれ生成するように前記入力ソースファイルおよび前記ホワイトボックス呼び出し定義データに少なくとも1つのデータ変換を適用することと、
    前記ホワイトボックス呼び出し定義データおよび前記変換済みホワイトボックス呼び出し定義データに従って各ホワイトボックス関数呼び出しに対するインスタンス固有のデータを含むデータ初期設定を生成することと、
    を含む、方法。
  2. 前記変換済みソースファイル、前記変換済みホワイトボックス定義データ、および前記データ初期設定コードをコンパイルすることと、実行可能ソフトウェアアプリケーションを提供するように結果として得られたコンパイル済みコードをホワイトボックスライブラリにリンクすることと、をさらに含む、請求項1に記載の方法。
  3. 前記ホワイトボックス呼び出し定義データを生成することは、ホワイトボックス呼び出し定義ファイル、および、各ホワイトボックス関数呼び出しに対して選択されるパラメータを指定するホワイトボックスメタデータを生成することを含む、請求項1に記載の方法。
  4. 前記変換済みホワイトボックス呼び出し定義データに前記少なくとも1つのデータ変換を適用することは、変換済みホワイトボックス呼び出し定義ファイル、および、選択されたパラメータに対して選択されるデータ変換を指定する変換メタデータを生成する、請求項3に記載の方法。
  5. 前記データ初期設定を生成することは、前記ホワイトボックスメタデータおよび前記変換メタデータに従ってデータ初期設定ファイルを生成することを含む、請求項4に記載の方法。
  6. 前記ホワイトボックス呼び出し定義データを生成することは、
    データ変換エンジンによって理解される変換修飾子を含む少なくとも1つのホワイトボックス呼び出し定義ファイルを生成することと、
    前記暗号化ドメインパラメータおよび選択された前記変換を記述する少なくとも1つの変換メタデータファイルを生成することと、
    を含む、請求項1に記載の方法。
  7. 前記ホワイトボックス呼び出し定義データを生成することは、ホワイトボックス実装アプリケーション・プロシージャル・インターフェイス(API)を前記アプリケーションソースコードに接続するコード、および、ホワイトボックス実装APIを別のホワイトボックス実装APIに、これらのAPIがやり取りをしなければならない場合に、接続するコードを自動に生成する、請求項1に記載の方法。
  8. 前記ホワイトボックス関数呼び出しは、少なくとも1つの連鎖暗号化を呼び出す、請求項1に記載の方法。
  9. 前記少なくとも1つの連鎖暗号化は、単一の操作として行われる、請求項8に記載の方法。
  10. 前記実行可能ソフトウェアアプリケーションの多様なインスタンスを生成することをさらに含む、請求項2に記載の方法。
  11. 前記多様なインスタンスを生成することは、前記実行可能ソフトウェアアプリケーションの各インスタンスに明白に異なる固定鍵を関連付けることを含む、請求項10に記載の方法。
  12. 前記少なくとも1つのデータ変換は、ブロック暗号を含む、請求項1に記載の方法。
  13. 前記少なくとも1つのデータ変換は、非対称暗号を含む、請求項1に記載の方法。
  14. ホワイトボックス暗号化技術を用いてソフトウェアアプリケーションを生成する、コンピュータに実装される方法であって、
    アプリケーションソースコードおよび抽象化されたホワイトボックス関数呼び出しを含む少なくとも1つの入力ソースファイルを受け取ることと、
    各抽象化されたホワイトボックス関数呼び出しに対する暗号化ドメインパラメータを含むパラメータ化ファイルを受け取ることと、
    各抽象化されたホワイトボックス関数呼び出しをその暗号化ドメインパラメータに従って定義するホワイトボックス呼び出し定義ファイル、および、各ホワイトボックス関数呼び出しに対して選択されるパラメータを指定するホワイトボックスメタデータを生成することと、
    変換済みソースファイルを生成するように前記入力ソースファイルに少なくとも1つのデータ変換を適用することと、
    変換済みホワイトボックス呼び出し定義ファイル、および、選択されたパラメータに対して選択されるデータ変換を指定する変換メタデータを生成するように前記ホワイトボックス呼び出し定義ファイルに前記少なくとも1つのデータ変換を適用することと、
    前記ホワイトボックスメタデータおよび前記変換メタデータに従って各ホワイトボックス関数呼び出しに対するインスタンス固有のデータを含むデータ初期設定ファイルを生成することと、
    前記変換済みソースファイル、前記変換済みホワイトボックス定義ファイル、および前記データ初期設定ファイルをコンパイルし、実行可能ソフトウェアアプリケーションを提供するように結果として得られたコンパイル済みコードファイルをホワイトボックスライブラリにリンクすることと、
    を含む、方法。
  15. プロセッサによって実行された場合に、前記プロセッサにホワイトボックス暗号法を用いて保護付きソフトウェアアプリケーションを生成する方法を行わせるコンピュータ実行可能命令を記憶したコンピュータ可読媒体を含むコンピュータプログラムプロダクトであって、前記方法は、
    アプリケーションソースコードおよび抽象化されたホワイトボックス関数呼び出しを含む少なくとも1つの入力ソースファイルを受け取ることと、
    各抽象化されたホワイトボックス関数呼び出しに対する暗号化ドメインパラメータを含むパラメータ化ファイルを受け取ることと、
    各抽象化されたホワイトボックス関数呼び出しをその暗号化ドメインパラメータに従って定義するホワイトボックス呼び出し定義データを生成することと、
    変換済みソースファイルおよび変換済みホワイトボックス呼び出し定義データをそれぞれ生成するように前記入力ソースファイルおよび前記ホワイトボックス呼び出し定義データに少なくとも1つのデータ変換を適用することと、
    前記ホワイトボックス呼び出し定義データおよび前記変換済みホワイトボックス呼び出し定義データに従って各ホワイトボックス関数呼び出しに対するインスタンス固有のデータを含むデータ初期設定を生成することと、
    を含む、コンピュータプログラムプロダクト。
  16. 前記方法は、前記変換済みソースファイル、前記変換済みホワイトボックス定義データ、および前記データ初期設定コードをコンパイルすることと、実行可能ソフトウェアアプリケーションを提供するように結果として得られたコンパイル済みコードをホワイトボックスライブラリにリンクすることと、をさらに含む、請求項15に記載のコンピュータプログラムプロダクト。
  17. 前記ホワイトボックス呼び出し定義データを生成することは、ホワイトボックス呼び出し定義ファイル、および、各ホワイトボックス関数呼び出しに対して選択されるパラメータを指定するホワイトボックスメタデータを生成することを含む、請求項15に記載のコンピュータプログラムプロダクト。
  18. 前記変換済みホワイトボックス呼び出し定義データに前記少なくとも1つのデータ変換を適用することは、変換済みホワイトボックス呼び出し定義ファイル、および、選択されたパラメータに対して選択されるデータ変換を指定する変換メタデータを生成する、請求項17に記載のコンピュータプログラムプロダクト。
  19. 前記データ初期設定を生成することは、前記ホワイトボックスメタデータおよび前記変換メタデータに従ってデータ初期設定ファイルを生成することを含む、請求項18に記載のコンピュータプログラムプロダクト。
  20. 前記少なくとも1つのデータ変換は、ブロック暗号または非対称暗号の少なくとも1つを含む、請求項15に記載のコンピュータプログラムプロダクト。
JP2011509832A 2008-05-23 2009-05-25 ソフトウェアアプリケーションのホワイトボックス実装を生成するためのシステムおよび方法 Expired - Fee Related JP5460699B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US5569408P 2008-05-23 2008-05-23
US61/055,694 2008-05-23
PCT/CA2009/000755 WO2009140774A1 (en) 2008-05-23 2009-05-25 System and method for generating white-box implementations of software applications

Publications (2)

Publication Number Publication Date
JP2011521366A true JP2011521366A (ja) 2011-07-21
JP5460699B2 JP5460699B2 (ja) 2014-04-02

Family

ID=41339708

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011509832A Expired - Fee Related JP5460699B2 (ja) 2008-05-23 2009-05-25 ソフトウェアアプリケーションのホワイトボックス実装を生成するためのシステムおよび方法

Country Status (7)

Country Link
US (1) US8510726B2 (ja)
EP (1) EP2304552B1 (ja)
JP (1) JP5460699B2 (ja)
KR (1) KR101597251B1 (ja)
CN (1) CN102047220B (ja)
CA (1) CA2724793C (ja)
WO (1) WO2009140774A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021196611A (ja) * 2020-06-15 2021-12-27 スティーリアン インコーポレイテッド ホワイトボックス暗号を利用したデータの暗号化/復号化方法及び装置

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8533859B2 (en) * 2009-04-13 2013-09-10 Aventyn, Inc. System and method for software protection and secure software distribution
US20110061041A1 (en) * 2009-09-04 2011-03-10 International Business Machines Corporation Reliability and availability modeling of a software application
US20110167407A1 (en) * 2010-01-06 2011-07-07 Apple Inc. System and method for software data reference obfuscation
EP2369778B1 (en) * 2010-03-26 2018-08-15 Irdeto B.V. Personalized whitebox descramblers
EP2388730A1 (en) 2010-05-17 2011-11-23 Nagravision S.A. Method for generating software code
WO2012012861A1 (en) * 2010-07-29 2012-02-02 Irdeto Canada Corporation System and method for efficiently deploying massively diverse program instances to resist differential attacks
US8751807B2 (en) * 2011-06-23 2014-06-10 Azuki Systems Inc. Method and system for secure over-the-top live video delivery
US10333702B2 (en) * 2012-03-20 2019-06-25 Irdeto B.V. Updating key information
US9213841B2 (en) * 2012-07-24 2015-12-15 Google Inc. Method, manufacture, and apparatus for secure debug and crash logging of obfuscated libraries
US9584310B2 (en) * 2014-03-19 2017-02-28 Nxp B.V. Protecting a white-box implementation against attacks
US9654279B2 (en) * 2014-03-20 2017-05-16 Nxp B.V. Security module for secure function execution on untrusted platform
GB201405755D0 (en) 2014-03-31 2014-05-14 Irdeto Bv Optimizing and protecting software
WO2015149827A1 (en) 2014-03-31 2015-10-08 Irdeto B.V. Obfuscated performance of a predetermined function
US10546155B2 (en) 2014-03-31 2020-01-28 Irdeto B.V. Protecting an item of software
US9485226B2 (en) * 2014-04-28 2016-11-01 Nxp B.V. Method for including an implicit integrity or authenticity check into a white-box implementation
US9641337B2 (en) * 2014-04-28 2017-05-02 Nxp B.V. Interface compatible approach for gluing white-box implementation to surrounding program
US10412054B2 (en) 2014-06-24 2019-09-10 Nxp B.V. Method for introducing dependence of white-box implementation on a set of strings
CN105446711B (zh) * 2014-08-08 2018-10-02 国际商业机器公司 获取用于软件开发任务的上下文信息的方法及装置
KR101527329B1 (ko) * 2014-09-12 2015-06-09 삼성에스디에스 주식회사 데이터 암호화 장치 및 방법
SG10201405852QA (en) 2014-09-18 2016-04-28 Huawei Internat Pte Ltd Encryption function and decryption function generating method, encryption and decryption method and related apparatuses
CN106796624B (zh) 2014-09-26 2021-05-04 爱迪德技术有限公司 挑战响应方法、相关联的计算设备和相关联的计算机可读介质
GB201418815D0 (en) 2014-10-22 2014-12-03 Irdeto Bv Providing access to content
WO2016118216A2 (en) * 2014-11-06 2016-07-28 Intertrust Technologies Corporation Secure application distribution systems and methods
DE102014016548A1 (de) * 2014-11-10 2016-05-12 Giesecke & Devrient Gmbh Verfahren zum Testen und zum Härten von Softwareapplikationen
US10523419B2 (en) 2015-03-30 2019-12-31 Irdeto B.V. Data protection
GB201505553D0 (en) 2015-03-31 2015-05-13 Irdeto Bv Online advertisements
US9471285B1 (en) 2015-07-09 2016-10-18 Synopsys, Inc. Identifying software components in a software codebase
NL2015599B1 (en) * 2015-10-12 2017-05-02 Koninklijke Philips Nv A cryptographic device and an encoding device.
KR101790948B1 (ko) * 2015-10-26 2017-10-27 삼성에스디에스 주식회사 Drm 서비스 제공 장치 및 방법, drm 서비스를 이용한 콘텐츠 재생 장치 및 방법
US10171234B2 (en) * 2015-12-16 2019-01-01 Nxp B.V. Wide encoding of intermediate values within a white-box implementation
GB201522315D0 (en) * 2015-12-17 2016-02-03 Irdeto Bv Securing webpages, webapps and applications
US10523418B2 (en) 2016-06-03 2019-12-31 Cryptography Research, Inc. Providing access to a hardware resource based on a canary value
DE102016009259A1 (de) * 2016-07-29 2018-02-01 Giesecke+Devrient Mobile Security Gmbh Personalisierung eines Sicherheitselements
US10261763B2 (en) * 2016-12-13 2019-04-16 Palantir Technologies Inc. Extensible data transformation authoring and validation system
CN110268410A (zh) 2016-12-15 2019-09-20 爱迪德技术有限公司 软件完整性验证
GB201703864D0 (en) 2017-03-10 2017-04-26 Irdeto Bv Secured system operation
CN109213670A (zh) * 2017-06-30 2019-01-15 中兴通讯股份有限公司 实现白盒otn硬件设备的方法及装置、存储介质
EP3665566A4 (en) * 2017-08-08 2021-04-21 Crypto4A Technologies Inc. SECURE MACHINE-EXECUTED CODE DEPLOYMENT AND EXECUTION PROCESS AND SYSTEM
DE102017214591A1 (de) * 2017-08-22 2019-02-28 Robert Bosch Gmbh Verfahren und Vorrichtung zum Schützen eines Gerätes
DE102017214584A1 (de) * 2017-08-22 2019-02-28 Robert Bosch Gmbh Verfahren und Vorrichtung zum Schützen eines Gerätes
CN108111622B (zh) * 2017-12-29 2021-10-29 北京梆梆安全科技有限公司 一种下载白盒库文件的方法、装置及系统
CN108134673B (zh) * 2017-12-29 2021-08-13 北京梆梆安全科技有限公司 一种生成白盒库文件的方法及装置
CN108183796A (zh) * 2017-12-29 2018-06-19 北京梆梆安全科技有限公司 利用白盒库文件和白盒密钥文件进行加解密的方法及装置
CN107947917A (zh) * 2017-12-29 2018-04-20 北京梆梆安全科技有限公司 一种生成白盒密钥的方法及装置
CN107968793B (zh) * 2017-12-29 2021-03-19 北京梆梆安全科技有限公司 一种下载白盒密钥的方法、装置及存储介质
CN108416224B (zh) * 2018-02-13 2019-10-15 北京梆梆安全科技有限公司 一种数据加解密方法及装置
US11362824B2 (en) * 2018-05-25 2022-06-14 Intertrust Technologies Corporation Content management systems and methods using proxy reencryption
US10797868B2 (en) 2018-05-31 2020-10-06 Irdeto B.V. Shared secret establishment
EP3608806A1 (en) * 2018-08-09 2020-02-12 Gemalto Sa Anti cloning for white box protected data
GB201821248D0 (en) 2018-12-27 2019-02-13 Palantir Technologies Inc Data pipeline management system and method
GB2612217B (en) * 2019-08-01 2024-04-03 Sky Cp Ltd Secure media delivery
GB2586065B (en) * 2019-08-01 2023-02-15 Sky Cp Ltd Secure media delivery
US11263316B2 (en) 2019-08-20 2022-03-01 Irdeto B.V. Securing software routines
US11409843B2 (en) 2019-10-10 2022-08-09 Nxp B.V. Method for protecting a software program from copying
CN110855667B (zh) * 2019-11-14 2023-04-07 宁夏吉虎科技有限公司 一种区块链加密方法、装置及系统
CN112395563A (zh) * 2020-11-30 2021-02-23 广州市都享信息科技有限公司 软件产品加密的方法、装置、存储介质及处理器
EP4053722B1 (en) 2021-03-01 2023-11-29 Irdeto B.V. Secured computer code and systems, methods, and storage media for creating the secured computer code from original computer code
DE112022001853T5 (de) * 2021-05-31 2024-01-25 Cummins Inc. Verbesserte kryptographische systeme und verfahren
EP4339835A1 (en) 2022-09-16 2024-03-20 Irdeto B.V. Machine learning model protection

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11353168A (ja) * 1998-06-10 1999-12-24 Nippon Telegr & Teleph Corp <Ntt> インタフェースマッチング方法およびインタフェースマッチングプログラムを記録した記録媒体
JP2001134337A (ja) * 1999-08-05 2001-05-18 Canon Inc 暗号解読コンパイラ
JP2003280754A (ja) * 2002-03-25 2003-10-02 Nec Corp 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム
JP2003337629A (ja) * 2002-05-18 2003-11-28 Mitsuko Miyaji プログラム難読化方法及び装置
JP2004038966A (ja) * 2002-06-28 2004-02-05 Microsoft Corp セキュアな変数データ保護を提供するセキュアで不明瞭なタイプライブラリ
JP2006504206A (ja) * 2002-10-28 2006-02-02 松下電器産業株式会社 再生可能な不正防止機能セキュリティシステムのための自動生成された暗号関数
JP2007087127A (ja) * 2005-09-22 2007-04-05 Open Stream Inc データ生成プログラム、該プログラムを記憶した記憶媒体、オープンソースソフトウェア開発環境統合プログラム、該プログラムを記憶した記憶媒体

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
CA2327911A1 (en) * 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
CA2350029A1 (en) * 2001-06-08 2002-12-08 Cloakware Corporation Sustainable digital watermarking via tamper-resistant software
US7769165B2 (en) * 2005-10-14 2010-08-03 Microsoft Corporation Semi-public white-box cipher
WO2008059420A2 (en) * 2006-11-17 2008-05-22 Koninklijke Philips Electronics N.V. Cryptographic method for a white-box implementation
EP2104987A2 (en) * 2007-01-11 2009-09-30 Koninklijke Philips Electronics N.V. Tracing copies of an implementation
WO2009034504A2 (en) 2007-09-13 2009-03-19 Koninklijke Philips Electronics N.V. Cryptographic processing of content
US8165286B2 (en) * 2008-04-02 2012-04-24 Apple Inc. Combination white box/black box cryptographic processes and apparatus

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11353168A (ja) * 1998-06-10 1999-12-24 Nippon Telegr & Teleph Corp <Ntt> インタフェースマッチング方法およびインタフェースマッチングプログラムを記録した記録媒体
JP2001134337A (ja) * 1999-08-05 2001-05-18 Canon Inc 暗号解読コンパイラ
JP2003280754A (ja) * 2002-03-25 2003-10-02 Nec Corp 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム
JP2003337629A (ja) * 2002-05-18 2003-11-28 Mitsuko Miyaji プログラム難読化方法及び装置
JP2004038966A (ja) * 2002-06-28 2004-02-05 Microsoft Corp セキュアな変数データ保護を提供するセキュアで不明瞭なタイプライブラリ
JP2006504206A (ja) * 2002-10-28 2006-02-02 松下電器産業株式会社 再生可能な不正防止機能セキュリティシステムのための自動生成された暗号関数
JP2007087127A (ja) * 2005-09-22 2007-04-05 Open Stream Inc データ生成プログラム、該プログラムを記憶した記憶媒体、オープンソースソフトウェア開発環境統合プログラム、該プログラムを記憶した記憶媒体

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021196611A (ja) * 2020-06-15 2021-12-27 スティーリアン インコーポレイテッド ホワイトボックス暗号を利用したデータの暗号化/復号化方法及び装置
JP7046424B2 (ja) 2020-06-15 2022-04-04 スティーリアン インコーポレイテッド ホワイトボックス暗号を利用したデータの暗号化/復号化方法及び装置

Also Published As

Publication number Publication date
EP2304552A1 (en) 2011-04-06
JP5460699B2 (ja) 2014-04-02
US20110067012A1 (en) 2011-03-17
CA2724793C (en) 2018-01-02
CA2724793A1 (en) 2009-11-26
KR20110031426A (ko) 2011-03-28
EP2304552B1 (en) 2019-11-06
WO2009140774A1 (en) 2009-11-26
US8510726B2 (en) 2013-08-13
CN102047220A (zh) 2011-05-04
CN102047220B (zh) 2014-12-17
KR101597251B1 (ko) 2016-02-24
EP2304552A4 (en) 2013-01-02

Similar Documents

Publication Publication Date Title
JP5460699B2 (ja) ソフトウェアアプリケーションのホワイトボックス実装を生成するためのシステムおよび方法
US10185837B2 (en) System and method for encapsulating and enabling protection through diverse variations in software libraries
US7254586B2 (en) Secure and opaque type library providing secure data protection of variables
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
US10713339B2 (en) Build system with plugins for encryption of application components
US7549147B2 (en) Security framework for protecting rights in computer software
JP5990654B2 (ja) アプリケーションコード難読化装置及びその方法
US8205096B2 (en) Software license embedded in shell code
EP3127034A1 (en) Software protection
US20170024230A1 (en) Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine
Arzt et al. Towards secure integration of cryptographic software
KR20150122149A (ko) 컴파일러 기반 난독화 기법
CN101288083A (zh) 程序可执行映像加密
Vaughan Auraconf: a unified approach to authorization and confidentiality
KR100348027B1 (ko) 운영체제와 컴파일러가 연계된 프로그램 변경방지 시스템및 그 방법
EP3398103B1 (en) A build system with plugins for encryption of application components
Wilhoite Code Obfuscation: methods and practicality within automation
KR20070074935A (ko) 모바일 컨텐츠의 불법 복제 방지를 위한 컨텐츠 검증 방법
Grandy et al. Object oriented verification kernels for secure Java applications
Valdez Protecting executable software
Arthur et al. Debugging

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110117

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130814

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131106

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131126

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131224

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140114

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees