IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

<>
  • 特表-機械学習ベースの暗号解読 図1
  • 特表-機械学習ベースの暗号解読 図2
  • 特表-機械学習ベースの暗号解読 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-12
(54)【発明の名称】機械学習ベースの暗号解読
(51)【国際特許分類】
   H04L 9/08 20060101AFI20240905BHJP
   G06N 20/00 20190101ALI20240905BHJP
【FI】
H04L9/08 B
G06N20/00
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024514386
(86)(22)【出願日】2022-09-21
(85)【翻訳文提出日】2024-03-04
(86)【国際出願番号】 US2022076768
(87)【国際公開番号】W WO2023049737
(87)【国際公開日】2023-03-30
(31)【優先権主張番号】17/448,551
(32)【優先日】2021-09-23
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【弁理士】
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】ガニサン,ダーマリンガム
(72)【発明者】
【氏名】クリフトン,デイヴィッド エム.
(57)【要約】
実施形態は、公開鍵暗号アルゴリズムによって符号化された符号化メッセージ又は秘密鍵を解読又は部分的に解読する。実施形態は、プログラム合成器の言語を用いて公開鍵暗号アルゴリズムを符号化し、プログラム合成器のための文法を構築する。実施形態は、入力-出力ペアを有する訓練データでプログラム合成器を訓練し、訓練されたプログラム合成器を実行して数式を生成する。実施形態は、生成された数式の正当性を確認し、次いで、訓練されて正当性が確認されたプログラム合成器を使用して解読を実行する。
【特許請求の範囲】
【請求項1】
公開鍵暗号アルゴリズムによって符号化された符号化メッセージ又は秘密鍵を解読する又は部分的に解読する方法であって、
プログラム合成器の言語を用いて前記公開鍵暗号アルゴリズムを符号化し、
前記プログラム合成器のための文法を構築し、
入力-出力ペアを有する訓練データで前記プログラム合成器を訓練し、
前記訓練されたプログラム合成器を実行して数式を生成し、
前記生成された数式の正当性を確認し、
前記訓練されて正当性が確認されたプログラム合成器を使用して解読を実行する、
ことを有する方法。
【請求項2】
前記生成された数式の正当性が確認されない場合に、前記訓練されたプログラム合成器を実行して前記数式を生成することを繰り返す、
ことを更に有する請求項1に記載の方法。
【請求項3】
前記プログラム合成器は充足可能性モジュロ理論(SMT)ソルバーを有する、請求項1に記載の方法。
【請求項4】
前記公開鍵暗号アルゴリズムを符号化することは、構文誘導プログラム合成を使用することを有する、請求項1に記載の方法。
【請求項5】
前記公開鍵暗号アルゴリズムはオラクルを有し、前記公開鍵暗号アルゴリズムを符号化することは前記オラクルを指定する、請求項1に記載の方法。
【請求項6】
前記公開鍵暗号アルゴリズムは、最下位ビットオラクルを有するRivest-Shamir-Adleman(RSA)アルゴリズムを有し、当該方法は更に、前記訓練されて正当性が確認されたプログラム合成器及び前記オラクルを使用して、RSA暗号化メッセージ全体を解読することを有する、請求項1に記載の方法。
【請求項7】
前記公開鍵暗号アルゴリズムはDiffie-Hellman(DH)アルゴリズムを有し、当該方法は更に、前記訓練されて正当性が確認されたプログラム合成器を使用して、DH公開鍵から秘密鍵の最下位ビットを決定することを有する、請求項1に記載の方法。
【請求項8】
命令を格納したコンピュータ読み取り可能媒体であって、前記命令は、1つ以上のプロセッサによって実行されるときに、該プロセッサに、公開鍵暗号アルゴリズムによって符号化された符号化メッセージ又は秘密鍵を解読させ又は部分的に解読させ、該解読は、
プログラム合成器の言語を用いて前記公開鍵暗号アルゴリズムを符号化し、
前記プログラム合成器のための文法を構築し、
入力-出力ペアを有する訓練データで前記プログラム合成器を訓練し、
前記訓練されたプログラム合成器を実行して数式を生成し、
前記生成された数式の正当性を確認し、
前記訓練されて正当性が確認されたプログラム合成器を使用して解読を実行する、
ことを有する、コンピュータ読み取り可能媒体。
【請求項9】
前記解読は更に、
前記生成された数式の正当性が確認されない場合に、前記訓練されたプログラム合成器を実行して前記数式を生成することを繰り返す、
ことを有する、請求項8に記載のコンピュータ読み取り可能媒体。
【請求項10】
前記プログラム合成器は充足可能性モジュロ理論(SMT)ソルバーを有する、請求項8に記載のコンピュータ読み取り可能媒体。
【請求項11】
前記公開鍵暗号アルゴリズムを符号化することは、構文誘導プログラム合成を使用することを有する、請求項8に記載のコンピュータ読み取り可能媒体。
【請求項12】
前記公開鍵暗号アルゴリズムはオラクルを有し、前記公開鍵暗号アルゴリズムを符号化することは前記オラクルを指定する、請求項8に記載のコンピュータ読み取り可能媒体。
【請求項13】
前記公開鍵暗号アルゴリズムは、最下位ビットオラクルを有するRivest-Shamir-Adleman(RSA)アルゴリズムを有し、前記解読は更に、前記訓練されて正当性が確認されたプログラム合成器及び前記オラクルを使用して、RSA暗号化メッセージ全体を解読することを有する、請求項8に記載のコンピュータ読み取り可能媒体。
【請求項14】
前記公開鍵暗号アルゴリズムはDiffie-Hellman(DH)アルゴリズムを有し、当該解読は更に、前記訓練されて正当性が確認されたプログラム合成器を使用して、DH公開鍵から秘密鍵の最下位ビットを決定することを有する、請求項8に記載のコンピュータ読み取り可能媒体。
【請求項15】
1つ以上のプロセッサを有する解読システムであって、
前記1つ以上のプロセッサは、
公開鍵暗号アルゴリズムによって符号化された符号化メッセージ又は秘密鍵を受信し、
プログラム合成器の言語を用いて前記公開鍵暗号アルゴリズムを符号化し、
前記プログラム合成器のための文法を構築し、
入力-出力ペアを有する訓練データで前記プログラム合成器を訓練し、
前記訓練されたプログラム合成器を実行して数式を生成し、
前記生成された数式の正当性を確認し、
前記訓練されて正当性が確認されたプログラム合成器を使用して解読を実行する、
ように適応されている、
システム。
【請求項16】
前記生成された数式の正当性が確認されない場合に、前記訓練されたプログラム合成器を実行して前記数式を生成することを繰り返す、
ことを更に有する請求項15に記載のシステム。
【請求項17】
前記プログラム合成器は充足可能性モジュロ理論(SMT)ソルバーを有する、請求項15に記載のシステム。
【請求項18】
前記公開鍵暗号アルゴリズムを符号化することは、構文誘導プログラム合成を使用することを有する、請求項15に記載のシステム。
【請求項19】
前記公開鍵暗号アルゴリズムは、最下位ビットオラクルを有するRivest-Shamir-Adleman(RSA)アルゴリズムを有し、前記訓練されて正当性が確認されたプログラム合成器及び前記オラクルを使用して、RSA暗号化メッセージ全体を解読することを更に有する、請求項15に記載のシステム。
【請求項20】
前記公開鍵暗号アルゴリズムはDiffie-Hellman(DH)アルゴリズムを有し、前記訓練されて正当性が確認されたプログラム合成器を使用して、DH公開鍵から秘密鍵の最下位ビットを決定することを更に有する、請求項15に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
一実施形態は、概して暗号解読に関し、特に機械学習ベースの暗号解読の使用に関する。
【背景技術】
【0002】
暗号解読は、システムの隠れた側面を調査するために情報システムを分析する研究である。暗号解読は、暗号鍵が未知であっても、暗号セキュリティシステムを突破し、暗号化されたメッセージのコンテンツへのアクセスを得るために使用される。
【0003】
伝統的に、公開鍵暗号アルゴリズムの暗号解読は、数学及びコンピュータサイエンスにおける難解な技能を持つ研究者によって手動で行われることが多い。暗号解析者は、設計の弱点を特定するために、暗号アルゴリズムの数学的構造を見直す。暗号解読者は、暗号システムの一部である公開データパラメータから秘密データ(例えば、鍵、メッセージ)を暴くのに役立つ数式を手動で構築し、それにより、符号化されたメッセージを解読する。
【発明の概要】
【0004】
実施形態は、公開鍵暗号アルゴリズムによって符号化された符号化メッセージ又は秘密鍵を解読又は部分的に解読する。実施形態は、プログラム合成器の言語を用いて公開鍵暗号アルゴリズムを符号化し、プログラム合成器のための文法を構築する。実施形態は、入力-出力ペアを有する訓練データでプログラム合成器を訓練し、訓練されたプログラム合成器を実行して数式を生成する。実施形態は、生成された数式の正当性を確認し、次いで、訓練されて正当性が確認されたプログラム合成器を使用して解読を実行する。
【図面の簡単な説明】
【0005】
添付の図面と併せて解釈されるべきものである以下の実施形態の詳細説明から、更なる実施形態、詳細、利点、及び変更が明らかになる。
図1】実施形態に係る一般的な暗号化アルゴリズムを示している。
図2】ここに開示される機能のうちのいずれかを実装するために使用されることが可能な、本発明の一実施形態に従ったコンピュータサーバ/システムのブロック図である。
図3】一実施形態に従った、暗号解読を実行するための図2の暗号解読モジュールの機能のフロー図である。
【発明を実施するための形態】
【0006】
一実施形態は、符号化メッセージ又は秘密鍵を解読する又は部分的に解読するために、暗号化された通信の入力出力ペアでプログラム合成器を訓練し、訓練されたプログラム合成器を使用して、暗号化された通信を更に解読する。
【0007】
実施形態は、例えばRSA、Rabin、Diffie-Hellman鍵交換などの公開鍵暗号アルゴリズム向けのコンピュータ支援暗号解読プロセスを実装する。実施形態は、暗号解読を実行するために、自動プログラム合成を公開鍵暗号法と統合する。実施形態は、暗号解読タスクを自動化するために、公開鍵暗号解読問題をプログラム合成問題に変換する。
【0008】
一般に、自動プログラム合成は、ハイレベルの形式仕様(formal specification)に合致するプログラムを生成する。該仕様は、完全な形式動作仕様から(テストケースにおいてのような)入力-出力例又は部分的な仕様と入力-出力例との組み合わせまで及び得る。実施形態は、公開鍵暗号アルゴリズムの典型的な要素である基本コンポーネント(例えば、モジュラー加算、累乗など)からなる所与の文法を用いて推論するために、可能なプログラムの検索空間をガイドすることによって構文誘導プログラム合成(syntax-guided program synthesis,“SyGuS”)手法を使用する。
【0009】
以下、本開示の実施形態を詳細に参照し、それらの例が添付の図面に示される。以下の詳細な説明では、本開示の完全なる理解を提供するために、数多くの具体的詳細が記載される。しかしながら、当業者に明らかになることには、本開示はそれらの具体的詳細を用いずに実施されてもよい。また、実施形態の態様をいたずらに不明瞭にしないよう、周知の方法、手順、コンポーネント、及び回路は詳細に説明されていない。可能な限り、似た要素には似た参照符号を用いることとする。
【0010】
図1は、実施形態に係る一般的な暗号化アルゴリズム110を示している。暗号化アルゴリズム110は、暗号化すべき送信者101からのメッセージを受信する受信者103を含んでいる。暗号化アルゴリズム110は更に、攻撃者102からのメッセージを受信する“オラクル(神託)”104を含んでいる。
【0011】
一般に、公開鍵暗号法では、一部の暗号化アルゴリズムは、秘密メッセージのハードコアビット、すなわち、“オラクル”を含んでおり、これが意味することは、それらのハードコアビットを予測するアルゴリズムへのアクセスを暗号解読者が持つ場合に、異なる入力に全く同じアルゴリズムを繰り返し適用することによって暗号化メッセージ全体を復元することができるということである。“オラクル攻撃”の概念は、それぞれ暗号化器又は解読器への平文又は暗号文入力を選択し、選択された入力に関連する出力を分析することによるものであり、しばしば、アルゴリズムに関する貴重な情報又はアルゴリズムに使用されている例えば鍵の1つなどの秘密の情報アイテムを推定することが可能である。
【0012】
暗号システムにおけるこのような脆弱性は“オラクル”と呼ばれており、というのは、デルフォイの古代ギリシャのオラクルへの訪問のように、あらゆる入力又は質問が出力又は回答を受け取り、その回答が意味を持つかどうかを判断するのは観察者に委ねられるということからである。多数の入力に応答したオラクルの出力が隠された真実を明らかにするとき、暗号オラクル攻撃は成功したことになる。暗号の構築及び/又は実装は、タイミング情報、メッセージパディング問題、エラー処理、又は他の情報漏洩に関連して、そのようなオラクルを持つことがしばしばである。具体的には、オラクル104は、例えば“暗号化されたメッセージの最下位ビットは何ですか”などの特定の質問に答えることができる。しかし、一般に、オラクル104を賢く用いてメッセージ全体を解読するアルゴリズムを開発することは、困難な暗号解読タスクである。
【0013】
対照的に、実施形態は、暗号解読タスクのためにプログラム合成を適用する。実施形態は、秘密全体を解読するためにオラクル104を体系的に用いるアルゴリズムを合成する。
【0014】
図2は、ここに開示される機能のうちのいずれかを実装するために使用されることが可能な、本発明の一実施形態に従ったコンピュータサーバ/システム10のブロック図である。単一のシステムとして示されているが、システム10の機能は分散システムとして実装されることができる。また、ここに開示される機能は、ネットワークを介して互いに結合され得る別個のサーバ又はデバイス上に実施されることができる。また、システム10の1つ以上のコンポーネントが含まれなくてもよい。
【0015】
システム10は、情報を通信するためのバス12又は他の通信機構と、情報を処理するためにバス12に結合されたプロセッサ22とを含む。プロセッサ22は、任意のタイプの汎用又は専用プロセッサとし得る。システム10は更に、プロセッサ22によって実行される命令及び情報を格納するためのメモリ14を含む。メモリ14は、ランダムアクセスメモリ(“RAM”)、読み出し専用メモリ(“ROM”)、例えば磁気ディスク若しくは光ディスクなどの静的ストレージ、又は任意の他のタイプのコンピュータ読み取り可能媒体の任意の組み合わせで構成され得る。システム10は更に、ネットワークへのアクセスを提供するために、例えばネットワークインタフェースカードなどの通信デバイス20を含む。従って、ユーザは、システム10と直接、又はネットワークを介してリモートで、又は何らかの他の方法でインタフェースをとり得る。
【0016】
コンピュータ読み取り可能媒体は、プロセッサ22によってアクセスされることが可能で、揮発性及び不揮発性の両方の媒体、リムーバブル及び非リムーバブルの媒体、並びに通信媒体を含む任意の利用可能な媒体とし得る。通信媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、又は例えば搬送波若しくは他のトランスポート機構などの変調されたデータ信号内の他のデータを含むことができ、任意の情報配信媒体を含む。
【0017】
プロセッサ22は更に、バス12を介して、例えば液晶ディスプレイ(“LCD”)などのディスプレイ24に結合される。キーボード26及び例えばコンピュータマウスなどのカーソル制御デバイス28が更にバス12に結合されて、ユーザがシステム10とインタフェースをとることを可能にする。
【0018】
一実施形態において、メモリ14は、プロセッサ22によって実行されるときに機能を提供するソフトウェアモジュールを格納する。それらモジュールは、システム10のオペレーティングシステム機能を提供するオペレーティングシステム15を含む。それらモジュールは更に、符号化されたメッセージ又は秘密鍵を解読する又は部分的に解読するために暗号解読を実行する暗号解読モジュール16、及びここに開示される他の全ての機能を含む。システム10は、より大きいシステムの一部であることができる。従って、システム10は、暗号化/解読機能を利用することができる更なる機能を含むための1つ以上の追加の機能モジュール18を含むことができる。ファイルストレージデバイス又はデータベース17がバス12に結合されて、解読された鍵、制約、及びプログラム合成文法を含むモジュール16及び18のための集中型ストレージを提供する。一実施形態において、データベース17は、構造化照会言語(“SQL”)を使用して格納データを管理することができるリレーショナルデータベース管理システム(“RDBMS”)である。
【0019】
一実施形態において、特に単一のデバイスに多数の分散ファイルが存在する場合、データベース17は、インメモリデータベース(“IMDB”)として実装される。IMDBは、コンピュータデータストレージのために主にメインメモリに依存するデータベース管理システムである。これは、ディスクストレージ機構を採用するデータベース管理システムとは対照的である。メインメモリデータベースは、ディスク最適なデータベースよりも高速である。何故なら、ディスクアクセスはメモリアクセスよりも遅く、内部最適化アルゴリズムの方が単純であり、より少ないCPU命令を実行するからである。メモリ内のデータにアクセスすることは、データをクエリするときのシークタイムを排除し、ディスクより高速で、より予測可能な性能を提供する。
【0020】
一実施形態において、データベース17は、IMDBとして実装されるとき、分散データグリッドに基づいて実装される。分散データグリッドは、分散された又はクラスタ化された環境内で情報と例えば計算などの関連動作とを管理するために、コンピュータサーバの集合が1つ以上のクラスタにて共に動作するシステムである。分散データグリッドは、サーバ間で共有されるアプリケーションオブジェクト及びデータを管理するために使用され得る。分散データグリッドは、短い応答時間、高いスループット、予測可能なスケーラビリティ、連続可用性、及び情報信頼性を提供する。特定の例において、例えばオラクル社の“オラクルコヒーレンス(Oracle Coherence)”データグリッドなどの分散データグリッドは、インメモリで情報を格納して、より高い性能を達成するとともに、その情報のコピーを複数のサーバにわたって同期させておく冗長性を使用することで、サーバの障害発生時のデータの継続した可用性及びシステムの回復力を確実とする。
【0021】
一実施形態において、システム10は、企業組織向けのアプリケーション又は分散アプリケーションの集合を含むコンピューティング/データ処理システムであり、物流、製造、及び在庫管理機能を実装することもできる。アプリケーション及びコンピューティングシステム10は、クラウドベースのネットワーキングシステム、ソフトウェア・アズ・ア・サービス(“SaaS”)アーキテクチャ、又は他のタイプのコンピューティングソリューションとともに動作するように構成されたり、それとして実装されたりすることができる。
【0022】
開示されるように、実施形態は、機械学習を使用して、暗号アルゴリズムに関連付けられた公開データに基づいて数式を構築する。例えば、Diffie-Hellmanアルゴリズムの場合、実施形態は、プログラム合成器の形態の機械学習器を使用して、対応する公開鍵から秘密鍵の最下位ビット(“LSB”)を暴く。同様に、一実施形態は、機械学習器を使用して、RSAアルゴリズムのLSBオラクルへのアクセスが与えられたときに秘密鍵の一部を明らかにする数学表現を構築する。
【0023】
一般に、実施形態は、入力-出力ペアで機械学習アルゴリズムを訓練し、符号化メッセージ又は秘密鍵を解読する又は部分的に解読するために機械学習器(すなわち、プログラム合成器)に暗号解析を自動実行させる。
【0024】
図3は、一実施形態に従った、暗号解読を実行するための図2の暗号解読モジュール16の機能のフロー図である。一実施形態において、図3のフロー図の機能は、メモリ又は他のコンピュータ読み取り可能な若しくは有形の媒体に格納されたソフトウェアによって実装され、プロセッサによって実行される。他の実施形態において、当該機能は、(例えば、特定用途向け集積回路(“ASIC”)、プログラマブルゲートアレイ(“PGA”)、フィールドプログラマブルゲートアレイ(“FPGA”)などの使用を通して)ハードウェアによって、又はハードウェアとソフトウェアとの何らかの組み合わせによって実行され得る。
【0025】
302にて、実施形態は、プログラム合成器によってサポートされる言語を用いて公開鍵暗号アルゴリズムを符号化する。一実施形態は、構文誘導プログラム合成を使用するが、例として、数え上げ探索(enumerative search)、制約解決(constraint solving)、確率的検索(stochastic search)、及び演繹ベースのプログラミングなどの他の符号化技法を使用が使用されてもよい。構文誘導合成を用いる実施形態は、探索空間を制約する文法を暗号解読者が定義することを可能にする。
【0026】
304にて、実施形態は、プログラム合成器のための文法を構築する。文法の構成要素は、例えばモジュラー加算、乗算、逆数、及び利用可能な場合に任意のオラクルなどのプリミティブである。一般に、これらのプリミティブは、公開鍵暗号のコンテキストで使用されることが多い。文法は、必要に応じて、より多くのプリミティブを追加することによって反復的に発展され得る。
【0027】
306にて、実施形態は、入力-出力ペア(すなわち、訓練データ)でプログラム合成器を訓練する。例えば、1番目の最下位ビット(“LSB”)を用いて2番目のLSBを予測する数式を構築することが目標である場合、実施形態は、例のセットを用いて合成器を訓練する。例えば、以下にて開示されるDHプロトコルの例において、訓練データは、公開鍵と秘密鍵のLSBとからなるペアを指す。これが訓練セットである。
【0028】
308にて、実施形態は、合成器を実行して数式を生成し、この式が、訓練した例に対してだけ有効であるのではなく、全ての入力-出力ペアに対して全般的であるかを検査するために、学習された数式の正当性を確認する。学習された式の正当性を確認することには、伝統的な証明技術又は定理証明器が使用され得る。実施形態において、プログラム合成を用いて、基礎となる暗号アルゴリズムのパラメータ値を変化させることによって、学習された式の正当性を確認する。特定の訓練セットに対して式が学習される場合、実施形態は、式が一般化可能であるかを検証するために訓練セットを変更し、従って、出力に基づいて機械学習モデルを再訓練する。例えば、DHプロトコルにおいて、実施形態は、グループジェネレータを変更し、学習された式が有効であるか否かを検証することができる。機械学習された式が全ての可能なシナリオに対して正しいかを証明するために、数学の公理を用いてもよい。
【0029】
308において、学習された式の正当性が確認されない場合、310にて、実施形態は、308からのデータ(すなわち、入力-出力ペア)を用いて、訓練した入力-出力ペアを拡張し、308にて機能が再開してプログラム合成器が再訓練されるようにする。それ以外の場合、暗号解読は完了する。
【0030】
図3の機能の結果として、実施形態は、訓練されて正当性が確認されたプログラム合成器を用いて、メッセージ(又は鍵)全体を解読するか、それらに関する部分的な情報を学習するか(すなわち、部分的な解読)、のいずれかを行うことができる。後述するように、DHの例で、実施形態は、秘密鍵に関する部分的な情報を学習し、一方、RSAの例では、実施形態は、暗号化されたメッセージのLSBのみをリークするオラクルを用いてメッセージ全体を学習する。生成された数式は、公開データ(例えば、公開鍵、暗号文)のみを取り、秘密情報を返す。一般に、公開データと秘密データは数学的に関係しているので、実施形態は機械学習を利用して潜在する関係を学習する。
【0031】
自動プログラム合成例
実施形態は、暗号解読を自動化するためにプログラム合成を使用する。一実施形態は、プログラム合成器としてCVC4を実装する。CVC4は、充足可能性モジュロ理論(satisfiability modulo theories,“SMT”)問題向けの効率的なオープンソース自動定理証明器である。これは、多数の組み込み論理理論及びそれらの組み合わせにおける一次式の有効性(又は、二重に、充足可能性)を証明するために使用され得る。他の実施形態において、代わりのプログラム合成器が使用されてもよい。
【0032】
自動プログラム合成の一例において、3つの異なる数の中で2番目に大きい数を見つけるプログラムを合成することが要求されていると仮定する。実施形態において、プログラム合成器言語もSMTであるので、SMT言語構文を用いて機能及びタイプを規定する。構文について以下にて説明する。
【0033】
bool2Int関数はブール値bをintに変換する。bが真である場合には1を返し、そうでない場合には0を返す。SMTにおいて、“it”はif-then-elseを表す:
(define-fun bool2Int ((b Bool)) Int
(ite (= b true) 1 0)
)
【0034】
max関数及びmin関数は、それぞれ、2つの数xとyのうちの最大値及び最小値を返す:
(define-fun max((x Int)(y Int)) Int (-x(*(-x y)(bool2Int(<x y)))))
(define-fun min((x Int)(y Int)) Int (-x(*(-x y)(bool2Int(<y x)))))
【0035】
SyGusを用いて合成するために、変数(例えば、x、y、z)及びコンポーネント(例えば、max、min)の許容リストを含む文法を規定する必要がある:
min):
(synth-fun second_max((x Int) (y Int) (z Int)) Int
((Start Int(
x y z
(max Start Start)
(min Start Start)
))
)
)
【0036】
入力-出力ペアのセットを用いて仕様が与えられる。例えば、ステートメント(constraint(=(second_max 1, 2, 3) 2))は、second_max関数が引数(1,2,3)で呼び出されたときに2を返すべきであることを意味する。second_maxコードが、文法中で言及されるコンポーネント(例えば、max、min)を用いて合成される。(この例における)合成された関数は、比較の数に関しては最適ではないが、コンポーネントからどのようにしてアルゴリズムを合成できるかを示している。
(constraint(=(second_max 1 2 3) 2))
(constraint(=(second_max 3 2 1) 2))
(constraint(=(second_max 1 3 2) 2))
(constraint(=(second_max 3 1 2) 2))
(constraint(=(second_max 2 3 1) 2))
(constraint(=(second_max 2 1 3) 2))
【0037】
check-synthコマンドは、SyGus合成ツールに、上述の制約を満たす関数を合成するように依頼するためのものである:
(check-synth)
【0038】
CVC4ユーティリティを用いて次のSyGusコマンドを実行した後に、合成されたコードがそれによってプリントされる。
./cvc4-2020-05-29-x86_64-linux-opt --lang=sygus1 max_second.sygus
(define-fun second_max((x Int) (y Int) (z Int)) Int (min(max x y) (max z (min x y))))
【0039】
示されるように、構文誘導プログラム合成は、所与の仕様に合致するように所与の文法で言及されるコンポーネントを用いてプログラムを導出することを試みる。
【0040】
プログラム合成例を用いたRSA暗号解読
Rivest-Shamir-Adleman(“RSA”)は、セキュアなデータ伝送のために広く使用されている公開鍵暗号システムである。RSAでは、送信者が受信者の公開鍵を用いてメッセージを暗号化する。受信者のみが、対応する秘密鍵を用いてメッセージを解読することができる。
【0041】
RSAにおいて、鍵生成フェーズは次の通りである。bはビット単位のキーサイズを表すものとする。2つのランダムな秘密の素数p及びqが生成され、pとqとを乗算することによって公開鍵nを形成する。従って、n=pqである。なお、pとqはどちらも秘密素数であり、各々おおよそb/2ビットのサイズのものである。そして、e及びdが、e*d=1(mod phi(n))であるように選択され、ここで、phi(n)=(p-1)(q-1)である。
【0042】
実際には、公開のeは固定定数である。合致する秘密のdを選択することができない場合、適切なdが見つかるまで新たな素数p及びqが選択される。公開鍵は<n,e>であり、秘密鍵は<n,e,d,p,q>である。RSAは、(1)nからp及びqを、又は(2)nからphi(n)を効率的に見つけることが難しいため、破ることが困難であると考えられている。
【0043】
RSAにおいて、暗号化関数は次の通りである。xを平文とも呼ばれるメッセージとする。RSAでは、メッセージは、[0,n)内の整数として符号化されなければならない。送信者が、受信者の公開鍵<n,e>を用い、以下に定義される暗号化関数encを呼び出すことによってメッセージxを暗号化する:
enc(x)=x(mod n)=y
yは、平文xに対応する暗号文である。暗号化関数encは決定論的関数であるため、攻撃を回避するために、encが適用される前の平文にランダム性が付加される。複合モジュロ算術コンテキストにおいてe番目の根を交換することができる既知の効率的なアルゴリズムは存在しないので、yを与えられてxを見つけることは困難であると広く考えられている。
【0044】
RSAにおいて、解読関数は次の通りである。受信者は、その秘密鍵指数dを用いて着信暗号文yを解読し、平文xを復元する:
dec(y)=y(mod n)=x
最後の等式は、オイラー及びフェルマーの数論結果によるものである。
【0045】
実施形態は、次いで、次のようにRSAにプログラム合成器を適用する。暗号文y及び公開鍵<n,e>を取り、平文xの最下位ビット(LSB)を返すオラクルlsbOra(y,e,n)が存在すると仮定する。実施形態は、このlsbOraを自動的に用いてメッセージ全体をビットごとに解読するために、プログラム合成を使用する。
【0046】
実施形態は、入力-出力ペア(すなわち、訓練用データセット)に一致する式を学習するために呼び出され得るプリミティブの許容リストを列挙する文法を活用するために、プログラム合成器を利用する。プリミティブのリストは、公開鍵暗号法で使用される基本的な数学関数からなる。例えば、mod、power、inverseなどの関数が、合成器が使用することが許されるカタログの一部であることが多い。オラクル関数が存在する場合、実施形態は、それもプリミティブの許容リストの一部として含む。この能力がRSAの暗号解読に活用される。
【0047】
RSA暗号化関数“enc”及び解読関数“dec”は、以下で形式化される(暗号化関数及び解読関数をSMT言語で符号化するときの図3の302に対応する)。“pow”は指数関数である:
(define-fun enc((x Int) (e Int) (n Int)) Int
(mod(pow(mod x n) e) n)
)
(define-fun dec((y Int) (d Int) (n Int)) Int
(mod(pow(mod y n) d) n)
)
【0048】
実施形態は、次いで、SMT言語を用いてオラクルを規定する(オラクルは文法の一部であるので、図3の302に対応するとともに、部分的に304に対応する)。最下位ビットオラクルlsbOraは以下で与えられる。なお、オラクルは秘密鍵(以下の例において3)を知っている。しかしながら、合成器は、lsbOraを単にブラックボックスとして使用している。換言すれば、合成器には秘密鍵値が与えられていない。lsbOraは、RSA解読関数を呼び出すことが許される:
(define-fun lsbOra((y Int) (n Int)) Int
(lsb(dec(mod y n) 3 n))
)
【0049】
実施形態は、次いで、文法を規定する(図3の304に対応する)。文法は以下のように与えられる:
(synth-fun half_pred((y Int) (e Int) (n Int)) Int
((Start Int(
y e n
1 2
(modAdd Start Start n)
(modMul Start Start n)
(lsbOra Start n)
(enc Start Start n)
))
)
)
この文法は、プログラム合成器が、一般的に発生するモジュロ演算とオラクル(lsbOra)及び暗号化関数とを使用することを可能にしている。合成器はまた、合成されるべき挙動を規定する例のセットで訓練される(図3の306に対応する)。
【0050】
一例において、RSAは、小さい合成数n=15に対して適用される。従って、p=5、q=3、phi(n)=8である。また、e*d=1(mod phi(n))であるので、e=3、d=3となる。
【0051】
RSA暗号化テーブルは以下にて与えられ、全ての可能な平文xに対して、対応する暗号文が計算される。
【表1】
【0052】
以下の例は、整数Z15のリングのための入力-出力ペアを規定するものである。
【0053】
実施形態は、次いで、入力-出力仕様(constraint(=(half_pred 1 3 15)0))を解釈する。half_predは、未知の平文xが<n/2であるか否かを予測することを意味する。暗号解析者は、平文xを知らないが、対応する暗号文yを知っている。何故なら、それは明確に送られ、従ってyは公開されているからである。(half_pred 1 3 15)において、yは1であり、eは3であり、nは15である。(constraint(=(half_pred 1 3 15) 0))は、xの値が<n/2であり、0によって表されることを意味する。一方、(constraint(=(half_pred 9 3 15) 1))は、xの値が>n/2であり、1によって表されることを意味する。暗号解読者は、例を用いてこのような仕様を容易に構築することができる。
(constraint(=(half_pred 1 3 15) 0))
(constraint(=(half_pred 8 3 15) 0))
(constraint(=(half_pred 12 3 15) 0))
(constraint(=(half_pred 4 3 15) 0))
(constraint(=(half_pred 5 3 15) 0))
(constraint(=(half_pred 6 3 15) 0))
(constraint(=(half_pred 13 3 15) 0))
(constraint(=(half_pred 2 3 15) 1))
(constraint(=(half_pred 9 3 15) 1))
(constraint(=(half_pred 10 3 15) 1))
(constraint(=(half_pred 11 3 15) 1))
(constraint(=(half_pred 3 3 15) 1))
(constraint(=(half_pred 7 3 15) 1))
(constraint(=(half_pred 14 3 15) 1))
【0054】
実施形態は、次いで、以下のコマンドを実行することによって、合成器に攻撃アルゴリズムを生成/提案させる(図3の308に対応する)。以下に示されるように、この例において、合成器は、入力-出力例と文法とを用いて、攻撃アルゴリズムを自動的に推論した。これは、公開鍵暗号の暗号解読のためのプログラム合成の使用を示している。
$ ./cvc4-2020-05-29-x86_64-linux-opt --lang=sygus1 rsa_half.sygus
(define-fun half_pred((y Int) (e Int) (n Int)) Int (lsbOra(modMul y (enc 2 e n) n) n))
【0055】
合成された関数は、入力として暗号文yと公開パラメータe及びnとを取り、秘密メッセージの最上位ビットを予測することができるアルゴリズムを推論した。プログラム合成器は、LSBオラクルlsbOra、モジュロ乗算modMul、及び公開暗号化関数encを用いることによって関数を成功裏に推論した。
【0056】
上の例は、合成された関数が、訓練した例の構成だけでなく、全ての可能なe及びnについて、このLSBオラクルから最上位ビットを予測することを示している。half_predを繰り返し適用することにより、暗号解読者は、秘密メッセージxの全てのビットを容易に知ることができる。
【0057】
プログラム合成例を用いたDH暗号解読
RSA暗号解析を使用する上の例はオラクルを活用していた。しかしながら、実施形態はまた、そのようなオラクルが存在しないと仮定される場合であっても暗号解読に適用可能である。具体的には、プログラム合成を使用して曝け出され得るアルゴリズム内に数学的な弱点が存在し得る。例えば、汎用プログラム合成アルゴリズムを用いて、実施形態は、Diffie-Hellman(“DH”)鍵交換アルゴリズムの基本バージョンにおける秘密鍵から公開鍵のLSBを予測することができる。DH鍵交換アルゴリズムの仕様及び入力-出力ペアの例を用いて、実施形態において、プログラム合成器は、秘密鍵のLSBを成功裏に自動的に予測するアルゴリズムを生成することができる。
【0058】
DHを参照するに、2つのパーティが安全に通信するためには、暗号化及び復号に使用されることができる共通鍵kについて両者が合意しなければならない。DH鍵交換アルゴリズムは、両パーティが、以前の取り決め(例えば、クーリエサービス)なしに、パブリックチャネルを使用して共通鍵kに到達することができるという点で、この基本的な鍵合意問題を解決した。
【0059】
DHアルゴリズムは、以下に形式化される一方向関数を使用して定義される。具体的には、
pを素数とし、Zp={1,2,3,…,p-1}とする。
数論における基本的な結果の1つは、Zpが生成元(generator)gと呼ばれる特別な要素を含むことである。例えば、p=11;Zp={1,2,3,4,5,6,7,8,9,10}とする。Z11において、2は生成元であり、何故なら、Z11の全ての要素が、ある整数iに対して、mod pにおいて2として表されることができるからである。
pが生成元を含むので、Zpは巡回群(cyclic group)である。DH鍵交換アルゴリズムは、例えばZpなどの巡回群で定義される。
【0060】
DH鍵交換アルゴリズムの一例は、次の通りである。AliceとBobは共通鍵kについて合意を望む2つのパーティであるとする。“Alice”及び“Bob”は、コンピュータネットワークによって接続された2つのコンピュータアプリケーションと考えることができる。DHの目標は、メッセージを暗号化及び解読するためにそれらによって使用されることができる共有秘密鍵を確立することである。両者はp及びgについて公に合意しなければならない。実施形態において、p及びgは、米国国立標準技術研究所(“NIST”)によって又は他のソースによって定められ得る。以下のステップはDH鍵交換アルゴリズムを説明するものである:
ステップ1:Aliceが、(1,p)内の整数の秘密鍵xをランダムに選択する。同様に、Bobが、(1,p)内の秘密鍵yをランダムに選択する。
ステップ2:アリスが、A=g(mod p)をボブに送信する。
ステップ3:ボブが、B=g(mod p)をアリスに送信する。
ステップ4:アリスがBを計算し、ボブがAを計算する。B=A=gxyであるので、両者は同じ鍵k=gxyを有する。
【0061】
DH鍵交換アルゴリズムの安全性は、(1)公開値g、gを所与としてgxyを見つけることは困難である、又は(2)公開値g(又はg)を所与としてx(又はy)を見つけることは困難である、という仮定に基づいており、この問題は離散対数問題と呼ばれる。
【0062】
実施形態は、以下のようにプログラム合成を使用してDH関数の暗号解読を実行する。gを生成元とし、関数dh:Zp→Zpをdh(x)=g(mod p)=hとして定義する。
この関数dhは一方向であると広く考えられており、それが意味することは、dh(x)を所与としてxを見つけることが計算上困難であるということである。しかしながら、この定義は、入力xに関する部分的な情報がdh(x)から推論され得ないことを意味するものではない。
そのために、実施形態は、dh(x)から秘密xに関する部分情報をどのように導出するかを示すためにプログラム合成を適用する。例えば、以下の例は、プログラム合成がdh(x)から秘密入力xの最下位ビット(“LSB”)をどのように推論することができるかをここに示すものである。
【0063】
実施形態は、SMT言語構文を用いて、上述のDH関数を形式化する。
(define-fun dh((g Int) (x Int) (p Int)) Int
(mod(pow g(mod x (-p 1))) p)
)
【0064】
実施形態は、次いで、次のように文法を構築する:
(synth-fun lsb_pred((g Int) (p Int) (h Int)) Int
((Start Int (
g p h
(Constant Start)
(div Start Start)
(dh Start Start p)
))
)
)
上の文法は、整数除算(div)演算子、dh関数などのコンポーネントを含み、一定の整数を使用することが許される。
【0065】
実施形態は、次いで、入力-出力ペアでプログラム合成器を訓練する。入力-出力の例はZpで定義され、ここで、p=11及びg=2はZpの生成元である。
(declare-const p Int)
(assert(= p 11))
(declare-const g Int)
(assert(= g 2))
【0066】
実施形態は、[1 10]内の全ての整数xについてdh(x)を用いて以下の制約を宣言する。
【表2】

(constraint(=(lsb_pred g p 2) (lsb 1)))
(constraint(=(lsb_pred g p 4) (lsb 2)))
(constraint(=(lsb_pred g p 8) (lsb 3)))
(constraint(=(lsb_pred g p 5) (lsb 4)))
(constraint(=(lsb_pred g p 10)(lsb 5)))
(constraint(=(lsb_pred g p 9) (lsb 6)))
(constraint(=(lsb_pred g p 7) (lsb 7)))
(constraint(=(lsb_pred g p 3) (lsb 8)))
(constraint(=(lsb_pred g p 6) (lsb 9)))
(constraint(=(lsb_pred g p 1) (lsb 10)))
【0067】
cvc4ツールを使用する合成器は、以下のように実行される。
$cvc4-2020-05-29-x86_64-linux-opt --lang=sygus1 dh_lsb.sygus
以下の出力が得られる。
(define-fun lsb_pred((g Int) (p Int) (h Int)) Int(dh p (dh h (div p 2) p) p))
h=gとする。すると、上に示されたlsb_pred(g,p,h)は、xの最下位ビット(LSB)を予測することができる。この例は、プログラム合成がDH鍵交換アルゴリズムの一方向関数を解析することが可能であり、そして、暗号解析タスクを自動的に実行することが可能であることを示している。なお、推論された関数lsb_predは、訓練した例に対してだけでなく、全ての可能なp及びgに対しても真である。
【0068】
実施形態は更に、オラクルを所与として暗号システムを破ることがどれだけ困難であるかを評価するために使用されることができる。例えば、RSAとは対照的に、DHアルゴリズムのLSBオラクルは秘密鍵の他の全てのビットを効率的に復元するために使用され得ないと考えられている。プログラム合成器に、LSBオラクルをクエリするための異なる可能な道筋の空間を探索させることにより、暗号解読者は、例えば、オラクルがハイリスクなものであるか、又はオラクルを適用するための自明な道筋がないかなどの、新しい洞察を得ることができる。
【0069】
開示したように、実施形態は、例えばRSAなどの公開鍵暗号アルゴリズムの暗号解読のためのコンピュータ支援プロセスに関する。実施形態は、そのようなアルゴリズムを自動的に解析し、攻撃を自動的に生成する。
【0070】
開示したように、公開鍵暗号法では、一般に、秘密メッセージのハードコアビットが存在し、これが意味することは、それらのハードコアビットを予測するアルゴリズムへのアクセスを暗号解読者が持つ場合に、異なる入力に全く同じアルゴリズムを繰り返し適用することによってメッセージ全体を復元することができるということである。一例として、暗号化されたメッセージの最下位ビットは何ですか、という特定の質問に答えることができるオラクルが存在する。一般に、そのようなオラクルを賢く用いてメッセージ全体を解読するアルゴリズムを見つけ出すことは、非自明な暗号解読タスクである。そのために、実施形態は、暗号解読タスクのためにプログラム合成を適用する。実施形態は、秘密全体を解読するためにオラクルを体系的に用いるアルゴリズムを合成する。
【0071】
この明細書全体を通じて説明された本開示の機構、構造、又は特徴は、1つ以上の実施形態において任意の好適なやり方で組み合わされ得る。例えば、この明細書全体を通じての“一実施形態”、“一部の実施形態”、“特定の一実施形態”、“特定の実施形態”、又は他の類似の言葉の使用は、その実施形態に関連して説明される特定の機構、構造、又は特徴が、本開示の少なくとも1つの実施形態に含まれ得るということを指す。従って、この明細書全体を通じての“一実施形態”、“一部の実施形態”、“特定の一実施形態”、“特定の実施形態”、又は他の類似の言葉の言い回しの出現は、必ずしも全てが同じ群の実施形態を指すわけではなく、説明される機構、構造、又は特徴は、1つ以上の実施形態において任意の好適なやり方で組み合わされることができる。
【0072】
当業者が容易に理解することには、上述の実施形態は、開示されたものとは異なる順序のステップで、及び/又は開示されたものとは異なる構成の要素で実施されることができる。従って、この開示は、概説した実施形態を検討しているが、当業者に明白なことには、この開示の精神及び範囲内に留まりながら特定の変更、変形、及び代替構成が明らかになる。従って、本開示の境界を決定するためには、添付の請求項を参照すべきである。
図1
図2
図3
【国際調査報告】