JPWO2008010441A1 - 暗号装置及びプログラムと方法 - Google Patents

暗号装置及びプログラムと方法 Download PDF

Info

Publication number
JPWO2008010441A1
JPWO2008010441A1 JP2008525838A JP2008525838A JPWO2008010441A1 JP WO2008010441 A1 JPWO2008010441 A1 JP WO2008010441A1 JP 2008525838 A JP2008525838 A JP 2008525838A JP 2008525838 A JP2008525838 A JP 2008525838A JP WO2008010441 A1 JPWO2008010441 A1 JP WO2008010441A1
Authority
JP
Japan
Prior art keywords
array
internal
variable
pseudo
value
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.)
Withdrawn
Application number
JP2008525838A
Other languages
English (en)
Inventor
角尾 幸保
幸保 角尾
照夫 齊藤
照夫 齊藤
博靖 久保
博靖 久保
智保 洲崎
智保 洲崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
NEC Software Hokuriku Ltd
Original Assignee
NEC Corp
NEC Software Hokuriku Ltd
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 NEC Corp, NEC Software Hokuriku Ltd filed Critical NEC Corp
Publication of JPWO2008010441A1 publication Critical patent/JPWO2008010441A1/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/582Pseudo-random number generators
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
    • H04L9/0668Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator producing a non-linear pseudorandom sequence
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/12Transmitting and receiving encryption devices synchronised or initially set up in a particular manner

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Storage Device Security (AREA)

Abstract

データの通信や蓄積の際にデータを秘匿するための安全性の高い暗号装置を提供する。秘密鍵に基づき擬似乱数列を生成し、前記擬似乱数列を平文に作用させることにより暗号文を生成する暗号装置であって、前記擬似乱数列の生成に用いる内部状態として、有限個の数値の列の並び替えを基礎とする状態に基づく内部状態を用い、前記擬似乱数列の生成に用いる一時変数の少なくとも一つが、前記内部状態のうちの一つ、又は、複数個の数値を使用した、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、内部状態の数より小さい数に依存し、あらかじめ定められた、左又は右ローテイトシフトを実行した結果を値とする一時変数であり、前記生成される擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との演算によって生成する。

Description

[関連出願の記載]
本発明は、日本国特許出願:特願2006−199681号(平成18年7月21日出願)の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、データの通信や蓄積の際にデータを秘匿するための暗号装置及びコンピュータ・プログラムと方法に関する。
<ストリーム暗号概説>
データを秘匿するための手法に暗号がある。暗号の中で、高速な暗号化及び復号を行うために、平文をビット単位あるいはバイト単位などで逐次、暗号化するストリーム暗号がある。典型的なストリーム暗号は、鍵ストリームを生成する鍵ストリーム生成部と、鍵ストリームと平文を結合する結合部と、からなる。例えば、暗号処理では、秘密鍵をシードとして擬似乱数を生成し(鍵ストリーム生成部)、その擬似乱数と平文をXORし(結合部)、暗号文を生成する。ここで、XORはビット毎の排他的論理和を意味する。
平文をP、擬似乱数をR、暗号文をCとすると、
P XOR R = C
の関係となる。
復号処理では、同じシードから擬似乱数を生成して暗号文とXORすることで、平文を得ることができる。
C XOR R = (P XOR R) XOR R
= P XOR (R XOR R)
= P XOR 0
= P
の関係となり、
C XOR R = P
が得られる。
<ストリーム暗号の安全性>
ストリーム暗号は、結合部がXORなど簡単な処理で実現されることが多い。そのためストリーム暗号の安全性は、鍵ストリーム生成部が生成する擬似乱数の安全性に依存する。
ここでいう、擬似乱数の安全性は、観測済みの擬似乱数列から、今後発生する擬似乱数列が予測できないことに依存している。
例えば、鍵ストリーム生成部が、a, b, c, a, b, c, ... のように繰り返す鍵ストリームを生成したならば、観測済みの擬似乱数から、今後発生する擬似乱数の予測がつくために、暗号文が解読されてしまう。それは、結合部の逆演算を実行できるからである。
すなわち、擬似乱数Rの予測がつけば、暗号文Cを観測して、
C XOR R = P
により、平文Pを得ることができる。
前述のように考えると、鍵ストリーム生成部が生成する擬似乱数が予測不可能な乱数(真の乱数)を生成するならば、そのストリーム暗号は安全であるといえる。逆にいえば、鍵ストリーム生成部が生成する擬似乱数が真の乱数と区別できるような情報を見つけることができれば、そのストリーム暗号は何がしかの安全性が低下していると考えることが出来る。
<ストリーム暗号の安全性評価手法の一例>
前述ような考え方に基づいて、ストリーム暗号の安全性を評価する手法がある。出力された暗号文や擬似乱数列が、真の乱数列と区別がつくことを示す暗号の攻撃手法を、「Distinguishing Attack」とよぶ。
真の乱数との区別は、出力された暗号文や擬似乱数列が、何がしかの偏りや、特徴を持っていることが示せれば、区別できたと判断する。
Distinguishing Attackでは、このような偏りや特徴を示す手段を、「Distinguisher 」と呼び、このような偏りや特徴を示す手段を発見したり作成したりすることを、「Distinguisherを構成する」と言う。Distinguisher が構成できるならば、Distinguishing Attackが適用できることになる。
ある暗号に対して、Distinguishing Attackが適用できるならば、その暗号は平文または鍵の情報を漏らしている可能性があるので、安全な暗号であると保証することが出来ない。
従って、Distinguishing Attackが適用できる暗号に修正を加え、Distinguishing Attackが適用出来なくなれば、暗号の安全性が向上したと考えることが出来る。
<ストリーム暗号の具体例>
RC4は、Ron Rivest氏によって開発された暗号方式であり、RFC2246(TLS), WEP, WPA など暗号標準としてよく利用されるストリーム暗号である。RC4の仕様は、RFC2246(TLS)などで公開されていると言ってよい。
RC4は、処理単位nビットが可変という特徴を持ちながらも、処理単位nを大きくするとメモリが2n必要となり、鍵スケジュールも極端に低速になる。
そのため、現実的に、nは8ビットを越える実装は少なく、32ビットを越える実装は不可能であった。
よって、RC4は、32bit/64bitプロセッサといった最近のプロセッサ・サイズに適した実装が出来なかった。
32ビットRC4ではこれらの制限が生じないよう、32bit/64bitプロセッサで高速かつ小メモリで実装可能なアルゴリズムに改良された。2005年にG. Gongらが発表した論文(非特許文献1)である。
非特許文献1の論文では、処理単位が32bitの場合、速度は、RC4の約3.1倍高速、メモリはRC4の約2^{-22}倍に抑えることに成功している。
また、内部変数kを追加することにより、過去に報告されたRC4の脆弱性(統計的な偏り)が生じないアルゴリズムに改良されている。
<発明が対象とする攻撃手法の要点>
G. Gongらのアルゴリズムの場合、連続する出力の最下位ビットが必ず一致するというdistinguisherの構成が可能となる。
このdistinguisherにより、約2^{30}のデータ量で真の乱数系列と区別可能となる。
<攻撃手法の例示のための、G. Gongら提案した改良アルゴリズムの説明>
図2は、非特許文献1において、G. Gongらによって提案されたRC4の改良アルゴリズム(32bit RC4)を示す図である。G. Gongらによって提案されたRC4型ストリーム暗号は、配列Sのエントリ数が2^{n}個、配列Sのエントリサイズがmビットである。
また、非特許文献1の提案では、n=8, m=32のモデルについてのみKSAの初期定数aiを定義しているので、本明細書における解析でも、n=8, m=32のモデルについて、詳しく解析を行う。以下では、基本処理単位n, mを元に便宜上GGHN(n,m)と記述する。
図2に示されるように、G. Gongらによって提案されたRC4型ストリーム暗号GGHN(n,m)は、KSA(K,S)とPRGA(S)の二つの処理から構成される。
KSA(K,S)は、いわゆる初期設定であり、40ビットから256ビットの鍵Kを基にして、32ビット256個の配列を並べ替え、初期状態Sを作り出す処理を行う。
PRGA(S)は、鍵ストーリームを生成する処理であり、状態Sに基づいて毎時刻、擬似乱数を生成する。
ここで、 + はmod N上またはmod M上の算術加算を表し、N=2^{8}、M=2^{32}である。
また L は秘密鍵のバイト数を表している。
まず、KSA(K,S)の動作を説明する。
KSAでは、配列Sの初期値として、初期変数aiを代入し(S[i]=ai)、Sエントリどうしのswap(Swap[S[i],S[j]])と算術加算(S[i]=S[i]+S[j] mod M)を繰り返すことで、Sエントリを攪拌している。
KSAにおいて、内部変数kもSエントリ(k=k+S[i] mod M)を使って初期化されるため、PRGAにおけるkの初期値は未知である。
Sエントリの攪拌において、ループ回数rが可変であるが、Sエントリの出現確率がランダムになるように、m=32のときr=20を選択するよう定められている。G. Gongらによる提案では、m=64のときは、r=40を設定するよう定められている。
KSA(K,S)が終了した直後でPRGA(S)が開始されていない状態を時刻t=0とする。時刻t=0のとき、KSA(K,S)の動作が終了し、秘密鍵Kによって配列Sの状態が十分攪拌されていることが期待されている。
次に、PRGA(S)の動作を説明する。
PRGAでは、インデックスi、jに基づく配列Sの参照結果(S[(S[i]+S[j])mod N])と、変数kの算術加算を行って、1ワード(1ワード=32ビット)を鍵ストリーム(out=S[(S[i]+S[j]) mod N]+k) mod M)として出力する。また鍵ストリームを生成するために参照したSエントリ(S[(S[i]+S[j])mod N])を、鍵ストリーム出力直後にkを用いて更新している(S[(S[i]+S[j])mod N]=k+S[i] mod M)。図2における out(=S[(S[i]+S[j])mod N]=k+S[i] mod M )が出力となる鍵ストリームである。
図3では、時刻t=1における動作(PRGAの状態遷移)を示している。配列Sにおいて、アドレス1の値S[1]がA、アドレスAの値S[A]がBの時に、アドレスA+Bの値S[A+B]は、k0+A+Bになる。
図4では、時刻t=2における動作(PRGAの状態遷移)を示している。配列Sにおいて、アドレス1の値S[1]がA、アドレスAの値S[A]がB、アドレス2の値S[2]がC、アドレスA+Cの値S[A+C]がD、アドレスA+Bの値S[A+B]がk0+A+B、の時に、アドレスC+Dの値S[C+D]が、k0+B+C+Dになる。
G. Gongらによって提案されたRC4型ストリーム暗号の安全性は、彼らの提案論文(非特許文献1)のなかでで報告されている。
それによれば、鍵ストリームはSエントリに変数kを算術加算することでマスクされるため、KSAによってkが一様分布に従うとするならば出力系列に偏りが生じないことを示している。
また内部メモリのサイズはRC4の4倍となり、Sエントリが算術加算によって更新されるため、内部メモリを求める攻撃に対しても安全性が向上していると報告されている。
ただし、全てのS-boxエントリ(配列Sの要素)と変数kが同時に偶数になると、以降常に偶数が続くという「weak state」が存在する。しかし、内部メモリのサイズからみて、weak stateの存在確率は起こりえないくらいに十分小さいので、安全性に問題がないとされている。
G. Gong, K.C. Gupta, M. Hell, and Y. Nawaz,"Towards a General RC4-Like Keystream Generator,"SKLOIS Conference on Information Security and Cryptology, CISC 2005,LNCS 3822, pp.162-174, Springer Verlag, 2005. I. Mantin, and A. Shamir: "A Practical Attack on Broadcast RC4,"Fast Software Encryption, FSE 2001, LNCS 2355, pp.152-164,Springer-Verlag, 2001 S. Paul, B. Preneel, and G. Sekar: "Distinguishing Attacks on the StreamCipher Py," eSTREAM, the ECRYPT Stream Cipher Project, Report 2005/081,2005.
非特許文献1〜3の開示事項は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明によって与えられたものである。
<発明が対象とするGGHN(n,m)攻撃手法 Distinguishing Attackの説明>
GGHN(8,32)を解析するにあたり、変数の表記や定義について説明する。
・は、算術乗算を表す。
‖は、データの連結(concatenation)を表す。
X <<< nは、データXの左nビットローテイトを表す。
またlsb(X)はデータXの最下位ビット、LSB(X)はデータXの最下位バイトとし、
lsb(X) = X mod 2
LSB(X) = X mod 2^{8}
となる。
時刻tにおける変数i, j, kをit, jt, ktと表記する。
また時刻tにおけるx番目のS-boxエントリをSt[x]と表記する。
時刻tで出力される鍵ストリームをOtとし、最初の鍵ストリームを出力する時刻をt=1とする。
ここで、PRGAの初期値をi0 = 0, j0 = 0と定義し、k0は未知となる。
また解析を行う上で、攻撃者は鍵ストリームを自由に入手可能であるものとする。
<1番目の出力ワードと2番目の出力ワード間の偏り>
まずGGHN(8,32)の1番目の出力ワードと2番目の出力ワード間に偏りが生じることを説明するため、以下の<ケース1>の条件が成り立つ場合について考察する。
<ケース1>
1. LSB(S1[i1] + S1[j1]) = LSB(S1[i1])、ただし、LSB(S1[i1]) ≠ 1
2. LSB(S2[i2] + S2[j2]) = i2
ケース1の時、t=1、2における配列Sの最下位バイトの状態遷移について図5及び図6に示す。図5には、配列Sにおいて、アドレス1の値S[1]がAであり、アドレスAの値S[A]がk0+Aであるべきところが0となり、矛盾することが示されている。図6には、配列Sにおいて、アドレス1の値S[1]がA、アドレスAの値S[A]がk0+A、アドレスA+Cの値S[A+C]が2-C、アドレス2の値S[2]がk0+2であるべきところが、Cとなり、矛盾することが示されている。
図2より、t=1のとき、i1=1であり、LSB(S1[i1]) = Aとおくと、j1 = Aとなる。
ここで、ケース1の条件1を満たす時、
LSB(S1[1] + S1[A]) = LSB(S1[1])
LSB(S1[A]) = 0 ・・・ (1)
となるため、
LSB(k1) = LSB(k0 + S1[j1]) = LSB(k0)
となる。
ただし、A = 1のとき、
LSB(S1[1] + S1[1]) = LSB(S1[1])
LSB(S1[1]) = 0 ≠ 1
となり、式(1)と矛盾するため、
LSB(S1[i1]) ≠ 1の条件が導かれる。
t=1で出力される鍵ストリームにおいて以下の関係が成り立つ。
LSB(O1) = LSB(k0) ・・・ (2)
同様にt=2のとき、i2=2であり、LSB(S2[i2]) = Cとおくと、j2 = A + Cとなる。
ここで、ケース1の条件2を満たす時、
LSB(S2[2] + S2[A+C]) = 2
LSB(S2[A+C]) = 2 - C
となる。
t=2で出力される鍵ストリームにおいて、以下の関係が成り立つ。
LSB(O2) = LSB(k0 + 2) ・・・ (3)
よって、式(2)、(3)より、1番目と2番目の出力ワードO1、O2について以下の関係式が必ず成り立つ。
lsb(O1) = lsb(O2) ・・・ (4)
また、ケース2についても同様に考える。
<ケース2>
1. LSB(S1[i1] + S1[j1]) = LSB(S1[i1])、ただし、LSB(S1[i1]) ≠ 1
2. LSB(S2[i2] + S2[j2]) = j2
ケース2の場合、t=1、2における配列Sの最下位バイトの状態遷移について、図5及び図7に示す。図7には、アドレス1の値S[1]がA、アドレス2の値S[2]がC、アドレスAの値S[A]がk0+A、アドレスA+Cの値S[A+C]がk0+A+CであるべきところがAとなり、矛盾することが示されている。
t=1における内部変数kはケース1と同じため、配列Sの状態遷移や鍵ストリームにおける関係式(2)も同じとなる。
t=2のときケース2の条件2を満たす時、
LSB(S2[2] + S2[A+C]) = A + C
LSB(S2[A+C]) = A
となる。
t=2で出力される鍵ストリームにおいて以下の関係が成り立つ。
LSB(O2) = LSB(k0 + 2・S1[1]) ・・・ (5)
よって、ケース2の条件1、2を満たす時も式(2)、(5)より、式(4)が必ず成り立つ。
このように、ケース1、2ともに、1番目の出力ワードO1と2番目の出力ワードO2間で同じ関係式(4)が成り立つ。
次に、この式がdistinguisherとして利用できることを説明する。
<Distinguisherが成り立つ確率と必要なデータ量>
ここでは、distinguisherとして利用する式(4)の成立確率について説明する。
もしGGHN(8,32)の出力する系列が真の乱数系列であれば、distinguisherである式(1)が成り立つ確率は2^{-1}となる。
式(4)の成立確率は、PRGAの構造に依存したものであり、KSAの構造には依存しない。
よって、以下の検討では、KSA終了後の変数kと配列Sがそれぞれ独立で一様分布に従うものとする。
まず、ケース1、2の条件1、2が成り立つ確率p1、p2は以下のとおりである。ここで条件2が成り立つ確率p2はケース1、2を考慮した確率である。
p1 = 1/256・255/256
p2 = 1/256・1/256 + 255/256・2/256
ここで条件1、2のいずれかの条件を満たさない時、式(1)が成り立つ確率を、理想的に1/2と仮定すると、GGHN(8,32)の出力系列において、式(4)が成り立つ確率Pdは、以下で与えられる。
pd = 1・p1・p2+1/2・(1-p1・p2)
≒ 1/2・(1+2^{-15.01})
よって、真の乱数系列における確率1/2と比べて大きくなる。
次に、式(4)をdistinguisherとしたとき、GGHN(8,32)の出力系列と真の乱数系列を区別するために必要なデータ量を検討する。
非特許文献2によると、2つの分布を区別するのに必要なデータ量は、以下のようになることが示されている。
確率pで発生する事象分布Xと、確率p(q+1)で発生する事象分布Yにおいてあるイベントeが生じる時、無視できない成功確率でXとYを区別するには、O(1/pq^{2})のサンプルが必要である。
ただし、上記定理は、p<<1のときに成り立つ。
非特許文献3には、p=1/2のとき、2つの分布を区別するのに必要なデータ量は以下のようになることが示されている。
確率p = 1/2で発生する事象分布Xと確率1/2(q+1)で発生する事象分布Yにおいてあるイベントeが生じる時、無視できない成功確率でXとYを区別するにはO(1/q^{2})のサンプルが必要である。
本解読におけるイベントeは、式(4)が成り立つ事象であり、乱数におけるイベントeの分布をX、GGHN(8,32)の出力系列におけるイベントeの分布をYとみなすことができる。
よって、p = 2^{-1}、q = 2^{-15.01}と考えることができるため、解読に必要なデータ量はO(2^{30.02)となる。
ここで求まるデータ量は、GGHN(8,32)のKSAが完全にランダムなpermutationという仮定の元での値であり、PRGAの構造的な偏りから求まる理論的なデータ量である。
よって、GGHN(8,32)は、理論的に約2^{30}の秘密鍵における鍵ストリームの先頭2ワードを利用することで、真の乱数列との区別が可能である。
<1番目の出力ワードと2番目の出力ワード間の偏り>の説明(段落0050から0070)では、鍵ストリームの先頭2ワードについてdistinguisherの構成方法を説明したが、ケース1については任意の時刻tにおいて連続する鍵ストリーム2ワードについて同様の関係が成り立つ。
よって、鍵ストリームの先頭数ワードを捨てるという対策は効果が無い。
前述した<発明が対象とするGGHN(n,m)攻撃手法 Distinguishing Attackの説明>は、図5乃至図9に、まとめることができる。
図9は、解読に必要なデータ量(理論値)をあらわしており、初期処理によってS-boxエントリが一様にランダムで出力均等と仮定した場合の、解読に必要なデータ量の理論値を求める流れを説明する図である。
図9では、初期処理によってS-boxエントリが一様にランダムで出力均等と仮定している。これは、攻撃する時刻において、Sの値256通りがすべて出現する可能性があるということである。図9における、確率p1(=1/256)、確率p2(=255/256)は、図5における、条件1が発生する確率、と、条件2が発生する確率にそれぞれ対応する。また、図9における、確率p3 (=(1/256)・(1/256)+(255/256)(2/256)=512/2562)は、図7における条件3、または、図6における条件4が発生する確率に対応する。解読に必要なデータ量(理論値)は、O(q-2)=O(230.02)となる。
図8に示すように、G. Gongら提案した改良アルゴリズムの distinguisher を構成することが出来る。図8は、
lsb(O1) = lsb(O2)
の式を、distinguisherとすることを説明する図である。
連続する出力の下位8bitは以下のようになる。
O1=k0
O2=k0+2A (条件3)、
O2=k0+2 (条件4)
よって、式(4)をdistinguisherとすれば、GGHN(8,32)の出力系列と真の乱数系列との区別が可能となる。
本発明者等は、このことを、確めるための実験を行ったので、以下に説明する。図10と図11は、実験の結果をまとめたものである。図10には、計算機実験によって得られた確率と解読に必要なデータ量が示されている。図11には、計算機実験によって、与えるデータ量Nを変化させながら、図8のdistinguisherが機能するか確かめた結果が示されている。
すなわち、図11では、与えるデータ量Nを変化させながら、図8のdistinguisherについて成立回数Xを求めた。100通りの秘密鍵について実験を行い棄却率を求めた。
X - 2^{N-1} > (1/2)・√( 2^{N-1} - 2^{N-2} )
を満たすとき、乱数でないと棄却する(乱数であれば30.5%となる)。以下に、該実験の説明をする。
<実験結果の説明>
式(4)をdistinguisherとしたとき、図9のように、GGHN(8,32)の出力系列と真の乱数系列が区別可能であるかどうか確認した。実験の手順は以下のとおりである。
1. 秘密鍵を2^{w}回ランダムに変更し、GGHN(8,32)の鍵ストリームをそれぞれ2ワード生成する。
2. 1. で生成した2^{w}個の鍵ストリームについて式(1)の成立回数をカウントする。
3. 2. でカウントされた回数xが以下の関係式を満たした時、出力系列が乱数でないと棄却する。ここでμは平均値、σは標準偏差を表す。
μ-x > σ/2
よって本実験においては、
2^{w-1}-x > 1/2・(2^{w-1}-2^{w-2})^{-1/2}
の関係式を満たした時、出力系列が乱数でないとして棄却する。
4. 1. で与えた2^{w}個の秘密鍵グループを独立に100通り与え、1〜3を繰り返し、棄却率を求める。
実験結果を表として示した図11によると、2^{28}のデータを与えたとき、棄却率が85%となり、乱数における棄却率と比べて、50%以上のアドバンテージが得られた。
よって、式(4)を、distinguisherとしたときの攻撃手法によって、GGHN(8,32)の出力系列は、約2^{30}ワードの鍵ストリームを用いることによって、極めて高い確率で真の乱数列との区別が可能である事が実験的にも確認できた。
このように、従来のGGHN(8,32)の出力系列は、式(4)
{lsb(O1) = lsb(O2)}
を、distinguisherとしたときの攻撃手法によって、鍵ストリームが高い確率で真の乱数列との区別が可能であり、安全性が低いという課題がある。
本発明は、本発明者等による上記課題の認識に基づき創案されたものであって、その目的は、データを秘匿するための安全性の高い暗号装置、プログラム、方法を提供することにある。
本願で開示される発明は、前記課題を解決するため、概略以下の構成とされる。
本発明は、上記課題となった解析手法に、耐性を持つ対策を提供する。また、対策の実装において、暗号の設計者らの主張する安全性と実装性を損なうことのないよう考慮している。
本発明の1つのアスペクト(側面)に係る暗号装置は、秘密鍵に基づき擬似乱数列を生成し、前記擬似乱数列を平文に作用させることにより暗号文を生成する暗号装置であって、前記擬似乱数列の生成に用いる内部状態として、有限個の数値の列の並び替えを基礎とする状態に基づく内部状態を用い、前記擬似乱数列の生成に用いる一時変数の少なくとも一つが、前記内部状態のうちの一つ、又は、複数個の数値を使用した、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、内部状態の数より小さい数に依存し、あらかじめ定められた、左又は右ローテイトシフトを実行した結果を値とする一時変数であり、前記生成される擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との演算によって生成する。
本発明において、前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態であって、前記内部状態の更新を、並び替え以外の、線形演算、及び、非線形演算を用いて行うようにしてもよい。
本発明において、前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態であって、前記内部状態の更新として、並び替え以外の、線形演算及び非線形演算を用いることにより、前記内部状態の状態数が、単調増加する、ようにしてもよい。あるいは、前記内部状態の状態数が、単調減少する、ようにしてもよい。
本発明において、前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態であって、前記内部状態の更新として、並び替え以外の線形演算及び非線形演算を用いることにより、内部状態の状態数を振動させる、ようにしてもよい。
本発明においては、前記内部状態の更新を、前記擬似乱数列の出力ごとに行うようにしてもよい。あるいは、前記擬似乱数列の出力よりも多く行うようにしてもよい。あるいは、前記擬似乱数列の出力よりも少なく行うようにしてもよい。
本発明においては、前記ローテイトシフトの方向及び/又は数値(シフト数)を、前記内部状態の数値に依存して動的に変更するようにしてもよい。
本発明においては、前記ローテイトシフトの方向及び数値(シフト数)を、あらかじめ定められたテーブルの値に従って変更するようにしてもよい。
本発明の別のアスペクトに係る装置は、配列Sの要素の並び替えと算術加算を繰り返すことで配列Sの要素を攪拌し配列Sの初期状態を作成し、その際、内部変数kの初期値を配列Sの要素から求める第1の処理部(KSA)と、第1、第2のインデックス変数iとjに関して配列Sの要素S[j]と内部変数kの加算結果をローテイトシフトした値で内部変数kの値を更新し、S[i]+S[j]による配設Sの参照結果S[(S[i]+S[j])]と内部変数kとの加算結果に基づき、鍵ストリームを出力し、前記鍵ストリームを生成するために参照した配列Sの要素S[(S[i]+S[j])]を、鍵ストリーム出力の直後に内部変数kと配列要素S[i]を用いて更新する第2の処理部(PRGA)と、を備えている。
本発明の別のアスペクトに係る装置は、配列Sの要素の並び替えと算術加算を繰り返すことで配列Sの要素を攪拌し配列Sの初期状態を作成し、その際、内部変数kの初期値を配列Sの要素から求める第1の処理部(KSA)と、第1のインデックス変数iの配列要素S[i]を第1のシフト数ローテイトシフトした値と、第2のインデックス変数jとを算術加算した結果に基づき、第2のインデックス変数jの値を更新し、第2のインデックス変数jの配列要素S[j]を第2のシフト数ローテイトシフトした値と内部変数kとの算術加算結果に基づき内部変数kの値を更新し、S[i]+S[j]による配設要素S[(S[i]+S[j])]を第3のシフト数ローテイトシフトした値と内部変数kとの算術加算結果に基づき、鍵ストリームを出力し、前記鍵ストリームを生成するために参照した配列要素S[(S[i]+S[j])]を、鍵ストリーム出力の直後に内部変数kと配列要素S[i]を用いて更新する第2の処理部(PRGA)と、を備えている。
本発明においては、初期設定配列aを用い、配列aの並べ替えを行って攪拌し、内部変数kを対応する配列要素aをローテイトシフトしたものと算術加算して求め、配列Sを、配列aの要素をローテイトシフトしたものと配列Sの要素との所定の演算によって求める第1の処理部(KSA)と、第1、第2のインデックス変数i、jに関して配列Sの参照結果S[j]と内部変数kとを算術加算し、S[i]+S[j]による配設Sの参照結果と内部変数kに基づき、鍵ストリームを出力し、鍵ストリームを生成するために参照したSのエントリを、鍵ストリーム出力直後に内部変数kを用いて更新する第2の処理部(PRGA)と、を備えた構成としてもよい。上記第1の処理部(KSA)と第2の処理部(PRGA)は、コンピュータ・プログラム(ソフトウェア)として実装してもよい。
また、本発明に係る方法においては、擬似乱数列の生成に用いる内部状態として、有限個の数値の列の並び替えを基礎とする状態に基づく内部状態を用い、前記擬似乱数列の生成に用いる一時変数の少なくとも一つを、前記内部状態のうちの一つ、又は、複数個の数値を用いた、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、内部状態の数より小さい数に依存し、あらかじめ定められた、左又は右ローテイトシフトを実行した結果を値とする一時変数とし、前記擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との予め定められた所定の演算によって生成する。本発明によれば、上記第1の処理部(KSA)と第2の処理部(PRGA)の各手順を含む方法が提供される。
本発明によれば、GGHN(n,m)におけるdistinguisherの構成を困難とし、GGHN(n,m)がもつ、速度性能の低下を回避することができる。このため、本発明は、データの通信や蓄積の際にデータを秘匿するための安全性の高い暗号装置を提供することができる。
本発明の一実施形態を示すブロック図である。 32bit RC4 (CISC 2005)で提案されたRC4の改良アルゴリズムを示す図である。 PRGAの状態遷移 (1)を示す図である。 PRGAの状態遷移 (2)を示す図である。 PRGAの解析 (1)を示す図である。 PRGAの解析 (3)を示す図である。 PRGAの解析 (2)を示す図である。 PRGAの解析 (4)を示す図である。 解読に必要なデータ量(理論値)を示す図である。 解読に必要なデータ量(実験値)を示す図である。 実験結果 (distinguisher)を示す図である。 G. Gong らによってしめされたストリーム暗号のアルゴリズムを示す図である。 本発明の変更アルゴリズムを示す図である。 解決しようとする課題の具体例1を示す図である。 解決しようとする課題の具体例2を示す図である。 対策案 (1)を示す図である。 対策案 (2)を示す図である。
上記した本発明についてさらに詳細に説明する。図13は、本発明の変更アルゴリズムを説明するための図である。図13には、本発明において、元のアルゴリズムの変更すべき箇所が示されている。
上記課題となった解析手法は、PRGAの構造的な脆弱性を利用したものである。
しかも、解析手法では、KSAによって全ての内部記憶が一様分布に従うとみなしていた。
よって、本発明の1つの側面においては、KSAに変更は施さず、PRGAのみ改良をおこなった。
図13に示す対策手段におけるアルゴリズムの変更(図2のPRGAのアルゴリズムからの変更)は、変数kの更新の際に、左ローテイト処理 k=((k+S[j])<<<n) mod M
を行っている点である(ただし、N=2^{n}、M=2^{m})。
ローテイト数は、GGHN(n,m)としたとき、nビットとする。
本発明によれば、擬似乱数列の生成に用いる一時変数の少なくとも一つである内部変数kを、前記内部状態のうちの一つ又は、複数個の数値を使用した、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、nビットローテイトシフト((k+S[j])<<<n)を実行した結果とし、前記生成される擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との演算によって生成する(out=(S[(S(i)+S[j]) mod N] +k ) mod M)。
ここで、本発明による対策手段の効果を説明するため、ケース1における内部変数k0とS1[A]、S2[A+C]をバイト単位の変数を用いて以下のように表現する。
ここで、右側が下位ビットであり、LSB(k0) = k00である。
ただし、式(1)より、LSB(S1[A]) = B0 = 0である。
k0 = k03‖k02‖k01‖k00
S1[A] = B3‖B2‖B1‖B0
S2[A+C] = A3‖A2‖A1‖A0
このとき、算術加算で生じるバイトを跨ぐ桁あがりの影響を無視すると、図13に示したPRGAは、最下位バイトにおいて、一様分布に従う独立な変数が必ず2個以上挿入されるため、式(1)に、偏りが生じなくなる。
同様に、どのバイト間で比較しても、一様な分布に従う独立な変数が必ず2個以上挿入されることから、偏りは生じないと考えられる。
実際には、桁上がりがバイトを超えて影響するが、基本的な考え方に影響は無い。
また、図13の対策手段における実装性を考慮すると、処理の増加は、ローテイト処理1回分である。
図13の比較例として、元のアルゴリズムを図12に示す。変数kの更新は、
k=(k+S[j]) mod M
にて行っている。
また、本発明において、実装ターゲットとして、32ビット/64ビットプロセッサ上でのソフトウェアの実装を想定した場合、nビットの左ローテイト処理は速度の劣化が小さいものと思料される。
また、本発明によれば、新たな内部メモリを用いることなく、改良が可能であるため、メモリの増加も無い。
よって、本発明による、図13の対策手段は、
・設計者らの設計方針を崩すことなく、
・実装性の利点を損なうこともない、
暗号モデルを実現できるものと期待される。
次に、図16に、本発明による、KSA(K, S)の変更による対策手段の例を示す。a[i]を左8xrビットローテイトしたものと変数kとを算術加算した値で、変数kを更新している。S[i]と、a[i]を左8x(3-r)ビットローテイトしたものとの演算結果(排他的論理和演算)にて、S[i]を更新している。
図16の、KSA(K, S)の変更による対策手段でも、S-boxはある程度、ランダムになることが実験により確認できており、かつ、各バイトで見たとき出力均等となる。
そして、KSAの速度は、約2.5倍高速(RC4のKSAと比べて約8倍低速)となり、初期値テーブルを使用しないので、例えば1Kbyteのメモリを削減することができる。
なお、図16の対策手段は、ローテイトシフトの方向及び/又はシフト数を、前記内部状態の数値に依存して動的に変更することに対応する。ローテイトシフトの方向及びシフト数を、あらかじめ定められたテーブルの値に従って変更するようにしてもよい。
図17に、PRGA(S)の変更による対策手段の別の例を示した。S[i]を右24ビットローテイトシフトしたもの(S[i]>>>24)とjとの算術加算結果でjの値を更新し、S[j]を右16ビットローテイトシフトしたもの(S[j]>>>16)とkとの算術加算結果でkの値を更新し、S[(S[i]+S[j]) mod N]を右8ビットローテイトしたものとkとの算術加算結果をoutとしている。
この対策手段の場合、鍵ストリーム間の関係(1番目と2番目の出力バイトO1とO2)が、
O1 = k0 + XO2 = k0 + Y
となり、Xの値に応じて、Yの値が決定する関係となる。
よって、インデックスの仮定で参照されるS-boxエントリを選択できたとしても。仮定で用いたインデックス情報を、上記の関係式に持ち込めない(X, Yの情報によらない恒等式に持ち込めない)ため、Distinguishing Attackの適用が困難になる。
なお、本発明において、前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態であって、前記内部状態の更新を、並び替え以外の、線形演算、及び、非線形演算を用いて行うようにしてもよい。
本発明において、前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態であって、前記内部状態の更新として、列の並び替え以外の、線形演算及び非線形演算を用いることにより、前記内部状態の状態数を、単調増加させるようにしてもよい。あるいは、前記内部状態の更新として、列の並び替え以外の、線形演算及び非線形演算を用いることにより、前記内部状態の状態数を、単調減少させるようにしてもよい。
本発明において、前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態であって、前記内部状態の更新として、並び替え以外の線形演算及び非線形演算を用いることにより、内部状態の状態数を振動させる、ようにしてもよい。
本発明においては、前記内部状態の更新を、前記擬似乱数列の出力ごとに行うようにしてもよい。あるいは、前記擬似乱数列の出力よりも多く行うようにしてもよい。あるいは、前記擬似乱数列の出力よりも少なく行うようにしてもよい。以下実施例に即して説明する。
図1は、本発明の一実施例を説明するための図である。図14、図15は、比較例として、本発明が解決しようとする課題の具体例1、2を示すブロック図である。以下、本発明の一実施例を説明する。図1に示すように、<<<nの処理では、k(0)に対して、左ローテイト処理(k+S[j])<<<nを行ってk(1)としている。(S[(S[i]+S[j]) mod N]+k(1))mod Mをout(1)としている。
図14は、本発明が解決しようとする課題の具体例1として、図5から図7(ケース2の条件でのt=1、2における配列Sの最下位バイトの状態遷移)への処理の過程を示した図である。状態変化は、Sの箱で示されており、図には表れていない。はじめに、図14の比較例を参照して説明する(アルゴリズムは図12に示される)。
時刻1において、インデックスiが1となる(j(0)の矢印の先の箱から出力される1参照)。インデックスi(0)と1を入力する十字ボックスは、算術加算を表しており、i=(i+1) mod N=1を出力する。
アドレスiの値S[1](下位8ビット)がAであり、インデックスjがAとなる。なお、図1、図14、図15において、Sを四角で囲むボックスはS−boxであり、例えばインデックス(例えば1)を入力し、S[1]がAの場合、ボックスからは、Aが出力される図式とされる。j(0)とAを入力とするボックス(算術加算器)は、j(0)=(j(0)+A) mod N=Aを出力している。
アドレスjの値S[j](下位8ビット)が0であり、
変数kの値(下位8ビット)は
0+k0=k0
となる。
アドレスiの値S[i](下位8ビット)がAであり、アドレスjの値S[j](下位8ビット)が0であるため、出力O1を生成するために必要なアドレスは、
S[i]+S[j]=A+0=A
となる。
アドレスAの値S[A](下位8ビット)が0であり、変数kの値(下位8ビット)がk0であるため、出力O1の値(下位8ビット)は、
0+k0=k0
となる。
出力O1を生成した後、アドレスAの値S[A](下位8ビット)は、
k0+A
に更新される。
時刻2において、インデックスiは2となる。
アドレスiの値S[i](下位8ビット)がCであり、インデックスjは、A+Cとなる。
アドレスjの値S[j](下位8ビット)がAであり、変数kの値(下位8ビット)は、
k0+A
となる。
アドレスiの値S[i](下位8ビット)がCであり、アドレスjの値S[j](下位8ビット)がAであるため、出力O2を生成するために必要なアドレスは、
S[i]+S[j]=A+C
となる。
アドレスA+Cの値S[A+C](下位8ビット)がAであり、変数kの値(下位8ビット)がk0+Aであるため、出力O2の値(下位8ビット)は、
A+k0+A=k0+2A
となる。
出力O2を生成した後、アドレスA+Cの値S[A+C](下位8ビット)は、
k0+A+C
に更新される。
図15は、図1の比較例として、本発明が解決しようとする課題の具体例2を示す図であり、図5から図6(ケース1の条件でのt=1、2における配列Sの最下位バイトの状態遷移)への処理の過程を示した図である。状態変化はSの箱で示されており、図には表れていない。
図15を参照すると、時刻1において、インデックスiが1となる。
アドレスiの値S[i](下位8ビット)がAであり、インデックスjがAとなる。
アドレスjの値S[j](下位8ビット)が0であり、変数kの値(下位8ビット)は、 0+k0=k0
となる。
アドレスiの値S[i](下位8ビット)がAであり、アドレスjの値S[j](下位8ビット)が0であるため、出力O1を生成するために必要なアドレスは、
S[i]+S[j]=A+0=Aとなる。
アドレスAの値S[A](下位8ビット)が0であり、変数kの値(下位8ビット)がk0であるため、出力O1の値(下位8ビット)は、
0+k0=k0
となる。
出力O1を生成した後、アドレスAの値S[A](下位8ビット)は、
k0+A
に更新される。
時刻2において、インデックスiは2となる。
アドレスiの値S[i](下位8ビット)がCであり、インデックスjはA+Cとなる。
アドレスjの値S[j](下位8ビット)が2−Cであり、変数kの値(下位8ビット)は、
k0+2−C
となる。
アドレスiの値S[i](下位8ビット)がCであり、アドレスjの値S[j](下位8ビット)が2−Cであるため、出力O2を生成するために必要なアドレスは、
S[i]+S[j]=C+2−C=2
となる。
アドレス2の値S[2](下位8ビット)がCであり、変数kの値(下位8ビット)がk0+2−Cであるため、出力O2の値(下位8ビット)は、
C+k0+2−C=k0+2
となる。
出力O2を生成した後、アドレス2の値S[2](下位8ビット)は、
k0+2−C+C=k0+2
に更新される。
図14、図15の比較例と相違して、本発明の一の実施例では、図1に示すように、処理の過程にローテイトシフト(<<<n)が追加されている。k(0)=ローテイトシフト(<<<n)は、((k+S[j])<<<n) mod M
本実施例においても、図14と同様、時刻1において、インデックスiが1となる。アドレスiの値S[i](下位8ビット)がAであり、インデックスjがAの下位8ビットとなる。
アドレスjの値S[j](下位8ビット)がB(下位8ビットが0)であり、変数kの値はRoln(k0+B)となる。なお、Rolnは、Rotate-Left-Shift by n-bitを表している。すなわち、Roln(k0+B)は、図13のk=((k+S[j]<<<n) mod Mに対応し、k0=((k0+B)<<<n)mod Mが実行される。
アドレスiの値S[i](下位8ビット)がAであり、アドレスjの値S[j]がB(下位8ビットが0)であるため、出力O1を生成するために必要なアドレスは、
S[i]+S[j]=A+0=A
となる。
アドレスAの値S[A]がB(下位8ビットが0)であり、変数kの値がRoln(k0+B)であるため、出力O1の値(下位8ビット)は、
0+Roln(k0+B)=Roln(k0+B)
となる。
出力O1を生成した後、アドレスAの値S[A](下位8ビット)は、
Roln(k0+B)+A
に更新される。
時刻2において、インデックスiは2となる。
アドレスiの値S[i](下位8ビット)がCであり、インデックスjはA+Cの下位8ビットとなる。
アドレスjの値S[j](下位8ビット)がAであり、変数kの値は、
Roln(Roln(k0+B)+A)
となる。
アドレスiの値S[i](下位8ビット)がCであり、アドレスjの値S[j](下位8ビット)がAであるため、出力O2を生成するために必要なアドレスは、
S[i]+S[j]=A+C
となる。
アドレスA+Cの値S[A+C](下位8ビット)がAであり、変数kの値がRoln(Roln(k0+B)+A)であるため、出力O2の値(下位8ビット)は、
A+Roln(Roln(k0+B)+A)
となる。
出力O2を生成した後、アドレスA+Cの値S[A+C](下位8ビット)は、
Roln(Roln(k0+B)+A)+C
に更新される。
次に、図1の本実施例において、図15に基づくと、時刻1において、インデックスiが1となる。
アドレスiの値S[i](下位8ビット)はAであり、インデックスjはAの下位8ビットとなる。
アドレスjの値S[j](下位8ビット)はB(下位8ビットが0)であり、変数kの値は、
Roln(k0+B)
となる。
アドレスiの値S[i]がAであり、アドレスjの値S[j]がB(下位8ビットが0)であるため、出力O1を生成するために必要なアドレスは、
S[i]+S[j]=A+0=A
となる。
アドレスAの値S[A](下位8ビット)がB(下位8ビットが0)であり、変数kの値がRoln(k0+B)であるため、出力O1の値(下位8ビット)は、
0+Roln(k0+B)=Roln(k0+B)
となる。
出力O1を生成した後、アドレスAの値S[A](下位8ビット)は、
Roln(k0+B)+A
に更新される。
時刻2において、インデックスiは2となる。
アドレスiの値S[i](下位8ビット)がCであり、インデックスjは、A+Cの下位8ビットとなる。
アドレスjの値S[j](下位8ビット)が2−Cであり、変数kの値は、
Roln(Roln(k0+B)+2−C)
となる。
アドレスiの値S[i]がCであり、アドレスjの値S[j]が2−Cであるため、出力O2を生成するために必要なアドレスは、
S[i]+S[j]=C+2−C=2
となる。
アドレス2の値S[2](下位8ビット)がCであり、変数kの値が、
Roln(Roln(k0+B)+2−C)
であるため、出力O2の値(下位8ビット)は、
C+Roln(Roln(k0+B)+2−C)
となる。
出力O2を生成した後、アドレス2の値S[2](下位8ビット)は、
Roln(Roln(k0+B)+2−C)+C
に更新される。
本発明によれば、データの通信や蓄積の際にデータを秘匿するための安全性の高い暗号装置を得ることができる。
なお、図13、図16、図17を参照して説明した本発明に係るプログラムは、鍵ストリームを生成する任意のアプリケーションに適用いることができる。本発明に係る暗号装置は、例えばサーバ装置のCPU、記憶装置、ネットワーク等を含む構成とされる。秘密鍵情報は、サーバ装置の記憶装置に記憶される。図1に示した構成において、ローテイトシフト演算は、CPUのALU(演算装置)で行われる。
以上、本発明を上記実施例に即して説明したが、本発明は上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。

Claims (22)

  1. 秘密鍵に基づき擬似乱数列を生成し、前記擬似乱数列を平文に作用させることにより暗号文を生成する暗号装置であって、
    前記擬似乱数列の生成に用いる内部状態として、有限個の数値の列の並び替えを基礎とする状態に基づく内部状態を用い、
    前記擬似乱数列の生成に用いる一時変数の少なくとも一つを、
    前記内部状態のうちの一つ、又は、複数個の数値を用いた、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、内部状態の数より小さい数に依存し、あらかじめ定められた、左又は右ローテイトシフトを実行した結果を値とする一時変数とし、
    前記擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との予め定められた所定の演算によって生成する手段を備えている、
    ことを特徴とする暗号装置。
  2. 前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態に関して、
    前記内部状態の更新を、並び替え以外の、線形演算、および、非線形演算を用いて行う、ことを特徴とする請求項1に記載の暗号装置。
  3. 前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態に関して、
    前記内部状態の更新を、並び替え以外の、線形演算及び非線形演算を用いて行い、前記内部状態の状態数を、単調増加と単調減少のうちの一方にしたがって変化させる、ことを特徴とする請求項1に記載の暗号装置。
  4. 前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態に関して、
    前記内部状態の更新を、並び替え以外の、線形演算及び非線形演算を用いて行い、前記内部状態の状態数を振動させる、ことを特徴とする請求項1に記載の暗号装置。
  5. 前記内部状態の更新を、
    前記擬似乱数列の出力ごとに行う、
    前記擬似乱数列の出力よりも多く行う、
    前記擬似乱数列の出力よりも少なく行う、
    のうち選択されたいずれか一つで行う、ことを特徴とする、請求項1乃至4のいずれか一項に記載の暗号装置。
  6. 前記ローテイトシフトの方向及び/又はシフト数を、前記内部状態の数値に依存して動的に変更する、ことを特徴とする、請求項1乃至5のいずれか一項に記載の暗号装置。
  7. 前記ローテイトシフトの方向及びシフト数を、あらかじめ定められたテーブルの値に従って変更する、ことを特徴とする、請求項1乃至5のいずれか一項に記載の暗号装置。
  8. 前記擬似乱数列の生成に用いる内部状態として、配列Sの要素の並び替えと算術加算を繰り返すことで配列Sの要素を攪拌し配列Sの初期状態を作成し、その際、前記一時変数をなす内部変数kの初期値を配列Sの要素から求める第1の処理部と、
    前記擬似乱数(以下、「鍵ストリーム」と称する)を生成するにあたり、第1、第2のインデックス変数iとjに関して配列Sの要素S[j]と内部変数kの加算結果をローテイトシフトした値で内部変数kの値を更新し、
    S[i]+S[j]による配設Sの参照結果S[(S[i]+S[j])]と内部変数kとの加算結果に基づき、鍵ストリームを出力し、
    前記鍵ストリームを生成するために参照した配列Sの要素S[(S[i]+S[j])]を、鍵ストリーム出力の直後に内部変数kと配列要素S[i]を用いて更新する第2の処理部と、
    を備えている、ことを特徴とする請求項1記載の暗号装置。
  9. 配列Sの要素数Nとローテイトシフトのシフト数nとがN=2の関係とされる、ことを特徴とする請求項8記載の暗号装置。
  10. 前記擬似乱数列の生成に用いる内部状態として、配列Sの要素の並び替えと算術加算を繰り返すことで配列Sの要素を攪拌し配列Sの初期状態を作成し、その際、前記一時変数をなす内部変数kの初期値を配列Sの要素から求める第1の処理部と、
    前記擬似乱数(以下、「鍵ストリーム」と称する)を生成するにあたり、
    第1のインデックス変数iの配列要素S[i]を第1のシフト数ローテイトシフトした値と、第2のインデックス変数jとを算術加算した結果に基づき、第2のインデックス変数jの値を更新し、
    第2のインデックス変数jの配列要素S[j]を第2のシフト数ローテイトシフトした値と内部変数kとの算術加算結果に基づき内部変数kの値を更新し、
    S[i]+S[j]による配設要素S[(S[i]+S[j])]を第3のシフト数ローテイトシフトした値と内部変数kとの算術加算結果に基づき、鍵ストリームを出力し、
    前記鍵ストリームを生成するために参照した配列要素S[(S[i]+S[j])]を、鍵ストリーム出力の直後に内部変数kと配列要素S[i]を用いて更新する第2の処理部と、
    を備えている、ことを特徴とする請求項1記載の暗号装置。
  11. 初期設定配列aを用い、配列aの並べ替えを行って攪拌し、前記一時変数をなす内部変数kを、対応する配列要素aをローテイトシフトしたものと算術加算して求め、前記擬似乱数列の生成に用いる内部状態として配列Sを、配列aの要素をローテイトシフトしたものと配列Sの要素との所定の演算によって求める第1の処理部と、
    前記擬似乱数(以下、「鍵ストリーム」と称する)を生成するにあたり、第1、第2のインデックス変数i、jに関して配列Sの参照結果S[j]と内部変数kとを算術加算し、S[i]+S[j]による配設Sの参照結果と内部変数kに基づき、鍵ストリームを出力し、
    鍵ストリームを生成するために参照したSのエントリを、鍵ストリーム出力直後に内部変数kを用いて更新する第2の処理部と、
    を備えている、ことを特徴とする請求項1記載の暗号装置。
  12. 秘密鍵に基づき擬似乱数列を生成し、前記擬似乱数列を平文に作用させることにより暗号文を生成する暗号装置を構成するコンピュータに、
    前記擬似乱数列の生成に用いる内部状態として、有限個の数値の列の並び替えを基礎とする状態に基づく内部状態を用い、
    前記擬似乱数列の生成に用いる一時変数の少なくとも一つを、
    前記内部状態のうちの一つ、又は、複数個の数値を使用した、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、内部状態の数より小さい数に依存し、あらかじめ定められた、左又は右ローテイトシフトを実行した結果を値とする一時変数とし、
    前記擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との予め定められた所定の演算によって生成する、処理
    を実行させるプログラム。
  13. 請求項12記載のプログラムにおいて、
    前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態に関して、
    前記内部状態の更新を、並び替え以外の、線形演算、および、非線形演算を用いて行う、ことを特徴とするプログラム。
  14. 請求項12記載のプログラムにおいて、
    前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態に関して、
    前記内部状態の更新として、並び替え以外の、線形演算及び非線形演算を用いて行い、前記内部状態の状態数を、単調増加と単調減少のうちの一方にしたがって変化させる、ことを特徴とするプログラム。
  15. 請求項12記載のプログラムにおいて、
    前記有限個の数値の列の並び替えを基礎とする状態に基づく内部状態に関して、
    前記内部状態の更新として、並び替え以外の線形演算及び非線形演算を用いて行い、内部状態の状態数を振動させる、ことを特徴とするプログラム。
  16. 請求項12記載のプログラムにおいて、
    前記内部状態の更新を、
    前記擬似乱数列の出力ごとに行う、
    前記擬似乱数列の出力よりも多く行う、
    前記擬似乱数列の出力よりも少なく行う、
    のうちの選択されたいずれか一つで行う、ことを特徴とする、プログラム。
  17. 請求項12記載のプログラムにおいて、
    前記ローテイトシフトの方向及び/又はシフト数を、前記内部状態の数値に依存して動的に変更する、ことを特徴とする、プログラム。
  18. 請求項12記載のプログラムにおいて、
    前記ローテイトシフトの方向及びシフト数を、あらかじめ定められたテーブルの値に従って変更する、ことを特徴とする、プログラム。
  19. 前記擬似乱数列の生成に用いる内部状態として、配列Sの要素の並び替えと算術加算を繰り返すことで配列Sの要素を攪拌し配列Sの初期状態を作成し、その際、前記一時変数をなす内部変数kの初期値を配列Sの要素から求める第1の処理と、
    前記擬似乱数(以下、「鍵ストリーム」と称する)を生成する処理として、
    第1、第2のインデックス変数iとjに関して配列Sの要素S[j]と内部変数kの算術加算結果をローテイトシフトした値で内部変数kの値を更新し、
    S[i]+S[j]による配設Sの参照結果S[(S[i]+S[j])]と内部変数kとの算術加算結果に基づき、鍵ストリームを出力し、
    前記鍵ストリームを生成するために参照した配列Sの要素S[(S[i]+S[j])]を、鍵ストリーム出力の直後に内部変数kと配列要素S[i]を用いて更新する第2の処理と、
    を前記コンピュータに実行させる請求項12記載のプログラム。
  20. 前記擬似乱数列の生成に用いる内部状態として、配列Sの要素の並び替えと算術加算を繰り返すことで配列Sの要素を攪拌し配列Sの初期状態を作成し、その際、前記一時変数をなす内部変数kの初期値を配列Sの要素から求める第1の処理と、
    前記擬似乱数(以下、「鍵ストリーム」と称する)を生成する処理として、
    第1のインデックス変数iの配列要素S[i]を第1のシフト数ローテイトシフトした値と、第2のインデックス変数jとを算術加算した結果に基づき、第2のインデックス変数jの値を更新し、
    第2のインデックス変数jの配列要素S[j]を第2のシフト数ローテイトシフトした値と内部変数kとの算術加算結果に基づき内部変数kの値を更新し、
    S[i]+S[j]による配設要素S[(S[i]+S[j])]を第3のシフト数ローテイトシフトした値と内部変数kとの算術加算結果に基づき、鍵ストリームを出力し、
    前記鍵ストリームを生成するために参照した配列要素S[(S[i]+S[j])]を、鍵ストリーム出力の直後に内部変数kと配列要素S[i]を用いて更新する第2の処理と、
    を前記コンピュータに実行させる請求項12記載のプログラム。
  21. 初期設定配列aを用い、配列aの並べ替えを行って攪拌し、前記一時変数をなす内部変数kを、対応する配列要素aをローテイトシフトしたものと算術加算して求め、前記擬似乱数列の生成に用いる内部状態として配列Sを、配列aの要素をローテイトシフトしたものと配列Sの要素との所定の演算によって求める第1の処理と、
    前記擬似乱数(以下、「鍵ストリーム」と称する)を生成する処理として、
    第1、第2のインデックス変数i、jに関して配列Sの参照結果S[j]と内部変数kとを算術加算し、
    S[i]+S[j]による配設Sの参照結果と内部変数kに基づき、鍵ストリームを出力し、
    鍵ストリームを生成するために参照したSのエントリを、鍵ストリーム出力直後に内部変数kを用いて更新する第2の処理と、
    を前記コンピュータに実行させる請求項12記載のプログラム。
  22. コンピュータを用いて擬似乱数列を生成する方法であって、
    擬似乱数列の生成に用いる内部状態として、有限個の数値の列の並び替えを基礎とする状態に基づく内部状態を用い、
    前記擬似乱数列の生成に用いる一時変数の少なくとも一つを、
    前記内部状態のうちの一つ、又は、複数個の数値を用いた、線形、又は、非線形、線形及び非線形の組み合わせの結果に基づき、内部状態の数より小さい数に依存し、あらかじめ定められた、左又は右ローテイトシフトを実行した結果を値とする一時変数とし、
    前記擬似乱数を、前記内部状態のうちの1つ又は複数個の数値と、前記一時変数との予め定められた所定の演算によって生成する、
    ことを特徴とする擬似乱数列の生成方法。
JP2008525838A 2006-07-21 2007-07-11 暗号装置及びプログラムと方法 Withdrawn JPWO2008010441A1 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2006199681 2006-07-21
JP2006199681 2006-07-21
PCT/JP2007/063797 WO2008010441A1 (fr) 2006-07-21 2007-07-11 dispositif de cryptage, programme et procédé

Publications (1)

Publication Number Publication Date
JPWO2008010441A1 true JPWO2008010441A1 (ja) 2009-12-17

Family

ID=38956774

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008525838A Withdrawn JPWO2008010441A1 (ja) 2006-07-21 2007-07-11 暗号装置及びプログラムと方法

Country Status (8)

Country Link
US (1) US8374351B2 (ja)
EP (1) EP2048811A4 (ja)
JP (1) JPWO2008010441A1 (ja)
KR (1) KR101032592B1 (ja)
CN (1) CN101496342B (ja)
CA (1) CA2658476C (ja)
RU (1) RU2009106061A (ja)
WO (1) WO2008010441A1 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010019593A1 (en) 2008-08-11 2010-02-18 Assa Abloy Ab Secure wiegand communications
CN101567781A (zh) * 2009-06-09 2009-10-28 刘海云 利用排序产生的序号码加密的方法及密码机
US8244909B1 (en) * 2009-06-18 2012-08-14 Google Inc. Method, apparatus and networking equipment for performing flow hashing using quasi cryptographic hash functions
FR2952735B1 (fr) * 2009-11-18 2011-12-09 St Microelectronics Rousset Procede et dispositif de detection d'attaques par injection de fautes
EP2336931B1 (fr) * 2009-11-18 2013-01-09 STMicroelectronics (Rousset) SAS Procédé de vérification de signature
FR2984553B1 (fr) 2011-12-15 2015-11-06 Proton World Int Nv Procede et dispositif de detection de fautes
US9269418B2 (en) * 2012-02-06 2016-02-23 Arm Limited Apparatus and method for controlling refreshing of data in a DRAM
CN104331645B (zh) * 2014-11-24 2017-05-10 中国航空工业集团公司洛阳电光设备研究所 一种测试系统的加密方法
US10452877B2 (en) 2016-12-16 2019-10-22 Assa Abloy Ab Methods to combine and auto-configure wiegand and RS485
EP3493457A1 (en) * 2017-11-30 2019-06-05 Gemalto Sa Method for protecting a source of entropy used in countermeasures securing a whitebox cryptographic algorithm
KR102183312B1 (ko) 2018-11-14 2020-11-26 국민대학교산학협력단 Duss 지원 가능한 양자난수 엔트로피 암호화용 코드 발급 장치 및 방법
KR102156568B1 (ko) 2018-12-21 2020-09-16 국민대학교산학협력단 구명용 비상신호 발신장치 및 방법
EP3910512B1 (en) * 2019-01-10 2023-11-29 Nippon Telegraph And Telephone Corporation Secure array access apparatus, secure array access method, and program
JP7351343B2 (ja) * 2019-10-10 2023-09-27 日本電信電話株式会社 秘密多重反復計算装置、方法及びプログラム
KR102253953B1 (ko) * 2020-06-11 2021-05-20 제주대학교 산학협력단 K-익명성 모델 및 데이터 교란화를 이용한 위치추적정보 보안 기법 및 장치
CN113282949B (zh) * 2021-07-26 2021-11-02 中国电力科学研究院有限公司 数据加密方法、数据解密方法、装置及电力数据交互系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297207A (en) * 1993-05-24 1994-03-22 Degele Steven T Machine generation of cryptographic keys by non-linear processes similar to processes normally associated with encryption of data
US5345508A (en) * 1993-08-23 1994-09-06 Apple Computer, Inc. Method and apparatus for variable-overhead cached encryption
US20020009208A1 (en) * 1995-08-09 2002-01-24 Adnan Alattar Authentication of physical and electronic media objects using digital watermarks
US7174013B1 (en) * 1998-10-20 2007-02-06 Lucent Technologies Inc. Efficient universal hashing method
CN1714377A (zh) * 2002-10-07 2005-12-28 小林朗 用于生成伪随机数的方法及伪随机数生成器
JP5075336B2 (ja) 2004-12-20 2012-11-21 株式会社ダイセル 酢酸の製造方法
JP4750105B2 (ja) * 2005-03-23 2011-08-17 Kddi株式会社 キーストリーム暗号化装置および方法ならびにプログラム
US8019802B2 (en) * 2005-08-24 2011-09-13 Qualcomm Incorporated Cryptographically secure pseudo-random number generator

Also Published As

Publication number Publication date
CA2658476A1 (en) 2008-01-24
KR20090041408A (ko) 2009-04-28
RU2009106061A (ru) 2010-08-27
EP2048811A4 (en) 2015-10-21
US8374351B2 (en) 2013-02-12
CN101496342B (zh) 2012-05-30
CA2658476C (en) 2014-11-04
KR101032592B1 (ko) 2011-05-06
US20090323956A1 (en) 2009-12-31
WO2008010441A1 (fr) 2008-01-24
EP2048811A1 (en) 2009-04-15
CN101496342A (zh) 2009-07-29

Similar Documents

Publication Publication Date Title
KR101032592B1 (ko) 암호 장치, 기록 매체, 및 방법
EP3154217B1 (en) Scrambled tweak mode of block ciphers for differential power analysis resistant encryption
US7945049B2 (en) Stream cipher using multiplication over a finite field of even characteristic
US8094816B2 (en) System and method for stream/block cipher with internal random states
US20050232430A1 (en) Security countermeasures for power analysis attacks
US7720225B2 (en) Table splitting for cryptographic processes
EP1833190A1 (en) Table splitting for cryptographic processes
Riman et al. Comparative analysis of block cipher-based encryption algorithms: a survey
Deepthi et al. Cryptanalysis of Salsa and ChaCha: revisited
Lavanya et al. Enhancing the security of AES through small scale confusion operations for data communication
Achkoun et al. SPF-CA: A new cellular automata based block cipher using key-dependent S-boxes
Abbasi et al. Cryptography: Security and integrity of data management
Hammood et al. RC4 stream cipher with a random initial state
Ghosh et al. Isomorphic cipher reduction
Muhalhal et al. A hybrid modified lightweight algorithm for achieving data integrity and confidentiality
Gupta et al. Correlation power analysis on KASUMI: attack and countermeasure
Tayal et al. Analysis of various cryptography techniques: a survey
Liu et al. Generating dynamic box by using an input string
CN104954118A (zh) 一种基于向量网络编码和des的拟态加密方法及系统
Hafsa et al. Hybrid encryption model based on advanced encryption standard and elliptic curve pseudo random
Khatri et al. Secure modified aes algorithm for static and mobile networks
US20100128870A1 (en) Pseudo-random number generation device, program, and method for stream encoding
Jagetiya et al. Evolution of Information Security Algorithms
Uniyal et al. An Improvement in Key Domain Maximization Technique by Entropy Maximization
EP4218197B1 (en) Method for securing an execution of a cryptographic process

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20101005