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

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

▶ ゼットイーユー・テクノロジーズ・インコーポレイテッドの特許一覧

特表2023-509977対称非同期生成的暗号化のための方法
<>
  • 特表-対称非同期生成的暗号化のための方法 図1
  • 特表-対称非同期生成的暗号化のための方法 図2
  • 特表-対称非同期生成的暗号化のための方法 図3
  • 特表-対称非同期生成的暗号化のための方法 図4
  • 特表-対称非同期生成的暗号化のための方法 図5
  • 特表-対称非同期生成的暗号化のための方法 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-03-10
(54)【発明の名称】対称非同期生成的暗号化のための方法
(51)【国際特許分類】
   H04L 9/08 20060101AFI20230303BHJP
   H04L 9/32 20060101ALI20230303BHJP
【FI】
H04L9/08 C
H04L9/08 E
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】有
(21)【出願番号】P 2022542431
(86)(22)【出願日】2021-01-11
(85)【翻訳文提出日】2022-09-09
(86)【国際出願番号】 CA2021050018
(87)【国際公開番号】W WO2021138747
(87)【国際公開日】2021-07-15
(31)【優先権主張番号】62/959,572
(32)【優先日】2020-01-10
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】521155900
【氏名又は名称】ゼットイーユー・テクノロジーズ・インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ジャン-フィリップ・ボーデ
(72)【発明者】
【氏名】フランソワ・デュマ
(57)【要約】
変異暗号化鍵を使用するデータ暗号化の方法が開示されている。この方法は、暗号化鍵を生成し、暗号化鍵値を変異させるか、または変化させるためにコーデックスを利用する。暗号化鍵は、乱数発生器を使用して生成され得る。変異前状態にある暗号化鍵値は、コーデックスと一緒に、暗号化鍵に対する次の有効な値を生成するために使用される。未暗号化メッセージデータは、暗号化鍵を変異させるためにコーデックスと一緒に使用され得る。したがって、有効な暗号化鍵および未暗号化メッセージまたは暗号解読に成功したメッセージが、各端で暗号化鍵を次の鍵の変異後状態に変異させるために必要である。
【特許請求の範囲】
【請求項1】
N個の二進数字のベースから作られるインデックスおよびコーデックスを生成する方法であって、前記インデックスはコーデックスの生成のための参照として使用されるすべての組み合わせの順序付きリストであり、
前記コーデックスは、暗号化鍵を使用して作成されたすべての組み合わせのランダムリストを含み、
前記コーデックスは、固有であり、通信チャネルを確立するために2人以上のユーザの集合の間で作成される、方法。
【請求項2】
Nは、8、16、32、および64のうちの1つである、請求項1に記載の方法。
【請求項3】
各々が固有の名前空間を有する任意の数の前記コーデックスが、前記ベースおよびハッシュ関数を使用して生成され得る、請求項1に記載の方法。
【請求項4】
前記ハッシュ関数は、MD5である、請求項3に記載の方法。
【請求項5】
前記コーデックスは、少なくとも2つの層を含み、各層は、組み合わせの、ランダム化された異なる集合を含む、請求項1に記載の方法。
【請求項6】
前記組み合わせは、層**ベースとして計算される、請求項5に記載の方法。
【請求項7】
第1のユーザと第2のユーザの間のハンドシェイクのための対称暗号化鍵を生成する方法であって、
乱数生成器(RNG)において、
i)前記RNGにおいて前記第1のユーザおよび前記第2のユーザから数字の要求を受信するステップと、
ii)前記RNGにおいて数の第1および第2のリストを生成するステップと、
iii)前記数に関連付けられているシンボルを含む参照テーブルを使用して前記第1および第2のリストを解析するステップと、
iv)第1および第2のシンボルリストをそれぞれ前記第1および第2のユーザに送信するステップとを含み、
前記リストは、チャネル作成要求または受入として送信されるべき新しい固有鍵を作成するために組み合わされる、方法。
【請求項8】
前記対称暗号化鍵は、2048個のシンボルを含む、請求項7に記載の方法。
【請求項9】
前記参照テーブルは、大文字、小文字、特殊文字、および数からなる群から選択された90個のシンボルを含む、請求項7に記載の方法。
【請求項10】
前記参照テーブルは、使いやすいように引用符を除外する、請求項7に記載の方法。
【請求項11】
前記引用符は、シングル引用符およびダブル引用符のうちの一方である、請求項10に記載の方法。
【請求項12】
変異暗号化鍵およびコーデックスを使用する、データの暗号化の方法であって、
i)変異前状態にある前記暗号化鍵の値を使用してオフセットを作成するステップと、
ii)暗号化前データの最初のN個のバイトの一時的記録をエントロピーリストとして保持するステップと、
iii)前記データを暗号化するステップと、
iv)前記最初のN個のバイトを使用して前記暗号化鍵値を変異させて前記暗号化鍵の変異後状態の変異した鍵値を作成するステップと、
vi)前記変異した鍵値を前記現在の暗号化鍵として保存するステップとを含む方法。
【請求項13】
前記暗号化鍵の変異値は、受信バイトを使用して前記コーデックスの固有の再シャッフリングを確実にする、請求項12に記載の方法。
【請求項14】
前記暗号化鍵およびコーデックスの所有者のみが、変異後状態へ前記暗号化鍵の値を変異させ得る、請求項13に記載の方法。
【請求項15】
有効な暗号化鍵値は1回のみ存在する、請求項13に記載の方法。
【請求項16】
ステップi)からv)までを繰り返すステップをさらに含み、前記暗号化鍵の各変異は、前記暗号化鍵の前の値に依存する、請求項12に記載の方法。
【請求項17】
前記変異前状態の暗号化値の値の総当たりの推測のための時間枠は、前記変異後状態までのみ続く、請求項12に記載の方法。
【請求項18】
鍵変異は、疑似乱数を使用して達成される、請求項12に記載の方法。
【請求項19】
暗号化鍵は楕円曲線に基づかない、請求項12に記載の方法。
【請求項20】
前記コーデックスおよび有効な暗号化鍵状態が知られなければ、前記暗号化鍵を暗号解読するために総当たりのみが適用され得る、請求項14に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般的に、対称暗号化のファミリーに含まれる生成的暗号化という新しいファミリー内の暗号の分野に関するものであり、より具体的には、対称非同期生成的暗号化のための方法に関するものである。
【背景技術】
【0002】
歴史的に、非対称暗号化は、極めて難しい楕円曲線の数学的課題および/または素数を解くという強い概念に依存している。
【0003】
楕円曲線を利用する概念は、1985年にワシントン大学のNeal Koblitzによって、また別にIBMのVictor Millerによって暗号に使用することに関して提案された(https://searchsecurity.techtarget.com/definition/elliptical-curve-cryptographyを参照)。楕円曲線暗号(ECC)は、より高速で、より小さく、より効率的な暗号鍵を作成するために使用できる楕円曲線理論に基づく公開鍵暗号化技術である。ECCは、非常に大きな素数の積として生成する従来の方法の代わりに楕円曲線方程式の特性を通じて鍵を生成する。
【0004】
産業界では、楕円曲線の使用に関して、まだいくつかの懸念がある。Hewlett Packard社の研究者であるNigel Smartは、ある種の曲線が信じられないほど脆弱であるという欠陥を発見した。しかし、Certicom社のPhilip Deckは、脆弱な曲線がある一方で、ECCを実装する者はどの曲線が使えないかを知っておかなければならないと言っている。彼は、ECCが世界中ですべてのデバイスにわたって実装することが可能な技術としての固有の潜在力を有していると確信している。Wired Magazineで引用されたDeckによれば、「それ(すなわち、すべてのコンピューティングデバイスにわたって相互運用可能な暗号化システム)を実現できる唯一の方法は、楕円曲線」である。
【0005】
ECCを使用するか、純粋な素数RSA(Rivest-Shamir-Adleman)を使用するかに関わらず、課題は、秘密、すなわち秘密鍵を理解する能力を得るために課題を解くのが非常に困難であることに依存している。
【0006】
現在、古典的なコンピューティングパラダイムでは、これらの課題を突破することはほぼ不可能であり、達成するためには膨大な計算能力と少なくとも100年ほどの年月を要するであろう。
【0007】
ここ数年に出現した量子計算科学は、計算能力は約2年毎に2倍になるというムーアの法則などの確立されている概念を根本的に変えてしまった。しかしながら、量子計算能力は、指数関数的に増大している。これらのコンピュータの一般的利用にはまだいくつかの重大な制限があるけれども、5~10年という限られた期間内で、量子コンピュータを利用すれば、古典的な暗号を数分で破り、さらには数秒で破ることすらできるようになると予想できる。数学方程式または課題は、可能な限り難しいものであっても、最終的にはより強力なアルゴリズムによって計算されてしまうという欠陥がある。
【0008】
別の欠陥は、パターン認識アルゴリズムが、いくつかの状況において、自然言語認識に従って動作し、繰り返しを識別できることであろう。そのような方法の使用は、悪意のある行為主がある数のシンボルを解読することを可能にし、したがって、実際の鍵を破ることなく暗号化されたメッセージの内容のリバースエンジニアリングを可能にする。これは非常に困難であるだけでなく、多くの時間および多大なコストも要することに留意することが重要である。
【0009】
最後の困難は、現在の非対称暗号化が、一般的に、2-way暗号化の形態で、またはルート認証局として、のいずれかで、特定の鍵ペアの再使用に依存していることであろう。これにより、国家、非国家、および悪意のある行為主が、政府データベース、金融情報、医療情報、および軍事情報などの、潜在的機密情報を、まだ重要性がある(その可能性は高い)ことを期待して将来隠された手段を使用して解読しようと考えて記録する状況が起こる。大半の政府データベースの身元情報および医療情報は持続的であり、今後10年間にわたって依然として重要性を有する可能性がある。
【発明の概要】
【課題を解決するための手段】
【0010】
本開示は、数学方程式を取り除く、したがって、総当たりのみのクラッキングの可能性を強制すること、鍵破り操作の好機を大幅に制限する、各暗号化/復号化に対する鍵変異可能性を有効にすること、および暗号化秘密を推測する確率的閾値をとてつもない、ほぼ無限大の数に拡大することによって、従来技術において識別された欠陥を軽減することを目的としている。
【0011】
本発明の一態様によれば、N個の二進数字のベースから作られるインデックスおよびコーデックスを生成する方法が提供され、インデックスはコーデックスの生成のための参照として使用されるすべての組み合わせの順序付きリストであり、コーデックスは暗号鍵を使用して作成されたすべての組み合わせのランダムリストを含み、コーデックスは固有であり、通信チャネルを確立するために2人以上のユーザの集合の間に作成される。
【0012】
本発明の別の態様によれば、Nは、8、16、32、および64であってよい。
【0013】
本発明の別の態様によれば、第1のユーザと第2のユーザとの間のハンドシェイクのための対称暗号化鍵を生成する方法が提供される。この方法は、乱数生成器(RNG)において、RNGにおいて第1のユーザおよび第2のユーザから数字の要求を受信することと、RNGにおいて数の第1および第2のリストを生成することと、それらの数に関連付けられているシンボルを含む参照テーブルを使用して第1および第2のリストを解析することと、第1および第2のシンボルリストをそれぞれ第1および第2のユーザに送信することとを含み、これらのリストは、チャネル作成要求または受入として送信されるべき新しい固有鍵を作成するために組み合わされる。
【0014】
本発明のさらに別の態様によれば、変異暗号化鍵およびコーデックスを使用するデータの暗号化の方法が提供され、この方法は、変異前状態の暗号化鍵の値を使用してオフセットを作成することと、暗号化前データの最初のN個のバイトの一時的記録をエントロピーリストとして保持することと、データを暗号化することと、最初のN個のバイトを使用して暗号化鍵値を変異させ、暗号化鍵の変異後状態の変異した鍵値を作成することと、変異した鍵値を現在の暗号化鍵として保存することとを含む。
【0015】
添付図面において1つまたは複数の実施形態が例示される。
【図面の簡単な説明】
【0016】
図1】本発明の一実施形態の例示的なインデックス生成プロセスを示す流れ図である。
図2】例示的な暗号化鍵生成プロセスを示す概略ブロック図である。
図3】例示的なコーデックス生成プロセスを示す概略ブロック図である。
図4】例示的な鍵変異プロセスを示す概略ブロック図である。
図5】例示的な暗号化プロセスを示す概略ブロック図である。
図6】例示的な暗号解読プロセスを示す概略ブロック図である。
【発明を実施するための形態】
【0017】
「頂部」、「底部」、「上方」、「下方」、「左」、「右」、「垂直」、および「横方向」などの、方向を示す用語は、相対的な参照のみを提供することを目的として以下の説明で使用され、物品が使用中にどのように位置決めされるか、またはアセンブリ内に、もしくは環境に関してどのように装着されるかについての何らかの制限を示唆することを意図していない。本明細書において、「a」または「an」(日本語で「ある(1つの)」)という語は「comprising」(日本語で「含む」、「備える」)という語と併せて使用されているときに「1つの」を意味するものとしてよいが、「1つまたは複数の」、「少なくとも1つの」、および「1つまたは1つよりも多い」の意味とも矛盾しない。単数形で表現される任意の要素は、その複数形も包含する。複数形で表現される要素は、その単数形も包含する。本明細書で使用される「複数」という用語は、1つよりも多いことを意味し、たとえば、「複数」という用語は、2つ以上、3つ以上、4つ以上、または同様の言い回しを含む。
【0018】
本開示において、「備える」、「有する」、「含む」、および「収容する」という言い回し、ならびにそれらの文法的変形は、包括的または非限定的であり、追加の、記載されていない要素および/または方法のステップを除外しない。組成、使用、または方法に関連して本明細書において使用されるときの、「から本質的になる」という言い回しは、追加の要素、方法のステップ、または追加の要素および方法のステップの両方が存在し得ること、また、これらの追加は、記載されている組成、方法、または使用が機能する方式に実質的に影響しないことを示す。組成、使用、または方法に関連して本明細書において使用されるときの、「からなる」という言い回しは、追加の要素および/または方法のステップの存在を除外する。
【0019】
コーデックスは、ジェネシスおよびイニシエータ鍵を使用して割り当てられたランダムな順序の(符号化*ビット)のすべての組み合わせを含む層を有するデータベースである。コーデックスは、最小で2層、最大で256層から構成される。
【0020】
暗号化および復号化に使用される二進数字のベース数を符号化する。インデックス層とコーデックス層は、符号化*ビットの(2**符号化)組み合わせから構成される。
【0021】
エントロピーは、現在の鍵シンボルを鍵シンボルの新しい集合に変異させるために使用される、整数の形態の信号の概念である。これに使用される整数は、受信または送信バイトのリストから取られる。したがって、有効な鍵および正常に暗号解読されたメッセージがある場合にのみ、鍵を次の鍵有効状態へ変異させることができる。
【0022】
ジェネシス鍵は、2~48のシンボル鍵であり、コーデックス作成時に一度だけ使用される。
【0023】
イニシエータ鍵は、コーデックス作成時および初期有効鍵状態としての両方で使用される。
【0024】
鍵シンボルは、90の文字、大文字、小文字、数、および特殊文字のリストから選ばれたシンボルである。すべてのシンボルは、0~89の間の値と関連付けられる。
【0025】
鍵状態は、現在の鍵の「状態」を表す2048個のシンボルの現在の集合である。
【0026】
層は、(符号化*ビット)のすべての組み合わせの固有の分布から構成される。いかなる層も決して同じであってはならない(ほとんど起こり得ない衝突)。
【0027】
有効鍵状態は、2048個のシンボルの現在の集合が同期され、新しいメッセージを暗号化するかまたは暗号解読するかのいずれかを行うことができるときの状態である。有効鍵状態は、チェックサムの存在によって確認され、メッセージまたはメッセージの内容のどの部分をも明らかにすることなくメッセージの暗号解読の成功を受信者が確認することを可能にする。
【0028】
対称非同期生成的暗号化(SAGE)は、通信するために変異可能暗号化鍵の非同期的な同期処理に依存する。このアルゴリズムは、乱数生成(RNG)、コーデックス、および暗号化鍵の3つの主要な要素を使用する。
【0029】
乱数生成(RNG)は、複数の方法を通じて達成することも可能である。例示的な一方法は、特許出願中のブロックチェーンベースの乱数生成器を使用してランダムシードを生成する国際公開第WO/2020/146955号、発明の名称「A Method for Generating Random Numbers in Blockchain Smart Contracts」として公開されている特許出願において説明されている、本開示の出願人の方法である。各参加者はスマートコントラクトにシードを提供し、スマートコントラクトは各参加者によって提供されたシードおよびブロック情報に基づき新しい乱数を生成する。
【0030】
コーデックスは、通信チャネルを作成した後、両方のエンドユーザによって作成される、ランダムに割り当てられた二進組み合わせ分布の共通の参照テーブルである。各コーデックスは、最小で2層、最大で256層を有し、各層は、nビットのすべての可能な二進順列の完全なランダム分布である。使用されるベース符号化に応じて、層の長さは2**nビット(256:8ビット、65536:16ビット、4294967296:32ビット、など)である。したがって、総当たりのベース確率は、2**(2**ベース符号化)となるであろう。
【0031】
暗号化鍵は、任意のRNG方法を使用して、0~89の間の値を有する2048個のシンボルを生成することで生成される。総当たりのベース確率は、約90**2048となるであろう。
【0032】
コーデックスは、固有であり一度だけ使用されるジェネシス鍵と、最初の通信で使用されるべきイニシエータ鍵とを組み合わせた使用から生成される。これらの鍵は、これ以降ハンドシェイクと称される、2人のエンドユーザ間の2048個のシンボルの交換された集合の組み合わせを使用して生成される。両方のエンドユーザが、今では、4096個のシンボルを共有している。ハンドシェイクは、2048個のシンボルの2つの組み合わされた集合に分解され、各集合は各エンドユーザの半分、ジェネシス鍵、およびイニシエータ鍵から導出される。ハンドシェイクは通信のための要求として働き、その受入は、受信者が2048個のシンボルのそのハンドシェイクで応答することによって解決される。
【0033】
コーデックスは、受信バイトおよび送信バイトをマッピングするために使用される。暗号化鍵は、本明細書においてコーデックスのシャッフリングと称されるバイトマッピングの実際の位置決めに対するランダムで変異可能なオフセットを生成するために使用される。このプロセスを視覚化するために、鍵の各数字が、モジュロバイト参照テーブル上でルーレットが右回りし、次いで左回りするのと同様にペイロードの各バイトの位置をオフセットすると想像することも可能である。また、銀行で使用されている番号同期技術に類似していると考えることも可能である。最後から新しい有効状態を推測するベース確率は、およそ10**2048であろう。
【0034】
次いで、ペイロードが暗号化または暗号解読されるたびに、受信バイトは鍵変異に対する参照として機能し、したがって使用後に鍵を変更する。エンドユーザがループ内に留まる唯一の方法は、受信バイトの暗号解読に成功すること、したがって、送信者と同じ有効状態に鍵を変異させることである。
【0035】
両方のエンドユーザの鍵の同期は、各エンドユーザの側で非同期に行われ、パケットストリーミングの場合のように、たとえば1秒間に複数回、極めて高速に行われる。毎回同期が達成されなければならない、さもなければ暗号解読する能力が失われるということに留意することが重要である。これは、通信チャネルにエンドユーザを包含することおよび通信チャネルからエンドユーザを除外することなどの利点を有し得る。
【0036】
任意の数のコーデックスが並行して作成され得る。任意の数のエンドユーザが、同じコーデックスを使用することができる。任意の数のエンドユーザが同じイニシエータ鍵を使用することができるが、全員が同じメッセージスレッドを読んでいない限り、誰も同じ鍵状態を有することはない。
【0037】
性能に関しては、コーデックスは、ジェネシス鍵から導出された決定論的プロトコルからローカルエンドユーザデータベース内に生成される。バイトのマッピングおよび取り出しのプロセスは、利用可能なCPUコアによって並行して行われる。暗号化されたメッセージは圧縮される。
【0038】
インデックス生成
【0039】
インデックスは、コーデックス作成を加速する、性能を目的として構築されたユーティリティである。インデックスは、nビット(すなわち、8、16、32、64)の順序正しい二進組み合わせの参照テーブルである。インデックスは1つの層を有し、(2**ベース符号化)の長さを有する。インデックスは、コーデックス生成器によってランダムな方法で使用され、固有のコーデックスにシャッフルされる。
【0040】
図1を参照すると、100において、インストール時にソフトウェアセットアップが起動され、インデックスおよびコーデックスデータベース(Db)テーブルをセットアップし、依存関係をインストールし、コーデックス生成、鍵生成、および符号化/復号化のためのマイクロサービスを公開する。
【0041】
101で、インデックス生成は、選択されたベース符号化のために起動される。ユーザは、1つまたは複数のオプションを、8ビット符号化(インデックス長=256)、16ビット符号化(インデックス長=65,536)、32ビット符号化(インデックス長=4,294,967,296)、64ビット符号化(インデックス長=18,446,744,073,709,551,615)の間で選択する。
【0042】
102で、二進列生成器は、選択されたnビットのすべての可能なバリエーションを作成するために使用される。
【0043】
103で、二進列生成器は、バイト列形式のすべての可能なバリエーションのリストを返す。
【0044】
104で、インデックスは、index_base(n)テーブル内に保存される。例示的なテーブルスキーマは、次のように見えるものとしてよい。
base(n): {
position(int) : bytes string(string),
position(int) : bytes string(string),
position(int) : bytes string(string),
など
}
【0045】
暗号化鍵生成
【0046】
暗号化鍵生成は、両方のユーザがそれらのユーザの側からランダム性を提供することを除外する半決定論的パターンで行われる。エンドユーザは、ランダム性または疑似ランダム性ソースを選択することができるが、乱数生成(RNG)技術が強く推奨される。
【0047】
鍵生成は、エンドユーザのための通信チャネルの作成にランダム性が含まれる重要なプロセスである。通信チャネルは、固有のコーデックスと、本明細書においてイニシエータ鍵と称される初期暗号化鍵との組み合わせである。
【0048】
コーデックスの固有性は、ジェネシス鍵およびイニシエータ鍵の2つの鍵の組み合わされた使用によりもたらされる。
【0049】
次に、図2を参照すると、201において、新しい鍵作成要求があると、エンドユーザは、同時に、または他の仕方で、のいずれかで、RNGソースに数字を要求する。この例では、国際公開第WO/2020/146955号、発明の名称「A Method for Generating Random Numbers in Blockchain Smart Contracts」として公開されている特許出願において説明されている前述の方法が使用される。両方のエンドユーザは、RNGスマートコントラクトに数字要求を送信する。
【0050】
202で、スマートコントラクトは、0~89の間の値の1024個の整数の2つのリストを返す。
【0051】
203で、数の2つのリストは、シンボル関連値を含む参照テーブルを使用して解析される。これらの値は必須であり、コーデックス生成、符号化、および復号化において暗号化鍵によって使用される。
【0052】
204で、1024個のシンボルの2つのリストがエンドユーザに返される。これらは、全く新しい固有鍵を作成するために組み合わせることができ、チャネル作成要求または受入として送信される。
【0053】
既定では、2つの半鍵は、ハンドシェイクプロセスにおいて必要とされるジェネシス鍵およびイニシエータ鍵に対応する。
【0054】
コーデックス生成
【0055】
コーデックスは、複数の層において列形式のすべてのnビットの組み合わせに対してランダムに割り当てられた位置の固有の集合である。各層は、それ自身の完全なバリエーションの集合であり、特定のコーデックスの任意の他の層とは異なるランダムな順序である。同じコーデックス値を2回有する確率は非常に低く、ベース符号化に依存する。これは、おおよそ(層**(2**ベース符号化))である。
【0056】
コーデックスは、それ自身のDbテーブルcodex_base(n)に保存される。これは、バイト列に対して位置を割り当てるための参照テーブルとして働く。受信または送信バイトを符号化された位置にマッピングするために使用される。バイトの位置および長さを参照することによって、損失なくマッピングされること、および取り出されることが可能になる。
【0057】
図3を参照されたい。
【0058】
301:コーデックス生成は、通信チャネル作成としても記述できる。これは、ここでハンドシェイクと称される要求および受入のプロセスを通じて開始される。
【0059】
この場合、2つのエンドユーザがハンドシェイクプロセスを開始する。2人より多いエンドユーザが、共通コーデックスの作成に参加できることに留意することが重要である。
【0060】
302:第1のエンドユーザは、各々1024個のシンボルの2つのリストの形態のハンドシェイク要求を受信する。その上、このハンドシェイク要求を受け入れるために、エンドユーザは、1024個のシンボルの2つのリストを返す。
【0061】
303:エンドユーザ要求および受入は、また、コーデックス生成に使用されるべきベース符号化を示す値から構成される。
【0062】
304:要求が受け入れられると、両方のエンドユーザは、1024個のシンボルの4つのリストで終わる。これから、両方のユーザは、それらのリストを2つの鍵、すなわち、ジェネシス鍵およびイニシエータ鍵に組み合わせる。要求側のエンドユーザは、既定で最初の位置として使用されるが、これはハンドシェイクで任意選択の値を示すことによってオーバーライドされ得る。
【0063】
305:エンドユーザは、今では、各々2048個のシンボルの2つの鍵を有している。
【0064】
ジェネシス鍵(固有であり、コーデックス生成時に一度だけ使用される)
【0065】
イニシエータ鍵(通信開始時の初期状態で使用される)
【0066】
306:次に各エンドユーザは、ジェネシス鍵およびイニシエータ鍵の組み合わせから導出される決定論的アプローチを使用してクライアントサイドでコーデックス生成を開始する。
【0067】
307:コーデックスの各層は、(ベース符号化*ビット)の(2**ベース符号化)値から構成される。どの層もどの前の層とも同じ順序ではなく、それらは最小数2および最大数256を有する。
【0068】
1つのコーデックス層を推測する大まかな確率は、(2**ベース符号化)であり、完全コーデックスについては、(層**(2**ベース符号化))である。
【0069】
308:コーデックスは、codex_base(n)[layer]テーブルに保存される。スキーマは次のように見える。
codex_base(n)[layer] :
{
position(int): bytes string (string),
position(int): bytes string (string),
position(int): bytes string (string),
など
}
【0070】
鍵変異
【0071】
鍵変異は、プロトコルの中心概念である。これは、成功した通信ループおよび固有の共通参照テーブル(コーデックス)を使用する非同期鍵同期の論理で動作する。鍵変異は、符号化および復号化の方法によって達成される。変異は、処理されたバイトによって開始され、任意選択で、ハンドシェイクにおいて交換された共通の秘密参照によって開始される。
【0072】
任意選択で、未暗号化バイトのチェックサムが、エンドユーザ間で送信され、それにより復号化が成功したことを確認することができ、したがって新しい鍵状態を検証する。
【0073】
次に図4を参照されたい。
【0074】
401:エンドユーザは、別のエンドユーザに送信されるべきメッセージを符号化する準備をする。イニシエータ鍵は、今では、変異前状態にある、すなわち、鍵状態はまだ変化していない。
【0075】
402:エンドユーザは、通常通りバイトを処理する(「暗号化」参照)。
【0076】
403:エンドユーザは、現在の符号化されたメッセージから最大2048個の最初のバイトの一時的記録を保持する。これは、エントロピーと称されることになる。
【0077】
404:現在の変異前鍵の状態は、通常通りマッピングされた現在の位置へのオフセットを作成するために使用される(「暗号化」を参照)。
【0078】
405:暗号化が行われ、位置はマッピングされて、オフセットされる。
【0079】
406:鍵変異は、暗号化前バイトリストを使用することで行われる。各バイトは、現在のシンボル値から始まるモジュロ(90)を使用して、すべてのシンボル値を修正する。
【0080】
407:鍵は、新しい有効鍵状態として保存される。
【0081】
408:受信側エンドユーザは、イニシエータ(変異前)鍵状態から開始する。
【0082】
409:エンドユーザは、通常通り符号化された位置マッピングを処理する(「暗号解読」を参照)。
【0083】
410:エンドユーザは、イニシエータ鍵を使用して現在の有効オフセットを決定する。
【0084】
411:復号化が行われ、次に受信側エンドユーザは未暗号化バイトを読むことができる。
【0085】
412:エンドユーザは、最大2048個の最初のバイトをエントロピーとして収集する。
【0086】
413:次に受信側エンドユーザは、鍵を新しい有効状態に変異させることができる。
【0087】
414:新しい有効鍵状態は保存される。エンドユーザは、次に、新しいメッセージを送信するか、新しい受信を待つことができる。
【0088】
暗号化
【0089】
暗号化(または符号化)は、固有の共通参照テーブルである、コーデックスを使用することによって行われる。コーデックスは、ランダムに割り当てられたバイト列を位置数値にマッピングする。位置およびバイト長を記録することによって、バイトは、損失なく取り出され得る。
【0090】
任意選択で、データが符号化される毎に、未暗号化データのチェックサムが保持され、復号化の成功の確認のために送信される。
【0091】
符号化は、固有のファイルまたはバッファのいずれかで行うことができる。いずれの場合も、この方法は、符号化された位置マップまたは要求されたバイトリストを返す。ファイルの場合、ファイルは操作の終了時に保存される。バッファの場合、符号化されたバイトは、そのまま残され、後でコードベースによって連結される。
【0092】
図5を参照すると、符号化は、ファイルまたはバッファバイトパケットのいずれかで実行される。
【0093】
501:各バイトまたはバイトの組み合わせが処理される。(8:1バイト、16:2バイト、32:4バイト、64:8バイト)であり、現在の層に出現する順にその最初に出現するインスタンスを使用してマッピングされる。
【0094】
例:
【0095】
ベース16:受信2バイト: 00100011 10100110
【0096】
各Dbテーブルエントリは16ビットを有する。
【0097】
第1のバイト(00100011)が、位置[0:バイト長]で(n)Db項目から検索される。
【0098】
第2のバイトが、位置[8:バイト長+8]で(同じn)Db項目から検索される。
【0099】
同じ位置ですべての条件にマッチする最初のエントリは、マッピングの有効位置として記録され、バイト長および層とともにリストに追記される。
【0100】
502:位置が定義されるたびに、現在の有効鍵状態は、鍵シンボルを整数リストモジュロとして使用して記録された位置をオフセットするために使用される。これは各位置に対して鍵モジュロ上で反復し、一連のルーレットと同様に、右(+)から左(-)に切り替わるオフセット値として整数値を使用する。
【0101】
503:現在のエントロピー状態(未暗号化バイトから整数)は、リストに記録される。
【0102】
504:オフセットは、位置に適用される。
【0103】
505:符号化ファイルは保存されるか、または符号化されたパケットが返される。
【0104】
506:現在の有効鍵状態は、エントロピーリストを使用して変異される。各エントロピー数字は、完全な鍵値、正しい順序でのすべてのエントロピー関連バイトの知識、および任意選択でハンドシェイクで交換された共通秘密参照を修正し、これらはすべて新しい有効鍵状態を定義するために必要なものである。
【0105】
507:新しい有効鍵状態は保存される。
【0106】
暗号解読
【0107】
暗号解読または復号化は、固有の共通参照テーブル、コーデックス、および現在の有効鍵状態を使用することによって行われる。コーデックスは、対応するバイトを一連の位置、バイト長、および層参照にマッピングすることを可能にする。
【0108】
任意選択で、未暗号化バイトのチェックサムが暗号化されたメッセージとともに送信され、したがって、エンドユーザは、メッセージの暗号解読に成功して有効鍵状態にあることを確認することができる。
【0109】
復号化は、完全に符号化されたファイル、またはバッファからの符号化されたストリームのいずれかからも行うことができる。これは未暗号化バッファパケットの未暗号化ファイルを返す。バッファの場合、バイトはコードベースによって連結されるように残される。
【0110】
図6を参照されたい。
【0111】
600:エンドユーザは、符号化されたファイルまたはバッファパケットから符号化された位置を抽出する。
【0112】
601:エンドユーザは、現在の有効鍵状態からオフセットリストを決定する。
【0113】
602:エンドユーザは、位置および層をバイト列と照合する。バイト列から、各バイトがバイト長およびその順序を使用して抽出される。
【0114】
例:
【0115】
ベース32:受信バイト集合: 00011111 01010101 01110000 00111100
【0116】
各Dbエントリは32ビットを有する。
【0117】
オフセットが、有効な位置を抽出するために、位置リストに適用される。
【0118】
有効な位置に対応するバイト列が抽出される。
【0119】
第1のバイトが、位置[0:バイト長]から抽出される。
【0120】
第2のバイトが、位置[8:バイト長+8]から抽出される。
【0121】
第3のバイトが、位置[16:バイト長+16]から抽出される。
【0122】
第4のバイトが、位置[24:バイト長+24]から抽出される。
【0123】
バイトが、最終バイト戻りリストに追記される。
【0124】
603:最初の2048個までの復号化されたバイト整数値が、鍵変異のためにエントロピーリストに記録される。
【0125】
604:未暗号化バイトは、ファイルに保存されるか、または未暗号化バイトパケットが返される。
【0126】
605:現在の鍵有効状態は、エントロピーリストを使用して変異する。
【0127】
606:新しい有効鍵状態は保存される。
【0128】
プロトコル-チャネルセットアップ(AliceとBob)
【0129】
チャネルセットアップステップ1-ハンドシェイク要求
【0130】
Aliceは、Bobとの通信チャネルを開始することを望んでいる。
【0131】
Aliceは、自分のジェネシスおよびイニシエータ半鍵を生成する。
【0132】
Aliceは、Bobに対して、2つの半鍵を提出し、場合によっては任意の種類の共通秘密参照などの任意選択の値を転送する形で、通信チャネル要求を送信する。
【0133】
チャネルセットアップステップ2-ハンドシェイク受入
【0134】
Bobは、Aliceの要求を受信する。
【0135】
Bobは、自分のジェネシスおよびイニシエータ半鍵を生成する。
【0136】
Bobは、Aliceに、2つの半鍵および場合によっては転送する任意選択の値の形で、Bobの受入を送信する。
【0137】
Aliceは、Bobの半鍵を受信する。
【0138】
ハンドシェイクは成功したとみなされる。
【0139】
チャネルセットアップステップ3-コーデックス生成
【0140】
AliceおよびBobは両方とも、ジェネシスおよびイニシエータ鍵の組み合わせから導出される共通のコーデックスを生成する。
【0141】
AliceおよびBobは、次に、コーデックスおよびイニシエータ鍵を有し、ジェネシス鍵は一度だけ使用され、この段階で破棄される。
【0142】
通信チャネルは、現在有効であると考えられ、メッセージの送受信に使用することができる。
【0143】
プロトコル-チャネルメッセージング(AliceとBob)
【0144】
メッセージチャネルステップ1-Aliceはメッセージを符号化する
【0145】
Aliceは、現在の通信チャネルに割り当てられている共通コーデックスおよびAliceの現在の有効鍵状態を使用して、メッセージを符号化する。
【0146】
メッセージチャネルステップ2-Aliceの鍵が変異する
【0147】
Aliceは、送信バイトから抽出されたエントロピーを使用して、鍵状態を変異させる。
【0148】
Aliceは、今、Aliceの新しい鍵状態を有する。
【0149】
メッセージチャネルステップ3-Aliceはメッセージを送信する(ファイルまたはバッファ)
【0150】
Aliceは、圧縮符号化された位置マップの形で、メッセージをBobに送信する。
【0151】
メッセージチャネルステップ4-Bobはメッセージを受信する
【0152】
Bobは、圧縮された位置マップの形で、Aliceのメッセージを受信する。
【0153】
メッセージチャネルステップ5-Bobはメッセージを復号化する
【0154】
Bobは、このチャネルに対する共通コーデックスおよびBobの現在の有効鍵状態を使用してメッセージを復号化する。
【0155】
Bobは、暗号解読に成功したバイトからエントロピーを抽出する。
【0156】
メッセージチャネルステップ6-Bobの鍵が変異する
【0157】
Bobは、エントロピーを使用して現在の有効鍵状態を変異させる。
【0158】
Bobは、今、Aliceの新しい有効鍵状態に対応する新しい有効鍵状態を有する。
【0159】
方法のリスト:
【0160】
ConvertToInt(key_list):
【0161】
鍵シンボルを対応する整数に変換する。
【0162】
Decrypt(cipher_message, key, encoding, codex):
【0163】
符号化されたメッセージを、固有のコーデックスおよび有効鍵状態を使用して復号化する関数。これは、また、鍵を変異させ、暗号解読が成功したことを検証するためにチェックサムを返す(確認受領として送信者に返される)。
【0164】
Encrypt(message, key, encoding, codex):
【0165】
メッセージを、固有のコーデックスおよび有効鍵状態から導出された暗号文を使用して暗号化する関数。これは、また、鍵を変異させ、暗号解読が成功したことを検証するためにチェックサムを返す。
【0166】
GenerateAllBinaryString(e = 符号化):
【0167】
(符号化*ビット)のすべての組み合わせを生成する。
【0168】
例:8ビットは8ビットの256通りの組み合わせを生成する。
【0169】
GenerateCodex(g =ジェネシス鍵、i =イニシエータ鍵、e =符号化、num =層の数):
【0170】
ジェネシス鍵およびイニシエータ鍵を使用して(2**e)長のnum個の層を有する固有のコーデックスを生成する。各層は固有であり、正しい順序ですべての層を推測する確率は(num**(2**e))となる。
【0171】
GenerateKey(seed):
【0172】
0~89の間の2048個の整数のシードから鍵を生成する。
【0173】
GenerateLayer(g=ジェネシス鍵、i =イニシエータ鍵、e =符号化):
【0174】
(e*ビット)のすべての組み合わせで組み合わせの層を生成する。各層は固有の順序を有する。層は、ジェネシス鍵およびイニシエータ鍵を使用してピックアップされる。各エントリは、eに対応するインデックスのkey1[for char in char]*key2[for char in char]でピックアップされる。
【0175】
MutateKey(key, entropy):
【0176】
エントロピーを使用して鍵状態を変異させる。エントロピーは、受信バイトおよび送信バイトから取得される。
【0177】
SymbolIndex{object=0~89の間のすべてのシンボル値}
【0178】
インデックス生成
【0179】
generate_index(e=符号化):
if encoding in [8, 16, 32, 64]:
index = GenerateAllBinaryString(e)
return index
【0180】
コーデックス生成
【0181】
GenerateCodex(genesis, initiator, encoding, num_layer):
codex = new codex Db (encoding, num_layer)
for n in num:
layer, last_used = GenerateLayer(g, i, e, last_used)
codex push (layer)
return hash(codex)

GenerateLayer(g= ジェネシス i =イニシエータ, e= 符号化, last_used):
idx = list(index) #インデックスから抽出された完全なコーデックス層のインスタンス
done = 0
total = (2**e)
layer =[]
for n in total:
val = SymbolIndex[modulo(2048) g[n]] * SymbolIndex[modulo(2048) i[n]]
next =modulo(total - done) idx[val]
layer.append(next)
pop idx[val]
done ++
return layer, last_used
【0182】
鍵生成
【0183】
GenerateKey(seed):
key = []
for number in seed:
symbol = SymbolIndex[number]
key.append(symbol)
return “”.join(key)
【0184】
鍵変異
【0185】
ConvertToInt(key_list):
int_list =[]
for symbol in key_list:
int = SymbolIndex[indexOf(symbol)]
int_list.append(int)
return int_list

MutateKey(key, entropy):
keyList =[]
int_list = ConvertToInt(list(key))
for signal in entropy:
newSymbol = modulo(90) entropy + int_list[signal]
keyList.append(newSymbol)
newKey = “”.join(keyList)
checksum = hash(newKey)
return newKey, checksum
【0186】
暗号化
【0187】
encrypt(message, key, encoding, codex):
cipher_message = []
entropy = []
for index, bytes in enumerate(message):
entropy.append(bytes)
# コメント:毎回コーデックスDb層上で反復する
position = find bytes in codex Db[for layer in layer]
# コメント:arrayにおけるバイト長の数=(符号化/8)))
offset = position + SymbolIndex[indexOf( key[index])]
cipher_message.extend([offset,[ length(bytes),], layer])
mutated_key, checksum = MutateKey(key, entropy)
return cipher_message, mutated_key, checksum
【0188】
復号化
【0189】
decrypt(cipher_message, key, encoding, codex):
plain_message =[]
entropy =[]
group = 2+ (encoding /8)
next = 1
current =[]
for index, number in enumerate(cipher_message):
if next < group:
current.append(number)
next ++
else:
position = current[0] - SymbolIndex[indexOf( modulo2048 key[index])]
byte = find (position) in codex Db[for layer in layer]

if encoding is 8:
b[0] = byte[0:current[1]]
if encoding =is 16:
b[1] = byte[8:current[1]+8]
if encoding is 32:
b[2] = byte[16:current[1]+16]
b[3] = byte[24:current[1]+24]
if encoding is 64:
b[4] = byte[32:current[1]+32]
b[5] = byte[40:current[1]+40]
b[6] = byte[48:current[1]+48]
b[7] = byte[56:current[1]+56]
# 最後に、
current = []
plain_message.extend(b)
for i in b:
entropy.append(int(i))
mutated_key, checksum = MutateKey(key, entropy)
return plain_message, mutated key, checksum
【0190】
証明書
【0191】
Let codexBase8_47b78f7505a0f8d135c9b76bb917fff2

{"codex": [
# 層1
["00101000", "11000011", "11111001", "11101010", "10100010", "11110001", "11010101", "00100000", "00101010", "11000111", "01100010", "11110010", "10100110", "11111010", "11011011", "00100001", "00101100", "11001100", "01100101", "11111011", "10101010", "00001010", "11100010", "00100011", "00101111", "11010010", "01101001", "10110000", "10101111", "00001011", "11101011", "00100101", "00110010", "11011010", "01101101", "10110110", "10110101", "00001100", "11110101", "00100111", "00110101", "11100011", "01110001", "10111100", "10111011", "00001101", "00111100", "00101011", "00111000", "11101101", "01110110", "11000100", "11000010", "00001110", "01000000", "00101110", "00111011", "11111000", "01111011", "11001101", "11001011", "00001111", "01000100", "00110001", "00111111", "11101000", "10000000", "11010110", "11010100", "00010000", "01001000", "00110100", "01000011", "11110110", "10000101", "11011111", "11011110", "00010001", "01001100", "00110111", "01000111", "11001110", "10001010", "11101100", "11101001", "00010010", "01010000", "00111010", "01001011", "11011000", "10001111", "11111101", "11111100", "00010011", "01010100", "00111110", "01001111", "11100100", "10010100", "10111001", "00111101", "00010100", "01011001", "01000101", "01010101", "11110100", "10011010", "11000101", "01000010", "00010101", "01011110", "01001010", "01011010", "01111010", "10100001", "11010011", "01001001", "00010110", "01100100", "01010001", "01011111", "10000010", "10101011", "11100110", "01001110", "00010111", "01101011", "01010110", "01100110", "10001100", "11101110", "11000110", "01011000", "11010111", "10100011", "01010111", "01101010", "10010001", "10111110", "11011001", "01011100", "11101111", "10101001", "01011011", "01101111", "10010110", "11001010", "11110000", "01100000", "00011000", "10110011", "01100001", "01110100", "10011100", "11100001", "01101000", "01100111", "00011001", "11000000", "01101100", "01111100", "10100101", "10001011", "01110010", "01110000", "00011010", "11011101", "01110011", "10000011", "10110010", "10010101", "01111000", "01110111", "00011011", "10010010", "01111001", "10001001", "11001000", "10011111", "01111111", "01111110", "00011100", "10011101", "10000001", "10010111", "11100111", "10101110", "10000111", "10000110", "00011101", "10101100", "10001000", "10100000", "00000010", "11011100", "10100111", "10010000", "10111010", "00110110", "10010011", "10110100", "00000011", "10011000", "10111101", "10011110", "11100000", "01000001", "10100100", "11001111", "00000100", "10101000", "11100101", "10110111", "00100100", "01010010", "10111111", "00000000", "00000110", "11001001", "11110111", "11110011", "00101101", "01101110", "11111111", "00100110", "00000111", "10101101", "00110000", "00000101", "01100011", "10011001", "00000001", "01000110", "00011110", "11000001", "01010011", "00001001", "10011011", "10110001", "00001000", "01111101", "00101001", "10000100", "10001110", "00100010", "11111110", "00111001", "00011111", "00110011", "01110101", "10001101", "01001101", "10111000", "11010000", "01011101", "11010001"],
# 層2
["00111101", "10110011", "00101010", "10001001", "11011100", "00010101", "11010111", "11010011", "01000000", "10111000", "00101100", "10001101", "11100100", "00010110", "11011111", "11011010", "01000011", "10111101", "00101110", "10010001", "11101100", "00010111", "11100111", "11100010", "01000110", "11000010", "00110000", "10010101", "11110100", "00011000", "11101111", "11101010", "01001001", "11000111", "00110010", "10011001", "11111100", "00011001", "11110111", "11110010", "01001100", "11001100", "00110100", "10011101", "01010110", "00011010", "00111001", "11111101", "01010000", "11010100", "00110110", "10100011", "01011011", "00011011", "00111100", "01101010", "01010100", "11100000", "00111000", "10101010", "01100000", "00011100", "01000001", "01110000", "01011001", "11101101", "00111011", "10110001", "01100101", "00011101", "01000101", "01110110", "01011110", "11111001", "00111111", "10111010", "01101011", "00011110", "01001010", "01111100", "01100011", "00001100", "01000111", "11000100", "01110010", "00100000", "01001111", "10000011", "01101001", "00001101", "01001101", "11001110", "01111001", "00100010", "01010101", "10001011", "01110001", "00001110", "01010010", "11011001", "10000000", "00100100", "01011100", "10010100", "01111000", "00001111", "01011000", "11101000", "10000111", "00100110", "01100010", "10011110", "01111111", "00010000", "01011111", "11110110", "10010000", "00101000", "01101000", "10100110", "10000110", "00010001", "01100110", "00110011", "10011011", "00101011", "01110011", "10101111", "10010010", "01111101", "01101101", "00000111", "11000000", "00101111", "10111001", "10110100", "10011010", "10000100", "01110100", "00001000", "11001011", "00110101", "11000101", "10111110", "10100010", "10001100", "01111010", "00001001", "11011000", "00111010", "11010000", "11001001", "10101001", "10010110", "10000001", "00001010", "11101001", "01000010", "11011110", "11010101", "10110000", "10011111", "10001000", "00001011", "11111010", "01001000", "11110000", "11100101", "10111011", "10100101", "10001111", "00010010", "11010110", "01001110", "10100001", "11111011", "11001000", "10101101", "10011000", "00010011", "11101110", "01010011", "10101011", "11110011", "11011011", "10110111", "10100100", "00010100", "00100001", "01011101", "10110110", "11010001", "11111000", "11001010", "10101110", "00011111", "01101110", "01100100", "01010111", "00111110", "10000101", "11101011", "11000110", "00100011", "01111110", "01110101", "01100111", "01001011", "10100000", "00110111", "11110001", "00100101", "10011100", "10001110", "01111011", "01100001", "10111111", "01010001", "00000110", "00101001", "11000001", "10110010", "10100111", "10000010", "11110101", "10101100", "01011010", "00101101", "11100011", "11010010", "11000011", "10010111", "00000101", "11011101", "01110111", "01000100", "00100111", "11100110", "11001101", "11100001", "11001111", "00000010", "10110101", "10001010", "10101000", "01101100", "00000011", "00000001", "10111100", "00110001", "01101111", "00000100", "00000000", "11111110", "10010011", "11111111"]]}
【0192】
let index =
self.index = {
"1" : 1,
"2" : 2,
"3" : 3,
"4" : 4,
"5" : 5,
"6" : 6,
"7" : 7,
"8" : 8,
"9" : 9,
"0" : 10,
"a" : 11,
"b" : 12,
"c" : 13,
"d" : 14,
"e" : 15,
"f" : 16,
"g" : 17,
"h" : 18,
"i" : 19,
"j" : 20,
"k" : 21,
"l" : 22,
"m" : 23,
"n" : 24,
"o" : 25,
"p" : 26,
"q" : 27,
"r" : 28,
"s" : 29,
"t" : 30,
"u" : 31,
"v" : 32,
"w" : 33,
"x" : 34,
"y" : 35,
"z" : 36,
"!" : 37,
"@" : 38,
"#" : 39,
"$" : 40,
"%" : 41,
"?" : 42,
"&" : 43,
"*" : 44,
"(" : 45,
")" : 46,
"-" : 47,
"=" : 48,
"+" : 49,
"A" : 50,
"B" : 51,
"C" : 52,
"D" : 53,
"E" : 54,
"F" : 55,
"G" : 56,
"H" : 57,
"I" : 58,
"J" : 59,
"K" : 60,
"L" : 61,
"M" : 62,
"N" : 63,
"O" : 64,
"P" : 65,
"Q" : 66,
"R" : 67,
"S" : 68,
"T" : 69,
"U" : 70,
"V" : 71,
"W" : 72,
"X" : 73,
"Y" : 74,
"Z" : 75,
"~" : 76,
"|" : 77,
"/" : 78,
"," : 79,
"." : 80,
">" : 81,
"<" : 82,
"{" : 83,
"}" : 84,
"[" : 85,
"]" : 86,
";" : 87,
":" : 88,
"_" : 89,
"`" : 90
}
【0193】
【表1】
【0194】
let message = [0010011, 11110000, 1100111, 001]
get 0010011
let pure position:[ 39,7,1]
get offset: key[0] = “9” = 9
let offset position [48,7,1]
get 11110000
let pure position: [167,8,2]
get offset: key[1] = “)” = 46
let offset position [213,8,2]
get 1100111
let pure position: [85,7,1]
get offset: key[2] = “~” =76
let offset position: [161,7,1]
get 001
let pure position: [0,3,2]
get offset: key[3] = “|” = 77
let offset position: [77,3,2]

final encoded: [48,7,1,213,8,2,161,7,1,161,7,1]

grouping for 8bit [[48,7,1],[213,8,2], [161,7,1],[77,3,2]]
get [48,7,1]
minus offset key[0] = “9” = 9
pure position = [39,7,1]
byte = 0010011
get [213,8,2]
minus offset: key[1] = “)” = 46
pure position [167,8,2]
byte = 11110000
get [161,7,1]
minus offset: key[2] = “~” =76
pure position [85,7,1]
byte = 1100111
get [77,3,2]
minus offset: key[3] = “|” = 77
pure position = [0,3,2]
byte = 001
message = [0010011, 11110000, 1100111, 001]
【0195】
上で説明されている実施形態は、本開示の例であることを意図しており、当業者によって、付属の特許請求の範囲によってのみ定義される本発明の範囲から逸脱することなく、改変および修正がなされ得る。
図1
図2
図3
図4
図5
図6
【手続補正書】
【提出日】2022-09-13
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
N個の二進数字のベースから作られるインデックスおよびコーデックスを生成する方法であって、前記インデックスは前記コーデックスの生成のための参照として使用されるすべての組み合わせの順序付きリストであり、
前記コーデックスは、1つまたは複数の層を備え、前記1つまたは複数の層の各々はイニシエータとジェネシス鍵とを使用して作成された、前記N個の二進数字のすべての組み合わせのランダムに順序付けられたリストを含み、
前記コーデックスは、前記N個の二進数字のすべての組み合わせの前記ランダムに順序付けられたリストを生成するために、前記イニシエータ鍵および前記ジェネシス鍵を使用して決定論的に作成され、前記イニシエータ鍵および前記ジェネシス鍵の各々は、通信チャネルを確立するために2人以上のユーザの集合の各々によって交換される対応する乱数から取得される、方法。
【請求項2】
Nは、8、16、32、および64のうちの1つである、請求項1に記載の方法。
【請求項3】
各々が固有の名前空間を有する任意の数の前記コーデックスが、前記ベースおよびハッシュ関数を使用して生成され得る、請求項1に記載の方法。
【請求項4】
前記ハッシュ関数は、MD5である、請求項3に記載の方法。
【請求項5】
前記コーデックスは、少なくとも2つの層を含み、各層は、ランダム化された組み合わせの、異なる集合を含む、請求項1に記載の方法。
【請求項6】
前記各層は、前記N個の二進数字の2 N 個の組み合わせを含む、請求項5に記載の方法。
【請求項7】
第1のユーザと第2のユーザの間のハンドシェイクのための対称暗号化鍵を生成する方法であって、
乱数生成器(RNG)において、
i)前記RNGにおいて前記第1のユーザおよび前記第2のユーザから数字の要求を受信するステップと、
ii)前記RNGにおいて数の第1および第2のリストを生成するステップと、
iii)前記数に関連付けられているシンボルを含む参照テーブルを使用して数の前記第1および第2のリストを解析するステップと、
iv)第1および第2のシンボルリストをそれぞれ前記第1および第2のユーザに送信するステップとを含み、
前記シンボルリストは、チャネル作成要求または受入として送信されるべき前記対称暗号化鍵を作成するために組み合わされる、方法。
【請求項8】
前記対称暗号化鍵は、2048個のシンボルを含む、請求項7に記載の方法。
【請求項9】
前記参照テーブルは、大文字、小文字、特殊文字、および数からなる群から選択された90個のシンボルを含む、請求項7に記載の方法。
【請求項10】
前記参照テーブルは、使いやすいように引用符を除外する、請求項7に記載の方法。
【請求項11】
前記引用符は、シングル引用符およびダブル引用符のうちの一方である、請求項10に記載の方法。
【請求項12】
変異暗号化鍵およびコーデックスを使用する、データの暗号化の方法であって、
i)前記データのバイトを前記コーデックスと照合して対応する位置およびバイト長を取得するステップと、
ii)変異前状態にある前記暗号化鍵の値を使用してオフセットを作成するステップと、
iii)暗号化前データの最初のN個のバイトの一時的記録をエントロピーリストとして保持するステップと、
iv)前記オフセットを前記対応する位置に加えることによって前記データを暗号化して前記コーデックスにおける前記データの位置マップを作成するステップと、
v)前記最初のN個のバイトの各々を使用して前記暗号化鍵値を修正して前記暗号化鍵の変異後状態の変異した鍵値を作成するステップと、
vi)前記変異した鍵値を前記現在の暗号化鍵として保存するステップとを含む方法。
【請求項13】
前記暗号化鍵を修正することは、受信バイトを使用して前記コーデックスの固有の再シャッフリングを確実にする、請求項12に記載の方法。
【請求項14】
前記変異後状態への前記暗号化鍵の有効な修正は、最初のN個のバイトの各々およびそれらの順序の知識を必要とする、請求項13に記載の方法。
【請求項15】
前記暗号化鍵値を修正することは、前記暗号化鍵の各数字への前記最初のN個のバイトの各々のモジュロM加算を含み、前記鍵の各数字の値は、0からM-1までである、請求項13に記載の方法。
【請求項16】
ステップi)からv)までを繰り返すステップをさらに含み、前記暗号化鍵の各変異は、前記暗号化鍵の前の値に依存する、請求項12に記載の方法。
【請求項17】
前記変異前状態における前記暗号化鍵値は、前記変異後状態における暗号化と異なる、請求項12に記載の方法。
【請求項18】
鍵変異は、疑似乱数を使用して達成される、請求項12に記載の方法。
【請求項19】
前記コーデックスは、各々がX個の二進数字のすべての組み合わせのランダムに順序付けられたリストを含む複数の層を含み、前記方法は、前記暗号化鍵値を修正した後に現在の層と異なる層に切り替えるステップをさらに含む、請求項12に記載の方法。
【請求項20】
M=90である、請求項15に記載の方法。
【手続補正2】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
図1
図2
図3
図4
図5
図6
【国際調査報告】