(57)【要約】【課題】コードとして表された秘密情報が漏洩するリスクを低減する。【解決手段】記憶部１１は、複数の変数が定義された第１のコード２１を記憶する。生成部１２は、第１のコード２１内から何れかの変数を参照するオペランドを検出し、検出されたオペランドの変数名を第２のコード２２内において何れの変数の変数名としても使用されていない識別子に置換した第２のコード２２を生成する。また、生成部１２は、当該識別子が何れの変数に対応するかを示す対応情報２３を生成する。【選択図】図１
2014029610.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行するコード処理方法であって、
複数の変数が定義された第１のコード内から、演算のオペランドであって前記複数の変数の何れかを参照するオペランドを検出し、
前記第１のコードから変換された第２のコードであって、検出された前記オペランドの変数名を当該第２のコード内において前記複数の変数の何れの変数名としても使用されていない識別子に置換した第２のコードを生成し、また、前記識別子が前記複数の変数の何れに対応するかを示す対応情報を生成する、
コード処理方法。
【請求項２】
前記第２のコードに基づいて電子回路が製造された後、前記電子回路が備えるメモリに前記対応情報に応じた制御データを書き込む、請求項１記載のコード処理方法。
【請求項３】
前記電子回路は、前記演算に対応する演算回路と、前記複数の変数に対応する複数の信号のうち前記演算回路に入力される信号を選択する選択回路とを含んでおり、
前記制御データは、前記選択回路を制御するためのデータである、
請求項２記載のコード処理方法。
【請求項４】
前記第１のコードには複数の関数が定義されており、前記オペランドに加えて、前記第１のコード内から前記複数の関数の何れかを呼び出す関数呼出文を検出し、
前記第２のコードの生成では、検出された前記関数呼出文の関数名を前記第２のコード内において前記複数の関数の何れの関数名としても使用されておらず前記識別子と異なる他の識別子に置換し、
前記対応情報は、前記他の識別子が前記複数の関数の何れに対応するかを更に示す、
請求項１乃至３の何れか一項に記載のコード処理方法。
【請求項５】
前記複数の変数をグループ分けし、
前記第２のコードおよび前記対応情報に加えて、前記識別子が何れのグループに対応するかを示すグループ情報を生成する、
請求項１乃至４の何れか一項に記載のコード処理方法。
【請求項６】
前記第１のコード内から前記オペランドに加えて他のオペランドを検出し、
前記第２のコードの生成では、前記オペランドと前記他のオペランドとが同一の変数を参照する場合であっても、検出された前記他のオペランドの変数名を前記識別子と異なる他の識別子に置換することを許容する、
請求項１乃至５の何れか一項に記載のコード処理方法。
【請求項７】
生成された前記対応情報を、前記第２のコードに基づいて電子回路を製造する製造者に提供しない秘密情報として記憶装置に保存する、請求項１乃至６の何れか一項に記載のコード処理方法。
【請求項８】
コンピュータが実行するコード処理方法であって、
複数の関数が定義された第１のコード内から、前記複数の関数の何れかを呼び出す関数呼出文を検出し、
前記第１のコードから変換された第２のコードであって、検出された前記関数呼出文の関数名を当該第２のコード内において前記複数の関数の何れの関数名としても使用されていない識別子に置換した第２のコードを生成し、また、前記識別子が前記複数の関数の何れに対応するかを示す対応情報を生成する、
コード処理方法。
【請求項９】
複数の変数が定義された第１のコードを記憶する記憶部と、
前記第１のコード内から演算のオペランドであって前記複数の変数の何れかを参照するオペランドを検出し、前記第１のコードから変換された第２のコードであって検出された前記オペランドの変数名を当該第２のコード内において前記複数の変数の何れの変数名としても使用されていない識別子に置換した第２のコードを生成し、また、前記識別子が前記複数の変数の何れに対応するかを示す対応情報を生成する生成部と、
を有する情報処理装置。
【請求項１０】
コンピュータに、
複数の変数が定義された第１のコード内から、演算のオペランドであって前記複数の変数の何れかを参照するオペランドを検出し、
前記第１のコードから変換された第２のコードであって、検出された前記オペランドの変数名を当該第２のコード内において前記複数の変数の何れの変数名としても使用されていない識別子に置換した第２のコードを生成し、また、前記識別子が前記複数の変数の何れに対応するかを示す対応情報を生成する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコード処理方法、情報処理装置およびプログラムに関する。
【背景技術】
【０００２】
現在、集積回路（ＩＣ：Integrated Circuit）などの電子回路を設計するとき、Ｃ言語やＣ＋＋言語といった人間が理解容易な高級言語（プログラミング言語）を使用することがある。例えば、高位合成（または、動作合成）として、高級言語で記述された動作記述であるソースコードからハードウェア記述言語（ＨＤＬ：Hardware Description Language）で記述されたＲＴＬ（Register Transfer Level）モデルを生成する。そして、論理合成として、生成されたＲＴＬモデルからネットリストなどの回路データを生成する。
【０００３】
高位合成を利用することで、データ処理をソフトウェアで実現するために作成しておいたソースコードや、ハードウェアの専門知識をもたないソフトウェア技術者が作成したソースコードを利用して、電子回路を製造することが可能となる。ただし、ハードウェアを意識せずに作成されたソースコードからそのまま自動的に回路データを生成すると、動作速度や回路規模の点から非効率な電子回路が製造されてしまう可能性がある。この場合、高位合成を意識してソースコードを修正することで、動作速度や回路規模を改善し得る。ユーザがハードウェアベンダに電子回路の製造を依頼する場合には、ハードウェアベンダ側で最適化作業を行えるようにソースコードを渡すことが考えられる。
【０００４】
なお、計算機システム毎に異なった符号化規則を割り当て、実行させたい計算機システムに対応する符号化規則に従ってプログラムを符号化することで、他の計算機システムでは当該プログラムを実行できないようにした機密保護方法が提案されている。また、ソースコードを暗号化してユーザに提供し、ユーザがもつコンパイラによってソースコードを復号してからコンパイルし実行形式ファイルを生成するプログラム提供方法が提案されている。また、ＲＯＭ（Read Only Memory）に記憶されたソースプログラムに含まれる命令を変換テーブルに従って変換し、ＣＰＵ（Central Processing Unit）は変換後のソースプログラムをアセンブルして実行するプログラム変換方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭６１−１９０６３０号公報
【特許文献２】特開平２−７３４２８号公報
【特許文献３】特開２００２−７３１９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、電子回路の製造をハードウェアベンダに依頼する場合、電子回路の動作を記述したコードをハードウェアベンダに渡すことがある。しかし、コードに記述されたデータ処理の手順が、そのコードを作成したユーザにとってノウハウとして保護すべき秘密情報である場合がある。例えば、画像処理のための電子回路をハードウェアベンダに製造してもらうときであっても、画像処理のアルゴリズムをノウハウとして秘匿しておきたい場合が考えられる。その場合に、コードをそのままハードウェアベンダに渡してしまうと、コードとして表された秘密情報が漏洩してしまうおそれがあるという問題がある。
【０００７】
秘密情報の漏洩を抑制する技術の１つとして、コードの難読化がある。コードの難読化では、例えば、コードに記載された変数名を、変数の意味を推測し難いような他の変数名（ランダムな記号列など）に変換する。また、例えば、コードに記載された関数名を、関数の意味を推測し難いような他の関数名（ランダムな記号列など）に変換する。
【０００８】
しかし、コードを難読化しても、どのデータに対してどのような演算が行われるのかというデータと演算の関係が依然としてコードの中で表現されている。よって、データ処理の手順が秘密情報である場合には、難読化されたコードが解析されることで秘密情報が漏洩してしまうリスクが残る。例えば、単に変数名を変換しても、難読化したコードにおいて変数の定義と変数の参照とが関連付けられているため、その変数に格納されたデータがどのような演算に利用されているかがコードから読み取られてしまう。
【０００９】
一側面では、本発明は、コードとして表された秘密情報が漏洩するリスクを低減できるコード処理方法、情報処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
一側面では、コンピュータが実行するコード処理方法が提供される。このコード処理方法では、複数の変数が定義された第１のコード内から、演算のオペランドであって複数の変数の何れかを参照するオペランドを検出する。第１のコードから変換された第２のコードであって、検出されたオペランドの変数名を当該第２のコード内において複数の変数の何れの変数名としても使用されていない識別子に置換した第２のコードを生成し、また、識別子が複数の変数の何れに対応するかを示す対応情報を生成する。
【００１１】
また、一側面では、コンピュータが実行するコード処理方法が提供される。このコード処理方法では、複数の関数が定義された第１のコード内から、複数の関数の何れかを呼び出す関数呼出文を検出する。第１のコードから変換された第２のコードであって、検出された関数呼出文の関数名を当該第２のコード内において複数の関数の何れの関数名としても使用されていない識別子に置換した第２のコードを生成し、また、識別子が複数の関数の何れに対応するかを示す対応情報を生成する。
【００１２】
また、一側面では、記憶部と生成部とを有する情報処理装置が提供される。
また、一側面では、コンピュータに処理を実行させるプログラムが提供される。
【発明の効果】
【００１３】
一側面では、コードとして表された秘密情報が漏洩するリスクを低減できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】端末装置のハードウェア例を示すブロック図である。
【図４】ソースコードの例を示す図である。
【図５】電子回路の第１の例を示すブロック図である。
【図６】変換されたソースコードの例を示す図である。
【図７】配列テーブルの例を示す図である。
【図８】グループテーブルの例を示す図である。
【図９】端末装置の機能例を示すブロック図である。
【図１０】ハードウェア部品製造の手順例を示すフローチャートである。
【図１１】ソースコード秘匿化の手順例を示すフローチャートである。
【図１２】電子回路の第２の例を示すブロック図である。
【図１３】電子回路の第３の例を示すブロック図である。
【図１４】電子回路の第４の例を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。第１の実施の形態の情報処理装置１０は、コード（例えば、高級言語で記述されたソースコード）を変換する。情報処理装置１０は、ユーザによって操作される端末装置としてのクライアントコンピュータでもよいし、端末装置からアクセスされるサーバコンピュータでもよい。
【００１６】
情報処理装置１０は、記憶部１１と生成部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性の記憶装置でもよい。生成部１２は、例えば、プロセッサである。「プロセッサ」は、ＣＰＵやＤＳＰ（Digital Signal Processor）でもよく、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路でもよく、複数のプロセッサの集合であってもよい。プロセッサは、例えば、メモリ（記憶部１１でもよい）に記憶されたプログラムを実行する。
【００１７】
記憶部１１は、第１のコード２１，２１ａを記憶する。第１のコード２１，２１ａは、例えば、ユーザがＣ言語やＣ＋＋言語などの高級言語で作成したソースコードである。第１のコード２１には、複数の変数が定義されており、演算のオペランドであってそれら複数の変数の何れかを参照するオペランドが記載されている。演算には、四則演算や論理演算や比較演算などが含まれ得る。オペランドは、関数に渡す引数でもよい。第１のコード２１ａには、複数の関数が定義されており、それら複数の関数の何れかを呼び出す関数呼出文が記載されている。関数は、サブルーチンやメソッドと呼ばれるものでもよい。
【００１８】
生成部１２は、第１のコード２１を第２のコード２２に変換する。このとき、生成部１２は、第１のコード２１内から演算のオペランドを検出し、検出したオペランドに記載されている変数名を、第２のコード２２内において何れの変数の変数名としても使用されていない識別子に置換する。例えば、第２のコード２２内で２つの変数を定義するために変数名ｘ，ｙが使用されているとき、オペランドの変数名が何れの変数名とも異なる識別子Ａ［０］に置換される。これにより、第２のコード２２では、定義された変数と演算との対応が不明となる。なお、第２のコード２２内で各変数を定義するための変数名は、第１のコード２１と同じでもよいし異なってもよい。また、生成部１２は、識別子が複数の変数の何れに対応するかを示す対応情報２３を生成する。例えば、対応情報２３は、識別子Ａ［０］が変数名ｘを置換したものであることを示す。
【００１９】
また、生成部１２は、第１のコード２１ａを第２のコード２２ａに変換する。このとき、生成部１２は、第１のコード２１ａ内から関数呼出文を検出し、検出した関数呼出文に記載されている関数名を、第２のコード２２ａ内において何れの関数の関数名としても使用されていない識別子に置換する。例えば、第２のコード２２ａ内で２つの関数を定義するために関数名ｆ，ｇが使用されているとき、関数呼出文の関数名が何れの関数名とも異なる識別子Ａ［１］に置換される。これにより、第２のコード２２ａでは、定義された関数と関数呼出との対応が不明となる。なお、第２のコード２２ａ内で各関数を定義するための関数名は、第１のコード２１ａと同じでもよいし異なってもよい。また、生成部１２は、識別子が複数の関数の何れに対応するかを示す対応情報２３ａを生成する。例えば、対応情報２３ａは、識別子Ａ［１］が関数名ｆを置換したものであることを示す。
【００２０】
生成された第２のコード２２は、例えば、電子回路を製造するハードウェアベンダに提供される。これにより、第２のコード２２が示すデータ処理を実現するための電子回路が製造される。ただし、第２のコード２２では、少なくとも１つの演算について、どの変数のデータが参照されるかというデータと演算の関係が不明になっている。このため、製造される電子回路は、例えば、複数の変数に対応する複数の信号のうち何れかの信号を選択して演算回路に入力できるような選択回路を備える。生成された対応情報２３は、例えば、ハードウェアベンダに提供されずに秘密情報として保管される。第２のコード２２から電子回路が製造されると、例えば、対応情報２３に応じた制御データが電子回路のメモリに書き込まれる。この制御データは、例えば、選択回路を制御するものである。
【００２１】
第２のコード２２と同様に、生成された第２のコード２２ａは、例えば、電子回路を製造するハードウェアベンダに提供される。また、生成された対応情報２３ａは、例えば、ハードウェアベンダに提供されずに秘密情報として保管される。
【００２２】
なお、上記では、生成部１２が変数名の置換と関数名の置換の両方の機能を備えることとしたが、何れか一方の機能のみ備えるようにしてもよい。また、生成部１２は、１つの第１のコードに対して変数名の置換と関数名の置換の両方を実行してもよい。その場合、生成する対応情報を、変数名と置換した識別子が何れの変数に対応するかと、関数名と置換した識別子が何れの関数に対応するかの両方を示すようにしてもよい。
【００２３】
ここで、情報処理装置１０が第１のコード２１を難読化した場合、難読化されたコードでは依然として変数の定義で使用される変数名とその変数の参照で使用される変数名とが一致している。同様に、情報処理装置１０が第１のコード２１ａを難読化した場合、難読化されたコードでは依然として関数の定義で使用される関数名と関数呼出で使用される関数名とが一致している。このため、難読化を行っただけでは、どのデータに対してどのような演算が行われるかというデータと演算の関係がコードから読み取られてしまう。
【００２４】
これに対し、第１の実施の形態の情報処理装置１０によれば、第１のコード２１，２１ａが第２のコード２２，２２ａに変換され、また、第２のコード２２，２２ａとは別に対応情報２３，２３ａが生成される。第２のコード２２，２２ａではループ・分岐などの制御構造や演算内容が表現されているため、第２のコード２２，２２ａから電子回路を製造することが可能である。一方、第２のコード２２，２２ａをハードウェアベンダに提供しても、対応情報２３，２３ａを秘密情報として保管することで、第１のコード２１，２１ａに含まれる秘密情報がハードウェアベンダに漏洩するリスクを低減できる。
【００２５】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、ネットワーク３１、データベースサーバ３２、ＲＯＭライタ３３、端末装置３４，１００および製造装置３５を含む。
【００２６】
データベースサーバ３２、ＲＯＭライタ３３および端末装置１００は、ユーザ企業に設置されている。端末装置３４および製造装置３５は、ハードウェアベンダに設置されている。ハードウェアベンダは、ユーザ企業から依頼を受けてハードウェア部品２００を製造する。ユーザ企業は、ハードウェアベンダに製造してもらったハードウェア部品２００を使用する。例えば、ユーザ企業は、ハードウェア部品２００にプロセッサなどの他のハードウェア部品を接続して自社内で使用する。または、ユーザ企業は、ハードウェア部品２００を組み込んだ電子機器（例えば、プリンタなど）を製造して出荷する。ただし、ユーザ企業は、部品ではなく完成品の製造をハードウェアベンダに依頼してもよい。
【００２７】
端末装置１００は、ユーザが操作するクライアントコンピュータである。端末装置１００は、ハードウェア部品２００に搭載される電子回路の動作を示すソースコードを編集する。ソースコードは、Ｃ言語やＣ＋＋言語などの高級言語で記述されている。このソースコードは、電子回路を意識して作成されていなくてもよく、データ処理をソフトウェアで実現するために作成されたものを流用してもよい。端末装置１００は、元のソースコードから、ハードウェアベンダに提供する外部情報（元のソースコードから変換されたソースコードを含む）とハードウェアベンダに提供せずに秘密に管理する秘密情報を生成する。なお、外部情報と秘密情報の生成は、端末装置１００ではなく、端末装置１００から社内ネットワークを介してアクセスされるサーバコンピュータが実行してもよい。
【００２８】
ネットワーク３１は、ユーザ企業の社内ネットワーク（例えば、ＬＡＮ（Local Area Network））とハードウェアベンダの社内ネットワークとを結ぶ広域ネットワークである。ネットワーク３１を介してユーザ企業からハードウェアベンダに、ハードウェア部品２００を製造するための情報（外部情報）が送信される。ただし、外部情報は、可搬記録媒体のようなネットワーク３１以外の媒体を利用して渡すようにしてもよい。
【００２９】
データベースサーバ３２は、データをＨＤＤなどの不揮発性の記憶媒体に保存するサーバコンピュータである。データベースサーバ３２は、ユーザ企業の社内ネットワークを介して端末装置１００から秘密情報を受信し、ユーザ企業の外部に流出しないように秘密情報を保管する。また、データベースサーバ３２は、端末装置１００からのアクセスに応じて、保管している秘密情報を端末装置１００に送信する。ただし、秘密情報はデータベースサーバ３２でなく端末装置１００に保管するようにしてもよい。
【００３０】
ＲＯＭライタ３３は、端末装置１００に接続されており、不揮発性メモリにデータを書き込む電子機器である。ＲＯＭライタ３３は、ハードウェアベンダから受け取ったハードウェア部品２００を使用可能な状態にするために、ハードウェア部品２００が備えるメモリに秘密情報に応じた制御データを書き込む。ただし、ハードウェア部品２００が備えるメモリがＲＡＭなどの揮発性メモリである場合、ＲＯＭライタ３３を利用せず、ハードウェア部品２００に接続されるプロセッサが起動時に制御データを書き込めばよい。その場合、例えば、制御データはハードウェア部品２００が搭載される電子機器に保存される。また、ＲＯＭライタ３３は、端末装置１００と異なる装置に接続されていてもよい。
【００３１】
端末装置３４は、ハードウェアベンダのユーザが操作するクライアントコンピュータである。端末装置３４は、ユーザ企業から受け取った外部情報に基づいて、実装設計用の回路データを生成する。このとき、端末装置３４のユーザは、外部情報に含まれるソースコードを編集して最適化する。電子回路を意識して作成されていないソースコードを最適化することで、製造される電子回路の動作速度や回路規模が改善される。端末装置３４は、高位合成ツールや論理合成ツールを使用して、最適化されたソースコードから回路データを生成する。なお、回路データの生成は、端末装置３４ではなく、端末装置３４から社内ネットワークを介してアクセスされるサーバコンピュータが実行してもよい。
【００３２】
製造装置３５は、端末装置３４が生成した回路データに基づいてハードウェア部品２００を製造する。ハードウェア部品２００は、例えば、プリント基板上に集積回路などの電子回路を実装したものである。電子回路は、例えば、ＡＳＩＣやＦＰＧＡとして製造される。電子回路は、製造後にユーザ企業が制御データを書き込むことができるメモリを備える。メモリは、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）などの不揮発性メモリでもよいし、ＲＡＭなどの揮発性メモリでもよい。
【００３３】
図３は、端末装置のハードウェア例を示すブロック図である。端末装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６、通信インタフェース１０７およびインタフェース１０８を有する。上記ユニットは、端末装置１００内でバス１０９に接続されている。データベースサーバ３２や端末装置３４も、端末装置１００と同様のハードウェアにより実現できる。
【００３４】
ＣＰＵ１０１は、プログラムの命令を実行する演算器を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ１０２にロードしてプログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、端末装置１００は複数のプロセッサを備えてもよく、複数のプロセッサまたはプロセッサコアを用いて並列処理を行ってもよい。また、２以上のプロセッサの集合、ＦＰＧＡやＡＳＩＣなどの専用回路、２以上の専用回路の集合、プロセッサと専用回路の組み合わせなどを「プロセッサ」と呼んでもよい。
【００３５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやプログラムから参照されるデータを一時的に記憶する揮発性メモリである。なお、端末装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個の揮発性メモリを備えてもよい。
【００３６】
ＨＤＤ１０３は、ＯＳ（Operating System）やファームウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムおよびデータを記憶する不揮発性の記憶装置である。なお、端末装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数個の不揮発性の記憶装置を備えてもよい。
【００３７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、端末装置１００に接続されたディスプレイ４１に画像を出力する。ディスプレイ４１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３８】
入力信号処理部１０５は、端末装置１００に接続された入力デバイス４２から入力信号を取得し、ＣＰＵ１０１に通知する。入力デバイス４２としては、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００３９】
ディスクドライブ１０６は、記録媒体４３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体４３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、ＣＰＵ１０１からの命令に従って、記録媒体４３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４０】
通信インタフェース１０７は、ネットワークを介してデータベースサーバ３２や端末装置３４と通信を行う。通信インタフェース１０７は、ケーブルが接続される有線インタフェースでもよいし、無線通信を行う無線インタフェースであってもよい。
【００４１】
インタフェース１０８には、ＲＯＭライタ３３が接続される。インタフェース１０８は、ＣＰＵ１０１からの命令に従ってＲＯＭライタ３３に制御データを送信する。
ただし、端末装置１００はディスクドライブ１０６を備えなくてもよく、他の端末装置からアクセスされる場合には画像信号処理部１０４や入力信号処理部１０５を備えなくてもよい。また、ディスプレイ４１や入力デバイス４２は、端末装置１００の筐体と一体に形成されてもよい。なお、ＲＡＭ１０２またはＨＤＤ１０３は第１の実施の形態の記憶部１１の一例であり、ＣＰＵ１０１は第１の実施の形態の生成部１２の一例である。
【００４２】
図４は、ソースコードの例を示す図である。ソースコード１１１は、端末装置１００において変換される前のオリジナルのソースコードである。ソースコード１１１は、第１の実施の形態の第１のコード２１，２１ａの一例である。
【００４３】
ソースコード１１１には、複数の変数と複数の関数が定義されている。図４の例では、入力データが代入される２つの変数と演算結果が代入される１つの変数とが定義されている。前者の２つは整数型（ｉｎｔ型）の変数であり、ソースコード１１１では変数名ａｐｐｌｅ，ｂａｎａｎａが使用されている。後者は整数型の変数であり、ソースコード１１１では変数名ｏｕｔが使用されている。また、図４の例では、２つの関数が定義されている。２つの関数はそれぞれ整数型の引数を１つ受け取って整数型の戻り値を返すものであり、ソースコード１１１では関数名ｂｕｙ，ｓｅｌｌが使用されている。
【００４４】
そして、図４の例では、以下のようなプログラムの制御構造が記述されている。まず、変数名ａｐｐｌｅの変数の値（第１の入力データ）と変数名ｂａｎａｎａの変数の値（第２の入力データ）とが比較されて、前者が後者より大きいか判断される。比較結果が真（ｔｒｕｅ）であれば、変数名ｂａｎａｎａの変数の値を実引数として用いて、関数名ｂｕｙの関数が呼び出される。比較結果が偽（ｆａｌｓｅ）であれば、変数名ｂａｎａｎａの変数の値を実引数として用いて、関数名ｓｅｌｌの関数が呼び出される。
【００４５】
図５は、電子回路の第１の例を示すブロック図である。もしユーザ企業がハードウェアベンダに図４に示したソースコード１１１をそのまま渡した場合、ハードウェアベンダは図５に示すような電子回路を製造するものと予想される。この第１の電子回路は、比較回路２１１、関数に対応する演算回路２１２，２１３およびマルチプレクサ２１４を含む。
【００４６】
比較回路２１１は、第１の入力信号（ｉｎ［０］）と第２の入力信号（ｉｎ［１］）とを比較し、前者の値が後者の値より大きい場合は真＝１を出力し、それ以外の場合は偽＝０を出力する。演算回路２１２は、第２の入力信号を受け取って関数名ｂｕｙの関数で定義された演算を行う。演算回路２１３は、第２の入力信号を受け取って関数名ｓｅｌｌの関数で定義された演算を行う。マルチプレクサ２１４は、出力信号（ｏｕｔ）として、比較回路２１１が真＝１を出力したときは演算回路２１２の演算結果を選択し、比較回路２１１が偽＝０を出力したときは演算回路２１３の演算結果を選択する。
【００４７】
このように、ソースコード１１１から、ソースコード１１１が示すデータ処理を実現する電子回路を製造することが可能である。しかし、図４に示したソースコード１１１からは、第１の入力データが比較演算の第１の参照オペランドとして使用され、第２の入力データが比較演算の第２の参照オペランドとして使用されることが明確に読み取れる。また、図４に示したソースコード１１１からは、第１の入力データが、関数名ｂｕｙ，ｓｅｌｌの引数として使用されることが明確に読み取れる。もし、どのデータに対してどのような演算を行うかというデータと演算の関係が秘匿したい知識（ノウハウ）である場合には、ソースコード１１１をハードウェアベンダに渡すことでノウハウが漏洩してしまう。
【００４８】
そこで、端末装置１００は、データと演算の関係が不明になるようにソースコード１１１を変換してハードウェアベンダに提供する。ただし、変換されたソースコードからは、プロセッサに実行させるオブジェクトコードを生成することはできない。
【００４９】
図６は、変換されたソースコードの例を示す図である。ソースコード１１２は、端末装置１００において変換された後のハードウェアベンダに提供されるソースコードである。ソースコード１１２は、第１の実施の形態の第２のコード２２，２２ａの一例である。
【００５０】
ソースコード１１２には、ソースコード１１１と同じ複数の変数と複数の関数が定義されている。図６の例では、３つの変数を定義するため、ソースコード１１１と同じ変数名ａｐｐｌｅ，ｂａｎａｎａ，ｏｕｔが使用され、２つの関数を定義するため、ソースコード１１１と同じ関数名ｂｕｙ，ｓｅｌｌが使用されている。ただし、ソースコード１１１をソースコード１１２に変換する際、難読化を行って変数名や関数名を変えてもよい。
【００５１】
一方、ソースコード１１２では、変数や関数を参照する文に、ソースコード１１２で定義された変数名や関数名が記載されない。すなわち、演算の参照オペランド（関数呼出で指定される引数を含む）として記載されていた変数名がダミーの識別子に置換される。図６の例では、比較演算の参照オペランドとして記載されていた変数名ａｐｐｌｅ，ｂａｎａｎａが識別子ｘ［０］，ｘ［１］に置換され、関数呼出の引数として記載されていた変数名ｂａｎａｎａが識別子ｘ［２］に置換されている。また、関数呼出文に記載されていた関数名がダミーの識別子に置換される。図６の例では、関数呼出文に記載されていた関数名ｂｕｙ，ｓｅｌｌが、ダミーの識別子ｘ［３］，ｘ［４］に置換されている。
【００５２】
変数や関数を参照する文に記載された変数名や関数名がダミーの識別子に置換されることで、ソースコード１１２からはデータと演算との関係を読み取ることができなくなる。図６の例では、比較演算は、第１の入力データの方が第２の入力データより大きいことを判定しているのか、第２の入力データの方が第１の入力データより大きいことを判定しているのか、不明である。また、図６の例では、関数呼出の引数として、第１の入力データと第２の入力データの何れを指定しているのか不明である。また、図６の例では、各関数呼出文において２つの関数の何れが呼び出されているのか不明である。
【００５３】
このように、ソースコード１１１をソースコード１１２に変換すると、データと演算の対応関係の情報が失われる一方、実行され得る演算の種類やプログラムの制御構造の情報は失われない。図６の例では、比較回路や２つの関数に対応する２つの演算回路を含み、比較回路の出力に応じて出力信号を選択するような電子回路を製造すべきことが、ソースコード１１２から読み取れる。なお、図６の例では、全ての参照オペランドの変数名や全ての関数呼出文の関数名をダミーの識別子に置換しているが、一部の変数名や関数名のみ置換してもよい。例えば、ソースコード１１１の記述の中で重要なノウハウを含む記述の範囲をユーザが指定したとき、その範囲内にある変数名や関数名のみ置換してもよい。また、ユーザが置換対象の変数や関数を指定するようにしてもよい。
【００５４】
図７は、配列テーブルの例を示す図である。配列テーブル１１３は、ソースコード１１１をソースコード１１２に変換するときに端末装置１００が生成する。配列テーブル１１３は、ハードウェアベンダに提供しない秘密情報としてデータベースサーバ３２に保存される。配列テーブル１１３には、識別子とオリジナル名の項目が含まれる。
【００５５】
識別子の項目には、変数名または関数名に代えてソースコード１１２に記載されたダミーの識別子が登録される。例えば、複数の識別子は配列として表現され、その場合には配列の添字のみで各識別子を特定することができる。オリジナル名の項目には、ダミーの識別子に置換する前の元の変数名または関数名が登録される。図７に示すように、同じ変数または関数を参照する２以上の文がソースコード１１１に含まれるとき、１つの変数名または関数名に対して異なる２以上のダミーの識別子を割り当ててよい。図７の例では、ダミーの識別子ｘ［１］，ｘ［２］は共に変数名ｂａｎａｎａに対応している。
【００５６】
図８は、グループテーブルの例を示す図である。グループテーブル１１４は、ソースコード１１１をソースコード１１２に変換するときに端末装置１００が生成する。グループテーブル１１４は、ソースコード１１２と併せてハードウェアベンダに提供される。グループテーブル１１４には、型、識別子およびオリジナル名の項目が含まれる。
【００５７】
型の項目には、変数の型または関数の型が登録される。関数の型は、戻り値の型と引数の型の組み合わせであり、何れの変数の型とも異なる。識別子の項目には、型が同じ変数について使用されたダミーの識別子の集合、または、型が同じ関数について使用されたダミーの識別子の集合が登録される。オリジナル名の項目には、型が同じ変数の変数名の集合、または、型が同じ関数の関数名の集合が登録される。
【００５８】
このように、グループテーブル１１４では、変数や関数が型に応じてグループ分けされ、グループ毎にダミーの識別子の集合と変数名または関数名の集合とが対応付けられる。図４のソースコード１１１が図６のソースコード１１２に変換される場合、ダミーの識別子ｘ［０］，ｘ［１］，ｘ［２］と変数名ａｐｐｌｅ，ｂａｎａｎａとが対応付けられ、ダミーの識別子ｘ［３］，ｘ［４］と関数名ｂｕｙ，ｓｅｌｌとが対応付けられる。
【００５９】
これにより、ハードウェアベンダは、各ダミーの識別子に対応する変数名または関数名の候補を絞り込むことができる。ハードウェアベンダは、例えば、グループテーブル１１４に基づいて、変数名の集合に対応する信号の集合の中から何れかの信号を選択する選択回路（マルチプレクサなど）を実装する。また、ハードウェアベンダは、例えば、グループテーブル１１４に基づいて、関数名の集合に対応する演算回路の集合が出力する信号の中から何れかの信号を選択する選択回路を実装する。各選択回路が何れの信号を選択するかは、配列テーブル１１３から生成される制御データに従って制御されることになる。
【００６０】
図９は、端末装置の機能例を示すブロック図である。端末装置１００は、設計情報記憶部１１０、ソースコード編集部１２０、ソースコード変換部１３０、設計情報送信部１４０および制御データ生成部１５０を有する。設計情報記憶部１１０は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現される。ソースコード編集部１２０、ソースコード変換部１３０、設計情報送信部１４０および制御データ生成部１５０は、例えば、ソフトウェアのモジュールとして実現される。
【００６１】
設計情報記憶部１１０は、ソースコード１１１（変換前）、ソースコード１１２（変換後）、配列テーブル１１３およびグループテーブル１１４を記憶する。ソースコード編集部１２０は、入力デバイス４２を通じてユーザ入力を受け付け、ユーザ入力に応じて設計情報記憶部１１０に記憶されたソースコード１１１を編集する。ソースコード変換部１３０は、設計情報記憶部１１０に記憶されたソースコード１１１を解析する。そして、ソースコード変換部１３０は、ソースコード１１１からソースコード１１２と配列テーブル１１３とグループテーブル１１４を生成し、設計情報記憶部１１０に格納する。
【００６２】
設計情報送信部１４０は、ソースコード１１２とグループテーブル１１４を、外部情報としてネットワーク３１を介してハードウェアベンダに送信する。または、設計情報送信部１４０は、ソースコード１１２とグループテーブル１１４をハードウェアベンダに渡す可搬記録媒体に書き込む。また、設計情報送信部１４０は、配列テーブル１１３を秘密情報としてデータベースサーバ３２に送信する。制御データ生成部１５０は、ハードウェア部品２００が製造されると、データベースサーバ３２から配列テーブル１１３を取得し、ハードウェア部品２００を制御するための制御データを配列テーブル１１３から生成する。そして、制御データ生成部１５０は、制御データをＲＯＭライタ３３に送る。
【００６３】
ただし、ハードウェア部品２００が製造される前に、制御データ生成部１５０が制御データを生成してもよい。その場合、データベースサーバ３２には、配列テーブル１１３に代えてまたは配列テーブル１１３と共に、生成された制御データを秘密情報として保存しておいてもよい。また、前述のように、ハードウェア部品２００の備えるメモリに制御データを書き込むことは、端末装置１００以外の装置が行ってもよく、ハードウェア部品２００の搭載された電子機器が起動する毎にその電子機器が実行してもよい。後者の場合、生成された制御データはその電子機器にインストールされる。
【００６４】
図１０は、ハードウェア部品製造の手順例を示すフローチャートである。
端末装置１００のソースコード編集部１２０は、ユーザ入力に応じてソースコード１１１を作成する（ステップＳ１）。端末装置１００のソースコード変換部１３０は、作成されたソースコード１１１に対して秘匿化処理を行う。すなわち、ソースコード変換部１３０は、ソースコード１１１から、ソースコード１１２と配列テーブル１１３とグループテーブル１１４を生成する。生成されたソースコード１１２とグループテーブル１１４は、外部情報としてハードウェアベンダに渡される。生成された配列テーブル１１３は、ハードウェアベンダに渡されずに秘密情報として管理される（ステップＳ２）。
【００６５】
端末装置３４は、ソースコード１１２に対して最適化処理を行う。すなわち、端末装置３４は、電子回路の動作速度が速く回路規模が小さくなるように、ユーザ入力に応じてソースコード１１２を修正する（ステップＳ３）。端末装置３４は、高位合成（動作合成）ツールを用いて、修正されたソースコード１１２からハードウェア記述言語で記述したＲＴＬモデルを生成する（ステップＳ４）。端末装置３４は、ＲＴＬモデルに基づいて電子回路をシミュレーションすることで、ＲＴＬモデルが適切か検証する（ステップＳ５）。
【００６６】
ステップＳ５の検証によってＲＴＬモデルが示す電子回路の動作や性能が妥当であると判断される場合、処理がステップＳ７に進められ、妥当でないと判断される場合、処理がステップＳ３の最適化処理に戻る（ステップＳ６）。ただし、修正量が少ないときは、ソースコード１１１を修正する代わりにＲＴＬモデルを修正してもよい。端末装置３４は、論理合成ツールを用いてＲＴＬモデルから実装設計用の回路データを生成する。例えば、電子回路をＡＳＩＣとして実装するときはＡＳＩＣ用の論理合成ツールが用いられ、電子回路をＦＰＡとして実装するときはＦＰＧＡ用の論理合成ツールが用いられる。製造装置３５は、端末装置３４が生成した回路データに対応する電子回路を製造し、電子回路を搭載したハードウェア部品２００を製造する（ステップＳ７）。
【００６７】
端末装置１００の制御データ生成部１５０は、ステップＳ２で生成された配列テーブル１１３から、電子回路が変換前のソースコード１１１に対応する動作をするように制御するための制御データを生成する。制御データは、例えば、電子回路に含まれる各選択回路に何れの信号を選択すればよいか指示するためのデータである（ステップＳ８）。ＲＯＭライタ３３は、電子回路が備えるメモリに制御データを書き込む（ステップＳ９）。
【００６８】
図１１は、ソースコード秘匿化の手順例を示すフローチャートである。図１１のフローチャートが示す処理は、上記のステップＳ２において実行される。
（ステップＳ１０）ソースコード変換部１３０は、空の配列テーブル１１３と空のグループテーブル１１４を生成し、設計情報記憶部１１０に格納する。
【００６９】
（ステップＳ１１）ソースコード変換部１３０は、ソースコード１１１を構文解析して変数参照の記述と関数呼出文を検出する。変数参照の記述は、演算のオペランド（関数呼出で指定する引数を含む）であって何れかの変数を参照する参照オペランドである。
【００７０】
（ステップＳ１２）ソースコード変換部１３０は、ステップＳ１１で検出した変数参照の記述および関数呼出文のうち何れか１つを選択する。
（ステップＳ１３）ソースコード変換部１３０は、配列テーブル１１３を参照して、未使用のダミーの識別子を１つ選択する。ダミーの識別子が配列として表現されている場合は、未使用の添字のうち最も番号が小さいものを選択する。そして、ソースコード変換部１３０は、ステップＳ１２で選択した変数参照の記述または関数呼出文に記載された名称（変数名または関数名）を、選択したダミーの識別子に置換する。これにより、変数名または関数名がダミーの識別子に置換されたソースコード１１２が生成される。
【００７１】
なお、上記説明では、変数参照の記述または関数呼出文毎に異なるダミーの識別子を用いるとしたが、同じ変数名または関数名に対しては同じダミーの識別子を用いるようにしてもよい。また、前と同じ変数名または関数名が現れたときに、前と同じ識別子を用いるか異なる識別子を用いるかを、ランダムまたは所定の規則に従って選択してもよい。
【００７２】
（ステップＳ１４）ソースコード変換部１３０は、配列テーブル１１３に、ステップＳ１３で選択したダミーの識別子と対応付けて元の変数名または関数名を登録する。
（ステップＳ１５）ソースコード変換部１３０は、参照される変数の型または呼び出される関数の型を判定する。変数の型はソースコード１１１の変数を定義する文に記載されており、関数の型はソースコード１１１の関数を定義する文に記載されている。
【００７３】
（ステップＳ１６）ソースコード変換部１３０は、ステップＳ１５で判定した型がグループテーブル１１４に登録されているか判断する。登録されている場合、ソースコード変換部１３０は、その型に対応するエントリ（識別子の集合とオリジナル名の集合）を選択し、登録されていない場合、新たなエントリをグループテーブル１１４に追加する。そして、ソースコード変換部１３０は、識別子の集合にステップＳ１３で選択したダミーの識別子を追加し、オリジナル名の集合に元の変数名または関数名を追加する。
【００７４】
（ステップＳ１７）ソースコード変換部１３０は、ステップＳ１２で、検出された変数参照の記述および関数呼出文を全て選択したか判断する。全て選択した場合は処理をステップＳ１８に進め、未選択のものがある場合は処理をステップＳ１２に進める。
【００７５】
（ステップＳ１８）ソースコード変換部１３０は、ソースコード１１２およびグループテーブル１１４を、ハードウェアベンダに提供するべき外部情報として出力する。
（ステップＳ１９）ソースコード変換部１３０は、配列テーブル１１３を、ハードウェアベンダに提供せずに秘密に管理するべき秘密情報として保存する。
【００７６】
なお、上記のステップＳ１３の置換、ステップＳ１４の配列テーブル１１３の更新およびステップＳ１６のグループテーブル１１４の更新は、任意の順序で実行してよい。
図１２は、電子回路の第２の例を示すブロック図である。ソースコード１１２およびグループテーブル１１４を受け取ったハードウェアベンダは、例えば、図１２のような電子回路を製造する。この第２の電子回路は、比較回路２１１、演算回路２１２，２１３、マルチプレクサ２１４，２３１〜２３５およびメモリ２２０を含む。比較回路２１１、演算回路２１２，２１３およびマルチプレクサ２１４の機能は、図５で説明した通りである。
【００７７】
マルチプレクサ２３１は、第１の入力信号（ｉｎ［０］）および第２の入力信号（ｉｎ［１］）の一方を選択し、第１のオペランドとして比較回路２１１に入力する。マルチプレクサ２３２は、第１および第２の入力信号の一方を選択し、第２のオペランドとして比較回路２１１に入力する。マルチプレクサ２３３は、第１および第２の入力信号の一方を選択し、引数として演算回路２１２，２１３に入力する。マルチプレクサ２３４は、演算回路２１２，２１３の演算結果の一方を選択し、１番目の演算結果としてマルチプレクサ２１４に入力する。マルチプレクサ２３５は、演算回路２１２，２１３の演算結果の一方を選択し、２番目の演算結果としてマルチプレクサ２１４に入力する。
【００７８】
このように、ソースコード１１２に記載された識別子ｘ［０］，ｘ［１］，ｘ［２］が２つの入力信号ｉｎ［０］，ｉｎ［１］の何れを指しているか不明であるため、入力信号を電子回路の製造後に選択できるようにマルチプレクサ２３１〜２３３が設けられる。また、ソースコード１１２に記載された識別子ｘ［３］，ｘ［４］が関数名ｂｕｙ，ｓｅｌｌの２つの関数の何れを指しているか不明であるため、何れの関数の演算結果を利用するか電子回路の製造後に選択できるようにマルチプレクサ２３４，２３５が設けられる。
【００７９】
メモリ２２０は、電子回路の製造時点ではデータが書き込まれていない空のメモリでよい。メモリ２２０には、電子回路の製造後にマルチプレクサ２３１〜２３５を制御するための制御データが書き込まれる。メモリ２２０が不揮発性メモリである場合は、例えば、ハードウェア部品２００を使用し始める前にＲＯＭライタ３３を用いて制御データが書き込まれる。メモリ２２０が揮発性メモリである場合は、例えば、ハードウェア部品２００を搭載した電子機器が起動する毎に制御データが書き込まれる。
【００８０】
マルチプレクサ２３１〜２３５それぞれを制御するためのデータは、２つの信号の何れを選択すればよいかを示すデータである。例えば、“０１１０１”というビット列がメモリ２２０に書き込まれる。これは、マルチプレクサ２３１が第１の入力信号を選択し、マルチプレクサ２３２，２３３が第２の入力信号を選択することを示している。また、これは、マルチプレクサ２３４が演算回路２１２の演算結果を選択し、マルチプレクサ２３５が演算回路２１３の演算結果を選択することを示している。ただし、上記の制御データの記載は一例であり、制御データの記載方法は電子回路の実装方法に依存する。このような制御データは、電子回路の構造と配列テーブル１１３に基づいて生成できる。
【００８１】
図１３は、電子回路の第３の例を示すブロック図である。ソースコード１１２およびグループテーブル１１４を受け取ったハードウェアベンダは、図１３のような電子回路を製造することもできる。この第３の電子回路は、比較回路２１１、演算回路２１２，２１３、メモリ２２０およびスイッチボックス２４１，２４２を含む。
【００８２】
上記の第２の電子回路はマルチプレクサ２３１〜２３３を用いて入力信号を選択するのに対し、この第３の電子回路はスイッチボックス２４１を用いて入力信号を選択する。スイッチボックス２４１は、２つの入力線と３つの出力線との間に形成される６個の接点のＯＮ／ＯＦＦを切り替えることができる。２つの入力線は、２つの入力信号ｉｎ［０］，ｉｎ［１］に対応する。３つの出力線は、比較回路２１１の第１のオペランド、比較回路２１１の第２のオペランド、演算回路２１２，２１３の引数に対応する。
【００８３】
また、第２の電子回路はマルチプレクサ２３４，２３５を用いて演算結果を選択するのに対し、第３の電子回路はスイッチボックス２４２を用いて演算結果を選択する。スイッチボックス２４２は、２つの入力線と２つの出力線との間に形成される４個の接点のＯＮ／ＯＦＦを切り替えることができる。２つの入力線は２つの演算回路２１２，２１３の演算結果に対応し、２つの出力線はマルチプレクサ２１４の２つの入力に対応する。
【００８４】
メモリ２２０には、電子回路の製造後にスイッチボックス２４１，２４２を制御するための制御データが書き込まれる。スイッチボックス２４１を制御するためのデータは、６個の接点それぞれのＯＮ／ＯＦＦを示すデータである。例えば、“１０００１１”というビット列がメモリ２２０に書き込まれる。これは、第１の出力線が第１の入力線に接続され、第２の出力線が第２の入力線に接続され、第３の出力線が第２の入力線に接続されることを示す。また、スイッチボックス２４２を制御するためのデータは、４個の接点それぞれのＯＮ／ＯＦＦを示すデータである。例えば、“１００１”というビット列がメモリ２２０に書き込まれる。これは、第１の出力線が第１の入力線に接続され、第２の出力線が第２の入力線に接続されることを示す。ただし、上記の制御データの記載は一例であり、制御データの記載方法は電子回路の実装方法に依存する。
【００８５】
電子回路がＦＰＧＡとして実装される場合、このようにスイッチボックス２４１，２４２を使用することで回路規模を抑制することができる。スイッチボックス２４１，２４２を制御するための制御データは、配列テーブル１１３に基づいて生成できる。
【００８６】
図１４は、電子回路の第４の例を示すブロック図である。ハードウェアベンダは図１４のような電子回路を製造することもできる。この第４の電子回路は、比較回路２１１、マルチプレクサ２１４，２３１〜２３３、メモリ２２０およびルックアップテーブル（ＬＵＴ：Lookup Table）２５１，２５２を含む。比較回路２１１、マルチプレクサ２１４，２３１〜２３３およびメモリ２２０の機能は、図１２で説明した通りである。
【００８７】
第４の電子回路では、ルックアップテーブル２５１，２５２のうちの一方を用いて関数名ｂｕｙの関数を実現し、他方を用いて関数名ｓｅｌｌの関数を実現する。メモリ２２０に書き込まれる制御データには、ルックアップテーブル２５１の入力値と出力値との対応関係を定義したデータと、ルックアップテーブル２５２の入力値と出力値との対応関係を定義したデータが含まれる。２つの対応関係の一方は関数名ｂｕｙの関数を示しており、他方は関数名ｓｅｌｌの関数を示している。ルックアップテーブル２５１，２５２は、メモリ２２０に書き込まれた制御データに基づいて、入力値に対応する出力値を算出する。
【００８８】
このように、ルックアップテーブル２５１，２５２を用いることで、ルックアップテーブル２５１，２５２と２つの関数とを電子回路の製造後に対応付けることができる。よって、ソースコード１１２で識別子ｘ［３］，ｘ［４］と２つの関数との対応が不明であっても、ルックアップテーブル２５１の演算結果を第１の演算結果としてマルチプレクサ２１４に入力してよい。同様に、ルックアップテーブル２５２の演算結果を第２の演算結果としてマルチプレクサ２１４に入力してよい。すなわち、ルックアップテーブル２５１，２５２とマルチプレクサ２１４の間にマルチプレクサ２３４，２３５やスイッチボックス２４２を設けなくてもよく、電子回路の回路規模を抑制することができる。
【００８９】
なお、図１４では入力信号を選択するためにマルチプレクサ２３１〜２３３を用いているが、図１３に示したようにスイッチボックス２４１を用いてもよい。
第２の実施の形態の情報処理システムによれば、ハードウェアベンダにハードウェア部品２００の製造を依頼するにあたり、ソースコード１１１がソースコード１１２に変換され、また、配列テーブル１１３およびグループテーブル１１４が生成される。そして、ソースコード１１２およびグループテーブル１１４が外部情報としてハードウェアベンダに渡される一方、配列テーブル１１３が秘密情報として保管される。
【００９０】
ソースコード１１２はプログラムの制御構造や演算内容を表現しており、グループテーブル１１４は各ダミーの識別子に対応する変数または関数の候補を示しているため、マルチプレクサやスイッチボックスなどの選択回路を利用して電子回路を製造することが可能である。一方、ソースコード１１２およびグループテーブル１１４からは、どの入力データに対してどのような演算を行うかという具体的なデータと演算の対応関係を読み取ることができない。このため、データと演算の対応関係がノウハウとして保護すべき情報であっても、配列テーブル１１３をハードウェアベンダに提供せずに秘密に保管することで、ノウハウがハードウェアベンダに漏洩するリスクを低減することができる。
【００９１】
なお、第１の実施の形態の機能は、情報処理装置１０にプログラムを実行させることで実現できる。また、第２の実施の形態の機能は、端末装置１００にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体４３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体にプログラムを複製してから（インストールしてから）実行してもよい。
【符号の説明】
【００９２】
１０  情報処理装置
１１  記憶部
１２  生成部
２１，２１ａ  第１のコード
２２，２２ａ  第２のコード
２３，２３ａ  対応情報
【図１】
2014029610.tif 000003
【図２】
2014029610.tif 000004
【図３】
2014029610.tif 000005
【図４】
2014029610.tif 000006
【図５】
2014029610.tif 000007
【図６】
2014029610.tif 000008
【図７】
2014029610.tif 000009
【図８】
2014029610.tif 000010
【図９】
2014029610.tif 000011
【図１０】
2014029610.tif 000012
【図１１】
2014029610.tif 000013
【図１２】
2014029610.tif 000014
【図１３】
2014029610.tif 000015
【図１４】
2014029610.tif 000016