(57)【要約】【課題】電子データを暗号化して送受信する通信システムにおける暗号の強化。【解決手段】本発明の暗号通信システムでは、ブロックサイファを用いてメッセージＭを暗号化する時に、各ブロックに送信者端末１１０と受信者端末１５０で共有する数列Ｐを添加して、暗号化メッセージ生成処理１２０で暗号に変換して送信する。そして、受信者端末で復号してもとのメッセージを得る際に、メッセージ復元・認証処理１６０で数列部分が数列Ｐと等しいことを確認する。このため、従来技術の乱数を添加する手法を用いた場合における、差分解読法や線形解読法などの既知の平文を用いた攻撃に強い（他人に秘密鍵の推定がされにくい）という効果に加え、第三者がかつて使われた暗号化ブロックを組み合わせて暗号化文を作り送信した場合や、ブロックの抜けや自然の誤信号の混入などのエラーを検知できるようになり、暗号鍵の安全性が高まった。【選択図】図１
2005114870.tif 000002
【特許請求の範囲】
【請求項１】
送信端末と受信端末との間でメッセージを暗号化して通信する暗号通信システムであって、
前記送信端末には、
メッセージおよび共有鍵を記憶している記憶手段と、
前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部と数列をｍビット（ｍ：正の整数）毎に分割した数列部とからブロックを生成し、各ブロックを前記記憶手段からの共有鍵で暗号化して暗号化メッセージを生成する暗号化メッセージ生成手段と、
前記暗号化メッセージをブロックごとに送信する暗号化メッセージ送信手段と
を備えており、
前記受信端末には、
共有鍵を記憶している記憶手段と、
前記暗号化メッセージをブロックごとに受信する暗号化メッセージ受信手段と、
受信した前記暗号化メッセージの各ブロックを前記記憶手段からの共有鍵で復号して、復号後のブロックの数列部と前記数列をｍビット毎に分割したものとを比較して、双方が等しい場合に前記メッセージ部を得るメッセージ復元・認証手段と
を備えることを特徴とする暗号通信システム。
【請求項２】
受信側にメッセージを暗号化して送信する送信端末であって、
メッセージおよび共有鍵を記憶している記憶手段と、
前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部と数列をｍビット（ｍ：正の整数）毎に分割した数列部とからブロックを生成し、各ブロックを前記記憶手段からの共有鍵で暗号化して暗号化メッセージを生成する暗号化メッセージ生成手段と、
前記暗号化メッセージをブロックごとに送信する暗号化メッセージ送信手段と
を備えることを特徴とする送信端末。
【請求項３】
送信側からを暗号化されたメッセージを受信する受信端末であって、
共有鍵を記憶している記憶手段と、
前記暗号化メッセージをブロックごとに受信する暗号化メッセージ受信手段と、
受信した前記暗号化メッセージの各ブロックを前記記憶手段からの共有鍵で復号して、復号後のブロックの数列部と送信側と同じ数列のｍビット（ｍ：正の整数）毎に分割したものとを比較して、双方が等しい場合に前記メッセージ部を得るメッセージ復元・認証手段と
を備えることを特徴とする受信端末。
【請求項４】
前記暗号化メッセージ生成手段は、前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部にｍビット（ｍ：正の整数）の０を付加したものと前記数列をｎ＋ｍビット毎に分割した数列部との排他的論理和をとってｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの共有鍵で暗号化して暗号化メッセージを生成することを特徴とする請求項１に記載の暗号通信システム又は請求項２に記載の送信端末。
【請求項５】
前記メッセージ復元・認証手段は、受信した前記暗号化メッセージの各ブロックを前記記憶手段からの共有鍵で復号して、復号後のブロックの末尾ｍビット（ｍ：正の整数）と送信側と同じ数列をｎ＋ｍビット毎に分割したものの末尾ｍビットとを比較し、双方が等しい場合に前記復号後のブロックと前記数列をｎ＋ｍビット毎に分割したものとの排他的論理和をとって、先頭ｎビット（ｎ：正の整数）のメッセージ部を得ることを特徴とする請求項１に記載の暗号通信システム又は請求項３に記載の受信端末。
【請求項６】
前記数列は予め記憶手段に格納されていることを特徴とする、請求項１に記載の暗号通信システム又は請求項２若しくは請求項４に記載の送信端末又は請求項３若しくは請求項５に記載の受信端末。
【請求項７】
前記数列は、初期値と該初期値から数列を生成する数列生成手段から生成されることを
特徴とする、請求項１に記載の暗号通信システム又は請求項２若しくは請求項４に記載の送信端末又は請求項３若しくは請求項５に記載の受信端末。
【請求項８】
前記数列は、初期値と該初期値から数列を生成する数列生成手段から生成され、
前記メッセージ復元・認証手段で、受信した前記暗号化メッセージの最初のブロックを前記記憶手段からの共有鍵で復号し、該ブロックの数列部を前記初期値として、前記数列生成手段から数列を生成する
ことを特徴とする請求項１に記載の暗号通信システム又は請求項３若しくは請求項５に記載の受信端末。
【請求項９】
管理者端末から複数のユーザ端末にメッセージを暗号化して送信し、前記ユーザ端末から前記管理者端末に返信メッセージを暗号化して送信する暗号通信システムであって、
前記管理者端末には、
メッセージ，秘密鍵および全ユーザのパスワードを記憶している記憶手段と、
数列を生成するためのｍビット（ｍ：正の整数）の初期値を記憶している初期値記憶手段と、
前記初期値を初項とする数列を生成する数列生成手段と、
前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部に前記数列をｍビット毎に分割した数列部を付加してｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの秘密鍵で暗号化して暗号化メッセージを生成する暗号化メッセージ生成手段と、
前記暗号化メッセージをブロックごとに送信する暗号化メッセージ送信手段と、
各ユーザからの暗号化返信メッセージをブロックごとに受信する暗号化返信メッセージ受信手段と、
前記受信した最初のブロックを前記記憶手段からの秘密鍵で復号して、復号後のブロックからｍビットのユーザ毎の初期値を得て、前記数列生成手段により前記ユーザ毎の初期値を初項とする返信用数列を生成する返信用数列生成手段と、
受信した前記暗号化返信メッセージの各ブロックを前記記憶手段からの秘密鍵で復号して、復号後のブロックの末尾ｍビットの返信用数列部と前記返信用数列をｍビット毎に分割したものとを比較して、双方が等しい場合に先頭ｎビットの返信メッセージ部を得るメッセージ復元・認証手段と、
前記ユーザ毎の初期値から前記ユーザのパスワードを取り出して、前記記憶手段からの該当するユーザのパスワードと比較して、パスワードが一致する場合にユーザを認証するパスワード認証手段と
を備えており、
前記ユーザ端末には、
返信メッセージ，公開鍵およびユーザのパスワードを記憶している記憶手段と、
前記暗号化メッセージをブロックごとに受信する暗号化メッセージ受信手段と、
前記受信した最初のブロックを前記記憶手段からの公開鍵で復号して、復号後のブロックから前記ｍビットの初期値を得て、該初期値を初項とする数列を生成する数列生成手段と、
受信した前記暗号化メッセージの各ブロックを前記記憶手段からの公開鍵で復号して、復号後のブロックの末尾ｍビットの数列部と前記数列をｍビット毎に分割したものとを比較して、双方が等しい場合に先頭ｎビットのメッセージ部を得るメッセージ復元・認証手段と、
前記初期値と前記記憶手段からのパスワードとからユーザ毎の初期値を生成し、前記数列生成手段により前記ユーザ毎の初期値を初項とする返信用数列を生成する返信用数列生成手段と、
前記記憶手段からの返信メッセージをｎビット毎に分割した返信メッセージ部に前記返信用数列をｍビット毎に分割した返信用数列部を付加してｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの公開鍵で暗号化して暗号化返信メッセージを生成する暗号化返信メッセージ生成手段と、
前記暗号化返信メッセージをブロックごとに送信する暗号化返信メッセージ送信手段
と
を備えることを特徴とする暗号通信システム。
【請求項１０】
複数のユーザ端末にメッセージを暗号化して送信し、前記ユーザ端末から暗号化された返信メッセージを受信する管理者端末であって、
メッセージ，秘密鍵および全ユーザのパスワードを記憶している記憶手段と、
数列を生成するためのｍビット（ｍ：正の整数）の初期値を記憶している初期値記憶手段と、
前記初期値を初項とする数列を生成する数列生成手段と、
前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部に前記数列をｍビット毎に分割した数列部を付加してｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの秘密鍵で暗号化して暗号化メッセージを生成する暗号化メッセージ生成手段と、
前記暗号化メッセージをブロックごとに送信する暗号化メッセージ送信手段と、
各ユーザからの暗号化返信メッセージをブロックごとに受信する暗号化返信メッセージ受信手段と、
前記受信した最初のブロックを前記記憶手段からの秘密鍵で復号して、復号後のブロックからｍビットのユーザ毎の初期値を得て、前記数列生成手段により前記ユーザ毎の初期値を初項とする返信用数列を生成する返信用数列生成手段と、
受信した前記暗号化返信メッセージの各ブロックを前記記憶手段からの秘密鍵で復号して、復号後のブロックの末尾ｍビットの返信用数列部と前記返信用数列をｍビット毎に分割したものとを比較して、双方が等しい場合に先頭ｎビットの返信メッセージ部を得るメッセージ復元・認証手段と、
前記ユーザ毎の初期値から前記ユーザのパスワードを取り出して、前記記憶手段からの該当するユーザのパスワードと比較して、パスワードが一致する場合にユーザを認証するパスワード認証手段と
を備えることを特徴とする管理者端末。
【請求項１１】
管理者端末から暗号化されたメッセージを受信し、前記管理者端末に返信メッセージを暗号化して送信するユーザ端末であって、
返信メッセージ，公開鍵およびユーザのパスワードを記憶している記憶手段と、
前記暗号化メッセージをブロックごとに受信する暗号化メッセージ受信手段と、
前記受信した最初のブロックを前記記憶手段からの公開鍵で復号して、復号後のブロックから前記ｍビット（ｍ：正の整数）の初期値を得て、該初期値を初項とする数列を生成する数列生成手段と、
受信した前記暗号化メッセージの各ブロックを前記記憶手段からの公開鍵で復号して、復号後のブロックの末尾ｍビットの数列部と前記数列をｍビット毎に分割したものとを比較して、双方が等しい場合に先頭ｎビット（ｎ：正の整数）のメッセージ部を得るメッセージ復元・認証手段と、
前記初期値と前記記憶手段からのパスワードとからユーザ毎の初期値を生成し、前記数列生成手段により前記ユーザ毎の初期値を初項とする返信用数列を生成する返信用数列生成手段と、
前記記憶手段からの返信メッセージをｎビット毎に分割した返信メッセージ部に前記返信用数列をｍビット毎に分割した返信用数列部を付加してｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの公開鍵で暗号化して暗号化返信メッセージを生成する暗号化返信メッセージ生成手段と、
前記暗号化返信メッセージをブロックごとに送信する暗号化返信メッセージ送信手段
と
を備えることを特徴とするユーザ端末。
【請求項１２】
請求項１，４，５，６，７，８若しくは９に記載の暗号通信システム又は請求項２，３，４，５，６，７，８若しくは１１に記載の端末の機能をコンピュータ・システムに構築させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子データを暗号化して送受信する通信システムに関するものである。
【背景技術】
【０００２】
第三者に見られては困る文書を電子データとして保存する時には、データは暗号化され、パスワードを知らなければ解読できないように変換される。ここで利用される暗号技術として、現在広く使用されているのは、データを固定サイズのブロックに区切り、秘密鍵に依存した関数で暗号化する、ブロックサイファと呼ばれる暗号化方式と、データと暗号乱数列の排他的論理和を求めるストリームサイファと呼ばれる暗号化方式である。
また、インターネットを用いて電子商取引を行なう際にも、第三者に知られることなく、安全に２点Ａ，Ｂ間で通信を行なうために、データは暗号化して伝送されている。その時に利用される暗号技術として、現在広く利用されているのは、ＤＥＳやＴｒｉｐｌｅ  ＤＥＳ，ＡＥＳに代表される共有鍵暗号方式である。これは、通信を行なうＡ，Ｂ間でのみ共有している共有暗号鍵をもとに、送信するデータを第三者に分からないデータに変換する方法である。
ＤＥＳ（Data Encryption Standard）は、これまでアメリカ合衆国政府の国立標準研究所（ＮＩＳＴ）が、データ暗号の標準として推奨してきた共有鍵暗号方式である。Ｔｒｉｐｌｅ  ＤＥＳはＤＥＳを３回繰り返すことで、その安全性を高めた暗号方式である。ＡＥＳ（Advanced Encryption Standard）は、ＤＥＳに代わるデータ暗号の標準としてＮＩＳＴが公募し、数学者J.Daemen，V.Rijmenによって開発されたＲｉｊｉｎｄａｅｌと呼ばれる暗号化方式である。これらはすべて、共有鍵を利用して、固定サイズのブロックに区切られたデータを高速に暗号化する共有鍵暗号方式であり、ブロックサイファである。この変換に必要な計算量は大変小さく、実用性が高い。
【０００３】
しかしながら、従来の暗号方式では、データを改ざんされたり一部が無くなったりしても、気付かずに正しいデータとして使ってしまうという問題があった。また、暗号を解読しようとする際には、差分解読法や、線形解読法などの、既知の平文を暗号化させることによる攻撃がよく用いられている。すなわち攻撃する人物が、任意の文書を暗号化させられる状況では、解読に用いるデータを採取され、鍵の全数検索よりも簡単に暗号が破られるという問題があった。
これに対処する方法として、例えば特許文献１および特許文献２がある。特許文献１および特許文献２では、平文をブロックごとに区切り、各ブロックに乱数（真の意味での乱数、確率的に決まり再現性はない）を付け加え、共有鍵を用いて暗号化している。これらの方法によれば、同一の内容のブロックに対して暗号化を行なったときに、乱数部分が添付されているために、同じ鍵で暗号化しても暗号化後のブロックは毎回異なり、そのために差分解読法や線形解読法などによる共有鍵の推定が困難になるという、「共有鍵の保護」を目的とした発明である。
【特許文献１】特開平７−２８４０７号公報
【特許文献２】特開平１０−１６１５３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記の特許文献１および特許文献２の方法を用いても、第三者がかつて使われた暗号化ブロックを組み合わせて暗号化文を作り送信した場合、復号する側はそれを察知できないという問題がある。本発明の課題はこの問題を解決することである。
【課題を解決するための手段】
【０００５】
上記の課題を解決するために、本発明は、送信端末と受信端末との間でメッセージを暗号化して通信する暗号通信システムであって、前記送信端末には、メッセージおよび共有鍵を記憶している記憶手段と、前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部と数列をｍビット（ｍ：正の整数）毎に分割した数列部とからブロックを生成し、各ブロックを前記記憶手段からの共有鍵で暗号化して暗号化メッセージを生成する暗号化メッセージ生成手段と、前記暗号化メッセージをブロックごとに送信する暗号化メッセージ送信手段とを備えており、
前記受信端末には、共有鍵を記憶している記憶手段と、前記暗号化メッセージをブロックごとに受信する暗号化メッセージ受信手段と、受信した前記暗号化メッセージの各ブロックを前記記憶手段からの共有鍵で復号して、復号後のブロックの数列部と前記数列をｍビット毎に分割したものとを比較して、双方が等しい場合に前記メッセージ部を得るメッセージ復元・認証手段とを備えることを特徴とする。
上述の受信側にメッセージを暗号化して送信する送信端末および送信側から暗号化されたメッセージを受信する受信端末も本発明である。
前記暗号化メッセージ生成手段は、前記記憶手段からのメッセージをｎビット毎に分割したメッセージ部にｍビットの０を付加したものと前記数列をｎ＋ｍビット毎に分割した数列部との排他的論理和をとってｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの共有鍵で暗号化して暗号化メッセージを生成することもできる。
前記メッセージ復元・認証手段は、受信した前記暗号化メッセージの各ブロックを前記記憶手段からの共有鍵で復号して、復号後のブロックの末尾ｍビットと前記数列をｎ＋ｍビット毎に分割したものの末尾ｍビットとを比較し、双方が等しい場合に前記復号後のブロックと前記数列をｎ＋ｍビット毎に分割したものとの排他的論理和をとって、先頭ｎビットのメッセージ部を得ることもできる。
前記数列は予め記憶手段に格納されていることも、初期値と該初期値から数列を生成する数列生成手段から生成されることもできる。
また、前記数列は、初期値と該初期値から数列を生成する数列生成手段から生成されるとき、前記メッセージ復元・認証手段で、受信した前記暗号化メッセージの最初のブロックを前記記憶手段で復号し、該ブロックの数列部を前記初期値として、前記数列生成手段から数列を生成するとよい。
【０００６】
また、管理者端末から複数のユーザ端末にメッセージを暗号化して送信し、前記ユーザ端末から前記管理者端末に返信メッセージを暗号化して送信する暗号通信システムであって、前記管理者端末には、メッセージ，秘密鍵および全ユーザのパスワードを記憶している記憶手段と、数列を生成するためのｍビット（ｍ：正の整数）の初期値を記憶している初期値記憶手段と、前記初期値を初項とする数列を生成する数列生成手段と、前記記憶手段からのメッセージをｎビット（ｎ：正の整数）毎に分割したメッセージ部に前記数列をｍビット毎に分割した数列部を付加してｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの秘密鍵で暗号化して暗号化メッセージを生成する暗号化メッセージ生成手段と、前記暗号化メッセージをブロックごとに送信する暗号化メッセージ送信手段と、各ユーザからの暗号化返信メッセージをブロックごとに受信する暗号化返信メッセージ受信手段と、前記受信した最初のブロックを前記記憶手段からの秘密鍵で復号して、復号後のブロックからｍビットのユーザ毎の初期値を得て、前記数列生成手段により前記ユーザ毎の初期値を初項とする返信用数列を生成する返信用数列生成手段と、受信した前記暗号化返信メッセージの各ブロックを前記記憶手段からの秘密鍵で復号して、復号後のブロックの末尾ｍビットの返信用数列部と前記返信用数列をｍビット毎に分割したものとを比較して、双方が等しい場合に先頭ｎビットの返信メッセージ部を得るメッセージ復元・認証手段と、前記ユーザ毎の初期値から前記ユーザのパスワードを取り出して、前記記憶手段からの該当するユーザのパスワードと比較して、パスワードが一致する場合にユーザを認証するパスワード認証手段とを備えており、
前記ユーザ端末には、返信メッセージ，公開鍵およびユーザのパスワードを記憶している記憶手段と、前記暗号化メッセージをブロックごとに受信する暗号化メッセージ受信手段と、前記受信した最初のブロックを前記記憶手段からの公開鍵で復号して、復号後のブロックから前記ｍビットの初期値を得て、該初期値を初項とする数列を生成する数列生成手段と、受信した前記暗号化メッセージの各ブロックを前記記憶手段からの公開鍵で復号して、復号後のブロックの末尾ｍビットの数列部と前記数列をｍビット毎に分割したものとを比較して、双方が等しい場合に先頭ｎビットのメッセージ部を得るメッセージ復元・認証手段と、前記初期値と前記記憶手段からのパスワードとからユーザ毎の初期値を生成し、前記数列生成手段により前記ユーザ毎の初期値を初項とする返信用数列を生成する返信用数列生成手段と、前記記憶手段からの返信メッセージをｎビット毎に分割した返信メッセージ部に前記返信用数列をｍビット毎に分割した返信用数列部を付加してｎ＋ｍビットのブロックを生成し、各ブロックを前記記憶手段からの公開鍵で暗号化して暗号化返信メッセージを生成する暗号化返信メッセージ生成手段と、前記暗号化返信メッセージをブロックごとに送信する暗号化返信メッセージ送信手段とを備えることを特徴とすることもできる。
上述の、複数のユーザ端末にメッセージを暗号化して送信し、前記ユーザ端末から暗号化された返信メッセージを受信する管理者端末、および管理者端末から暗号化されたメッセージを受信し、前記管理者端末に返信メッセージを暗号化して送信するユーザ端末も本発明である。
また、上述に記載の暗号通信システム又は端末の機能をコンピュータ・システムに構築させるプログラムも、本発明である。
【発明の効果】
【０００７】
本発明の暗号通信システムでは、ブロックサイファを用いて平文を暗号化する時に、各ブロックに送信者と受信者の共有する数列を添加してから変換して送信する。受信者側では復号してもとの平文を得る際に、数列部分が正しいことを確認する。このため、従来の特許文献１および特許文献２のように乱数を用いた場合における、差分解読法や線形解読法などの既知の平文を用いた攻撃に強い（他人に秘密鍵の推定がされにくい）という効果に加え、第三者がかつて使われた暗号化ブロックを組み合わせて暗号化文を作り送信した場合や、ブロックの抜けや自然の誤信号の混入などのエラーを、数列部分の確認により検知できるようになった。
このように、本発明によれば従来の方式に比べて暗号鍵の安全性を高めることができる。
【発明を実施するための形態】
【０００８】
本発明の暗号通信システムの実施形態を詳細に説明する。
図１は、本実施形態の暗号通信システムを用いたメッセージの送受信を示した図である。
図１において、１１０はメッセージ送信者の端末、１５０はメッセージ受信者の端末である。前提として、送信者端末１１０の記憶領域１１４には、送信するメッセージＭを記憶しており、送信者端末１１０の記憶領域１１２には数列Ｐを、記憶領域１１６には共有鍵を記憶している。また、送信者端末と同じ数列Ｐおよび共有鍵を、受信者端末の記憶領域１５２，１５６に記憶している。ここで、共有鍵は、従来技術の共有鍵暗号方式に基づく共有鍵である。また、数列ＰはメッセージＭに添加する特定の数列であり、メッセージの送受信ごとに異なるようにすると、より安全性が高い。数列Ｐは、メッセージの送受信の前にあらかじめ発生させて、送信者端末１１０および受信者端末１５０の記憶領域に記憶するようにしてもよいし、送信者端末１１０および受信者端末１５０で漸化式を共有し、初期値を別途送信するなどの方法で送信者端末１１０および受信者端末１５０で同じ数列を生成するようにしてもよい。初期値は、例えば、（１）初期値を送信側で決めて、最初に受信側に送信する又は受信側が自動推定する、（２）前回使用した続きから使う、又は初期値から次の初期値を作る手段を持たせる、（３）受信側で初期値を指定する、などの方法がある。
【０００９】
送信者端末１１０における暗号化メッセージ生成処理１２０は、記憶領域１１２から読み出した数列Ｐと記憶領域１１６から読み出した共有鍵を用いてメッセージＭをブロック単位で変換して暗号化メッセージＮを生成し、記憶領域（バッファ）１１８に記憶する処理であり、プログラムとして実装されている。生成された暗号化メッセージＮは、受信者端末１５０にブロック単位で送信される。
受信者端末１５０では、受信した暗号化メッセージＮの各ブロックを、記憶領域（バッファ）１５８に記憶し、メッセージ復元・認証処理１６０によりメッセージの復元を行なう。メッセージ復元・認証処理１６０は、記憶領域１５２から読み出した数列Ｐと記憶領域１５６から読み出した共有鍵を用いて暗号化メッセージＮからメッセージＭを復元して記憶領域１５４に記憶する処理であり、プログラムとして実装されている。
以降、本実施形態の暗号強化方法の各処理を、実施例を挙げて説明する。
【００１０】
（実施例１）
実施例１は、メッセージをブロック単位で変換する際に、暗号化する各ブロックの一部に数列を入れて変換し、復号後に数列部分が正しいことを確認してから数列部分を切り捨てて元のメッセージを得ることを特徴とする暗号通信システムである。
ここでは、ＡＥＳの１２８ビット鍵を用いて４ワードを１ブロックとして変換する共有鍵暗号方式での通信を考えた場合を例として説明する。ここで、１ワードとは３２ビットの情報を指し、１ブロックとは一度に変換する情報の単位を表す。
通信を行なう２者（送信者および受信者）は、ＡＥＳの変換に用いる秘密共有鍵の他に、その通信に用いる数列Ｐを共有している。
実施例１における暗号化メッセージ生成処理を、図２のフロー、および図４の出力図（送信者端末１１０側）を参照しながら説明する。なお、暗号化メッセージ生成処理は送信者端末１１０の作業領域で行なわれる。
（１）まず、数列Ｐを先頭から１ワードずつに区切り、作業領域に格納する（Ｓ２０２）。これをＰｉ（ｉ＝１，２，…）とする。
（２）一方、メッセージＭを先頭から３ワードずつに区切り、作業領域に格納する（Ｓ２０４）。これをＭｉ（ｉ＝１，２，…）とする。
（３）Ｍｉ（３ワード）とＰｉ（１ワード）を結合してブロックＢｉ（４ワード）を生成し、作業領域に格納する（Ｓ２０６）。
（４）次に、ブロックＢｉをＡＥＳで暗号化してブロックＮｉ（４ワード）を生成し、作業領域に格納する（Ｓ２０８）。
（５）ブロックＮｉを記憶領域に記憶する（Ｓ２１０）。
（６）上記（１）〜（５）をメッセージＭの末尾まで繰り返して（Ｓ２１２）、ブロックＮｉ（ｉ＝１，２，…）を生成する。メッセージＭの最後が３ワードに満たなかった場合は、例えば３ワードになるまで０を追加する。
上述により生成された暗号化メッセージＮ（Ｎ１，Ｎ２，…）を、４ワードを１ブロックとして受信者端末１５０にブロック送信する。
【００１１】
次に、実施例１におけるメッセージ復元・認証処理を、図３のフロー、および図４の出力図（受信者端末１５０側）を参照しながら説明する。なお、メッセージ復元・認証処理は受信者端末１５０の作業領域で行なわれる。
（１）まず、数列Ｐを先頭から１ワードずつに区切り、作業領域に格納する（Ｓ３０２）。これをＰｉ（ｉ＝１，２，…）とする。
（２）送信者端末１１０から受信した暗号化ブロックＮｉ（ｉ＝１，２，…）を作業領域に格納する（Ｓ３０４）。
（３）次に、ブロックＮｉをＡＥＳで復号してブロックｆ−１（Ｎｉ）を生成し、作業領域に格納する（Ｓ３０６）。
（４）ブロックｆ−１（Ｎｉ）をメッセージ部（先頭３ワード）と数列部（末尾１ワード）に分割する（Ｓ３０８）。
（５）数列部（１ワード）がＰｉと同じ数列であるかをチェックする（Ｓ３１０）。
（６）数列部とＰｉが同じ数列である場合（Ｓ３１０でＹｅｓの場合）、ブロックｆ−１（Ｎｉ）を正しいデータであると判断し、メッセージ部（＝Ｍｉ）を記憶領域に記憶する（Ｓ３１４）。
（７）上記（１）〜（６）の処理を、受信したブロックＮｉの全てについて（すなわち、メッセージＭが終了するまで）繰り返し（Ｓ３１６）、メッセージＭ（Ｍ１，Ｍ２，…）を復元することができる。
（８）一方、数列部とＰｉが同じ数列ではなかった場合（Ｓ３１０でＮｏの場合）、エラー処理を行なう（Ｓ３１２）。具体的には、まず、数列Ｐからさらに１ワード（Ｐｉ＋１）を読み込み、Ｐｉとする。そして数列部とＰｉが一致する場合には、「ここで１ブロック３ワードの情報が失われた」と宣言して、（１）のＳ３０２にもどる。数列部とＰｉが一致しない場合には、次のブロックＮｉ＋１を読み込み、Ｎｉとする。Ｎｉの数列部とＰｉが一致した場合には、「ここで１ブロック３ワードの情報にエラーが入った」と宣言して、（１）のＳ３０２にもどる。このようにして、ブロックの抜けや誤信号の混入、データの改ざんなどのエラーを検知することができる。
また、送信者と受信者とが同じ数列Ｐを共有しているため、データの順序が分からなくなった場合にも、数列部の順序を参照して正しい順序に戻すことができる。
実施例１の暗号通信システムによれば、上記のように変換後の数列部分が正しい数列であることを確認することで、改ざんされていないことを確認でき、安心してデータを利用できる。
【００１２】
（実施例２）
実施例２は、メッセージをｎビット（ｎ：正の整数）に分割しそれぞれの末尾にｍビット（ｍ：正の整数）の０を付加したブロックと、数列をｎ＋ｍビットのブロックサイズに分割したものとの排他的論理和をとって暗号化し、復号後に各ブロックの最後のｍビットが数列の該当部分に等しいことを確認してから各ブロックと数列部分の排他的論理和をとり、最後のｍビットを切り捨てて元のメッセージを得ることを特徴とする暗号通信システムである。
実施例２では、実施例１と同様の効果に加えて、たとえＡＥＳの秘密共有鍵が破られても、文書データに秘密の数列が排他的論理和で加えられているため、文書データそのものが漏れることはなく、更に安全性が高まる。
以下に、ＡＥＳの２５６ビット鍵を用いて８ワードを１ブロックとして変換する共有鍵暗号方式（以下、これをＡＥＳ２５６と呼ぶ）を例として説明する。実施例１と同様に、１ワードとは３２ビットの情報を指し、１ブロックとは一度に変換する情報の単位を表す。
また、通信を行なう２者（送信者および受信者）は、ＡＥＳの変換に用いる秘密共有鍵の他に、その通信に用いる数列Ｐを共有している。
【００１３】
実施例２における暗号化メッセージ生成処理を、図５のフロー、および図７の出力図（送信者端末１１０側）を参照しながら説明する。なお、暗号化メッセージ生成処理は送信者端末１１０の作業領域で行なわれる。
（１）まず、数列Ｐを先頭から８ワードずつに区切り、作業領域に格納する（Ｓ５０２）。これをＰｉ（ｉ＝１，２，…）とする。
（２）一方、メッセージＭを先頭から７ワードずつに区切り、作業領域に格納する（Ｓ５０４）。これをＭｉ（ｉ＝１，２，…）とする。
（３）Ｍｉに１ワード長の０を追加して８ワードのブロックＭｉ'を生成する（Ｓ５０６）。
（４）次に、Ｍｉ'（８ワード）とＰｉ（８ワード）のビットごとの排他的論理輪をとってブロックＢｉ（８ワード）を生成し、作業領域に格納する（Ｓ５０８）。
（４）次に、ブロックＢｉをＡＥＳ２５６で暗号化してブロックＮｉ（８ワード）を生成し、作業領域に格納する（Ｓ５１０）。
（５）ブロックＮｉを記憶領域（バッファ）に記憶する。
（６）上記（１）〜（５）をメッセージＭの末尾まで繰り返して（Ｓ５１２）、ブロックＮｉ（ｉ＝１，２，…）を生成する。なお、上記（３）でメッセージＭの末尾が７ワードに足りない場合には、ワード長の０を追加して８ワードに増やす。
上述により生成された暗号化メッセージＮ（Ｎ１，Ｎ２，…）を、８ワードを１ブロックとして受信者端末１５０にブロック送信する。
【００１４】
次に、実施例２におけるメッセージ復元・認証処理を、図６のフロー、および図７の出力図（受信者端末１５０側）を参照しながら説明する。なお、メッセージ復元・認証処理は受信者端末１５０の作業領域で行なわれる。
（１）まず、数列Ｐを先頭から８ワードずつに区切り、作業領域に格納する（Ｓ６０２）。これをＰｉ（ｉ＝１，２，…）とする。
（２）送信者端末１１０から受信した暗号化ブロックＮｉ（ｉ＝１，２，…）を作業領域に格納する（Ｓ６０４）。
（３）次に、ブロックＮｉをＡＥＳ２５６で復号してブロックｆ−１（Ｎｉ）を生成し、作業領域に格納する（Ｓ６０６）。
（４）ブロックｆ−１（Ｎｉ）の末尾１ワードがＰｉの末尾１ワードと同じ数列であるかをチェックする（Ｓ６０８）。
（５）ブロックｆ−１（Ｎｉ）の末尾１ワードとＰｉの末尾１ワードとが同じ数列である場合（Ｓ６０８でＹｅｓの場合）、ブロックｆ−１（Ｎｉ）を正しいデータであると判断して、ブロックｆ−１（Ｎｉ）とＰｉのビットごとの排他的論理和をとる（Ｓ６１２）。
（６）次に、（５）で排他的論理和をとったブロックをメッセージ部（先頭７ワード）と末尾１ワードに分割する（Ｓ６１４）。
（７）最後に、メッセージ部（＝Ｍｉ）を記憶領域に記憶する（Ｓ６１６）。
（８）上記（１）〜（７）の処理を、受信したブロックＮｉの全てについて（すなわち、メッセージＭが終了するまで）繰り返し（Ｓ６１８）、メッセージＭ（Ｍ１，Ｍ２，…）を復元することができる。
【００１５】
（９）一方、（４）でブロックｆ−１（Ｎｉ）の末尾１ワードとＰｉの末尾１ワードとが同じ数列ではなかった場合（Ｓ６０８でＮｏの場合）、エラー処理を行なう（Ｓ６１０）。エラー処理は実施例１と同様である。具体的には、まず、数列Ｐからさらに８ワード（Ｐｉ＋１）を読み込み、Ｐｉとする。そしてブロックｆ−１（Ｎｉ）の末尾１ワードとＰｉの末尾１ワードが一致する場合には、「ここで１ブロック７ワードの情報が失われた」と宣言して、（１）のＳ６０２にもどる。ブロックｆ−１（Ｎｉ）の末尾１ワードとＰｉの末尾１ワードとが一致しない場合には、次のブロックＮｉ＋１を読み込み、Ｎｉとする。そしてＮｉの数列部とＰｉが一致した場合には、「ここで１ブロック７ワードの情報にエラーが入った」と宣言して、（１）のＳ６０２にもどる。このようにして、ブロックの抜けや情報のエラーを検知することができる。
また、実施例１と同様に、送信者と受信者とが同じ数列Ｐを共有しているため、データの順序が分からなくなった場合にも、数列部の順序を参照して正しい順序に戻すことができる。
上記（１）〜（８）の処理順のほか、（３）の復号後に先に（５）の排他的論理和をとってから、そのブロックの末尾１ワードが０であるかをチェックして、０である場合に該ブロックが正しいデータであると判断してメッセージ部（＝Ｍｉ）を得るようにしてもよい。
【００１６】
（数列生成処理）
上記では、メッセージＭに添加する数列Ｐをあらかじめ生成して、送信者端末と受信者端末とで共有する場合を例として説明したが、数列Ｐそのもののかわりに、初期値およびその初期値から数列を生成する数列生成処理のプログラムを共有し、送信者側と受信者側の双方で、同じ初期値からメッセージＭに添加する同じ数列を生成するようにしてもよい。
このような構成とすると、初期値を送ることで、メッセージ毎に数列を変えることが容易にできる。同じ鍵で同じ文書を送っても、数列部分が毎回異なるようにすれば、２の３２乗通りの文書のどれかにランダムに変換されることになる。このため、差分解読法や、線形解読法などの、特定の文書を送ることによる攻撃が無効化されて、全数チェック以外の解読が難しくなり、共有暗号鍵の安全性も高まる。
以降、初期値となる配列Ｋから暗号乱数列Ｒを生成する処理の例を、図８のフローを参照しながら説明する。ここでは、暗号乱数列生成処理には、従来技術のメルセンヌツイスター法（http://www.math.keio.ac.jp/〜matsumoto/mt.html, M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator", ACM Trans. on Modeling and Computer Simulation Vol.8, No.1, January pp.3-30 (1998) を参照のこと。）を使用する例で説明するが、他の生成方法を用いてもよい。送信者端末および受信者端末の記憶領域には、初期値となる６２３ワード（以下）の配列Ｋと、暗号乱数列生成処理のプログラムを記憶している。暗号乱数列生成処理は送信者端末および受信者端末の作業領域で行なわれる。また、１ワードは３２ビットの情報を指す。
【００１７】
（１）まず、配列Ｋを作業領域に格納する（Ｓ８０２）。
（２）配列Ｋを初期値として擬似乱数生成アルゴリズム（ここではメルセンヌツイスター法）を初期化する（Ｓ８０４）。
（３）メルセンヌツイスター法により擬似乱数ワードを４つ発生させる（Ｓ８０６）。
（４）発生させた４ワードをハッシュ関数ＭＤ５により４ワードのハッシュ値に変換する（Ｓ８０８）。
（５）ハッシュ値の最初の１ワードをＲｉ（ｉ＝１，２，…）として出力し、残り３ワードを捨てる（Ｓ８１０）。
（６）上記（４）（５）を繰り返し（Ｓ８１２）、暗号乱数列Ｒ＝（Ｒ１，Ｒ２，…）を生成する。暗号乱数列Ｒが暗号化メッセージ生成処理に必要な長さ（すなわち、メッセージ復元・認証処理に必要な長さでもある）になるまで処理（４）（５）を繰り返せばよい。
【００１８】
また、本実施形態の暗号強化方法は、上述の実施例１および実施例２のような、共有鍵を用いた一人対一人の送受信だけでなく、一人対複数の公開鍵暗号による通信にも適用できる。以降、一人対複数の暗号通信への適用例を実施例３として説明する。
（実施例３）
実施例３は、管理者Ａと複数のユーザＢ（Ｂ１，Ｂ２，…）の間での公開鍵暗号化方式を用いた暗号通信であり、管理者Ａは秘密鍵で暗号化したデータをユーザＢに送信し、ユーザＢは公開鍵で暗号化したデータを管理者Ａに送信（返信）するが、ユーザＢからの返信の際、その変換をする各ブロックに、ユーザ識別ができる秘密の数列をつけてから変換することを特徴とする暗号通信システムである。
ここでは、２５６ビットの秘密鍵・公開鍵を用いて８ワードを１ブロックとして変換する公開鍵暗号方式での通信を考えた場合を例として説明する。実施例１および実施例２と同様に、１ワードとは３２ビットの情報を指し、１ブロックとは一度に変換する情報の単位を表す。鍵は、公開鍵暗号方式に基づく１組の秘密鍵（管理者Ａ側で使用）と公開鍵（ユーザＢ側で使用）をあらかじめ用意しておく。
また、ユーザ識別のために、３２ビットのパスワード（ｂ１，ｂ２，…）を用意しておく。そして、与えられた初期値を初項とする数列を生成する数列生成関数を管理者ＡとユーザＢとで共有する。管理者側ではｎを初期値（初項）とした数列を生成してメッセージに添加して送信し、ユーザＢｉはｂｉ＋ｎを初期値（初項）とした数列を生成して返信メッセージに添加して返信する。初期値ｎは、あらかじめ管理者ＡとユーザＢとで共有しておいてもよいが、実施例３では、初期値ｎは管理者Ａ側で発生させ、ユーザＢは受信した暗号化メッセージから数列の初期値ｎを得るものとする。
以降、図９および図１０を参照しながら実施例３の暗号強化方法を説明する。
【００１９】
（１．管理者ＡからユーザＢへのメッセージＭの送信）
図９は、実施例３において、管理者ＡからユーザＢ（ここではユーザＢ１とする）にメッセージを送信する場合の送受信を示した図である。
図９において、端末９１０は管理者Ａ（送信者）の端末、端末９５０はユーザＢ１（受信者）の端末である。前提として、管理者Ａの端末９１０には、送信するメッセージＭを格納した記憶領域９１６，３２ビットの初期値ｎを格納した記憶領域９１２，初期値ｎからｎを初項とする数列を生成するための数列生成関数ｓによる数列生成処理９１４を有している。また、公開鍵暗号化方式に基づく秘密鍵，ユーザ認証に用いる各ユーザ（Ｂ１，Ｂ２，…）の３２ビットのパスワード（ｂ１，ｂ２，…）もそれぞれ記憶領域９１８，９２０に記憶されている。
一方、ユーザＢ１の端末９５０には、公開鍵暗号化方式に基づく公開鍵，ユーザＢ１のパスワードｂ１（３２ビット）が各記憶領域９５６，９５８に記憶されている。そして、管理者Ａの端末９１０と同じ数列生成関数ｓによる数列生成処理９６２を有している。ここで、ユーザＢ１の端末９５０の初期値の記憶領域９５２には、初期値ｎは記憶されていない。
まず、管理者Ａの端末９１０において、数列生成処理９１４により、メッセージＭを送信する際に用いる数列Ｐを生成する。具体的には、初期値ｎを記憶領域９１２から読み出して、初期値ｎを初項とする数列Ｐを生成し、記憶領域９２２に記憶する。
次に、秘密鍵と生成した数列Ｐを用いて、暗号化メッセージ生成処理９２４により、メッセージＭから暗号化メッセージＮを生成して記憶領域（バッファ）９２６に記憶する。暗号化メッセージ生成処理９２４は上述の実施例１と同様である。すなわち、メッセージＭを７ワードごとに区切り、それぞれに数列Ｐを先頭から順に１ワードずつ取り出して付加して、秘密鍵で暗号化して暗号化メッセージＮの各ブロックＮｉ（ｉ＝１，２，…）（８ワード）を生成し、各ユーザ（図９ではユーザＢ１の例で示している）の端末にブロック送信する。
【００２０】
（２．ユーザＢ側でのメッセージＭの復元と初期値ｎの取得）
ユーザＢ１の端末９５０では、受信した暗号化メッセージＮを記憶領域（バッファ）９５４に格納し、暗号化メッセージＮの各ブロックと、記憶領域９５６から読み出した公開鍵を用いて、メッセージ復元・認証処理９６０により暗号化メッセージＮからメッセージＭを復元して、記憶領域９６４に記憶。メッセージ復元・認証処理９６０は上述の実施例１と同様であり、暗号化メッセージＮの各ブロックを公開鍵で復号してメッセージＭを復元する。このとき、最初の暗号化ブロック（Ｎ１）の８ワード目に入っている数列Ｐの初期値ｎを取り出してユーザＢ１の端末９５０の記憶領域９５２に格納する。そして、数列生成処理９６２により初期値ｎを初項とする数列Ｐ（管理者Ａの端末９１０で生成したものと同じ数列である）を生成して、実施例１と同様にメッセージＭのブロックの抜けや順序違いなどのエラーや改ざんをチェックする。また、この初期値ｎは後述する返信メッセージの送信（ユーザＢ１から管理者Ａへの送信）でも用いる。
【００２１】
（３．ユーザＢから管理者Ａへの返信メッセージＭ２の送信）
図１０は、実施例３において、ユーザから管理者にメッセージを返信する場合の送受信を示した図である。なお、各参照符号は図９の参照符号に対応している。また、図１０においてメッセージＭ２は返信メッセージであり、記憶領域１０５２に記憶している。
まず、ユーザＢ１の端末９５０において、メッセージＭ２を送信する際に用いる数列Ｐ２を、数列生成処理９６２により生成する。具体的には、上記で取得して記憶領域９５２に記憶した初期値ｎ（３２ビット）とユーザＢ１のパスワードｂ１（３２ビット）を記憶領域９５２，９５８から読み出して、数列生成処理９６２により初期値（初項）をｂ１＋ｎとする数列Ｐ２を生成して記憶領域１０５４に記憶する。
次に、公開鍵と数列Ｐ２を用いて、暗号化メッセージ生成処理１０５６によりメッセージＭ２から暗号化メッセージＮ２を生成し、記憶領域（バッファ）１０５８に記憶する。暗号化メッセージ生成処理は上述の実施例１と同様である。すなわち、メッセージＭ２を７ワードごとに区切り、それぞれに数列Ｐ２を先頭から順に１ワードずつ取り出して付加して、公開鍵で暗号化して暗号化メッセージＮ２の各ブロックＮ２ｉ（ｉ＝１，２，…）（８ワード）を生成し、管理者Ａの端末にブロック送信する。
【００２２】
（４．管理者Ａ側での返信メッセージＭ２の復元とユーザＢの認証）
管理者Ａの端末９１０では、受信した暗号化メッセージＮ２の各ブロックと、記憶領域９１８の秘密鍵を用いて、メッセージ復元・認証処理１００４により暗号化メッセージＮ２からメッセージＭ２を復元する。メッセージ復元・認証処理１００４は上述の実施例１と同様である。すなわち、暗号化メッセージＮ２の各ブロックを秘密鍵で復号してメッセージＭ２を復元し、記憶領域１００６に記憶する。このとき、最初の暗号化ブロック（Ｎ２１）の８ワード目に入っている数列Ｐ２の初項ｂ１＋ｎを取り出して、数列生成処理９１４によりｂ１＋ｎを初項とする数列Ｐ２（ユーザＢ１の端末９５０で生成したものと同じ数列である）を生成することができるため、実施例１と同様にメッセージＭ２のブロックの抜けや順序違いなどのエラーや改ざんをチェックすることができる。
さらに実施例３においては、この初項ｂ１＋ｎからパスワードｂ１を取り出して、管理者Ａの端末９１０の記憶領域９２０にあらかじめ記憶しているユーザＢ１のパスワードｂ１と比較することによりパスワード認証処理（パスワードｂ１が正しいことにより、送信者がユーザＢ１であることを認証する）１０１２を行なう。
実施例３では、管理者ＡはどのユーザＢからも同じ公開鍵で暗号化されたデータを受け取るが、このようにすれば、実施例１と同様の効果に加えて、管理者Ａはユーザによって異なる公開鍵を用意することなく、複数のユーザＢと通信することができる。また、管理者Ａ側で指定した初期値ｎについて、ｂｉ＋ｎを初期値とした数列を返信メッセージに付加するよう要求することで、ユーザのなりすましやメッセージの改ざんを防ぐことができる。
【図面の簡単な説明】
【００２３】
【図１】本実施形態（実施例１、実施例２）のメッセージの送受信を示した図である。
【図２】本実施形態（実施例１）の暗号化メッセージ生成処理のフローである。
【図３】本実施形態（実施例１）のメッセージ復元・認証処理のフローである。
【図４】本実施形態（実施例１）の送信側および受信側の出力図である。
【図５】本実施形態（実施例２）の暗号化メッセージ生成処理のフローである。
【図６】本実施形態（実施例２）のメッセージ復元・認証処理のフローである。
【図７】本実施形態（実施例２）の送信側および受信側の出力図である。
【図８】暗号乱数列生成処理の一例のフローである。
【図９】本実施形態（実施例３）において、管理者からユーザにメッセージを送信する場合の送受信を示した図である。
【図１０】本実施形態（実施例３）において、ユーザから管理者にメッセージを送信（返信）する場合の送受信を示した図である。
【図１】
2005114870.tif 000003
【図２】
2005114870.tif 000004
【図３】
2005114870.tif 000005
【図４】
2005114870.tif 000006
【図５】
2005114870.tif 000007
【図６】
2005114870.tif 000008
【図７】
2005114870.tif 000009
【図８】
2005114870.tif 000010
【図９】
2005114870.tif 000011
【図１０】
2005114870.tif 000012