JP5044848B2 - Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法 - Google Patents
Pi++ストリーム暗号の暗号方法および復号方法、並びにパイ・データに基づく暗号算法及び復号化算法 Download PDFInfo
- 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
Links
Images
Description
円周率π=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ビットサイズ)のキーストリームを生成する
ことを特徴とするキーストリーム暗号方法。
交換アルゴリズム1では、前記動態S−boxにおける第1番目の要素を他の要素と交換し、
交換アルゴリズム2では、前記動態S−boxにおける第2番目から最後のn番目の要素を他の要素と交換する
ことを特徴とする前記(1)に記載のキーストリーム暗号方法。
初期化ベクルトIV(128ビット)を複数のデータに分割し、更新変数Mix32と、インデックスポインターxと、インデックスポインターyと、Index2を夫々最初の初期化の初期値として扱う
ことを特徴とする前記(1)乃至(2)に記載のキーストリーム暗号方法。
本願発明は、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++」の第1の実施の形態で使用するキーは、8ビットの倍数の可変長さキーであり、そのキーのデータ長(Lバイト)は16から2048ビットの範囲である。動態S−boxは、まず256個のパイ・データで初期化される。256個の各パイ・データのビット長は32ビットである。そこで、動態S−boxの初期化に使われるパイ・データは、無限数であるπの一部分、即ちπを構成する無限の数の内から選んだ256×32ビット(bits)分のデータである。動態S−boxの中の256個の要素は、初期化の後に要素相互間で交換される。その交換の方法は秘密キーに依存する。
本発明「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の実施の形態による暗号化プロセスを示す流れ図であり、図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の実施の形態を説明する。
図1における符号1−6で示すプロセスはキースケジュールアルゴリズムにより実行され、符号7−9で示すプロセスはキーストリーム生成アルゴリズムにより実行される。
キースケジュールアルゴリズムは、256×32ビットサイズの動態S−boxと、32ビットサイズのインデックスポインターyと、32ビットサイズの更新変数Mix32と、32ビットサイズの変数Index1と、32ビットサイズの変数Index2と、1つのカウンタ(counter)とを使用する。
動態S−box(Dynamic S−box)は、各々32のビット長を持つ256ワードのパイ・データで初期化される。256ワードのパイ・データは、無限数πの内の一部のデータであり、πを構成する一連の数字における連続する部分を抽出したものである。
キースケジュールアルゴリズム(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の中の各要素を少なくとも一度交換し、高いセキュリティを保証する。
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(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)で表されている。
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)を意味する。
かくして、ユーザーによって提供される秘密キー(secrete key)に基づいた、動態S−boxの中の全ての要素の並べ替え(permutation)は、ここに最終的に得られる。
図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を生成する。
図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を生成する。
Pi++暗号のキースケジュールアルゴリズムが終わった後、キーストリームを生成せずにキーストリームアルゴリズムを256回実行する。これによって、動態S−boxにある各要素は少なくとも一回更新された。その結果、動態S−boxにある全ての要素(words)は決して知られることのない値に変更された。インデクスポインターyもMix32も256回に更新され、決して知られることのない値に変更された。
図7は、キーストリーム生成アルゴリズムを示す図である。本発明「Pi++」は、図7に示すように、キーストリーム生成アルゴリズム中のキーストリーム生成のプロセス(the process of keystream generation)の間中には動態S−boxにおけるどの値も交換しない。代わりに、本発明「Pi++」では、動態S−boxにおける全ての要素を更新する(update)。更新は2つの更新から成り立つ。一つ目の更新とは動態S−boxにある全ての要素は一つ一つ順序的に最新化(update)される。二つ目の更新とは動態S−boxにある全ての要素は動態的に選択され、更新される。したがって、動態S−boxの中の要素範囲は最大限度に拡張される。
インデックスポインター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ループのキーストリーム生成プロセス毎に更新される。
インデックスポインター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バイト)のキーストリームの生成毎に更新される。
インデックスポインター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は、次のステップのキーストリーム生成に使用される。
前記[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は、次のステップのキーストリーム生成に使用される。
更新変数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の内容が知られることはない。
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を得ることができる。
要求された長さのキーストリームを得るために、[5]の欄から[11]の欄までの範囲のプロセスを必要な回数だけ繰り返す。要求された長さのキーストリームとは、暗号化対象の平文の長さを少なくとも有するキーストリームである。[5]欄から[11]欄までのプロセスが256回繰り返された後には、動態S−boxの中の全ての要素は少なくとも一回更新されている。上に記述された各プロセスにおいて、インデックスポインターxとインデックスポインターyと更新変数Mix32が、一度使用された直後にそれら自身の更新アルゴリズムによって更新される。
現在のIV無しの対称暗号(ストリーム暗号)は、同じキーは必ず同じキーストリームを生成する、という重大な問題を常に抱えている。つまり、ストリーム暗号の中で同じキーを繰り返して使用することは、ワンタイムパット(one time pad,OTP)を再度使用するのと同じく、暗号の安全性を損なう。
本発明「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の実施の形態により暗号化すれば、完全に乱数化された暗号文を得ることができる。
本発明「Pi++」の第3の実施の形態は、基本的な実施の形態である第1の実施の形態に、認証と初期化ベクルトIVを追加したものである。データ送信プロセスの間にデータを安全に送信すること、そして送信者が送信したデータと受信者が受信したデータとが同一であることが、最も一般的な実際生活のセキュリティ問題である。近代社会では、私たちの周りの多くの部分がセキュリティ保護を要求する。例えば、インターネットは、暗号化及び認証の両方を要求する例の一つである。初期化ベクルトIV及び認証の両方の機能を備える本発明「Pi++」の第3の実施の形態は、インターネット及び携帯電話のような電子式送信装置における暗号化及び認証の必要条件を満たすことを目的している。
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)
- 動態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つの交換アルゴリズムから成り立ち、
交換アルゴリズム1では、前記動態S−boxにおける第1番目の要素を他の要素と交換し、
交換アルゴリズム2では、前記動態S−boxにおける残りの255個の要素を他の要素と交換する
ことを特徴とする請求項1に記載のキーストリーム暗号方法。 - 初期化ベクトルIV(128ビット)を複数のデータに分割し、更新変数Mix32、インデックスポインターx、インデックスポインターy、そしてIndex2を夫々最初の初期化の初期値として扱う
ことを特徴とする請求項1乃至2に記載のキーストリーム暗号方法。 - 請求項1乃至3に記載の方法により平文を暗号化して生成した暗号文に、暗号文のMAC(メッセージ認証コード)を付加することを特徴とする認証機能付きストリーム暗号方法。
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)
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)
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 | 初期ベクトル値設定方法 |
-
2007
- 2007-12-04 JP JP2007341594A patent/JP5044848B2/ja active Active
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 |