(57)【要約】【課題】  共有鍵を安全に共有することができる暗号化方式を実現する。【解決手段】  一時鍵発生手段２２が乱数である一時鍵ｒｉを発生する。暗号化手段１４が第１初期鍵ｋｉ１を用いて一時鍵ｒｉを暗号化し暗号文ｃｉ１を得る。送信手段２０が暗号文ｃｉ１を受信装置５０に送信する。暗号化手段１４は、第２初期鍵ｋｉ２でも一時鍵ｒｉを暗号化し、共有鍵ｋｓを得る。一方、受信装置５０では、通信手段６０が暗号文ｃｉ１を受信し、復号化手段５６に供給する。復号化手段５６は、暗号文ｃｉ１を復号化し、元の一時鍵ｒｉを得る。暗号化手段５４が第２初期鍵ｋｉ２を用いてこの一時鍵ｒｉを暗号化することによって、送信装置１０側と同様に受信装置５０側でも共有鍵ｋｓを得ることができる。以降、この共有鍵ｋｓを用いて秘密の通信を行う。【選択図】      図１
2006254417.tif 000002
【特許請求の範囲】
【請求項１】
第１の通信装置と第２の通信装置とを含む秘密通信システムにおいて、
前記第１の通信装置は、
第１初期鍵ｋ１と、第２初期鍵ｋ２と、を記憶する送信側秘密鍵記憶手段と、
一時鍵ｒを生成する一時鍵生成手段と、
前記一時鍵ｒを前記第１初期鍵ｋ１で暗号化し暗号文ｃ１を生成し、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し共有鍵ｋｓを生成する暗号化手段と、
前記暗号文ｃ１を前記第２の通信装置に送信する送信手段と、
送信側共有鍵生成手段と、
を含み、
前記第２の通信装置は、
第１初期鍵ｋ１と、第２初期鍵ｋ２と、を記憶する受信側秘密鍵記憶手段と、
前記第１の通信装置から送られてきた前記暗号文ｃ１を前記第１秘密鍵を用いて復号し、前記一時鍵ｒを生成する一時鍵復号化手段と、
前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、共有鍵ｋｓを生成する受信側共有鍵生成手段と、
を含み、
前記共有した前記共有鍵ｋｓを用いて秘密通信を行う秘密通信システム。
【請求項２】
請求項１記載の秘密通信システムに用いられる第１の通信装置において、
前記第１初期鍵ｋ１と、前記第２初期鍵ｋ２と、を記憶する前記送信側秘密鍵記憶手段と、
前記一時鍵ｒを生成する前記一時鍵生成手段と、
前記一時鍵ｒを前記第１初期鍵ｋ１で暗号化し前記暗号文ｃ１を生成し、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し前記共有鍵ｋｓを生成する暗号化手段と、
前記暗号文ｃ１を前記第２の通信装置に送信する前記送信手段と、
前記送信側共有鍵生成手段と、
を含み、前記共有鍵を用いた秘密通信を行うことを特徴とする第１の通信装置。
【請求項３】
請求項１記載の秘密通信システムに用いられる第２の通信装置において、
前記第１初期鍵ｋ１と、前記第２初期鍵ｋ２と、を記憶する前記受信側秘密鍵記憶手段と、
前記第１の通信装置から送られてきた前記暗号文ｃ１を前記第１秘密鍵を用いて復号し、前記一時鍵ｒを生成する前記一時鍵復号化手段と、
前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、前記共有鍵ｋｓを生成する前記受信側共有鍵生成手段と、
を含み、
前記共有鍵ｋｓを用いて秘密通信を行うことを特徴とする第２の通信装置。
【請求項４】
コンピュータを、請求項２記載の第１の通信装置として動作させるプログラムにおいて、前記コンピュータに、
前記一時鍵ｒを生成する一時鍵生成手順と、
前記一時鍵ｒを前記第１初期鍵ｋ１で暗号化し、前記暗号文ｃ１を生成する一時鍵暗号化手順と、
前記暗号文ｃ１を前記第２の通信装置に送信する送信手順と、
前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、前記共有鍵ｋｓを生成する送信側共有鍵生成手順と、
前記共有鍵を用いた秘密通信を行う手順と、
を実行させることを特徴とするプログラム
【請求項５】
コンピュータを、請求項３記載の第２の通信装置として動作させるプログラムにおいて、前記コンピュータに、
前記第１の通信装置から送られてきた前記暗号文ｃ１を前記第１秘密鍵を用いて復号し、前記一時鍵ｒを生成する一時鍵復号化手順と、
前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、前記共有鍵ｋｓを生成する受信側共有鍵生成手順と、
前記共有鍵ｋｓを用いて秘密通信を行う手順と、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号を用いた秘密通信を行う装置に関する。
【背景技術】
【０００２】
近年、相互に通信する機能を備え、高度な演算処理能力を持ったセンサを多数集合させて、センサネットワークを構成する構想が広く知られている。このセンサネットワークを構成するセンサは、超小型集積回路から構成され、極めて微細なセンサである。特に、MEMS技術やRF集積回路技術が発達したことによって、センサネットワークで用いられる集積回路が安価に作成できるようになったことから、センサネットワークはにわかに注目を集めている。
【０００３】
このように、センサネットワークは微細なセンサの集合体であるため、種々の場所に容易に敷設できるものである。したがって、天候や動物の生態などのモニタリング、警備のための監視など様々な分野での利用が検討されている。その結果、センサネットワークは、ユビキタス社会の早期実現に寄与するものと考えられている。
【０００４】
センサネットワークにおける重要な課題の一つとして、各センサ間の通信の安全性確保がある。なお、センサネットワークを構成する各センサは、ノードと呼ばれるので、センサ間の通信は、ノード間通信と呼ばれる。また、センサネットワークで用いられる集積回路に要求される主要な性質としては、次の２点を上げることができる。第１点は、超小型であることである。そして、第２点は、無数にあるノード（つまり各センサ）のバッテリを交換することが困難であるため、低消費電力であることである。
【０００５】
なお、センサネットワークにおいて伝達する情報を通す通信網を選択する技術が下記特許文献１に示されている。
【０００６】
また、センサネットワークの管理者の負担を減少させる管理方法が下記特許文献２に記載されている。
【０００７】
また、同じ回路を繰り返し用いることによって回路規模を小さくすることができる暗号化装置が下記特許文献３示されている。
【０００８】
また、公開鍵暗号方式の処理に用いるハッシュ値を利用して回路規模を小さくすることができる装置が下記特許文献４に示されている。
【０００９】
ところで、代表的な共有鍵暗号の一つであるＡＥＳのように大規模な回路面積が必要な暗号方法に関して下記非特許文献１に記載がある。
【００１０】
また、カオスを基にした暗号が下記非特許文献２に記載がある。
【００１１】
暗号回路の回路規模に関する記述が下記非特許文献３及び下記非特許文献４に記載されている。
【００１２】
また、ＭＥＭＳとＲＦ用のＩＣ技術に関し、非特許文献５に記載がある。
【００１３】
また、暗号システムに対する攻撃について、既知暗号文攻撃、既知平文攻撃、選択平文攻撃、選択暗号文攻撃、等が知られており、これらは非特許文献６に記載がある。
【００１４】
また、代表的な共有鍵暗号の一つであるＡＥＳにおいて必要なゲート数について、下記非特許文献７、非特許文献８に記載がある。
【００１５】
さらに、下記非特許文献９には、ゲート数を削減した新しい乱数生成装置が記載されている。
【００１６】
【特許文献１】特開２００３−１１０７４９号公報
【特許文献２】特開２００３−１１５０９２号公報
【特許文献３】特開平１０−３３３５６９号公報（特許登録第３０８８３３７号）
【特許文献４】特開２００４−０５４１２８号公報
【非特許文献１】A. Perrig, R. Szewczyk, J.D. Tygar, V.Wen, and D.E. Culler, “SPINS: Security protocols for sensor networks”, Wireless networks 8,521-534, 2002, Kluwer Academic Publications.
【非特許文献２】G. Jakimoski, L. Kocarev, “Chaos and cryptography based on chaotic maps”, IEEE Trans. Circuits Syst. I, vol.49, pp. 163-169, Feb 2001.
【非特許文献３】A. Hodjat and Ingrid Verbauwhede, “Minimum Area Cost for a 30 to 70 Gbits/s AES Processor” Proceedings of the IEEE Computer Society Annual Symposium on VLSI Emerging Trends in VLSI Systems Design, pp. 83-88, Feb 2004.
【非特許文献４】I. Verbauwhede, P. Schaumont, H. Kuo, “Design and Performance Testing of a 2.29-GB/s Rijndael Processor”, IEEE Journal of Solid-State Circuits, vol.38, no.3, pp. 569-572, Mar 2003.
【非特許文献５】A. Sinha and A. Chandrakasan, “Dynamic power management in wireless sensor networks” IEEE Design and Test of Computers, pp. 62-74, Mar-Apr 2001.
【非特許文献６】H. Feistel “Cryptography and computer privacy “, 1973.
【非特許文献７】S. Mangard, M. Aigner and S. Dominikus, "A Highly Regular and Scalable Hardware Architecuture", IEEE Transactions on Computers, vol. 52, no. 4, Apr 2003.
【非特許文献８】A. Satoh, S. Morioka, K. Takano, and S. Munetoh, “A Compact Rijndael Hardware Architecture with S-Box Optimization,” Proc. Advances in Cryptology-ASIACRYPT 2001, pp. 239-254, 2001.
【非特許文献９】S. Yasuda, T. Tanamoto, H. Satake, and S. Fujita, “Novel Random Number Generator Using MOS Gate After Soft-Breakdown”, Extended Abstracts of the 2002 International Conference on Solid States Device and Materials, pp. 250-251, 2002.
【発明の開示】
【発明が解決しようとする課題】
【００１７】
そこで、このような点を満足するノード間の安全な通信システムが必要である。安全な通信のためには暗号を用いた秘密通信（又は暗号化通信とも呼ぶ）を使用することが考えられるが、現状の暗号技術では上記２点を満足することは困難である。
【００１８】
現状の問題点
例えば、代表的な公開鍵暗号の一つであるＲＳＡのように大量の電力を消費する非対称暗号は、センサネットワークに使用することはできない。また、代表的な共有鍵暗号の一つであるＡＥＳのように大規模な回路面積が必要な暗号方法も、同様にセンサネットワークに使用することはできない。このことは下記非特許文献１に記載がある。特に、従来の共有鍵暗号方式では、一つの秘密鍵を暗号化に用い、その鍵を複雑な演算を用いることで,盗聴者に知られないようにするというアプローチが取られていた。その結果として、回路規模や消費電力を犠牲にせざるを得ず、大規模な回路面積と大きな消費電力が必要であった。
【００１９】
また、カオスを基にした暗号も実装の難しさからセンサネットワークに適用することも困難である。このことは上記非特許文献２に記載がある。
【００２０】
これら、現在用いられている暗号方式は、回路規模が大規模になりがちであり小型にすることは困難である。また電力消費も大きく小型のバッテリ駆動のようなアプリケーションに用いることは困難である。
【００２１】
暗号方式の回路規模に関する記述が上記非特許文献３及び非特許文献４に記載されている。特に、上記非特許文献３においては、ＡＥＳに利用する半導体集積回路の回路規模に関する記述がある。
【００２２】
したがって、現時点でのこれらの方式をセンサネットワークに適用することは困難である。このように、センサネットワークで用いるために、小型で低消費電力な暗号回路・暗号装置が広く望まれている。
【００２３】
ところで、共有鍵暗号方式では、「共有鍵を安全に共有できること」が重要であることは言うまでもない。共有鍵を安全に共有できれば、例えばバーナム暗号と呼ばれるストリーム暗号が可能となる。バーナム暗号とは送るメッセージに対してメッセージと等しい長さの秘密鍵（共有鍵）を用いる暗号方式である。このメッセージと等しい長さの一時的な秘密鍵（共有鍵）があれば、メッセージにその秘密鍵（共有鍵）を使って単に排他的論理和を施すだけでも安全であることが知られている。単なる排他的論理和を用いる場合は、ハードウェアは極めてシンプルなものとなる。
【００２４】
本発明は、このような状況に鑑みなされたものであり、その目的は、共有鍵暗号方式における共有鍵を安全に共有するシステムを提供することである。
【００２５】
また、本発明の他の目的は、従来より小型で、また、従来より低消費電力の暗号システム及びそのシステムに用いる装置を実現することである。
【課題を解決するための手段】
【００２６】
上記目的を達成するために、本発明は、暗号化を共有する秘密鍵を２種類用意し、第１の秘密鍵（第１初期鍵と呼ぶ）で一時鍵を暗号化して送信すると共に、第２の秘密鍵（第２初期鍵と呼ぶ）で一時鍵を暗号化して共通の鍵（共有鍵）を得ている。したがって、通信者間で安全に一時的な共有鍵を共有することができる。
【００２７】
また、このように２種の秘密鍵を送信者と受信者の間で共有する手法を採用し、役割を分担させたので、回路規模が大きくなってしまうことを効果的に防止することができる。そのことは同時に消費電力の低減ももたらす。
【００２８】
このように、本願の発明者らは、小型で安全な暗号システムを実現するため、２個の秘密鍵を用いて、暗号処理を、キーロンダリング（Key Laundering）と呼ばれる処理と、メッセージ送信処理とに、分離して実行する手法を開発したのである。
【００２９】
また、後述するように、本発明に係る暗号システム、暗号装置は従来用いられている暗号と同程度の強度を持つものであり、従来の暗号システムと置き換えることが可能である。
【００３０】
以下、具体的に述べる。
【００３１】
（１）上記課題を解決するために、本発明は、第１の通信装置と第２の通信装置とを含む秘密通信システムにおいて、前記第１の通信装置は、第１初期鍵ｋ１と、第２初期鍵ｋ２と、を記憶する送信側秘密鍵記憶手段と、一時鍵ｒを生成する一時鍵生成手段と、
前記一時鍵ｒを前記第１初期鍵ｋ１で暗号化し暗号文ｃ１を生成し、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し共有鍵ｋｓを生成する暗号化手段と、前記暗号文ｃ１を前記第２の通信装置に送信する送信手段と、送信側共有鍵生成手段と、を含み、前記第２の通信装置は、第１初期鍵ｋ１と、第２初期鍵ｋ２と、を記憶する受信側秘密鍵記憶手段と、前記第１の通信装置から送られてきた前記暗号文ｃ１を前記第１秘密鍵を用いて復号し、前記一時鍵ｒを生成する一時鍵復号化手段と、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、共有鍵ｋｓを生成する受信側共有鍵生成手段と、を含み、前記共有した前記共有鍵ｋｓを用いて秘密通信を行う秘密通信システムである。
【００３２】
このような構成によって、送信側と受信側で安全に共有鍵を共有することができる。特に、一時的な共有鍵を安全に共有することができる。また、本システムによれば、小さな回路規模で暗号による秘密通信を行うことができる。
【００３３】
（２）また、本発明は、上記（１）記載の秘密通信システムに用いられる第１の通信装置において、前記第１初期鍵ｋ１と、前記第２初期鍵ｋ２と、を記憶する前記送信側秘密鍵記憶手段と、前記一時鍵ｒを生成する前記一時鍵生成手段と、前記一時鍵ｒを前記第１初期鍵ｋ１で暗号化し前記暗号文ｃ１を生成し、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し前記共有鍵ｋｓを生成する暗号化手段と、前記暗号文ｃ１を前記第２の通信装置に送信する前記送信手段と、前記送信側共有鍵生成手段と、を含み、前記共有鍵を用いた秘密通信を行うことを特徴とする第１の通信装置である。
【００３４】
このような構成によれば、乱数を相手方に送信し、この乱数に基づき共有鍵を生成することができる。
【００３５】
（３）また、本発明は、上記（１）記載の秘密通信システムに用いられる第２の通信装置において、前記第１初期鍵ｋ１と、前記第２初期鍵ｋ２と、を記憶する前記受信側秘密鍵記憶手段と、前記第１の通信装置から送られてきた前記暗号文ｃ１を前記第１秘密鍵を用いて復号し、前記一時鍵ｒを生成する前記一時鍵復号化手段と、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、前記共有鍵ｋｓを生成する前記受信側共有鍵生成手段と、を含み、前記共有鍵ｋｓを用いて秘密通信を行うことを特徴とする第２の通信装置である。
【００３６】
このような構成によれば、相手方から送られてきた乱数に基づき共有鍵を生成することができる。
【００３７】
（４）また、本発明は、コンピュータを、上記（２）記載の第１の通信装置として動作させるプログラムにおいて、前記コンピュータに、前記一時鍵ｒを生成する一時鍵生成手順と、前記一時鍵ｒを前記第１初期鍵ｋ１で暗号化し、前記暗号文ｃ１を生成する一時鍵暗号化手順と、前記暗号文ｃ１を前記第２の通信装置に送信する送信手順と、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、前記共有鍵ｋｓを生成する送信側共有鍵生成手順と、前記共有鍵を用いた秘密通信を行う手順と、を実行させることを特徴とするプログラムである。
【００３８】
このような構成によって、コンピュータを、第１の通信装置として動作させることができる。
【００３９】
（５）また、本発明は、コンピュータを、上記（３）記載の第２の通信装置として動作させるプログラムにおいて、前記コンピュータに、前記第１の通信装置から送られてきた前記暗号文ｃ１を前記第１秘密鍵を用いて復号し、前記一時鍵ｒを生成する一時鍵復号化手順と、前記一時鍵ｒを前記第２初期鍵ｋ２で暗号化し、前記共有鍵ｋｓを生成する受信側共有鍵生成手順と、前記共有鍵ｋｓを用いて秘密通信を行う手順と、を実行させることを特徴とするプログラムである。
【００４０】
このような構成によって、コンピュータを、第１の通信装置として動作させることができる。
【発明の効果】
【００４１】
以上述べたように、本発明によれば、通信する者の間で共有鍵を安全に共有することができる。
【発明を実施するための最良の形態】
【００４２】
以下、本発明の好適な実施の形態を図面に基づき説明する。
【００４３】
以下の説明においては、第１章において、本実施の形態において採用する暗号の原理・アルゴリズムを説明する。第２章では、この暗号を実現する装置の構成について説明する。また、第３章では、暗号強度について述べる。第４章では、バリエーションについて述べる。
【００４４】
第１章  原理・アルゴリズム
１．定義
まず、本明細書で用いる記号の定義説明を行う。
【００４５】
ｎ    ：送信の際に用いる鍵のビット長である。なお、本実施の形態では、送信対象であるメッセージｍｉのビット長もこのｎとしている。このｎは、正の整数であるが、一般には、１２８〜４０９６（ビット）程度が選ばれるが、それより短いビット長でもよいし、それより長いビット長でもかまわない。
【００４６】
以下の各記号が表すデータや鍵、暗号文、平文などは、本実施の形態では全てｎビットである。
【００４７】
ｍｉ  ：送信対象のメッセージであり、ｎビットから成る。
【００４８】
ｋｓｉ：送信の際に用いる鍵である。この鍵は、送信者と受信者との間で共有されてお          り、この鍵ｋｓｉを用いて暗号通信（秘密通信）が行われる。後述するように          、このｋｓｉは、第１初期鍵ｋｉ１、第２初期鍵ｋｉ２とから、生成される。          秘密通信に用いられるこの共有鍵ｋｓｉは、請求の範囲における共有鍵ｋｓの          好適な一例に相当する。
【００４９】
ｒｉ  ：送信の際に用いる鍵を生成するための乱数であり、ｎビットから成る。この乱          数ｒｉは、後述する乱数発生手段で発生させる。この乱数ｒｉは、一時的に作          成する一時鍵として用いられる。そこで、このｒｉは「一時鍵」と呼ぶ。この          「一時鍵」ｒｉは、請求の範囲の一時鍵ｒの好適な一例に相当する。
【００５０】
ｃ１ｉ：乱数（一時鍵ｒ）を暗号化したデータであり、ｎビットから成る。
【００５１】
なお、本特許では、鍵ｋを用いて平文ｐを暗号化し、暗号文ｃを得る処理をｃ          ＝ｆｋ（ｐ）と表す。つまり、関数ｆｋは、鍵ｋを用いて暗号化する関数を意          味する。同様に、ｆ−１ｋ（ｃ）は、暗号文ｃを復号化する処理を意味する。  
すなわち、ｐ＝ｆ−１ｋ（ｃ）である。
【００５２】
ｃ２ｉ：送信メッセージＭを暗号化した暗号文であり、ｎビットから成る。
【００５３】
ｋｉ１：第１初期鍵であり、ｎビットから成る。この第１初期鍵ｋｉ１は、送信者と受          信者の間で共有されている秘密鍵である。
【００５４】
ｋｉ２：第２初期鍵であり、ｎビットから成る。この第１初期鍵ｋｉ１は、送信者と受          信者の間で共有されている秘密鍵である。
【００５５】
なお、上記各記号のｉは、１以上の正の整数であり、後述するように鍵の生成の回数を表すものである。例えば、最初の鍵の生成では乱数ｒ１が用いられるが、２回目の鍵の生成の場合は、ｉは２となり、乱数ｒ２が用いられる。以下同様である。
【００５６】
２．  メッセージの送信に用いる共有鍵の生成
本実施の形態において特徴的なことは、送信者と受信者との間のメッセージの暗号化に用いる鍵を第１初期鍵ｋｉ１及び第２初期鍵ｋｉ２とから生成していることである。本実施の形態では、特にこの処理をキーロンダリング（Key Laundering）と呼んでいる。図１にはこのキーロンダリング処理の概念図が示されている。
【００５７】
この図に示すように、送信者と受信者とは、共に第１秘密鍵ｋｉ１と、第２秘密鍵ｋｉ２とを保持しており、当然ながら互いにその内容を知っている。
【００５８】
まず、送信者は、所定の乱数発生手段を用いて乱数ｒｉを発生させる。そして、この乱数ｒｉを第１初期鍵ｋｉ１を用いて暗号化し、暗号化文ｃｉ１を得る。本実施の形態では、第１初期鍵ｋｉ１で暗号化する処理をｆｋｉ１と記すので、式で表せば、以下の通りとなる。
【００５９】
ｃｉ１  ＝  ｆｋｉ１（ｒｉ）                            ・・・（１）
そして、送信者は得られたｃｉ１を受信者に送信する。
【００６０】
このような暗号化文ｃｉ１を受信した受信者は、暗号化に用いた鍵である第１初期鍵ｋｉ１を保有しているので、この第１初期鍵ｋｉ１を用いて暗号化文ｃｉ１を復号し、元のデータである乱数ｒｉを得ることができる。式で表せば以下の通りとなる。
【００６１】
ｒｉ    ＝  ｆ−１ｋｉ１（ｃｉ１）                        ・・・（２）
このようにして、送信者と受信者との間で、乱数ｒｉを共有することができた。（図１参照）。
【００６２】
引き続き、受信者はこの共有できた乱数ｒｉを第２初期鍵ｋｉ２を用いて暗号化することによって、最終的に得たい通信に用いる共有鍵ｋｓｉを得る（下記式参照）。
【００６３】
ｋｓｉ  ＝  ｆｋｉ２（ｒｉ）                            ・・・（３）
この式（３）の計算は、第２初期鍵ｋｉ２及び乱数ｒｉを知っている送信者も行うことができる。したがって、送信者もこの式（３）を計算することによって、共有鍵ｋｓｉを得ることができる。
【００６４】
このようにして、送信者と受信者との間で共有鍵ｋｓｉを共有することができた後は、この共有鍵を用いた暗号化通信を送信者と受信者との間で実行することができる。共有鍵を用いた暗号化通信は、従来から広く行われているので特段の説明は要しないであろう。
【００６５】
なお、上記ｉは既に述べたように、鍵の生成の回数を表す数である。特に、共有鍵暗号では、暗号強度を維持するため、定期的に共有鍵を変更することが一般的である。例えば、１週間毎に共有鍵を変更する等の運用が実際に行われている。そのような共有鍵の変更の場合には、またあらためて乱数ｒｉの生成から始まる上記プロセス（キーロンダリング）を実行すればよい。このように、上述した各記号のｉは、１以上の正の整数であり、共有鍵の生成の回数を表す数である。例えば、一番最初に共有鍵を生成する場合には、乱数ｒ１を生成し、この乱数ｒ１を利用したキーロンダリングプロセスが実行され。共有鍵ｋｓ１が生成される。そして、１週間後に共有鍵を変更する場合には、そのときに乱数ｒ２を生成し、上述したキーロンダリングプロセスが再び実行される。そして、最終的に共有鍵ｋｓ２が生成され、この共有鍵ｋｓ２を用いた暗号通信がその時点から実行される。以下、同様である。このようにして、一時的に共有する共有鍵を、通信する者の間で共有することができる。
【００６６】
第２章  通信装置の実際
本実施の形態に係る通信装置として、送信装置１０と受信装置５０とを図面に基づき説明する。
【００６７】
１  送信装置
図２には、本実施の形態に係る送信装置１０の構成ブロック図が示されている。この送信装置１０は、請求の範囲の第１の通信装置の好適な一例に相当する。
【００６８】
この図に示すように、送信装置１０は、第１初期鍵ｋｉ１と、第２初期鍵ｋｉ２とを記憶する記憶手段１２を備えている。この第１初期鍵ｋｉ１と、第２初期鍵ｋｉ２とは、送信側の送信者と受信側の受信者とによって共有されている秘密の鍵であり、上で述べたようにｎビット（ｎは正の整数）長のデータである。
【００６９】
記憶手段１２は、データを記憶できるものであれば、どのようなものでもかまわない。磁気的・光学的にデータを記憶するハードディスクや各種光ディスク手段も好ましい。また、フラッシュメモリ等の各種半導体記憶手段を採用することも好ましい。
【００７０】
また、記憶手段１２は秘密鍵である第１初期鍵ｋｉ１と、第２初期鍵ｋｉ２とを記憶するので、装置から外して別途保管するように構成することも好ましい。そのような場合も本請求の範囲の技術的範囲に含まれることは言うまでもない。
【００７１】
また、送信装置１０は、第１初期鍵ｋｉ１又は第２初期鍵ｋｉ２による暗号化を実行する暗号化手段１４と、第１初期鍵ｋｉ１又は第２初期鍵ｋｉ２による復号化を実行する復号化手段１６と、を備えている。つまり、暗号化手段１４は、暗号化の対象である平文ｐに対して関数ｆｋｉ１（ｐ）又はｆｋｉ２（ｐ）を計算し、暗号文ｃする計算手段である。また、復号化手段１６は、復号化の対象である暗号文ｃに対して関数ｆ−１ｋｉ１（ｃ）又はｆ−１ｋｉ２（ｃ）を計算し、元の平文ｐを復元する計算手段である。
【００７２】
なお、ここで関数ｆの種類は従来から知られている種々の暗号化のアルゴリズムを採用することが可能である。
【００７３】
このような暗号化手段１４、復号化手段１６は、速い計算速度を実現するため、一般にハードウェア（ＬＳＩ等）で構成することが好ましい。もちろん速度を要求しない用途においては、プログラムとこのプログラムを実行するコンピュータから構成してもよい。
【００７４】
特に本実施の形態において特徴的なことは、このハードウェア（ＬＳＩ等）の規模を小さく抑えることができることである。これについては後に詳述する。
【００７５】
また、送信装置１０は、暗号化手段１４が暗号化した暗号文を外部に送信し、外部から受信した暗号文を復号化手段１６に供給する通信手段２０を備えている。この通信手段１６は従来から知られている種々の通信手段を用いることができる。無線による通信でもよいし、有線による通信でもよい。例えば、ＬＡＮインターフェース手段や、インターネットと接続するためのインターフェースでもよい。また、電話通信手段でもよいし、無線による移動体通信のための手段を用いることも好ましい。
【００７６】
さらに、送信装置１０は、一時鍵を生成するための一時鍵生成手段２２を備えている。この一時鍵生成手段２２は、乱数ｒを一時鍵として生成する乱数発生手段である。したがって、従来から知られている種々の乱数を発生する手段を用いることが可能である。処理速度の点から所定のハードウェアを用いて構成することが好ましいが、用途によっては乱数発生プログラムと、そのプログラムを実行するコンピュータから構成することも好ましい。
【００７７】
本実施の形態で特徴的なことは、この一時鍵生成手段２２が生成する一時鍵が、正規の送信者や受信者も知ることができないように隠されている点である。このように、正規の送信者や受信者ですら共有鍵の生成に使われる一時鍵（乱数）が何かを知ることができないので、本実施の形態では暗号強度を維持することが可能となる。詳細は後述する。
【００７８】
２  受信装置
図３には、本実施の形態に係る受信装置５０の構成ブロック図が示されている。この図に示すように、受信装置５０は、既に説明した上述した第１初期鍵ｋｉ１と、第２初期鍵ｋｉ２とを記憶する記憶手段５２を備えている。この第１初期鍵ｋｉ１と、第２初期鍵ｋｉ２とは、送信側の送信者と受信側の受信者とによって共有されている秘密の鍵である。
【００７９】
また、この記憶手段５２は、上記記憶手段１２と同様にデータを記憶できる各種装置を利用可能である。
【００８０】
また、受信装置５０は、第１初期鍵ｋｉ１又は第２初期鍵ｋｉ２による暗号化を実行する暗号化手段５４と、第１初期鍵ｋｉ１又は第２初期鍵ｋｉ２による復号化を実行する復号化手段５６と、を備えている。
【００８１】
暗号化手段５４は、上述した暗号化手段１４と同様のものである。また、復号化手段５６は、上述した復号化手段１６と同様のものであり、同様の動作を実行する。また、上述した暗号化手段１４と復号化手段１６と同様に、速い計算速度を実現するため、一般にハードウェア（ＬＳＩ等）で構成することが好ましい。本実施の形態において特徴的なことは、このハードウェア規模を減少させることができることであり、その結果、消費電力の低減を実現できることである。
【００８２】
なお、暗号化手段５４は、請求の範囲の受信側共有鍵生成手段の好適な一例に相当する。また、復号化手段５６は、請求の範囲の一時鍵復号化手段の好適な一例に相当する。
【００８３】
また、受信装置５０は、暗号化手段５４が暗号化した暗号文ｃを外部に送信し、外部から受信した暗号文ｃを復号化手段５６に供給する通信手段６０を備えている。この通信手段６０は、上述した通信手段２０と同様に従来から知られている種々の通信手段を用いることができる。このように受信装置５０は、一時鍵生成手段２２を備えていない点を除き、上記送信装置１０と同様の構成である。
【００８４】
なお、本実施の形態では、説明の便宜上、送信装置１０と受信装置５０に分けて説明しているが、実際には受信装置５０側にも一鍵生成手段２２を備えさせ、送信装置１０としても動作しうるように構成するのが一般には好ましい。その場合は、一時鍵ｒｉを生成する側が「送信装置」となり、他方が「受信装置」となる。
【００８５】
このように本実施の形態では、一時鍵ｒｉを生成する側を説明の都合上「送信装置」と呼び、他方を「受信装置」と呼んでいるが、両者にそれ以上の相違点はない。上で述べたように、いずれか一方の通信装置が一時鍵を生成すればよい。
【００８６】
本実施の形態において特徴的なことは、一時鍵ｒｉを送信者側も受信者側も知ることができない点である。このような特徴によって、送信者と受信者との間で共有鍵を安全に共有することができる。知ることができないとは、この一時鍵ｒｉを送信者や受信者に知らせるための特段の表示手段や報知の手段を備えていないことを意味する。
【００８７】
３  動作
図２及び図３に示された送信装置１０及び受信装置５０による通信の動作は、図１で示した動作と原理的には同様の動作である。
【００８８】
（１）通信を開始しようとする送信者は、送信装置１０を操作して一時鍵ｒｉを生成する。
【００８９】
本実施の形態において特徴的なことは、この乱数である一時鍵ｒｉが外部に公開されていないことである。このような構成によって、送信者と受信者との間で後述する共有鍵ｋｓを安全に共有することが可能となる。
【００９０】
（２）次に、この一時鍵ｒｉを暗号化手段１４で暗号化（ｃｉ１＝ｆｋｉ１（ｒｉ））し、暗号文ｃｉ１を得る（図２参照）。この暗号化で用いる鍵は第１初期鍵ｋｉ１である。また、このとき、一時鍵ｒｉは、外部には供給されず、送信者にも知らされない。
【００９１】
（３）このｃｉ１は、通信手段２０が、所定の通信路を介して受信者の受信装置５０に送信する。
【００９２】
（４）さらに、送信装置１０における暗号化手段１４は、一時鍵ｒｉを第２初期鍵ｋｉ２でも暗号化し、その結果を共有鍵ｋｓとして用いる。すなわち、ｋｓ＝ｆｋｉ２（ｒｉ）を計算するのである。このようにして得られた共有鍵ｋｓは、復号化手段１６にも供給され、以降、この秘密の共有鍵ｋｓを用いた暗号化通信が可能となる。
【００９３】
（５）一方、暗号文ｃｉ１が送られてきた受信装置５０においては、通信手段６０がこの暗号文ｃｉ１を受信する（図３参照）。通信手段６０は、この暗号文ｃｉ１を復号化手段５６に供給する。
【００９４】
（６）通信手段６０は、受信した暗号文ｃｉ１を復号化手段５６に供給する。
【００９５】
（７）復号化手段５６は、この暗号文ｃｉ１を第１初期鍵ｋｉ１を用いて復号化（ｒｉ＝ｆ−１ｋｉ１（ｃｉ））し、元の一時鍵ｒｉを得る。この一時鍵ｒｉは暗号化手段５４に供給される。このとき、一時鍵ｒｉは外部に公開はされない。そのため、送信者だけでなく受信者も一時鍵ｒｉを知ることはない。
【００９６】
本実施の形態において特徴的なことは、このように一時鍵ｒｉが、送信者にも受信者にも公開されていないことである。このような構成によって、送信者と受信者との間で安全に共有鍵ｋｓを共有することができ、この共有鍵ｋｓを用いた暗号通信を実行することが可能である。
【００９７】
（８）暗号化手段５４は、復号した一時鍵ｒｉを、第２初期鍵ｋｉ２を用いて暗号化することによって、共有鍵ｋｓを得る（ｋｓ＝ｆｋｉ２（ｒｉ））。
【００９８】
以上のような動作によって、送信者と受信者は、共通の秘密の共有鍵ｋｓを安全に得ることができた。以降は、この秘密の共有鍵ｋｓを用いて暗号化・復号化を行うことによって暗号通信を実行するとができる。秘密の共有鍵を用いた暗号通信は従来からよく知られているものであるため、ここでは詳細な説明は省略する。
【００９９】
４  暗号化・復号化
４−ａ  擬似コード
本実施の形態において用いている暗号化・復号化のアルゴリズムを説明する。
【０１００】
本実施の形態において用いている暗号化関数ｆｋ（ｐ）は、コンピュータコード風に記述すれば（擬似コードとも呼ぶ）、
ｆｋ（ｐ）：
ｆｏｒ  （ｊ＝０；  ｊ＜ｎ−１；  ｊ＋＋）  ｛
ｉｆ  （ｋ［ｊ］  ＝  ＝  １）  ｛
ｐ［ｊ］とｐ［ｊ＋１］を入れ替える。
【０１０１】
（ただしｐ［ｎ］はｐ［０］と読み替える）。
【０１０２】
｝
｝
となる。ここで、ｐは平文であり、上記処理後のｐが暗号文ｃとなる。また、ｋ［ｊ］は、鍵ｋのｊビット目を表す。鍵ｋはｎビットであるので、ｋ［０］〜ｋ［ｎ−１］までビットが存在する。また、ｐ［ｊ］は、平文ｐのｊビット目を表す。平文ｐはｎビットであるので、ｐ［０］〜ｐ［ｎ−１］までビットが存在する。
【０１０３】
上記コードは、変数ｊを初期値０から始め、インクリメント（＋１）していき、最終的にｊがｎ−２となるまで、次の処理を繰り返すものである。
【０１０４】
ここで言う次の処理とは、鍵ｋのｊビット目の値が「１」の場合に、平文ｐのｊビット目とｊ＋１ビット目の値を交換する処理である。この処理を順次ｊ＝０〜ｎ−２の間で繰り返し、処理が終了した場合に、最終的に得ようとする暗号文ｃが完成する。
【０１０５】
また、本実施の形態において用いている復号化関数ｆ−１ｋ（ｃ）は、上記暗号化関数ｆｋと処理的にはまったく同様である。すなわちコンピュータコード風に記述すれば（擬似コードとも呼ぶ）、
ｆ−１ｋ（ｃ）：
ｆｏｒ  （ｊ＝０；  ｊ＜ｎ−１；  ｊ＋＋）  ｛
ｉｆ  （ｋ［ｊ］  ＝  ＝  １）  ｛
ｃ［ｊ］とｃ［ｊ＋１］を入れ替える。
【０１０６】
（ただしｃ［ｎ］はｃ［０］と読み替える）。
【０１０７】
｝
｝
となる。ここで、ｃは暗号文であり、上記処理後のｃが原文（平文）であるｐとなる。したがって、図２や図３の例では、暗号化手段１４、５４と、復号化手段１６、５６とを別体に表したが、共通のハードウェアを用いることも可能である。ただし、送信と受信とを同時に実行することを可能にするためには、暗号化と復号化にそれぞれ専用のハードウェアを備えさせた方が好ましい。
【０１０８】
なお、本実施の形態においては上記のような暗号化・復号化のアルゴリズムを用いているが、従来から知られている他のアルゴリズムを用いることももちろん好ましい。
【０１０９】
４−ｂ  ハードウェアの実際
図４には、上記４−ａで述べた暗号関数を処理するための暗号化手段１４（又は復号化手段１６）のハードウェアの構成概念図が示されている。この図に示すように、暗号化手段１４は、３個のｎビットレジスタから構成される。まず、暗号化手段１４は、暗号化の鍵ｋを格納する鍵レジスタ１４ａを備えている。この鍵レジスタ１４ａには、鍵の各ビットｋ１、ｋ２、ｋ３、・・・、ｋｎが格納されている。また、暗号化手段１４は、データレジスタ１４ｂと、テンポラリーレジスタ１４ｃとを備えている。これらもまたｎビットのレジスタである。
【０１１０】
暗号化を行うには、このデータレジスタ１２ｂに平文ｐをまず格納する。すなわち、データレジスタ１２ｂの各ビットＤ１、Ｄ２、Ｄ３、・・・Ｄｎには、それぞれ、平文ｐの各ビットｐ１、ｐ２、ｐ３・・・ｐｎが格納される。データレジスタ１２ｂはいわゆるシフトレジスタを構成しており、図４の左方向から平文ｐの各ビットがシリアルにデータレジスタに読み込まれる。
【０１１１】
次に、上述したように、鍵ｋの各ビットの値に基づき、その値が「１」であれば対応する平文ｐの２ビットを交換していく。この交換は、既に擬似コードで説明したように、ｋ１ビットに対応する平文ｐの２ビットから開始し、以下順次、ｋ２、ｋ３・・・ｋｎまで順次交換が行われる。
【０１１２】
このビットの交換処理は、いずれか一方のビットをテンポラリーレジスタ１２ｃに退避し、他方のビットを一方のビットに移動させ、最後に、退避していたビットの値を他方のビットに移動させることによって行われる。このようにテンポラリーレジスタ１２ｃはビット交換の際の一時退避場所として用いられる。
【０１１３】
４−ｃ  ハードウェア量
上記図４に示すような暗号化回路に必要なゲート数を算出する。ゲート数はその回路をＬＳＩ等で構成した場合の規模の目安となるよい基準であるので、このゲート数によって回路規模のおおよその目安を付けることが可能である。
【０１１４】
ここでは、鍵ｋや平文ｐのビット長ｎが１２８ビットである場合について求める。
【０１１５】
まず、鍵レジスタ１２ａは、１ビットを保持するのに４ゲートでフリップフロップを構成する必要がある。そこで、４ゲート×１２８ビットとなり、この結果５１２ゲート必要となる。次にデータレジスタ１２ｂは、同様の理由で、４ゲート×１２８ビットとなり、この結果５１２ゲート必要となる。またテンポラリーレジスタ１２ｃは図４では１２８ビット分必要であるかのように記載したが、交換は、一度にたかだか１ビットしか行われない。そこで、テンポラリーレジスタ１２ｃは実質的には１ビットのみ保持できればよく、その結果４ゲート必要となる。
【０１１６】
以上のようにして、図４のハードウェアの場合は、必要な総ゲート数は合計１０２８ゲート（＝５１２＋５１２＋４）となる。
【０１１７】
これに対して、上述した非特許文献３等によれば、ＡＥＳに利用される半導体集積回路（ＬＳＩ）は約１５，０００ゲート程度の規模である。したがって、本実施の形態によれば、従来の暗号方式と比べて回路規模を小さくすることができ、センサネットワークのように、非常に小さい装置にも実装可能な暗号方式を実現することが可能である。
【０１１８】
また、回路規模が小さいことに伴って、消費電力の低減も図ることが可能となる。
【０１１９】
第３章  暗号強度
一般に暗号の強度で問題になるのは
・選択平文攻撃（任意のメッセージを与えその暗号文から鍵を推定する）
・選択暗号文攻撃（任意の暗号文を与えその対応する平文から鍵を推定する）
である。しかし、上述したように、本実施の形態においては、送信者はハードウェアで生成される乱数（一時鍵ｒｉ）を知ることができず、受信者もハードウェアで復号される乱数（一時鍵ｒｉ）を知ることはできない。
【０１２０】
したがって、第三者は、上記いずれの攻撃も本暗号方式に適用することはできない。さらに、その乱数（一時鍵ｒｉ）から最終的に生成される共有鍵ｋｓは、万が一盗聴者に盗聴され、その内容が知られてしまった場合でも、生成の元となった乱数（一時鍵ｒｉ）を知ることができなければ、やはり上記の攻撃はいずれも不可能である。
【０１２１】
一回の通信における暗号方式は上記「選択平文攻撃」や「選択暗号文攻撃」にそれほど強くなくても、２つの暗号を組み合わせることによって、いずれの攻撃に対しても強い暗号を実現することが可能となったのである。
【０１２２】
なお、この２つの暗号を組み合わせた場合、盗聴者が得ることができる可能性のある情報は、乱数（一時鍵（ｒｉ）を暗号化して受信者に送付する際に通信路に現れるコード、すなわちＣｉ１（＝ｆｋｉ１（ｒｉ））と、共有鍵ｋｓと、である。ここで、共有鍵ｋｓ自体は、メッセージを盗聴者が生成して選択平文攻撃が成功すれば得ることができる。
【０１２３】
そして、本実施の形態並びに本発明において重要な点は、知る可能性のあるこの二個の情報（ｆｋｉ１（ｒｉ）、及び、共有鍵ｋｓ）はいずれもシステムが自動生成するコードであり、盗聴者は任意に選ぶことはできないという点である。
【０１２４】
このような構成によって、盗聴者が実行できる攻撃は、一般には既知平文攻撃のみとなる。この既知平文攻撃とは、与えられたメッセージに対する暗号文から鍵を推定する攻撃手法である。したがって、このように２種の暗号を合わせた結果、既知平文攻撃だけを検討し、対応すれば、暗号通信は安全なものとなる。
【０１２５】
さて、共有鍵暗号方式の代表的な例であるＲＳＡもＡＥＳも「選択平文攻撃」や「選択暗号文攻撃」に対する強度を高めるために極めて複雑な処理をしている。これに対して、本実施の形態及び本発明の手法によれば、個々の暗号回路はそのいずれの強度も保障する必要がなくなるというメリットを有している。
【０１２６】
このようなメリットが得られるための条件は、「暗号方式を２個組み合わせた結果が既知暗号文攻撃に強いこと」という条件のみである。この条件は、演算が可換でなければ容易に達成できる。
【０１２７】
したがって、上述した例においては、例としてビットの交換をする暗号処理を説明した。このビットの交換は、排他的論理和を取るという暗号処理と同様に極めてシンプルに構成できるので、本実施の形態によれば、結果的に回路が小型化できるという効果が得られよう。なお、ビットの交換をする暗号処理の場合は、ハードウェアの大部分は、排他的論理和でも交換でもなく、データを一時的に退避するためのレジスタになります。
【０１２８】
第４章  コンピュータ及びプログラムによるインプリメント
図２及び図３に記載した例では、暗号化手段１４、５４、復号化手段１６、５６等がＬＳＩなどのハードウェアで構成される例を説明したが、用途によっては、図２や図３に記載の構成を、コンピュータ及びそのコンピュータが実行するプログラムで実現することも好ましい。
【０１２９】
コンピュータには、ハードディスク等の記憶手段が備えられている場合が多い。したがって、このハードディスク等を、記憶手段１２、５２として用いることが可能である。第１初期鍵ｋｉ１や、第２初期鍵ｋｉ２の安全な保管のために、記憶手段１２、５２を可搬型の記憶媒体を用いて構成することも好ましい。例えば、フラッシュメモリにこれらの鍵を格納しておき、使用する毎にコンピュータに接続し、使用しない場合は、別途金庫の中等に保管しておくことも場合によっては好ましいであろう。もちろんこのような場合も本発明の技術的範囲に属することは言うまでもない。
【０１３０】
また、プログラムによって、暗号化手段１４、５４や復号化手段１６、５６を実現することも容易である。第３章において擬似コードでこれら暗号化手段１４、５４や復号化手段１６、５６の動作を記述したが、この記述をプログラムとしてコンピュータに実行させることが好ましい。このようにすれば、コンピュータが、暗号化手段１４、５４や復号化手段１６、５６として動作するので、送信装置１０や受信装置５０を容易に実現可能である。
【０１３１】
また、一般にコンピュータは、外部との通信手段を備えている。例えば、インターネットと接続する手段、ＬＡＮ（ローカルエリアネットワーク）と接続する手段、その他種々の通信手段を備えているので、これらを用いて通信手段２０、６０を構成することは容易である。
【０１３２】
さらに、乱数を発生することは、コンピュータの基本的な機能の一種として昔から使用されている。コンピュータ言語の中には乱数を発生する関数を有するものもあり、また、乱数をコンピュータ上で乱数を発生するアルゴリズムも大昔から知られている。したがって、コンピュータに乱数を発生させるプログラムを作成することは容易である。その結果、乱数発生手段である一時鍵発生手段２２、６２をコンピュータ及びその実行するプログラムから構成することは容易である。
【０１３３】
動作
以上のようなプログラムに基づき、コンピュータは暗号通信を以下のように実行する。
【０１３４】
（１）まず、送信側のコンピュータは乱数発生プログラムを実行し、所定のｎビットの乱数を生成し、一時鍵ｒｉを生成する。
【０１３５】
（２）次に、送信側のコンピュータは、この一時鍵ｒｉを暗号化プログラムを実行し、第１初期鍵ｋｉ１を用いて暗号化（ｃｉ１＝ｆｋｉ１（ｒｉ））し、暗号文ｃｉ１を得る。第１初期鍵は予めハードディスク等の記憶手段に格納しておく。
【０１３６】
また、このとき、一時鍵ｒｉは、外部には供給されず、送信者にも知らされない。この手順は、請求の範囲の送信側一時鍵暗号化手順の好適な一例に相当する。
【０１３７】
（３）この暗号文ｃｉ１は、送信側のコンピュータが所定の通信インターフェースを利用して所定の通信路を介して相手方に送信する。
【０１３８】
（４）さらに、送信側のコンピュータは一時鍵ｒｉを第２初期鍵ｋｉ２でも暗号化し、その結果を共有鍵ｋｓとして用いる。すなわち、暗号化プログラムを実行してｋｓ＝ｆｋｉ２（ｒｉ）を計算するのである。この第２初期鍵ｋｉ２もハードディスク等所定の記憶手段に格納しておく。この動作は、請求の範囲の送信側共有鍵生成手順の好適な一例に相当する。また、このようにして得られた共有鍵ｋｓは、以降の暗号通信の復号にも用いるべく、所定の記憶手段に格納しておく。
【０１３９】
（５）一方、暗号文ｃｉ１が送られてきた受信側のコンピュータは、所定の通信インターフェースを用いて上記暗号文ｃｉ１を受信する。受信した暗号文ｃｉ１を復号化手段５６に供給する。
【０１４０】
（６）受信側のコンピュータは、復号化プログラムを実行し、受信した暗号文ｃｉ１を第１初期鍵ｋｉ１を用いて復号化（ｒｉ＝ｆ−１ｋｉ１（ｃｉ））し、元の一時鍵ｒｉを得る。第１初期鍵ｋｉ１は、予めハードディスク等の所定の記憶手段に格納しておく。この動作は、請求の範囲の一時鍵復号化手順の好適な一例に相当する。
【０１４１】
（７）受信側のコンピュータは、暗号化プログラムを実行し、復号した一時鍵ｒｉを、第２初期鍵ｋｉ２を用いて暗号化することによって、共有鍵ｋｓを得る（ｋｓ＝ｆｋｉ２（ｒｉ））。この第２初期鍵ｋｉ２も、予めハードディスク等所定の記憶手段に格納しておく。この動作は、請求の範囲の受信側共有鍵生成手順の好適な一例に相当する。
【０１４２】
また、受信側コンピュータは得られた共有鍵ｋｓを、以降の暗号通信に用いるため、所定の記憶手段に格納しておく。
【０１４３】
以上のような動作によって、送信側のコンピュータと、受信側のコンピュータは、共通の秘密の共有鍵ｋｓを得ることができた。以降は、この秘密の共有鍵ｋｓを用いて暗号化・復号化を行うことによって暗号通信を実行するとができる。  
なお、上述の実施の形態では、送信者も受信者も一時鍵ｒｉを知ることがない構成を説明したが、場合によっては、送信者や受信者が一時鍵ｒｉを知ることができる構成を採用してもよい。盗聴者となりうる第三者に知られないことが達成できれば、暗号強度を維持できるので、一定の要件の下で、送信者や受信者が一時鍵ｒｉを知ることができるような構成も、本特許の技術的範囲に含まれる。  
ただし、一般的には、この一時鍵は通信の度に生成される文字通り一時的なものであるため、送信者や受信者が知る必要性は少ない。そのため、一般的には、先に述べたように、送信者も受信者も一時鍵ｒｉを知ることができないように構成することが好ましく、また便利な場合が多いであろう。
【０１４４】
第５章  共有鍵の生成処理（Key Laundering）の変形例
上記第１章〜第４章において述べた共有鍵Ｋｓｉの生成処理の変形例を説明する。
【０１４５】
１．鍵の長さ
まず、第１章においては、共にｎビットの第１初期鍵ｋｉ１、第２初期鍵ｋｉ２を用いたが、本章では、長さの異なる鍵を使用する
第１初期鍵ｋｉ１：２ｎビットの鍵
第２初期鍵ｋｉ２：ｎビットの鍵
共有鍵Ｋｓｉ    ：ｎビットの鍵
ここで、ｎは、正の整数であり、第１章と同様に送信対象のメッセージｍｉのビット数と等しい数である。
【０１４６】
２．暗号化関数
第１章〜第４章で述べた暗号化関数ｆｋは、第１初期鍵ｋｉ１第２初期鍵ｋｉ２共に同じ関数を用いていた（例えば鍵との排他的論理和を取る等）。しかし、本章では、第１初期鍵ｋｉ１を用いた暗号化関数ｆｋｉ１と、第２初期鍵ｋｉ２を用いた暗号化関数ｆｋｉ２とは異なる形の関数を採用する。
【０１４７】
本章では、上記第１章〜第４章と区別するために、特に第１初期鍵ｋｉ１を用いた関数ｆｋｉ１を「Ｅ１」と記し、第２初期鍵ｆｋｉ２を用いた関数ｆｋｉ２を「Ｅ２」と記す。
【０１４８】
３．送信者側の処理・受信者側の処理
３−ａ．
送信者側においては、一時鍵ｒｉを、関数Ｅ１で暗号化し、得られた暗号文Ｃｉ１を受信者側に送信する。また、送信者側においては、一時鍵ｒｉを、関数Ｅ２で暗号化し、共通鍵Ｋｓｉを得る。
【０１４９】
受信者側においては、暗号文Ｃｉ１を、関数Ｅ１の逆関数Ｅ１−１で復号し、一時鍵ｒｉを得る。さらに、受信者側においては、一時鍵ｒｉを、関数Ｅ２で暗号化し、共通鍵Ｋｓｉを得る。
【０１５０】
以上のような処理によって送信者と受信者とは共通鍵ｋｓｉを共有することができる。この動作自体は、上記第１章〜第４章と同様である。
【０１５１】
３−ｂ．  Ｅ１、Ｅ２の内容
関数Ｅ１
受信者側においては、送信されてきたＣｉ１に対して逆関数Ｅ１−１を適用する。この逆関数Ｅ１−１のテーブルの一例を図６に示す。
【０１５２】
図６においては、第１初期鍵ｋｉ１が４ビット（すなわちｎ＝２）の例を示す。そして、逆関数Ｅ１−１は、
（１）鍵の前半の２ビットを加算する。
【０１５３】
（２）鍵の後半の２ビットを排他的論理和する。
【０１５４】
と言う、算術演算（加算）と、論理演算（排他的論理和）とを順に適用する関数である。
【０１５５】
図６には、送信されてきた２ビットの暗号文Ｃｉ１が、この逆関数Ｅ１−１」によってどのように変換されるかを示すテーブルが示されている。このテーブルは、２ビットの空間から２ビットの空間への写像を表すことは言うまでもない。
【０１５６】
例えば、このテーブルの最上段の例では、第１初期鍵ｋｉ１が「００００」である場合の写像が示されている。この第１初期鍵ｋｉ１の前半の２ビット「００」が送信されてきたＣｉ１に加算され、次に後半の２ビットである「００」との排他的論理和が取られる。
【０１５７】
その結果、「００、０１、１０、１１」という２ビット空間は、「００、０１、１０、１１」という空間に写像（マッピング）される。
【０１５８】
なお、図６において、第１初期鍵ｋｉ１が「００００」である場合の写像において、「＋：００、ＸＯＲ：００」は、第１初期鍵ｋｉ１の前半２ビットである「００」を算術的に加算し、後半の２ビットである「００」を排他的論理和することを意味する。その他の表示も同様である。
【０１５９】
ところで、最上段に示されているように、第１初期鍵ｋｓｉが「１０１０」の場合も、この逆関数Ｅ１−１は「００００」の場合と同様の写像となる。
【０１６０】
第１初期鍵ｋｉ１は４ビットであるので、１６通りの値を取りうるが、同じ写像となる鍵が本実施の形態では２個ずつ存在するので、結果として８種類の写像が存在することになる。したがって、図６のテーブルでは、８種類の写像が示されているのである。
【０１６１】
受信者側では、送信側から送られてきたＣｉ１（＝Ｅ１（ｒｉ））を上記逆関数Ｅ１−１で復号し、ｒｉを復元する。上で説明したように、このｒｉに関数Ｅ２（ｆｋｉ２）を適用すれば、送信側と共通の共有鍵ｋｓｉを得ることができる。
【０１６２】
関数Ｅ２
関数Ｅ２のテーブルの一例を図７に示す。
【０１６３】
図７においては、第２初期鍵ｋｉ２が２ビット（すなわちｎ＝２）の例を示す。そして、関数Ｅ２は、
（１）鍵の２ビットに基づき、ビットの置き換えを行う。
【０１６４】
（２）鍵の２ビットを排他的論理和する。
【０１６５】
と言う、演算を順に適用する関数である。
【０１６６】
ビットの置き換え
ここで、ビットの置き換え（Ｐｅｒｍｕｔａｔｅ）は、以下のような演算である。
【０１６７】
ｊ  ＝  １  ｔｏ  ｎ  まで下記処理を繰り返す。
【０１６８】
Ｉｆ  ｊ＜＞ｎ  
ｔｈｅｎ  Ｉｆ  ｋ（ｊ）＝１
ｔｈｅｎ  ｍ（ｊ）  ＜−＞  ｍ（ｊ＋１）
Ｉｆ  ｋ（ｊ）＝０
ｔｈｅｎ  ｄｏ  ｎｏｔｈｉｎｇ  （何もしない）
Ｉｆ  ｊ＝ｎ
ｔｈｅｎ  Ｉｆ  ｋ（ｊ）＝１
ｔｈｅｎ  ｍ（ｊ）  ＜−＞  ｍ（１）
Ｉｆ  ｋ（ｊ）＝０
ｔｈｅｎ  ｄｏ  ｎｏｔｈｉｎｇ  （何もしない）
ｅｎｄ
なお、ここで、ｋ（ｊ）は、鍵のｊビット目を意味する。図７の例では、第２初期鍵ｋｉ２が２ビットの例を示しているので、ｋ（１）と、ｋ（２）とがある。また、ｍ（ｊ）は、演算対象であるメッセージのｊビット目を意味する。図７の例では、２ビットの例を示しているので、ｍ（１）と、ｍ（２）とがある。さらに、また、＜−＞は、ビットの置き換え（ビットの値の交換）を表す。
【０１６９】
例えば、ｍ（１）が「０」であり、ｍ（２）が「１」の場合、これらを置き換え（Ｐｅｒｍｕｔａｔｅ）すると、ｍ（１）は、「１」となり、ｍ（２）は「０」となる。
【０１７０】
図７には、２ビットのデータが関数Ｅ２によってどのように変換されるかを示すテーブルが示されている。このテーブルは、２ビットの空間から２ビットの空間への写像を表すことは言うまでもない。
【０１７１】
例えば、このテーブルの中間段階ｐ（ｋ２）の最上段の例では、第２初期鍵ｋｉ２が「００」である場合の写像が示されている。この場合、第２初期鍵ｋｉ２の全ビットが０であるので、置き換えは一切行われない。そのため、中間段階であるＰ（ｋ２）においては、恒等写像となっている。
【０１７２】
なお、第２初期鍵ｋｉ２が「１１」の場合も、中間段階であるｐ（ｋ２）においては、恒等写像となる。これは、第２初期鍵ｋｉ２の第１ビット目が「１」であるので、メッセージの第１ビットｍ（１）と、第２ビットｍ（２）とが交換される。さらに第２初期鍵ｋｉ２の第２ビット目も「１」であるので、メッセージの第２ビットｍ（２）と、第１ビットｍ（１）とが交換される。この結果、図７の中間段階であるｐ（ｋ２）においては恒等写像となり、第２初期鍵ｋｉ２が「００」の場合と同様である。なお、図７において、Ｐｅｒｍｕｔａｔｅ：ＸＸは、鍵「ＸＸ」に基づく置き換え（ビットの交換）を意味し、例えば、Ｐｅｒｍｕｔａｔｅ：００は、鍵「００」に基づく置き換え処理を意味する。
【０１７３】
さて、図７の中間段階ｐ（ｋ２）の２段目には第２初期鍵ｋｉ２が「１０」及び「０１」の場合の例が示されている。これらの中間段階ｐ（ｋ２）は同様の中間結果となる。
【０１７４】
排他的論理和
次に、関数Ｅ２は、上記置き換えの後、同じく第２初期鍵ｋｉ２による排他的論理和を取る。この動作が図中ＸＯＲ：ＸＸで示されており、鍵ＸＸと排他的論理和を取る処理を意味する。例えば、ＸＯＲ：００は、鍵「００」を、処理対象であるメッセージと排他的論理和を取る処理である。
【０１７５】
この結果、図７のＥ２（ｋ２）の第１段目には第２初期鍵ｋｉ２が「００」である場合の変換後のメッセージの内容が示されている。ここに示されているのは、２ビット空間から２ビット空間への写像であることは言うまでもない。同様に、第２段目には第２初期鍵ｋｉ２が「１１」である場合の写像が示されている。同様に、第３段目、第４段目には、第２初期鍵ｋｉ２が「０１」「１１」の場合の写像が示されている。
【０１７６】
共有鍵Ｋｓｉの生成
さて、受信側では、送信側から送られてきたＣｉ１を、これまで説明した逆関数Ｅ１−１を適用し、さらに関数Ｅ２を適用すれば、共有鍵Ｋｓｉが得られる。この逆関数Ｅ１−１と、関数Ｅ２によるトータルの写像の結果が図８に示されている。
【０１７７】
鍵のエントロピー
さて、Ｅ１、Ｅ２にこのような関数を採用した場合、鍵の選択によっては、同じ写像となってしまう場合がある。そこで、鍵のエントロピーの値がどの程度に成るのかを知ることは暗号強度を検討する上で重要である。以下、エントロピーの値が、第１初期鍵ｋｉ１のエントロピーと第２初期鍵ｋｉ２のエントロピーのいずれか小さい方、すなわち、ｍｉｎ（Ｈ（ｋｉ１）、Ｈ（ｋｉ２））より大きいことを示す。
【０１７８】
この実施例では、ｎ＝２であり、第１初期鍵ｋｉ１は、２ｎ、すなわち４ビットであり、第２初期鍵ｋｉ２は、ｎ、すなわち２ビットであることを思い出されたい。
【０１７９】
まず、第１初期鍵ｋｉ１のエントロピーＨ（ｋｉ１）を求めよう。
【０１８０】
図６で既に示したように、４ビットの第１初期鍵ｋｉ１に関し取りうる写像は８種類である。そのため、
Ｈ（ｋｉ１）  ＝  （−（２／２４）ｌｏｇ２（２／２４））×８  
＝   ３
となる。
【０１８１】
次に、第２初期鍵ｋｉ２のエントロピーＨ（ｋｉ２）を求めよう。
【０１８２】
図７で既に示したように、２ビットの第２初期鍵ｋｉ１に関し取りうる写像は４種類ある。そのため、
Ｈ（ｋｉ２）  ＝  （−（２／２３）ｌｏｇ２（２／２３））×４  
＝   ２
となる。したがって、ｍｉｎ（Ｈ（ｋｉ１）、Ｈ（ｋｉ２））は、２ビットである。
【０１８３】
次に、全体の処理におけるエントロピーＨ（ｋｉ１、ｋｉ２）を求めよう。
【０１８４】
図８で既に示したように、合計６ビットの「第１初期鍵ｋｉ１と第２初期鍵ｋｉ２」に関し取りうる写像は２４種類ある。そのため、
Ｈ（ｋｉ１、ｋｉ２）  
＝  （−（２／２６）ｌｏｇ２（２／２６））×２４  
＝   ４．５
以上のことから、
Ｈ（ｋｉ１、ｋｉ２）＝４．５  ＞  ２＝ｍｉｎ（Ｈ（ｋｉ１）、Ｈ（ｋｉ２））と言える。
【０１８５】
４．処理の実例
上記３．では、送信側及び受信側の基本的な動作を説明した。この動作においては算術加算「＋」が用いられているが、実際に処理を行う場合、処理速度を向上させるために、部分加算を実行することが好ましい。以下、そのような動作を具体的に説明する。
【０１８６】
４−ａ．  送信者側
送信者側の動作を説明する。コンピュータの擬似コード風にアルゴリズムを記述する。
【０１８７】
Ｓｔｅｐ１．  乱数ｒｉの生成。
【０１８８】
Ｓｔｅｐ２．
ｉｆ  （ｎが偶数）｛
ｆｏｒ  （ｐ＝０；  ｐ  ＜  ｎ；  ｐ＝ｐ＋２）
ｒｉ１［ｐ：ｐ＋１］  ←  ｒｉ［ｐ：ｐ＋１］  ＋  ｋ１［ｐ：ｐ＋１］  
（ここで、ｒｉ［ｐ＋１］  ＋  ｋ１［ｐ＋１］のキャリーは無視する）
｝
ｅｌｓｅ  ｉｆ  （ｎが奇数）  ｛
ｒｉ１［０］  ←  ｒｉ１［０］  ＋  ｋ１［０］  （キャリーは無視する）
ｆｏｒ  （ｐ＝１；  ｐ  ＜  ｎ；  ｐ＝ｐ＋２）
ｒｉ１［ｐ：ｐ＋１］  ←  ｒｉ［ｐ：ｐ＋１］  ＋  ｋ１［ｐ：ｐ＋１］
（ここで、ｒｉ［ｐ＋１］  ＋  ｋ１［ｐ＋１］のキャリーは無視する）
｝
このような処理によって、乱数ｒｉから、中間変数ｒｉ１を生成する。このような加算の動作は図９にも示されている。上記コード及び図９に示すように、２ビットずつまとめて加算が行われる。２ビットを超えるキャリーは無視する。
【０１８９】
Ｓｔｅｐ３．ｃｉ１  ←  ｒｉ１  ＥＸＯＲ  ｋ１［ｎ：２ｎ−１］．
乱数ｒｉ１と、第１初期鍵ｋｉ１のビットとをそれぞれ排他的論理和を取り、得られた数をｃｉ１に入れる。このｃｉ１は、受信者側に送信される。
【０１９０】
Ｓｔｅｐ４．    
ｆｏｒ  （ｐ＝０；  ｐ  ＜  ｎ；  ｐ＋＋）  ｛
ｉｆ（ｋ２［ｐ］  ＝  ＝  １）｛
ｒｉ２［ｐ］      ＜−  ｒｉ［ｐ＋１］
ｒｉ２［ｐ＋１］  ＜−  ｒｉ［ｐ］
（ｒｉ２［ｎ］  はｒｉ２［０］であることに注意）
｝
｝
Ｓｔｅｐ６．  共有鍵Ｋｓｉにｒｉ２を代入する。
【０１９１】
このようにして、乱数ｒｉから、中間変数ｒｉ２を生成する。
【０１９２】
以上のようにして、送信者側のＫｅｙ  Ｌａｕｎｄｅｒｉｎｇ処理が行われ、共有鍵ｋｓｉが得られる。
【０１９３】
４−ｂ．  受信者側
受信者側の動作を説明する。コンピュータの擬似コード風にアルゴリズムを記述する。ｃｉ１は、送信者側から送信されてきたメッセージである。
【０１９４】
Ｓｔｅｐ１．  ｒｉ１  ←  ｃｉ１  ＥＸＯＲ  ｋ１［ｎ：２ｎ−１］．
このような処理によって、受信したメッセージｃｉ１から中間変数ｒｉ１を作成する。
【０１９５】
Ｓｔｅｐ２．  
ｉｆ  （ｎが偶数）  ｛
ｆｏｒ  （ｐ＝０；  ｐ  ＜  ｎ；  ｐ＝ｐ＋２）
ｒｉ［ｐ：ｐ＋１］  ←  ｒｉ１［ｐ：ｐ＋１］  −  ｋ１［ｐ：ｐ＋１］
｝
ｅｌｓｅ  ｉｆ  （ｎが奇数）  ｛
ｒｉ［０］  ←  ｒｉ１［０］  −  ｋ１［０］
ｆｏｒ  （ｐ＝１；  ｐ  ＜  ｎ；  ｐ＝ｐ＋２）
ｒｉ［ｐ：ｐ＋１］  ←  ｒｉ１［ｐ：ｐ＋１］  ＋  ｋ１［ｐ：ｐ＋１］
｝
このような処理によって、ｒｉ１から乱数ｒｉを作成する。
【０１９６】
上記ステップ２の減算は、図１０にも示されている。上記コード及び図１０に示すように、２ビットずつまとめて減算が行われる。２ビットを越えるキャリー（ボロー）は無視する。
【０１９７】
Ｓｔｅｐ３．
ｆｏｒ  （ｐ＝０；  ｐ＜ｎ−１；  ｐ＋＋）  ｛
ｉｆ  （ｋ２［ｐ］  ＝  ＝  １）  ｛
ｒｉ２［ｐ］      ＜−  ｒｉ［ｐ＋１］
ｒｉ２［ｐ＋１］  ＜−  ｒｉ［ｐ］
（ここで、ｒｉ［ｎ］はｒｉ［０］であることに注意）
｝
｝
（＃このような処理によって、中間変数ｒｉ２をｒｉから作成する）
Ｓｔｅｐ４．  ｋｓｉにｒｉを代入
以上のようにして、受信者側のＫｅｙ  Ｌａｕｎｄｅｒｉｎｇ処理が行われ、共有鍵ｋｓｉが得られる。なお、「＋＋」は、インクリメント、すなわち＋１する動作を意味する。
【図面の簡単な説明】
【０１９８】
【図１】本実施の形態の原理を説明する説明図である。
【図２】本実施の形態の送信装置の構成ブロック図である。
【図３】本実施の形態の受信装置の構成ブロック図である。
【図４】暗号化手段の構成概念図
【図５】盗聴者が選択平文攻撃を起こす場合の動作の概念図である。
【図６】逆関数Ｅ１−１のテーブルを表す図である。
【図７】関数Ｅ２のテーブルを表す図である。
【図８】逆関数Ｅ１−１と、関数Ｅ２によるトータルの写像の結果を示す説明図である。
【図９】第５章で説明する送信側における加算の具体的な動作の説明図である。
【図１０】第５章で説明する送信側における減算の具体的な動作の説明図である。
【符号の説明】
【０１９９】
１０  送信装置
１２  記憶手段
１４  暗号化手段
１４ａ  鍵レジスタ
１４ｂ  データレジスタ
１４ｃ  テンポラリーレジスタ
１６  復号化手段
２０  通信手段
５０  受信装置
５２  記憶手段
５４  暗号化手段
５６  復号化手段
６０  通信手段
【図１】
2006254417.tif 000003
【図６】
2006254417.tif 000004
【図７】
2006254417.tif 000005
【図８】
2006254417.tif 000006
【図９】
2006254417.tif 000007
【図１０】
2006254417.tif 000008
【図２】
2006254417.tif 000009
【図３】
2006254417.tif 000010
【図４】
2006254417.tif 000011
【図５】
2006254417.tif 000012