JP5044848B2 - Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法 - Google Patents

Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法 Download PDF

Info

Publication number
JP5044848B2
JP5044848B2 JP2007341594A JP2007341594A JP5044848B2 JP 5044848 B2 JP5044848 B2 JP 5044848B2 JP 2007341594 A JP2007341594 A JP 2007341594A JP 2007341594 A JP2007341594 A JP 2007341594A JP 5044848 B2 JP5044848 B2 JP 5044848B2
Authority
JP
Japan
Prior art keywords
dynamic
index pointer
mix32
box
update
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.)
Active
Application number
JP2007341594A
Other languages
English (en)
Other versions
JP2009139899A (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 剣 竜沢
Priority to JP2007341594A priority Critical patent/JP5044848B2/ja
Publication of JP2009139899A publication Critical patent/JP2009139899A/ja
Application granted granted Critical
Publication of JP5044848B2 publication Critical patent/JP5044848B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、動態概念「動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)」を一貫に利用した対称暗号であるストリーム暗号・復号方法、及びにパイ・データ及び以上に書いてある全ての動態概念に基づいた暗号化・複合化の両方を実現する暗号算法・復号化算法に関する。
現在使用されている多くのストリーム暗号は、リニアー・フィードバック・シフト・レジスター(linear feedback shift registers,LFSRs)と呼ばれる方法に基づいている。LFSRsでは、ソフトウェアを利用した方法の効率は、ハードウェア利用した方法の効率より低い。ここで効率とは、処理速度の速さの少なさをいう。LFSRsによるストリーム暗号は、比較的に長い期間に亘って市場に存在し、そしてそれらのストリーム暗号のメカニズムが徹底的に完全に分析された。そこで、LFSRsによるストリーム暗号には安全性に関する懸念が通常はある。勿論、LFSRsであっても、巨大なメモリー空間を占有することにより、安全性を向上することは可能ではあるが、このようは方策では処理速度が遅くなり、所要メモリー空間が増大するので、非効率な暗号システムとなる。LFSRsについては、フリー百科事典『ウィキペディア(Wikipedia)」の“Linear feedback shift register”なる項目(非特許文献1)に詳しい説明が掲載されている(URL「http://en.wikipedia.org/wiki/LFSR」)。
また、現在に使われているIV無しの対称暗号(ストリーム暗号)は、同じキーは必ず同じキーストリームを生成する、という重大な問題を常に抱えている。つまり、従来のストリーム暗号の中で同じキーを繰り返して使用することは、ワンタイムパット(one time pad,OTP)を再度使用するのと同じく、暗号の安全性を損なう。それとともに、現在の対称暗号が使用する暗号化技術と方法は古くて、第三者に分析・追跡されやすく、安全性能が心配される。
また、Phelixlは、Ferguson,Whiting,Schneier,Kelsey,Lucks及びKohnoによって非特許文献2に公表され、Helixによって提供されるMAC機能性で内蔵の高速のストリーム暗号がある。彼らは、「Phelixは、ストリーム暗号及びMAC機能性の結合であって、認証付暗号機能(authenticated encryption functionality)を直接に提供する。」と述べられている。また、「キーストリームと平文を協働されることによって、Phelixは、コストの追加なしで認証機能を提供できる。」と述べられている。その内部を理解せず、Phelix1の表面を単に見るだけ限りの場合は、そのようなステートメントは有効である。しかし、実際は、Phelixの認証機能性は代価無しとは言えない。キーストリームに平文を加えるには実際に時間をかかるからである。したがって、Phelixストリーム暗号は、追加コスト無しで認証機能性を提供することはできない。さらに、平文に依存するキーストリームは、セキュリティ攻撃に対しシステムを脆弱にし、それに第三者によるシステムの分析を容易にする。更に、Phelixは平文の認証を使用するので、送信中の保護を必要とするデータが実際の送信プロセスの中で変更されたかどうかは受信者が受信ファイルを解読した後という長いプロセスの後でしか知ることができない。したがって、Phelixの効率は当事者の主張より低い。
フリー百科事典『ウィキペディア(Wikipedia)』の″Linear feed back shift register″なる項目(URL 「http://en.wikipedia.org/wiki/LFSR」)。 Niels Ferguson,Doug Whiting,Bruce Schneier,John Kelsey,Stefan Lucks,Tadayoshi Kohno,Helix:fast encryption and anthentification in a single cryptographic primitive,in[7](2003),330{346.URL:http://www.macfergus.com/helix/.}
前述のように、従来から多く使用されているLFSRsによるストリーム暗号は、ソフトウェアを利用した方法の効率がハードウェア利用した方法の効率より低く、比較的に長い期間に亘って市場に存在し、メカニズムが徹底的に完全に分析されたので、安全性に関する懸念が避けがたいし、安全性を向上するために大きなメモリー空間を使用すると、非効率な暗号システムとなる。
また、現在のIV無しの対称暗号(ストリーム暗号)は、同じキーは必ず同じキーストリームを生成するので、ストリーム暗号の中で同じキーを繰り返して使用することは、ワンタイムパット(one time pad,OTP)を再度使用するのと同じく、暗号の安全性が損なわれる。
非特許文献2に記載のPhelixは、ストリーム暗号及びMAC機能性の結合により認証付暗号機能を提供すると公表されている。キーストリームを平文に依存するPhelixは、セキュリティ攻撃に対しシステムを脆弱にし、第三者によるシステムの分析を容易にするとともに、平文の認証を使用するので、送信中の保護を必要とするデータが実際の送信プロセスの中で変更されたかどうかは受信者が受信ファイルを解読した後という長いプロセスの後でしか知ることができず、効率において劣っている。
そこで、本発明の目的は、新しい動態概念「動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)」のアイディアを提案し、そしてそれらの動態概念を一貫に利用して、超軽量・超高処理速度・可変長のキーの長さ・多様なシステム環境や機器に対応・すべてのデータに対応・ハードウェア・ソフトウェアに対応性と強適応性・効率に優れた特徴を持つストリーム暗号方法を提供することと共にユーザーを情報の犯罪や漏洩などの被害から守ることにある。別の本発明の目的は、同じキーを使用しても異なるキーストリームを生成するストリーム暗号方法の提供にある。更に別の本発明は、セキュリティ攻撃に対しシステムを脆弱にすることがなく、第三者によるシステムの分析を容易にせず、また、送信中の保護を必要とするデータが実際の送信プロセスの中で変更されたかどうかが、受信者が受信ファイルを解読した後という長いプロセスを要することなく、確認できる認証付ストリーム暗号方法を提供することにある。
前述の課題を解決するために本発明は次の手段を提供する。
(1)Pi++暗号シリーズの中心概念、つまり動態S−box(Dynaamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)といった全て動態的な概念を一貫に利用して、キーに基づいたキーストリームを生成し、該キーストリームと平文との排他的論理和演算により該平文を暗号化した暗号文を生成するキーストリーム暗号方法の暗号化と復号化プロセスにおいて、
円周率π=3.14159 26535 89793 23846 26433 83279 50288…の小数点の後の中から任意の位置にある連続する32bitsの数をパイ・データの1つのワード(word)とし、その後の255個の数字も切れなく続けてπから取り出す。合計で、256個32bitsのワードを生成し、それらのワードをパイ・データと称する時、256個の要素でなる動態S−boxを該パイ・データで初期化する初期化プロセスと、
前記初期化ステップにより初期化された前記動態S−boxにおける要素を、キーに依存する交換アルゴリズムにより、相互に交換する要素交換プロセスと、
動態循環シフト(Dynamic circular shift)と前記動態S−boxにおける複数の要素よりインデックスポインターyを生成するインデックスポインターy生成プロセスと、
動態循環シフトと前記動態S−boxにおける複数の要素より更新変数Mix32を生成する更新変数Mix32生成プロセスと、
キーストリーム生成する前の準備として、キーストリームを生成せずにキーストリームアルゴリズムを256回実行するプロセスと、
前記動態S−boxにおける1つの要素をインデックスポインターxとして選択するインデックスポインターx選択プロセスと、
前記インデクスポインターy生成プロセスで生成したインデックスポインターy、前記更新変数Mix32生成プロセスで生成した更新変数Mix32及び前記インデックスポインターx選択プロセスで選択した前記インデックスポインターxに基づき前記インデックスポインターy生成プロセスで生成したインデックスポインターyを更新するインデックスポインターy更新プロセスと、
前記インデックスポインターx選択プロセスで選択した前記インデックスポインターxの中から動態的に任意な1ビットを選択し、インデックスポインターxをフリップ(flip)するインデックスポインターxの動態フリッププロセスと、
前記インデックスポインターy更新プロセスで更新した前記インデクスポインターyの中から動態的に任意な1ビットを選択し、インデックスポインターyをフリップ(flip)するインデックスポインターyの動態フリッププロセスと、
前記更新変数Mix32生成プロセスで生成した更新変数Mix32の更新は、更新変数Mix32のNSB(Most significant bits)に依頼してMSB−dependent循環シフト(循環シフトする範囲は0−31)した結果が、循環シフトする前の更新変数Mix32のLSB(Least significant bits)が指した動態S−boxにある内容と排他的論理和演算(XOR)することにより、新たな更新したMix32を得る更新変数Mix32の更新プロセスと、
動態S−boxの動態更新において、前記の更新変数Mix32の更新プロセスで得られた更新変数Mix32が循環シフトする前の更新変数Mix32の値のMSB(Most significant bits)を動態S−boxのアドレスとして、前記の更新変数Mix32の更新プロセスにより得られた更新変数Mix32の値をそのアドレスの内容を更新する動態S−boxの動態更新プロセスと、
前記インデックスポインターxの動態フリッププロセスで得たインデックスポインターxの1バイトを選び、それを前記のインデックスポインターyの動態フリッププロセスで得たインデックスポインターyの1バイトとの排他的論理和演算により得た結果を動態S−boxのアドレスとして、そのアドレスの内容を取り出し臨時変数K1を生成する臨時変数K1生成プロセスと、
前記のインデックスポインターxの動態フリッププロセスで得たインデックスポインターxのもう一つの1バイト(先ほどに使われた1バイトと異なった1バイト)を選ぶ、それを前記のインデックスポインターyの動態フリッププロセスで得たインデックスポインターyのもう1つの1バイト(先ほどに使われた1バイトと異なった1バイト)との排他的論理和演算により得た結果を動態S−boxのアドレスとして、そのアドレスの内容を取り出し先ほどに生成された臨時変数K1と異なった臨時変数K2を生成する臨時変数K2生成プロセスと、
前記の臨時変数生成プロセスで生成された臨時変数K1の中から、動態的に任意な8ビットを選択し、その結果を動態S−boxのアドレスとして、そのアドレスの内容を取り出し、1つのワート(32ビットサイズ)のキーストリームを生成するプロセスと、
前記の臨時変数生成プロセスで生成されたK2は、前記の臨時変数生成プロセスで生成された臨時変数K1の中から動態的に選ばれた任意な8ビットと異なった任意な8ビットを動態的に選択し、その選択したものを動態S−boxのアドレスとして、そのアドレスの内容を取り出し、前記に生成された1つのワードのキーストリームと異なったもう1つのワード(32ビットサイズ)のキーストリームを生成する
ことを特徴とするキーストリーム暗号方法。
(2)前記交換アルゴリズムは、交換アルゴリズム1及び交換アルゴリズム2でなり、
交換アルゴリズム1では、前記動態S−boxにおける第1番目の要素を他の要素と交換し、
交換アルゴリズム2では、前記動態S−boxにおける第2番目から最後のn番目の要素を他の要素と交換する
ことを特徴とする前記(1)に記載のキーストリーム暗号方法。
(3)初期化ベクルトIVを複数のデータに分割りし
初期化ベクルトIV(128ビット)を複数のデータに分割し、更新変数Mix32と、インデックスポインターxと、インデックスポインターyと、Index2を夫々最初の初期化の初期値として扱う
ことを特徴とする前記(1)乃至(2)に記載のキーストリーム暗号方法。
(4)請求項1乃至3に記載の方法により平文を暗号化して生成した暗号文に、暗号化したMAC(メッセージ認証コード)を付加することを特徴とする認証機能付きストリーム暗号方法。
本発明によれば、超軽量・超高処理速度・可変長のキーの長さ・多様なシステム環境や機器に対応・すべてのデータに対応・ハードウェア・ソフトウェアに対応性と強適応性の特徴を持つ「高安全性」・「高速性」・「汎用性」、そして効率に優れたストリーム暗号・復号方法を提供できる。また、本発明によれば、同じキーを使用しても異なるキーストリーム生成するストリーム暗号・復号方法を提供できる。更に本発明によれば、セキュリティ攻撃に対しシステムを脆弱にすることなく、第三者によるシステムの分析を容易にせず、また、送信中の保護を必要とするデータが実際の送信プロセスの中で変更されたかどうかが、受信者が受信ファイルを解読した後という長いプロセスを要することなく、確認できる認証付ストリーム暗号・復号を提供できる。
発明の実施するための最良の形態
次に本発明の実施の形態を挙げ、図面を参照し、本発明を一層具体的に説明する。
[概要]
本願発明は、Pi++ストリーム暗号に関し、動態概念、つまり動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)といった全て動態的な概念を一貫に利用した暗号化及び復号化の両方を実現する暗号算法及び復号化算法に関する。パイ・データ(Pi data)は、円周率πの値であり、π=3.14159 26535 89793 23846 26433 83279 50288…のように無限に続く値である。S−boxは、サブスティテュードボックス(substitute box)又はSボックスとも称され、mビットの入力をnビットに変換する関数であって、m×nのルックアップテーブルによって実装できる。動態S−boxは、英文でDynamic S−boxと表記され、内容と配列は動態的に変わることによって、より高い安全性かつ高速度な暗号性能を提供することを指す。以下では、円周率パイの英文表記がPiであることに因み、本願発明を「Pi++」と略記し、表記の簡素化を図るものとする。
以下、本願発明「Pi++」について、3つのユニックな実施の形態を挙げ、説明する。第1の実施の形態は基本的な実施の形態で、第2の実施の形態は基本的な実施の形態に初期化ベクルト(Initialization Vectors,IV)を加えた実施の形態で、第3の実施の形態は基本的な実施の形態にIV及び認証を加えた実施の形態である。以下においては、主として第1の実施の形態に注目して本願発明を説明する。第2及び第3の実施の形態については、第1の実施の形態とこれらの2つの実施の形態間の違いについて説明する。
まず本願発明の第1の実施の形態について説明する。理解を容易にするために、以下では、データ長等についての具体的な数値や処理の手順を例示し、本発明の第1の実施の形態の説明を進める。これらの具体的数値や手順は、あくまで例示であり、本願発明の範囲を限定するものでないことは勿論である。
発明「Pi++」の第1の実施の形態で使用するキーは、8ビットの倍数の可変長さキーであり、そのキーのデータ長(Lバイト)は16から2048ビットの範囲である。動態S−boxは、まず256個のパイ・データで初期化される。256個の各パイ・データのビット長は32ビットである。そこで、動態S−boxの初期化に使われるパイ・データは、無限数であるπの一部分、即ちπを構成する無限の数の内から選んだ256×32ビット(bits)分のデータである。動態S−boxの中の256個の要素は、初期化の後に要素相互間で交換される。その交換の方法は秘密キーに依存する。
256個の要素の交換プロセスの中で、第1の要素に使う第1の交換算法(方法)は、残りの255個の要素の交換に使用されていた交換算法(方法)とは異なる。動態S−boxの中にある256個の要素の交換は、キースケジュールアルゴリズム(Key Schedule Algorithm)により全て行われる。キースケジュールアルゴリズムでは、動態S−box中の256個の要素の交換が行われるだけでなく、インデックスポインターy(Index pointer y)と更新変数Mix32も生成される。インデックスポインターyは、動態循環シフトと動態S−boxにおける複数の要素によって生成され、更新変数Mix32は動態循環シフトと動態S−boxにおける複数の要素によって生成される。インデックスポインターy及び更新変数Mix32は、キーストリーム生成アルゴリズムにおいてキーストリームを生成するために使用される。
キーストリーム生成する前の準備において、Pi++暗号のキースケジュールアルゴリズムが実行し終わった後、キーストリームを生成せずにキーストリームアルゴリズムを256回実行する。これによって、動態S−boxにある各要素は少なくとも一回更新された。インデクスポインターyも更新変数Mix32も256回に更新され、決して知られることのない値に変更された。
キーストリーム生成アルゴリズムでは、動態S−box更新アルゴリズム(Dynamic S−box updating algorithm)は、インデックスポインターxとインデックスポインターyと更新変数Mix32に基づき、動態S−boxの中にある全ての要素を一つずつ更新するとともに、動態S−boxにある要素は動態的に選択され、最新化(update)される。キーストリーム生成アルゴリズムは、2ワード(8バイト)のキーストリームの生成という処理を繰り返し行い、各処理毎に異なるインデックスポインターxとインデックスポインターyと更新変数Mix32を使用する。即ち、キーストリーム生成アルゴリズムでは、インデックスポインターxとインデックスポインターyと更新変数Mix32は、2ワード(8バイト)のキーストリームの生成という1ループのキーストリーム生成において一度だけ使用され、2ワード(8バイト)のキーストリームの生成毎に更新される。そのループを繰り返して2ワード(8バイト)のキーストリームずつ生成することにより、暗号化対象の平文又は復号化対象の暗号文の長さだけのキーストリームが生成される。それら各ループ毎にインデックスポインターxとインデックスポインターyと更新変数Mix32は更新される。
その後、暗号化では、暗号化用の平文とキーストリームの間で排他的論理和演算(exclusive OR operation)が実行され、暗号文が生成される。他方、復号化では、復号化用の暗号文とキーストリームの間で排他的論理和運算が実行され、平文が生成される。
[改良]
本発明「Pi++」は改良されたストリーム暗号である。この発明は、過去のストリーム暗号とは相違し、動態概念、つまり動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)といった全て動態的な概念を一貫に利用した暗号化・復号化プロセスを使用する。そして、要素交換のために、本発明は二つの異なる交換アルゴリズムを使用する。この発明において、動態S−boxの初期の値を初期値(initial values)としてパイ・データが使用される。動態循環シフト(Dynamic circular shift)は変数の更新のために使用される。要素交換アルゴリズム(Swapping elements algorithms)は、キースケジュールアルゴリズム(Key schedule algorithm)の中の動態S−boxの要素の交換のために使用される。要素更新アルゴリズム(Updating elements algorithms)は、キーストリーム生成アルゴリズム中の動態S−boxのために使用される。動態フリップはキーストリーム生成アルゴリズムの中で使用される。動態シフトはキーストリーム生成アルゴリズムの中で使用される。本発明では、動態S−boxと動態フリップ(Dynamic flip)と、動態シフト(Dynamic shift)と、動態更新(Dynamic update)と、動態循環シフト(Dynamic circular shift)と、インデックスポインターx(Index pointer x)と、インデックスポインターy(Index pointer y)とを結合して、高速性と、安全性と、汎用性と、軽いメモリ・スペース(light memory space)特性と、高いセキュリティとを特色とした巨大な内部状態(a huge internal state)のあるストリーム暗号が作成される。この発明のキーストリーム生成アルゴリズム(Keystream Generation Algorithm)は、動態S−boxにおける要素の更新等により、高い乱数度(randomness)の特性を備えたキーストリームの生成を可能にしている。
[1]第1の実施の形態による暗号化プロセス
1)暗号化プロセスの流れ図
図1は、本発明の第1の実施の形態による暗号化プロセスを示す流れ図であり、図2はこの第1の実施の形態により復号化プロセスを示す流れ図である。図1において、1は動態S−box(図では、DMと簡略表記されている。)の初期化、2はキー入力、3は動態S−boxにおける要素交換、4は要素交換3より得られた動態S−boxの最終排列(final permutation)の一時記憶、5はインデックスポインターy及び更新変数Mix32の取得、6はキーストリーム生成前の準備、7はキーストリーム生成、8は平文入力、9は暗号化、10は暗号文出力、1000はパイ・データ、2000は秘密キー、101は初期化された動態S−box、102は秘密キー、103は要素交換された動態S−box、104は要素交換3より得られた動態S−boxの最終配列(Final permutation of Dynamic S−box)、105はインデックスポインターy及び更新変数Mix32、106は更新した動態S−box及びインデックスポインターyと更新変数Mix32、107はキーストリーム、108は平文、109は暗号文である。また、図2において、507は暗号文入力、508は復号化、509は平文出力、5007は暗号文、5008は平文である。平文入力8に替えて暗号文入力507を行うだけで、暗号文の復号化処理が平文の暗号化処理と同じプロセスで行われることは周知であるから、以下では必要の都度に図1を参照して、本発明の第1の実施の形態を説明する。
2)キースケジュールアルゴリズムとキーストリーム生成アルゴリズム
図1における符号1−6で示すプロセスはキースケジュールアルゴリズムにより実行され、符号7−9で示すプロセスはキーストリーム生成アルゴリズムにより実行される。
3)動態S−box、インデックスポインターy、更新変数Mix32等の変数
キースケジュールアルゴリズムは、256×32ビットサイズの動態S−boxと、32ビットサイズのインデックスポインターyと、32ビットサイズの更新変数Mix32と、32ビットサイズの変数Index1と、32ビットサイズの変数Index2と、1つのカウンタ(counter)とを使用する。
4)動態S−boxの初期化
動態S−box(Dynamic S−box)は、各々32のビット長を持つ256ワードのパイ・データで初期化される。256ワードのパイ・データは、無限数πの内の一部のデータであり、πを構成する一連の数字における連続する部分を抽出したものである。
32ビットサイズのインデックスポインターyと32ビットサイズの更新変数Mix32もキースケジュールアルゴリズムの中で初期化され更新される。キースケジュールアルゴリズムへの入力は、256ワードのパイ・データ(256−words pi data)とユーザーから供給されたLバイト(2≦L≦256のキーである。キースケジュールアルゴリズム(Key Schedule Algorithm)の出力は、256のパイ・データの配列(a permutation of 256 pi data)とインデックスポインターyと更新変数Mix32である。キーの長さは、ユーザーから提供される秘密のキー(private key)のバイトの数であり、2から256までの範囲である。安全性を考慮し、キーの長さは少なくとも8バイト又はそれ以上が推薦される。
[2]キーに基づく動態S−boxの要素交換
キースケジュールアルゴリズム(Key Schedule Algorithm)は、ユーザーが作成したキーデータ(key data)を入力として受け入れる。入力キーのバイト長はL−バイト(2≦L≦256である。動態S−boxでは、初期化プロセスの後に、オリジナルのパイ・データの交換(permutation of original pi data)が始まり、動態S−boxは連続的な交換プロセスに入る。この交換プロセスにより、動態S−boxにおける256の要素の配列は未知のキーに依存して新しい配列(KEY−dependent permutation)となる。即ち、動態S−boxへのただ一つの作用(action)は、パイ・データ中の二つの値(value)を秘密のキーに基づいて交換することである。交換アゴリズム(swapping algorithm)の節(section)は、異なる2つのアルゴリズムから成っている。動態S−boxでは、1つのアルゴリズム(algorithm)は第1の要素を交換するために使用され、もう一つのアルゴリズム(algorithm)は残りの255の要素を255回交換するために使用される。総計256回の要素交換は、動態S−boxの中の各要素を少なくとも一度交換し、高いセキュリティを保証する。
[3]交換アルゴリズム(Swapping Algorithms)
1)交換アルゴリズム1
交換アルゴリズム1(Swapping Algorithms 1)は、次の式(1)で示される。また、図3は、交換アルゴリズム1によるプロセスを示す図である。
Swap(DM[0],DM[KEY[0]]) (1)
Index2=KEY[0]×KEYLENGTH
Mix32=Mix32+Index2
上に示す方程式(1)は、動態S−boxにおける第1要素の交換を最初に行う時だけに利用される。この式(1)で示すように、その第1要素の交換プロセスは、キーの最初のバイト(first−byte key)が指した動態S−boxのアドレスの値と動態S−boxの最初の要素とを交換する。Index2の値はキーの最初のバイトとキーの長さによって決められる。更新変数のMix32は、0×54655307の値で初期化され、続いて、Mix32はIndex2を加えること(Mix32+Index2)により、更新される。
2)交換アルゴリズム2
交換アルゴリズム2(Swapping Algorithm 2)は、次の式(2)で示される。また、図4は、交換アルゴリズム2によるプロセスを示す図である。
Index1=1 (2)
for counter from 1 to 255
LSBS=Index2 mod 32
Index2=ROTL32(Index2,LSBS)XOR KEY[Index1]XOR DM[fix(Index2)]
temp=fix(Index2)
if(counter=temp)swap(DM[counter],DM[fix(Index2>>24)]) (2.1)
else swap(DM[counter],DM[temp])
Index1=(Index1+1)mod KEYLENGTH
LSBSがLSBS=Index2 mod32(Index2のleast significant bits)であるど定義され、また、fix(x)は、交換アルゴリズム2(Swapping algorithms 2)だけではなく、Pi++シリーズの全てのプロセスの中でfix(x)=x∩255(xのleast significant byte)であると定義される。ROTLは循環左シフト(circular left shift)であり、ROTL32(Index2,LSBS)に関しては後に詳しく説明される。インデックスポインターyと更新変数Mix32は後に式(3)により詳しく説明される。交換アルゴリズム2(Swapping Algorithm 2)は、動態S−boxの中の残りの255の要素交換(the rest of 255elements’swappings)を受け持ち、それら255の要素の全ての交換を行う。交換アルゴリズム2は、動態S−boxの中で第2の要素から要素交換(element exchanges)を始める。第2の要素は、上記式(2)に示された交換アルゴリズム2に示すように、Index2が生成される。上記式(2)のtemp=fix(Index2)に示されたように、tempが生成される。上記式(2.1)に示されたように、もしcounter=tempであれば、第2の要素はIndex2の最上位バイトが指した動態S−boxの値と交換する。もしcounter≠tempであれば、第2の要素はtempが指した動態S−boxの値と交換する。他の254要素交換(elements swapping)のプロセスも第2の要素のスワッププロセス(the swapping process of second element)と同様である。スワップアルゴリズム2による255の要素の全てを交換するプロセスは、図4に示されている。
Index2=ROTL32(Index2,LSBS)XOR KEY[Index1]XOR DM[fix(Index2)](2.11)
上記式(2.11)は、前記式(2)における一部の方程式を示す。Index2が、32−ビット長ワード(32−bit length word)のキーの関数であることが、式(2.11)で表されている。
LSBS依存循環(LSBS−dependent rotations)の意味を明確にするために、一般的な循環の意味を次のa項及びb項で一層具体的に説明する。
a)xは32ビットのワード(32−bit word)で、そしてnが0<n<32の範囲である整数の場合の左循環シフト(rotate left,circular left shift)の演算(operation)ROTL32(x,n)は
ROTL32(x,n)=(x≪n)∪(x≫(32−n))
として定義される。したがって、ROTL32(x,n)は、循環右シフト(circular right shift)ROTR32(x,32−n)と同意義であり、nビット位置の左向き循環シフト(circlar rotations to the left for n−bit positions)を意味する。
b)xは32ビットのword(32−bit word)で、そしてnが0<n<32の範囲である整数の場合の右循環シフト(rotate to the right,circular right shift)の演算ROTR32(x,n)はROTR32(x,n)=(X≫n)∪(x≪(32−n)として定義される。したがって、ROTR32(x,n)は循環左シフト(circular left shift)ROTL32x,32−n)と同意義であり、nビット位置の右向き循環シフト(circular rotations to the right for n−bit positions)を意味する。上に説明され記述されたように、「≫」は右シフト運算(right−shift operation)を意味する。そして、X≫nは、ワード(word)xの最右端のnビット(the rightmost n bits of the word x)を廃棄し、次にn個のゼロを左側に付加すること(padding the result with n zeroes on the left)により得られる。「≪」は左シフト演算(left−shift operation)を意味する。そして、x≪nは、ワード(word)xの最左端のnビット(the left−most n bits of the word x)を廃棄し、次にn個のゼロを右側に付加すること(padding the result with n zeroes on the right)により得られる。ここまでの[2]及び[3]の欄に記述したプロセスは、256回繰り返される。この256回の処理の後に、動態S−boxの中の各要素は、少なくとも一度交換される。
かくして、ユーザーによって提供される秘密キー(secrete key)に基づいた、動態S−boxの中の全ての要素の並べ替え(permutation)は、ここに最終的に得られる。
[4]インデックスポインターyの生成
図5は、インデックスポインターyの生成を示す図である。前記[3]の欄で述べたプロセスを終えた後、図5のインデックスポインターyの生成プロセスにおいて、キースケジュールアルゴリズムに予め設定されていた所定値の353422072が図5における入力のyとして与えられる。インデックスポインターyの生成プロセスでは、その所定のy=353422072に基づく次式により、インデックスポインターyが、
LSBS=index2 mod32 (2.2)
y=ROTL32(y,LSBS)
y=y XOR DM[fix(y>>24)]XOR DM[fix(y)]
として与えられる。所定値yとしては、353422072以外の値でも差し支えないが、安全性確保のために、乱数が選ばれる。前記[3]の欄で説明した最後に得られた変数Index2をモジュロ32(mod32)の操作を行うことにより、LSBSを得る。上記の式(2.2)のy=ROTL32(y,LSBS)のように、新たなyを得る。そして、新たなyの最上位バイトと最下位バイト(Least significant byte)に分ける分割の処理を行い、この分割で得られた2バイトの値(two bytes values)を夫々アドレスとして扱い、動態S−boxにおけるこれら2つのアドレスから夫々の32ビットのワード(two 32−bit words)を取得する。ここまでのプロセスの後に、上記式(2.2)のy=y XOR DM[fix(y>>24)]XOR DM[fix(y)]のように、3つの32ビットのワード(three 32−bit words)について2つの排他的論理和演算を実行し、インデックスポインターyを生成する。
更新変数Mix32の生成
図6は、更新変数Mix32の生成を示す図である。更新変数Mix32は、0x54655307の値で初期化され、次に、[3]の欄の交換アルゴリズム1の中で更新される。前記[3]の欄で述べたプロセスを終えた後、図6の更新変数Mix32の生成プロセスにおいて、前記[3]の欄の交換算法1で得たMix32の値に基づいて、次の式により更新変数Mix32が、
MSBS=(Index2>>27) (2.3)
Mix32=ROTL32(Mix32,MSBS)
Mix32=Mix32 XOR DM[fix(Mix32>>24]XOR DM[fix(Mix32)]
として与えられる。所定値Mix32としては、前期[3]の欄で説明した最後に得られた変数Index2の最上位ビットを取り出し、MSBSを得る。上記の式(2.3)のMix32=ROTL32(Mix32,MSBS)のように、新たなMix32を得る。そして、新たなMix32の最上位バイトと最下位バイト(Least significant byte)に分ける分割の処理を行い、この分割で得られた2バイトの値(two bytes values)を夫々アドレスとして扱い、動態S−boxにおけるこれら2つのアドレスから夫々の32ビットのワード(two 32−bit words)を取得する。ここまでのプロセスの後に、上記式(2.3)のMix32=Mix32 XOR DM[fix(Mix32>>24)]XOR MD[fix(Mix32)]のように、3つの32ビットのワード(three 32−bit words)について2つの排他的論理和演算を実行し、更新変数Mix32を生成する。
この図5の出力のインデックスポインターyと図6の出力の更新変数Mix32は、暗号化対象の平文の全文を暗号化するために1回でだけ生成され、図7に示すキースおリーム生成アルゴリズムの入力として利用される。
他方、図7のキーストリーム生成アルゴリズムでは、図5のプロセスで生成されたインデックスポインターyと図6のプロセスで生成された更新変数Mix32を最初の入力とし、後述する式(3)によりそのインデックスポインターyを更新し、後述する式(6)によりその更新変数Mix32を更新し、2ワード(8バイト)のキーストリームの生成という1ループのキーストリーム生成プロセスにおいて更新されたインデックスポインターyと更新変数Mix32を一度だけ使用し、続く2ワード(8バイト)のキーストリームの生成という1ループのキーストリーム生成プロセス毎にインデックスポインターyと更新変数Mix32を更新する。キーストリーム生成アルゴリズムにおけるインデックスポインターyと更新変数Mix32の更新については後の欄[7]と欄[10]において詳しく説明する。
キーストリーム生成前の準備
Pi++暗号のキースケジュールアルゴリズムが終わった後、キーストリームを生成せずにキーストリームアルゴリズムを256回実行する。これによって、動態S−boxにある各要素は少なくとも一回更新された。その結果、動態S−boxにある全ての要素(words)は決して知られることのない値に変更された。インデクスポインターyもMix32も256回に更新され、決して知られることのない値に変更された。
[5]キーストリーム生成アルゴリズム
図7は、キーストリーム生成アルゴリズムを示す図である。本発明「Pi++」は、図7に示すように、キーストリーム生成アルゴリズム中のキーストリーム生成のプロセス(the process of keystream generation)の間中には動態S−boxにおけるどの値も交換しない。代わりに、本発明「Pi++」では、動態S−boxにおける全ての要素を更新する(update)。更新は2つの更新から成り立つ。一つ目の更新とは動態S−boxにある全ての要素は一つ一つ順序的に最新化(update)される。二つ目の更新とは動態S−boxにある全ての要素は動態的に選択され、更新される。したがって、動態S−boxの中の要素範囲は最大限度に拡張される。
図7のキーストリーム生成アルゴリズムは、2ワード(8バイト)のキーストリームの生成という1ループのキーストリーム生成プロセスを実行するためのアルゴリズムを示す。そのループを繰り返して2ワード(8バイト)ずつキーストリームを生成することにより、暗号化対象の平文または復号化対象の暗号文の全体の長さだけのキーストリームが生成される。平文全体の長さだけのキーストリームとその平文との排他的論理和演算により、平文全体の暗号化が達成される。暗号文全体の長さだけのキーストリームとその暗号文全体との排他的論理和演算により、暗号文全体の復号化が達成される。
[6]コインデックスポインターx
インデックスポインターxは、図7にx=DM(i)と記載されている、キーストリーム生成アルゴリズムにおいて生成される。ここでインデックス変数iの範囲は0〜255である。この方程式によるxも、決して知られることのないインデックスポインターである。何故ならば、動態S−boxの要素の配列(permutations of dynamic S−box’s elements)は、前記[1]−[4]の欄で説明したキースケジュールアゴリズム(Key Schedule Algorithm)によって変更されている(rearranged)こととキーストリーム生成する前の準備で動態S−boxにある各要素は少なくとも一回更新されるからである。インデックスポインターxも、2ワード(8バイト)のキーストリームの生成という1ループのキーストリーム生成プロセスにおいて一度だけ使用され、その1ループのキーストリーム生成プロセス毎に更新される。
[7]インデックスポインターyの更新
インデックスポインターyを更新する過程は次の式(3)で示される。
y=DM[i]=DM[fix(x≫8)]XOR y XOR Mix32 (3)
方程式(3)の演算は、インデックスポインターxの最下位バイト(Least significant byte)から第2のバイトをアドレスとして指定した動態S−boxの要素DM[fix(x≫8)]とインデックスポインターyと更新変数Mix32との排他的論理和演算をし、その結果により、新しいインデックスポインターyを得る。式(3)の演算で得られた更新したインデックスポインターyは、次のステップでキーストリームを生成するために使用される。その間に、動態S−boxの中の第i番目(ith)の要素の値DM[i]は、新しく更新されたインデックスポインターyと取り替えられる。このプロセスで、DM[fix(x≫8)]とyとMix32という3つの値全ては、決して知られることのない値であり、また2ワート(8バイト)のキーストリームの生成という1ループのキーストリーム生成処理において一度だけ使用され、2ワート(8バイト)のキーストリームの生成毎に更新される。
[8]インデックスポインターxの動態フリップ(Dynamic flip)
インデックスポインターxは、キーストリーム生成アルゴリズムにおける次のステップのキーストリームを生成するために、動態的にフリップ(flip)される。インデックスポインターxをフリップする過程は、下の式(4)の中に示されている。
x=flip(x) (4)
flip(x)の定義:
flip(x)=x XOR(1≪(y mod 32))
このflip(x)は、フリップ(flip)されたインデックスポインターxを得る関数である。インデックスポインターxの動態フリップでは、32−ビット長のインデックスポインターyの最下位5ビット(Least significant bits)に依頼して、動態的に任意な1ビットが選択され、フリップ(flip)される。この時の5ビットの範囲は0〜31である。インデックスポインターyをモジュロ32(mod 32)することによって、インデックスポインターyの最下位5ビットを得る。その結果は1を左シフトするビット数を決定する。上記式(4)に書いてあるプロセス(1≪(y mod 32))によって、生成された1つの1を持つ数はxと最後に排他的論理和演算(XOR)をして、インデックスポインターxが最終的に動態フリップされる。つまり、yの最下位5ビットが指定したxの1ビットが動態的にフリップ(flip)される。フリップ(flip)したインデックスポインターxは、次のステップのキーストリーム生成に使用される。
[9]インデックスポインターyの動態フリップ(Dynamic flip)
前記[7]の欄で得られた更新したインデックスポインターyは一度だけ使用される。インデックスポインターyは、キーストリーム生成アルゴリズムにおける次のステップのキーストリームを生成するために、動態的にフリップされる。インデックスポインターyをフリップ(flip)する過程は、下の式(5)の中に示される。
y=flip(y) (5)
flip(y)の定義:
flip(y)=y XOR(1≪(Mix32≫27))
このflip(y)は、フリップ(flip)されたインデックスポインターyを得る関数である。インデックスポインターyの動態フリップでは、32−ビット長のMix32の最上位5ビット(Most significant bits)に依頼して、動態的に任意な1ビットが選択され、フリップ(flip)される。この時の5ビットの範囲は0〜31である。Mix32を27ビット右シフトすることによって、Mix32の最上位5ビットを得る。その結果は1を左シフトするビット数を決定する。上の式(5)に書いてあるプロセス(1≪(Mix32≫27))によって、生成された1つの1を持つ数はyと最後に排他的論理和演算(XOR)をして、インデックスポインターyは最終的に動態フリップされる。つまり、Mix32の最上位5ビットが指定したyの1ビットが動態的にフリップ(flip)される。フリップ(flip)したインデックスポインターyは、次のステップのキーストリーム生成に使用される。
[10]更新変数Mix32の更新
更新変数Mix32は一度だけ使用することができるので、使用された直後に更新されなければならない。更新変数Mix32を更新する方法は方程式(6)の中で説明される。
MSB=(Mix32≫27) (6)
temp=ROTL32(Mix32,MSB)
Mix32=DM[Mix32≫24]=temp XOR DM[fix(Mix32)]
式(6)におけるROTL32(Mix32,MSB)は、更新変数Mix32のMSB依存左循環(MSB−dependent left rotation)のことである。それは更新変数Mix32の最上位ビット(Most significant bits(MSB))の値に依頼して左循環シフト(Left rotation shift)することである。したがって、任意の32ビットワードのための循環シフト(rotation shift)数は、(32−1)より少ないか又は同等である。更新変数Mix32の更新はMix32のMSB(Most significant bits)に依頼してMSB−dependent循環シフトを行う。ここでの循環シフトする範囲は0−31である。その結果は循環する前の更新変数Mix32のLSB(Least significant bits)が指した動態S−boxにある内容と排他的論理和演算(XOR)することにより、新たな更新したMix32を得る。更新変数Mix32が循環する前の値のMSB(Most significant bits)を動態S−boxのアドレスとして、新たに得た更新変数Mix32の値をそのアドレスの内容を更新する。式(6)及び上述のことから分かるように、更新変数Mix32の内容が知られることはない。
[11]キーストリームの生成
2ワード(2ワード:32ビット×2=64ビット)のキーストリームは、キーストリーム生成アルゴリズムによって生成される。その生成プロセスは、下記式(7.1−7.6)で示さる。
K1=DM[fix(x)XOR(y≫24)] (7.1)
K2=DM[(x≫24)XOR fix(y)] (7.2)
Temp1=fix(k1≫(K2≫27)mod24)) (7.3)
Temp2=fix(K2≫(K1 mod 24)) (7.4)
if(Temp1=Temp2)flip(Temp2)
KS1=DM[Temp1] (7.5)
KS2=DM[Temp2] (7.6)
上に記述されるように、インデックスポインターx及びインデックスポインターyは、夫々4バイトに分割りされる。インデックスポインターxの最下位バイトとインデックスポインターyの最上位バイトとを排他的論理和運算を行う。その排他的論理和運算の結果は、動態S−boxのアドレスとして扱う。この動態S−boxのアドレスの内容を取り出し、K1を得る(7.1)。インデックスポインターxの最上位バイトはインデックスポインターyの最下位バイトともう一度排他的論理和運算を行う。この排他的論理和運算の結果は、もう一つの動態S−boxのアドレスとして扱う。この動態S−boxのアドレスの内容を取り出し、K2を得る(7.2)。続いて、(7.2)で生成されたK2を利用して、右シフトをした後にモジュロ24(mod 24)する。そして式(7.3)のように、先ほどのプロセスにより得られた内容(K2≫27)mod24))]に依存して、k1を右シフトする。この時、(k1≫((K2≫27)mod24))の右シフトするビット数の範囲は0〜23である。また、fix(k1≫((K2≫27)mod24))のように、Temp1について、K1の任意な8ビットの値を得ることができる。その8ビットの値を動態S−boxのアドレスとして利用し、そのアドレスにある内容を取り出しキーストリームの第1のワードKS1(7.5)を得ることができる。キーストリームKS2を生成するには、(7.1)で生成されたK1を利用し、それをモジュロ24(mod24)する。そして式(7.4)のように、先ほどのプロセスにより得られた内容(K1 mod24)に依存して、K2を右シフトする。この時、(K2≫(K1 mod 24))の右シフトするビット数の範囲は0〜23である。Temp2について、fix(K2≫(K1 mod 24))のように、K2の任意な8ビットの値を得ることができる。若しTemp1=Temp2であれば、Temp2は動態的にフリップ(Flip)される。若しTemp1≠Temp2であれば、Temp2の値は直接に動態S−boxのアドレスとして利用し、そのアドレスにある内容を取り出しキーストリームの第2のワードKS2を得ることができる。
Temp1=Temp2の場合のflip(Temp2)とは、次のように定義することができる。
flip(Temp2)=Temp2 XOR(1<<(Temp2 mod 8))
Temp1=Temp2の場合では、Temp2が動態的にフリップされた後、上記式(7.6)のように、Temp2の8ビットの値を動態S−boxのアドレスとして利用し、そのアドレスにある内容を取り出しキーストリームの第2のワードKS2を得ることができる。
[12]キーストリーム生成の繰る返し
要求された長さのキーストリームを得るために、[5]の欄から[11]の欄までの範囲のプロセスを必要な回数だけ繰り返す。要求された長さのキーストリームとは、暗号化対象の平文の長さを少なくとも有するキーストリームである。[5]欄から[11]欄までのプロセスが256回繰り返された後には、動態S−boxの中の全ての要素は少なくとも一回更新されている。上に記述された各プロセスにおいて、インデックスポインターxとインデックスポインターyと更新変数Mix32が、一度使用された直後にそれら自身の更新アルゴリズムによって更新される。
図2は復号化のプロセスを示す図である。暗号化のプロセスを示す図1との対比で分かるように、図2の復号化のプロセスは暗号化のプロセスと実質的に全く同じである。暗号化プロセスにおける平文に替えて復号化のプロセスでは暗号文が入力される。したがって、前記[1]欄から[12]欄のここまでに記述された暗号化アルゴリズム(Encryption Algorithm)によって生成された暗号文を解読する復号化アルゴリズム(Decryption Algorithm)の構成(configuration)は、前記[1]欄から[12]欄のここまでに記述された暗号化アルゴリズムの構成と同じである。ある秘密キーを使用してその暗号アルゴリズムで生成された暗号文は、その暗号化アルゴリズム同じ構成の復号化アルゴリズムに同じ秘密キーを適用して、解読される。
以上の「1]欄から[12]欄の記載により、本発明「Pi++」の基本的な実施の形態である第1の実施の形態を説明した。
図9は、全ての値が”0”である平文のダンプリストを示すテーブルである。図10は、暗号化キーを”Without IV”とし、本発明「Pi++」の第1の実施の形態(初期化ベクルトIV無し)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。また図11は、暗号化キーを”Private”とし、本発明「Pi++」の第1の実施の形態(初期化ベクルトIV無し)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。図10と図11を参照して明らかなように、全てのデータを完全に同じである図9の平文であっても、本発明「Pi++」の第1の実施の形態により暗号化すれば、完全に乱数化された暗号文を得ることができる。
第2の実施の形態
現在のIV無しの対称暗号(ストリーム暗号)は、同じキーは必ず同じキーストリームを生成する、という重大な問題を常に抱えている。つまり、ストリーム暗号の中で同じキーを繰り返して使用することは、ワンタイムパット(one time pad,OTP)を再度使用するのと同じく、暗号の安全性を損なう。
そのような問題を解決するために、初期化ベクルト(Initialization Vectors,IV)の概念(concept of initialization vectors)は不可欠である。本発明「Pi++」の第2の実施の形態は、基本的な実施の形態である前述の第1の実施の形態に初期化ベクルトの概念を加えることにより、そのような重大な問題を解決できるようにしたものである。初期化ベクルト(IV)は、暗号の出力中の乱数性を増加させるために使用される乱数の値である。IVは不規則(random)でユニークな値であるので、第2の実施の形態では、暗号化毎に同じキーが使用されたとしても、ストリーム暗号の出力は暗号化の都度に相違する。キーの変更が高いコストなプロセスである場合、そのような初期化ベクルトの概念の適用は非常に有用である。初期化ベクルトIVを備えた本発明「Pi++」の第2の実施の形態は、基本的実施の形態(prototype)である第1の実施の形態の変形である。第2の実施の形態はただIV(初期化ベクルト)の入力部を持っているのに対し、第1の実施の形態はIV入力部を持たない点で両者は相違する。すなわち、第2の実施の形態は平文と個人のキーとIVという3つのデータの入力部を持っているのに対し、第1の実施の形態は平文と個人のキーという2つのデータの入力部だけを備えている。
両実施の形態の違いについて、さらに以下で説明する。この発明の第2の実施の形態は基本的な実施の形態である第1の実施の形態にIVを加えたものである。この第2の実施の形態において、IVのサイズは128bits(16bytes)で、同じIVに対して、重複して使わない。そして、IVは乱数であること。この場合、暗号化毎に同じキーが使用されても、異なるIVは異なる結果を生成する。
第2の実施の形態におけるIVのサイズは128ビット(16バイト)である。その128ビット(16バイト)は、IVの第1のバイトで始まる4つのワード(4×32)に分割される。キースケジュールアゴリズム(Key Schedule Algorithm)では、第1のワード(word)は更新変数Mix32の初期の値として扱われる。第2のワード(word)はインデックスポインターxの初期の値として扱われる。第3のワード(word)はインデックスポインターyの初期の値として扱われる。第4のワード(word)は変数Index2の初期の値として扱われる。上に記述されたすべての4つのワード(word)は、キースケジュールアルゴリズム(Key schedule algorithm)において初期値として使用されるだけである。
本発明「Pi++」の第2の実施の形態は第1の実施の形態と比べると、キースケジュールアルゴリズム(key schedule algorithm)の交換アルゴリズム1における更新変数Mix32の算法に関し、次の相違がある。
1)相違1
Mix32=Mix32 XOR Index2―――――第2の実施の形態(初期化ベクルトIV付き)
Mix32=Mix32+Index2―――――第1の実施の形態(初期化ベクルトIV無し)
2)相違2
キースケジュールアゴリズムにおいて、全ての交換プロセス、つまりswap1とswap2のプロセスが実行し終わった後、第2の実施の形態で生成された変数は第1の実施の形態で生成されたのと違い、インデックスポインターxも生成される。即ち、第2の実施の形態はインデックスポインターyと、更新変数Mix32と、インデックスポインターxを生成するが、第1の実施の形態はインデックスポインターyと更新変数Mix32だけを生成する。
上に言及されたように、動態S−boxの中の要素交換が実行し終わった後に、インデックスポインターxは以下に記述された関数に基づいて、生成される。
LSBS=(Index2>>8)mod 32 (8.0)
x=ROTL32(x,LSBS)
x=x XOR DM[fix(x>>24)]XOR DM[fix(x)]
上記の式(8.0)のLSBS=(Index2>>8)mod 32のように、前記[3]の欄で説明した最後に得られた変数Index2を8ビットの右シフトした後にモジュロ32(mod 32)の操作を行うことにより、LSBSを得る。そして、x=ROTL32(x,LSBS)のように、新たなxを得る。新たなxの最上位バイトと最下位バイト(Least significant byte)に分ける分割の処理を行い、この分割で得られた2バイトの値(two bytes values)を夫々アドレスとして扱い、動態S−boxにおけるこれら2つのアドレスから夫々の32ビットのワード(two 23−bit words)を取得する。ここまでのプロセスの後に、上記式(8.0)のx=x XOR DM[fix(x>>24)]XOR DM[fix(x)]のように、3つの32ビットのワード(three 32−bit words)について2つの排他的論理和演算を実行し、インデックスポインターxを生成する。このように、キーストリーム生成アルゴリズム用のインデックスポインターxが得られる。第2の実施の形態でのインデックスポインターy及び更新変数Mix32の生成は第1の実施の形態でそれらの変数の生成と同じである。使われるインデックスポインターx及びy及び変数Mix32は一度だけ使用され、それらの値が知られることはない。
3)相違3
本発明「Pi++」の第2の実施の形態は第1の実施の形態と比べると、キーストリーム生成アルゴリズムにおけるインデックスポインターxの生成に関し、次の相違がある。
x=x XOR DM[i]―――――第2の実施の形態(初期化ベクルトIV付き)
x=DM[i]―――――――――第1の実施の形態(初期化ベクルトIV無し)
以上に第1及び第2の実施の形態間の相違を説明した図12は、暗号化キーを”Without IV”とし、本発明「Pi++」の第2の実施の形態(初期化ベクルトIV付き)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。また図13は、暗号化キーを”Private”とし、本発明「Pi++」の第2の実施の形態(初期化ベクルトIV付き)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。図12及び図13を参照して明らかなように、全てのデータが完全に同じである図9の平文であっても、本発明「Pi++」の第2の実施の形態により暗号化すれば、完全に乱数化された暗号文を得ることができる。
[13]第3の実施の形態
本発明「Pi++」の第3の実施の形態は、基本的な実施の形態である第1の実施の形態に、認証と初期化ベクルトIVを追加したものである。データ送信プロセスの間にデータを安全に送信すること、そして送信者が送信したデータと受信者が受信したデータとが同一であることが、最も一般的な実際生活のセキュリティ問題である。近代社会では、私たちの周りの多くの部分がセキュリティ保護を要求する。例えば、インターネットは、暗号化及び認証の両方を要求する例の一つである。初期化ベクルトIV及び認証の両方の機能を備える本発明「Pi++」の第3の実施の形態は、インターネット及び携帯電話のような電子式送信装置における暗号化及び認証の必要条件を満たすことを目的している。
この本第3の実施の形態は、暗号化及び認証の両方の有効な組み合わせをインプリメントする柔軟な組み合わせ方式(combination methodology)を提供する。この第3の実施の形態の「Pi++」発明は、ストリーム暗号Phelixの中で利用された平文の認証ではなく、暗号文の認証を使用する。基本的な実施の形態に初期化ベクトルIVを加えた第2の実施の形態は、平文を暗号化するために使われ、そして暗号文のMAC(Message Authentification Code,メッセージ認証コード)はHMAC algorithmのような暗号文のMAC algorithmによって生成される。その後、暗号文及び暗号文のMACの両方は受信者へ送られる。受信者は、送信者が使用したものと同じアルゴリズムの使用により、最初に暗号文をチェックする。暗号文のMACが異なる場合、暗号文は解読する必要無しで削除される。そのような容易で明瞭で、簡潔な方法の使用によって、上に記述された問題は容易に回避することができる。MAC(メッセージ認証コード)は、データの整体性(integrity)及びメッセージの信頼性(authenticity)の両方を同時に検証する(verify)ために使用される。SHAファミリーのようなセキュリティハッシュ関数(cryptographic hash function)はMACの計算の中で使用される。MACの暗号強度は、根本的なハッシュ関数の暗号強度、キーのサイズと質、及びハッシュ関数出力のビット長さのサイズに依存する。
以上に実施の形態を挙げ、具体的に説明したように、LFSRs方法を使わないで、動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)といった全て動態的な概念を一貫に利用する本願発明は、安全性に関する懸念を回避することができると同時に、ワード(word)とバイトの操作(byte manipulations)だけを使用することにより、ソフトウェア及びハードウェア双方の実現をはるかに容易にする。前記第1の実施の形態で使用されるメモリ空間は、主として動態S−box用のDM[0]からDM[255]まで及ぶ256のwords(256×32ビット(bits))である。その最256バイトのメモリ空間はKEY[0]からKEY[255]までの秘密キーと、整数インデックスポインターxと、整数インデックスポインターyと、更新変数Mix32と、少数の整数変数とに使用される。1ワードに関するモジュロ256(modulo 256 on a word)はそのワードをbitwise and with 255(ワード“bitwise and with”255)行うことである。
本発明では、動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)並びにインデックスポインターx及びyを組み合わせることによって、実際の動態S−boxを得ることができる。動態S−boxには、0から232−1までの範囲の232個の32ビットの要素があると見え、また、全ての要素の配列(permutations)はいつも変わっている。本発明「Pi++」は、ソフトウェアで、若しくはハードウェアで、又は両方の組み合わせで、インプリメントされる(implemented)ことが可能である。ここに記述された暗号化及び復号化アルゴリズムは、例示であり、本発明は、前述の特定の実施例、又は実施例の組み合わせに制限されない。例えば、動態S−boxの具体例で挙げた32ビットwordsは32×256ビットのサイズに相当するが、本発明「Pi++」では、必要に応じて、64×256bitsのサイズに相当するように、動態S−boxを64ビットwordsに拡張することは容易にできる。言いかえれば、この発明は、64ビットのシステム・アーキテクチャーによって提示された能力(performance)の有利性を完全に利用することができるのであって、動態S−boxの64×256ビットのサイズに対応する64ビットのwordのサイズで構成できる。更に言えば、より大きな内部状態を備えた64ビットワードでのこの発明の実施は、高いセキュリティを保証し、処理速度をはるかに高速にし、またより多くの他の長所を提供する。私たちは、『別々に記述されたアルゴリズムに基づくことだけによって、本発明のストリーム暗号「Pi++」は、RC4と同等の軽さを持つだけでなく、RC4より少なくとも3又は4倍速い暗号である。』と宣言できる。
本願発明は、具体的に詳しく説明した前述の実施の形態に制限されるものではなく、特許請求の範囲に記載した範囲において各種の変形が可能であることを、ここに改めて確認する。
本発明の第1の実施の形態による暗号化プロセスを示す流れ図である。 第1の実施の形態による復号化プロセスを示す流れ図である。 交換アルゴリズム1による交換プロセスを示す図である。 交換アルゴリズム2による交換プロセスを示す図である。 インデックスポインターy生成プロセスを示す図である。 更新変数Mix32生成プロセスを示す図である。 キーストリーム生成アルゴリズムを示す図である。 図1乃至図7における記号を説明する図である。 全ての値が“0”である平文のダンプリストを示すテーブルである。 暗号化キーを”without IV”とし、本発明「Pi++」の第1の実施の形態(初期化ベクルトIV無し)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。 暗号化キーを”Private”とし、本発明「Pi++」の第1の実施の形態(初期化ベクルトIV無し)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。 暗号化キーを”without IV”とし、本発明「Pi++」の第2の実施の形態(初期化ベクルトIV付き)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。 暗号化キーを”Private”とし、本発明「Pi++」の第2の実施の形態(初期化ベクルトIV付き)により図9の平文を暗号化して得た暗号文のダンプリストを示すテーブルである。
符号の説明
1 動態S−box(図では、DMと簡略表記)
2 キー入力
3 動態S−boxにおける要素交換
4 要素交換3より得られた動態S−boxの最終配列(final permutationの一時記憶
5 インデックスポインターy及び更新変数Mix32の取得
6 キーストリーム生成前の準備
7 キーストリーム生成
8 平文入力
9 暗号化
10 暗号文出力
101 初期化された動態S−box(Initialized Dynamic S−box)
102 秘密キー
103 要素交換された動態S−box
104 要素交換3より得られた動態S−boxの最終配列(Final permutation of Dynamic S−box)
105 インデックスポインターy及び更新変数Mix32
106 更新した動態S−box及びインデックスポインターyと更新変数Mix32
107 キーストリーム(Keystream)
108 平文(Plaintext)
109 暗号文(Ciphertext)
507 暗号文入力
508 復号化
509 平文出力
1000 パイ・データ(Pi data)
2000 秘密キー(Key)
5007 暗号文(Ciphertext)
5008 平文(Plaintext)

Claims (4)

  1. 動態S−box(Dynamic S−box)・動態フリップ(Dynamic flip)・動態シフト(Dynamic shift)・動態更新(Dynamic update)・動態循環シフト(Dynamic circular shift)といった全て動態的な概念を一貫に利用してキーに基づいたキーストリームを生成し、該キーストリームと平文とを排他的論理和演算により該平文を暗号化した暗号文を生成するキーストリーム暗号方法において、
    円周率πを構成する無限数列における1又は複数の部分数列を選択してなる数列をパイ・データと称するとき、n個(nは2以上の整数)の要素でなる動態S−box(Dynamic S−box)を該パイ・データで初期化する初期化プロセスと、
    前記初期化ステップにより初期化された前記動態S−boxにおける要素を、キーに依存する交換アルゴリズムにより、相互に交換する要素交換プロセスと、
    動態循環シフト(Dynamic circular shift)と前記動態S−boxにおける複数の要素よりインデックスポインターyを生成するインデックスポインターy生成プロセスと、
    動態循環シフトと前記動態S−boxにおける複数の要素より更新変数Mix32を生成する更新変数Mix32生成プロセスと、
    キーストリーム生成する前の準備として、キーストリームを生成せずにキーストリームアルゴリズムを256回実行するプロセスと、
    前記動態S−boxにおける1つの要素をインデックスポインターxとして選択するインデックスポインターxの選択プロセスと、
    前記インデックスポインターy生成プロセスで生成したインデックスポインターy、前記更新変数Mix32生成プロセスで生成した更新変数Mix32及び前記インデックスポインターx選択プロセスで選択した前記インデックスポインターxに基づき前記インデックスポインターy生成プロセスで生成したインデックスポインターyを更新するインデックスポインターy更新プロセスと、
    前記インデックスポインターxの選択プロセスで選択した前記インデックスポインターxを動態的にフリップ(Dynamic flip)することにより、インデックスポインターxを動態的にフリップするインデックスポインターxの動態フリッププロセスと、
    前記インデックスポインターyの更新プロセスで更新した前記インデックスポインターyを動態的にフリップ(Dynamic flip)することにより、インデックスポインターyを動態的にフリップするインデックスポインターyの動態フリッププロセスと、
    前記更新変数Mix32の生成プロセスで生成した更新変数Mix32に基づき動態循環シフト及び動態S−boxにおける要素を加工することにより、更新変数Mix32を更新する更新変数Mix32更新プロセスと、
    前記更新変数Mix32更新プロセスで更新される前の更新変数mix32の最上位バイト(Most Significant byte)が指定したアドレスの内容が前記更新変数Mix32更新プロセスで更新した更新変数Mix32の内容によって動態更新(Dynamic update)される更新変数Mix32の動態更新プロセスと、
    前記のインデックスポインターxの動態フリッププロセスでフリップされた後のインデックスポインターxと前記のインデックスポインターyの動態フリッププロセスでフリップされた後のインデックスポインターyに基づき排他的論理和演算をすることにより得た結果が指定した前記動態S−boxのアドレスにある内容を取り出し、臨時変数K1とK2を生成する臨時変数生成プロセスにおいて、前記の動態的にフリップされた後のインデックスポインターxとインデックスポインターyの中から夫々任意の1バイトを選択し、2つのバイトを排他的論理和演算(XOR)行った結果が動態S−boxのアドレスとして、そのアドレスの内容を取り出し、臨時変数K1を生成する臨時変数生成プロセス及び前記の動態的にフリップされた後のインデックスポインターxとインデックスポインターyの中から先ほどに使われた1バイトと異なった1バイトを夫々からもう一度任意的に選び、2つのバイトを排他的論理和演算(XOR)行った結果が動態S−boxのもう1つのアドレスとして、そのアドレスの内容を取り出し、もう1つの臨時変数K2を生成する臨時変数生成プロセスと、
    前記の臨時変数K1と臨時変数K2生成プロセスで生成された臨時変数K1と臨時変数K2に基づいて、動態シフト(Dynamic shift)とモジュロ算法(modulo)の加工により夫々の臨時変数K1と臨時変数K2から任意的な8ビットが動態的に選択され、夫々は動態S−boxのアドレスとし、夫々のアドレスにある内容を第1及び第2ワードとし、第1及び第2のワードを連接して2ワードのキーストリームを生成する
    ことを特徴とするキーストリーム暗号方法。
  2. 前記交換アルゴリズムは、2つの交換アルゴリズムから成り立ち、
    交換アルゴリズム1では、前記動態S−boxにおける第1番目の要素を他の要素と交換し、
    交換アルゴリズム2では、前記動態S−boxにおける残りの255個の要素を他の要素と交換する
    ことを特徴とする請求項1に記載のキーストリーム暗号方法。
  3. 初期化ベクトルIV(128ビット)を複数のデータに分割し、更新変数Mix32、インデックスポインターx、インデックスポインターy、そしてIndex2を夫々最初の初期化の初期値として扱う
    ことを特徴とする請求項1乃至2に記載のキーストリーム暗号方法。
  4. 請求項1乃至3に記載の方法により平文を暗号化して生成した暗号文に、暗号文のMAC(メッセージ認証コード)を付加することを特徴とする認証機能付きストリーム暗号方法。
JP2007341594A 2007-12-04 2007-12-04 Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法 Active JP5044848B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007341594A JP5044848B2 (ja) 2007-12-04 2007-12-04 Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007341594A JP5044848B2 (ja) 2007-12-04 2007-12-04 Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法

Publications (2)

Publication Number Publication Date
JP2009139899A JP2009139899A (ja) 2009-06-25
JP5044848B2 true JP5044848B2 (ja) 2012-10-10

Family

ID=40870521

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007341594A Active JP5044848B2 (ja) 2007-12-04 2007-12-04 Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法

Country Status (1)

Country Link
JP (1) JP5044848B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109951268B (zh) * 2019-02-18 2020-12-22 吉林大学珠海学院 基于位置换和位变换的加密解密方法和装置
US11580234B2 (en) 2019-06-29 2023-02-14 Intel Corporation Implicit integrity for cryptographic computing
US11575504B2 (en) * 2019-06-29 2023-02-07 Intel Corporation Cryptographic computing engine for memory load and store units of a microarchitecture pipeline
US11403234B2 (en) 2019-06-29 2022-08-02 Intel Corporation Cryptographic computing using encrypted base addresses and used in multi-tenant environments
US11250165B2 (en) 2019-12-20 2022-02-15 Intel Corporation Binding of cryptographic operations to context or speculative execution restrictions
US11580035B2 (en) 2020-12-26 2023-02-14 Intel Corporation Fine-grained stack protection using cryptographic computing
US11669625B2 (en) 2020-12-26 2023-06-06 Intel Corporation Data type based cryptographic computing

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004325677A (ja) * 2003-04-23 2004-11-18 Sony Corp 暗号処理装置および暗号処理方法、並びにコンピュータ・プログラム
JP2006238438A (ja) * 2005-02-22 2006-09-07 Samsung Electronics Co Ltd 保安アルゴリズム回路及びデータ暗号化方法
US8443020B2 (en) * 2005-09-09 2013-05-14 Mitsubishi Electric Corporation Pseudo random number generator
JP2007086704A (ja) * 2005-09-22 2007-04-05 Chaosware Inc 初期ベクトル値設定方法

Also Published As

Publication number Publication date
JP2009139899A (ja) 2009-06-25

Similar Documents

Publication Publication Date Title
Lim CRYPTON: A new 128-bit block cipher
CN104488218B (zh) 加密装置、解密装置、加密方法、解密方法
JP5044848B2 (ja) Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法
Verma et al. Performance analysis of RC6, Twofish and Rijndael block cipher algorithms
US20080304664A1 (en) System and a method for securing information
CN107147487B (zh) 对称密钥随机分组密码
EP1961140A2 (en) Method and system for usage of block cipher encryption
JPH1173101A (ja) 高速ブロック暗号化方法,及び,コンピュータで使用可能な媒体
KR20070057797A (ko) 보안성을 향상시키는 순열 데이터 변환
US10148425B2 (en) System and method for secure communications and data storage using multidimensional encryption
JP2009503580A (ja) 対称鍵データ暗号化の方法
Singh Modified Vigenere encryption algorithm and its hybrid implementation with Base64 and AES
Elgeldawi et al. A comparative analysis of symmetric algorithms in cloud computing: a survey
Asaad et al. Advanced Encryption Standard Enhancement with Output Feedback Block Mode Operation
CN108270545A (zh) 一种基于移动互联网的改进的des数据加密算法
Masoodi et al. Symmetric algorithms I
Noura et al. Overview of efficient symmetric cryptography: dynamic vs static approaches
JPWO2006019152A1 (ja) メッセージ認証子生成装置、メッセージ認証子検証装置、およびメッセージ認証子生成方法
CN109714154B (zh) 一种代码体积困难白盒安全模型下的白盒密码算法的实现方法
JP5365750B2 (ja) ブロック暗号化装置、復号装置、暗号化方法、復号方法およびプログラム
Djordjevic et al. Conventional Cryptography Fundamentals
JP2008256817A (ja) ストリーム暗号方法および復号方法、並びにパイ・データに基づく暗号算法および復号化算法
Jagetiya et al. Evolution of Information Security Algorithms
JP2021071570A (ja) 情報処理装置、情報処理方法及びプログラム
Hattab et al. Developing the Complexity and Security of the Twofish Algorithm Through a New Key Scheduling Design

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100419

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100419

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100707

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120409

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120417

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120508

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: 20120619

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150727

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150727

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5044848

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250