(57)【要約】【課題】処理するデータのレングスが長く、複数回暗号演算を行わなければならない通信装置においても、送受信バッファの容量を抑え、かつ、通信回数の増大を抑えることを目的とする。【解決手段】暗号通信装置Ａの送信バッファＡと暗号通信装置Ｂの受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの数をＮとする。暗号通信装置Ａの制御部２０２は、送信データの先頭からＮ個のブロックごとに切り出したデータを送信バッファＡへ順次入力し、未入力のデータがブロックＮ個分の大きさより大きくても容量の小さいバッファに格納できる大きさとなった場合、当該データを送信バッファＡへ一度に入力する。暗号通信装置Ａの通信部２０１は、送信バッファＡへデータが入力される度に、当該データを送信バッファＡから暗号通信装置Ｂへ送信する。【選択図】図１
2010016526.tif 000002
【特許請求の範囲】
【請求項１】
データを他の通信装置へ送信して、前記他の通信装置に対し、当該送信データを一定の大きさのブロックごとに分けて行う所定の処理をさせる通信装置であって、
送信バッファＡと、
前記送信バッファＡと前記他の通信装置が備える受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの数をＮとし、前記送信データの先頭からＮ個のブロックごとに切り出したデータを前記送信バッファＡへ順次入力し、前記送信データのうち、前記送信バッファＡに未入力のデータがブロックＮ個分の大きさより大きくても前記容量の小さいバッファに格納できる大きさとなった場合、当該データを前記送信バッファＡへ一度に入力する制御部と、
前記制御部から前記送信バッファＡへデータが入力される度に、当該データを前記送信バッファＡから前記他の通信装置へ送信する通信部とを備えることを特徴とする通信装置。
【請求項２】
前記制御部は、前記容量の小さいバッファに格納できるブロックの最大数をＮとすることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記通信装置は、さらに、
前記送信バッファＡの容量を予め記憶するメモリを備え、
前記制御部は、前記他の通信装置から前記受信バッファＢの容量を通知され、前記メモリに記憶された送信バッファＡの容量と前記他の通信装置から通知された受信バッファＢの容量とのうち、最小値をブロック１個分の大きさで除算してＮを求めることを特徴とする請求項１又は２に記載の通信装置。
【請求項４】
前記制御部は、前記送信バッファＡへ入力するデータのフォーマットに、当該データに含まれるブロックの数と当該データの大きさをブロック１個分の大きさで除算した場合の端数とを示す制御情報を含めることを特徴とする請求項１から３までのいずれかに記載の通信装置。
【請求項５】
前記所定の処理は、ブロック暗号による暗号化処理であり、
前記通信装置は、さらに、
受信バッファＡを備え、
前記制御部は、前記送信バッファＡと前記受信バッファＡと前記受信バッファＢと前記他の通信装置が備える送信バッファＢとのうち、容量の最も小さいバッファに格納できるブロックの最大数をＮとし、
前記通信部は、前記他の通信装置へ送信したデータが前記他の通信装置で暗号化され、前記他の通信装置から当該データが送信される度に、当該データを前記受信バッファＡで受信し、
前記制御部は、前記受信バッファＡでデータが受信される度に、当該データを前記受信バッファＡから出力し、当該データを連結して前記送信データの暗号化データを生成することを特徴とする請求項１から４までのいずれかに記載の通信装置。
【請求項６】
請求項１から５までのいずれかに記載の通信装置と前記他の通信装置とを有する暗号通信システムであって、
前記他の通信装置は、前記通信装置からデータが送信される度に、当該データを前記受信バッファＢで受信し、当該データを前記受信バッファＢから出力し、当該データをブロック暗号により順次暗号化し、当該データを前記通信装置へ送信することを特徴とする暗号通信システム。
【請求項７】
請求項１から４までのいずれかに記載の通信装置と前記他の通信装置とを有する暗号通信システムであって、
前記他の通信装置は、前記通信装置からデータが送信される度に、当該データを前記受信バッファＢで受信し、当該データを前記受信バッファＢから出力し、当該データをブロック暗号により検証して、前記送信データの真偽を判定し、当該判定結果を前記通信装置へ通知することを特徴とする暗号通信システム。
【請求項８】
データを他の通信装置へ送信して、前記他の通信装置に対し、当該送信データを一定の大きさのブロックごとに分けて行う所定の処理をさせる通信装置を用いた通信方法であって、
前記通信装置が備える制御部が、前記通信装置が備える送信バッファＡと前記他の通信装置が備える受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの数をＮとし、前記送信データの先頭からＮ個のブロックごとに切り出したデータを前記送信バッファＡへ順次入力し、前記送信データのうち、前記送信バッファＡに未入力のデータがブロックＮ個分の大きさより大きくても前記容量の小さいバッファに格納できる大きさとなった場合、当該データを前記送信バッファＡへ一度に入力する第１ステップと、
前記通信装置が備える通信部が、前記第１ステップで前記送信バッファＡへデータが入力される度に、当該データを前記送信バッファＡから前記他の通信装置へ送信する第２ステップとを備えることを特徴とする通信方法。
【請求項９】
データを他の通信装置へ送信して、前記他の通信装置に対し、当該送信データを一定の大きさのブロックごとに分けて行う所定の処理をさせる通信装置で実行される通信プログラムであって、
前記通信装置が備える送信バッファＡと前記他の通信装置が備える受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの数をＮとし、前記送信データの先頭からＮ個のブロックごとに切り出したデータを前記送信バッファＡへ順次入力し、前記送信データのうち、前記送信バッファＡに未入力のデータがブロックＮ個分の大きさより大きくても前記容量の小さいバッファに格納できる大きさとなった場合、当該データを前記送信バッファＡへ一度に入力する制御処理と、
前記制御処理から前記送信バッファＡへデータが入力される度に、当該データを前記送信バッファＡから前記他の通信装置へ送信する通信処理とをコンピュータに実行させることを特徴とする通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置及び暗号通信システム及び通信方法及び通信プログラムに関するものである。
【背景技術】
【０００２】
従来の装置では、入力チャネルごとに設けられた入力バッファに入力されたデータを格納し、入力データセレクタを介して、入力バッファに格納されているデータを時分割に演算回路にブロック単位で入力する。演算回路はブロック単位で暗号化（又は復号化）を行う。従来の装置では、共通鍵暗号アルゴリズムを使用することを前提としている。共通鍵暗号アルゴリズムでは、上記のように、ブロックと呼ばれる所定のレングス（例えば、８バイト）のデータを１回の演算で暗号化する。長いデータの場合、データをブロック長ごとに分割して、演算回路を分割数分動作させることで、暗号演算が行われる（例えば、特許文献１参照）。
【特許文献１】特開２００７−１１４４０４号公報（図１）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の装置では、チャネルから入力される入力データは、ブロック長の整数倍に限定されている。そのため、入力バッファのレングスよりも長い平文データを暗号化する場合は、チャネルを切り替えて異なる入力バッファにデータを入力し、入力データセレクタで入力バッファを切り替えながら演算を行うことになる。この場合、入力バッファのレングスより入力データのレングスは短く、かつ、入力データのレングスはブロック長の整数倍となる。しかし、入力データのレングスで平文データが割り切れることは稀であり、大抵は端数のレングスのデータが入力データとして入力バッファに入力されることになる。つまり、端数のレングスのデータがある場合、そのレングスがどんなに短くても、ブロック長の整数倍のレングスをもつ入力データを入力バッファへ入力する処理と同じ処理が１回分必要となるという課題があった。
【０００４】
また、従来の装置では、入力バッファが複数存在するために、一時的に使用するメモリの容量が多くなるという課題もあった。メモリ量を減らすために、入力バッファを１本にすることも考えられるが、この場合、端数のレングスのデータを入力バッファへ入力する処理の影響が相対的に大きくなり、入力バッファの効率的な使用が難しいという課題が生じる。
【０００５】
本発明は、例えば、処理するデータのレングスが長く、複数回暗号演算を行わなければならない通信装置においても、送受信バッファの容量を抑え、かつ、通信回数の増大を抑えることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一の態様に係る通信装置は、
データを他の通信装置へ送信して、前記他の通信装置に対し、当該送信データを一定の大きさのブロックごとに分けて行う所定の処理をさせる通信装置であって、
送信バッファＡと、
前記送信バッファＡと前記他の通信装置が備える受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの数をＮとし、前記送信データの先頭からＮ個のブロックごとに切り出したデータを前記送信バッファＡへ順次入力し、前記送信データのうち、前記送信バッファＡに未入力のデータがブロックＮ個分の大きさより大きくても前記容量の小さいバッファに格納できる大きさとなった場合、当該データを前記送信バッファＡへ一度に入力する制御部と、
前記制御部から前記送信バッファＡへデータが入力される度に、当該データを前記送信バッファＡから前記他の通信装置へ送信する通信部とを備えることを特徴とする。
【発明の効果】
【０００７】
本発明の一の態様によれば、通信装置において、制御部が、送信バッファＡと他の通信装置が備える受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの数をＮとし、送信データの先頭からＮ個のブロックごとに切り出したデータを送信バッファＡへ順次入力し、未入力のデータがブロックＮ個分の大きさより大きくても容量の小さいバッファに格納できる大きさとなった場合、当該データを送信バッファＡへ一度に入力することにより、送受信バッファの容量を抑え、かつ、通信回数の増大を抑えることが可能となる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について、図を用いて説明する。
【０００９】
実施の形態１．
本実施の形態について図１を参照し説明する。図１は、本実施の形態における暗号通信システム１００が備える通信装置２００ａ，２００ｂの構成図である。以下、通信装置２００ａを暗号通信装置Ａ、通信装置２００ｂを暗号通信装置Ｂという。
【００１０】
図１において、暗号通信装置Ａ及び暗号通信装置Ｂは、共に、通信部２０１、制御部２０２、不揮発メモリ２０３を備えている。暗号通信装置Ｂは、さらに、乱数生成器２０４、暗号処理部２０５を備えている。暗号通信装置Ａ及び暗号通信装置Ｂは、それぞれ１つもしくは複数のマイコン（マイクロコンピュータ）などで構成されている。
【００１１】
通信部２０１は、暗号通信装置Ａでは送信バッファＡ及び受信バッファＡを用いて、暗号通信装置Ｂでは送信バッファＢ及び受信バッファＢを用いて、通信データ１０１の送受信を行う。通信部２０１は、例えば、スマートカード用の接触式インタフェースや非接触式インタフェース、パラレルインタフェース、シリアルインタフェース、ＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ・ｏｆ・Ｅｌｅｃｔｒｉｃａｌ・ａｎｄ・Ｅｌｅｃｔｒｏｎｉｃｓ・Ｅｎｇｉｎｅｅｒｓ）１３９４やＵＳＢ（Ｕｎｉｖｅｒｓａｌ・Ｓｅｒｉａｌ・Ｂｕｓ）などの有線インタフェース、赤外線通信、Ｂｌｕｅｔｏｏｔｈ（登録商標）、無線ＬＡＮ（ローカルエリアネットワーク）、ＤＳＲＣ（Ｄｅｄｉｃａｔｅｄ・Ｓｈｏｒｔ・Ｒａｎｇｅ・Ｃｏｍｍｕｎｉｃａｔｉｏｎ）、携帯電話などの無線インタフェースを実装したものである。制御部２０２は、通信部２０１で受信した通信データ１０１を解読し、又は、送信する通信データ１０１（送信データ）を生成し、装置全体を制御する。制御部２０２は、ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）やロジック回路、シーケンスＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）などで構成される。不揮発メモリ２０３は、暗号化処理時に使用する鍵などの秘密情報を記憶する。乱数生成器２０４は、暗号化処理で使用する乱数を生成する。暗号処理部２０５は、不揮発メモリ２０３に記憶された鍵などの秘密情報や乱数生成器２０４で生成された乱数を使用して通信データ１０１を暗号化又は復号化する。
【００１２】
以下では、暗号機能のない通信装置２００ａである暗号通信装置Ａが、他の通信装置２００ｂである暗号通信装置Ｂにブロック暗号によるデータの暗号化を依頼する場合を想定して説明を行う。つまり、以下では、暗号通信装置Ａは、データを暗号通信装置Ｂへ送信して、暗号通信装置Ｂに対し、当該送信データのブロック暗号による暗号化処理をさせるものとする。ブロック暗号による暗号化処理は、送信データを一定の大きさのブロックごとに分けて行う所定の処理の一例である。
【００１３】
図２は、暗号通信装置Ａが暗号通信装置Ｂにデータの暗号化を依頼して、暗号通信装置Ｂがデータの暗号化を行う際に、暗号通信装置Ａ及び暗号通信装置Ｂにおいて、データの受け渡しを行う主なＨＷ（ハードウェア）の構成要素を示すブロック図である。
【００１４】
図２において、送信データメモリ２１１、受信データメモリ２１２は、暗号通信装置Ａの不揮発メモリ２０３又はその一部である。送信バッファＡ、受信バッファＡは、前述したように、それぞれ暗号通信装置Ａの通信部２０１の一部である。ブロック入力部２１３、暗号演算部２１４、ブロック出力部２１５は、それぞれ暗号通信装置Ｂの暗号処理部２０５の一部である。受信バッファＢ、送信バッファＢは、前述したように、それぞれ暗号通信装置Ｂの通信部２０１の一部である。
【００１５】
暗号化（又は復号化）されるデータは、送信データメモリ２１１に格納されている。暗号化されるデータは大きいので、暗号通信装置Ａの制御部２０２は、送信バッファＡに全てのデータを移すことはできず、数回に分けてデータを移すことになる。つまり、暗号通信装置Ａの制御部２０２は、分割したデータを送信バッファＡに順番に入力していく。暗号通信装置Ａの通信部２０１は、送信バッファＡから受信バッファＢにデータを送信する。暗号通信装置Ｂの暗号処理部２０５では、共通鍵暗号アルゴリズムを使用するので、ブロックという単位でしかデータを受け付けることができない。ブロック入力部２１３、ブロック出力部２１５はブロックのインタフェースである。ブロックのレングスは、受信バッファＢのレングスより小さいので、暗号通信装置Ｂの暗号処理部２０５には何回かに分けてデータが送られることになる。ブロック入力部２１３に入力されたデータは、暗号演算部２１４で暗号化され、ブロック出力部２１５を介して、送信バッファＢに格納される。受信バッファＢにあるデータが全て暗号化されると、暗号通信装置Ｂの通信部２０１は、送信バッファＢに格納されたデータを受信バッファＡに送信する。暗号通信装置Ａの制御部２０２は、受信バッファＡのデータを受信データメモリ２１２に格納する。暗号通信装置Ａが、データを送信バッファＡに入力してから暗号化されたデータを受信バッファＡで受け取るまでの処理を、データの分割数分繰り返すことで、全てのデータが暗号化されて、受信データメモリ２１２に格納されることになる。
【００１６】
図３は、通信装置２００ａ，２００ｂ、即ち、暗号通信装置Ａ、暗号通信装置Ｂそれぞれのハードウェア構成の一例を示す図である。
【００１７】
図３において、暗号通信装置Ａ、暗号通信装置Ｂは、主にマイコンなどのコンピュータで構成されており、ＬＣＤ（液晶ディスプレイ）などの表示画面を有する表示装置９０１、操作キー９０２、操作ボタン９０３などのハードウェアを備え、これらはケーブルや信号線で接続されている。
【００１８】
暗号通信装置Ａ、暗号通信装置Ｂは、プログラムを実行するＣＰＵ９１１を備えている。ＣＰＵ９１１は、プロセッサの一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード９１５、表示装置９０１、操作キー９０２、操作ボタン９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、フラッシュメモリ、メモリカードリーダライタなどの記憶媒体が用いられてもよい。
【００１９】
ＲＡＭ９１４は、揮発メモリの一例である。ＲＯＭ９１３、磁気ディスク装置９２０の記憶媒体は、不揮発メモリ２０３の一例である。これらは、メモリの一例である。通信ボード９１５、操作キー９０２、操作ボタン９０３などは、入力装置の一例である。また、通信ボード９１５、表示装置９０１などは、出力装置の一例である。
【００２０】
通信ボード９１５は、有線又は無線ＬＡＮ、移動通信ネットワーク、ＤＳＲＣネットワークなどに接続される。通信ボード９１５は、インターネット、あるいは、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークなどのＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。ＬＡＮ、移動通信ネットワーク、ＤＳＲＣネットワーク、インターネット、ＷＡＮは、いずれもネットワークの一例である。
【００２１】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。また、ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として記憶されている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ディスクやメモリなどの記憶媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ９１１の処理（動作）に用いられる。抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００２２】
また、本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号は、ＲＡＭ９１４、フラッシュメモリなどのメモリ、磁気ディスク装置９２０の磁気ディスクなどの記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体により伝送される。
【００２３】
また、本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、素子・デバイス・基板・配線などのハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フラッシュメモリなどの記録媒体に記憶される。このプログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２４】
次に、処理フローについて説明する。
【００２５】
図４は本実施の形態の処理フロー（本実施の形態に係る通信方法）を示すフローチャートである。
【００２６】
図４において、ステップＳ１０１では、後述する送受信パラメータ設定処理が行われる。この処理では、効率よく送受信を行うために、暗号通信装置Ａと暗号通信装置Ｂの送受信パラメータが設定される。ついで、ステップＳ１０２では、後述するデータ暗号化処理が行われる。この処理では、送受信パラメータに基づく通信が繰り返され、長大なデータの暗号化が行われる。
【００２７】
次に、前述したステップＳ１０１の送受信パラメータ設定処理の詳細について、図５を参照して説明する。
【００２８】
ステップＳ１１１で暗号通信装置Ａの制御部２０２は、暗号通信装置Ａの通信部２０１を介して、暗号通信装置Ａ自身の受信バッファＡのレングスを暗号通信装置Ｂに送る。ステップＳ１１２で暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの通信部２０１を介して、そのレングスを受け取る。一方、ステップＳ１１３で暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの通信部２０１を介して、暗号通信装置Ｂ自身の受信バッファＢのレングスを暗号通信装置Ａに送る。ステップＳ１１４で暗号通信装置Ａの制御部２０２は、暗号通信装置Ａの通信部２０１を介して、そのレングスを受け取る。この処理により、暗号通信装置Ａ、暗号通信装置Ｂは、相互の受信バッファのレングスを不揮発メモリ２０３にて共有することができる。なお、暗号通信装置Ａ、暗号通信装置Ｂは、自身の送信バッファ及び受信バッファのレングスを予め不揮発メモリ２０３に記憶しているものとする。
【００２９】
このように、本実施の形態において、暗号通信装置Ａの不揮発メモリ２０３は、送信バッファＡ及び受信バッファＡの容量を予め記憶する。暗号通信装置Ａの制御部２０２は、暗号通信装置Ｂから受信バッファＢの容量を通知され、受信バッファＢの容量も暗号通信装置Ａの不揮発メモリ２０３に記憶される。また、暗号通信装置Ｂの不揮発メモリ２０３は、送信バッファＢ及び受信バッファＢの容量を予め記憶する。暗号通信装置Ｂの制御部２０２は、暗号通信装置Ａから受信バッファＡの容量を通知され、受信バッファＡの容量も暗号通信装置Ｂの不揮発メモリ２０３に記憶される。
【００３０】
ステップＳ１１５では、暗号通信装置Ａの制御部２０２は、受信バッファＢのレングス、送信バッファＡのレングスのうち、最小のレングスを選択する。さらに、暗号通信装置Ａの制御部２０２は、この最小のレングスを共通鍵アルゴリズムのブロックのレングスで割った整数部を送信ブロック数Ａとする。ここで、最小のレングスは、ブロックのレングスより大きいと仮定する。同様にして、ステップＳ１１６でも、暗号通信装置Ｂの制御部２０２は、受信バッファＡのレングス、送信バッファＢのレングスのうち、最小のレングスを選択する。さらに、暗号通信装置Ｂの制御部２０２は、この最小のレングスを共通鍵アルゴリズムのブロックのレングスで割った整数部を送信ブロック数Ｂとする。ついで、ステップＳ１１７、Ｓ１１８において、各通信装置の制御部２０２は、通信部２０１を介して、送信ブロック数Ａ、送信ブロック数Ｂを相互に送信して、そのうちの小さい方を送信ブロック数（共通）Ｎとして各々選択する。ステップＳ１１９では、暗号通信装置Ａの制御部２０２は、送信ブロック数（共通）Ｎとブロックのレングスをかけたレングス値と、受信バッファＢのレングス、送信バッファＡのレングスのうち、最小のレングスとの差Ｓａを求める。この差Ｓａは、送信ブロック数（共通）Ｎのデータを暗号通信装置Ｂに送った際に、受信バッファＢ、送信バッファＡのうち、小さい方で使用されないバッファのレングスに等しい。暗号通信装置Ａの制御部２０２は、送信ブロック数（共通）Ｎと差Ｓａを送受信パラメータとして設定する。ステップＳ１２０では、暗号通信装置Ｂの制御部２０２は、送信ブロック数（共通）Ｎとブロックのレングスをかけたレングス値と、受信バッファＡのレングス、送信バッファＢのレングスのうち、最小のレングスとの差Ｓｂを求める。この差Ｓｂは、送信ブロック数（共通）Ｎのデータを暗号通信装置Ａに送った際に、受信バッファＡ、送信バッファＢのうち、小さい方で使用されないバッファのレングスに等しい。暗号通信装置Ｂの制御部２０２は、送信ブロック数（共通）Ｎと差Ｓｂを送受信パラメータとして設定する。
【００３１】
このように、本実施の形態において、暗号通信装置Ａの制御部２０２、及び、暗号通信装置Ｂの制御部２０２は、送信バッファＡと受信バッファＡと受信バッファＢと送信バッファＢとのうち、容量の最も小さいバッファに格納できるブロックの最大数をＮとする（格納できるブロックの最大数より小さい数をＮとしても本実施の形態は適用可能であるが、格納できるブロックの最大数をＮとすることが望ましい）。例えば、送信バッファＡ、受信バッファＡ、受信バッファＢ、送信バッファＢの容量が、順番に２０バイト、４０バイト、３０バイト、３０バイトであるとき、ブロック１個分の大きさを８バイトとすると、Ｎ＝２となる（Ｎ＝１としても本実施の形態は適用可能であるが、Ｎ＝２とすることが望ましい）。Ｎを求めるために、暗号通信装置Ａの制御部２０２は、不揮発メモリ２０３に記憶された送信バッファＡの容量と暗号通信装置Ｂから通知された受信バッファＢの容量とのうち、最小値をブロック１個分の大きさで除算する。このとき、商は、送信バッファＡと受信バッファＢとのうち、容量の小さいバッファに格納できるブロックの最大数Ａに相当する。上記の例では、Ａ＝２となる（このとき、Ｓａ＝４バイトとなる）。また、暗号通信装置Ｂの制御部２０２は、不揮発メモリ２０３に記憶された送信バッファＢの容量と暗号通信装置Ａから通知された受信バッファＡの容量とのうち、最小値をブロック１個分の大きさで除算する。このとき、商は、送信バッファＢと受信バッファＡとのうち、容量の小さいバッファに格納できるブロックの最大数Ｂに相当する。上記の例では、Ｂ＝３となる（このとき、Ｓｂ＝６バイトとなる）。本実施の形態では、このような場合、ＡとＢとの最小値をとって、Ｎ＝２としている。つまり、暗号通信装置Ａが暗号通信装置Ｂへデータを送信する場合と暗号通信装置Ａが暗号通信装置Ｂからデータを受信する場合とで、Ｎは共通する。しかしながら、２つの場合でＮを別々に設定してもよい。つまり、暗号通信装置Ａが暗号通信装置Ｂへデータを送信する場合は、Ｎ＝Ａとし（ＮをＡより小さい値にしてもよいが、Ｎ＝Ａとすることが望ましい）、暗号通信装置Ａが暗号通信装置Ｂからデータを受信する場合は、Ｎ＝Ｂとしてもよい（ＮをＢより小さい値にしてもよいが、Ｎ＝Ｂとすることが望ましい）。このようにすることで、例えば暗号通信装置Ｂの暗号処理部２０５に入力されるデータのブロック数と当該データが暗号化されたデータのブロック数とが異なる場合に、メモリ容量をより効率的に利用することが可能となる。
【００３２】
図５の送受信パラメータ設定処理を行うことにより、暗号通信装置Ａには、送信ブロック数（共通）Ｎと差Ｓａが設定され、暗号通信装置Ｂには、送信ブロック数（共通）Ｎと差Ｓｂが設定されることになる。
【００３３】
次に、前述したステップＳ１０２のデータ暗号化処理の詳細について、図６を参照して説明する。データ暗号化処理は、主にデータの送受信と暗号演算（暗号化又は復号化）の処理からなるもので、前述した送受信パラメータ設定処理以後に行われる。
【００３４】
ステップＳ１５１で、暗号通信装置Ａの制御部２０２は、暗号通信装置Ａの通信部２０１を介して、暗号通信装置Ｂに向けて暗号演算コマンドを送信する。暗号演算コマンドは、暗号演算を開始する旨の通知で、その他、使用する鍵番号や暗号アルゴリズムを指定する番号、これから送るデータのレングスなどが必要に応じて付加されている。ステップＳ１５２で暗号演算コマンドは、暗号通信装置Ｂの通信部２０１を介して、暗号通信装置Ｂの制御部２０２によって受信され、暗号通信装置Ｂの制御部２０２では、そのコマンドが指示する設定が行われる。例えば、鍵番号に対応する鍵を設定する、使用する暗号アルゴリズムを選択するなどである。
【００３５】
ついで、暗号通信装置Ａでは、ステップＳ１５３で制御部２０２がデータ送信を開始する。ステップＳ１５４で、暗号通信装置Ａの制御部２０２は、図２で示した送信データメモリ２１１から送信バッファＡにデータを分割して移す。このとき、暗号通信装置Ａの制御部２０２は、設定されている送信ブロック数（共通）Ｎと差Ｓａと未送信データレングスＤの関係に従って下記（ア）〜（エ）のいずれかの手順を実行し、データを送信データメモリ２１１から送信バッファＡに移す。なお、未送信データレングスとは、送るべきデータのレングスから、送信したデータのレングスを引いたものをいう。ステップＳ１５５では、暗号通信装置Ａの通信部２０１は、送信バッファＡの分割データを暗号通信装置Ｂに送る。
【００３６】
以下では、ブロック数をＭ、ブロックレングス（１ブロックのレングス）をＬ、端数をＨとする。前述したように、Ｎは送信ブロック数（共通）、Ｓａは差、Ｄは未送信データレングスである。
【００３７】
（ア）Ｄ≧Ｎ・Ｌ＋Ｓａの場合
Ｍ＝Ｎ、Ｈ＝０とする。即ち、暗号通信装置Ａの制御部２０２は、送信ブロック数（共通）ＮだけデータをステップＳ１５４で分割し、送信バッファＡに移す。そして、暗号通信装置Ａの通信部２０１は、送信バッファＡに移された分割データをステップＳ１５５で送信する。
【００３８】
（イ）Ｎ・Ｌ＋Ｓａ＞Ｄ≧Ｎ・Ｌの場合
Ｍ＝Ｎ＋ＦＬＯＯＲ（Ｓａ／Ｌ）、Ｈ＝Ｄ−Ｍ・Ｌとする。ここで、ＦＬＯＯＲ（Ｘ）というとき、これはＸを超えない最大の整数を示す。この場合は、送信バッファＡと暗号通信装置Ｂの受信バッファＢとのうち、レングスが短いバッファの余裕（Ｎ個のブロックを格納したときの空き容量、即ち、Ｓａ）の範囲内の未送信データであれば、暗号通信装置Ａの制御部２０２は、送信ブロック数（共通）Ｎを超えても、未送信データ全てをステップＳ１５４で分割し（取り出し）、送信バッファＡに移す。そして、暗号通信装置Ａの通信部２０１は、送信バッファＡに移された分割データをステップＳ１５５で送信する。
【００３９】
（ウ）Ｎ・Ｌ＞Ｄ＞０の場合
Ｍ＝ＦＬＯＯＲ（Ｄ／Ｌ）、Ｈ＝Ｄ−Ｍ・Ｌとする。この場合、暗号通信装置Ａの制御部２０２は、未送信データ全てをステップＳ１５４で分割し（取り出し）、送信バッファＡに移す。そして、暗号通信装置Ａの通信部２０１は、送信バッファＡに移された分割データをステップＳ１５５で送信する。
【００４０】
（エ）Ｄ＝０の場合
暗号通信装置Ａの制御部２０２は、送信をやめる。
【００４１】
暗号通信装置Ｂでは、通信部２０１がステップＳ１５６で分割データを受信すると、制御部２０２がステップＳ１５７で当該分割データ（受信データ）を１ブロックずつ分割する。そして、暗号処理部２０５がステップＳ１５８で暗号演算を行う。ステップＳ１５９の暗号演算結果は、ブロックのレングスの結果になる。即ち、１ブロックの暗号化データとなる。暗号通信装置Ｂの制御部２０２は、この暗号化データを受け取り、ステップＳ１６０で送信バッファＢに格納する。暗号通信装置Ｂでは、ステップＳ１５７からステップＳ１６０の処理が、受信データが全て暗号演算されるまで繰り返される。図６では、この繰り返しの範囲を「繰り返し単位１」で示した。
【００４２】
ここで、「繰り返し単位１」の繰り返し数について述べる前に、図７に示す本実施の形態におけるデータ送信のフォーマットについて説明する。
【００４３】
図７において、ヘッダ３０１には、暗号演算用のデータであることを示す識別子、最初に送られるデータであることを示す識別子、最後のデータであることを示す識別子が含まれる。ブロック数３０２には、通常は、送信ブロック数（共通）Ｎが設定されるが、最後のデータでは、送信ブロック数（共通）Ｎより小さい値となる場合がある。端数３０３は、ブロックレングスに満たないデータのレングスを示す。データ３０４には、ブロック数３０２と端数３０３を合わせたレングスをもつデータが格納される。
【００４４】
このように、本実施の形態において、暗号通信装置Ａの制御部２０２は、送信バッファＡへ入力するデータ（図７のデータ３０４）のフォーマットに、当該データに含まれるブロックの数（図７のブロック数３０２）と当該データの大きさをブロック１個分の大きさで除算した場合の端数（図７の端数３０３）とを示す制御情報を含める。同様に、暗号通信装置Ｂの制御部２０２は、送信バッファＢへ入力するデータ（図７のデータ３０４）のフォーマットに、当該データに含まれるブロックの数（図７のブロック数３０２）と当該データの大きさをブロック１個分の大きさで除算した場合の端数（図７の端数３０３）とを示す制御情報を含める。
【００４５】
上記のようなフォーマットをデータ送信用に決めているため、「繰り返し単位１」は、端数Ｈ＝０の場合はブロック数Ｍ、Ｈ＞０の場合はＭ＋１となる。なお、端数Ｈが存在する場合、即ち、Ｈ＞０の場合、「繰り返し単位１」の最後の１回は、暗号通信装置Ｂの暗号処理部２０５がブロックのレングスより小さいレングスのデータを暗号演算することになる。そのため、暗号通信装置Ｂの制御部２０２は、ブロックレングスに満たないビットにはパディング処理をステップＳ１５７で行う。
【００４６】
このように、本実施の形態において、暗号通信装置Ａの制御部２０２は、送信データの先頭からＮ個のブロックごとに切り出したデータを送信バッファＡへ順次入力する（図６のステップＳ１５４）。そして、送信データのうち、送信バッファＡに未入力のデータがブロックＮ個分の大きさより大きくても上記容量の小さいバッファに格納できる大きさとなった場合、暗号通信装置Ａの制御部２０２は、当該データを送信バッファＡへ一度に入力する（図６のステップＳ１５４）。暗号通信装置Ａの通信部２０１は、暗号通信装置Ａの制御部２０２から送信バッファＡへデータが入力される度に、当該データを送信バッファＡから暗号通信装置Ｂへ送信する（図６のステップＳ１５５）。
【００４７】
「繰り返し単位１」が全て終了すれば、暗号通信装置Ｂの送信バッファＢには暗号演算が終わったデータが格納されていることになる。暗号通信装置Ｂの通信部２０１は、この送信データをステップＳ１６１で暗号通信装置Ａに送り、暗号通信装置Ａの通信部２０１は、ステップＳ１６２でデータを受信する。暗号通信装置Ａの制御部２０２は、受信したデータをステップＳ１６３で受信データメモリ２１２に格納する。
【００４８】
暗号通信システム１００では、ステップＳ１５４からステップＳ１６３までの処理が、送信データメモリ２１１のデータがなくなるまで繰り返される。図６では、この繰り返しの範囲を「繰り返し単位２」で示した。
【００４９】
ステップＳ１６４で暗号通信装置Ａの制御部２０２は、「繰り返し単位２」の終了を、データ送信のフォーマットのヘッダ３０１で知ることができる。
【００５０】
このように、本実施の形態において、暗号通信装置Ｂの通信部２０１は、暗号通信装置Ａからデータが送信される度に、当該データを受信バッファＢで受信する（図６のステップＳ１５６）。暗号通信装置Ｂの制御部２０２は、当該データを受信バッファＢから出力する（図６のステップＳ１５７）。暗号通信装置Ｂの暗号処理部２０５は、暗号通信装置Ｂの制御部２０２により受信バッファＢからデータが出力される度に、当該データをブロック暗号により順次暗号化する（図６のステップＳ１５８、Ｓ１５９）。暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの暗号処理部２０５で暗号化されたデータを送信バッファＢへ順次入力する（図６のステップＳ１６０）。暗号通信装置Ｂの通信部２０１は、暗号通信装置Ｂの制御部２０２から送信バッファＢへデータが入力される度に、当該データを送信バッファＢから暗号通信装置Ａへ送信する（図６のステップＳ１６１）。暗号通信装置Ａの通信部２０１は、暗号通信装置Ｂへ送信したデータが暗号通信装置Ｂで暗号化され、暗号通信装置Ｂから当該データが送信される度に、当該データを受信バッファＡで受信する（図６のステップＳ１６２）。暗号通信装置Ａの制御部２０２は、受信バッファＡでデータが受信される度に、当該データを受信バッファＡから出力し、当該データを連結して送信データの暗号化データを生成する（図６のステップＳ１６３）。
【００５１】
次に、本実施の形態の効果について説明をする。
【００５２】
本実施の形態では、暗号演算を行う前に、暗号通信装置Ａ及びＢ双方の受信バッファの大きさを通知し、暗号演算の単位であるブロックが最も大きくとれるように、送信ブロック数（共通）Ｎを設定する。このことにより、受信バッファのうち通信に使用されない領域をシステムで最小にすることができるようになる。このことは、データのレングスが長く、複数回暗号演算を行わなければならない暗号通信装置であっても、通信回数を最も小さく設定できることを示している。
【００５３】
本実施の形態では、さらに、通信データのフォーマットをブロック数と端数を記述するようにし、かつ、未送信データのレングスと受信バッファ（又は送信バッファ）のうち通信に使用されない領域（前述した差Ｓａや差Ｓｂに相当）とを比較し、未送信データが全受信バッファを使用すれば送信可能である場合、未送信データを全て送信し、そのデータを受信先で暗号演算処理するようにしたので、通信回数をさらに１回減らすことができる。この効果を図で示したものが、図８である。図８では送信データを、送信ブロック数（共通）Ｎ＝４で３回送信する例を示している。３回目のクロスハッチの送信データは、ブロック数が４でさらに端数のデータも合わせて送信しているものである。このように、受信バッファに余裕がある場合には、最後はその分データを多めに送信できるので、送信回数を１回減らすことができる。これに合わせて暗号演算の回数は、３回目のデータ送信時には、１回目、２回目と比べて、１回多くなっている。また、図８に示したように、端数のデータについてはパディングが行われる。これに対し、図９は従来の例を図８と同じデータで行った場合を示している。図９では、３回の送信では全ての送信データを送れないので、４回目の送信を行っており、本実施の形態と比べて、送信回数が増えてしまうことがわかる。
【００５４】
本実施の形態では、さらに、送受信パラメータ設定処理により最大の送受信パラメータが設定されるので、送受信バッファを各々１本としても、通信回数の増大を最小限に抑えることができる。
【００５５】
本実施の形態では、送受信パラメータ設定処理を行ってから、データ暗号化処理を行うとしたが、暗号通信装置の組み合わせが決まっている場合、両者の受信バッファの大きさは予めわかっているので、事前に送受信パラメータを決めておき、データ処理時は、送受信パラメータ設定処理は行わず、データ暗号化処理だけにしてもよい。
【００５６】
また、本実施の形態では、送信データ分割を未送信データのレングスと受信バッファのうち通信に使用されない領域とを逐次考慮して決めていたが、固定長のデータを扱う場合は、送信データの分割パターンは決まっているので、事前に分割パターンを決めておき、逐次判断を行わず分割パターンに従って、データ分割を行うようにしてもよい。
【００５７】
また、本実施の形態の説明では暗号通信装置という個別の装置を例にとったが、１チップマイコンチップと暗号演算が可能なセキュアなマイコンチップとの間の通信でも構わない。
【００５８】
以上のように、本実施の形態では、少なくとも一方の装置内で共通鍵暗号アルゴリズムを用いて暗号演算を行う暗号通信システム１００が、
相互の受信バッファのレングスと送信バッファのレングスから、ブロック単位で最大の送信ブロック数（共通）と他方の受信バッファと送信ブロック数（共通）に対応するレングスとの差を送受信パラメータとして設定する送受信パラメータ設定処理と、
送信ブロック数（共通）、上記の差、未送信データのレングスから、受信先の全受信バッファを使用すれば送信できる場合は、送信ブロック数（共通）以上の未送信データを送信し、送信されたブロック数、端数に基づき暗号演算を行うデータ暗号化処理とを実行することを特徴とする。
【００５９】
また、本実施の形態の変形例では、少なくとも一方の装置内で共通鍵暗号アルゴリズムを用いて暗号演算を行う暗号通信システム１００が、
相互の受信バッファのレングスと送信バッファのレングスから、ブロック単位で最大の送信ブロック数（共通）と他方の受信バッファと送信ブロック数（共通）に対応するレングスとの差を送受信パラメータとして事前に設定する送受信パラメータ設定処理と、
データ暗号化処理時は上記送受信パラメータ設定処理を行わず、送信ブロック数（共通）、上記の差、未送信データのレングスから、受信先の全受信バッファを使用すれば送信できる場合は、送信ブロック数（共通）以上の未送信データを送信し、送信されたブロック数、端数に基づき暗号演算を行うデータ暗号化処理とを実行することを特徴とする。
【００６０】
また、本実施の形態の変形例では、少なくとも一方の装置内で共通鍵暗号アルゴリズムを用いて暗号演算を行う暗号通信システム１００が、
相互の受信バッファのレングスと送信バッファのレングスから、ブロック単位で最大の送信ブロック数（共通）と他方の受信バッファと送信ブロック数（共通）に対応するレングスとの差を送受信パラメータとして事前に設定する送受信パラメータ設定処理と、
データ暗号化処理時は上記送受信パラメータ設定処理を行わず、暗号化処理以前に上記送受信パラメータを考慮して送信パターンを設定し、暗号化処理時は前記送信パターンに基づいてデータを送信し、送信されたブロック数、端数に基づき暗号演算を行うデータ暗号化処理とを実行することを特徴とする。
【００６１】
また、本実施の形態では、暗号通信データフォーマットが、データのレングスを示す数値として、少なくともブロック数と端数を含んでいることを特徴とする。
【００６２】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を説明する。
【００６３】
本実施の形態は、図１の暗号通信装置Ａが、暗号通信装置Ｂに対して、送信データの真偽を判定させるケースを想定したものである。例えば、暗号通信装置Ａに外部からある暗号データが送られてきて、そのデータの真偽の判定を暗号通信装置Ｂに依頼する場合である。暗号通信装置Ｂには暗号データの真偽を判定するための情報が予め格納されているものとする。以下では、暗号通信装置Ａは、データを暗号通信装置Ｂへ送信して、暗号通信装置Ｂに対し、当該送信データのブロック暗号による暗号化処理（復号化処理）を伴うデータ真偽判定処理（例えば、データの復号化に成功した場合、あるいは、復号化したデータの値が所定の値であった場合に、そのデータが真正なものであると判定する処理）をさせる。データ真偽判定処理は、送信データを一定の大きさのブロックごとに分けて行う所定の処理の一例である。
【００６４】
図１０は、暗号通信装置Ａが暗号通信装置Ｂにデータの真偽判定を依頼して、暗号通信装置Ｂがデータの真偽判定を行う際に、暗号通信装置Ａ及び暗号通信装置Ｂにおいて、データの受け渡しを行う主なＨＷ（ハードウェア）の構成要素を示すブロック図である。
【００６５】
図１０において、暗号通信装置Ａの送信データメモリ２１１、送信バッファＡ、受信バッファＡについては、実施の形態１と同様である。また、暗号通信装置Ｂのブロック入力部２１３、暗号演算部２１４、ブロック出力部２１５、受信バッファＢ、送信バッファＢについては、実施の形態１と同様である。結果格納メモリ２１６、真偽レジスタ２１７、バッファ空レジスタ２１８は、それぞれ暗号通信装置Ｂの不揮発メモリ２０３又はその一部である。
【００６６】
真偽判定されるデータは、送信データメモリ２１１に格納されている。真偽判定されるデータは大きいので、暗号通信装置Ａの制御部２０２は、送信バッファＡに全てのデータを移すことはできず、数回に分けてデータを移すことになる。つまり、暗号通信装置Ａの制御部２０２は、分割したデータを送信バッファＡに順番に入力していく。暗号通信装置Ａの通信部２０１は、送信バッファＡから受信バッファＢにデータを通信する。暗号通信装置Ｂの暗号処理部２０５では、共通鍵暗号アルゴリズムを使用するので、ブロックという単位でしかデータを受け付けることができない。ブロック入力部２１３、ブロック出力部２１５はブロックのインタフェースである。ブロックのレングスは、受信バッファＢのレングスより小さいので、暗号通信装置Ｂの暗号処理部２０５には何回かに分けてデータが送られることになる。ブロック入力部２１３に入力されたデータは、暗号演算部２１４で暗号化され、ブロック出力部２１５を介して、結果格納メモリ２１６に格納される。受信バッファＢにあるデータが全て暗号化（復号化）されると、バッファ空レジスタ２１８にフラグがたち、暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの通信部２０１（送信バッファＢ）を介して、受信バッファＢが空になったことを暗号通信装置Ａに知らせる。暗号通信装置Ａでは、未送信データがあれば、制御部２０２が再度送信データメモリ２１１からデータを送信バッファＡに移し、通信部２０１を介してそのデータを送信して暗号通信装置Ｂに真偽判定を依頼する。送信データメモリ２１１の全てのデータが送信され、暗号演算が全て終われば、結果格納メモリ２１６には全ての結果が格納される。暗号通信装置Ｂの制御部２０２は、その内容を判定して、真偽レジスタ２１７に格納される真偽フラグを設定する。その真偽フラグは、通信部２０１（送信バッファＢ）を介して、暗号通信装置Ａに送られる。
【００６７】
次に、処理フローについて説明する。
【００６８】
図１１は本実施の形態の処理フロー（本実施の形態に係る通信方法）を示すフローチャートである。
【００６９】
図１１において、ステップＳ２０１では、後述する送信パラメータ設定処理が行われる。この処理では、効率よく送信を行うために、暗号通信装置Ａの送信パラメータが設定される。ついで、ステップＳ２０２では、後述するデータ真偽判定処理が行われる。この処理では、送信パラメータに基づく通信が繰り返され、長大なデータが暗号通信装置Ｂに送られ、暗号通信装置Ｂ内でその真偽判定が行われる。
【００７０】
次に、前述したステップＳ２０１の送信パラメータ設定処理の詳細について、図１２を参照して説明する。
【００７１】
ステップＳ２１１で暗号通信装置Ａの制御部２０２は、暗号通信装置Ａの通信部２０１を介して、バッファ長送信依頼を暗号通信装置Ｂに送る。ステップＳ１１２で暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの通信部２０１を介して、その依頼を受け取る。その後、ステップＳ２１３で暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの通信部２０１を介して、暗号通信装置Ｂ自身の受信バッファＢのレングスを暗号通信装置Ａに送る。ステップＳ２１４で暗号通信装置Ａの制御部２０２は、暗号通信装置Ａの通信部２０１を介して、そのレングスを受け取る。
【００７２】
ステップＳ２１５では、暗号通信装置Ａの制御部２０２は、受信バッファＢのレングス、送信バッファＡのレングスのうち、最小のレングスを選択する。さらに、暗号通信装置Ａの制御部２０２は、この最小のレングスを共通鍵アルゴリズムのブロックのレングスで割った整数部を送信ブロック数Ｎとする。ここで、最小のレングスは、ブロックのレングスより大きいと仮定する。ステップＳ２１６では、暗号通信装置Ａの制御部２０２は、送信ブロック数Ｎとブロックのレングスをかけたレングス値と、受信バッファＢのレングス、送信バッファＡのレングスのうち、最小のレングスとの差Ｓを求める。この差Ｓは、送信ブロック数Ｎのデータを暗号通信装置Ｂに送った際に、受信バッファＢ、送信バッファＡのうち、小さい方で使用されないバッファのレングスに等しい。暗号通信装置Ａの制御部２０２は、送信ブロック数Ｎと差Ｓを送信パラメータとして設定する。
【００７３】
次に、前述したステップＳ２０２のデータ真偽判定処理の詳細について、図１３を参照して説明する。データ真偽判定処理は、前述した送信パラメータ設定処理以後に行われる。
【００７４】
ステップＳ２５１で、暗号通信装置Ａの制御部２０２は、暗号通信装置Ａの通信部２０１を介して、暗号通信装置Ｂに向けて真偽判定コマンドを送信する。真偽判定コマンドは、真偽判定を開始する旨の通知で、その他、使用する鍵番号や暗号アルゴリズムを指定する番号、これから送るデータのレングスなどが必要に応じて付加されている。ステップＳ２５２で真偽判定コマンドは、暗号通信装置Ｂの通信部２０１を介して、暗号通信装置Ｂの制御部２０２によって受信され、暗号通信装置Ｂの制御部２０２では、そのコマンドが指示する設定が行われる。例えば、鍵番号に対応する鍵を設定する、使用する暗号アルゴリズムを選択するなどである。
【００７５】
ついで、暗号通信装置Ａでは、ステップＳ２５３で制御部２０２がデータ送信を開始する。ステップＳ２５４で、暗号通信装置Ａの制御部２０２は、図１０で示した送信データメモリ２１１から送信バッファＡにデータを分割して移す。このとき、暗号通信装置Ａの制御部２０２は、設定されている送信ブロック数Ｎと差Ｓと未送信データレングスＤの関係に従って下記（カ）〜（ケ）のいずれかの手順を実行し、データを送信データメモリ２１１から送信バッファＡに移す。ステップＳ２５５では、暗号通信装置Ａの通信部２０１は、送信バッファＡの分割データを暗号通信装置Ｂに送る。
【００７６】
以下では、ブロック数をＭ、ブロックレングス（１ブロックのレングス）をＬ、端数をＨとする。前述したように、Ｎは送信ブロック数、Ｓは差、Ｄは未送信データレングスである。
【００７７】
（カ）Ｄ≧Ｎ・Ｌ＋Ｓａの場合
Ｍ＝Ｎ、Ｈ＝０とする。即ち、暗号通信装置Ａの制御部２０２は、送信ブロック数ＮだけデータをステップＳ２５４で分割し、送信バッファＡに移す。そして、暗号通信装置Ａの通信部２０１は、送信バッファＡに移された分割データをステップＳ２５５で送信する。
【００７８】
（キ）Ｎ・Ｌ＋Ｓａ＞Ｄ≧Ｎ・Ｌの場合
Ｍ＝Ｎ＋ＦＬＯＯＲ（Ｓ／Ｌ）、Ｈ＝Ｄ−Ｍ・Ｌとする。この場合は、送信バッファＡと暗号通信装置Ｂの受信バッファＢとのうち、レングスが短いバッファの余裕（Ｎ個のブロックを格納したときの空き容量、即ち、Ｓａ）の範囲内の未送信データであれば、暗号通信装置Ａの制御部２０２は、送信ブロック数Ｎを超えても、未送信データ全てをステップＳ２５４で分割し（取り出し）、送信バッファＡに移す。そして、暗号通信装置Ａの通信部２０１は、送信バッファＡに移された分割データをステップＳ２５５で送信する。
【００７９】
（ク）Ｎ・Ｌ＞Ｄ＞０の場合
Ｍ＝ＦＬＯＯＲ（Ｄ／Ｌ）、Ｈ＝Ｄ−Ｍ・Ｌとする。この場合、暗号通信装置Ａの制御部２０２は、未送信データ全てをステップＳ２５４で分割し（取り出し）、送信バッファＡに移す。そして、暗号通信装置Ａの通信部２０１は、送信バッファＡに移された分割データをステップＳ２５５で送信する。
【００８０】
（ケ）Ｄ＝０の場合
暗号通信装置Ａの制御部２０２は、送信をやめる。
【００８１】
暗号通信装置Ｂでは、通信部２０１がステップＳ２５６で分割データを受信すると、制御部２０２がステップＳ２５７で受信データを１ブロックずつ分割する。そして、暗号処理部２０５がステップＳ２５８で暗号演算を行う。ステップＳ２５９の暗号演算結果は、ブロックのレングスの結果になる。即ち、１ブロックの暗号化（復号化）データとなる。暗号通信装置Ｂの制御部２０２は、この暗号化データを受け取り、ステップＳ２６０で結果格納メモリ２１６に格納する。暗号通信装置Ｂでは、ステップＳ２５７からステップＳ２６０の処理が、受信データが全て暗号演算されるまで繰り返される。図１３では、この繰り返しの範囲を「繰り返し単位１」で示した。
【００８２】
ここで、「繰り返し単位１」の繰り返し数について述べる前に、本実施の形態におけるデータ送信のフォーマットについて説明する。本実施の形態におけるデータ送信のフォーマットは、図７に示した実施の形態１のものと同様である。
【００８３】
前述したようなフォーマットをデータ送信用に決めているため、「繰り返し単位１」は、端数Ｈ＝０の場合はブロック数Ｍ、Ｈ＞０の場合はＭ＋１となる。なお、端数Ｈが存在する場合、即ち、Ｈ＞０の場合、「繰り返し単位１」の最後の１回は、暗号通信装置Ｂの暗号処理部２０５がブロックのレングスより小さいレングスのデータを暗号演算することになる。そのため、暗号通信装置Ｂの制御部２０２は、実施の形態１と同様に、ブロックレングスに満たないビットにはパディング処理をステップＳ２５７で行う。
【００８４】
このように、本実施の形態において、暗号通信装置Ａの制御部２０２は、送信データの先頭からＮ個のブロックごとに切り出したデータを送信バッファＡへ順次入力する（図１３のステップＳ２５４）。そして、送信データのうち、送信バッファＡに未入力のデータがブロックＮ個分の大きさより大きくても上記容量の小さいバッファに格納できる大きさとなった場合、暗号通信装置Ａの制御部２０２は、当該データを送信バッファＡへ一度に入力する（図１３のステップＳ２５４）。暗号通信装置Ａの通信部２０１は、暗号通信装置Ａの制御部２０２から送信バッファＡへデータが入力される度に、当該データを送信バッファＡから暗号通信装置Ｂへ送信する（図１３のステップＳ２５５）。
【００８５】
「繰り返し単位１」が全て終了すれば、暗号通信装置Ｂの結果格納メモリ２１６には暗号演算が終わったデータが格納されていることになる。また、受信バッファＢは空になったので、バッファ空レジスタ２１８のバッファ空フラグがたつ。暗号通信装置Ｂの通信部２０１は、このバッファ空フラグ（バッファ空通知）をステップＳ２６１で暗号通信装置Ａに送り、暗号通信装置Ａの通信部２０１は、ステップＳ２６２でバッファ空フラグを受信する。
【００８６】
暗号通信システム１００では、ステップＳ２５４からステップＳ２６２までの処理が、送信データメモリ２１１のデータがなくなるまで繰り返される。図１３では、この繰り返しの範囲を「繰り返し単位２」で示した。
【００８７】
「繰り返し単位２」が全て終了すれば、暗号通信装置Ｂの結果格納メモリ２１６には暗号演算が終わった全てのデータが格納されていることになる。暗号通信装置Ｂの制御部２０２は、ステップＳ２６３で、その内容が真正なものか否かを判定して、真偽レジスタ２１７の真偽フラグを設定する。暗号通信装置Ｂの通信部２０１は、この真偽フラグ（真偽判定通知）をステップＳ２６４で暗号通信装置Ａに送り、暗号通信装置Ａの通信部２０１は、ステップＳ２６５で真偽フラグを受信する。
【００８８】
このように、本実施の形態において、暗号通信装置Ｂの通信部２０１は、暗号通信装置Ａからデータが送信される度に、当該データを受信バッファＢで受信する（図１３のステップＳ２５６）。暗号通信装置Ｂの制御部２０２は、当該データを受信バッファＢから出力する（図１３のステップＳ２５７）。暗号通信装置Ｂの暗号処理部２０５は、暗号通信装置Ｂの制御部２０２により受信バッファＢからデータが出力される度に、当該データをブロック暗号により順次暗号化（復号化）する（図１３のステップＳ２５８、Ｓ２５９）。暗号通信装置Ｂの制御部２０２は、暗号通信装置Ｂの暗号処理部２０５により暗号化されたデータを検証して、送信データの真偽を判定する（図１３のステップＳ２６３）。そして、暗号通信装置Ｂの制御部２０２は、当該判定結果を、暗号通信装置Ｂの通信部２０１を介して暗号通信装置Ａに通知する（図１３のステップＳ２６４）。
【００８９】
次に、本実施の形態の効果について説明をする。
【００９０】
本実施の形態では、暗号演算を行う前に、データを受け取る側である暗号通信装置Ｂの受信バッファＢの大きさを通知し、暗号演算の単位であるブロックが最も大きくとれるように、送信ブロック数Ｎを設定する。このことにより、受信バッファＢのうち通信に使用されない領域をシステムで最小にすることができるようになる。このことは、データのレングスが長く、複数回暗号演算を行わなければならない暗号通信装置であっても、通信回数を最も小さく設定できることを示している。
【００９１】
本実施の形態では、さらに、通信データのフォーマットをブロック数と端数を記述するようにし、かつ、未送信データのレングスと受信バッファＢ（又は送信バッファＡ）のうち通信に使用されない領域（前述した差Ｓに相当）とを比較し、未送信データが全受信バッファＢを使用すれば送信可能である場合、未送信データを全て送信し、そのデータを受信先で真偽判定処理するようにしたので、通信回数をさらに１回減らすことができる。
【００９２】
本実施の形態では、送信パラメータ設定処理を行ってから、データ真偽判定処理を行うとしたが、暗号通信装置の組み合わせが決まっている場合、受信バッファＢの大きさは予めわかっているので、事前に送信パラメータを決めておき、データ処理時は、送信パラメータ設定処理は行わず、データ真偽判定処理だけにしてもよい。
【００９３】
また、本実施の形態では、送信データ分割を未送信データのレングスと受信バッファＢのうち通信に使用されない領域とを逐次考慮して決めていたが、固定長のデータを扱う場合は、送信データの分割パターンは決まっているので、事前に分割パターンを決めておき、逐次判断を行わず分割パターンに従って、データ分割を行うようにしてもよい。
【００９４】
また、本実施の形態の説明では暗号通信装置という個別の装置を例にとったが、１チップマイコンチップと暗号演算が可能なセキュアなマイコンチップとの間の通信でも構わない。
【００９５】
以上のように、本実施の形態では、一方の装置内で共通鍵暗号アルゴリズムを用いて暗号演算を行う暗号通信システム１００が、
暗号演算を行う暗号通信装置Ｂの受信バッファＢのレングスから、ブロック単位で最大の送信ブロックと送信ブロック数に対応するレングスとの差を送信パラメータとして設定する送信パラメータ設定処理と、
送信ブロック数、上記の差、未送信データのレングスから、受信先の全受信バッファＢを使用すれば送信できる場合は、送信ブロック数以上の未送信データを送信し、送信されたブロック数、端数に基づき暗号演算を行うデータ暗号化処理（データ真偽判定処理）とを実行することを特徴とする。
【００９６】
また、本実施の形態の変形例では、一方の装置内で共通鍵暗号アルゴリズムを用いて暗号演算を行う暗号通信システム１００が、
暗号演算を行う暗号通信装置Ｂの受信バッファＢのレングスから、ブロック単位で最大の送信ブロックと送信ブロック数に対応するレングスとの差を送信パラメータとして事前に設定する送信パラメータ設定処理と、
データ暗号化処理時は上記送受信パラメータ設定処理を行わず、送信ブロック数、上記の差、未送信データのレングスから、受信先の全受信バッファＢを使用すれば送信できる場合は、送信ブロック数以上の未送信データを送信し、送信されたブロック数、端数に基づき暗号演算を行うデータ暗号化処理（データ真偽判定処理）とを実行することを特徴とする。
【００９７】
また、本実施の形態の変形例では、一方の装置内で共通鍵暗号アルゴリズムを用いて暗号演算を行う暗号通信システム１００が、
暗号演算を行う暗号通信装置Ｂの受信バッファＢのレングスから、ブロック単位で最大の送信ブロックと送信ブロック数に対応するレングスとの差を送信パラメータとして事前に設定する送信パラメータ設定処理と、
データ暗号化処理時は上記送受信パラメータ設定処理を行わず、暗号化処理以前に上記送受信パラメータを考慮して送信パターンを設定し、暗号化処理時は前記送信パターンに基づいてデータを送信し、送信されたブロック数、端数に基づき暗号演算を行うデータ暗号化処理（データ真偽判定処理）とを実行することを特徴とする。
【００９８】
また、本実施の形態では、暗号通信データフォーマットが、データのレングスを示す数値として、少なくともブロック数と端数を含んでいることを特徴とする。
【００９９】
以上、本発明の実施の形態について説明したが、これらのうち、２つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、１つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、２つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【図面の簡単な説明】
【０１００】
【図１】実施の形態１に係る暗号通信システムの構成を示すブロック図である。
【図２】実施の形態１に係る通信装置が他の通信装置にデータの暗号化を行わせる際に、各通信装置においてデータの受け渡しを行う主な構成要素を示すブロック図である。
【図３】実施の形態１に係る通信装置のハードウェア構成の一例を示す図である。
【図４】実施の形態１に係る通信方法を示すフローチャートである。
【図５】実施の形態１に係る通信方法を示すフローチャートである。
【図６】実施の形態１に係る通信方法を示すフローチャートである。
【図７】実施の形態１に係る送信データのフォーマットを示す図である。
【図８】実施の形態１に係る通信方法を用いた例を示す図である。
【図９】従来例を示す図である。
【図１０】実施の形態２に係る通信装置が他の通信装置にデータの暗号化を行わせる際に、各通信装置においてデータの受け渡しを行う主な構成要素を示すブロック図である。
【図１１】実施の形態２に係る通信方法を示すフローチャートである。
【図１２】実施の形態２に係る通信方法を示すフローチャートである。
【図１３】実施の形態２に係る通信方法を示すフローチャートである。
【符号の説明】
【０１０１】
１００  暗号通信システム、１０１  通信データ、２００ａ，２００ｂ  通信装置、２０１  通信部、２０２  制御部、２０３  不揮発メモリ、２０４  乱数生成器、２０５  暗号処理部、２１１  送信データメモリ、２１２  受信データメモリ、２１３  ブロック入力部、２１４  暗号演算部、２１５  ブロック出力部、２１６  結果格納メモリ、２１７  真偽レジスタ、２１８  バッファ空レジスタ、３０１  ヘッダ、３０２  ブロック数、３０３  端数、３０４  データ、９０１  表示装置、９０２  操作キー、９０３  操作ボタン、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
2010016526.tif 000003
【図２】
2010016526.tif 000004
【図３】
2010016526.tif 000005
【図４】
2010016526.tif 000006
【図５】
2010016526.tif 000007
【図６】
2010016526.tif 000008
【図７】
2010016526.tif 000009
【図８】
2010016526.tif 000010
【図９】
2010016526.tif 000011
【図１０】
2010016526.tif 000012
【図１１】
2010016526.tif 000013
【図１２】
2010016526.tif 000014
【図１３】
2010016526.tif 000015