(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-19
(45)【発行日】2023-12-27
(54)【発明の名称】暗号復号システム、暗号復号方法、及び暗号復号用プログラム
(51)【国際特許分類】
H04L 9/08 20060101AFI20231220BHJP
【FI】
H04L9/08 C
H04L9/08 E
(21)【出願番号】P 2020164201
(22)【出願日】2020-09-29
【審査請求日】2022-09-26
(73)【特許権者】
【識別番号】391016358
【氏名又は名称】東芝情報システム株式会社
(74)【代理人】
【識別番号】100156199
【氏名又は名称】神崎 真
(74)【代理人】
【識別番号】100090169
【氏名又は名称】松浦 孝
(74)【代理人】
【識別番号】100074147
【氏名又は名称】本田 崇
(74)【代理人】
【識別番号】100124497
【氏名又は名称】小倉 洋樹
(72)【発明者】
【氏名】岩野 隆
【審査官】青木 重徳
(56)【参考文献】
【文献】特開2008-117373(JP,A)
【文献】特開2020-052215(JP,A)
【文献】特表2002-540721(JP,A)
【文献】特表2016-529753(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/08
JSTPlus/JMEDPlus/JST7580(JDreamIII)
(57)【特許請求の範囲】
【請求項1】
演算により暗号文を生成する暗号生成部を有する暗号生成装置と、前記暗号生成装置から暗号文を受けて暗号文を復号し平文とする復号部を有する復号装置とを具備し、
前記暗号生成装置と前記復号装置には、一次元写像の演算によりそれぞれで生成した通知情報の交換を行って同一の共通鍵を生成する暗号側共通鍵生成部と復号側共通鍵生成部が備えられ、
前記暗号生成部は前記共通鍵に基づく暗号生成を行い、前記復号部は前記共通鍵に基づく復号処理を行うことを特徴とする暗号復号システムにおいて、
前記暗号側共通鍵生成部と前記復号側共通鍵生成部とは、それぞれで異なる固有の秘密情報を保持すると共に2数値を同じく保持し、それぞれが前記秘密情報と前記2数値を用いて一次元写像の演算を行って通知情報を生成するものであり、
前記暗号側共通鍵生成部と前記復号側共通鍵生成部とは、通知情報を受け取ると、この通知情報と前記秘密情報を用いて一次元写像の演算により共通鍵を生成するものであり、
前記一次元写像は、一変数多項式の一次元写像であること特徴とする暗号復号システム。
【請求項2】
前記暗号生成装置には、前記暗号側共通鍵生成部により生成された共通鍵に基づき前記一次元写像の演算を行ってセッション鍵を生成する暗号側セッション鍵生成部が備えられ、
前記暗号生成部は、前記共通鍵と前記セッション鍵とを用いて暗号文を生成し、
前記復号装置には、前記復号側共通鍵生成部により生成された共通鍵に基づき前記一次元写像の演算を行ってセッション鍵を生成する復号側セッション鍵生成部が備えられ、
前記復号部は、前記共通鍵と前記セッション鍵とを用いた復号により平文を生成することを特徴とする請求項1に記載の暗号復号システム。
【請求項3】
前記暗号生成装置には、乱数を生成し前記暗号側セッション鍵生成部と前記復号側セッション鍵生成部へ送出する乱数生成部が備えられていることを特徴とする請求項2に記載の暗号復号システム。
【請求項4】
前記暗号生成装置には、前記暗号側共通鍵生成部から共通鍵を受け取り、この共通鍵により一変数多項式を生成し、この一変数多項式による一次元写像を行い、暗号側交換情報を生成する第2の暗号側更新鍵生成部が備えられ、
前記復号装置には、前記復号側共通鍵生成部から共通鍵を受け取り、この共通鍵により一変数多項式を生成し、この一変数多項式による一次元写像を行い、復号側交換情報を生成する第2の復号側更新鍵生成部が備えられ、
前記第2の暗号側更新鍵生成部は、復号側交換情報を受け取ってこの復号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成し、
前記第2の復号側更新鍵生成部は、暗号側交換情報を受け取ってこの暗号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成することを特徴とする請求項1に記載の暗号復号システム。
【請求項5】
前記暗号生成部では、生成された更新鍵を用いた暗号生成を行い、
前記復号部では、生成された更新鍵を用いた復号を行うことを特徴とする請求項4に記載の暗号復号システム。
【請求項6】
演算により暗号文を生成する暗号生成部を有する暗号生成装置と、前記暗号生成装置から暗号文を受けて該暗号文を復号し平文とする復号部を有する復号装置とにおいて行われ、
前記暗号生成装置と前記復号装置には、暗号側共通鍵生成部と復号側共通鍵生成部が備えられ、
前記暗号生成部において共通鍵に基づく暗号生成を行い、前記復号部において共通鍵に基づく復号処理を行う暗号復号方法であって、
前記暗号側共通鍵生成部と前記復号側共通鍵生成部とにおいて、それぞれで異なる固有の秘密情報を保持すると共に同じ2数値を保持し、それぞれが前記秘密情報と前記2数値を用いて一次元写像の演算を行って通知情報を生成し、
前記暗号側共通鍵生成部と前記復号側共通鍵生成部においては、通知情報を受け取ると、この通知情報と前記秘密情報を用いて一次元写像の演算により共通鍵を生成し、
前記一次元写像を、一変数多項式の一次元写像としたこと特徴とする暗号復号方法。
【請求項7】
前記暗号生成装置には、暗号側セッション鍵生成部が備えられ、この暗号側セッション鍵生成部においては、前記暗号側共通鍵生成部により生成された共通鍵に基づき前記一次元写像の演算を行ってセッション鍵を生成し、
前記暗号生成部においては、前記共通鍵と前記セッション鍵とを用いて暗号文を生成し、
前記復号装置には、復号側セッション鍵生成部が備えられ、この復号側セッション鍵生成部においては、前記復号側共通鍵生成部により生成された共通鍵に基づき前記一次元写像の演算を行ってセッション鍵を生成し、
前記復号部においては、前記共通鍵と前記セッション鍵とを用いた復号により平文を生成することを特徴とする請求項6に記載の暗号復号方法。
【請求項8】
前記暗号生成装置には、乱数生成部が備えられ、この乱数生成部において乱数を生成し前記暗号側セッション鍵生成部と前記復号側セッション鍵生成部へ送出することを特徴とする請求項7に記載の暗号復号方法。
【請求項9】
前記暗号生成装置には、第2の暗号側更新鍵生成部が備えられ、この第2の暗号側更新鍵生成部においては、前記暗号側共通鍵生成部から共通鍵を受け取り、この共通鍵により一変数多項式を生成しこの一変数多項式による一次元写像を行い、暗号側交換情報を生成し、
前記復号装置には、第2の復号側更新鍵生成部が備えられ、この第2の復号側更新鍵生成部において、前記復号側共通鍵生成部から共通鍵を受け取り、この共通鍵により一変数多項式を生成しこの一変数多項式による一次元写像を行い、復号側交換情報を生成し、
前記第2の暗号側更新鍵生成部においては、復号側交換情報を受け取ってこの復号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成し、
前記第2の復号側更新鍵生成部においては、暗号側交換情報を受け取ってこの暗号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成することを特徴とする請求項6に記載の暗号復号方法。
【請求項10】
前記暗号生成部においては、生成された更新鍵を用いた暗号生成を行い、
前記復号部においては、生成された更新鍵を用いた復号を行うことを特徴とする請求項9に記載の暗号復号方法。
【請求項11】
暗号復号システムの暗号生成装置に備えられたコンピュータを、
演算により暗号文を生成する暗号生成部として機能させ、
暗号復号システムの復号装置に備えられたコンピュータを、前記暗号生成装置から暗号文を受けて該暗号文を復号し平文とする復号部として機能させ、
更に、
前記暗号生成装置に備えられたコンピュータと前記復号装置に備えられたコンピュータを、一次元写像の演算によりそれぞれで生成した通知情報の交換を行って同一の共通鍵を生成する暗号側共通鍵生成部と復号側共通鍵生成部、
として機能させ、
前記暗号生成装置に備えられたコンピュータを、前記暗号生成部として前記共通鍵に基づく暗号生成を行うように機能させ、
前記復号装置に備えられたコンピュータを、前記復号部として前記共通鍵に基づく復号処理を行うように機能させ、
前記暗号生成装置に備えられたコンピュータと前記復号装置に備えられたコンピュータを、前記暗号側共通鍵生成部と前記復号側共通鍵生成部として、それぞれで異なる固有の秘密情報を保持すると共に2数値を同じく保持し、それぞれが前記秘密情報と前記2数値を用いて一次元写像の演算を行って通知情報を生成するように機能させ、
前記暗号生成装置に備えられたコンピュータと前記復号装置に備えられたコンピュータを、前記暗号側共通鍵生成部と前記復号側共通鍵生成部として、通知情報を受け取ると、この通知情報と前記秘密情報を用いて一次元写像の演算により共通鍵を生成するように機能させ、
前記一次元写像を、一変数多項式の一次元写像により実現させる
こと特徴とする暗号復号用プログラム。
【請求項12】
前記暗号生成装置に備えられたコンピュータを、前記暗号側共通鍵生成部により生成された共通鍵に基づき前記一次元写像の演算を行ってセッション鍵を生成する暗号側セッション鍵生成部として機能させ、
前記暗号生成装置に備えられたコンピュータを、前記暗号生成部として、前記共通鍵と前記セッション鍵とを用いて暗号文を生成するように機能させ、
前記復号装置に備えられたコンピュータを、前記復号側共通鍵生成部により生成された共通鍵に基づき前記一次元写像の演算を行ってセッション鍵を生成する復号側セッション鍵生成部として機能させ、
前記復号装置に備えられたコンピュータを、前記復号部として、前記共通鍵と前記セッション鍵とを用いた復号により平文を生成するように機能させる
ことを特徴とする請求項11に記載の暗号復号用プログラム。
【請求項13】
前記暗号生成装置に備えられたコンピュータを、乱数を生成し前記暗号側セッション鍵生成部と前記復号側セッション鍵生成部へ送出する乱数生成部として機能させる
ことを特徴とする請求項12に記載の暗号復号用プログラム。
【請求項14】
前記暗号生成装置に備えられたコンピュータを、前記暗号側共通鍵生成部から共通鍵を受け取り、この共通鍵により一変数多項式を生成し、この一変数多項式による一次元写像を行い、暗号側交換情報を生成する第2の暗号側更新鍵生成部として機能させ、
前記復号装置に備えられたコンピュータを、前記復号側共通鍵生成部から共通鍵を受け取り、この共通鍵により一変数多項式を生成し、この一変数多項式による一次元写像を行い、復号側交換情報を生成する第2の復号側更新鍵生成部として機能させ、
前記暗号生成装置に備えられたコンピュータを、前記第2の暗号側更新鍵生成部として、復号側交換情報を受け取ってこの復号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成するように機能させ、
前記復号装置に備えられたコンピュータを、前記第2の復号側更新鍵生成部として、暗号側交換情報を受け取ってこの暗号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成するように機能させる
ことを特徴とする請求項11に記載の暗号復号用プログラム。
【請求項15】
前記暗号生成装置に備えられたコンピュータを、前記暗号生成部として、生成された更新鍵を用いた暗号生成を行うように機能させ、
前記復号装置に備えられたコンピュータを、前記復号部として、生成された更新鍵を用いた復号を行うように機能させる
ことを特徴とする請求項14に記載の暗号復号用プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、暗号復号システム、暗号復号方法、及び暗号復号用プログラムに関するものである。
【背景技術】
【0002】
一次元写像はカオス的性質があることから、特許文献1に示されるように乱数生成器や共通鍵暗号方法の提案がなされている。しかしながら、一次元写像は、乱数性能面では統計的指標が示されているが、セキュリティ面では安全性指標が現段階では示されておらず、安全性を確保する適切な鍵の実装方法や暗号手法が明確にされていない状況となっている。
【0003】
特許文献2(特表2002-058638号公報)には、算術型圧縮暗号装置が開示されている。この算術型圧縮暗号装置は、シンボルの出現確率を予測するモデル器から出力されたシンボルの出現確率に基づいて上記シンボルの符号化を行う。更に、この算術型圧縮暗号装置は、入力したシンボルの出現確率に基づく動的な区分線形写像を暗号鍵で制御して出力符号を圧縮および暗号化する。この装置によれば、算術符号化による本来のデータ圧縮率を損なうことなく、高い安全性を得ることができ、また、単純な処理で効率良く出力符号を攪乱することができる。
【0004】
特許文献3には、高速演算が可能な新規なカオス的時系列を探索し、このカオス的時系列を用いてカオス発生装置やカオス暗号装置などを実現することが開示されている。このカオス発生装置は、変数nの増加に従って急激に増加する関数fi(n)[i=1~L、L≧1]に対し素数mi[i=1~L、L≧1]を設定する手段と、変数nの初期値n0に対してfi(n0)から素数miを法として剰余ri(n0)[i=1~L、L≧1]を導出する初期値演算手段と、fi(n+1)の計算では剰余ri(n)を利用して素数miを法として導出された剰余ri(n+1)を導出する反復演算手段と、変数nをn0から順次増大させながら前記剰余ri(n)[i=1~L、L≧1]を通して生成される一意の値を有するカオス的時系列Xnを出力するカオス信号出力手段から構成される。これによって、再現性のあるカオス的時系列信号を高速出力し、高安全性の暗号装置などを実現する。
【0005】
特許文献4には、情報を暗号化して伝送するのに好適な暗号通信システムが開示されている。暗号通信システムの送信装置と受信装置とは、それぞれ秘密鍵と公開鍵を生成すると共に、現在時刻を基に乱数を生成し、生成された乱数を用いてセッション鍵を作り、RSA暗号の技術を用いてセッション鍵を共有する。共有されたセッション鍵は、乱数の暗号化にも用いられ、暗号化された乱数を復号したときに元の乱数と一致することをもって、セッション鍵が認証される。伝送すべき情報は、認証されたセッション鍵により、ベクトルストリーム暗号によって伝送され、通信の秘密を保つことができる。
【0006】
特許文献5には、暗号生成装置が開示されている。この装置は、鍵データに基づいてカオス演算に用いるパラメータ列を生成するパラメータ生成手段と、生成されたパラメータ列を用いてカオス演算を行ってカオスノイズを得るカオスノイズ発生手段と、カオスノイズを平文情報に対して適用する演算を行って暗号文を得る排他的論理和回路と、排他的論理和回路により得られる暗号文を上記カオスノイズ発生手段へフィードバックするフィードバック経路とを具備する。上記カオスノイズ発生手段においては、フィードバックされた暗号文に基づきカオス演算を行い、カオスノイズを得る。この構成によって、平文と暗号文の1ペアから、他の暗号文の解読を不可能にする。
【0007】
上記の共通鍵暗号方式は、鍵の管理を必要とし通信相手がN対Nとした場合、N(N-1)個の鍵を必要とするため鍵の管理にコストがかかる。
【先行技術文献】
【特許文献】
【0008】
【文献】特開2016-081274号公報
【文献】再公表2002-058038号公報
【文献】特開2005-17612号公報
【文献】特開2006-67412号公報
【文献】特開2008-197685号公報
【0009】
<Diffie-Hellman鍵共有方法>
従来、鍵共有の方法として、Diffie-Hellman鍵共有方法が知られている。この方法は、歴史上初めて鍵の配送問題を解決した鍵を共有するアルゴリズムとして知られている。
図1は、Diffie-Hellman鍵共有方法のシーケンスである。
ここでは、暗号生成装置と復号装置が、秘密の共通鍵を共有する場合を説明する。暗号生成装置と復号装置は式(1)の合同算術式に関し、その生成元gと法(modulo)とする素数Pをお互いに連絡して合意する(S11)。
【数1】
上記合同算術の式を説明する。生成元gと、べき乗r、法Pと余りyからなり、例えば“g=2、r=11、P=11”と値を設定した場合、式(1)は、211≡2(mod 11)になり、211=2048を11で割ると余りが2となることを示し、11の法(modulo)をとった剰余は2となる。
【0010】
暗号生成装置は秘密情報として暗号生成装置のみが知る2以上P未満の数(自然数)Saを生成する(S12)。復号装置は秘密情報として復号装置のみが知る2以上P未満の数(自然数)Sbを生成する(S13)。暗号生成装置は復号装置と合意した生成元gと法となる素数Pを式(1)に設定する。暗号生成装置は秘密情報である数Saを式(1)のべき乗rに設定した次の式(2)による演算を実行し、余りyaを生成する。生成したyaは通知情報としてBに送信する(S14)。
【数2】
【0011】
一方、復号装置は秘密情報である数Sbを式(1)のべき乗rに設定して次の式(3)による演算を実行し、余りybを生成する。復号装置は、生成したybを通知情報として暗号生成装置へ送信する(S15)。
【数3】
【0012】
次に、暗号生成装置と復号装置が共有する秘密情報(共通鍵)を生成する。
暗号生成装置は復号装置から通知情報ybを受信し、通知情報ybを式(1)の生成元gに設定し、暗号生成装置(暗号生成装置のユーザなど)のみが知る数Saを式(1)のべき乗rに設定して余りCaを生成する(S16)。
処理を式で表すと次の式(4)となる。
【数4】
上記において、ybはgSbをPで法を取った値のためybにgSbを当てはめると、
【数5】
が成り立っている。
【0013】
一方、復号側置は、暗号生成装置から通知情報yaを受信し、通知情報yaを式(2)の生成元gに設定し複号装置(復号装置のユーザなど)のみが知る数Sbをべき乗rに設定して余りCbを生成する(S17)。
処理を式で表すと次の式(6)となる。
【数6】
上記において、yaはgSaをPで法を取った値のためyaにgSaを当てはめると
【数7】
が成り立っている。
【0014】
暗号生成装置と復号装置で求めた余りCaとCbは次の式(8)の関係が成り立っており、暗号生成装置と復号装置はこの同じ数“Ca=Cb”をAとBで共有する共通鍵として使用することができる。
【数8】
【発明の概要】
【発明が解決しようとする課題】
【0015】
上記のDiffie-Hellman鍵共有方法によれば、鍵の管理を不要とすることができるものの、剰余を求める演算が必要であり演算負荷が大きくなり、演算コストが増大する問題点を有する。
【0016】
本実施形態では、鍵の管理を不要とすることができ、また、演算負荷と演算コストの低減を図る。
【課題を解決するための手段】
【0017】
本実施形態に係る暗号復号システムは、演算により暗号文を生成する暗号生成部を有する暗号生成装置と、前記暗号生成装置から暗号文を受けて暗号文を復号し平文とする復号部を有する復号装置とを具備し、前記暗号生成装置と前記復号装置には、一次元写像の演算によりそれぞれで生成した通知情報の交換を行って同一の共通鍵を生成する暗号側共通鍵生成部と復号側共通鍵生成部が備えられ、前記暗号生成部は前記共通鍵に基づく暗号生成を行い、前記復号部は前記共通鍵に基づく復号処理を行うことを特徴とする暗号復号システムにおいて、前記暗号側共通鍵生成部と前記復号側共通鍵生成部とは、それぞれで異なる固有の秘密情報を保持すると共に2数値を同じく保持し、それぞれが前記秘密情報と前記2数値を用いて一次元写像の演算を行って通知情報を生成するものであり、前記暗号側共通鍵生成部と前記復号側共通鍵生成部とは、通知情報を受け取ると、この通知情報と前記秘密情報を用いて一次元写像の演算により共通鍵を生成するものであり、前記一次元写像は、一変数多項式の一次元写像であること特徴とする。
【図面の簡単な説明】
【0018】
【
図1】Diffie-Hellman鍵共有方法のシーケンス図。
【
図2】本発明の第1の実施形態に係る暗号復号システムのブロック図。
【
図2A】本発明の第1の実施形態に係る暗号生成装置を実現するコンピュータシステムの構成図
【
図4】式(9)によるベルヌーイシフト写像のiを横軸とし、xi+1を縦軸とした時系列の図。
【
図6】式(10)の5つからなる式によるベルヌーイシフト写像のマップ。
【
図7】式(10)に初期値X0=1/11を与えて反復を行った値と式(9)の“g=5”を設定し、法として素数P=11を設定した値の遷移を示す図。
【
図8】整数演算化したベルヌーイシフト写像の式(11)と、合同算術の式(1)をC言語で記述したプログラムのソースコードを示す図。
【
図9】
図8のプログラムを実行した演算結果を示す図。
【
図10】ベルヌーイシフト写像によるDiffie-Hellman鍵共有について、具体的に数値を入れて計算した例を示す図。
【
図10A】暗号側共通鍵生成部102と復号側共通鍵生成部202とが共通鍵生成するまでフローチャート。
【
図11】円において、初期値θ0=π/11に設定して位相をπ/11ずつ変化させた場合の円弧上の各点位置を示す図。
【
図12】式(13)において、初期値θ0=π/11に設定して“2nθ0”を計算した結果を示す図。
【
図13A】「ガウスの消去法」を用いて4次の一変数多項式を求める例(前進消去)を示す図。
【
図13B】「ガウスの消去法」を用いて4次の一変数多項式を求める例(後退代入)を示す図。
【
図14】ガウスの消去法を用いて、Gを2から9まで振って各係数を求めた場合の、“sin2G2θ”と等価な2次以上の次数を持つ一変数多項式とそのマップを示す図。
【
図15】一変数多項式による鍵共有の計算方法のフローチャート。
【
図17】式(24)において“P=19”とし、“n=7”まで計算した“Xi”の値を示す図。
【
図18】本発明の第2の実施形態に係る暗号復号システムのブロック図。
【
図18A】本発明の第2の実施形態に係る暗号復号システムのセッション鍵生成を示すフローチャート。
【
図20】本発明の第2の実施形態の暗号生成部101と復号部201が、共通鍵CKとセッション鍵SKを使用して共通鍵暗号によるシステムを実現する場合の動作を示すフローチャート。
【
図21】
図20のフローチャートにて暗号化と復号に具体的な数値を入れた処理例を示す図。
【
図21A】第2の実施形態の暗号復号システムの各部の処理内容を記述したブロック図。
【
図22】本発明の第3の実施形態に係る暗号復号システムのブロック図。
【
図22A】第2の実施形態における更新鍵生成の処理を示すフローチャート。
【
図23】
図23の更新鍵生成の処理の要部を示すフローチャート。
【
図24】
図23に示した処理をC言語プログラムで記述したものを示す図。
【
図25A】具体的な計算値を用いて本発明の第2の実施形態に係る更新鍵の生成過程における傾き係数Gの第1の変動パターン例を示す図。
【
図25B】具体的な計算値を用いて第2の実施形態に係る更新鍵の生成過程における傾き係数Gの第2の変動パターン例を示す図。
【
図26】具体的な計算値を用いて第2の実施形態に係る更新鍵の生成過程を示す図。
【
図27】傾き係数Gを変動せず固定した場合の
図8(a)の処理Aプログラムを具体的な数値を用いて実行した例を示す図。
【
図28】鍵を出力して暗号化を行い復号する暗号復号システムの動作を示すフローチャート。
【
図29】
図28の処理を具体的な数値を用いて行った場合の処理を示す図。
【
図30】一次不定方程式の整数解を求める手順を一例の数値を入れて示す図。
【
図31】本発明の第4の実施形態に係る暗号復号システムのブロック図。
【
図31A】共通鍵より生成した一変数多項式(28)とそのマップ図。
【
図32】式(28)を用いて鍵を更新する処理を示すフローチャート。
【
図33】
図32のフローチャートにより式(29)にて鍵更新を行った計算の例を示す図。
【
図34】一変数多項式の生成について別の手法を示す図。
【発明を実施するための形態】
【0019】
以下添付図面を参照して、本発明の第1乃至第3の実施形態に係る暗号復号システム、暗号復号方法、暗号復号用プログラムを説明する。各図において同一の構成要素には、同一の符号を付して重複する説明を省略する。
図2は、暗号復号システムの第1の実施形態を示すブロック図である。第1の実施形態に係る暗号復号システムは、暗号生成装置100と復号装置200とを備えている。
【0020】
暗号生成装置100には、演算により暗号文を生成する暗号生成部101と、暗号側共通鍵生成部102が備えられている。復号装置200には、上記暗号生成装置100から暗号文を受けて該暗号文を復号し平文とする復号部201と、復号側共通鍵生成部202が備えられている。暗号側共通鍵生成部102と復号側共通鍵生成部202とは、一次元写像の演算によりそれぞれで生成した通知情報の交換を行って同一の共通鍵を生成する。
【0021】
図2Aは、本発明の第1の実施形態に係る暗号生成装置100を実現するコンピュータシステムの構成図である。
図2Aは、本発明の第1の実施形態に係る復号装置200を実現するコンピュータシステムの構成図でもある。本発明の実施形態に係る暗号生成装置100と復号装置200は、例えば
図2Aに示されるようなパーソナルコンピュータやワークステーション、その他のコンピュータシステムにより構成することができる。このコンピュータシステムは、CPU10が主メモリ11に記憶されている或いは主メモリ11に読み込んだプログラムやデータに基づき各部を制御し、必要な処理を実行することにより本実施形態や他の実施形態に係る暗号生成装置100や復号装置200として動作を行うものである。
【0022】
CPU10には、バス12を介して外部記憶インタフェース13、入力インタフェース14、表示インタフェース15、通信インタフェース16が接続されている。外部記憶インタフェース13には、状態変動検出用プログラム等のプログラムと必要なデータ等が記憶されている外部記憶装置23が接続されている。入力インタフェース14には、コマンドやデータを入力するための入力装置としてのキーボードなどの入力装置24とポインティングデバイスとしてのマウス22が接続されている。
【0023】
表示インタフェース15には、LEDやLCDなどの表示画面を有する表示装置25が接続されている。通信インタフェース16には、通知情報や暗号文を得るためのポート26-1、26-2、・・・、26-mが接続されている。本実施形態に係る暗号復号システムが、暗号生成装置100と復号装置200の2台が相互に通信をする場合には、ポート26-1、26-2、・・・、26-mを1つとすることができる。このコンピュータシステムには、他の構成が備えられていても良く、また、
図2Aの構成は一例に過ぎない。このコンピュータシステムによる構成は、この第1の実施形態に限らず、第2の実施形態以降の各実施形態やその変形例としても構成に採用される。
【0024】
一次元写像の一例としてベルヌーイシフト写像を挙げることができ、ベルヌーイシフト写像と先に説明した合同算術とは、同期することを突き止めた。
<ベルヌーイシフト写像について>
ベルヌーイシフト写像は、次の式(9)で定義される。
【数9】
【0025】
図3は、ベルヌーイシフト写像のマップである。
図4は、上記式(9)によるベルヌーイシフト写像のiを横軸とし、xi+1を縦軸とした時系列である。
図4には、“初期値x0=0.234”とし、“x0<0.5”のため“x1=2x0”の演算を行いx1=0.468が得られ、“x1<0.5”のため“x2=2x1”の演算を行い“x2=0.936”が得られ、以降“x3,x4,…”と開区間(0,1)を反復し遷移してゆく時系列が示されている。
【0026】
<ベルヌーイシフト写像と合同算術との同期について>
ベルヌーイシフト写像と合同算術との同期について説明する。
式(9)の初期値x0に、“1/11”を設定したときの反復したxiの値、合同算術の式(1)に“g=2”を設定し、法として素数P=11を設定し、左辺の指数rを0~11に振ったときの余りの値を
図5に示す。
式(1)について、指数rが大きくなるほど桁が莫大になるため合同算術では法(modulo)を取ることで、ある値Q同士を掛け算した結果の余りにもう一回ある値Qを掛け算して余りを出すと、元の掛け算(Q3)の余りに等しくなるといった性質があり、桁を抑えて演算できるため、このテクニックを使って計算している。
【0027】
図5は、ベルヌーイシフト写像と合同算術の時系列比較を示す図である。
図5(a)に示すベルヌーイシフト写像の計算結果Xiである分数における分子の数値と、
図5(b)の合同算術による余りの数を比較すると、同じになっており同期していることが判る。
これは割り切れない数について考察すると、仮分数(2i/11)が例えばi=6のとき、64/11=55/11+9/11=5+9/11となり、帯分数は11の倍数として5が括り出され、真分数(9/11)の分子の9は11の割り算の余りとしても示されるからである。
以上から
図5よりx10の時点で1/11とx0に戻りベルヌーイシフト写像は周期長10で繰り返されることが判る。
【0028】
次に、式(1)の生成元gが2以外の数値のベルヌーイシフト写像の式を考える。例としてg=5の場合を考え、これと同期するベルヌーイシフト写像は次の式(10)の5つからなる式になる。式(10)のマップを
図6に示す。
【数10】
【0029】
図7は、式(10)に初期値X0=1/11を与えて反復を行った値と式(1)の“g=5”を設定し、法として素数P=11を設定した値の遷移を示す図である。g=2の場合と同様に
図7を参照すると、
図7(a)に示される式(9)における反復のXiの分子と、
図7(b)に示す合同算術による余りの数を比較すると、同じ値になっており同期していることが判る。これも、分数の演算では真分数の分子が合同算術の余りを指しているからであり、傾き係数がどのような値であっても、真分数の分子と合同算術の余りが同じ値となる。
図7(a)では、X5=1/11となっており、初期値X0に戻るため周期長は5で繰り返されることが判る。
【0030】
上記を総合的に考察すると、ベルヌーイシフト写像の反復値の真分数の分子は合同算術の余りに相当し、合同算術の余りと同義であることが判る。以上から、生成元gのべき乗の法を取る合同算術は、ベルヌーイシフト写像に代替でき、合同算術のべき乗はベルヌーイシフト写像の反復回数に相当することが示された。
【0031】
<ベルヌーイシフト写像の整数演算化>
次に、ベルヌーイシフト写像の整数演算化を考えてみる。
ここまでベルヌーイシフト写像は開区間(0,1)を扱っていたが、整数演算が行えるよう区間を素数P倍して開区間(0,P)にすることで、べき乗の合同算術の余りに相当するXiを得ることができる。
傾き係数を“G”とし、“1”から開区間(0,P)に拡大し整数演算化したベルヌーイシフト写像は各傾き係数Gの一次式をまとめて、次の式(11)のように簡潔に表すものとする。なお、本明細書においては、「G」について、「傾き係数G」、「生成元G」ガウスの消去法の場合のように単に「G」などとして同じ符号を用いるが、方程式に用いる「x」のように、ある数値であることを意味しており、特別な数値という意味ではないので、「傾き係数G」、「生成元G」、ガウスの消去法の場合などにおいて、区別せずに「G」を用いる。
【数11】
【0032】
“Mk”の下付き添え字kは、式(11)の各一次式(一次式の数はG個)を選択する範囲毎の変数を示し、kは“0”(M0=0)から傾き係数G(Mk+1=G)未満までの自然数を表している。
例えば、P=1(拡大無し)とすれば、傾き係数G=2では式(9)が得られ、傾き係数G=5は式(10)が得られる。
【0033】
図8は、整数演算化したベルヌーイシフト写像の式(11)と、合同算術の式(1)をC言語で記述したプログラムのソースコードである。
図8(a)は、ベルヌーイシフト写像のものであり、
図8(b)は、合同算術のものである。
図9は、
図8のプログラムを実行した演算結果である。
図9(a)がベルヌーイシフト写像式(11)の傾き係数G=5、最大区間P=11、反復回数r=11に設定してX10まで反復を行ったXiの結果である。
図9(b)は、合同算術式(1)の生成元g=5、法P=11として左辺のべき乗を“0,1,2,…,10”(r=11に設定)と変更してそれぞれの5のべき乗を法11で割った結果の余りを示すものである。
図9(a)と
図9(b)の2つとも、ベルヌーイシフト写像の反復回数“i”とべき乗の値が対応して同じ解となっていることが確認できる。
【0034】
なお、
図8(a)のベルヌーイシフト写像式(11)のプログラムでは、各区間の境界“P×Mk/G”や“P×Mk+1/G”が割り切れるように、区間(0,P)をさらにG倍することで最大区間(0,G×P)とし各区間の境界を整数のみで扱えるようにしている。具体例では、区間の境界値は式(11)から“0/5,11/5,22/5,33/5,44/5,55/5”となるが、割り切れないため5倍して“0,11,22,33,44,55”の値を境界値として求めておき、メモリ(配列interval[G])に保存する。Xiの値に対応する区間の検索処理(
図8のプログラムでは降順に全件探索し見つかった時点で検索終了)により引き算する値“P×Mk”を選定している。
【0035】
このためプログラム中の演算結果をモニターに出力する“printf”文では、XiはGで割ってから出力し、関数の返り値もXiはGで割った値としている。
式(1)による合同算術の演算は、C言語で実装した
図8(b)に示すソースコードのように、法11の余りに対してg=5を掛け算して法11の余りを求め、余りにg=5を掛け算する繰り返しで余りの算術を行う手法を使っている。
【0036】
<ベルヌーイシフト写像によるDiffie-Hellman鍵共有>
図10は、ベルヌーイシフト写像によるDiffie-Hellman鍵共有について、具体的に数値を入れて計算した例である。既に、式(1)の合同算術と式(11)の整数演算化したベルヌーイシフト写像は、同等の数列となることを示した。式(11)による
図8(a)のベルヌーイシフト写像のプログラムにおける処理Aにより演算を行い、Diffie-Hellman鍵共有を行う。
図10に示す暗号側共通鍵生成部102と復号側共通鍵生成部202は、お互い事前に合意する式(11)の係数G、素数Pに、式(1)の生成元g=5と式(1)の法となる素数Pと同等の演算精度となる素数P=83を設定する。暗号側共通鍵生成部102では秘密情報である数Sa=8を設定し、復号側共通鍵生成部202では、秘密情報である数Sb=17を設定する。
【0037】
図10の左側が暗号側共通鍵生成部102の処理となり、暗号側共通鍵生成部102は式(11)に式(1)の生成元gに相当する傾き係数G=5と式(1)の法となる素数Pと同等の演算精度となる素数P=83とを設定する(S21)。暗号側共通鍵生成部102は暗号側共通鍵生成部102のみが知る秘密情報である数Sa=8を写像の反復回数rに設定し、初期値X0=1に設定して写像の反復を8回行った結果X8=27となっている(S22)。暗号側共通鍵生成部102が求めたX8=27を復号側共通鍵生成部202へ通知情報として送信する(S23)。
【0038】
一方、
図10の右側が復号側共通鍵生成部202の処理となり、復号側共通鍵生成部202は式(11)に式(1)の生成元gに相当する傾き係数G=5と演算精度となる素数P=83を設定する(S24)。復号側共通鍵生成部202は、復号側共通鍵生成部202のみが知る秘密情報である数Sb=17を写像の反復回数rに設定し、初期値X0=1に設定して写像の反復を17回行った結果“X17=76”を得ている(S25)。復号側共通鍵生成部202が求めた“X17=76”を暗号側共通鍵生成部102へ通知情報として送信する(S26)。
【0039】
次に、暗号側共通鍵生成部102と復号側共通鍵生成部202がお互いに送受信した通知情報から暗号側共通鍵生成部102と復号側共通鍵生成部202で共有する秘密情報を生成する以下の処理を実行する。
暗号側共通鍵生成部102は、復号側共通鍵生成部202から受信した“76”を式(11)に傾き係数G=76として設定する(S27)。演算精度となる素数P=83を設定して暗号側共通鍵生成部102は暗号側共通鍵生成部102のみが知る秘密情報である数Sa=8を写像の反復回数rに設定し、初期値X0=1に設定して写像の反復を行う(S27)。結果としてX8=36が得られる(S27A)。
【0040】
一方、復号側共通鍵生成部202は暗号側共通鍵生成部102から受信した“27”を式(4)に傾き係数G=27として設定する(S28)。演算精度となる素数P=83を設定して復号側共通鍵生成部202は復号側共通鍵生成部202のみが知る秘密情報Sb=17を写像の反復回数rに設定し、初期値X0=1に設定して写像の反復を行う(S28)。結果としてX17=36が得られる(S28A)。暗号側共通鍵生成部102と復号側共通鍵生成部202は、お互い共通の秘密情報“36”を直接相手に送信することなくこれを共有することができる。これを暗号側共通鍵生成部102と復号側共通鍵生成部202の共通鍵として共通鍵暗号方式で使用する。
図10Aは、以上の暗号側共通鍵生成部102と復号側共通鍵生成部202とが共通鍵生成するまでフローチャートである。第1行目のブロックでは、それぞれの秘密情報の生成と、合意した2つの数値(ここでは、GとP)の保持が行われている。第2行目のブロックでは、暗号側共通鍵生成部102と復号側共通鍵生成部202の夫々でベルヌーイシフト写像による通知情報の生成が行われ、この通知情報の交換が行われている。第3行目のブロックでは、交換した通知情報とそれぞれが秘密にしている秘密情報を用いてベルヌーイシフト写像による共通鍵の生成が行われる。
以上がDiffie-Hellman鍵共有方法をベルヌーイシフト写像により行った例であり、除算剰余の演算が引き算で済むようになり、演算コストの削減が期待できる。
以上がDiffie-Hellman鍵共有方法をベルヌーイシフト写像により行う場合には、ハードウエアにより構成することができ、ハードウエアの構成回路は、除算剰余の演算回路が引き算回路で済むことになり、ハードウエアの構成を簡素化し回路の簡素化を図ることが可能である。
【0041】
上記暗号側共通鍵生成部102と上記復号側共通鍵生成部202とは、それぞれで異なる固有の秘密情報を保持すると共に2数値(本実施形態では、傾き係数Gと素数P)を同じく保持し、それぞれが上記秘密情報と上記2数値を用いて一次元写像の演算を行って通知情報を生成する。
また、上記暗号側共通鍵生成部102と上記復号側共通鍵生成部202とは、通知情報を受け取ると、この通知情報と上記秘密情報を用いて一次元写像の演算により共通鍵を生成する。
【0042】
Diffie-Hellman鍵共有方法の安全性について、式(1)においてPが大きな素数のとき、「gとrとP」から余りyを求めることは簡単だが「gとyとP」からgを底としたyの対数rを求めることが非常に難しいとされ、これが離散対数問題と称されている。現在の所、離散対数問題を効率的に解く手法は見つかっておらず、安全性の根拠とされている。
現在使用されている素数Pのビット桁について、RFC3526(More Modular Exponential (MODP) Diffie-Hellman groups for Internet Key Exchange (IKE)、2003年5月)で公開されている生成元gと素数Pの組が存在しており、素数Pの桁は1536ビット(1536ビットMODPグループ)以上が用いられており、2048ビット以上を用いることが推奨されている。
【0043】
<一変数多項式の一次元写像による鍵共有方法>
上記実施形態では、共通鍵生成の一次元写像をベルヌーイシフト写像によって行うことを示したが、この一次元写像は、一変数多項式の一次元写像であっても可能である。
式(11)のベルヌーイシフト写像では“x”の項の、べき乗数が“1”となる一次式となっている。ロジスティック写像のように、2次以上の次数を持つ多項式を一次元写像とした鍵共有を行う例を新たに示す。
ロジスティック写像は、次の漸化式の式(12)になり、Xiのべき乗数が2次となる。
【数12】
特開2019-168963「乱数生成装置」にて示されるように、式(12)は以下の式(13)に変換できる。
【0044】
ロジスティック写像の式(12)の初期値X0を三角関数sin2θの場合として代入する。
【数13】
X1は
【数14】
となるため、
【数15】
より
【数16】
三角関数の加法定理より
【数17】
のため、最終的に
【数18】
が得られる。同様に求めたX1を式(12)に代入することでX2は
【数19】
が得られ、X3,X4,…と繰り返していくことで写像の回数を示す添え字を“n”とすると
【数20】
が導かれ、“n”回目の写像の値が位相 “2nθ” により一意にわかるロジスティック写像の式(13)に変形できる。
【0045】
式(13)の位相“2nθ”に着目する。
図11は、位相をπ/11ずつ変化させた場合の円弧上の各点位置を示す図であり、π/2を中心として左右に対称な位置の円弧上の点の値は同一の値をとる。ここで、例えば初期値θ0=π/11に設定して“2nθ0”を計算すると、
図12のように“n=10”のとき位相が元のθ0=π/11に戻ることが判る。これは初等整数論における次の式(14)により示されるフェルマーの小定理から、素数P=11、生成元G=2とする、べき乗“n=P-1”、つまりn=10で位相θがπ/11に戻る。この現象は、上記で合同算術とベルヌーイシフト写像が同期する機構を示したことからも理解できる。
【数21】
【0046】
この位相の周期性から式(12)と式(13)のロジスティック写像は、素数Pを初期値θ0=π/Pに設定して写像を“P-1”回行うと必ず“π/P”に戻ることが判り、生成元Gとして“2”の他の、任意の生成元Gを与えた場合も、写像を“P-1”回反復すると、“π/P”に戻ることが推定される。
【0047】
次に式(14)の生成元Gに任意の正の整数を与えた“Xn=sin2Gnθ”と等価になる式(12)のような変数“X”を一つだけ使用する一変数多項式を作ることを考える。
例としてG=4を与え、“Xn=sin24nθ”と同等となる一変数多項式を求める。ここで“n=1とした場合、
“X1=sin24θ”となる解X1を考える。式(5)のロジスティック写像の値域となる区間は[0,1]である。このため“sin24θ”が“0から1”の間つまり三角関数sinの位相4θが“0からπ/2”の間で解X1が“0”か“1”となる位相θを考えると、
(1) θ=0π/8のとき 4θ=0のため、X1=sin24θ=0
(2) θ=1π/8のとき 4θ=4π/8=π/2のため、X1=sin24θ=1
(3) θ=2π/8のとき 4θ=8π/8=πのため、X1=sin24θ=0
(4)θ=3π/8のとき 4θ=12π/8=3π/2のため、X1=sin24θ=1
(5)θ=4π/8のとき 4θ=16π/8=2πのため、X1=sin24θ=0
になる極大値が2つと極小値が1つある多項式となることが判り、“Xn=sin24nθ”と等価な一変数多項式は以下の4次の式(15)のように構成されることが予想できる。
【数22】
【0048】
次に以上の4次の式から係数“a,b,c,d,e”を求めることを考える。
上記(1)の情報から“x=0”のときは“f(0)=0”となるため、式(15)の係数eは“e=0”になることが判る。
残りの係数“a,b,c,d”は上記“(2)、(3)、(4)、(5)”の情報から4次の次数を持つ次の(16)に示す連立方程式を立てることで求められる。
【数23】
【0049】
上記式(16)の連立方程式の項“x0,x1,x2,x3”に対しては各(2)、(3)、(4)、(5)からsin2θの値を次のように代入することで、“a,b,c,d”からなる連立方程式が4つ得られる。
【数24】
得られた4つの連立方程式から係数“a,b,c,d”を導出する手法を紹介する。
式(16)は行列を使って表すと次の行列式(18)になる。
【数25】
【0050】
ここで式(18)の“4×4”の変数xの行列部分を“X”、係数(a,b,c,d)を“A”、(0,1,0,1)を“E”とおくと、
【数26】
となり逆行列X-1を用意して式(19)の両辺にかけると、
【数27】
となり、逆行列X-1より係数Aを求めることができる。
図13Aと
図13Bは、「ガウスの消去法」を用いて4次の一変数多項式を求める例を示す図である。行列を用いた連立方程式の解法として「クラメルの公式」や「LU分解」が知られているが、ここでは
図13Aと
図13Bに示すように、「ガウスの消去法」を用いて4次の一変数多項式を求める。式(18)の変数“x0,x1,x2,x3”に上記の(数24)を代入したものが
図13Aの最初の行列式となる。この4×4の行列式の位置を指定できるよう各行にC0~C3を、各列にR0~R3を振ってある。
【0051】
ガウスの消去法では「前進消去」と「後退代入」の2つの処理からなり、「(1)前進消去」では
図13Aの最初の行列に示すようにC0R0~C3R3上の左斜めの点線で囲った対角線上を“1”にして、その対角線左下の3角の点線部分で囲われた箇所を“0”に変換する。
計算過程の詳細は
図13Aに記述されているが、行C単位に演算を行う。最初はC0R0を1にするため、行C0全体をC0R0で割り算する処理から開始し、得られた行C0=1に対し列R0の行C1,C2,C3の値を掛け算してそれぞれ得られる行C0で引き算を行うことで列R0の行C1,C2,C3の値を0にする。以降は同様に対角線上の値を1にしてゆき、各列Rを0にする計算を行うことで、最終的に
図13Aの式Aが得られる。
【0052】
式Aから
図13Bの「(2)後退代入」を実行することで最終的に係数(a,b,c,d)の値を導出する。
図13Aの演算過程は平方根の記号√(ルート)を使い、見易くするため有理化して√の項を分母から取り除いたものである。このような√や変数xなどの記号(Symbol)を用いた代数計算が行えるプログラミング言語として、Pythonの“SymPy”というライブラリが知られている。本実施形態は三角関数を使用し平方根を用いるため無理数を扱う演算になる。計算機実装では演算精度保証を考慮する必要があるが、このような根号記号√を用いた演算を行うライブラリを活用することで無限演算精度実装が行えるようになり計算誤差の影響を取り除くことができる。
以上、生成元G=4のとき4次の次数を持つ一変数多項式を求める例を示した。
【0053】
図14は、
図13A、
図13Bに示したガウスの消去法を用いて、Gを2から9まで振って各係数を求めた場合の、“sin2G2θ”と等価な2次以上の次数を持つ一変数多項式とそのマップ示す。
図14に示すGは一変数多項式の次数となっており、各Gの関数f(x)として次数Gを“fG(x)”のように上付きにGとあらわし区別している。多項式の係数を求めるとき式(18)はG=4であったことから行と列の成分数はG×Gになる。行列式(18)の右の解は
図14のマップから横軸方向が“x=sin2G2θ”とした場合、sin2G2θの区間は[0,1]になるためこの区間内において解fG(x)が0か1を採る“x=sin2G2θ”を考えると
図14の4次の多項式を求めた例で示したように
【数28】
の位相θが0からπ/2の間(三角関数sinは0から1の間)を取るとき、必ず解“fG(x)”が0か1になる個数は“G+1”個となることが推定できる。
【0054】
ここで、式(20)において、“n=0”のときは解“f(x)=f(0)=0”となるため、式(15)で“e=0”になることを示したように、“x”が0次の項(定数項)は必ず“0”となるため、式(20)の“k=0”の場合を除いて、
【数29】
となり、行列式(18)の右の解は行G個とすることができる。
例えばG=5の場合は式(17)を参考にして“x”は、
【数30】
の5つを割り当てて5×5の行列を構成し、
図13A、
図13Bのようにガウスの消去法で各項の係数を求め、
図14の“f5(x)”となる5次の多項式を得ることができる。
【0055】
また、ガウスの消去法を使わなくとも関数を合成することで各Gの一変数多項式を作ることもできる。
例えば
図14のG=4の“f4(x)”を作成する場合はG=2のときのf2(x)をf2(x)に代入して“f4(x)=f2(f2(x))”を得る。
図14の例ではG=2のとき
【数31】
のため“x”へ“f2(x)”を代入すると、
【数32】
から
図14のG=4の場合の式が得られる。
【0056】
他の例として、次数Gが3と4からなる合成関数を作る場合は12=3×4のため、12の次数を持つ一変数多項式を作ることができる。sin2Gnθと等価な、次数lと次数mから次数G=l×mを持つ合成写像を作成するとき、次の式(22)の関係が成り立つ。
【数33】
ただし次数Gが“2,3,5,7,11,13、…”となる素因数分解ができない素数の場合は、式(22)のように関数を合成して作ることができないため、
図13のようにガウスの消去法を利用して多項式を求める。
なお、合成関数の生成はインタプリタ型言語Pythonの代数計算ライブラリ“SymPy”を利用し代数方程式を作ることができる。
【0057】
次に、
図14に示した一変数多項式を用いて鍵共有を行う実施形態を説明する。
図15は、鍵共有の計算方法のフローチャートである。
図16は、
図15に示したフローチャートを実行して具体的な数値の動きを示した図である。
図15と
図16では、暗号側共通鍵生成部102が行う処理と復号側共通鍵生成部202が行う処理に分かれている。復号側共通鍵生成部202では交換する情報を生成して暗号側共通鍵生成部102は復号側共通鍵生成部202へ送信し、復号側共通鍵生成部202は暗号側共通鍵生成部102へ送信する。受信処理では、お互い相手が送信した情報を受信してその情報を設定して写像を行い共有する秘密情報を得る。
【0058】
図15のフローチャートについて
図16の具体的な数値を参照して説明する。
図16では表計算ソフトのエクセル(登録商標)を使用し計算を行うことが可能である。
暗号側共通鍵生成部102と復号側共通鍵生成部202は、事前に素数P=19、生成元G=2をお互いに合意する(S30A、S30B)。この素数P=19と、生成元G=2は、通知情報であり、暗号側共通鍵生成部102から復号側共通鍵生成部202へ送って、双方が保持することができる。暗号側共通鍵生成部102のみが知る秘密情報である数Saが生成され(S31A)、復号側共通鍵生成部202のみが知る秘密情報Sbが生成される(S31B)。生成元Gから多項式を生成する(S32A、S32B)。G=2の場合、多項式は以下のロジスティック写像の多項式である。暗号側共通鍵生成部102では、秘密情報である数Saを反復回数rに設定し、“sin2(π/P)”を初期値“x0”に設定する(S33A)。復号側共通鍵生成部202では、秘密情報Sbを反復回数rに設定し、“sin2(π/P)”を初期値“x0”に設定する(S33B)。
従来のDiffie-Hellman鍵共有を行った計算例が
図16における表の列“DH”になり、列“i”の0以降から列“i”の値を参照して法をとる“2i mod 19”の演算を行うため、セルに数式“=MOD(POWER(2,i),19)”を代入して計算した結果となる。
【0059】
表の列“Xi”は、
図14のG=2に該当する式(12)のロジスティック写像の多項式
【数34】
に初期値“x0=sin2(π/19)”を浮動点小数で与え写像の反復毎の計算結果となる。
送信前の処理では暗号側共通鍵生成部102は、暗号側共通鍵生成部102のみが知る秘密情報である数Saとして設定した反復回数7回、復号側共通鍵生成部202は、復号側共通鍵生成部202のみが知る秘密情報Sbとして設定した反復回数4回を設定し、写像の反復をそれぞれ行っている(S34A、S34B)。
列“i”が“0”のときに“X0=sin2(π/19)”の初期値を与える計算を行い列“Xi”セルに数式“=SIN(PI()/19)*SIN(PI()/19)”を代入し、列“i”が1以降のとき列“Xi”セルに一つ上のセルの数値を参照するようにして数式“=4*Xi-1*(1-Xi-1)”を代入し、“Xi-1”を参照して計算を行っている。これらの計算結果“Xi”は、小数点以下9まで表示させており結果として暗号側共通鍵生成部102は“0.541289673”、復号側共通鍵生成部202は“0.226525921”を計算結果として得ておりこれを相手に送信する(S34A、S34B)。
列“ArcSIN”は列“Xi”の数値を参照して、“sin2G(π/19)”となるGの値を次の式(23)の逆三角関数arcsin(sin-1とも表記)を用いて計算した結果となる。
【数35】
【0060】
列“ArcSIN”のセルに数式“=19*ASIN(SQRT(Xi))/PI()”を代入し、“Xi”を参照してGを求めている。
Gについて列“DH”(Diffie-Hellman鍵共有)と比較して説明する。
位相の初期値を“π/19”とし、次の式(24)の“n”を0,1,2,3,…と振った値と、多項式で行った“Xi”の結果は上記の説明からも区間[0,1]で同じ値をとる。
【数36】
【0061】
図17は、式(24)において“P=19”とし、“n=7”まで計算した“Xi”の値を示す図である。この
図17における位相の分子の値と、
図16の暗号側共通鍵生成部102の送信処理の列“DH”の値は同じに数値になっている。また式(24)で行った計算結果と
図16の列“Xi”の多項式で写像の反復を行う計算結果が等しいことを確認できる。
図16の列“Xi”の結果は多項式で演算を行っているが、これと解が同等な式(24)は位相の上では、Diffie-Hellman鍵共有の合同算術(またはベルヌーイシフト写像)の演算と等価性を持っている。
【0062】
ところで、
図16の列“ArcSIN”の数Gと列“DH”の数を見比べると、列“ArcSIN”は9以下の数値からなっており、“i=4”のとき列“DH”は16であるが、列“ArcSIN”では3になっている。
これについて三角関数sinは補角により
sin(16π/19)=sin(π-16π/19)=sin(3π/19)
となり、位相が“π/2”以上の場合は同じ値を取るためである。
このため、合同算術では式(14)のフェルマーの小定理により周期は“P-1”となるが、多項式を用いたとき写像が元に戻る周期は“(P-1)/2”になることが判り、“P=19”のため、周期9になる。
【0063】
多項式による鍵共有のGは、Diffie-Hellman鍵共有の法となる素数Pに対し“(P-1)/2”以下の値をとる。このため本実施形態では、使用するGは2~9の間であるため
図14ではG=2~9を示している。
また、列“ArcSIN”をみると“(P-1)/2”より大きい10以上の値は列“DH”の値に対し“19-G”の関係が成り立っている。
【0064】
以上、
図16の送信処理では、列“DH”(Diffie-Hellman鍵共有)は計算結果として暗号側共通鍵生成部102は“14”を、復号側共通鍵生成部202は“16”を相手に送信する。本実施形態の多項式による鍵共有では列“Xi”(多項式)の計算結果として暗号側共通鍵生成部102は“0.541289673”を、復号側共通鍵生成部202は“0.226525921”を相手に送信する(S34A、S34B)。
【0065】
次に、
図15のフローチャートを踏まえ、
図16の受信処理について説明する。
列“DH”はDiffie-Hellman鍵共有の計算になり、暗号側共通鍵生成部102と復号側共通鍵生成部202は受信した値を生成元Gとして素数Pと自身の秘密情報を設定して、合同算術の演算を実行する。
図16の例では暗号側共通鍵生成部102は受信した値からG=14を、復号側共通鍵生成部202は受信した値からG=16を設定し各々が秘密情報とした設定した値として暗号側共通鍵生成部102は7を、復号側共通鍵生成部202は4をべき乗数“i”に設定し、列“i”の0以降から列“i”の値を参照して“2i mod 19”を行い、セルに数式“=MOD(POWER(2,i),19)”を代入して計算し、最終的に共有する秘密情報“17”を得ている。
本実施形態による一変数多項式の一次元写像による鍵共有は、列“Xi”になり暗号側共通鍵生成部102の処理では復号側共通鍵生成部202から“0.226525921”を受信し(S35A)、受信した“0.226525921”より、式(23)により生成元にあたるG=3を算出する(S36A)。
【0066】
次に、
図14で示すG=3の多項式を生成して(S37A)、列“i”が0のときに“X0=sin2(π/19)”の初期値を与える計算を行うため、列“Xi”セルに数式“=SIN(PI()/19)*SIN(PI()/19)”を代入し、列“i”が1以降は列“Xi”セルに一つ上のセルの数値を参照するようにG=3の多項式の因数分解を行った数式“=Xi-1*(4*Xi-1-3)*(4*Xi-1-3)”を代入し、“Xi-1”を参照して計算を行っている(S38A、S39A)。
同様に、復号側共通鍵生成部202の処理では、暗号側共通鍵生成部102から“0.541289673”を受信し(S35B)、受信した“0.541289673”より式(23)により生成元にあたるG=5を算出する(S36B)。
次に、
図14で示すG=5の多項式を生成して(S37B)、列“i”が0のときに“X0=sin2(π/19)”の初期値を与える計算を行うため“Xi”セルに数式“=SIN(PI()/19)*SIN(PI()/19)”を代入し列“i”が1以降は列“Xi”セルに一つ上のセルの数値を参照するようにG=5の多項式の因数分解を行った数式“=Xi-1*(16*Xi-1*Xi-1-20*Xi-1+5)*(16*Xi-1*Xi-1-20*Xi-1+5)”を代入し“Xi-1”を参照して計算を行っている(S38B、S39B)。
【0067】
その結果、暗号側共通鍵生成部102と復号側共通鍵生成部202の演算結果は“0.105429745”と同じ値となり、共有する秘密情報として用いることができる。
また、
図15の受信側のi=1における“列Xi”の値は受信した値となっていることに着目すると、計算精度を考慮した上で受信した値をそのまま初期値X0として設定し、暗号側共通鍵生成部102と復号側共通鍵生成部202が自身で設定した秘密情報からマイナス1減算した反復回数(暗号側共通鍵生成部102は6、復号側共通鍵生成部202は3)を設定して写像の反復を行うことで共有する秘密情報を生成する方法が考えられる。
以上、一変数多項式の一次元写像を用いた鍵共有方法の実施形態を示した。
【0068】
図8(a)のベルヌーイシフト写像のプログラムでは、境界となる値を予めメモリに格納しておきIF分岐を使用して該当区間を検索する処理があり、生成元Gが大きいほどメモリ空間が多く必要となり検索処理のコストが大きくなるが、本実施形態により境界値をメモリへ格納して境界値を検索する処理が不要となり、多項式にしたことで数の分割処理を行わずに切れ目なく演算が行えるようになる。
演算コスト面で次のホーナー法を利用してべき乗の演算を行わないようにする手法がある。ホーナー法は最も少ない加算と乗算の演算回数でn次の多項式の演算を行う手法で、例えば
図14のG=4の式の場合では、
【数37】
とすることで、べき乗の項をなくすことができる。
また、インタプリタ型言語Pythonの代数計算ライブラリ“SymPy”で提供される関数“factor”を用い、多項式を因数分解して計算式とすることでも演算コストの削減が期待できる。
【0069】
安全性の観点から、通信する度に違う暗号文を生成したい場合、お互い共有する秘密情報を元に乱数と合成して一時鍵を生成して通信の度に使い捨ての鍵を生成し暗号化を行うシーンがある。この使い捨ての鍵を、以降はセッション鍵SKと呼ぶことにする。この場合、秘密情報に乱数を足し算するだけなど実装の仕方によりセッション鍵SKの強度が弱くなる懸念がある。例えば、セッション鍵SKを使った暗号アルゴリズムがセッション鍵SKと平文との排他的論理和をとる以下の式を採用する場合を仮定する。
【数38】
上記式である場合、平文と暗号文のペアを入手し、鍵を推定する既知平文攻撃では平文と暗号文の排他的論理和である以下の式によりセッション鍵SKが判り、第三者に既知となる乱数を引き算すれば元となる秘密情報がすぐに判ってしまう。
【数39】
【0070】
そこで、第2の実施形態では、更にセッション鍵生成部を備える。
図18は、第2の実施形態のブロックである。暗号生成装置100Aには暗号側セッション鍵生成部103が備えられ、復号装置200Aには復号側セッション鍵生成部203が備えられている。暗号側セッション鍵生成部103は上記暗号側共通鍵生成部102により生成された共通鍵に基づき上記一次元写像の演算を行ってセッション鍵SKを生成する。復号側セッション鍵生成部203は、上記復号側共通鍵生成部202により生成された共通鍵に基づき上記一次元写像の演算を行ってセッション鍵SKを生成する。この図の暗号生成部101は、上記共通鍵と上記セッション鍵SKとを用いて暗号文を生成し、復号部201は、前記共通鍵と前記セッション鍵SKとを用いた復号により平文を生成する。暗号生成装置100Aには、乱数生成部104が備えられている。
【0071】
本実施形態では、一次元写像にて写像の反復回数を秘密鍵として割り当てることで離散対数問題に基づく安全性を確保してセッション鍵SKの生成を行う。
図18Aは、本実施形態のセッション鍵生成を示すフローチャートである。
図18Aに示すように、共通鍵CKを入手し(S41A、S41B)暗号生成装置100Aの乱数生成部104が乱数RNDを生成し復号装置200Aに送信する(S42A、S42B)。この乱数RNDは一次元写像の初期値X0に設定する。
予め暗号生成装置100Aと復号装置200Aが共有している秘密情報として共通鍵CK(Common Key)と乱数RNDを合成して傾き係数Gと演算精度の素数Pを決定し、共通鍵CKを写像の反復回数に設定する(S45A、S45B)。
図18Aに示すように、傾き係数Gは乱数RNDを共通鍵CKで割った余りを採用する(余りが“0”か“1”になるときは、最小値のGは2以上になるように足し算するなど傾き係数Gは0か1をとらないようにする)(S43A、S43B)。
素数Pは乱数RNDと共通鍵CKを掛け算して求めた値以下の一番近い素数を採用する(S44A、S44B)。
これらを式(11)で示される
図8(a)の処理Aの一次元写像の各パラメータに設定し、写像の反復を共通鍵CK回行い、値XCKを得る(S46A、S46B)。得られた値XCKから所定の鍵長Mで割った余りを求めてセッション鍵SKを得る(S47A、S47B)。
【0072】
図18Aのフローチャートを実行した具体的な数値を
図19に示す。暗号生成装置100Aと復号装置200Aは、
図10で得られた数36を共有する共通鍵CKとして設定する。暗号生成装置100Aの乱数生成部104は乱数として数141を生成し暗号生成装置100Aと復号装置200Aに送信する。
以降、暗号生成装置100Aと復号装置200Aは式(11)の傾き係数Gと演算精度の素数P、セッション鍵SK生成を同じ演算を行って決定する。
傾き係数Gは、乱数141を共通鍵36で割った余り21を設定し、初期値X0は、乱数141を設定する。
演算精度の素数Pは、乱数141と共通鍵36を掛け算した結果8460以下の一番近い素数8447を採用する。
以上求めた数値を式(11)の処理Aに設定して、写像の反復を秘密情報の回数分行って値を出し、数3062が得られる。本実施形態では、プロトコルとして鍵長が8ビットとして、8ビットの最大256で数3062を割った余りを求めることでセッション鍵SK(Session Key)として数“246”を得る。
なお、この例では式(11)のベルヌーイシフト写像を用いたが、ロジスティック写像等、
図14に示すような一方向性をもつ他の一次元写像も利用できることが考えられる。
【0073】
以上においては、暗号に使用する共通鍵(セッション鍵を含む)の生成方法を示した。例えば、一次元写像の反復回数を秘密情報とすることで離散対数問題を安全性根拠とする共通鍵暗号方法が考えられる。
図20は、
図18に示した暗号生成部101と復号部201が、共通鍵CKとセッション鍵SKを使用して共通鍵暗号によるシステムを実現する場合の動作を示すフローチャートである。
暗号生成部101が平文を暗号化して復号部201に送信するものとする。暗号生成部101と復号部201は同じセッション鍵SK(Session Key)と共通鍵CK(Common Key)をあらかじめ共有している。それらを用いて式(11)のパラメータの傾き係数Gと演算精度の素数P、写像の反復回数rを決定する。
【0074】
写像の反復回数rはセッション鍵SKを設定し(S51A、S51B)、傾き係数Gはセッション鍵SKを共通鍵CKで割り算した余りを設定する。余りが0か1になるときは、最小値のGは2以上になるように足し算するなど傾き係数Gは、0か1を採らないようにする。演算精度となる素数Pは、セッション鍵SKと共通鍵CK掛け算して求めた値以下の一番近い素数を採用する(S52A、S52B)。
以上のパラメータを式(11)に設定し、平文は初期値X0として設定し写像の反復をSK回した結果“XSK”を、暗号生成部101は暗号文として復号部201へ送信する(S53A~S55A)。
【0075】
次に、復号部201は受信した暗号文を復号する。式(14)のフェルマーの小定理を使うため、復号の原理について説明する。Pを素数とし、GをPの倍数でない整数(GとPは互いに素[最大公約数が1]、つまりPが素数であればよい)とするときに、合同算術では次のフェルマーの小定理
【数40】
が成り立ち、“G”を“P-1”乗して、”P”で割り算した余りは“1”になる。
上記で説明したように合同算術の余りと整数演算化したベルヌーイシフト写像の式(11)は同じ値を取得することができる。つまり、演算精度をPとする式(11)のベルヌーイシフト写像の反復を“P-1”回行うことで、Xi値が元に戻る周期を持っていることが判る。この機構から暗号生成部101は既にSK回の写像の反復を行っているため、復号部201は受信した暗号文を初期値X0に設定して残り回数の“P-1-SK”回の写像の反復を行うことで復号部201は暗号文を平文に戻す復号が行える(S53B~S55B)。
この暗号方法では秘密情報を写像の反復回数とするだけでなく、傾き係数Gと演算精度Pも秘密情報から生成するため第三者にとって追跡の手掛かりが小さくなるため安全性を高める効果を得ることができる。
【0076】
図21は、
図20のフローチャートにて暗号化と復号に具体的な数値を入れた処理例を示す図である。暗号化対象とする平文は例として文字“word”の4文字とする。アスキーコード8ビットでは、10進数とカッコ内を16進数で表すと各文字は「w=119(77h),o=111(6fh),r=114(72h),d=100(64h)」となる。
暗号化は8ビットずつのブロック単位で行い、一文字ずつ暗号化を行う。
以下、
図21のフローチャートに沿って動作説明を行う。暗号生成装置100Aと復号装置200Aは、
図10で生成した共通鍵CK=36、
図19で生成したセッション鍵SK=246を共有しており(B11)、これらを用いて以降において傾き係数Gと素数Pを求める。
傾き係数Gはセッション鍵SK=246を共通鍵CK=36で割った余り30を与える。素数Pは共通鍵CK=36とセッション鍵SK=246を掛けた値8856以下に一番近い8849とする(B12)。
【0077】
上記から、反復回数r、演算精度P、傾き係数G、初期値X0を得て式(11)に、これらの値を設定し、暗号化と復号を行う(B13)。暗号生成部101は最初の文字“w”を式(11)の初期値X0=119に設定して、セッション鍵SKの数246回の写像の反復を行って暗号化を行った結果、暗号文として数997が得られている(D11)。暗号生成部101は復号部201へ暗号文”997”を送信する。復号部201は受信した暗号文を初期値X0に設定し、“P-1-SK=8849-1-246=8602”となるため、写像の反復を8602回行うことで“X8602=119”に復号されていることが確認できる(M11)。他の暗号化した文字についても復号されていることが確認できる(D12~D14、M12~M14)。
なお、
図21では暗号化と復号の写像を反復した値Xiは最初の3回と最後の3回の値Xiを表示している。
【0078】
なお、法となる素数の桁数で暗号文の大きさが決まってしまうため、コンピュータ実装では
図21の例ではバイト単位で扱うと、平文8ビットが暗号文16ビットに拡張され、暗号文は平文の2倍の大きさとして扱うこととなる。このため実用上、素数は平文の大きさの単位以上になるため、プロトコルで素数の最大桁を制限するなど平文と暗号文のブロック長を調整する。
【0079】
また、この例では同じ平文だと同じ暗号文が出力されるため、ブロックごとに傾き係数Gをプラス1ずつインクリメントしたり、もしくは平文の初期値X0にプラス1ずつインクリメントして復号後に同じ値で引き算を行ったりすることができる。これによって、ブロック毎に同じ平文でも異なる暗号文を出力する手法が実現される。また、暗号文の送信者と受信者で共通鍵から同じ乱数を発生してブロック毎に傾き係数や平文に乱数をバイアスする(足し算や引き算、排他的論理和をとる)構成を採用しても良い。
【0080】
安全面について、この実施形態では8ビットのブロック単位に分けたが、暗号化する平文の大きさの単位が大きいほど演算コストは大きくなるが安全性は高くなる。このため、ブロックサイズはより大きくとることが望ましい。
【0081】
図21Aは、
図18に示した暗号復号システムの各部の処理内容を記述したブロック図である。この暗号復号システムでは、暗号生成装置100Aの暗号側共通鍵生成部102と、復号装置200Aの復号側共通鍵生成部202により暗号生成装置100Aと復号装置200Aで同一の共通鍵が生成され、共有される(「共通鍵共有」)。更に、暗号生成装置100Aの暗号側セッション鍵生成部103と、復号装置200Aの復号側セッション鍵生成部203により暗号生成装置100Aと復号装置200Aで同一のセッション鍵SKが生成され、共有される(「共通鍵生成」)。上記共通鍵CKとセッション鍵SKにより、暗号生成装置100Aの暗号生成部101で暗号文の生成が行われ(「暗号化処理」)、上記共通鍵CKとセッション鍵SKにより、復号装置200Aの復号部201で暗号文を平文へ復号する処理(「復号処理」)が行われる。このシステムは、離散対数問題を安全性根拠とする共通鍵暗号方法を採用しており、鍵の管理を不要とすることができ、また、演算負荷と演算コストの低減を図ることができる。
【0082】
Diffie-Hellman鍵共有システムは、お互い交換する情報から共有する秘密情報を生成するシステムである。暗号生成装置100(100A(以下、省略))と復号装置200(200A(以下、省略))が同じ初期値を設定して任意の一方向性関数を用意し最終的な計算ステップ数が合えば同じ解が得られることに着目すると、各々の計算ステップ数を秘密情報として共有する秘密情報を生成する仕組みを考えることができる。
例えば、暗号生成装置100が秘密情報として5を選び、一方向関数を5ステップ分の計算を実行してその結果の数値NAを復号装置200に渡し、一方、復号装置200が秘密情報として9を選び、一方向関数を9ステップの計算を実行してその結果の数値NBを暗号生成装置100に渡すものとする。
NBを受け取った暗号生成装置100は暗号生成装置100のみが知る秘密情報5により5ステップ分の計算を実行することで、復号装置200が実行した9ステップ分に5ステップを追加した合計14ステップを行った数値結果を得る。一方、NAを受け取った復号装置200は復号装置200のみが知る秘密情報9により9ステップ分の計算を実行することで、暗号生成装置100が実行した5ステップ分に9ステップを追加した合計14ステップを行った数値結果を得る。以上から暗号生成装置100と復号装置200が計算する最終的な計算ステップ数が同じとなり、暗号生成装置100と復号装置200は同じ値を取得できる。
以上の論理を考慮し、以下に示す実施形態では初期値はお互い共有する共通鍵を設定することで、共通鍵を更新する暗号復号システム、暗号復号方法、暗号復号用プログラムを開示する。
【0083】
図22は、第3の実施形態に係る暗号復号システムのブロック図である。第3の実施形態に係る暗号復号システムは、
図2に示した暗号復号システムの構成において、暗号生成装置100Bに第1の暗号側更新鍵生成部105が備えられ、復号装置200Bに第1の復号側更新鍵生成部205が備えられている。第1の暗号側更新鍵生成部105は、暗号側共通鍵生成部102から共通鍵を受け取り、この共通鍵によりベルヌーイシフト写像を行い、暗号側交換情報を生成する。第1の復号側更新鍵生成部205は、復号側共通鍵生成部202から共通鍵を受け取り、この共通鍵によりベルヌーイシフト写像を行い、復号側交換情報を生成する。
【0084】
更に、第1の暗号側更新鍵生成部105は、復号側交換情報を受け取ってこの復号側交換情報を用いてベルヌーイシフト写像を行い、更新鍵を生成する。また、第1の復号側更新鍵生成部205は、暗号側交換情報を受け取ってこの暗号側交換情報を用いてベルヌーイシフト写像を行い、更新鍵を生成する。
【0085】
上記第3の実施形態の具体例として、一方向性関数は傾き係数を変動するベルヌーシフト写像を用意し、このベルヌーシフト写像を用いて更新鍵生成を行う。
図22Aは、更新鍵生成の処理を示すフローチャートであり、
図23は
図22Aの要部を示すフローチャートである。また、
図24は、上記
図23に示した処理をC言語プログラムで記述したものである。また、
図25A、
図25Bと
図26は、具体的な計算値を用いて上記更新鍵の生成過程を示す図である。
【0086】
本実施形態においては、始めに
図22Aのフローチャートに示すように共通鍵CKから傾き係数を変動するパターンを生成する(S60A、S60B)。具体的には、暗号生成装置100Bと復号装置200Bはお互い共有する共通鍵CKの値を2乗した値より小さく一番近い素数Pを算出する(S61A、S61B)。次に、傾き係数Gは
図22Aのフローチャートに示される次の数式によって決定する。
【数41】
共通鍵CKの値を2乗してGmaxの割り算の剰余にGminを足した数を傾き係数Gとする(S62A、S62B)。
Gmaxは予めプロトコルで決めておき、Gminは“CK×CK mod Gmax”の剰余がゼロになった場合に、最小の傾き係数Gは2以上にするため“Gmin=2”を入れておく。次に、求めた傾き係数Gと素数Pより
【数42】
を実行してX0を求める(S63A、S63B)。
【0087】
暗号生成装置100Bは乱数Saを発生させて(S64A)、
図22Aの傾き変動するベルヌーイシフト写像の各初期パラメータ
Sa(乱数)⇒反復回数r、素数P⇒演算精度P、G⇒傾き係数G、X0⇒初期値X0
を設定する(S65A)。
同様に、復号装置200Bは乱数Sbを発生させて(S64B)、各初期パラメータSb(乱数)⇒反復回数r、素数P⇒演算精度P、G⇒傾き係数G、X0⇒初期値X0
を設定する(S65B)。
【0088】
次に、
図23に示される傾き係数Gの変動パターンを決定する(SAF23)。
変数yを用意し、演算精度Pに傾き係数Gを割り算した余りの値“y=P mod G”とする。
次の合同算術式より法を素数PとしてG回繰り返しyを更新し、yから傾き係数の最大をGとして、Gに対して20%をとった値をdG[i]としてG個分格納する。
【数43】
【0089】
次に、具体的な計算値を、
図26の最上枠の数値を参照して説明する。
図10で得られた共通鍵36を利用し共通鍵を2乗した値は、“36×36=1296”となるため、それ以下の一番近い素数を探索すると素数P=1291となる。共通鍵の値が小さすぎる場合は、例えば素数は最低1000以上というルールを設け共通鍵の値の累乗を続けてもよい。
次に最大傾き係数Gは本実施形態のプロトコルでは99まで採れるとし、Gは変動する値になるため、最低10にすることでGは8、9、10の三種類が採れるようにする。このため、“Gmax=90”、“Gmin=10”として、“46=(1296 mod 90)+10”より、傾き係数G=46をとる。初期値X0はX0=P mod Gより“3=1291 mod 46”となり“X0=3”を得る。
以上のように、「傾き係数G、素数P、反復回数r、初期値X0」が決定され、
図22のSAF23により示される
図23の初期処理(S71)における設定がなされる。
【0090】
図23は、傾き係数を変動するベルヌーシフト写像の反復演算を示すフローチャートであり、その具体的なC言語プログラムが
図24になる。上記のようにステップS71において「傾き係数G、素数P、反復回数r、初期値X0」が決定されて、続いて係数Gの変動パターンを生成する。変数yを用意し、入力された初期値X0=3と傾き係数G=46をかけた値“y=138”とする(S72)。
次に、yから傾き係数Gの変動パターンを決める。yは“y=(G×y) mod P”によりG回繰り返してyの値を更新し、“dG[i]=y mod (G×2/10)”により入力されたGは最大の傾き係数となり、本実施形態では46のため、その20%分の値0~8の46個分をdG[i]に格納する(S73、S74)。
【0091】
以上で、傾き係数Gが変動するパターンが決まり、傾き係数Gを変動しながらベルヌーイシフト写像の反復演算を行う。傾き係数Gの変動は
図23のフローチャートにも示すように
【数44】
により格納しておいたdG[i]を引き算した値が各区間“interval[i]”により選択される(S75、S76)。
例えば、傾き係数Gが最大100のときは、変動する傾き係数Gは80~100の間の値を採る。
【0092】
図23に示すベルヌーイシフト写像の演算では、入力された傾き係数GからG個分の各区間“i”に該当する配列dG[i]を引いた38~46を採ることになる。本実施形態の具体的な配列dG[i]の値(46個分)と各区間の傾き係数Gのベルヌーイシフト写像のマップイメージを
図25Aの第2番目枠に示す。
【0093】
以上のようにして、暗号生成装置100Bでは傾き係数Gの変動パターンを生成し、ベルヌーイシフト写像をSa回反復した結果Xsaを出力し、このXsaが復号装置200Bへ送られる(S66A)。また、復号装置200Bでは、傾き係数Gの変動パターンを生成し、ベルヌーイシフト写像をSb回反復した結果Xsbを出力し、このXsbが暗号生成装置100Bへ送られる(S66B)。
【0094】
暗号生成装置100BではXsbを受け取り(S67A)、このXsbを初期値X0として設定して(S68A)、ベルヌーイシフト写像をSa回反復した更新鍵Xkを出力する(SAF23)。復号装置200BではXsaを受け取り(S67B)、このXsaを初期値X0として設定して(S68B)、ベルヌーイシフト写像をSb回反復した更新鍵Xkを出力する(SAF23)。
【0095】
図24に示したプログラムにて鍵更新を行う具体的な数値例を
図26に示す。
ここで、
図8(a)の処理Aと
図24のプログラムの違いについて説明する。
図8(a)の処理Aでは、最後に返り値としてxをGで割った値“x/G”を返しているが、
図24では、Gを変更するため、割り切れない値が生じることで演算結果の値が異なってしまうため、
図23のステップS77に示されるように、“x”をそのまま返り値とする。
【0096】
暗号生成装置100Bは秘密情報として“7”を生成し傾き係数Gを変動する写像の反復を7回実行し、“X7=24904”を得て復号装置200Bへ送信する。復号装置200Bは秘密情報として“10”を生成し、傾き係数Gを変動する写像の反復を10回実行し“X10=6162”を得て暗号生成装置100Bへ送信する。
【0097】
受信処理では暗号生成装置100Bは、復号装置200Bから受け取った通知情報6162を初期値X0に設定し、暗号生成装置100Bの秘密情報7から傾き係数を変動する写像の反復を7回実行し、“X7=49160”を更新鍵として得る。復号装置200Bは暗号生成装置100Bから受け取った通知情報24904を初期値X0に設定し、復号装置200Bの秘密情報10から傾き係数を変動する写像の反復を10回実行し、“X10=49160”を更新鍵として得る。このような処理を行い、暗号生成装置100Bと復号装置200Bは共通の更新鍵を持つことができる。暗号生成装置100Bと復号装置200Bは、生成された更新鍵を共通鍵として用いる。つまり、暗号文生成と暗号文を復号して平文を得るために用いることができる。
【0098】
以上が傾き係数Gを変動する鍵更新方法である。ただし、注意点として傾き係数Gが一定の場合に次の合同算術式が示すように、お互い送信する交換情報同士を掛け算して法Pをとることで秘密情報Sが第三者に判ってしまう。
【数45】
暗号生成装置100Bは“GNA(mod P)”を復号装置200Bに送信し、復号装置200Bは“GNB(mod P)”を暗号生成装置100Bに送信して、暗号生成装置100Bと復号装置200Bは共有する“GNA + NB(mod P)”を得ることになる。ところが、お互い送信した情報GNAとGNBを掛け算してPで法をとった“GNA×GNB(mod P)”と同じ値になるため、素数Pさえ判れば共有する秘密情報Sを簡単に求められる。
【0099】
図27は、傾き係数Gを変動せず固定した場合の
図8(a)の処理Aプログラムを具体的な数値を用いて実行した例を示す図である。
図8(a)の処理Aでは、“初期値X0=1”となる。暗号生成装置100Bは7回写像した値102、復号装置200Bは10回写像した値482をお互いに送信する。
102×482=49164に法1291をとると余りは、“106”であり、
図27の表の最後尾のように暗号生成装置100Bと復号装置200Bが算出し共有した値も“106”になっており、素数Pさえ判れば簡単に暗号生成装置100Bと復号装置200Bが共有する秘密情報が判ってしまう。このため、傾き係数Gの変動パターンは最低でも2以上は必ず異なる値Gに変動されるようにすることが必要である。
【0100】
他の傾き係数Gの変動パターン例を
図25Bに示す。共通鍵は36として2進数にすると(00100100)2になるが、
図25Aの例と同じように46個分の0~8の値G個分をdG[i]に格納することを考えると、ビットから取り出す場合は8以下の0~7を対象とする3ビット分を取り出すこととする。
図25Bのスキップ1とは1ビットおきに3ビット分を取り出して並べると、
{(001)2,(010)2,(100)2,(001)2,(010)2,(100)2,(000)2,(000)2,・・・}
の合計8個分を取り出すことができる。7ビット目では9ビット目以降は同じビット列(00100100)2を最後尾につなげることで(0010010000100100)2のようにして9ビット目以降が採れるようにする。
【0101】
“dG[0]=1,dG[1]=2,dG[2]=4,dG[3]=1,dG[4]=2,dG[5]=4,dG[6]=0,dG[7]=0”のように採ることで、傾き変動パターンとして8個分確保できる。
次は
図25Bのスキップ2に示すように、2ビットおきに3ビット分ずつを取り出す操作を繰り返し、最後尾で足りない分は同じビット列を繋げていくという方法で8個分採る。次は図示しないが、スキップ3で3ビットおきに1ビット取るというように、同様にスキップ7まで行い、全部で8×7=56通りが取得できる。
傾き係数G=46のため、
図25Bに示す数値46個を取得して傾き変動パターン2として生成する。
ここまで各種パラメータを一つの共通鍵から生成する事例として示したが、各パラメータを予め複数の共通鍵として構成することも考えられ、より秘匿性を高めることが期待できる。
以上、ベルヌーイシフト写像の傾き係数の変動を行う鍵更新方法の例を示した。
【0102】
次に、更新鍵を複数生成しながら、暗号生成装置100Bで暗号化を行い、復号装置200Bへ暗号文を送信して、復号装置200Bで復号を行う例を示す。
暗号生成装置100Bと復号装置200Bの双方は同じ傾き係数Gを変動するパターンを持つ一次元写像関数を使用しているため、更新鍵を生成した以降も暗号生成装置100Bと復号装置200Bは写像毎の出力“Xi+1”は同じ値が得られる。
【0103】
このため、鍵を追加しながら任意のデータ量分を鍵と平文を合成して暗号化を行う構成が考えられる。ここで、鍵の生成は1回の写像のたびに鍵を生成して暗号化を行うのではなく、写像を何回か反復を行っては出力される“Xi+1”を鍵として追加生成することが望ましい。
【0104】
なぜなら、ベルヌーイシフト写像の式(9)より得られた“Xi+1=0.3”とすると、式(9)を1回さかのぼることを考える。“Xi<0.5”の場合は式(9)の“2Xi”を実行しているため、“Xi=Xi+1/2”から“Xi+1”に“0.3”を代入することで“Xi=0.15”、一方、“0.5≦Xi”の場合は“2Xi-1”を実行しているため、“Xi=(Xi+1+1)/2”から“Xi+1”に“0.3”を代入することで、“Xi=0.65”が得られ、“Xi+1=0.3”の情報から“0.15”か“0.65”のどちらかから写像が行われたかが推測できる。このため、1回写像を空けてXi+1を出力すれば初期値X0は2つの候補が推測できる。3回写像の反復を行って得られた結果が“Xi+1=0.3”の場合は反復の3回前はどの値から来ていたかを予測すると候補が次の8通りになる。
(0.0375,0.1625,0.2875,0.4125,0.5375,0.6625,0.7875,0.9125)
【0105】
これらの値を式(9)の初期値X0として写像の反復を3回行うと、全て“X3=0.3”が得られることになる。
写像を3回空けて“Xi+1”を取得する場合は8=23通りの初期値候補が推測されるため、3ビット分の安全性が確保できることになる。つまり8ビットの強度(256個の初期値候補)を得たいときは、28=256のため写像を8回分あけて暗号化を行えばよく、写像を8回反復しては鍵を出力する構造になる。このように写像の反復をあけることで鍵の生成系列の推定が難しくなることが期待できる。
【0106】
次に、鍵を出力して暗号化を行い復号する暗号復号システムの処理例を示す。
図28は、鍵を出力して暗号化を行い復号する暗号復号システムの動作を示すフローチャートであり、
図29は、
図28の処理を具体的な数値を用いて行った場合の処理を示す図である。
図29では平文としてアスキーコード3文字“map”を暗号生成装置100Bが暗号化して復号装置200Bへ送信するものとする。“map”は1文字ずつ暗号化するため各文字8ビット分のアスキーコードを10進数にすると“m=109,a=97,p=112”となる。
図28に示すように、
図22の“共通鍵CK”、“傾き係数G”、“更新鍵X0”、“素数P”を引き継ぎ(S81A、S81B)、写像の反復を空ける回数Sは傾き係数Gと共通鍵CKの排他的論理和
【数46】
をとることで算出する(S82A、S82B)。具体的な数値として
図29ではCK=36、G=46のため、
【数47】
としている。
ここで数Sが小さすぎる場合は所定の数値以上をとるようにしておく。
【0107】
次に暗号化する平文の総数nを求め、更新鍵の生成回数iを0とする(S83A、S83B)。更に、
図23のフローチャートによる処理部に、反復回数Sを反復回数rに設定し、素数Pを演算精度Pに設定し、傾き係数Gを傾き係数Gに設定し、更新鍵Xiを初期値X0へ設定する(S84A、S84B)。
【0108】
図24のプログラムによって傾き係数Gを変動する写像をS回反復して鍵Xiを出力する(S85A、S85B)。次の式により更新鍵Xiを出力する(S86A、S86B)。
【数48】
【0109】
本実施形態では暗号化は素数Pを利用し有限体GF(P)上で行うこととして、鍵Kと平文Tは素数P以下の値を対象とする。
図24のプログラムで示した交換する値は、Gを掛けた値としたが、生成した値をGで割り算した値を鍵とすることで値が有限体GF(P)の位数P以下になるように鍵Kを生成する。
暗号化は次の式(24)により生成した鍵Kに平文Tを掛け合わせ、素数Pで割った余りを暗号文Cとする。この式(24)により暗号文Ciを生成し、復号装置200Bへ送信する(S87A)。ステップS88Aでは、平文の総数だけ暗号化がなされたかを検出している。
【数49】
【0110】
復号は暗号文Cを受け取った復号装置200Bは暗号生成装置100Bと共有している鍵Kから逆数K-1を算出し(S87B)、暗号文Cに逆数(乗法逆元)をとることで平文Tを算出する。即ち、
図28のステップS88Bに示す式により復号を行う(S88B)。
ステップS89Bでは、平文の総数だけ暗号化がなされたかを検出している。合同算術では法Pが素数であれば乗法群からなる有限体GF(P)は乗法逆元が成り立つ逆数K-1が存在することが知られている。具体的には、以下に示すようにユークリッドの互除法を用いて平文Tを導出する。
式(24)は被除数K・Tを除数Pで割った商yの剰余がCということであり以下の式が成り立つ。
【数50】
【0111】
ここで、上記の式における右辺の“P・y”を左辺に移項すると以下の式(25)が得られる。
【数51】
式(25)からベズーの等式として知られる一次不定方程式の整数解を利用することで、平文Tを導出できる。以下に一次不定方程式の解法による例を提示し、平文Tの導出について説明する。
【0112】
<定理>一次不定方程式の整数解
“a”と“b”を互いに素な整数としたとき、以下の二元一次方程式を満たす整数解“x”と“y”が存在する。
【数52】
【0113】
式(26)の“x”は式(25)平文Tにあたり、平文Tを導出する例を示す。ここで、式(26)の右辺が1になっており式(25)の右辺は暗号文Cとなっているが、有限体GF(P)上で次の式のようにKとの逆数が1になるK-1を導出する。
【数53】
【0114】
一次不定方程式の整数解「拡張されたユークリッドの互除法」によって、逆数(逆元)K-1となる“x”と、“y”を求める。具体例を
図30に示す。
図30は、一次不定方程式の整数解を求める手順を一例の数値を入れて示す図である。
図30の値は
図29にて
図26で得られた更新鍵49160を初期値X0に設定し、S=10回の写像の反復を行い得られた値54610をG=46で割り算した商となる値を鍵K=1187とし、素数P=1219として求めたものである。その結果が、
【数54】
となり、上記式のように“x=-360,y=331”が得られたが“x”はマイナス、“y”はプラスになっており式(25)と見比べると“y”はマイナス、つまり“y=-y”となるため“x”がプラスとなるよう以下の手法を利用する。
【0115】
式(26)を以下に変形する。
【数55】
式(27)の“a×b”の部分は差し引きで消去できるため、式(26)と等しい。
求めた値は“x=-360,b=1219”また“y=331,a=1187”であるため、これを式(27)に代入すると
と“x=931,y=-856”になり、式(25)の形式が得られ逆数K-1は“931”となる。
【0116】
次の式のように逆数K-1を
図29の平文“m”(=109)の暗号文として与えられたC=283に乗法逆元(CとK-1掛け算してPの余りを算出)を取ることで平文Tに復号する。
【数56】
図29は、“map”3文字分を生成された各鍵の逆数を計算して復号を行い、各平文Tを算出した実施形態を示す図である。
【0117】
本実施形態は、初期値を共通鍵として鍵更新を行うものとして紹介したが、共通鍵を使い回し、通信の度に各々が乱数を生成して反復回数として設定し、写像を反復して毎回異なる値を交換することでセッション鍵SKの生成としても用いることができる。
【0118】
以上のように、本実施形態では初期値を共通鍵とした共通鍵暗号方式を示したが、Diffie-Hellman鍵共有のように初期値を第三者に公開する形態にて写像の反復のステップ数を秘密情報とした暗号復号システムとしても良い。この場合、初期値を公開するため、安全性は低くなるが通信者間で各々が生成する写像の反復のステップ数を秘密情報として送信データにマスキング(スクランブル)がかけられるため、無線回線やインターネット回線の第三者によるキャプチャリングに対して簡単な漏洩防止を行うことが可能である。
一般的な共通鍵暗号方式では鍵の管理が必要であるのに対して、この第3の実施形態では、共通鍵の共有が不要になるため、鍵の管理を不要とすることができる利点を有する。
【0119】
前述の第1の実施形態では一変数多項式によるDiffie-Hellman型の鍵共有方法を示したが、一変数多項式による一次元写像においても写像の反復回数が最終的に同じであれば同じ数を得ることが考えられる。
しかしながら、生成元Gが一定の場合は第3の実施形態で示したように一変数多項式を
図17に示す三角関数の位相に置き換えて計算すると、生成元Gは一定のため交換する値と“初期値X0=sin2(π/P)”の設定から素数Pが推定される場合は共有する秘密情報が簡単に判ってしまう。なぜなら、2次以上の一変数多項式でも位相θに着目すると位相の上ではベルヌーイシフト写像の演算を行っていることと同等であるため、生成元Gを固定にした場合と同じ状況になり、位相の計算を追うことで
図27のように秘密情報が簡単に特定できるからである。
【0120】
そこで、この第4の実施形態では、
図14の一変数多項式の係数に着目し、係数を共通鍵とした鍵更新を行う暗号復号システム、暗号復号方法、暗号復号用プログラムを提供する。
図31は、第4の実施形態に係る暗号復号システムのブロック図である。
図31は、第3の実施形態に係る暗号復号システムのブロック図の第1の暗号側更新鍵生成部105に代えて、暗号生成装置100Cには、第2の暗号側更新鍵生成部106が設けられ、第1の復号側更新鍵生成部205に代えて、復号装置200Cには第2の復号側更新鍵生成部206が設けられている点を除き、同一である。
【0121】
第2の暗号側更新鍵生成部106は、暗号側共通鍵生成部102から共通鍵を受け取り、この共通鍵により一変数多項式を生成しこの一変数多項式による一次元写像を行い、暗号側交換情報を生成する。第2の復号側更新鍵生成部206は、復号側共通鍵生成部202から共通鍵を受け取り、この共通鍵により前記一変数多項式を生成しこの一変数多項式による一次元写像を行い、復号側交換情報を生成する。
【0122】
前記第2の暗号側更新鍵生成部は、復号側交換情報を受け取ってこの復号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成し、
前記第2の復号側更新鍵生成部は、暗号側交換情報を受け取ってこの暗号側交換情報を用いて前記一変数多項式による一次元写像を行い、更新鍵を生成する。
【0123】
本実施形態では、例として
図14の次数G=4の一変数多項式の係数を共通鍵から変更することを考える。第1の実施形態において用いている
図13で示したガウスの消去法では、4次の一変数多項式の解を(1,0,1,0)として、係数“a,b,c,d”を求めていた。
本実施形態では、共通鍵が8ビット(00100100)2(十進数36)として半分に分割すると、(0010)2と(0100)2になり、十進数にすると2と4となる。この2と4は“1”に対して2%分と4%分を減算するといったルールとして当てることを考え“0.98”と“0.96”が算出され、4次の一変数多項式の解を“(0.98,0,0.96,0)”に変更して与える。これを
図13に示すガウスの消去法をコンピュータにプログラミング実装して、式(21)においてG=4としてxを得た場合と同じ次の値
【数57】
を与えて係数“a,b,c,d”を求めると次のような式(28)が得られる。
【数58】
【0124】
式(28)において、係数の桁は小数点以下6位まで示している。式(28)のxを0~1に振ってプロットしたものが
図31Aのグラフである。グラフでは、
【数59】
のとき f(x0)=0.98、
のとき f(x2)=0.96
となっている。
図32は、式(28)を用いて鍵を更新するフローチャートであり、
図33は、具体的な数値による本実施形態の動作を説明する図である。
この実施形態では、共通鍵CKを入手し(S91A、S91B)、共通鍵CKから多項式を生成し(S92A、S92B)、
図32のフローチャートによる処理部に、秘密鍵情報である数Saを反復回数rに設定し、共通鍵CKを初期値X0へ設定する(S93A、S93B)。
次に、暗号生成装置100Cでは、多項式一元写像をSa回反復して結果Xsaを得て、これを復号装置200Cへ送信する(S94A)。復号装置200Cでは、多項式一元写像をSb回反復して結果Xsbを得て、これを暗号生成装置100Cへ送信する(S94B)。
次に、暗号生成装置100Cでは、結果Xsbを受信し(S95A)、復号装置200Cでは、結果Xsaを受信する(S95B)。暗号生成装置100Cでは、秘密鍵情報Saを反復回数rに設定し、結果Xsbを初期値X0へ設定し(S96A)、復号装置200Cでは、秘密鍵情報Sbを反復回数rに設定し、結果Xsaを初期値X0へ設定する(S96B)。
次に、暗号生成装置100Cでは、多項式一次元写像をSa回反復計算し、更新鍵Xkを得る(S97A)。暗号生成装置100Cでは、多項式一次元写像をSb回反復計算し、更新鍵Xkを得る(S97B)。
【0125】
本実施形態では、有限桁を扱う計算機との親和性から、式(28)の整数演算化を考える。
図14の“f4(x)”の多項式は次のようになっている
【数60】
【0126】
図14の“f4(x)”のグラフの横軸xと縦軸f4(x)の区間は1となっているが、これをM倍に拡大する場合は次のような式で表される。
【数61】
上記の記号
【数62】
は整数を扱い、値Nの小数点以下は切り捨てにするという意味である。
【0127】
式(28)を
図31の横軸と縦軸の最大区間がM=1から例としてM=10000になるように拡大して整数演算化を行った一変数多項式による一次元写像は、次の漸化式(29)になる。
【数63】
【0128】
図33は、
図32のフローチャートにより式(29)にて鍵更新を行った計算の例を示す図である。
図33では共通鍵の値36より式(29)を生成して、“初期値X0=36”と共通鍵の値を設定し、暗号生成装置100Cは秘密情報として7を設定し式(29)を7回反復して、“X7=8086”を得て復号装置200Cに送信する。一方、復号装置200Cは秘密情報として10を設定し、式(29)を10回反復して“X10=7284”を得て暗号生成装置100Cに送信する。
【0129】
復号装置200Cから“7284”を受け取った暗号生成装置100Cは、暗号生成装置100Cのみが知る秘密情報7より初期値X0=7284に設定して式(29)を7回反復することで“X7=4721”を更新鍵として得る。一方、暗号生成装置100Cから“8086”を受け取った復号装置200Cは式(29)を復号装置200Cのみが知る秘密情報10より初期値X0=8086に設定して式(29)を10回反復することで“X10=4721”を更新鍵として得ることで暗号生成装置100Cと復号装置200Cは共通鍵を更新する。
【0130】
図34は、一変数多項式の生成について別の手法を示す図である。
図34では、3次の一変数多項式”f(x)”と、2次の一変数多項式“g(x)”2つを用意する。ここで式(28)を生成したときのように、共通鍵からf(x)に“0.98”とg(x)に“0.96”を極大値に与えて、一変数多項式を生成する。この2つの関数を合成することで次の6次の一変数多項式数“h(x)”を生成する。
【数64】
【0131】
これらは係数を変更した一変数多項式を生成して係数を共通鍵として用いるが、注意点としては、係数の選択は写像の反復を繰り返すことで急激に周期帯に落ちない(収束しない)、また発散しないパラメータ帯である必要がある。
【0132】
本実施形態では、暗号生成装置100Cと復号装置200Cがお互い乱数を発生させ、そのステップ数の写像を行った結果の値を交換して共通鍵を更新する例として示した。これに対し、第3の実施形態で述べたように共通鍵(初期値)を公開する場合に安全性は低くなるが通信者間で各々が生成する写像の反復のステップ数を秘密情報として鍵共有を行うようにしても良い。
【0133】
なお、これまでの実施形態では、説明のため演算の桁を少なくとっていたが、Diffie-Hellman鍵共有方式では、現在2048bit以上の桁が推奨されているように演算の桁幅をより大きく取ることで安全性を確保するものとする。
【0134】
ロジスティック写像とテント写像が位相共役であることに着目すると、本発明の実施形態に示した2次以上の次数を持つ一変数多項式による一次元写像でもDiffie-Hellman型の鍵共有方式とできることが考えられ、ベルヌーイシフト写像ではメモリを確保し検索処理(IF分岐)を行っていたが、それが不要となり切れ目なく写像の反復が行えることが期待できる。また、公開鍵暗号方式において合同算術以外に一次元写像が有効であることを示すことができた。
Diffie-Hellman鍵共有方式は、各々の秘密情報をべき乗数としてお互い最終的なべき乗の回数が同じであればお互い共有する秘密情報を出力できることに着目すると、一次元写像で初期値を共通鍵とし秘密情報を写像の反復回数とする共通鍵を更新する装置やシステムが考えられる。この構成にて初期値を公開値にした場合に安全性は低くなるが、通信者各々の写像の反復回数を秘密情報として送信データをマスキングすることで第三者に情報漏洩の防止が可能となり鍵管理が不要になる暗号システムが提供できる。
更に、暗号生成側と復号側がお互い共有する共通鍵を写像の反復回数とする暗号化と復号を行う暗号方法によれば、離散対数問題を安全性根拠とした一次元写像による共通鍵暗号方法と、鍵共有とセッション鍵生成を含めた「制御パラメータ」と「写像の反復回数」を二重の鍵とする堅牢な共通鍵暗号複号システムを提供できる。
本発明に係る複数の実施形態を説明したが、これらの実施形態は例として提示するものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0135】
10・・・CPU、11・・・主メモリ、12・・・バス、13・・・外部記憶インタフェース、14・・・入力インタフェース、15・・・表示インタフェース、16・・・通信インタフェース、23・・・外部記憶装置、24・・・入力装置、25・・・表示装置、26-1~26-n・・・ポート、100、100A、100B、100C・・・暗号生成装置、101・・・暗号生成部、102・・・暗号側共通鍵生成部、103・・・暗号側セッション鍵生成部、104・・・乱数生成部、105・・・第1の暗号側更新鍵生成部、106・・・第2の暗号側更新鍵生成部、200、200A、200B、200C・・・復号装置、201・・・復号部、202・・・復号側共通鍵生成部、203・・・復号側セッション鍵生成部、205・・・第1の復号側更新鍵生成部、206・・・第2の復号側更新鍵生成部