JP2018092010A - 暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム - Google Patents

暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム Download PDF

Info

Publication number
JP2018092010A
JP2018092010A JP2016235492A JP2016235492A JP2018092010A JP 2018092010 A JP2018092010 A JP 2018092010A JP 2016235492 A JP2016235492 A JP 2016235492A JP 2016235492 A JP2016235492 A JP 2016235492A JP 2018092010 A JP2018092010 A JP 2018092010A
Authority
JP
Japan
Prior art keywords
vector
random number
integer
encryption
public key
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.)
Pending
Application number
JP2016235492A
Other languages
English (en)
Inventor
恭通 村上
Yasumichi Murakami
恭通 村上
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Priority to JP2016235492A priority Critical patent/JP2018092010A/ja
Publication of JP2018092010A publication Critical patent/JP2018092010A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】この発明の課題は、ナップザック暗号方式あるいは積和暗号方式を拡張して、別解攻撃に対し安全な、新規の公開鍵暗号化装置等を提供することにある。
【解決手段】ナップザック暗号方式あるいは積和暗号方式を拡張して、暗号化において、公開鍵ベクトルa のいかなる成分ak とも平文m は積をとらなくて良いようにすることで、秘密鍵ベクトルs の下位ビットを公開する必要をなくし、公開鍵ベクトルa と乱数ベクトルr の内積に、平文m を独立した項として加算して暗号文C を生成する。
【効果】別解攻撃に対して安全であり、かつ、暗号化を高速に行うことができる。
【選択図】図1

Description

本発明は、公開鍵暗号化装置等に関するものである。
従来のナップザック暗号は、超増加数列等の特殊な数列をモジュラー乗算して公開鍵である数列としていた。しかしながらこのような公開鍵には元の特殊な数列の影響が残り、完全な乱数列とは言えない。そこで発明者らは、秘密鍵に完全な乱数列を使用するナップザック公開鍵暗号を提案した(特許文献1 特開2013ー152389)。またこの暗号では、0からZ未満、例えば1ビットの平文mを暗号化する。特許文献1での暗号システムの概要を以下に示す。
秘密鍵: ベクトルs; 素数P; 整数e
公開鍵: ベクトルa; b;法Z
鍵生成
Step 1: 公開鍵ベクトル a の次元 n と法 Z を決める。
Step 2: n次元の秘密鍵ベクトル s をランダムに生成する。
Step 3: 次式を満たす素数 P をランダムに生成する。
P > sum(s) > P/2 (sum(s)はベクトル s の成分の和) (1)
Step 4: 次式を満たす整数 e をランダムに生成する。
e < P (2)
Step 5: 次式により秘密鍵ベクトル s から公開鍵ベクトル a を得る。
a = e s mod P (3)
Step 6: 法 Z とn次元の公開鍵ベクトル b を公開する
b = s mod Z (4)
暗号化
Step 1: 0〜Z-1 までの数から成る平文を m とする。
Step 2: 2 進乱数ベクトル r ∈ {0,1}n
m = b・r mod Z (b・r はベクトル b とベクトル r の内積) (5)
を満たすようにランダムに生成する。
Step 3: 暗号文 C を
C = a・r (6)
により計算する。
復号
中間平文 M を M = s・r で定義する。
Step 1: 次式により中間平文M を計算する。
M = e-1 C mod P (7)
Step 2: 平文m を次式により計算する。
m = M mod Z (8)
M = s・r = e-1 C mod P が成立し、s ≡ b (mod Z) より、M ≡ b・r (mod Z) が成立する。したがって式(8) が成立する。
別解攻撃
式(6)での乱数ベクトルの成分は0か1である。0と1に制限されない成分から成り、式(6)を満たす解を別解と呼ぶことにする。長尾と森井は、式(6)の別解から平文mを求める手法(別解攻撃)を発表した。r' を C = a・r' を満たす別解とすると、r' は成分が整数のn次元ベクトルである。r' が暗号化に用いた2進乱数ベクトル r ∈ {0,1}n と異なっていても、解読条件
M = s・r' (9)
を満たす場合には、平文 m を
m = b・r' mod Z (10)
として求めることができることを、長尾らは発見した(非特許文献2)。
特開2013ー152389号公報
発明者は考察を重ねた結果、別解攻撃による解読要因は別解が求まることにあるのではなく、秘密鍵s の下位側ビットから成るベクトルb を公開していることにあることを導いた。即ち、仮に別解が求められても、秘密鍵s の下位側ビットから成るベクトルが与えられていなければ、別解r' から平文m は求めることができない。そこで発明者は、平文m を、公開鍵との積をとることなく、独立した項として加算することにより、秘密鍵s の下位側ビットから成るベクトルを公開しなくても良いように、特許文献1の暗号システムを改良できることを発見した。
この発明の課題は、ナップザック暗号方式あるいは積和暗号方式を拡張して、平文を、公開鍵との積をとることなく、独立した項として加算することにより、別解攻撃に対し安全であり、かつ、高速に暗号化可能な、新規の公開鍵暗号化装置等を提供することにある。
この発明は、公開鍵を記憶するメモリと乱数発生器とを備えて、
乱数ベクトルr を前記乱数発生器により発生させ、
前記乱数ベクトルr と、公開鍵ベクトルa とにより、内積 a・r を求める演算器とを備え、
さらに前記内積 a・r と、平文m とを加算する加算器とを備え、
暗号文 C を、C = a・r + m により生成するように構成されている暗号化装置にある。
またこの発明は、公開鍵を記憶するメモリと乱数発生器とを備えて、
乱数ベクトルr を前記乱数発生器により発生させるステップと、
前記乱数ベクトルr と、公開鍵ベクトルa とにより、演算器により、内積 a・r を求めるステップと、
さらに前記内積 a・r と、平文m とを、演算器により、加算するステップ、とを実行することにより、
暗号文 C を、C = a・r + m により生成する暗号化方法にある。
またこの発明は、コンピュータからなる暗号化装置に、
乱数ベクトルr を発生させるステップと、
前記乱数ベクトルr と、公開鍵ベクトルa とにより、内積 a・r を求めるステップと、
さらに前記内積 a・r と、平文m とを、加算するステップ、とを実行させることにより、
暗号文C を、C = a・r + m により生成する暗号化プログラムにある。
この発明では、乱数ベクトルr として2値ベクトルを使用した場合、C = a・r + m は公開鍵ベクトルa の成分のいくつかと平文m を加算することにより計算することができる。また乱数ベクトルr として正整数ベクトルを使用した場合、整数の積和演算(整数ベクトルの内積)により a・r を求めて、それに平文 m を加算することによりC = a・r + m を計算することができる。これらの暗号化の手順は簡単なため高速に暗号化ができる。
この明細書において、暗号化装置に関する記載はそのまま暗号化方法、暗号化プログラム、及び鍵生成装置、鍵生成方法、鍵生成プログラムにも当てはまり、暗号化方法等に関する記載は暗号化装置等にもそのまま当てはまる。
またこの発明は、乱数発生器を備えて、
秘密の整数P と、s mod Z = 0(Zは2以上の整数)を満たす秘密の整数ベクトルs と、d mod Z = 1 を満たす秘密の整数d とを、前記乱数発生器により発生した乱数をもとに、生成させる秘密鍵生成手段と、
前記整数ベクトルs を a = d-1 s mod P により公開鍵ベクトルa に変換する剰余乗算器、とを備えた鍵生成装置にある。
またこの発明は、乱数発生器を備えて、
秘密の整数P と、s mod Z = 0(Zは2以上の整数)を満たす秘密の整数ベクトルs と、d mod Z = 1 を満たす秘密の整数d とを、前記乱数発生器により発生した乱数をもとに、生成させる秘密鍵生成ステップと、
前記整数ベクトルs を a = d-1 s mod P により公開鍵ベクトルa に変換するステップ、とを実行することによる鍵生成方法にある。
またこの発明は、コンピュータからなる鍵生成装置に、
秘密の整数P と、s mod Z = 0(Zは2以上の整数)を満たす秘密の整数ベクトルs と、d mod Z = 1 を満たす秘密の整数d とを生成させる秘密鍵生成ステップと、
前記整数ベクトルs を a = d-1 s mod P により公開鍵ベクトルa に変換するステップ、とを実行させることにより鍵を生成する鍵生成プログラムにある。
この発明では、秘密鍵の下位ビットが公開されないため、別解攻撃に対して安全である。
この明細書において、鍵生成装置に関する記載はそのまま暗号化方法、暗号化プログラム、及び鍵生成装置、鍵生成方法、鍵生成プログラムにも当てはまり、鍵生成方法等に関する記載は鍵生成装置等にもそのまま当てはまる。
この発明の公開鍵暗号化装置は、
秘密鍵d と、秘密鍵P(dとPは互いに素)と、ベクトルの次元を表す数n と、法Z と、n次元ベクトルを要素とする集合R とに対し、
成分が0以上P未満でn次元の公開鍵ベクトルa を記憶する公開鍵メモリと、
集合R に属するn次元ベクトルr を生成するための乱数発生器と、
0以上Z未満の平文m に対し、
C = a・r + m (ここに a・r はベクトルa とベクトルr との内積を表す)、により暗号文C を生成する演算器とを備えている。
特にR={0,1}nとした場合のこの発明の公開鍵暗号化装置は、
秘密鍵d と、秘密鍵P(dとPは互いに素)と、ベクトルの次元を表す数n と、法Z とに対し、
成分が0以上P未満でn次元の公開鍵ベクトルa を記憶する公開鍵メモリと、
成分が0または1でn次元の乱数ベクトルr を生成するための乱数発生器と、
0以上Z未満の平文m に対し、
C = a・r + m (ここに a・r はベクトルa とベクトル r との内積を表す)、により暗号文C を生成する演算器とを備えている。
この場合には暗号文C の生成は加算のみで行え、乗算は不要であるので、演算器は加算器で構成することができる。

本発明で実施する暗号システムの概要を以下に示す。
秘密鍵: ベクトルs; 整数P; 整数d
公開鍵: ベクトルa; 法Z; 集合R
鍵生成
Step 1: 公開鍵ベクトルa の次元n と法Z とn次元ベクトルを元とする集合R を決める。
Step 2: 次式を満たすn次元の秘密鍵ベクトルsをランダムに生成する。
s mod Z = 0 (右辺の0はn次元の零ベクトル) (11)
Step 3: 次式を満たす整数 d をランダムに生成する。
d mod Z = 1 (12)
Step 4: 次式を満たす整数 P をランダムに生成する。
gcd (d, P) = 1 (13)
P > maxr ∈ R(r・s) + (Z-1)d (r・sはベクトルr とベクトルs の内積) (14)
Step 5: 次式により秘密鍵ベクトルs から公開鍵ベクトルa を得る。
a = d-1 s mod P (d-1 はP を法とするd の逆元) (15)
Step 6: 法Z と集合R を公開する。
暗号化
Step 1: 0〜Z-1 までの整数から成る平文を m とする。
Step 2: n次元ベクトル r ∈ R をランダムに生成する。
Step 3: 暗号文C を
C = a・r + m (16)
により計算する。
復号
Step 1: 次式により中間平文M を計算する。
M = d C mod P (17)
Step 2: 平文 m を次式により計算する。
m = M mod Z (18)
式(14)より M = s・r + d m が成立し、式(11)より M ≡ d m (mod Z) が成立し、さらに式(12)より M ≡ m (mod Z)が成立する。したがって式(18)が成立する。
特にR={0,1}nとし、Z=2とした場合、この発明の暗号の安全性は部分和問題に基づいていると考えられるので、特に重要である。
この場合、この発明における平文m は0または1の値となり、m=0 のときの暗号文Cは C = a・r となり、m=1 のときの暗号文Cは C = a・r + 1 となる。
公開鍵ベクトルa の成分ak は一様乱数と考えられるので、暗号文C と公開鍵ベクトルa から C=a・r を満たす解r ∈ {0,1}n が存在するか否かを判定することは、判定問題としての部分和問題を解くことと同じであるので難しいと考えられる。すなわち、m=0 のときには、C = a・r であるので、この部分和問題には解があり、m=1 のときには、C = a・r + 1 であるので、この部分和問題に解がないことになるが、第三者がこのいずれかを判定することは難しいと考えられる。
一方、正当な受信者は暗号文C から求めた中間平文M が偶数か奇数かにより、m=0 かm=1かを判定することができる。
また本発明の暗号化システムにおいて、さらに整数V を追加して公開しておくことで、
0以上Z未満の平文m に対し、0以上V 未満の整数乱数v を発生させて
C = a・r + Zv + m (19)
により暗号文C を生成することもできる。
この場合の本発明の暗号システムは、
法Z は公開されているので公開鍵ベクトルa にZ を連接したn+1次元の整数を成分とするベクトルa' = [a | Z] を、改めて公開鍵ベクトルと考え、乱数ベクトルr ∈ R と乱数v ∈ {0,1,...,V-1} を連接した乱数ベクトルr' = [r | v] ∈ R'(ここに集合R' は集合R と集合{0,1,...,V-1} の直積であるR'= R × {0,1,...,V-1} )を、改めて乱数ベクトルと考えれば、
C = a'・r' + m
により暗号文C を生成することと等価である。したがってこの場合も公開鍵ベクトルa' と乱数ベクトルr' の内積に平文m を加算して暗号化している暗号化システムであるので、本発明の変形例である。
この場合の暗号システムの概要を以下に示す。

秘密鍵: ベクトルs; 整数P; 整数d
公開鍵: ベクトルa; 法Z; 整数V; 集合R
鍵生成
Step 1: 公開鍵ベクトルa の次元n と法Z と整数V とn次元ベクトルを元とする集合R を決める。
Step 2: 次式を満たすn次元の秘密鍵ベクトルsをランダムに生成する。
s mod Z = 0 (右辺の0はn次元の零ベクトル) (20)
Step 3: 次式を満たす整数 d をランダムに生成する。
d mod Z = 1 (21)
Step 4: 次式を満たす整数 P をランダムに生成する。
gcd (d, P) = 1 (22)
P > maxr ∈ R(r・s) + (ZV-1)d (r・sはベクトルr とベクトルs の内積) (23)
Step 5: 次式により秘密鍵ベクトルs から公開鍵ベクトルa を得る。
a = e s mod P (e はP を法とするd の逆元) (24)
Step 6: 法Z と整数V と集合R を公開する
暗号化
Step 1: 0〜Z-1 までの整数から成る平文を m とする。
Step 2: n次元ベクトル r ∈ R をランダムに生成する。
Step 3: 0〜V-1 までの整数v をランダムに生成する。
Step 4: 暗号文C を
C = a・r + Z v + m (25)
により計算する。
復号
Step 1: 次式により中間平文M を計算する。
M = d C mod P (26)
Step 2: 平文 m を次式により計算する。
m = M mod Z (27)
式(23)より M = s・r + d Z v + d m が成立し、式(20)より M ≡ d m (mod Z) が成立し、さらに式(21)より M ≡ m (mod Z)が成立する。したがって式(27)が成立する。
別解攻撃に対して安全である。
図1は暗号通信装置のブロック図である。(実施例1) 図2は暗号化アルゴリズムを示すフローチャートである。(実施例1) 図3は復号アルゴリズムを示すフローチャートである。(実施例1) 図4は鍵生成装置のブロック図である。(実施例1) 図5は鍵生成アルゴリズムを示すフローチャートである。(実施例1) 図6は鍵生成アルゴリズムを示すフローチャートである。(実施例1) 図7は暗号通信での鍵の構造と復号の正当性を示す図である。(実施例1) 図8は暗号通信装置のブロック図である。(実施例2) 図9は暗号通信装置のブロック図である。(実施例3) 図10は暗号化アルゴリズムを示すフローチャートである。(実施例3) 図11は復号アルゴリズムを示すフローチャートである。(実施例3) 図12は鍵生成装置のブロック図である。(実施例3) 図13は鍵生成装置のブロック図である。(実施例3) 図14は鍵生成アルゴリズムを示すフローチャートである。(実施例3) 図15は暗号通信装置のブロック図である。(実施例4)
以下に本発明を実施するための最適実施例を示す。この発明の範囲は、特許請求の範囲の記載に基づき、明細書の記載とこの分野での周知技術とを参酌し、当業者の理解に従って定められるべきである。
図1〜図7に実施例1を示し、図8に実施例2を示し、図9〜図14に実施例3を示し、図15に実施例4を示す。これらの実施例において同じ符号は同じものを表し、実施例1に関する記載は特に断らない限り、その他の実施例にもそのまま当てはまる。
図1の実施例1は、ナップザック型の公開鍵暗号であって、整数を成分とする公開鍵ベクトルa と、0または1を成分とする乱数ベクトルr と、0または1を成分とする平文m に対し、暗号文 C を、C = a・r + m により計算する場合の実施例である。暗号化に加算しか使用しないため、高速に暗号化することができ、低コストで実装することができる。
図1において、2は暗号通信装置で、暗号化装置4と復号装置6及び通信インターフェース8とから成る。公開鍵メモリ10は、通信インターフェース8を介して、n個の数 ak から成る公開鍵 {ak} を受信して記憶し、乱数発生器12は1ビットのn個の乱数列 {rk} を発生する。
なお乱数 {rk} を、複数ビットの乱数として発生させて、そのうちの特定のビット(例えば最下位ビット)を取り出して発生しても良い。
18は内積演算器で、公開鍵ベクトルa と乱数ベクトルb の内積
a・r=Σn k=1 ak rk
を計算するための演算器である。
暗号文C は
C = a・r + m
として求められる。なお {rk} が1ビットの乱数列である場合、積和演算ではなく単なる加算となる。
内積演算器18の実装方法は任意であるが、図1の実施例1では内積が加算のみで計算できる特徴を生かして、加算器を用いて実装している。
加算器14は rk = 1 のときに ak をラッチ回路16の出力と加算した結果を出力し、ラッチ回路16はその出力を記憶する。これを k=1〜n について実行することにより、ラッチ回路16の出力は Σn k=1 ak rk となる。
暗号化装置4は、入力された1ビットの平文m と、前記内積演算器18の出力とを、加算器15により加算した結果を暗号文C として出力する。出力された暗号文C を通信インターフェース8を介し、通信相手の暗号通信装置2へ送信する。なお複数ビットの平文を送信する場合、平文1ビット毎に暗号文C を発生させ、複数個の暗号文C の列を送信する。
鍵メモリ20は秘密鍵d と秘密鍵P を記憶し、暗号文メモリ22は通信インターフェース8を介して入力された暗号文C を記憶する。暗号文メモリ22に記憶した暗号文C を、鍵メモリ20に記憶した秘密鍵d と乗算器24で乗算し、剰余演算器26で秘密鍵P に対する剰余
M = d C mod P
を求める。剰余M を中間平文と呼ぶ。
復号装置6は、剰余乗算器26の出力である剰余Mに対し、平文m をM の2 を法とする剰余、
m = M mod 2
として出力する。なお2 を法とする剰余は最下位ビット(LSB)であるから、実施例1では、単に剰余M の最下位ビット(LSB)を、LSB選択回路28で、選択して出力している。
図2に暗号化アルゴリズムを示す。ステップ1で1ビットの平文m を入力し、ステップ2で各1ビットの乱数の列 {rk} を発生させ、ステップ3で内積a・r = Σn k=1 ak rk を求め、ステップ4で C = a・r + m を求めて送信する。
図3に復号アルゴリズムを示す。ステップ11で暗号文C を受信し、ステップ12で M = d C mod P に従って中間平文M を求め、ステップ13で m = M mod 2に従って M の最下位ビット(LSB)を平文m として出力する。
図4に鍵生成装置を示す。鍵生成装置100は、秘密鍵P と、秘密鍵d と、公開鍵 {ak} とを出力する。素数発生器101で素数P を生成し、出力する。乱数発生器102で乱数を発生し、LSB変更回路104で最下位ビット(LSB)を1に変更することにより、
d mod 2 = 1
を満たす秘密鍵d を生成し、出力する。逆数演算器106で秘密鍵d の法P における逆元 d-1 を求める。乱数発生器102で乱数を発生し、LSB変更回路103で最下位ビット(LSB)を0に変更することにより、
sk mod 2 = 0
を満たすn 個の秘密の偶数列 {sk} を生成し、乗算器107で各 sk に逆元 d-1 を掛け、さらに剰余演算器108で法P による剰余を求めたものを、公開鍵 ak として出力する。
図5に鍵生成アルゴリズムを示す。
ステップ21で素数P を生成し、出力する。
ステップ22で奇数d を生成し、出力する。
ステップ23〜ステップ28までで、k=1〜n について以下のステップ25〜ステップ27を行う。
ステップ25で偶数 sk を生成し、
ステップ26で公開鍵 ak を求め、
ステップ27で公開鍵 ak を出力する。
復号の正当性を保証するためには取りうる中間平文M の最大値よりも大きい素数P を生成する必要がある。取りうる中間平文の最大値は生成する秘密鍵の大きさを決めれば、あらかじめ見積もることができるので、図4の素数生成器101や図5のステップ21において適切な大きさの素数を生成することができる。
例えばn次元の乱数ベクトルr を r ∈ {0,1}n として選ぶ場合、中間平文の最大値Mmax は、
Mmax = Σn k=1 sk + d
である。例えば秘密鍵sk と秘密鍵d のビット長をt ビットと設定した場合、Mmax のビット長L は t + log2 n よりも小さいので、 t + 1 + ceil( log2 n ) ビットのサイズの素数を生成すれば良いことがわかる(ここに ceil(x) はx を切り上げた整数値)。なおn次元の乱数ベクトルr の重みを制限する方式も考えることができるが、その場合にはより小さいサイズの素数を使用することができる。
鍵生成の別の実施例として、秘密鍵sk と秘密鍵d を生成してから
P > Σn k=1 sk + d
を満たす素数を生成することもできる。図6にこの場合の鍵生成アルゴリズムを示す。
ステップ31で和S を0 に初期化する。
ステップ32〜ステップ36までで、k=1〜n について以下のステップ34〜ステップ35を行う。
ステップ34で偶数 sk を生成し、
ステップ35で和S に sk を加算する。
ステップ37で奇数d を生成し、出力する。
ステップ38で和S に奇数d を加算した値よりも大きい素数を生成し、出力する。
ステップ39〜ステップ43までで、k=1〜n について以下のステップ41〜ステップ42を行う。
ステップ41で公開鍵 ak を求め、
ステップ42で公開鍵 ak を出力する。
図7に鍵の構造と復号の正当性を示す。
秘密鍵 {sk} と秘密鍵d のサイズは同程度の大きさとするが、秘密鍵d のサイズを秘密鍵 {sk} のサイズより小さくすることもできる。秘密鍵 {sk} と秘密鍵d を生成する。
P > Σn k=1 sk + d
を満たすように、素数P を生成する。
平文m を1ビットの数ではなく、0以上Z未満の整数とする場合、Mmax が大きくなるので
P > Σn k=1 sk + (Z-1)d
を満たすように、素数P を生成する。
乱数 {rk} を1ビットの数ではなく、0以上T未満の整数とする場合、Mmax が大きくなるので
P > (T-1)Σn k=1 sk + d
を満たすように、素数P を生成する。
様々な変形例が考えられるが、いずれの場合においても
P > Mmax

を満たすように、素数P を生成すれば正当に復号できることが保証される。
図8の実施例2は、ナップザック型の公開鍵暗号であって、整数を成分とする公開鍵ベクトルa と、0または1を成分とする乱数ベクトルr と、0以上V未満の乱数v と、0または1を成分とする平文m に対し、暗号文 C を、C = a・r + 2v + m により計算する場合の実施例である。暗号化に加算しか使用しないため、高速に暗号化することができ、低コストで実装することができる。また乱数v を用いることによる安全性の向上が期待される。実施例2は、vは乱数であり、2は公開鍵の一部と考えることができるので、乱数ベクトルr に乱数v を連接したn+1次元の乱数ベクトルをr' とし、公開鍵ベクトルa に2 を連接したn+1次元の公開鍵ベクトルをa' と考えれば、暗号文 C は、C = a'・r' + m により求められるので、本発明の変形例である。
図8において、40は暗号通信装置で、暗号化装置41と復号装置6及び通信インターフェース8とから成る。乱数発生器12は、1ビットのn個の乱数列 {rk} の他に、0以上V未満の数v を発生する。乱数v は1ビットシフト回路11にて2倍にされる。シフト回路ではなく乗算器を用いることもできるが、2倍であるのでシフト回路で行うことが好ましい。また乱数を2倍することはランダムな偶数を発生していることと同等であるので、1ビットシフト回路11の代わりに、最下位ビット(LSB)変更回路を用いてLSBを0にする構成も考えられる。その他の符号は図1と同じである。
図9の実施例3は、積和型の公開鍵暗号であって、整数を成分とする公開鍵ベクトルa と、整数を成分とする乱数ベクトルr と、0以上Z未満を成分とする平文m に対し、暗号文 C を、C = a・r + m により計算する場合の実施例である。
図9において、50は暗号通信装置で、暗号化装置51と復号装置52及び通信インターフェース8とから成る。
内積演算器18は公開鍵ベクトルa と乱数ベクトルb の内積
a・r=Σn k=1 ak rk
を計算するための演算器である。
暗号文C は
C = a・r + m
として求められる。
乗算器19は、乱数発生器12で発生した整数乱数列 {rk} と、公開鍵メモリ10に記憶した公開鍵 {ak} との積を求める。加算器14は積 ak rk をラッチ回路16の出力と加算した結果を出力し、ラッチ回路16はその出力を記憶する。これを k=1〜n について実行することにより、ラッチ回路16の出力は Σn k=1 ak rk となる。
暗号化装置51は、入力された0以上Z未満の平文m と、前記内積演算器18の出力とを、加算器15により加算した結果を暗号文C として出力する。出力された暗号文C を通信インターフェース8を介し、通信相手の暗号通信装置2へ送信する。
鍵メモリ20は秘密鍵dとP及びZ を記憶し、暗号文メモリ22は通信インターフェース8を介して入力された暗号文C を記憶する。
復号装置52は、暗号文メモリ22に記憶した暗号文C を、鍵メモリ20に記憶した秘密鍵d と乗算器24で乗算し、剰余演算器26で秘密鍵P に対する剰余
M = d C mod P
を求める。剰余M を中間平文と呼ぶ。
復号装置52は、剰余乗算器27の出力である剰余M のZ を法とする剰余を平文m として出力する。
m = M mod Z
なおZ が2z の場合には、Z を法とする剰余はM の下位zビットであるから、単に剰余M の下位zビットを選択して出力すれば良い。
図10に暗号化アルゴリズムを示す。ステップ51で0以上Z未満の平文m を入力し、ステップ52で各整数乱数の列 {rk} を発生させ、ステップ53で内積a・r=Σn k=1 ak rk を求め、ステップ54で C = a・r + m を求めて送信する。
図11に復号アルゴリズムを示す。ステップ61で暗号文C を受信し、ステップ62で M = d C mod P で中間平文M を求め、ステップ63で m = M mod Z で平文m を求め出力する。
図12に鍵生成装置110を示す。鍵生成装置110は以下のように動作する。
素数発生器101で素数P を生成し、出力する。
乱数発生器102で乱数d を発生する。検査器114は、乱数d が
d mod Z = 1
を満たすかどうか検査し、満たさない場合には出力せずに乱数発生器に再度乱数d の生成を要求する信号を返し、満たす場合にはd を秘密鍵として出力する。
乱数発生器102で乱数列 {sk} を発生する。検査器113は、乱数 sk
sk mod Z = 0
を満たすかどうか検査し、満たさない場合には出力せずに乱数発生器に再度乱数sk の生成を要求する信号を返し、満たす場合にはsk を秘密鍵として出力する。
逆数演算器106で秘密鍵d の法P における逆元 d-1 を求める。乗算器107で各 sk に逆元 d-1 を掛け、さらに剰余演算器108で法P による剰余を求めたものを、公開鍵 ak として出力する。
実施例3の積和型の公開鍵暗号においても、実施例2のように、公開鍵Z と0以上V未満の乱数v の積を加える方式を考えることができる。この場合、vは乱数であり、Zは公開鍵であるので、乱数ベクトルr に乱数v を連接したn+1次元の乱数ベクトルをr' とし、公開鍵ベクトルa に公開鍵Z を連接したn+1次元の公開鍵ベクトルをa' と考えれば、暗号文 C は、C = a'・r' + m により求められるので、本発明の変形例である。
P は、素数であることが好ましいが、d と互いに素である整数としても良い。図13にその場合の鍵生成装置120を示す。鍵生成装置120は以下のように動作する。
乱数発生器102で整数P を発生し、出力する。
乱数発生器102で整数d を発生する。検査器124は、整数d が
d mod Z = 1 かつ gcd(d, P) = 1
を満たすかどうか検査し、満たさない場合には出力せずに乱数発生器に再度乱数d の生成を要求する信号を返し、満たす場合にはd を秘密鍵として出力する。
乱数発生器102で乱数列 {sk} を発生する。検査器113は、乱数 sk
sk mod Z = 0
を満たすかどうか検査し、満たさない場合には出力せずに乱数発生器に再度乱数sk の生成を要求する信号を返し、満たす場合にはsk を秘密鍵として出力する。逆数演算器106で秘密鍵d の法P における逆元 d-1 を求める。乗算器107で各 sk に逆元 d-1 を掛け、さらに剰余演算器108で法P による剰余を求めたものを、公開鍵 ak として出力する。
法Z=2z の場合には、検査器124を用いずに下位ビット変更回路等で、整数d の下位z ビットをz ビットから成る(0,...,0,1)に変更すれば良い。また、検査器113を用いずに、下位ビット変更回路等で、sk の下位z ビットを全て0に変更すれば良い。
図14に実施例3’の鍵生成アルゴリズムを示す。
ステップ71で整数P を生成し、出力する。
ステップ72で整数d を生成する。
ステップ73で整数d が gcd(d,P) = 1 かつ d mod Z = 1 を満たすか検査し、満たさない場合はステップ72へ戻り、満たす場合は次のステップへ進む。
ステップ74で整数d を出力する。
ステップ75〜ステップ81までで k=1〜n について以下を行う。
ステップ77で整数 sk を生成し、
ステップ78で整数 sk が sk mod Z = 0 を満たすか検査し、満たさない場合はステップ77へ戻り、満たす場合は次のステップへ進む。
ステップ79で公開鍵 ak を求め、
ステップ80で公開鍵 ak を出力する。
復号の正当性を保証するためには取りうる中間平文M の最大値よりも大きい素数P を生成する必要がある。
例えば0以上Z未満の平文m に対し、n次元の乱数rk を0以上T未満の数として選ぶ場合、中間平文の最大値Mmax は、
Mmax = (T-1) Σn k=1 sk + (Z-1)d
である。Mmax のビット長L はあらかじめ計算しておくことができるので、L+1 ビットのサイズの素数を生成すれば良いことがわかる。
図15の実施例4は、ナップザック型の公開鍵暗号であって、整数を成分とする公開鍵ベクトルa と、0または1を成分とする乱数ベクトルr と、0以上Z未満を成分とする平文m に対し、暗号文 C を、C = a・r + m により計算する場合の実施例である。
図15において、60は暗号通信装置で、暗号化装置4と復号装置52及び通信インターフェース8とから成る。暗号化装置4は実施例1における図1の暗号化装置4と同じであるが、入力する平文が実施例1では0または1であったのに対し、実施例4では0以上Z未満の整数である点のみが異なる。復号装置52は実施例2における図9の復号装置52と同じである。
2,40,50,60 公開鍵暗号通信装置
4,41,51 暗号化装置
6,52 復号装置
8 通信インターフェース
10 公開鍵メモリ
11 1ビットシフト回路
12 乱数発生器
14,15 加算器
16 ラッチ回路
18 内積演算器
19 乗算器
20 鍵メモリ
22 暗号文メモリ
24 乗算器
26 剰余演算器
27 剰余演算器
28 LSB選択回路
100,110,120 鍵生成装置
101 素数発生器
102 乱数発生器
103 LSB変更回路
104 LSB変更回路
105 検査器
106 逆数演算器
107 乗算器
108 剰余演算器
113 検査器
114 検査器
124 検査器

Claims (6)

  1. 公開鍵を記憶するメモリと乱数発生器とを備えて、
    乱数ベクトルr を前記乱数発生器により発生させ、
    前記乱数ベクトルr と、公開鍵ベクトルa とにより、内積 a・r を求める演算器とを備え、
    さらに前記内積 a・r と、平文m とを加算する加算器とを備え、
    暗号文 C を、C = a・r + m により生成するように構成されている暗号化装置。
  2. 公開鍵を記憶するメモリと乱数発生器とを備えて、
    乱数ベクトルr を前記乱数発生器により発生させるステップと、
    前記乱数ベクトルr と、公開鍵ベクトルa とにより、演算器により、内積 a・r を求めるステップと、
    さらに前記内積 a・r と、平文m とを、演算器により、加算するステップ、とを実行することにより、
    暗号文 C を、C = a・r + m により生成する暗号化方法。
  3. コンピュータからなる暗号化装置に、
    乱数ベクトルr を発生させるステップと、
    前記乱数ベクトルr と、公開鍵ベクトルa とにより、内積 a・r を求めるステップと、
    さらに前記内積 a・r と、平文m とを、加算するステップ、とを実行させることにより、
    暗号文 C を、C = a・r + m により生成する暗号化プログラム。
  4. 乱数発生器を備えて、
    秘密の整数P と、s mod Z = 0(Zは2以上の整数)を満たす秘密の整数ベクトルs と、d mod Z = 1 を満たす秘密の整数d とを、前記乱数発生器により発生した乱数をもとに、生成させる秘密鍵生成手段と、
    前記整数ベクトルs を a = d-1 s mod P により公開鍵ベクトルa に変換する剰余乗算器、とを備えた鍵生成装置。
  5. 乱数発生器を備えて、
    秘密の整数P と、s mod Z = 0(Zは2以上の整数)を満たす秘密の整数ベクトルs と、d mod Z = 1 を満たす秘密の整数d とを、前記乱数発生器により発生した乱数をもとに、生成させる秘密鍵生成ステップと、
    前記整数ベクトルs を a = d-1 s mod P により公開鍵ベクトルa に変換するステップ、とを実行することによる鍵生成方法。
  6. コンピュータからなる鍵生成装置に、
    秘密の整数P と、s mod Z = 0(Zは2以上の整数)を満たす秘密の整数ベクトルs と、d mod Z = 1 を満たす秘密の整数d とを生成させる秘密鍵生成ステップと、
    前記整数ベクトルs を a = d-1 s mod P により公開鍵ベクトルa に変換するステップ、とを実行させることにより鍵を生成する鍵生成プログラム。
JP2016235492A 2016-12-05 2016-12-05 暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム Pending JP2018092010A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016235492A JP2018092010A (ja) 2016-12-05 2016-12-05 暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016235492A JP2018092010A (ja) 2016-12-05 2016-12-05 暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム

Publications (1)

Publication Number Publication Date
JP2018092010A true JP2018092010A (ja) 2018-06-14

Family

ID=62565500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016235492A Pending JP2018092010A (ja) 2016-12-05 2016-12-05 暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム

Country Status (1)

Country Link
JP (1) JP2018092010A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114095151A (zh) * 2020-07-31 2022-02-25 马上消费金融股份有限公司 一种加解密方法、认证方法、装置、设备和存储介质
CN116992204A (zh) * 2023-09-26 2023-11-03 蓝象智联(杭州)科技有限公司 一种基于隐私保护的数据点乘运算方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114095151A (zh) * 2020-07-31 2022-02-25 马上消费金融股份有限公司 一种加解密方法、认证方法、装置、设备和存储介质
CN116992204A (zh) * 2023-09-26 2023-11-03 蓝象智联(杭州)科技有限公司 一种基于隐私保护的数据点乘运算方法
CN116992204B (zh) * 2023-09-26 2023-12-29 蓝象智联(杭州)科技有限公司 一种基于隐私保护的数据点乘运算方法

Similar Documents

Publication Publication Date Title
JP5402632B2 (ja) 共通鍵ブロック暗号化装置、共通鍵ブロック暗号化方法及びプログラム
JP5229315B2 (ja) 共通鍵暗号機能を搭載した暗号化装置及び組込装置
US11546135B2 (en) Key sequence generation for cryptographic operations
JP2008203548A (ja) 二次双曲線群を使用する鍵生成方法、復号方法、署名検証方法、鍵ストリーム生成方法および装置。
JP6386198B1 (ja) 暗号化装置及び復号装置
US10326589B2 (en) Message authenticator generating apparatus, message authenticator generating method, and computer readable recording medium
JP7031580B2 (ja) 暗号化装置、暗号化方法、復号化装置、及び復号化方法
JP2013186157A (ja) 暗号処理装置
JPWO2013065241A1 (ja) インクリメンタルmacタグ生成装置、方法及びプログラム並びにメッセージ認証装置
Abdullah et al. Security improvement in elliptic curve cryptography
JP2018092010A (ja) 暗号化装置と暗号化方法、暗号化プログラム及び鍵生成装置と鍵生成方法、鍵生成プログラム
JP2021124679A (ja) 暗号化装置、復号装置、暗号方法、復号方法、暗号化プログラム及び復号プログラム
Chaouch et al. Software application for simulation-based AES, RSA and elliptic-curve algorithms
Mihalkovich et al. MPF based symmetric cipher performance comparison to AES and TDES
Ariffin et al. AA β public key cryptosystem-A comparative analysis against RSA and ECC
JP5210712B2 (ja) 圧縮rsa係数の計算方法
JP5354914B2 (ja) 暗号処理装置及び復号処理装置及びプログラム
Siddavaatam et al. An adaptive security framework with extensible computational complexity for cipher systems
Hazzazi et al. Asymmetric Key Cryptosystem for Image Encryption by Elliptic Curve over Galois Field GF (2 n).
JP4200259B2 (ja) 公開鍵生成装置、暗号化装置および復号装置
JP5500277B2 (ja) 共通鍵暗号機能を搭載した暗号化装置及び組込装置
RU2291578C1 (ru) Способ поточного шифрования данных
KR101932032B1 (ko) 선형 길이의 암호문을 가지는 다항식 함수 암호화 방법
JP2010164897A (ja) 暗号化数値二進変換システム、暗号化数値二進変換方法、暗号化数値二進変換プログラム
Sharma et al. TEXCEL: text encryption with elliptic curve cryptography for enhanced security