(57)【特許請求の範囲】
【請求項１】
利用者側が、電子化された文書にデジタル署名文を付加して送信し、受信した検証者側が文書の正当性を検証するデジタル署名方法において、
署名の利用者の演算処理部が、通信する情報量に相当する長さの秘密鍵Ｋｓを生成し、これをｎ行×ｎ列のマトリックスに配列して各行列の合計値を求める所定の圧縮手順で圧縮秘密鍵Ｋｓ’に圧縮して公開鍵とし、
前記所定の圧縮手順は、任意の長さの数字列をｎ×ｎのマトリックスに順次入力して配列するステップと、前記マトリックスに配列した各行列の合計値から１０を法とする代数値、すなわち合計値が１桁のときはその数字、２桁以上のときは１０で割った余りの数値のｎ＋ｎ桁の数字列を圧縮数字として出力するステップと、前のステップで出力したｎ＋ｎ桁の圧縮数字を次のｎ×ｎのマトリックスに配列した後、残りの数字列を順次入力して配列し、これにつき前記と同様の圧縮数字を出力するステップを数字列の終わりまで繰り返すものであり、 さらに利用者側の演算処理部が、原文Ｍと前記秘密鍵Ｋｓの各桁の加算値ごとに１０を法とする代数値を求めて秘密鍵暗文ＣＫｓを組立て、これを前記所定の圧縮手順で途中まで圧縮してｎ×ｎ桁の圧縮途中秘密鍵暗文ＣＫｓ’’に圧縮して暫定署名文とし、
この暫定署名文ＣＫｓ”を原文Ｍに付加して送信し、
検証者側の演算処理部が、受信した暫定署名文ＣＫｓ”を前記所定の圧縮手順でｎ＋ｎ桁の署名文ＣＫｓ’に完全圧縮すると共に、
受信した原文Ｍを前記利用者側の演算処理部において前記所定の圧縮手順で圧縮処理して圧縮原文Ｍ’を生成し、
さらに当該圧縮原文Ｍ’と公開鍵Ｋｓ’の各桁の加算値ごとに１０を法とする代数値を求めて公開鍵暗文Ｃ’Ｋｓ’を組立て、
当該Ｃ’Ｋｓ’と前記署名文ＣＫｓ’とを比較して、一致すれば利用者の正当性を認証し、一致しなければ否認するよう構成したことを特徴とするデジタル署名方法。
【請求項２】
利用者側が、電子化された文書にデジタル署名文を付加して送信し、受信した検証者側が文書の正当性を検証するデジタル署名方法において、
署名の利用者の演算処理部が、通信する情報量に相当する長さの秘密鍵Ｋｓを生成し、これをｎ行×ｎ列のマトリックスＡに配列して各行列の合計値を求める所定の圧縮手順で圧縮秘密鍵Ｋｓ’に圧縮して公開鍵とし、
前記所定の圧縮手順は、入力数列の数字を順に、マトリックスＡ（ｎ×ｎ）につき１行目からｎ行目まで、各行ｎ個ずつ配列し、各行各列ごとに数字を合計し、それぞれ１０を法とする代数値、すなわち合計値が１桁のときはその数字、２桁以上のときは１０で割った余りの数値を求めることによりｎ＋ｎ個の圧縮数字Ａ’を得て、さらに入力数列に残りがあれば、前記圧縮数字Ａ’（ｎ＋ｎ）の最初のｎ個をマトリックスＡ（ｎ×ｎ）の1行目、残りのｎ個を２行目に配置し、前記入力数列の残りの数字のうちの最初のｎ個を３行目に配置し、これにつき前記と同様の圧縮操作により新たな圧縮数字Ａ’（ｎ＋ｎ）を得るというステップを繰り返すものであり、
さらに利用者側の演算処理部が、原文Ｍと前記秘密鍵Ｋｓの各桁の加算値につきそれぞれ１０を法とする代数値を求めて秘密鍵暗文ＣＫｓを組立て、これを前記所定の圧縮手順で途中まで圧縮してｎ×ｎ桁の圧縮途中秘密鍵暗文ＣＫｓ”に圧縮して暫定署名文とし、
この暫定署名文ＣＫｓ”を原文Ｍに付加して送信し、
検証者側の演算処理部が、受信した暫定署名文ＣＫｓ”を前記所定の圧縮手順でｎ＋ｎ桁の署名文ＣＫｓ’に完全圧縮すると共に、
受信した原文Ｍを前記利用者側の演算処理部において前記所定の圧縮手順で圧縮処理して圧縮原文Ｍ’を生成し、
さらに当該圧縮原文Ｍ’と公開鍵Ｋｓ’の各桁の加算値につきそれぞれ１０を法とする代数値を求めて公開鍵暗文Ｃ’Ｋｓ’を組立て、
当該Ｃ’Ｋｓ’と前記署名文ＣＫｓ’とを比較して、一致すれば利用者の正当性を認証し、一致しなければ否認するよう構成したことを特徴とするデジタル署名方法。
【請求項３】
利用者側の演算処理部と検証者側の演算処理部が通信路を介して通信するときは、
利用者側の演算処理部または検証者側の演算処理部が、利用者側の演算処理部と検証者側の演算処理部の双方があらかじめ共有する共通鍵Ｋｃを用い、
利用者側の演算処理部が、この共通鍵Ｋｃで前記原文Ｍと暫定署名文ＣＫｓ”を暗号化して送信し、
これを受信した検証者側の演算処理部が、前記共通鍵Ｋｃで原文Ｍと暫定署名文ＣＫｓ”に復号化するよう構成したことを特徴とする請求項１又は請求項２記載のデジタル署名方法。
【請求項４】
利用者側の演算処理部が前記暫定署名文ＣＫｓ”を送信するときは、
この暫定署名文ＣＫｓ”と、あらかじめ設定したｎ×ｎ桁の攪乱鍵Ｋｄとの各桁の加算値から代数値を求めて暗文Ｃ”に暗号化して攪乱鍵暫定署名文Ｃ”Ｋｄを組立て、
前記暫定署名文ＣＫｓ”をこの攪乱鍵暫定署名文Ｃ”Ｋｄに置換えて送信するように構成したことを特徴とする請求項１又は請求項２記載のデジタル署名方法。
【請求項５】
前記攪乱鍵Ｋｄと前記暫定署名文ＣＫｓ”を同じ長さとし、ｎ×ｎ桁の前記攪乱鍵Ｋｄをｎ×ｎのマトリックスに配列したときに、各行列の数字の合計値が１０の倍数となるように前記攪乱鍵Ｋｄの各桁の数字を設定してなる請求項４記載のデジタル署名方法。
【請求項６】
ｎ×ｎ桁の前記攪乱鍵Ｋｄをｎ×ｎのマトリックスに配列したときに、
各行列の数字の合計値の２桁目が利用者の指定した数字になるように前記攪乱鍵Ｋｄの各桁の数字を設定してなる請求項４記載のデジタル署名方法。
【請求項７】
ｎ×ｎ桁の前記攪乱鍵暫定署名文Ｃ”Ｋｄをｎ×ｎのマトリックスに配列したときに、各行列の数字の合計値の２桁目が利用者の指定した数字になるように前記攪乱鍵Ｋｄの各桁の数字を設定してなる請求項４記載のデジタル署名方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子化された文書にデジタル署名文を付加して文書の正当性を検証するデジタル署名方法に関する。
【０００２】
【発明が解決しようとする課題】
デジタル署名は、署名の利用者が文書と自分だけが知っている秘密鍵から署名文を作り、元の文書と一緒に検証者に送る。
検証者は、利用者の公開鍵と署名文と元の文書から文書の正当性を検証する。
【０００３】
このとき、利用者の送る文書が長い場合、文書を短く分割してそれぞれに一々署名文をつけるのは面倒で、署名や検証に時間がかかりすぎる。
そこで、署名文をつける文書そのものではなく、文書を圧縮してそれに署名文をつけることを行う。
【０００４】
文書の圧縮は、一般にハッシュ関数に任意の長さの文書を入力して出力がｎ未満の正整数であるような変換を行う。
ハッシュ関数は、長い文書を圧縮するものであるから、効率よく計算できるものでなければならない。
【０００５】
ところが、ハッシュ関数は、改ざんを防ぐため、関数値から元の文書が求まるようなものであってはならず、一方向性が要求される。
そのため、べき乗剰余演算を用いるＲＳＡ署名や離散対数を求めるエルガマル署名などの署名方法が提案されているが、いずれも安全性を確保するための膨大な計算量を必要とする。
【０００６】
そこで本発明は、一方向性を保ちながら膨大な計算量を必要としない簡単な圧縮方法によるデジタル署名方法を提案することを目的になされたものである。
【０００７】
【課題を解決するための手段】
かかる目的を達成するために、本発明は以下のように構成した。
すなわち、請求項１の発明は、利用者の秘匿する秘密鍵Ｋｓを所定の圧縮手順で圧縮秘密鍵Ｋｓ′に圧縮して公開鍵とし、
利用者が、
原文Ｍを前記秘密鍵Ｋｓで暗文Ｃに暗号化して秘密鍵暗文ＣＫｓを組立て、
これを前記圧縮手順で圧縮秘密鍵暗文ＣＫｓ’に圧縮して署名文とし、
この署名文ＣＫｓ’を原文Ｍに付加して送信すると共に、
検証者が、
受信した原文Ｍを前記圧縮手順で圧縮した圧縮原文Ｍ’を、
さらに公開鍵Ｋｓ’で暗文Ｃ’に暗号化して公開鍵暗文Ｃ’Ｋｓ’を組立て、
これと前記署名文ＣＫｓ’とを比較して認否を判定することを特徴とするデジタル署名方法である。
【０００８】
請求項２の発明は、利用者と検証者が共通鍵Ｋｃを共有し、
利用者と検証者が通信路を介して通信するときは、
この共通鍵Ｋｃで前記原文Ｍと署名文ＣＫｓ’を秘匿することを特徴とする請求項１記載のデジタル署名方法である。
【０００９】
請求項３の発明は、利用者が、
前記秘密鍵暗文ＣＫｓを前記圧縮手順で途中まで圧縮した圧縮途中秘密鍵暗文ＣＫｓ”を暫定署名文として送信し、
検証者が、
受信した暫定署名文ＣＫｓ”を前記圧縮手順で署名文ＣＫｓ’に完全圧縮して認否を判定することを特徴とする請求項１記載のデジタル署名方法である。
【００１０】
請求項４の発明は、利用者が前記暫定署名文ＣＫｓ”を送信するときは、
あらかじめ設定した攪乱鍵Ｋｄで暗文Ｃ”に暗号化して攪乱鍵暫定署名文Ｃ”Ｋｄを組立て、
この攪乱鍵暫定署名文Ｃ”Ｋｄを前記暫定署名文ＣＫｓ”に置換えて送信することを特徴とする請求項３記載のデジタル署名方法である。
【００１１】
請求項５の発明は、前記圧縮手順を、
任意の長さの数字列を入力して順にｎ×ｎのマトリックスに配列するステップと、
マトリックスに配列した各行列のｎ桁の数字の合計値から１０を法とする代数値のｎ＋ｎ桁の数字列を圧縮数字として出力するステップと、
前記ステップを数字列の入力の終りまで繰り返すステップと、
で構成してなる請求項１または３記載のデジタル署名方法である。
【００１２】
請求項６の発明は、前記数字列を入力してマトリックスに配列するときは、
前のステップで出力したｎ＋ｎ桁の圧縮数字を入力した数字列に混合して配列することを特徴とする請求項５記載のデジタル署名方法である。
【００１３】
請求項７の発明は、前記暗文Ｃ、Ｃ’、Ｃ”を
数字の原文と鍵の各桁の加算値から１０を法とする代数値の数字列とする請求項１または４記載のデジタル署名方法である。
【００１４】
請求項８の発明は、前記攪乱鍵Ｋｄと前記暫定署名文ＣＫｓ”を同じ長さとし、ｎ×ｎ桁の前記攪乱鍵Ｋｄをｎ×ｎのマトリックスに配列したときに、各行列の数字の合計値が１０の倍数となるように前記攪乱鍵Ｋｄの各桁の数字を設定してなる請求項４記載のデジタル署名方法である。
【００１５】
請求項９の発明は、ｎ×ｎ桁の前記攪乱鍵Ｋｄをｎ×ｎのマトリックスに配列したときに、各行列の数字の合計値の２桁目が利用者の指定した数字になるように前記攪乱鍵Ｋｄの各桁の数字を設定してなる請求項４記載のデジタル署名方法である。
【００１６】
請求項１０の発明は、ｎ×ｎ桁の前記攪乱鍵暫定署名文Ｃ”Ｋｄをｎ×ｎのマトリックスに配列したときに、各行列の数字の合計値の２桁目が利用者の指定した数字になるように前記攪乱鍵Ｋｄの各桁の数字を設定してなる請求項４記載のデジタル署名方法である。
【００１７】
【発明の実施の形態】
以下に図面を参照して本発明の実施の形態について説明する。
図１に、本発明を実施したデジタル署名方法のブロック図を示す。
なお、実施例における各処理は、キーボード等の入力部と、メモリやＣＰＵ等より構成される演算処理部と、ディスプレイ等の出力部とより構成されたコンピュータ資源上において実行される。
また各処理は、演算処理部のメモリに記憶されたプログラムの処理構成と対応するものであり、演算処理部によって実行される。
デジタル署名方法は、送信者Ｓと受信者Ｒが共通鍵Ｋｃを共有し、送信者Ｓの秘匿する秘密鍵Ｋｓを所定の圧縮手順Ｐで圧縮した圧縮秘密鍵Ｋｓ’を公開鍵とする。
圧縮手順Ｐは、任意の長さの数字列ａ（ｋ）を順にマトリックスＡ（ｎ×ｎ）に配列して圧縮数字Ａ’（ｎ＋ｎ）に圧縮する。
マトリックスＡ（ｎ×ｎ）のサイズは、数字列ａ（ｋ）を１０進数とする場合ｎ＝１２〜２４が適当である。
また、数字列ａ（ｋ）を１６進数とする場合ｎ＝１８〜３６が適当である。
これにより、１０進数の場合２４〜４８桁の数字が圧縮数字Ａ’（ｎ＋ｎ）として出力され、１６進数の場合３６〜７２桁の数字が圧縮数字Ａ’（ｎ＋ｎ）として
出力される。
【００１８】
秘密鍵Ｋｓは、コンピュータ資源を用いて署名の利用者が自分以外には秘密にする鍵を生成する。
例えば、コンピュータ資源の演算処理部は通信する情報量に相当する長さの１０進や１６進の乱数を生成する。
共通鍵Ｋｃは、コンピュータ資源の演算処理部によって利用者と検証者の間で安全な通信を行うために生成される。
例えば、ディフィ−ヘルマンの鍵共有プロトコルなどを使用して暗号通信のための共通鍵を生成する。
このとき、中間侵入を防止する必要があれば、利用者と検証者双方のＩＤ情報を付加して攻撃を防ぐ。
【００１９】
図２のフローチャートを参照して圧縮手順Ｐについて説明する。
なお圧縮手順Ｐは、コンピュータ資源の演算処理部によって実行される。
圧縮手順Ｐは、まず、任意の長さの数字列ａ（ｋ）を入力してマトリックスＡ（ｎ×ｎ）に配列する（ステップＰ０１）。
数字列ａ（ｋ）は、初回のみマトリックスＡ（ｎ×ｎ）の１行目から配列し、
配列は、左上隅の枠から数字列を１字ずつ右へ順次入力する。
ｎ字入力し終わったら次の行へ同じようにｎ字配列する。
全ての枠に数字が埋めつくされたら配列を終了する。
【００２０】
次に、マトリックスＡ（ｎ×ｎ）の各行列の数字を合計して１０を法とする代数値（合計値が１桁の時はその数値、２桁以上のときは１０で割った余りの数値）を圧縮数字Ａ’（ｎ＋ｎ）として出力する（ステップＰ０２）。
これにより、各行列のｎ桁の数字を１桁に圧縮し、全体でｎ×ｎ桁のマトリクスＡ（ｎ×ｎ）をｎ＋ｎ桁の圧縮数字Ａ’（ｎ＋ｎ）に圧縮する。
次に、数字列ａ（ｋ）に入力する残りがあるかどうかを判定し、なければ処理を終了する（ステップＰ０３）。
入力する残りがあれば、ステップＰ０２で出力した圧縮数字Ａ’（ｎ＋ｎ）をマトリックスＡ（ｎ×ｎ）の１行目と２行目に配列してステップＰ０１に戻る（ステップＰ０４）。
【００２１】
以下に、本発明を実施したデジタル署名方法の手順について説明する。
なお、以下に示す各手順はコンピュータ資源の演算処理部によって実行される。
送信者Ｓは、まず、コンピュータ資源の演算処理部を用いて原文Ｍを共通鍵Ｋｃで暗文Ｃに暗号化して共通鍵暗文ＣＫｃを組立てる（ステップＳ０１）。
暗号化は、原文Ｍと共通鍵Ｋｃの各桁の加算値から１０を法とする代数値を求めて行う。
次に、原文Ｍを秘密鍵Ｋｓで暗文Ｃに暗号化して秘密鍵暗文ＣＫｓを組立てる（ステップＳ０２）。
暗号化は、同様に原文Ｍと秘密鍵Ｋｓの各桁の加算値から１０を法とする代数値を求めて行う。
【００２２】
次に、秘密鍵暗文ＣＫｓを圧縮手順Ｐで途中まで圧縮してｎ×ｎ桁の圧縮途中秘密鍵暗文ＣＫｓ”を生成し、これを暫定署名文とする（ステップＳ０３）。
このｎ×ｎ桁の暫定署名文ＣＫｓ”は、完全圧縮するとｎ＋ｎ桁の圧縮署名文ＣＫｓ′になる。
次に、暫定署名文ＣＫｓ”をｎ×ｎ桁の攪乱鍵Ｋｄで暗号化して攪乱鍵暫定署名文Ｃ”Ｋｄを組立てる（ステップＳ０４）。
暗号化は、ｎ×ｎ桁の暫定署名文ＣＫｓ”と攪乱鍵Ｋｄの各桁の加算値から１０を法とする代数値を求めて行う。
【００２３】
攪乱鍵Ｋｄは、ｎ×ｎのマトリックスに配列したときに、各行列の数字の合計値が１０の倍数となるように各桁の数字を設定する。
従って、攪乱鍵Ｋｄを圧縮手順Ｐで完全圧縮すると、ｎ＋ｎ桁の圧縮出力は全て０となる。
圧縮途中秘密鍵暗文ＣＫｓ”は、秘密鍵暗文ＣＫｓの一部が検証者に知られることになるので、このように攪乱鍵Ｋｄで圧縮途中秘密鍵暗文ＣＫｓ”を暗号化する。
【００２４】
また、撹乱鍵Ｋｄの各行列の数字の合計値の２桁目の数はｎの桁数が１２以上であれば０〜９（１６進数ではｎが１８以上で０〜Ｆ）の範囲を設定できるので、利用者だけが知る任意の秘密数を指定できる。
この秘密数は、検証者や第三者が知り得ないので、検証者や第三者によって不正が行われた場合の証明の根拠になる。
【００２５】
さらに、攪乱鍵Ｋｄで暗号化した攪乱鍵暫定署名文Ｃ”Ｋｄの各行列の数字の合計値の２桁目の数も同様に０〜９（１６進数では０〜Ｆ）の範囲を設定できるので、検証者が確認できる任意の秘密数を指定することができる。
この秘密数は、あらかじめ検証者に知らせておくことにより、認証などに利用することができる。
【００２６】
次に、攪乱鍵暫定署名文Ｃ”Ｋｄを共通鍵Ｋｃで暗号化して共通鍵攪乱鍵暫定署名文Ｃ”ＫｄＫｃを組立てる（ステップＳ０５）。
暗号化は、ｎ×ｎ桁の攪乱鍵暫定署名文Ｃ”Ｋｄと共通鍵Ｋｃの各桁の加算値から１０を法とする代数値を求めて行う。
【００２７】
最後に、共通鍵暗文ＣＫｃに共通鍵攪乱鍵暫定署名文Ｃ”ＫｄＫｃを付加して受信者Ｒに送信する（ステップＳ０６）。
受信者Ｒは、まず、受信した共通鍵暗文ＣＫｃをコンピュータ資源の演算処理部を用いて共通鍵Ｋｃで翻訳して原文Ｍに復号する（ステップＲ０１）。
次に、原文Ｍを圧縮手順Ｐで圧縮して圧縮原文Ｍ’を生成する（ステップＲ０２）。
次に、圧縮原文Ｍ’を公開鍵Ｋｓ’で暗文Ｃ’に暗号化して公開鍵圧縮暗文Ｃ’Ｋｓ’を組立てる（ステップＲ０３）。
暗号化は、圧縮原文Ｍ’と公開鍵Ｋｓ’の各桁の加算値から１０を法とする代数値を求めて行う。
【００２８】
次に、受信した共通鍵攪乱鍵暫定署名文Ｃ”ＫｄＫｃを共通鍵Ｋｃで翻訳して攪乱鍵暫定署名文Ｃ”Ｋｄに復号する（ステップＲ０４）。
次に、ｎ×ｎ桁の攪乱鍵暫定署名文Ｃ”Ｋｄを圧縮手順Ｐで完全圧縮してｎ＋ｎ桁の圧縮署名文ＣＫｓ’を生成する（ステップＲ０５）。
【００２９】
このとき攪乱鍵Ｋｄは、前述したように、圧縮手順Ｐで完全圧縮するとｎ＋ｎ桁の圧縮出力は全て０となるので、結果的に消去される。
また、暫定署名文ＣＫｓ”は、完全圧縮するとｎ＋ｎ桁の圧縮署名文ＣＫｓ’になる。
従って、攪乱鍵暫定署名文Ｃ”Ｋｄを完全圧縮すると、圧縮署名文ＣＫｓ’と等価になる。
最後に、公開鍵圧縮暗文Ｃ’Ｋｓ’と圧縮署名文ＣＫｓ’を比較して一致すれば利用者の正当性を認証し、一致しなければ否認する（ステップＲ０６）。
【００３０】
【発明の効果】
以上説明したように、本発明のデジタル署名方法は、マトリックス演算と１０を法とする加算による圧縮と暗号化を行い、秘密鍵を圧縮して公開鍵とし、利用者が圧縮した原文を秘密鍵で暗号化して署名文を作成し、検証者が圧縮した原文を公開鍵で暗号化して署名文と比較する。
【００３１】
従って、本発明によれば、圧縮と暗号化の順序を入れ替えても１０を法とする加算の計算結果が同じになるので、べき乗剰余演算のような複雑で計算負荷の大きい演算処理をしなくても、簡単な方法で一方向性演算が可能になる。
これにより、認証効率が向上すると共に、コンピュータ資源を小型化して経済性を高めることができる。
また、マトリックスのサイズを大きくして一方向性を高めることにより、所望の安全性を確保できる。
【図面の簡単な説明】
【図１】本発明を実施したデジタル署名方法のブロック図である。
【図２】本発明を実施した圧縮手順のフローチャートである。
【符号の説明】
Ａ          マトリックス
Ａ′        圧縮数字
Ｐ          圧縮手順
Ｒ          受信者
Ｓ          送信者
ａ          数字列
【図１】
0004037601.tif 000002
【図２】
0004037601.tif 000003