(57)【要約】【課題】送るメッセージが決まる前に事前処理を可能とする。【解決手段】乱数Ｒのハッシュ関数値Ｋ＝Ｇ（Ｒ）と一方向性置換ｃ１＝ｆ（Ｒ）を求め乱数ｍ′，ｒ′のトラップドアハッシュ関数値ｈ＝Ｈ（ｍ′，ｒ′）を求め署名σ＝Ｓｉｇ（ｃ１，ｈ）を求めｃ１，ｈ，σを受信者に送信しその後メッセージｍと（ｍ′，ｒ′）についてＨのデータ変換値ｒをトラップドア情報ＴＫを用いて求めＫでｍ‖ｒを暗号化したｃ２を受信者に送る。受信者はσが（ｃ１，ｈ）に対する署名であることを検証しｃ１に対し逆関数ｆ−１の演算を行いＲを得てＫ＝Ｇ（Ｒ）を求めｃ２をＫで復号しそのｍとｒに対しｈ′＝Ｈ（ｍ，ｒ）を求めｈ′＝ｈであることを検証する。【選択図】      図６
2004228916.tif 000002
【特許請求の範囲】
【請求項１】
送信者の装置（以下、送信者装置と記す）は乱数Ｒを生成する過程と、
乱数Ｒについてハッシュ関数Ｇを演算して共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
乱数Ｒについて落し戸付き一方向性置換ｆを演算して置換値ｃ１＝ｆ（Ｒ）を求める過程と、
乱数ｒを生成する過程と、
乱数ｒとメッセージｍについてトラップドアハッシュ関数Ｈを計算してハッシュ値ｈ＝Ｈ（ｍ，ｒ）を求める過程と、
ハッシュ値ｈと置換値ｃ１についてデジタル署名演算して署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する過程と、
メッセージｍおよび乱数ｒの連結を共通鍵Ｋで暗号化し、暗号文ｃ２＝Ｅ（ｍ‖ｒ）を生成する過程と、
置換値ｃ１、暗号文ｃ２、ハッシュ値ｈ、署名σを署名暗号（ｃ１，ｃ２，ｈ，σ）として受信者の装置（以下、受信者装置と記す）に送信する過程と、
受信者装置は署名暗号（ｃ１，ｃ２，ｈ，σ）を受信する過程と、
受信した置換値ｃ１、ハッシュ値ｈ、署名σを用いて署名σが（ｃ１，ｈ）に対する正しい署名であることを検証する過程と、
その検証に合格すると落し戸付き一方向性関数ｆの落し戸情報ｔｋを用いて置換値ｃ１について逆関数ｆ−１を計算して乱数Ｒ＝ｆ−１（ｃ１）を得る過程と、
その乱数Ｒについてハッシュ関数演算Ｇを施し、共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
その共通鍵Ｋを用いて受信した暗号文ｃ２を復号してメッセージｍと乱数ｒの連結を求める過程と、
このメッセージｍと乱数ｒについてトラップドアハッシュ関数Ｈを演算してハッシュ値ｈ′＝Ｈ（ｍ，ｒ）を求める過程と、
このハッシュ値ｈ′と受信したハッシュ値ｈとが等しいか否かを調べる過程と、
両ハッシュ値が等しければ正しく処理された署名暗号としてメッセージｍを出力する過程と
を有する署名暗号方法。
【請求項２】
送信者装置は乱数Ｒを生成する過程と、
乱数Ｒについてハッシュ関数Ｇを演算として共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
乱数Ｒについて落し戸付き一方向性置換ｆを計算して置換値ｃ１＝ｆ（Ｒ）を求める過程と、
乱数ｍ′およびｒ′を生成する過程と、
乱数ｍ′，ｒ′についてトラップドアハッシュ関数Ｈを計算してハッシュ値ｈ＝Ｈ（ｍ′，ｒ′）を求める過程と、
置換値ｃ１とハッシュ値ｈに対するデジタル署名演算を施して署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する過程と、
置換値ｃ１、ハッシュ値ｈ、署名σを事前計算値（ｃ１，ｈ，σ）として受信者装置へ送信する過程と、
メッセージｍが送信できる状態になると乱数ｍ′およびｒ′とメッセージｍについてトラップドアハッシュ関数Ｈのトラップドア情報ＴＫを用いてトラップドアハッシュ関数Ｈのデータ変換ＳＷを計算して変換乱数ｒ＝ＳＷ（（ｍ′，ｒ′），ｍ）を求める過程と、
メッセージｍと変換乱数ｒの連結を共通鍵Ｋを用いて暗号化して暗号文ｃ２＝Ｅ（ｍ‖ｒ）を計算する過程と、
暗号文ｃ２を受信者装置へ送信する過程と、
受信者装置は事前計算値（ｃ１，ｈ，σ）を受信する過程と、
受信した署名σが置換値ｃ１とハッシュ値ｈに対する正しい署名になっているかを検証する過程と、
その検証に合格すると落し戸付き一方向性関数ｆの落し戸情報ｔｋを用いて逆関数ｆ−１を計算して乱数Ｒを求める過程と、
乱数Ｒについてハッシュ関数Ｇを計算して共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
暗号文ｃ２を受信する過程と、
受信した暗号文ｃ２を共通鍵Ｋで復号してメッセージｍと変換乱数ｒの連結を求める過程と、
そのメッセージｍと変換乱数ｒについてトラップドアハッシュ関数Ｈを計算してハッシュ値ｈ′＝Ｈ（ｍ，ｒ）を求める過程と、
ハッシュ値ｈ′が受信したハッシュ値ｈと等しいか否か検証する過程と、
両ハッシュ値が等しければメッセージｍを正しく署名暗号処理されたと判断してメッセージｍを出力する過程と
を有する署名暗号方法。
【請求項３】
メッセージｍに対する署名暗号を生成して受信者装置へ送信する送信者装置であって、
署名鍵などが格納される記憶部と、
乱数Ｒ，ｒを生成する乱数生成部と、
メッセージを入力する入力部と、
乱数Ｒが入力され、ハッシュ関数Ｇを施して共通鍵Ｋ＝Ｇ（Ｒ）を生成する共通鍵生成部と、
乱数Ｒが入力され、落し戸付き一方向性置換ｆを計算して置換値ｃ１＝ｆ（Ｒ）を求める一方向性置換部と、
乱数ｒとメッセージｍが入力され、トラップドアハッシュ関数Ｈを計算してハッシュ値ｈ＝Ｈ（ｍ，ｒ）を求めるトラップドアハッシュ演算部と、
置換値ｃ１とハッシュ値ｈが入力され、署名鍵を用いた署名演算を行って署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する署名部と、
メッセージｍと乱数ｒが入力され、共通鍵Ｋにより暗号化して暗号文ｃ２＝Ｅ（ｍ‖ｒ）を生成する暗号部と、
置換値ｃ１、暗号文ｃ２、ハッシュ値ｈ、署名σを署名暗号文（ｃ１，ｃ２，ｈ，σ）として受信者装置へ送信する送信部と、
各部と順次動作させる制御部と
を具備する送信者装置。
【請求項４】
受信した署名暗号を検証復号して正当なメッセージｍを出力る受信者装置であって、
検証鍵、落し戸付き一方向性関数ｆの落し戸情報ｔｋなどが格納される記憶部と、
署名暗号（ｃ１，ｃ２，ｈ，σ）または、事前計算値（ｃ１，ｈ，σ）および暗号文ｃ２を受信する受信部と、
受信した置換値ｃ１、ハッシュ値ｈおよび署名σが入力され、検証鍵を用いてσが（ｃ１，ｈ）に対する正しい署名になっているかを検証する検証部と、
その検証部からの合格を示す信号で動作し、受信した置換値が入力され、落し戸情報ｔｋを用いて落し戸付き一方向性関数ｆの逆関数ｆ−１を計算して乱数Ｒ＝ｆ−１（ｃ１）を求める逆関数部と、
乱数Ｒが入力され、ハッシュ関数Ｇを計算して共通鍵Ｋ＝Ｇ（Ｒ）を生成する共通鍵生成部と、
受信した暗号文ｃ２が入力され、共通鍵Ｋで復号を行って、メッセージｍと乱数ｒの連結を求める復号部と、
メッセージｍと乱数ｒが入力され、トラップドアハッシュ関数Ｈを計算してハッシュ値ｈ′＝Ｈ（ｍ，ｒ）を求めるトラップドアハッシュ関数部と、
ハッシュ値ｈ′と受信したハッシュ値ｈが入力され、両ハッシュ値が等しいか否か比較する比較部と、
比較部よりの等しい比較結果により動作し、メッセージｍを出力する出力部と、
各部を動作させる制御部と
を具備する受信者装置。
【請求項５】
メッセージｍに対する署名暗号を生成して受信者装置へ送信する送信者装置であって、
署名鍵、トラップドアハッシュ関数Ｈのトラップドア情報ＴＫなどが格納される記憶部と、
メッセージｍを入力する入力部と、
乱数Ｒ，ｍ′，ｒ′を生成する乱数生成部と、
乱数Ｒが入力され、ハッシュ関数Ｇを計算して共通鍵Ｋ＝Ｇ（Ｒ）を生成する共通鍵生成部と、
乱数Ｒが入力され、落し戸付き一方向性置換ｆを計算して置換値ｃ１＝ｆ（Ｒ）を生成する置換部と、
乱数ｍ′，ｒ′が入力され、トラップドアハッシュ関数を計算し、ハッシュ値ｈ＝Ｈ（ｍ′，ｒ′）を求めるトラップドアハッシュ関数部と、
置換値ｃ１、ハッシュ値ｈが入力され、署名鍵を用いて署名演算して署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する署名部と、
メッセージｍと乱数ｍ′およびｒ′が入力され、トラップドア情報ＴＫを用いてトラップドアハッシュ関数Ｈのデータ変換ＳＷを計算して乱数ｒ＝ＳＷ（（ｍ′，ｒ′），ｍ）を求めるデータ変換部と、
メッセージｍと乱数ｒが入力され、共通鍵Ｋにより暗号化して暗号文ｃ２＝Ｅ（ｍ‖ｒ）を生成する暗号部と、
置換値ｃ１、ハッシュ値ｈおよび署名σが入力され、事前計算値（ｃ１，ｈ，σ）として、受信者装置へ送信し、暗号文ｃ２が入力され、事前計算値と対応する暗号文ｃ２として受信者装置へ送信する送信部と、
各部を動作させる制御部とを備える送信者装置。
【請求項６】
乱数Ｒを生成する過程と、
乱数Ｒについてハッシュ関数Ｇを演算して共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
乱数Ｒについて落し戸付き一方向性置換ｆを演算して置換値ｃ１＝ｆ（Ｒ）を求める過程と、
乱数ｒを生成する過程と、
乱数ｒとメッセージｍについてトラップドアハッシュ関数Ｈを計算してハッシュ値ｈ＝Ｈ（ｍ，ｒ）を求める過程と、
ハッシュ値ｈと置換値ｃ１についてデジタル署名演算して署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する過程と、
メッセージｍおよび乱数ｒの連結を共通鍵Ｋで暗号化し、暗号文ｃ２＝Ｅ（ｍ‖ｒ）を生成する過程と、
置換値ｃ１、暗号文ｃ２、ハッシュ値ｈ、署名σを署名暗号（ｃ１，ｃ２，ｈ，σ）として受信者の装置に送信する過程と
をコンピュータに実行させるための署名暗号プログラム。
【請求項７】
署名暗号（ｃ１，ｃ２，ｈ，σ）を受信する過程と、
受信した置換値ｃ１、ハッシュ値ｈ、署名σを用いて署名σが（ｃ１，ｈ）に対する正しい署名であることを検証する過程と、
その検証に合格すると落し戸付き一方向性関数ｆの落し戸情報ｔｋを用いて置換値ｃ１について逆関数ｆ−１を計算して乱数Ｒ＝ｆ−１（ｃ１）を得る過程と、
その乱数Ｒについてハッシュ関数演算Ｇを施し、共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
その共通鍵Ｋを用いて受信した暗号文ｃ２を復号してメッセージｍと乱数ｒの連結を求める過程と、
このメッセージｍと乱数ｒについてトラップドアハッシュ関数Ｈを演算してハッシュ値ｈ′＝Ｈ（ｍ，ｒ）を求める過程と、
このハッシュ値ｈ′と受信したハッシュ値ｈとが等しいか否かを調べる過程と、
両ハッシュ値が等しければ正しく処理された署名暗号としてメッセージｍを出力する過程と
をコンピュータに実行させるための署名暗号検証復号プログラム。
【請求項８】
乱数Ｒを生成する過程と、
乱数Ｒについてハッシュ関数Ｇを演算として共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
乱数Ｒについて落し戸付き一方向性置換ｆを計算して置換値ｃ１＝ｆ（Ｒ）を求める過程と、
乱数ｍ′およびｒ′を生成する過程と、
乱数ｍ′，ｒ′についてトラップドアハッシュ関数Ｈを計算してハッシュ値ｈ＝Ｈ（ｍ′，ｒ′）を求める過程と、
置換値ｃ１とハッシュ値ｈに対するデジタル署名演算を施して署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する過程と、
置換値ｃ１、ハッシュ値ｈ、署名σを事前計算値（ｃ１，ｈ，σ）として受信者装置へ送信する過程と、
メッセージｍが送信できる状態になると乱数ｍ′およびｒ′とメッセージｍについてトラップドアハッシュ関数Ｈのトラップドア情報ＴＫを用いてトラップドアハッシュ関数Ｈのデータ変換ＳＷを計算して変換乱数ｒ＝ＳＷ（（ｍ′，ｒ′），ｍ）を求める過程と、
メッセージｍと変換乱数ｒの連結を共通鍵Ｋを用いて暗号化して暗号文ｃ２＝Ｅ（ｍ‖ｒ）を計算する過程と、
暗号文ｃ２を受信者装置へ送信する過程と
をコンピュータに実行させるための署名暗号プログラム。
【請求項９】
事前計算値（ｃ１，ｈ，σ）を受信する過程と、
受信した署名σが置換値ｃ１とハッシュ値ｈに対する正しい署名になっているかを検証する過程と、
その検証に合格すると落し戸付き一方向値関数ｆの落し戸情報ｔｋを用いて逆関数ｆ−１を計算して乱数Ｒを求める過程と、
乱数Ｒについてハッシュ関数Ｇを計算して共通鍵Ｋ＝Ｇ（Ｒ）を生成する過程と、
暗号文ｃ２を受信する過程と、
受信した暗号文ｃ２を共通鍵Ｋで復号してメッセージｍと変換乱数ｒの連結を求める過程と、
そのメッセージｍと変換乱数ｒについてトラップドアハッシュ関数Ｈを計算してハッシュ値ｈ′＝Ｈ（ｍ，ｒ）を求める過程と、
ハッシュ値ｈ′が受信したハッシュ値ｈと等しいか否か検証する過程と、
両ハッシュ値が等しければメッセージｍを正しく署名暗号処理されたと判断してメッセージｍを出力する過程と
をコンピュータに実行させるための署名暗号検証復号プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はメッセージの内容を漏らすことなくさらに送信者が送ったことを確認できる署名暗号方法とその装置及びそれを実行させるプログラムに関する。
【０００２】
【従来の技術】
署名暗号（ｓｉｇｎｃｒｙｐｔｉｏｎ）はメッセージ（一般のデータなども含む）ｍをデジタル署名してＳｉｇ（ｍ）＝σを生成し、その署名σとメッセージを暗号化してＥ（σ，ｍ）を生成する、あるいはメッセージｍを暗号化してｃ＝Ｅ（ｍ）を生成し、その暗号文ｃをデジタル署名してσ＝Ｓｉｇ（ｃ）を生成してもよい。
従来の署名暗号としては例えば非特許文献１に示されている。ここでこの発明で利用する技術について少し述べる。
一方向性関数ｆとはｘよりｙ＝ｆ（ｘ）を計算することは容易であるが、逆にｙからｘを求めることは困難な関数である。一方向性置換ｆとは、関数ｆの定義域と値域が一致した１対１であり、一方向性関数であることもある。しかし落し戸付き（トラップドア：ｔｒａｐ−ｄｏｏｒ）一方向性置換は落し戸情報ｔｋがあればその逆関数を演算することができるものである。またトラップドアハッシュ関数とは定義域Ｄ１  と定義域Ｄ２の要素を入力として値域Ｄ３の要素を出力とする関数で、それをＨと書き、  ｍ，ｍ′をＤ１の要素、ｒ，ｒ′をＤ２の要素と書くとすると、Ｈ（ｍ，ｒ）＝Ｈ（ｍ′，ｒ′）となる、異なる組（ｍ，ｒ），（ｍ′，ｒ′）を見つけることが困難なものである。しかしトラップドア情報ＴＫがあれば例えば（ｒ′，ｍ′）とｍを入力としてｒを、つまりＨ（ｍ，ｒ）＝Ｈ（ｍ′，ｒ′）となるｒを見つけることができる。このｒを演算する機能をトラップドアハッシュ関数Ｈのデータ変換機能ＳＷという。トラップドアハッシュ関数については例えば非特許文献２に記載されている。
【０００３】
【非特許文献１】
Ｙ．Ｚｈｅｎｇ，“Ｄｉｇｉｔａｌ  Ｓｉｇｎｃｒｙｐｔｉｏｎ  ｏｒ  Ｈｏｗ  ｔｏ  Ａｃｈｉｅｖｅ  Ｃｏｓｔ（Ｓｉｇｎａｔｕｒｅ  ＆  Ｅｎｃｒｙｐｔｉｏｎ）≪Ｃｏｓｔ（Ｓｉｇｎａｔｕｒｅ）＋Ｃｏｓｔ（Ｅｎｃｒｙｐｔｉｏｎ）”ｉｎ  Ｃｒｙｐｔｏ’９７，ＬＮＣＳ  Ｖｏｌ．１２９４）
【非特許文献２】
Ａ．Ｓｈａｍｉｒ  ａｎｄ  Ｙ．Ｔａｕｍａｎ，“Ｉｍｐｒｏｖｅｄ  Ｏｎｌｉｎｅ／Ｏｆｆｌｉｎｅ  Ｓｉｇｎａｔｕｒｅ  Ｓｃｈｅｍｅｓ，”Ｃｒｙｐｔｏ’０１，ｐｐ．３５５−３６７，ＬＮＣＳ  ２１３９）
【０００４】
【発明が解決しようとする課題】
従来の署名暗号においては、例えば公開鍵暗号とデジタル署名を用いているが、その公開鍵暗号として例えばＲＳＡ暗号を使用すると安全性が問題となる。一方、安全性が問題とならない公開鍵暗号を使用すると一般に計算量が多くなる。そこでこの発明の一つの目的は簡単な処理で署名暗号を可能とすることである。
【０００５】
また従来の署名暗号はメッセージが存在していて初めてそれに対して署名暗号を行うことができ、その処理の一部、特に重い処理、つまり署名暗号処理中のかなりな部分を事前に計算しておくことができなかった。署名暗号において重い処理を事前に計算しておくことができれば、予めその事前計算を行っておくことにより、例えばネットワークのトラフィック輻輳していない時に事前計算した残りの処理を行って署名暗号文を伝送することができる。あるいはパーソナルコンピュータ等の機器を用いて認証などを行う際に、その機器がアイドリング状態にあるときに事前計算を行わせておけば、機器を効率的に使うことができる。またはＩＣカード内で複数のメッセージに対する各事前計算をそれぞれ予め計算しておき、必要に応じてその都度取り出して使用する。これらのように事前計算ができればすこぶる便利である。
そこでこの発明の第二の目的は安全性が高く、かつ重い処理を事前に計算しておくことができる署名暗号を提供することにある。
【０００６】
【課題を解決するための手段】
この発明によれば送信者の装置（以下、送信者装置と記す）は乱数Ｒを生成して乱数Ｒについてハッシュ関数Ｇを演算して共通鍵Ｋ＝Ｇ（Ｒ）を生成し、またＲについて落し戸付き一方向性置換ｆを演算し、演算結果ｃ１を求め、また乱数ｒを生成してこれとメッセージｍについてトラップドアハッシュ関数Ｈを計算してｈ＝Ｈ（ｍ，ｒ）を求め、更にこのｈとｃ１をデジタル署名演算してσ＝Ｓｉｇ（ｃ１，ｈ）を生成する。またメッセージｍおよび乱数ｒの連結を共通鍵Ｋで暗号化し、暗号文ｃ２＝Ｅ（ｍ‖ｒ）を生成し、（ｃ１，ｃ２，ｈ，σ）を受信者の装置（以下、受信者装置と記す）に送信する。乱数Ｒは一方向性置換関数の定義域の値であり、乱数ｒはトラップドアハッシュ関数の一方の入力の定義域の値である。
【０００７】
受信者装置は署名暗号（ｃ１，ｃ２，ｈ，σ）を受信するとｃ１，ｈ，σを用いて署名σが（ｃ１，ｈ）に対する正しい署名であるかを検証し、その検証に合格すると落し戸付き一方向性関数ｆの落し戸情報ｔｋを用いてｃ１について逆関数ｆ−１を計算し、計算結果Ｒ＝ｆ−１（ｃ１）を得る。その計算結果Ｒについてハッシュ関数演算Ｇを施し、共通鍵Ｋ＝Ｇ（Ｒ）を生成する。その共通鍵Ｋを用いて受信したｃ２を復号してｍ‖ｒを求める。このｍとｒについてトラップドアハッシュ関数Ｈを演算しｈ′＝Ｈ（ｍ，ｒ）を生成し、このｈ′と受信したｈとが等しいかを調べ、等しければ正しく処理されたものとしてメッセージｍを出力する。
【０００８】
ここで一方向性置換は基本的な演算で処理が簡単であり、また署名の検証とトラップドアハッシュ関数値ｈ′と受信したｈとが一致するかを検証し、この二つの検証に合格して初めて正しく処理されたものとしているから、処理が簡単でかつ安全性が高いものとなる。
また送信側でまずｒの代わりにｒ′を用い、かつメッセージｍの代わりに乱数ｍ′を用いてトラップドアハッシュ関数値ｈ＝Ｈ（ｍ′，ｒ′）を求め、共通鍵の生成Ｋ、一方向性置換値ｃ１、署名σを先と同様に求め、ｃ１，σを受信者装置に送信する。
【０００９】
受信者装置では前述と同様に署名σがｃ１，ｈに対する署名であることを検証しｃ１について逆関数値Ｒ＝ｆ−１（ｃ１）を求めて更に共通鍵Ｋを求める。送信者装置においてメッセージを処理できる状態になるとそのメッセージｍと前記乱数（ｍ′，ｒ′）とトラップドアハッシュ関数Ｈのトラップドア情報ＴＫとを入力としてトラップドアハッシュ関数のデータ変換機能によりｒを求め、つまりＨ（ｍ′，ｒ′）＝Ｈ（ｍ，ｒ）となるｒを求め、先と同様に暗号文ｃ２＝Ｅ（ｍ‖ｒ）を求めてｃ２を送信する。受信者装置はｃ２を受信すると先に求めた共通鍵Ｋで復号してｍ‖ｒを求め、更にトラップドアハッシュ関数値を求めて同様の処理を行う。
【００１０】
このようにメッセージを送る状態になる前に事前処理を行いその後メッセージに対する処理は簡単な処理で済ますことができる。送信者装置におけるこの事前処理の結果は受信者装置に予め送っておいてもよく、メッセージに対する処理と共に送ってもよい。
【００１１】
【発明の実施の形態】
実施形態１
図１および図２に実施形態１の流れ図を、図３および図４に機能構成をそれぞれ示す。
図３に示す送信者装置は例えばパーソナルコンピュータにより構成され、その乱数生成部１１で乱数Ｒを生成し（Ｓ１）（図１参照）、この乱数Ｒについて共通鍵生成部１２でハッシュ関数演算Ｇを施し、共通鍵Ｋ＝Ｇ（Ｒ）を生成し、また落し戸付き一方向性置換部１３で乱数Ｒについて一方向性置換ｆを施し、ｃ１＝ｆ（Ｒ）を求める（Ｓ２）。
【００１２】
また乱数生成部１１から乱数ｒを生成し（Ｓ３）、キーボード、データベースに対するインターフェース等の入力部１４より入力されたメッセージｍと乱数ｒについてトラップドアハッシュ関数部１５で、トラップドアハッシュ関数を演算し、ハッシュ値ｈ＝Ｈ（ｍ，ｒ）を求める（Ｓ４）。先の一方向性置換値ｃ１とハッシュ関数値ｈについて、例えば記憶部１６より取り出した署名鍵ＳＫを用いて署名部１７でデジタル署名を施し、署名σ＝Ｓｉｇ（ｃ１，ｈ）を生成する（Ｓ５）。
メッセージｍと乱数ｒの連結を共通鍵Ｋを用いて暗号部１８で暗号化して暗号文ｃ２＝Ｅ（ｍ‖ｒ）を生成する（Ｓ６）。送信部１９により一方向性置換値ｃ１、暗号文ｃ２、ハッシュ値ｈ、署名σを受信者装置に送信する（Ｓ７）。
【００１３】
制御部２１は送信者装置の各部を順次動作させるものであり、例えばコンピュータの中央処理装置（ＣＰＵ）である。図１においてステップＳ１およびＳ２とステップＳ３及びＳ４との順を入れ替えてもよい。メッセージｍがこの送信者装置に入力されるとステップＳ１が処理を開始してもよく予め入力され、記憶部に格納されているメッセージｍを用いてもよい。メッセージｍは装置内部で演算処理などにより生成されたものでもよい。
【００１４】
図２と図４を参照して受信者装置の処理を説明する。
受信者装置は例えばパーソナルコンピュータで構成され、受信部３１で署名暗号（ｃ１，ｃ２，ｈ，σ）を受信すると（Ｓ１）、検証部３２で署名σが（ｃ１，ｈ）に対する正しい署名であることをこの例では記憶部３３で取り出した検証鍵ＰＫを用いて検証する（Ｓ２）。例えばσに対して検証演算を行い、その結果が（ｃ１，ｈ）と等しいかを調べる。その検証に合格すると受信したｃ１について逆関数部３４で記憶部３３で取り出した落し戸情報ｔｋを用いて落し戸付き情報置換ｆの逆関数演算を行い、その結果、乱数Ｒ＝ｆ−１（ｃ１）を得る（Ｓ３）。その逆関数値について共通鍵生成部３５でハッシュ関数Ｇを演算して共通鍵Ｋを生成する（Ｓ４）。
【００１５】
受信した暗号文ｃ２を復号部３６で共通鍵Ｋを用いて復号し、メッセージｍと乱数ｒの連結ｍ‖ｒを得る（Ｓ５）。そのメッセージｍと乱数ｒについてトラップドアハッシュ関数部３７でトラップドアハッシュ関数Ｈを演算し、ハッシュ値ｈ′とする（Ｓ６）。そのハッシュ値ｈ′と受信したハッシュ値ｈとを比較部３８で比較し（Ｓ７）、一致すれば出力部３９に指示して出力部３９は復号部３６で得られたメッセージｍを出力する（Ｓ８）。ステップＳ２の検証が不合格の場合、またステップＳ７の比較が不一致であれば、例えばそのことを受信者装置に通知する（Ｓ９）。
受信者装置の制御部４１は各部を順次動作させるもので例えばコンピュータの中央処理装置（ＣＰＵ）である。
【００１６】
実施形態２
実施形態２は事前計算として重い処理を予め行っておくことができるようにしたものである。図５と図７を参照して送信者装置の処理及び機能構成を説明する。
機能構成は図７に図３と対応する部分に同一番号を付して示してあり、図３の構成に対してトラップドアハッシュ関数Ｈのデータ変換を行うデータ変換部２２を設けた点が異なるだけである。処理としては図５に図１と対応する過程に同一ステップ番号又はこれにダッシュ「′」をつけて示し、変更された部分について簡単に説明する。
【００１７】
まずステップＳ１，Ｓ２としては図１と同一の処理を行い、次にステップＳ３′で乱数生成部１１より乱数ｍ′，ｒ′を生成し、ステップＳ４′でトラップドアハッシュ関数演算をｍ′，ｒ′について関数部１５において行い、ステップＳ５′で関数値ｈ＝Ｈ（ｍ′，ｒ′）と置換値ｃ１について署名σを署名部１７において行い、ステップＳ７′で事前計算値として（ｃ１，ｈ，σ）を送信部１９より受信者装置へ送信する。以上が送信者装置における事前処理である。
【００１８】
例えばネットワークのトラフィックの輻輳状態がとけた時やデータベースより長いデータの取込みが終了した時やキーボード等からメッセージが入力された時などのメッセージｍを送る状態になると（Ｓ１０）、乱数ｍ′，ｒ′とメッセージｍと記憶部１６から取出したトラップドアハッシュ関数Ｈのトラップドア情報ＴＫをデータ変換部２２に入力してトラップドアハッシュ関数Ｈのデータ変換ＳＷを演算し、その結果としてハッシュ値ｈ＝Ｈ（ｍ，ｒ）を満たす変換乱数ｒ＝ＳＷ（（ｍ′，ｒ′），ｍ）を得る（Ｓ１１）。なお、このデータ変換ＳＷは前記非特許文献２を見ればこの分野の人であれば容易に計算することができる。
【００１９】
次にこの変換乱数ｒとメッセージｍの連結に対して暗号部１８で共通鍵Ｋを用いて暗号化して（Ｓ６）、その暗号文ｃ２を受信者装置へ送信する（Ｓ１２）。
受信者装置の機能構成は図４に示す実施形態１のそれと同一であり、その処理は図６に図２と対応する過程に同一ステップ番号又はこれにダッシュ「′」をつけて示し、変更された部分について簡単に説明する。
ステップＳ１′では事前処理値（ｃ１，ｈ，σ）を受信し、次のステップＳ２乃至Ｓ４は実施形態１と同一であり、このステップＳ４が終わるまでが受信者装置の事前処理である。
【００２０】
次にステップＳ１０で受信部３１に暗号文ｃ２が受信されると、そのステップＳ５でその暗号文ｃ２を共通鍵Ｋを用いて復号部３６で復号してその後ステップＳ６乃至Ｓ９の処理を行うことは実施形態１と同様である。
上述において一方向性置換ｆとしてはＲＳＡ関数、Ｒａｂｉｎ関数等を用い、ハッシュ関数としてはＳＨＡ−１，ＭＤ５等を用いる。
署名方法としてはＳｃｈｎｏｒｒ署名、ＲＳＡ署名、ＥＳＩＧＮ署名等を用い、共通鍵暗号方法としてはＤＥＳ，Ｔ−ＤＥＳ，ＡＥＳ等を用い、トラップドアハッシュ関数としては前記非特許文献２に示すもの等を用いることができる。
【００２１】
図３、図４及び図７にそれぞれ示す装置はコンピュータにより機能させてもよい。その場合はコンピュータに対応する装置のプログラムをＣＤ−ＲＯＭや磁気ディスク等の記録媒体から又は通信回線を介してコンピュータ内にダウンロードしてコンピュータにそのプログラムを実行させればよい。
【００２２】
【発明の効果】
以上述べたように実施形態１で述べた発明によれば一方向性置換という基本的な道具を用いるため処理が簡単でしかも署名検証とトラップドアハッシュ関数値の比較による検証との両検証に合格した時のみこの署名暗号が正しく処理されたものとしているため安全性が高い。
実施形態２の発明では実施形態１の効果を有し、更にメッセージを送る状態になる前に重い処理を事前計算しておくことができ、すこぶる便利である。
【図面の簡単な説明】
【図１】実施形態１の送信者装置の処理の例を示す流れ図。
【図２】実施形態１の受信者装置の処理の例を示す流れ図。
【図３】実施形態１の送信者装置の機能構成例を示す図。
【図４】実施形態１の受信者装置の機能構成例を示す図。
【図５】実施形態２の送信者装置の処理の例を示す流れ図。
【図６】実施形態２の受信者装置の処理の例を示す流れ図。
【図７】実施形態２の送信者装置の機能構成例を示す図。
【図１】
2004228916.tif 000003
【図２】
2004228916.tif 000004
【図３】
2004228916.tif 000005
【図４】
2004228916.tif 000006
【図５】
2004228916.tif 000007
【図６】
2004228916.tif 000008
【図７】
2004228916.tif 000009