(57)【要約】      （修正有）【課題】鍵のビット長を短くでき、巨大素数を用意せずとも高い安全性を容易に実現可能な暗号化技術の提供。【解決手段】暗号化装置は、Ｎ次元空間内の空間充填曲線の鍵曲線Ｈｋを複数記憶する鍵曲線記憶手段、鍵番号Ｋを復号装置と交換する鍵番号交換手段、メッセージ・コードをＮ次元空間に写像しメッセージ点Ｙを生成するメッセージ点生成手段、Ｎ次元空間の点Ａを鍵曲線ＨＫにより１次元序数空間の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）とすると、点Ｙに基づきエンコード関数ｆｅを用いＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により点Ｖを算出する暗号コード生成手段を備え、復号装置は、鍵曲線記憶手段、鍵番号交換手段、及び点Ｖに基づき、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］によりメッセージ点Ｙを算出する復号演算手段を備えた。【選択図】図１
2012177893.tif 000002
【特許請求の範囲】
【請求項１】
入力される平文コードから暗号コードを生成する暗号化装置、及び前記暗号化装置が生成する前記暗号コードを復号して前記平文コードを復元する復号装置を備えた暗号処理システムであって、
前記暗号化装置は、
Ｎ次元整数空間内の所定の部分空間ＨＣを充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）を複数記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
入力される平文コードを前記Ｎ次元整数空間の部分空間ＨＣ内の点に単射して平文コード点Ｙを生成する平文コード点生成手段と、
鍵番号Ｋを共通鍵とし、前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて前記暗号コードの生成を行う暗号コード生成手段と、を備え、
前記復号装置は、
前記暗号化装置と共通の鍵曲線Ｈｋ（ｋ＝１，２，…）を複数個記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
前記鍵番号Ｋを共通鍵とし、前記暗号化装置により生成される、前記Ｎ次元整数空間の部分空間ＨＣ内の前記暗号コードを表す点を、前記鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のデコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて前記平文コードの復元を行う復号演算手段と、
を備えたことを特徴とする暗号処理システム。
【請求項２】
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅ、前記デコード関数をｇｅで表すと、
前記復号装置は、前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１を生成し、前記鍵番号Ｋを共通鍵として、前記第一基準点Ｘ１に基づき、前記鍵曲線ＨＫ、及び前記エンコード関数ｆｅに可換な単射関数である前記デコード関数ｇｅを用いて、Ｘ２＝ＬＫ−１［ｇｅ（ＬＫ（Ｘ１））］により第二基準点Ｘ２を算出し、前記第一基準点Ｘ１及び前記第二基準点Ｘ２を公開鍵として前記暗号化装置に公開する公開鍵生成手段を備え、
前記暗号コード生成手段は、前記鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ、単射関数である前記エンコード関数ｆｅ、並びに前記復号装置により、公開鍵として公開される前記第一基準点Ｘ１及び前記第二基準点Ｘ２を用いて、Ｖ＝Ｙ＋ＬＫ−１［ｆｅ（ＬＫ（Ｘ２））］，Ｘ３＝ＬＫ−１［ｆｅ（ＬＫ（Ｘ１））］により前記暗号コードとして暗号コード点Ｖ及び第三基準点Ｘ３を算出するものであり、
前記復号演算手段は、前記暗号コード生成手段から送信される前記暗号コード点Ｖ及び前記第三基準点Ｘ３に基づき、前記鍵曲線ＨＫ及び前記デコード関数ｇｅを用いて、Ｙ＝Ｖ−ＬＫ−１［ｇｅ（ＬＫ（Ｘ３））］により前記平文コード点Ｙを算出するものであり、
前記復号装置は、前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする請求項１記載の暗号処理システム。
【請求項３】
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成手段は、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線ＨＫ及び単射関数である前記エンコード関数ｆｅを用いてＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により前記暗号コードとして暗号コード点Ｖを算出するものであり、
前記復号演算手段は、前記鍵番号Ｋを共通鍵とし、前記暗号コード点Ｖに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ及び前記エンコード関数ｆｅの逆関数ｆｅ−１である前記デコード関数を用いて、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出するものであり、
前記復号装置は、前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする請求項１記載の暗号処理システム。
【請求項４】
前記暗号化装置及び前記復号装置の前記鍵曲線生成手段は、
前記各鍵曲線Ｈｋを発生する種となる、分割指数１のＮ次元空間充填曲線であるシード曲線Ｃｋが複数格納されたシード曲線テーブルを記憶するシード曲線記憶手段と、
始点及び終点の組合せが互いに異なる、分割指数１のＮ次元空間充填曲線からなるターミナル曲線を格納するターミナル・テーブル、並びにＮ次元空間充填曲線の分割時に前記ターミナル・テーブル内の各ターミナル曲線の各アドレスに対し連結するＮ次元空間充填曲線を特定するインデックス情報を格納するインダクション・テーブルを記憶する曲線演算テーブル記憶手段と、
前記鍵番号Ｋに対するシード曲線ＣＫを前記シード曲線テーブルから読み出し、前記ターミナル・テーブルから、該シード曲線ＣＫと始点及び終点が一致するターミナル曲線ａξを索出し、前記ターミナル・テーブルの該ターミナル曲線ａξを該シード曲線ＣＫに置換するシード曲線設定手段と、
前記シード曲線ＣＫが設定された前記ターミナル・テーブルに基づき、前記インダクション・テーブル内の各インデックス情報を設定するインダクション・テーブル生成手段と、
Ｎ次元整数空間内の点Ａのアドレスが入力されると、前記シード曲線ＣＫを前記ターミナル・テーブル及び前記インダクション・テーブルにより（Ｍ−１）回（Ｍは２以上の整数）分割して生成される前記鍵曲線ＨＫにより、前記点Ａを１次元序数空間に写像した序数iAを算出する１次元写像手段と、
前記鍵曲線ＨＫ上の序数iAが入力されると、前記シード曲線ＣＫを前記ターミナル・テーブル及び前記インダクション・テーブルにより（Ｍ−１）回分割して生成される前記鍵曲線ＨＫにより、前記序数iAをＮ次元整数空間に写像した点Ａを算出するＮ次元写像手段と、を備えており、
前記暗号コード生成手段は、前記１次元写像手段により前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、また、該序数を所定のエンコード関数により単射した後、前記Ｎ次元写像手段により前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射するものであり、
前記復号演算手段は、前記１次元写像手段により前記暗号コードを表す点を、前記鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、また、該序数を所定のデコード関数により単射した後、前記Ｎ次元写像手段により前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射するものであることを特徴とする請求項１乃至３の何れか一に記載の暗号処理システム。
【請求項５】
入力される平文コードから暗号コードを生成する暗号化装置であって、
Ｎ次元整数空間内の所定の部分空間ＨＣを充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）を複数記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
入力される平文コードを前記Ｎ次元整数空間の部分空間ＨＣ内の点に写像して平文コード点Ｙを生成する平文コード点生成手段と、
鍵番号Ｋを共通鍵とし、前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて暗号化を行う暗号コード生成手段と、を備えたことを特徴とする暗号化装置。
【請求項６】
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成手段は、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ、単射関数である前記エンコード関数ｆｅ、並びに公開鍵として公開されている前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１及び第二基準点Ｘ２を用いて、Ｖ＝Ｙ＋ＬＫ−１［ｆｅ（ＬＫ（Ｘ２））］，Ｘ３＝ＬＫ−１［ｆｅ（ＬＫ（Ｘ１））］により前記暗号コードとして暗号コード点Ｖ及び第三基準点Ｘ３を算出するものであることを特徴とする請求項５記載の暗号化装置。
【請求項７】
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成手段は、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線ＨＫ及び単射関数である前記エンコード関数ｆｅを用いてＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により前記暗号コードとして暗号コード点Ｖを算出することを特徴とする請求項５記載の暗号化装置。
【請求項８】
請求項５に記載の暗号化装置により生成される暗号コードを復号し平文コードを復元する復号装置であって、
前記暗号化装置と共通の鍵曲線Ｈｋ（ｋ＝１，２，…）を複数個記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
前記暗号化装置において共通鍵として使用した鍵番号と共通の鍵番号Ｋを共通鍵とし、前記暗号化装置により生成される、前記Ｎ次元整数空間の部分空間ＨＣ内の暗号コードを表す点を、前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のデコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて前記平文コードの復元を行う復号演算手段と、を備えたことを特徴とする復号装置。
【請求項９】
請求項６に記載の暗号化装置により生成される暗号コードを復号し平文コードを復元する復号装置であって、
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記暗号化装置で使用されるエンコード関数をｆｅ、前記デコード関数をｇｅ、前記暗号化装置が前記暗号コードとして生成する暗号コード点をＶ，第三基準点をＸ３で表すと、
前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１を生成し、前記鍵番号Ｋを共通鍵として、前記第一基準点Ｘ１に基づき、前記鍵曲線ＨＫ、及び前記エンコード関数ｆｅに可換な単射関数である前記デコード関数ｇｅを用いて、Ｘ２＝ＬＫ−１［ｇｅ（ＬＫ（Ｘ１））］により第二基準点Ｘ２を算出し、前記第一基準点Ｘ１及び前記第二基準点Ｘ２を公開鍵として前記暗号化装置に公開する公開鍵生成手段を備え、
前記復号演算手段は、前記暗号コード点Ｖ及び前記第三基準点Ｘ３に基づき、前記鍵曲線ＨＫ及び前記デコード関数ｇｅを用いて、Ｙ＝Ｖ−ＬＫ−１［ｇｅ（ＬＫ（Ｘ３））］により前記平文コード点Ｙを算出するものであり、
前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする請求項８記載の復号装置。
【請求項１０】
請求項７に記載の暗号化装置により生成される暗号コードを復号し平文コードを復元する復号装置であって、
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記暗号化装置で使用されるエンコード関数をｆｅ、前記暗号化装置が前記暗号コードとして生成する暗号コード点をＶで表すと、
前記復号演算手段は、前記鍵番号Ｋを共通鍵とし、前記暗号コード点Ｖに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ及び前記エンコード関数ｆｅの逆関数ｆｅ−１である前記デコード関数を用いて、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出するものであり、
前記復号装置は、前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする請求項８記載の復号装置。
【請求項１１】
コンピュータに読み込ませて実行することにより、コンピュータを請求項５乃至７の何れか一に記載の暗号化装置として機能させることを特徴とするプログラム。
【請求項１２】
コンピュータに読み込ませて実行することにより、コンピュータを請求項８乃至１０の何れか一に記載の復号装置として機能させることを特徴とするプログラム。
【請求項１３】
電気通信回線で接続された暗号化装置及び復号装置の間において、前記暗号化装置から平文コードを暗号化した暗号コードを送信し、前記復号装置において前記暗号コードを受信して復号し前記平文コードを復元する暗号処理方法であって、
前記暗号化装置及び前記復号装置は、Ｎ次元整数空間内の所定の部分空間ＨＣを充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）を複数記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段を共通に備えており、
前記暗号化装置において、入力される平文コードを前記Ｎ次元整数空間の部分空間ＨＣ内の点に写像して平文コード点Ｙを生成する平文コード点生成ステップと、
前記暗号化装置において、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて暗号化を行う暗号コード生成ステップと、
前記復号装置において、前記鍵番号Ｋを共通鍵とし、前記暗号化装置により生成される、前記Ｎ次元整数空間の部分空間ＨＣ内の暗号コードを表す点を、前記鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のデコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて前記平文コードの復元を行う復号演算ステップと、
を備えたことを特徴とする暗号処理方法。
【請求項１４】
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅ、前記デコード関数をｇｅで表すと、
前記復号装置が、前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１を生成し、前記鍵番号Ｋを共通鍵として、前記第一基準点Ｘ１に基づき、前記鍵曲線ＨＫ、及び前記エンコード関数ｆｅに可換な単射関数である前記デコード関数ｇｅを用いて、Ｘ２＝ＬＫ−１［ｇｅ（ＬＫ（Ｘ１））］により第二基準点Ｘ２を算出し、前記第一基準点Ｘ１及び前記第二基準点Ｘ２を公開鍵として前記暗号化装置に公開する公開鍵生成ステップを有し、
前記暗号コード生成ステップにおいては、前記暗号化装置において、前記鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ、単射関数である前記エンコード関数ｆｅ、並びに前記復号装置により、公開鍵として公開される前記第一基準点Ｘ１及び前記第二基準点Ｘ２を用いて、Ｖ＝Ｙ＋ＬＫ−１［ｆｅ（ＬＫ（Ｘ２））］，Ｘ３＝ＬＫ−１［ｆｅ（ＬＫ（Ｘ１））］により前記暗号コードとして暗号コード点Ｖ及び第三基準点Ｘ３を算出し前記復号装置へ送信する処理が実行され、
前記復号演算ステップにおいては、前記復号装置において、前記暗号化装置から送信される前記暗号コード点Ｖ及び前記第三基準点Ｘ３に基づき、前記鍵曲線ＨＫ及び前記デコード関数ｇｅを用いて、Ｙ＝Ｖ−ＬＫ−１［ｇｅ（ＬＫ（Ｘ３））］により前記平文コード点Ｙを算出し、前記平文コード点Ｙから前記平文コードを復元する処理が実行されることを特徴とする請求項１３記載の暗号処理方法。
【請求項１５】
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成ステップにおいては、前記暗号化装置において、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線ＨＫ及び単射関数である前記エンコード関数ｆｅを用いてＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により前記暗号コードとして暗号コード点Ｖを算出し前記復号装置へ送信する処理が実行され、
前記復号演算ステップにおいては、前記復号装置において、前記鍵番号Ｋを共通鍵とし、前記暗号化装置から送信される前記暗号コード点Ｖに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ及び前記エンコード関数ｆｅの逆関数ｆｅ−１である前記デコード関数を用いて、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出し、前記平文コード点Ｙから前記平文コードを復元する処理が実行されることを特徴とする請求項１３記載の暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信やデータの秘匿等に使用される暗号化技術に関し、特に、比較的短い鍵長でも高い安全性を実現することが可能な暗号化技術に関する。
【背景技術】
【０００２】
秘匿データのデータ通信においては、従来からＲＳＡ暗号、Ｒａｂｉｎ暗号、ＥｌＧａｍａｌ暗号、楕円曲線暗号などが広く用いられている。これらの各暗号方式は、基本的に、桁数が大きい合成数の素因数分解問題の計算困難性を利用して、高い安全性を確保するものである。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Sei-ichiro Kamata, Richard O. Eason, and Yukihiro Bandou, " A New Algorithm for N-Dimensional Hilbert Scanning ", IEEE TRANSACTIONS ON IMAGE PROCESSING, VOL. 8, NO. 7, JULY 1999.
【非特許文献２】Ｈ．ザーガン，「空間充填曲線とフラクタル」，シュプリンガー・フェアラーク東京株式会社，1998年12月，pp.39-58.
【非特許文献３】Ｊ．Ａ．ブーフマン，「暗号理論入門」，シュプリンガー・フェアラーク東京株式会社，2001年7月，pp.117-128.
【非特許文献４】黒澤馨、尾形わかは，「電子情報通信レクチャーシリーズＤ−８  現代暗号の基礎数理」，コロナ社，2004年3月，pp.161-166.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、これらの暗号方式では、高い安全性を確保するためには、秘密鍵として使用する巨大桁数の素数を用意する必要があるが、桁数が増えるほどこの素数の発見に困難が伴う。従って、簡便に使用することが難しい。また、それに伴い、公開鍵の桁数も大きくなり、通信などに於けるデータ量が増える。
【０００５】
そこで、本発明の目的は、鍵のビット長を従来の暗号化方式よりも短くすることができるとともに、巨大素数を用意せずとも高い安全性を比較的容易に実現することが可能な暗号化技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明に係る暗号処理システムの第１の構成は、入力される平文コードから暗号コードを生成する暗号化装置、及び前記暗号化装置が生成する前記暗号コードを復号して前記平文コードを復元する復号装置を備えた暗号処理システムであって、
前記暗号化装置は、
Ｎ次元整数空間内の所定の部分空間ＨＣを充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）を複数記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
入力される平文コードを前記Ｎ次元整数空間の部分空間ＨＣ内の点に単射して平文コード点Ｙを生成する平文コード点生成手段と、
鍵番号Ｋを共通鍵とし、前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算（以下「空間充填曲線暗号化演算」という。）を用いて前記暗号コードの生成を行う暗号コード生成手段と、を備え、
前記復号装置は、
前記暗号化装置と共通の鍵曲線Ｈｋ（ｋ＝１，２，…）を複数個記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
前記鍵番号Ｋを共通鍵とし、前記暗号化装置により生成される、前記Ｎ次元整数空間の部分空間ＨＣ内の前記暗号コードを表す点を、前記鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のデコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算（以下「空間充填曲線復号演算」という。）を用いて前記平文コードの復元を行う復号演算手段と、
を備えたことを特徴とする。
【０００７】
この構成によれば、暗号化において、Ｎ次元空間充填曲線の鍵曲線ＨＫを用いて、平文コード点Ｙを鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、同じ鍵曲線ＨＫによりＮ次元整数空間内の部分空間ＨＣ内の点へ逆単射することで、非線形変換がなされ、強度の高い暗号コードを生成することができる。高次元においては、Ｎ次元整数空間の部分空間ＨＣを充填する空間充填曲線の種数は極めて多くなるため、鍵番号Ｋの情報がなければ、総当たりによる暗号攻撃によって解読することは実質的に困難である。また、共通鍵として鍵番号Ｋがあれば充分であるため、従来のように巨大な桁数の素数などを必要とせず、各種通信装置やプログラムに容易に実装することが可能である。
【０００８】
ここで、「Ｎ次元整数空間」とは、Ｎ個の整数値の組で表されるＮ次元の整数ベクトル（アドレス）により特定される離散格子点の集合からなるＮ次元離散空間をいう。「１次元序数空間」とは、Ｎ次元整数空間と１対１対応する１次元空間であって、序数により特定される離散点が１次元上に配列した空間である。
「空間充填曲線」とは、Ｎ次元整数空間内の所定の部分空間ＨＣが与えられたときに、その部分空間ＨＣ内のすべての整数格子点を１回ずつ通過するような曲線をいう。空間充填曲線は、連続であるか不連続であるかは問わない。なお、本発明では使用する空間充填曲線の種類については特に限定する必要はないが、高次元の整数空間において大きな部分空間を充填する空間充填曲線を容易に生成するためには、空間充填曲線としては、ヒルベルト曲線やペアノ型曲線のような自己相似性を有する空間充填曲線を使用することが好適である。自己相似性を有する空間充填曲線であれば、小領域の部分空間を充填する空間充填曲線（種曲線）に基づいて、再帰的に大領域の部分空間を充填する空間充填曲線へ拡張させることが可能であるからである。また、この自己相似性を利用すれば、Ｎ次元空間から１次元序数空間への写像、及び１次元序数空間からＮ次元空間への逆写像が簡単且つ高速に実行することが可能となるからである。
また、エンコード関数、デコード関数としては、暗号コードから平文コードが復元可能な単射写像関数（スカラー関数）の組み合わせであれば、任意に選択して使用することができる。
【０００９】
なお、本発明では、暗号化処理及び復号処理において、上記空間充填曲線暗号化演算及び空間充填曲線復号演算が用いられていればよく、これら空間充填曲線暗号化演算及び空間充填曲線復号演算を他の関数と組み合わせて暗号化処理及び復号処理を行うようにしてもよい。例えば、実施例１−３，５−７がその例である。
鍵番号Ｋについては、予め暗号化装置と復号装置との間で共通に保有しておくようにしてもよいし、暗号化通信を開始する前に別途暗号化して交換するようにしてもよい。
【００１０】
本発明に係る暗号処理システムの第２の構成は、前記第１の構成において、前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅ、前記デコード関数をｇｅで表すと、
前記復号装置は、前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１を生成し、前記鍵番号Ｋを共通鍵として、前記第一基準点Ｘ１に基づき、前記鍵曲線ＨＫ、及び前記エンコード関数ｆｅに可換な単射関数である前記デコード関数ｇｅを用いて、Ｘ２＝ＬＫ−１［ｇｅ（ＬＫ（Ｘ１））］により第二基準点Ｘ２を算出し、前記第一基準点Ｘ１及び前記第二基準点Ｘ２を公開鍵として前記暗号化装置に公開する公開鍵生成手段を備え、
前記暗号コード生成手段は、前記鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ、単射関数である前記エンコード関数ｆｅ、並びに前記復号装置により、公開鍵として公開される前記第一基準点Ｘ１及び前記第二基準点Ｘ２を用いて、Ｖ＝Ｙ＋ＬＫ−１［ｆｅ（ＬＫ（Ｘ２））］，Ｘ３＝ＬＫ−１［ｆｅ（ＬＫ（Ｘ１））］により前記暗号コードとして暗号コード点Ｖ及び第三基準点Ｘ３を算出するものであり、
前記復号演算手段は、前記暗号コード生成手段から送信される前記暗号コード点Ｖ及び前記第三基準点Ｘ３に基づき、前記鍵曲線ＨＫ及び前記デコード関数ｇｅを用いて、Ｙ＝Ｖ−ＬＫ−１［ｇｅ（ＬＫ（Ｘ３））］により前記平文コード点Ｙを算出するものであり、
前記復号装置は、前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする。
【００１１】
この構成により、第一基準点Ｘ１及び第二基準点Ｘ２を公開鍵として、公開鍵方式により平文コードの暗号化処理が可能となる。また、第二基準点Ｘ２、第三基準点Ｘ３、暗号コード点Ｖの生成においてＮ次元整数空間の空間充填曲線である鍵曲線ＨＫを使用するため、次元数Ｎを十分に大きな値とすることにより、暗号解読が事実上殆ど不可能となり、安全性を高めることができる。
【００１２】
ここで、エンコード関数ｆｅとデコード関数ｇｅが「可換」とは、合成関数ｆｅ（ｇｅ（ｘ））と合成関数ｇｅ（ｆｅ（ｘ））が等しくなることをいう。エンコード関数ｆｅ及びデコード関数ｇｅとしては、例えば、ｆｅ（ｘ）＝ｓ１ｘ，ｇｅ（ｘ）＝ｓ２ｘ（ｓ１，ｓ２は定数）や、ｆｅ（ｘ）＝ｘｓ１，ｇｅ（ｘ）＝ｘｓ２（ｓ１，ｓ２は定数）や、ｆｅ（ｘ）＝ｘ＋ｓ１，ｇｅ（ｘ）＝ｘ＋ｓ２（ｓ１，ｓ２は定数）などがある。
【００１３】
また、公開鍵を「公開する」とは、復号装置から暗号化装置に公開鍵を直接送信すること以外に、例えば、復号装置と暗号化装置がインターネットで接続されている場合には、インターネット上のいずれかのサイトに公開鍵をアップロードして暗号化装置から公開鍵をダウンロード可能な状態とすることも含まれる。
【００１４】
また、上記本発明の前記第２の構成において、前記公開鍵生成手段は、前記第一基準点Ｘ１及び所定の整数ｓ１並びに前記鍵曲線ＨＫの長さ以下の所定の素数ｐに基づき、Ｘ２＝ＬＫ−１［ｓ１ＬＫ（Ｘ１） mod p］により前記第二基準点Ｘ２を算出し、これらの２点（Ｘ１，Ｘ２）を公開鍵として前記暗号化装置に公開するものとし、
前記暗号コード生成手段は、前記第一基準点Ｘ１及び所定の整数ｓ２並びに前記素数ｐに基づき、Ｘ３＝ＬＫ−１［ｓ１ＬＫ（Ｘ１） mod p］により前記第三基準点Ｘ３を算出し、前記平文コード点Ｙ、前記第二基準点Ｘ２及び前記整数ｓ２並びに前記素数ｐに基づき、Ｖ＝ＬＫ−１［ｓ２ＬＫ（Ｘ２）mod p］＋Ｙにより前記暗号コード点Ｖを算出するものとし、
前記復号演算手段は、前記暗号コード点Ｖ及び前記整数ｓ１並びに前記素数ｐに基づき、Ｙ＝Ｘ３−ＬＫ−１［ｓ１ＬＫ（Ｖ）mod p］ mod pにより平文コード点Ｙを算出するものとすることができる。
【００１５】
この構成により、エンコード関数ｆｅ及びデコード関数ｇｅを、基準点（Ｘ１，Ｘ２）及び基準点Ｘ３により指定することができる。
【００１６】
ここで、「所定の素数ｐ」とは、任意に決められる素数をいい、鍵曲線ＨＫの長さ以下のできるだけ大きな数に設定される。
【００１７】
本発明に係る暗号処理システムの第３の構成は、前記第１の構成において、前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成手段は、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線ＨＫ及び単射関数である前記エンコード関数ｆｅを用いてＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により前記暗号コードとして暗号コード点Ｖを算出するものであり、
前記復号演算手段は、前記鍵番号Ｋを共通鍵とし、前記暗号コード点Ｖに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ及び前記エンコード関数ｆｅの逆関数ｆｅ−１である前記デコード関数を用いて、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出するものであり、
前記復号装置は、前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする。
【００１８】
この構成によれば、暗号化装置においては、平文コード点生成手段が平文コード点Ｙを生成し、暗号コード生成手段が、鍵曲線ＨＫに基づき、Ｖ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により暗号コード点Ｖを算出する。この暗号コード点Ｖが暗号コードとして出力される。一方、復号装置においては、鍵曲線ＨＫと暗号コード点Ｖに基づき、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出することで、平文コードを復元する。このように、Ｎ次元整数空間の空間充填曲線である鍵曲線ＨＫ用いることにより、平文コードの秘匿が図られる。Ｎ次元整数空間の空間充填曲線は、次元数Ｎの増加に伴って、その数は飛躍的に増加する。従って、次元数Ｎを十分に大きな値とすることにより、暗号解読が事実上殆ど不可能となり、安全性を高めることができる。
【００１９】
本発明に係る暗号処理システムの第４の構成は、前記１乃至３の何れか一の構成において、前記暗号化装置及び前記復号装置の前記鍵曲線生成手段は、
前記各鍵曲線Ｈｋを発生する種となる、分割指数１のＮ次元空間充填曲線であるシード曲線Ｃｋが複数格納されたシード曲線テーブルを記憶するシード曲線記憶手段と、
始点及び終点の組合せが互いに異なる、分割指数１のＮ次元空間充填曲線からなるターミナル曲線を格納するターミナル・テーブル、並びにＮ次元空間充填曲線の分割時に前記ターミナル・テーブル内の各ターミナル曲線の各アドレスに対し連結するＮ次元空間充填曲線を特定するインデックス情報を格納するインダクション・テーブルを記憶する曲線演算テーブル記憶手段と、
前記鍵番号Ｋに対するシード曲線ＣＫを前記シード曲線テーブルから読み出し、前記ターミナル・テーブルから、該シード曲線ＣＫと始点及び終点が一致するターミナル曲線ａξを索出し、前記ターミナル・テーブルの該ターミナル曲線ａξを該シード曲線ＣＫに置換するシード曲線設定手段と、
前記シード曲線ＣＫが設定された前記ターミナル・テーブルに基づき、前記インダクション・テーブル内の各インデックス情報を設定するインダクション・テーブル生成手段と、
Ｎ次元整数空間内の点Ａのアドレスが入力されると、前記シード曲線ＣＫを前記ターミナル・テーブル及び前記インダクション・テーブルにより（Ｍ−１）回（Ｍは２以上の整数）分割して生成される前記鍵曲線ＨＫにより、前記点Ａを１次元序数空間に写像した序数iAを算出する１次元写像手段と、
前記鍵曲線ＨＫ上の序数iAが入力されると、前記シード曲線ＣＫを前記ターミナル・テーブル及び前記インダクション・テーブルにより（Ｍ−１）回分割して生成される前記鍵曲線ＨＫにより、前記序数iAをＮ次元整数空間に写像した点Ａを算出するＮ次元写像手段と、を備えており、
前記暗号コード生成手段は、前記１次元写像手段により前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、また、該序数を所定のエンコード関数により単射した後、前記Ｎ次元写像手段により前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射するものであり、
前記復号演算手段は、前記１次元写像手段により前記暗号コードを表す点を、前記鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、また、該序数を所定のデコード関数により単射した後、前記Ｎ次元写像手段により前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射するものであることを特徴とする。
【００２０】
この構成によれば、暗号通信を実行する場合、まず、暗号化装置及び復号装置は、共通に入力されるパラメータＭ，Ｎ，Ｋによりターミナル・テーブルとインダクション・テーブルを構成する。ここで、Ｎ，Ｍ，Ｋは予め暗号化装置及び復号装置に与えられたものであってもよいし、暗号化装置及び復号装置の間で通信により交換したものであってもよい。この際、まず、ターミナル・テーブル初期化手段が、曲線演算テーブル記憶手段に格納されたターミナル・テーブルにターミナル曲線の初期値を設定し、次いで、シード曲線設定手段が、ターミナル・テーブルのターミナル曲線ａξを該シード曲線ＣＫに置換し、次いで、インダクション・テーブル生成手段が、シード曲線ＣＫが設定されたターミナル・テーブルに基づき、曲線演算テーブル記憶手段に格納されたインダクション・テーブル内の各インデックス情報を設定する。これにより、暗号化装置及び復号装置の双方に、共通のターミナル・テーブル及びインダクション・テーブルが生成される。
このターミナル・テーブル及びインダクション・テーブルを用いることにより、分割指数１のシード曲線ＣＫから分割指数Ｍの鍵曲線ＨＫを算出することが可能となる。従って、ターミナル・テーブル及びインダクション・テーブルにより算出される鍵曲線ＨＫを用いて暗号化演算や復号演算や各基準点の演算を行えば、Ｎ次元整数空間をより広く利用することができる。
【００２１】
ここで、「平文コード」とは、通信する平文データをデジタル符号化したコードをいう。平文とは、暗号化されていない文（コード）をいう。
「分割指数」とは、１つのＮ次元超立方体の各辺をｑｍ個（ｑは基数）の区間に分割することによりｑｍＮ個の副超立方体に分割するときの、各辺の分割数ｑｍの指数ｍをいう。例として、図７（ｃ）に分割指数１，１，２の２次元ヒルベルト曲線を示す。なお、基数ｑは２以上の整数であり、空間充填曲線の種類によって決まる数である。例えば、Ｎ次元ヒルベルト曲線の場合にはｑ＝２，Ｎ次元３進ペアノ型曲線の場合にはｑ＝３，Ｎ次元５進ペアノ型曲線の場合にはｑ＝５となる。
「シード曲線」とは、分割指数１のＮ次元空間充填曲線であって、ターミナル・テーブル及びインダクション・テーブルにより分割指数ＭのＮ次元空間充填曲線を発生させる際の種（シード）となるものをいう。
「インデックス情報」とは、ターミナル・テーブル内の各ターミナル曲線の各アドレスに対し連結するターミナル曲線を特定するためのインデックスの情報をいう。例えば、ターミナル・テーブル内の各ターミナル曲線ａk1,N＝（ａk1,N（１），…，ａk1,N（２Ｎ））（但し、ａk1,N（ｉ）（ｉ＝１，…，２Ｎ）はＮビットのアドレス）のアドレスａk1,N（ｉ）に連結するターミナル曲線をａk'1,Nとすると、当該ターミナル曲線ａk'1,Nを特定するためのインデックス情報はｋ’である。
「鍵曲線ＨＫ上の序数」とは、鍵曲線ＨＫ上のアドレスの順番を表す数である。例えば、鍵曲線ＨＫのアドレス・シーケンスをＨＫ＝（ｈK（１），ｈK（２），…，ｈK（２MN））とし、点ＡがアドレスｈK（iA），点ＢがアドレスｈK（iB）に対応するとすれば、点Ａ，Ｂの鍵曲線ＨＫ上の序数は、それぞれiA，iBである。
【００２２】
また、本発明において、前記ターミナル・テーブルを初期化するターミナル・テーブル初期化手段として、
１次元のターミナル曲線ａ11,1を（０，１）に設定し、ｎ次元（ｎ＝２，…，Ｎ）のターミナル曲線ａ11,nを、（ｎ−１）次元のターミナル曲線ａ11,(n-1)に基づき、
【００２３】
【数１】
2012177893.tif 000003
により順次生成することにより１番目のターミナル曲線ａ11,Nを生成する初期ターミナル曲線生成手段と、
１番目のターミナル曲線ａ11,Nに基づき、（Ｎ（ｉ−１）＋ｊ）番目（ｉ＝１，…，２Ｎ−１；ｊ＝１，…，Ｎ）のターミナル曲線ａ(N(i-1)+j)1,Nの始点アドレスａ(N(i-1)+j)1,N（１）を、１番目のターミナル曲線ａ１１，Ｎの（２ｉ−１）番目のアドレスａ11,N（２ｉ−１）に設定する始点アドレス設定手段と、
１番目のターミナル曲線ａ11,Nに基づき、（Ｎ（ｉ−１）＋ｊ）番目（ｉ＝１，…，２Ｎ−１；ｊ＝１，…，Ｎ）のターミナル曲線ａ(N(i-1)+j)1,Nの終点アドレスａ(N(i-1)+j)1,N（２Ｎ）を、１番目のターミナル曲線ａ11,Nの（２ｉ−１）番目のアドレスａ11,N（２ｉ−１）のｊ番目のビットを反転させたアドレスibit（ａ11,N（２ｉ−１），ｊ）に設定する終点アドレス設定手段と、
１番目のターミナル曲線ａ11,Nに基づき、ｋ番目（ｋ＝１，…，Ｎ）のターミナル曲線ａk1,Nのｉ’番目（ｉ’＝２，…，２N−１）の中間点アドレスａk1,N（ｉ’）を、
【００２４】
【数２】
2012177893.tif 000004
により設定する第１の中間点アドレス生成手段と、
１番目からＮ番目の前記ターミナル曲線ａ11,N，…，ａN1,Nに基づき、（Ｎｉ＋ｊ）番目（ｉ＝１，…，２N-1−１；ｊ＝１，…，Ｎ）のターミナル曲線ａNi+j1,Nのｉ’番目（ｉ’＝２，…，２N−１）の中間点アドレスａk1,N（ｉ’）を、
【００２５】
【数３】
2012177893.tif 000005
により設定する第２の中間点アドレス生成手段と、を備えた構成とすることができる。
【００２６】
この構成によれば、ターミナル・テーブル初期化手段がターミナル・テーブルを初期化する際に、まず、初期ターミナル曲線生成手段が、１次元のターミナル曲線ａ11,1を（０，１）に設定し、ｎ次元（ｎ＝２，…，Ｎ）のターミナル曲線ａ11,nを、（数１）により順次生成することにより１番目のターミナル曲線ａ11,Nを生成する。次いで、始点アドレス設定手段が、ターミナル曲線ａ11,Nに基づき、（Ｎ（ｉ−１）＋ｊ）番目（ｉ＝１，…，２Ｎ−１；ｊ＝１，…，Ｎ）のターミナル曲線ａ(N(i-1)+j)1,Nの始点アドレスａ(N(i-1)+j)1,N（１）をアドレスａ11,N（２ｉ−１）に設定する。次いで、終点アドレス設定手段が、ターミナル曲線ａ11,Nに基づき、（Ｎ（ｉ−１）＋ｊ）番目（ｉ＝１，…，２Ｎ−１；ｊ＝１，…，Ｎ）のターミナル曲線ａ(N(i-1)+j)1,Nの終点アドレスａ(N(i-1)+j)1,N（２Ｎ）を、アドレスibit（ａ11,N（２ｉ−１），ｊ）に設定する。次いで、第１の中間点アドレス生成手段が、ターミナル曲線ａ11,Nに基づき、ｋ番目（ｋ＝１，…，Ｎ）のターミナル曲線ａk1,Nのｉ’番目（ｉ’＝２，…，２N−１）の中間点アドレスａk1,N（ｉ’）を、（数２）により設定する。最後に、第２の中間点アドレス生成手段が、ターミナル曲線ａ11,N，…，ａN1,Nに基づき、（Ｎｉ＋ｊ）番目（ｉ＝１，…，２N-1−１；ｊ＝１，…，Ｎ）のターミナル曲線ａNi+j1,Nのｉ’番目（ｉ’＝２，…，２N−１）の中間点アドレスａk1,N（ｉ’）を、（数３）により設定する。これにより、ターミナル・テーブルに初期値を設定することができる。
【００２７】
また、本発明において、前記インダクション・テーブル生成手段は、
前記ターミナル・テーブルを参照して、Ｎ次元空間充填曲線の分割時に、ｋ番目（ｋ＝１，…，Ｎ２Ｎ）のターミナル曲線ａk1,Nの始点アドレスａk1,N（１）に連結するＮ次元空間充填曲線のインデックス情報ｗk1,N（１）を設定する始点連結情報設定手段と、
前記インデックス情報ｗk1,N（１）が設定された後、前記ターミナル・テーブルを参照して、前記ターミナル曲線ａk1,Nの中間点アドレスａk1,N（ｉ’）（ｉ’＝２，…，２N−１）に連結するＮ次元空間充填曲線のインデックス情報ｗk1,N（ｉ’）を設定する中間点連結情報設定手段と、
前記各インデックス情報ｗk1,N（ｉ’）（ｉ’＝２，…，２N−１）が設定された後、前記ターミナル・テーブルを参照して、前記ターミナル曲線ａk1,Nの終点アドレスａk1,N（２Ｎ）に連結するＮ次元空間充填曲線のインデックス情報ｗk1,N（２Ｎ）を設定する終点連結情報設定手段と、を備え、
前記始点連結情報設定手段は、始点アドレスａk1,N（１）に対し、連結曲線の始点アドレスｓをターミナル曲線ａk1,Nの始点アドレスａk1,N（１）に設定し、連結曲線の終点アドレスｅを
【００２８】
【数４】
2012177893.tif 000006
に設定し、前記ターミナル・テーブルから、始点アドレスが該始点アドレスｓと一致し且つ終点アドレスが該終点アドレスｅと一致するターミナル曲線ａk*1,Nを索出し、該ターミナル曲線ａk*1,Nのインデックス情報ｋ＊を、前記インデックス情報ｗk1,N（１）に設定するものであり、
前記中間点連結情報設定手段は、中間点アドレスａk1,N（２ｉ−２），ａk1,N（２ｉ−１）（ｉ＝２，…，２Ｎ−１）に対し、連結曲線の始点アドレスｓを
【００２９】
【数５】
2012177893.tif 000007
に変更し、連結曲線の終点アドレスｅを
【００３０】
【数６】
2012177893.tif 000008
に変更し、前記ターミナル・テーブルから、始点アドレスが該始点アドレスｓと一致し且つ終点アドレスが該終点アドレスｅと一致するターミナル曲線ａk*1,Nを索出し、該ターミナル曲線ａk*1,Nのインデックス情報ｋ＊を、前記インデックス情報ｗk1,N（２ｉ−２），ｗk1,N（２ｉ−１）に設定する処理を、ｉの昇順に順次実行するものであり、
前記終点連結情報設定手段は、終点アドレスａk1,N（２Ｎ）に対し、連結曲線の始点アドレスｓを
【００３１】
【数７】
2012177893.tif 000009
に設定し、連結曲線の終点アドレスｅをターミナル曲線ａk1,Nの終点アドレスａk1,N（２Ｎ）に設定し、前記ターミナル・テーブルから、始点アドレスが該始点アドレスｓと一致し且つ終点アドレスが該終点アドレスｅと一致するターミナル曲線ａk*1,Nを索出し、該ターミナル曲線ａk*1,Nのインデックス情報ｋ＊を、前記インデックス情報ｗk1,N（２Ｎ）に設定するように構成することができる。
【００３２】
この構成によれば、インダクション・テーブル生成手段がインダクション・テーブルの作成を行う場合、まず、始点連結情報設定手段が、始点アドレスｓをアドレスａk1,N（１）に設定し、連結曲線の終点アドレスｅを（数４）により設定し、ターミナル・テーブルから、始点アドレスａk*1,N（１）が該始点アドレスｓと一致し且つ終点アドレスａk*1,N（２Ｎ）が該終点アドレスｅと一致するターミナル曲線ａk*1,Nを索出し、該ターミナル曲線ａk*1,Nのインデックス情報ｋ＊を、前記インデックス情報ｗk1,N（１）に設定する。次に、中間点連結情報設定手段が、中間点アドレスａk1,N（２ｉ−２），ａk1,N（２ｉ−１）（ｉ＝２，…，２Ｎ−１）に対し、連結曲線の始点アドレスｓを（数５）により変更し、連結曲線の終点アドレスｅを（数６）により変更し、ターミナル・テーブルから、始点アドレスａk*1,N（１）が該始点アドレスｓと一致し且つ終点アドレスａk*1,N（２Ｎ）が該終点アドレスｅと一致するターミナル曲線ａk*1,Nを索出し、該ターミナル曲線ａk*1,Nのインデックス情報ｋ＊を、インデックス情報ｗk1,N（２ｉ−２），ｗk1,N（２ｉ−１）に設定する処理を、ｉの昇順に順次実行する。次に、終点連結情報設定手段が、終点アドレスａk1,N（２Ｎ）に対し、連結曲線の始点アドレスｓを（数７）により設定し、連結曲線の終点アドレスｅをアドレスａk1,N（２Ｎ）に設定し、ターミナル・テーブルから、始点アドレスａk*1,N（１）が該始点アドレスｓと一致し且つ終点アドレスａk*1,N（２Ｎ）が該終点アドレスｅと一致するターミナル曲線ａk*1,Nを索出し、該ターミナル曲線ａk*1,Nのインデックス情報ｋ＊を、インデックス情報ｗk1,N（２Ｎ）に設定する。これにより、Ｎ次元空間充填曲線の分割時に前記ターミナル・テーブル内の各ターミナル曲線の各アドレスに対し連結するターミナル曲線を特定するインデックス情報を作成することができる。
【００３３】
本発明に係る暗号化装置の第１の構成は、入力される平文コードから暗号コードを生成する暗号化装置であって、
Ｎ次元整数空間内の所定の部分空間ＨＣを充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）を複数記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
入力される平文コードを前記Ｎ次元整数空間の部分空間ＨＣ内の点に写像して平文コード点Ｙを生成する平文コード点生成手段と、
鍵番号Ｋを共通鍵とし、前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて暗号化を行う暗号コード生成手段と、を備えたことを特徴とする。
【００３４】
この構成により、本発明に係る上記暗号化通信システムの第１の構成において用いることのできる暗号化装置が実現される。
【００３５】
本発明に係る暗号化装置の第２の構成は、前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成手段は、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ、単射関数である前記エンコード関数ｆｅ、並びに公開鍵として公開されている前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１及び第二基準点Ｘ２を用いて、Ｖ＝Ｙ＋ＬＫ−１［ｆｅ（ＬＫ（Ｘ２））］，Ｘ３＝ＬＫ−１［ｆｅ（ＬＫ（Ｘ１））］により前記暗号コードとして暗号コード点Ｖ及び第三基準点Ｘ３を算出するものであることを特徴とする。
【００３６】
この構成により、本発明に係る上記暗号化通信システムの第２の構成において用いることのできる暗号化装置が実現される。
【００３７】
本発明に係る暗号化装置の第３の構成は、前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成手段は、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線ＨＫ及び単射関数である前記エンコード関数ｆｅを用いてＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により前記暗号コードとして暗号コード点Ｖを算出することを特徴とする。
【００３８】
この構成により、本発明に係る上記暗号化通信システムの第３の構成において用いることのできる暗号化装置が実現される。
【００３９】
本発明に係る復号装置の第１の構成は、前記第１の構成の暗号化装置により生成される暗号コードを復号し平文コードを復元する復号装置であって、前記暗号化装置と共通の鍵曲線Ｈｋ（ｋ＝１，２，…）を複数個記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段と、
前記暗号化装置において共通鍵として使用した鍵番号と共通の鍵番号Ｋを共通鍵とし、前記暗号化装置により生成される、前記Ｎ次元整数空間の部分空間ＨＣ内の暗号コードを表す点を、前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のデコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて前記平文コードの復元を行う復号演算手段と、を備えたことを特徴とする。
【００４０】
この構成により、本発明に係る上記暗号化通信システムの第１の構成において用いることのできる復号装置が実現される。
【００４１】
本発明に係る復号装置の第２の構成は、前記第２の構成の暗号化装置により生成される暗号コードを復号し平文コードを復元する前記第１の構成の復号装置であって、
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記暗号化装置で使用されるエンコード関数をｆｅ、前記デコード関数をｇｅ、前記暗号化装置が前記暗号コードとして生成する暗号コード点をＶ，第三基準点をＸ３で表すと、
前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１を生成し、前記鍵番号Ｋを共通鍵として、前記第一基準点Ｘ１に基づき、前記鍵曲線ＨＫ、及び前記エンコード関数ｆｅに可換な単射関数である前記デコード関数ｇｅを用いて、Ｘ２＝ＬＫ−１［ｇｅ（ＬＫ（Ｘ１））］により第二基準点Ｘ２を算出し、前記第一基準点Ｘ１及び前記第二基準点Ｘ２を公開鍵として前記暗号化装置に公開する公開鍵生成手段を備え、
前記復号演算手段は、前記暗号コード点Ｖ及び前記第三基準点Ｘ３に基づき、前記鍵曲線ＨＫ及び前記デコード関数ｇｅを用いて、Ｙ＝Ｖ−ＬＫ−１［ｇｅ（ＬＫ（Ｘ３））］により前記平文コード点Ｙを算出するものであり、
前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする。
【００４２】
この構成により、本発明に係る上記暗号化通信システムの第２の構成において用いることのできる復号装置が実現される。
【００４３】
本発明に係る復号装置の第３の構成は、前記第３の構成の暗号化装置により生成される暗号コードを復号し平文コードを復元する前記第１の構成の復号装置であって、
前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記暗号化装置で使用されるエンコード関数をｆｅ、前記暗号化装置が前記暗号コードとして生成する暗号コード点をＶで表すと、
前記復号演算手段は、前記鍵番号Ｋを共通鍵とし、前記暗号コード点Ｖに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ及び前記エンコード関数ｆｅの逆関数ｆｅ−１である前記デコード関数を用いて、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出するものであり、
前記復号装置は、前記平文コード点Ｙから前記平文コードを復元する平文コード復元手段を備えたことを特徴とする。
【００４４】
この構成により、本発明に係る上記暗号化通信システムの第２の構成において用いることのできる復号装置が実現される。
【００４５】
本発明に係るプログラムの第１の構成は、コンピュータに読み込ませて実行することにより、コンピュータを前記第１乃至３の何れか一の構成の暗号化装置として機能させることを特徴とする。
【００４６】
また、本発明に係るプログラムの第２の構成は、コンピュータに読み込ませて実行することにより、コンピュータを前記第１乃至３の何れか一の構成の復号装置として機能させることを特徴とする。
【００４７】
本発明に係る暗号処理方法の第１の構成は、電気通信回線で接続された暗号化装置及び復号装置の間において、前記暗号化装置から平文コードを暗号化した暗号コードを送信し、前記復号装置において前記暗号コードを受信して復号し前記平文コードを復元する暗号処理方法であって、
前記暗号化装置及び前記復号装置は、Ｎ次元整数空間内の所定の部分空間ＨＣを充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）を複数記憶する鍵曲線記憶手段又は前記鍵曲線Ｈｋを生成する鍵曲線生成手段を共通に備えており、
前記暗号化装置において、入力される平文コードを前記Ｎ次元整数空間の部分空間ＨＣ内の点に写像して平文コード点Ｙを生成する平文コード点生成ステップと、
前記暗号化装置において、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙを鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のエンコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて暗号化を行う暗号コード生成ステップと、
前記復号装置において、前記鍵番号Ｋを共通鍵とし、前記暗号化装置により生成される、前記Ｎ次元整数空間の部分空間ＨＣ内の暗号コードを表す点を、前記鍵番号Ｋの前記鍵曲線ＨＫにより一次元序数空間内の序数へ単射し、該序数を所定のデコード関数により単射変換した後、前記鍵曲線ＨＫにより前記Ｎ次元整数空間内の部分空間ＨＣ内の点へ逆単射する演算を用いて前記平文コードの復元を行う復号演算ステップと、を備えたことを特徴とする。
【００４８】
本発明に係る暗号処理方法の第２の構成は、前記第１の構成において、前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅ、前記デコード関数をｇｅで表すと、
前記復号装置が、前記Ｎ次元整数空間の部分空間ＨＣ内の点である第一基準点Ｘ１を生成し、前記鍵番号Ｋを共通鍵として、前記第一基準点Ｘ１に基づき、前記鍵曲線ＨＫ、及び前記エンコード関数ｆｅに可換な単射関数である前記デコード関数ｇｅを用いて、Ｘ２＝ＬＫ−１［ｇｅ（ＬＫ（Ｘ１））］により第二基準点Ｘ２を算出し、前記第一基準点Ｘ１及び前記第二基準点Ｘ２を公開鍵として前記暗号化装置に公開する公開鍵生成ステップを有し、
前記暗号コード生成ステップにおいては、前記暗号化装置において、前記鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ、単射関数である前記エンコード関数ｆｅ、並びに前記復号装置により、公開鍵として公開される前記第一基準点Ｘ１及び前記第二基準点Ｘ２を用いて、Ｖ＝Ｙ＋ＬＫ−１［ｆｅ（ＬＫ（Ｘ２））］，Ｘ３＝ＬＫ−１［ｆｅ（ＬＫ（Ｘ１））］により前記暗号コードとして暗号コード点Ｖ及び第三基準点Ｘ３を算出し前記復号装置へ送信する処理が実行され、
前記復号演算ステップにおいては、前記復号装置において、前記暗号化装置から送信される前記暗号コード点Ｖ及び前記第三基準点Ｘ３に基づき、前記鍵曲線ＨＫ及び前記デコード関数ｇｅを用いて、Ｙ＝Ｖ−ＬＫ−１［ｇｅ（ＬＫ（Ｘ３））］により前記平文コード点Ｙを算出し、前記平文コード点Ｙから前記平文コードを復元する処理が実行されることを特徴とする。
【００４９】
本発明に係る暗号処理方法の第３の構成は、前記第１の構成において、前記Ｎ次元整数空間の部分空間ＨＣ内の点Ａを、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＡに単射する関数をＬＫ（Ａ）、その逆関数をＬＫ−１（ｉＡ）で表し、前記エンコード関数をｆｅで表すと、
前記暗号コード生成ステップにおいては、前記暗号化装置において、鍵番号Ｋを共通鍵とし、前記平文コード点Ｙに基づき、前記鍵曲線ＨＫ及び単射関数である前記エンコード関数ｆｅを用いてＶ＝ＬＫ−１［ｆｅ（ＬＫ（Ｙ））］により前記暗号コードとして暗号コード点Ｖを算出し前記復号装置へ送信する処理が実行され、
前記復号演算ステップにおいては、前記復号装置において、前記鍵番号Ｋを共通鍵とし、前記暗号化装置から送信される前記暗号コード点Ｖに基づき、前記鍵曲線記憶手段に記憶された又は前記鍵曲線生成手段により生成される前記鍵曲線ＨＫ及び前記エンコード関数ｆｅの逆関数ｆｅ−１である前記デコード関数を用いて、Ｙ＝ＬＫ−１［ｆｅ−１（ＬＫ（Ｖ））］により平文コード点Ｙを算出し、前記平文コード点Ｙから前記平文コードを復元する処理が実行されることを特徴とする。
【発明の効果】
【００５０】
以上のように、本発明によれば、鍵番号Ｋを共通鍵として使用して、鍵番号Ｋの鍵曲線Ｈｋを秘密鍵に使用し、この鍵曲線ＨＫによりＮ次元整数空間内の点を１次元序数空間内の序数に単射し、１次元序数空間内でエンコードやデコード演算を行い、その結果を鍵曲線ＨＫにより再びＮ次元整数空間内の点に単射する演算を用いて暗号化や復号を行うことによって、従来よりも短い鍵（鍵番号Ｋ）とすることができる。また、鍵曲線Ｈｋの次元数Ｎを６以上とすれば、選択可能な鍵曲線Ｈｋの種類の数は極めて大きな値となるため、鍵曲線Ｈｋの情報なくしては復号が困難となり、高い頑健性を実現することができる。また、ＲＳＡ暗号方式にように、巨大な素数を必要としないため、比較的容易に本発明の暗号化方式を実施することが可能となる。
【図面の簡単な説明】
【００５１】
【図１】本発明の実施例１に係る暗号処理システムの全体構成を示す図である。
【図２】暗号処理装置２の暗号化機能部分の機能構成を表すブロック図である。
【図３】暗号処理装置２の復号機能部分の機能構成を表すブロック図である。
【図４】シード曲線テーブルの構造を表す図である。
【図５】ターミナル・テーブルの構造を表す図である。
【図６】インダクション・テーブルの構造を表す図である。
【図７】２次元，３次元ヒルベルト曲線のアドレス順序の例である。
【図８】暗号処理システム１による暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）と復号装置２ｄ（メッセージ受信側の暗号処理装置２）との間の暗号化通信の動作を表すフローチャートである。
【図９】Ｎ次元空間点と分割指数ｍのＮ次元のヒルベルト曲線との１対１対応関係を示す図である。
【図１０】鍵番号Ｋの交換動作を表すフローチャートである。
【図１１】各曲線演算テーブルの設定方法の全体動作を表すフローチャートである。
【図１２】ターミナル・テーブル初期化部１３によるターミナル・テーブルの初期値の設定処理を表すフローチャートである。
【図１３】ターミナル・テーブル初期化部１３による逆ターミナル・テーブルの初期値の設定処理を表すフローチャートである。
【図１４】インダクション・テーブル生成部１５によるインダクション・テーブルの作成処理を表すフローチャートである。
【図１５】本発明の実施例２に係る暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）の構成を表すブロック図である。
【図１６】本発明の実施例２に係る復号装置２ｄ（メッセージ受信側の暗号処理装置２）の構成を表すブロック図である。
【図１７】実施例２で使用する空間充填曲線（２次元）の例を表す図である。（ａ）ペアノ曲線、（ｂ）シェルピンスキー曲線、（ｃ）ムーア曲線
【図１８】実施例２の暗号処理システム１による暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）と復号装置２ｄ（メッセージ受信側の暗号処理装置２）との間の暗号化通信の全体動作を表すフローチャートである。
【図１９】本発明の実施例３に係る暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）の構成を表すブロック図である。
【図２０】本発明の実施例３に係る復号装置２ｄ（メッセージ受信側の暗号処理装置２）の構成を表すブロック図である。
【図２１】実施例３の暗号処理システム１による暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）と復号装置２ｄ（メッセージ受信側の暗号処理装置２）との間の暗号化通信の全体動作を表すフローチャートである。
【図２２】写像ｆ３（２,n）：［０，３２ｎ］→［０，３ｎ］２によって生成される２次元ペアノ曲線の一例を示す図である。
【図２３】写像ｆ３（３,n）：［０，３３ｎ］→［０，３ｎ］３によって生成される３次元ペアノ曲線の一例を示す図である。
【図２４】式（４３ａ），（４３ｂ）による分割指数ｎのＮ次元ｑ進ペアノ型曲線の生成方法を具体的に示したフローチャートである。
【図２５】２次元５進ペアノ型曲線の例を示す図である。
【図２６】２次元７進ペアノ型曲線の例を示す図である。
【図２７】Ｎ次元ｑ進ペアノ型曲線Ｃ（ｎ，Ｎ）のターミナル・テーブルの計算アルゴリズムを示すＰＡＤ図である。
【図２８】Ｎ次元ｑ進ペアノ型曲線Ｃ（ｎ，Ｎ）のインダクション・テーブルの計算アルゴリズムを示すＰＡＤ図である。
【図２９】ＤＥＳ方式による暗号化アルゴリズムの流れを示すブロック図である。
【図３０】内部ブロック暗号Ｆのアルゴリズムの流れを示すブロック図である。
【図３１】巡回鍵Ｋｉの生成アルゴリズムの流れを示すブロック図である。
【図３２】ＤＥＳ暗号の復号アルゴリズムの流れを示すブロック図である。
【図３３】ＤＥＳ暗号化方式に本発明を適用した暗号化方式（実施例５）のアルゴリズムの流れを示すブロック図である。
【図３４】ＤＥＳ暗号化方式に本発明を適用した復号方式（実施例５）のアルゴリズムの流れを示すブロック図である。
【図３５】実施例５に係る暗号処理装置の構成を表すブロック図である。
【図３６】図３５における内部ブロック関数Ｇ演算部５０の構成を表すブロック図である。
【図３７】ＡＥＳ方式による暗号化アルゴリズムの流れを示すブロック図である。
【図３８】図３７の各ラウンド関数ＲＦｒにおける暗号処理アルゴリズムを表すブロック図である。
【図３９】ＡＥＳ方式による復号アルゴリズムの流れを示すブロック図である。
【図４０】図３９の各ラウンド関数ＲＦｒ−１における暗号処理アルゴリズムを表すブロック図である。
【図４１】実施例６の暗号化アルゴリズムにおける各ラウンド関数ＲＦのアルゴリズムのブロック図である。
【図４２】実施例６の復号アルゴリズムにおける各ラウンド関数ＲＦ−１のアルゴリズムのブロック図である。
【図４３】実施例６の暗号処理装置の構成を表すブロック図である。
【発明を実施するための形態】
【００５２】
〔用語の定義〕
最初に、以下で使用する用語の概念を明確にするために、いくつかの用語について定義しておく。
（定義１）〔空間充填曲線〕
Ｎ次元空間内の一辺の長さがｎの単位超立方体を考える。この超立方体の各辺を（ｎ−１）区間に分割し、ｎ×ｎ個の整数格子点からなる超立方体格子としたとき、当該超立方体格子内のすべての整数格子点を１点につき１回通過するような曲線を「空間充填曲線」という。
（定義終り）
【００５３】
（定義２）〔連続空間充填曲線〕
Ｎ次元空間における空間充填曲線Ｃ(N)について、当該空間充填曲線Ｃ(N)が充填する超立方体格子の格子点間のユークリッド距離は１である。曲線Ｃ(N)上のｉ番目の整数格子点Ｐｉ(N)と（ｉ＋１）番目の整数格子点Ｐｉ+1(N)との間のユークリッド距離を「隣接点間距離」とする。曲線上のすべての整数格子点間の隣接点間距離がすべて１である空間充填曲線を「連続空間充填曲線」いい、連続空間充填曲線でない空間充填曲線を「不連続空間充填曲線」という。
（定義終り）
【００５４】
次に、本発明を実施するための形態について、図面を参照しながら説明する。
【実施例１】
【００５５】
〔１〕暗号処理システムの構成
（１）システムの全体構成
図１は、本発明の実施例１に係る暗号処理システムの全体構成を示す図である。暗号処理システム１は、複数の暗号処理装置２が、イントラネットやインターネット等の通信ネットワーク３を介して、互いに通信可能に接続された構成を有する。
【００５６】
各暗号処理装置２は、内部構成として、共通モジュール４、暗号コード生成モジュール５、復号モジュール６、通信インタフェース７、平文コード入力部８、及び平文コード出力部９を備えている。尚、各暗号処理装置２は、ハードウェア的に暗号化通信の専用装置として構成することも可能であるが、パーソナル・コンピュータ等の汎用のコンピュータにプログラムをロードして実行することによりソフトウェア的に暗号処理装置２を実現するようにしてもよい。
【００５７】
（２）暗号処理装置の内部構成
図２は、暗号処理装置２の暗号化機能部分の機能構成を表すブロック図である。以下では、通信する平文コードを暗号化して送信する側の暗号処理装置２を暗号化装置２ｅ、当該平文コードを受信して復号する側の暗号処理装置２を復号装置２ｄと呼ぶ。
【００５８】
暗号化装置２ｅは、共通モジュール４、暗号コード生成モジュール５、通信インタフェース７、及び平文コード入力部８を備え、これらは図１の同符号の構成部分に対応している。
【００５９】
平文コード入力部８は、送信する平文コードを入力する構成部分である。平文コード入力部８は、キーボード等のヒューマン・インタフェースや、ＣＤ−ＲＯＭ，ＤＶＤ−ＲＯＭ，メモリ・スティック，ハードディスク等の平文コードが記憶された各種記憶装置から構成される。
【００６０】
共通モジュール４は、シード曲線テーブル記憶部１１、曲線演算テーブル記憶部１２、ターミナル・テーブル初期化部１３、シード曲線設定部１４、インダクション・テーブル生成部１５、曲線上演算部１６、及びパラメータ交換部１７を備えている。
【００６１】
パラメータ交換部１７は、復号装置２ｄとの間で、分割指数Ｍ，次元数Ｎ，素数ｐ，及び鍵番号Ｋの交換を行う。
【００６２】
シード曲線テーブル記憶部１１は、分割指数１のＮ次元（Ｎは２以上の整数）ヒルベルト曲線からなるシード曲線を複数種類格納したシード曲線テーブルを記憶する。尚、各暗号処理装置２のシード曲線テーブル記憶部１１には、共通のシード曲線テーブルが、予め記憶されているものとする。
【００６３】
図４に、シード曲線テーブルの構造を示す。１つのシード曲線Ｃｉ（ｉ＝１，２，…）は、分割指数１のＮ次元のヒルベルト曲線（ｃi1,N（１），ｃi1,N（２），…，ｃi1,N（２N））から構成される。ここで、ｃi1,N（ｋ）（ｋ＝１．…，２Ｎ）は、Ｎビットのビット配列からなるアドレスである。分割指数１のＮ次元のヒルベルト曲線は、２N個のアドレス・シーケンスからなる。シード曲線テーブルには、互いに異なるＮｓ個のシード曲線Ｃｉ（ｉ＝１，２，…，Ｎｓ）が格納されている。Ｎｓは、シード曲線の組合せ総数以下の数に設定されるが、できるだけ大きな数に設定される。
【００６４】
例えば、２次元（Ｎ＝２）の場合には、始点ｃi1,2（１）と終点ｃi1,2（４）を固定すれば、シード曲線の数は１通りに決まってしまう。例えば、始点ｃi1,2（１）を００，終点ｃi1,2（４）を１０とした場合、シード曲線は（００，０１，１１，１０）となる。
【００６５】
しかし、３次元の場合には、始点ｃi1,3（１）と終点ｃi1,3（８）を固定すると、シード曲線の組合せ総数は４通りとなる。次元数をさらに上げると、４次元（Ｎ＝４）の場合には、始点ｃi1,4（１）と終点ｃi1,4（１６）を固定したときのシード曲線の組合せ総数は６２７通り、５次元（Ｎ＝５）の場合には、始点ｃi1,5（１）と終点ｃi1,5（３２）を固定したときのシード曲線の組合せ総数は１５１，７３２，２２４通りとなり、次元数Ｎの増加とともにシード曲線の組合せ総数は急激に増加する。一般にＮ次元の場合において、始点ｃi1,N（１）と終点ｃi1,N（２Ｎ）を固定したときのシード曲線の組合せ総数Ｆ（Ｎ）がどのような式で表されるかは、現在のところ分かっていないが、本発明者が計算機による数え上げにより求めた近似結果では、
【００６６】
【数８】
2012177893.tif 000010
となることが分かっている。従って、この特徴を用いて、６次元以上のヒルベルト曲線を利用すれば、使用可能なシード曲線の組合せ総数Ｆ（Ｎ）は極めて大きな値となるため、秘密鍵としてこのシード曲線を使用すれば、国際標準化ＲＳＡ暗号方式や楕円暗号方式よりも頑健性の高い暗号方式を構成することが可能となる。
【００６７】
曲線演算テーブル記憶部１２は、ターミナル・テーブル、インダクション・テーブル、及び逆ターミナル・テーブルを記憶する。ここで、ターミナル・テーブルは、始点及び終点の組合せが互いに異なる、分割指数１のＮ次元ヒルベルト曲線からなるターミナル曲線を、Ｎ２Ｎ−１個格納するルックアップ・テーブルである。インダクション・テーブルは、Ｎ次元ヒルベルト曲線の分割時に前記ターミナル・テーブル内の各ターミナル曲線の各アドレスに対し連結するターミナル曲線を特定するインデックス情報を格納するルックアップ・テーブルである。逆ターミナル・テーブルは、ターミナル・テーブルの逆演算を行うためのルックアップ・テーブルである。基本的には、ターミナル・テーブルとインダクション・テーブルを用いれば、任意の分割指数のＮ次元ヒルベルト曲線を発生させることができる（非特許文献１参照）。逆ターミナル・テーブルは、ターミナル曲線ａk1,Nが入力されたときに、そのインデックス情報ｋを高速に索出するために用意されたものである。
【００６８】
尚、以下では、ターミナル・テーブル、インダクション・テーブル、及び逆ターミナル・テーブルを総称して「曲線演算テーブル」と呼ぶ。
【００６９】
図５にターミナル・テーブルの構造を、図６にインダクション・テーブルの構造を示す。ターミナル・テーブル及びインダクション・テーブルは、それぞれ、Ｎ２Ｎ個のレコード（行）を備えている。
【００７０】
ターミナル・テーブルの各レコードには、ターミナル曲線ａk1,N（ｋ＝１，…，Ｎ２Ｎ−１）のインデックス情報ｋと、当該ターミナル曲線ａk1,Nのアドレス・シーケンス（ａk1,N（１），ａk1,N（２），…，ａk1,N（２Ｎ））が格納されている。従って、ターミナル・テーブルは、インデックス情報ｋが入力されると、ターミナル曲線ａk1,N＝（ａk1,N（１），ａk1,N（２），…，ａk1,N（２Ｎ））を出力する。
【００７１】
インデックス・テーブルの各レコードには、ターミナル曲線ａk1,N（ｋ＝１，…，Ｎ２Ｎ−１）のインデックス情報ｋと、当該ターミナル曲線ａk1,Nの各アドレスａk1,N（ｉ）（ｉ＝１，…，２Ｎ）に連結するターミナル曲線ａki1,Nのインデックスｋｉ＝ｗk1,N（ｉ）の配列（ｗk1,N（１），ｗk1,N（２），…，ｗk1,N（２Ｎ））が格納されている。
【００７２】
（例１）
Ｎ＝２の場合、ターミナル・テーブル及びインデックス・テーブルは、例えば、（表１），（表２）のようになる。
【００７３】
【表１】
2012177893.tif 000011
【００７４】
【表２】
2012177893.tif 000012
【００７５】
（表１）のターミナル・テーブルの各レコードのターミナル曲線ａ11,2，ａ21,2，ａ31,2，ａ41,2は、それぞれ、図７（ａ）に示した２次元ヒルベルト曲線のアドレス順序を表している。また、（表２）のインダクション・テーブルの各インデックスは、分割指数ｍの２次元ヒルベルト曲線ａkm,2（ｋ＝１，２，３，４）を分割して分割指数（ｍ＋１）の２次元ヒルベルト曲線ａk(m+1),2を生成する際に、ターミナル曲線ａk1,2の要素の各アドレスａk1,2（１），ａk1,2（２），ａk1,2（３），ａk1,2（４）の各々に連結する分割指数ｍのヒルベルト曲線ａξm,2のインデックスξを表す。例えば、ｍ＝１の場合においてａ11,2を分割してａ12,2を生成する場合、（表１），（表２）より、
【００７６】
【数９】
2012177893.tif 000013
のように帰納的に生成することができる。
（例終り）
【００７７】
（例２）
Ｎ＝３の場合、ターミナル・テーブル及びインデックス・テーブルは、例えば、（表３），（表４）のようになる。
【００７８】
【表３】
2012177893.tif 000014
【００７９】
【表４】
2012177893.tif 000015
【００８０】
（表３）のターミナル・テーブルのターミナル曲線ａ11,3，ａ41,3，ａ71,3，ａ101,3は、それぞれ、図７（ｂ）に示した２次元ヒルベルト曲線のアドレス順序を表している。また、（表４）のインダクション・テーブルの各インデックスは、分割指数ｍの３次元ヒルベルト曲線ａkm,3（ｋ＝１，２，…，１２）を分割して分割指数（ｍ＋１）の３次元ヒルベルト曲線ａk(m+1),3を生成する際に、ターミナル曲線ａk1,3の要素の各アドレスａk1,3（１），ａk1,3（２），…，ａk1,3（８）の各々に連結する分割指数ｍのヒルベルト曲線ａξm,3のインデックスξを表す。例えば、ｍ＝１の場合においてａ5m,3を分割してａ5(m+1),3を生成する場合、（表１），（表２）より、
【００８１】
【数１０】
2012177893.tif 000016
のように帰納的に生成することができる。
（例終り）
【００８２】
ターミナル・テーブル初期化部１３は、曲線演算テーブル記憶部１２のターミナル・テーブルにターミナル曲線の初期値を設定する。
【００８３】
シード曲線設定部１４は、鍵番号Ｋに対するシード曲線ＣＫをシード曲線テーブル記憶部１１のシード曲線テーブルから読み出し、曲線演算テーブル記憶部１２のターミナル・テーブルから、該シード曲線ＣＫと始点及び終点が一致するターミナル曲線ａξを索出し、ターミナル・テーブルの該ターミナル曲線ａξを該シード曲線ＣＫに置換する。
【００８４】
インダクション・テーブル生成部１５は、シード曲線設定部１４によりシード曲線ＣＫが設定されたターミナル・テーブルに基づき、インダクション・テーブル内の各インデックス情報を設定する。
【００８５】
曲線上演算部１６は、Ｎ次元整数空間内の２点Ａ，Ｂが入力されると、各点Ａ，Ｂに対し、シード曲線ＣＫをターミナル・テーブル及びインダクション・テーブルにより（Ｍ−１）回分割して生成される分割指数ＭのＮ次元ヒルベルト曲線である鍵曲線ＨＫにより、１次元序数空間内の序数iA，iBに単射する１次元写像手段、素数ｐを法とする各序数iA，iBの和iZ＝iA＋iB mod pを算出する和算手段、及びこの序数iZをＮ次元整数空間内の点Ｚに単射するＮ次元写像手段から構成されている（図示せず）。そして、この出力される点Ｚが点Ａ，Ｂの和算点となる。
【００８６】
暗号コード生成モジュール５は、公開鍵入力部２１、暗号化倍数生成部２２、平文コード点生成部２３、暗号コード生成部２４、及び暗号コード出力部２５を備えている。
【００８７】
公開鍵入力部２１は、復号装置２ｄから送信される、Ｎ次元整数空間内の点である第一基準点Ｘ1及び第二基準点Ｘ2を受信する。
【００８８】
暗号化倍数生成部２２は、乱数により倍率数ｓ２を生成する。
【００８９】
平文コード点生成部２３は、平文コード入力部８から平文コードが入力されると、それに対応するＮ次元整数空間内の点である平文コード点Ｙを算出する。
【００９０】
暗号コード生成部２４は、曲線上演算部１６により、第一基準点Ｘ1をｓ２回和算した積算点である第三基準点Ｘ３、及び第二基準点Ｘ2をｓ２回和算した積算点に、素数ｐを法として平文コード点Ｙをベクトル加算した暗号コード点Ｖを算出する。
【００９１】
暗号コード出力部２５は、暗号コード生成部２４が算出する点の組（Ｘ３，Ｖ）を暗号コードとして復号装置２ｄへ送信する。ここで、第三基準点Ｘ３は、エンコード関数の逆関数ｆｅ−１を特定するデコード情報であり、暗号コード点Ｖは暗号コードに相当する。
【００９２】
（３）復号装置の内部構成
図３は、暗号処理装置２の復号機能部分（復号装置２ｄ）の機能構成を表すブロック図である。共通モジュール４については、図２のものと同様である。
【００９３】
復号モジュール６は、復号倍率数生成部３１、公開鍵生成部３２、暗号コード入力部３３、及び復号演算部３４を備えている。
【００９４】
復号倍率数生成部３１は、乱数により倍率数ｓ１を生成する。
【００９５】
公開鍵生成部３２は、乱数により第一基準点Ｘ1を生成し、曲線上演算部１６により、第一基準点Ｘ1をｓ１回和算した積算点である第二基準点Ｘ2を算出し、該第一基準点Ｘ1及び該第二基準点Ｘ2を、エンコード関数ｆｅを特定するエンコード情報として暗号化装置２ｅに送信する。
【００９６】
暗号コード入力部３３は、暗号化装置２ｅから送信される、第三基準点Ｘ３及び暗号コード点Ｖを受信する。
【００９７】
復号演算部３４は、曲線上演算部１６により、第三基準点Ｘ３をｓ１回曲線上和算した積算点Ｘ４を算出し、素数ｐを法として暗号コード点Ｖから点Ｘ４をベクトル減算して得られる点Ｙを算出する。
【００９８】
平文コード出力部９は、復号演算部３４により算出された点Ｙに対応する平文コードを算出する。
【００９９】
〔２〕暗号処理システムによる暗号処理方法
以上のように構成された本実施例の暗号処理システム１について、以下その動作を説明する。
（１）全体動作
図８は、暗号処理システム１による暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）と復号装置２ｄ（メッセージ受信側の暗号処理装置２）との間の暗号化通信の動作を表すフローチャートである。
【０１００】
まず、ステップＳ１，Ｓ２１において、暗号化装置２ｅ及び復号装置２ｄのパラメータ交換部１７は、初期パラメータである分割指数Ｍ，次元数Ｎ，素数ｐを読み出し、互いに交換することにより共通化する。
【０１０１】
次に、ステップＳ２において、復号装置２ｄの復号倍率数生成部３１は、乱数により倍率数ｓ１を生成し、ステップＳ２２において、暗号化装置２ｅの暗号化倍数生成部２２は、乱数により倍率数ｓ２を生成する。
【０１０２】
次に、ステップＳ３，Ｓ２３において、パラメータ交換部１７は鍵番号Ｋの交換を行う。鍵番号Ｋの交換は、非暗号化通信により行うことも可能であるが、本実施例においては、後述するDiffie Hellman暗号化方式により鍵番号Ｋの交換を行う例を示す（図１０参照）。
【０１０３】
次に、ステップＳ４，Ｓ２４において、復号装置２ｄ及び暗号化装置２ｅの双方におけるターミナル・テーブル初期化部１３、シード曲線設定部１４、及びインダクション・テーブル生成部１５は、それぞれ、次元数Ｎ，素数ｐ，及び鍵番号Ｋに基づき、図４のシード曲線テーブルを参照して、曲線演算テーブル（図５のターミナル・テーブル、図６のインダクション・テーブル、及び逆ターミナル・テーブル）を生成し、曲線演算テーブル記憶部１２に格納する。曲線演算テーブルの生成方法については、非特許文献１に記載の方法を応用するが、その詳細については後述する。
【０１０４】
次に、ステップＳ５において、復号装置２ｄの公開鍵生成部３２は、乱数により（Ｍ×Ｎ）ビットのビット・シーケンスを発生させることにより、Ｎ次元整数空間内の点を生成し、これを第一基準点Ｘ1に設定する。
【０１０５】
次に、ステップＳ６において、復号装置２ｄの公開鍵生成部３２は、曲線上演算部１６により、第一基準点Ｘ1をｓ１回曲線上和算した積算点を算出し、これを第二基準点Ｘ2に設定する。曲線上演算部１６による曲線上和算の具体的な演算処理に関しては、後述する。ここで、点Ｘ2は次式によって表される。
【０１０６】
【数１１】
2012177893.tif 000017
【０１０７】
ここで、関数ＬＫ（Ｘ）は、Ｎ次元整数空間内の点Ｘを、鍵番号Ｋの鍵曲線ＨＫにより１次元序数空間内の序数ｉＸに単射する関数を表し、ＬＫ−１（ｉＸ）はその逆関数を表す。ここで、鍵曲線ＨＫは、分割指数１のシード曲線ＣＫを、ターミナル・テーブル及びインダクション・テーブルを用いて（Ｍ−１）回分割することにより得られるヒルベルト曲線である。本明細書では、一般に、Ｎ次元整数空間内の２点Ａ，Ｂに対して、Ｃ＝ＬＫ−１［ＬＫ（Ａ）＋ＬＫ（Ｂ）］によりＮ次元整数空間内の点Ｃを算出する演算を「曲線上和算」と呼ぶ。
【０１０８】
図９にＮ次元空間点と分割指数ｍのＮ次元のヒルベルト曲線との単射関係を示す。Ｎ次元空間は、直交するＮ本の座標軸を有するが、図９（ｂ）ではそのうちの２本の座標軸ｙ１，ｙ２を示している。各座標軸の区間［０，１］は長さ１／２ｍの２ｍ個の小区間に分割されている。座標軸ｙ１上の区間［ｘ１／２ｍ，（ｘ１＋１）／２ｍ］を座標点ｘ１、座標軸ｙ２上の区間［ｘ２／２ｍ，（ｘ２＋１）／２ｍ］を座標点ｘ２のように表し、Ｎ個の座標点（ｘ１，ｘ２，…，ｘＮ）で特定される点（図９（ｂ）の領域Ｓａｍ，２）をＮ次元空間内の点Ｘ＝（ｘ１，ｘ２，…，ｘＮ）とする。この点Ｘは、ｍ×Ｎビットのアドレスにより特定することができる。従って、この点Ｘは、一辺の長さが１の超立方体を充填する分割指数ｍのヒルベルト曲線（図９（ａ））との１対１対応させることができる。尚、分割指数ｍのヒルベルト曲線は、長さ２ｍＮのアドレス・シーケンスであり、各アドレスはｍ×Ｎビットで表される。
【０１０９】
次に、ステップＳ７において、復号装置２ｄの公開鍵生成部３２は、生成した第一基準点Ｘ1及び該第二基準点Ｘ2をエンコード情報｛Ｘ1，Ｘ2｝として、通信インタフェース７により通信ネットワーク３を介して暗号化装置２ｅへ送信する。
【０１１０】
次に、ステップＳ２５において、暗号化装置２ｅの公開鍵入力部２１は、復号装置２ｄから送信されるエンコード情報｛Ｘ1，Ｘ2｝を受信する。このエンコード情報｛Ｘ1，Ｘ2｝が公開鍵に相当する。
【０１１１】
次に、ステップＳ２６において、暗号化装置２ｅの平文コード入力部８から、復号装置２ｄへ送信する平文コードＭｅｓが入力される。
【０１１２】
次に、ステップＳ２７において、暗号化装置２ｅの平文コード点生成部２３は、平文コードＭｅｓを（Ｍ×Ｎ）ビットのビット・シーケンスに分割し、それぞれのビット・シーケンスをＮ次元整数空間内の点に対応させることにより、平文コード点Ｙ１，Ｙ２，…を生成する。平文コード点Ｙの数は、平文コードＭｅｓの長さにより決まるが、ここでは簡単のために平文コード点Ｙの数を１個として説明する。
【０１１３】
次に、ステップＳ２８において、暗号化装置２ｅの暗号コード生成部２４は、曲線上演算部１６により、第一基準点Ｘ1をｓ２回曲線上和算した積算点である第三基準点Ｘ３を算出する。また、曲線上演算部１６により、第二基準点Ｘ2をｓ２回曲線上和算した積算点Ｖ’を算出し、この点Ｖ’に対し素数ｐを法として平文コード点Ｙをベクトル加算した暗号コード点Ｖを算出する。そして、算出された第三基準点Ｘ３を、エンコード関数の逆関数ｆｅ−１を特定するデコード情報とし、暗号コード点Ｖを暗号コードとする。ここで、各点（Ｘ３，Ｖ）は次式によって表される。
【０１１４】
【数１２】
2012177893.tif 000018
ここで、ｆｅ（ＬＫ（Ｘ２）；ｓ２，ｐ）はエンコード関数である。
【０１１５】
次に、ステップＳ２９において、暗号化装置２ｅの暗号コード出力部２５は、暗号コード生成部２４が算出する第三基準点Ｘ３及び暗号コード点Ｖを、通信インタフェース７により通信ネットワーク３を介して復号装置２ｄへ送信する。
【０１１６】
次に、ステップＳ８において、復号装置２ｄの暗号コード入力部３３は、暗号化装置２ｅから送信される、点（Ｘ３，Ｖ）を受信する。
【０１１７】
次に、ステップＳ９において、復号装置２ｄの復号演算部３４は、曲線上演算部１６により、点Ｘ３をｓ１回曲線上和算した積算点Ｖ３を算出し、素数ｐを法として点Ｖから前記点Ｖ３をベクトル減算して得られる点Ｙを算出する。これにより、もとの平文コード点Ｙが復元される。復号演算部３４を式により表すと、次式のようになる。
【０１１８】
【数１３】
2012177893.tif 000019
ここで、ｇｅ（ＬＫ（Ｘ３）；ｓ２，ｐ）はエンコード関数ｆｅと可換なデコード関数である。式（１３）に式（１２ａ）（１２ｂ）を代入すれば、可換関数となっていることが分かる。
【０１１９】
次に、ステップＳ１０において、復号装置２ｄの復号演算部３４は、平文コード点Ｙに対応する平文コードＭｅｓを算出する。
【０１２０】
最後に、ステップＳ１１において、復号装置２ｄの平文コード出力部９は、平文コードＭｅｓを出力し、復号処理を終了する。
【０１２１】
（２）曲線上演算部１６による曲線上和算
次に、式（１１），（１２ａ），（１２ｂ），（１３）において用いる曲線上演算部１６による曲線上和算について具体的に説明する。曲線上和算とは、Ｎ次元整数空間内の加算する２点Ｘ，Ｙについて、各点Ｘ，Ｙを鍵曲線ＨＫにより１次元序数空間内の序数iX，iYに単射し、所定の素数ｐを法とする各序数iX，iYの和iZ＝iX＋iY mod pを算出し、この序数iZを鍵曲線ＨＫによりＮ次元整数空間内の点Ｚに単射することにより得られる点Ｚを点Ｘ，Ｙの和算点とする演算をいう。ここで、鍵曲線ＨＫは、鍵番号Ｋのシード曲線ＣＫをターミナル・テーブル及びインダクション・テーブルにより（Ｍ−１）回分割して得られる分割指数ＭのＮ次元ヒルベルト曲線である。
【０１２２】
今、上記３つの点の座標をＸ＝（ｘ１，ｘ２，…，ｘＮ），Ｙ＝（ｙ１，ｙ２，…，ｙＮ），Ｚ＝（ｚ１，ｚ２，…，ｚＮ）とおく。シード曲線ＣＫを（Ｍ−１）回分割して生成される分割指数ＭのＮ次元ヒルベルト曲線を「鍵曲線」といい、ＨＫと記す。鍵曲線ＨＫは、曲線発生の種となるシード曲線ＣＫの種類により決まり、その総数Ｆ（Ｎ）は、式（８）で説明したように非常に大きな数となる。ここで、鍵曲線ＨＫの分割指数ＭのＮ次元ヒルベルト曲線の種類（インデックス）をγＭと記す。
【０１２３】
曲線γＭの鍵曲線ＨＫにおける曲線上和算Ｚ＝ＬＫ−１［ＬＫ（Ｘ）＋ＬＫ（Ｙ）］は、次のようにして算出することができる。
【０１２４】
（２−１）〔曲線上和算のアルゴリズム〕
０）準備
上記ステップＳ４，Ｓ２４において、シード曲線ＣＫを設定したターミナル・テーブルＴtermNを生成し、ターミナル・テーブルＴtermNから逆ターミナル・テーブルＩＴtermN及びインダクション・テーブルＴindNを生成しておく。
【０１２５】
１）まず、点Ｘの座標であるアドレス（ｘ１，ｘ２，…，ｘＮ）を用いて、序数iXを次式により計算する。
【０１２６】
【数１４】
2012177893.tif 000020
【０１２７】
ここで、関数Ｈｉｌ２（γＭ，Ｍ，（ｘ１，ｘ２，…，ｘＮ））は、分割指数Ｍの曲線γＭ上の点（ｘ１，ｘ２，…，ｘＮ）の順番を求める関数である。関数Ｈｉｌ２の具体的な演算については、後述する。
【０１２８】
２）次に、点Ｙの座標であるアドレス（ｙ１，ｙ２，…，ｙＮ）を用いて、序数iYを次式により計算する
【０１２９】
【数１５】
2012177893.tif 000021
【０１３０】
３）次に、序数iX，iYを用いて
【０１３１】
【数１６】
2012177893.tif 000022
を計算する。
【０１３２】
４）最後に、次式により、序数iZから点Ｚの座標であるアドレス（ｚ１，ｚ２，…，ｚＮ）を求める。
【０１３３】
【数１７】
2012177893.tif 000023
【０１３４】
ここで、関数Ｈｉｌ１（γＭ，Ｍ，iZ）は、分割指数Ｍの曲線γＭ上の点Ｚの序数iZから点Ｚの座標（ｚ１，ｚ２，…，ｚＮ）を求める関数である。関数Ｈｉｌ１の具体的な演算については、後述する。
【０１３５】
（２−２）〔関数Ｈｉｌ１の計算〕
今、Ｎ次元空間内の点Ａのアドレスａを
【０１３６】
【数１８】
2012177893.tif 000024
とする。ここで、ｚA,i（ｉ＝１，…，Ｍ）は、式（１８ｂ）のようなＮビットのビット・シーケンスである。ｚA,i,jが０又は１のリテラルを表す。式（１８ｃ）は、アドレスａのシーケンスとＮ次元空間の点座標（ｚ１，ｚ２，…，ｚＮ）との関係を示している。また、点Ａを分割指数Ｍのヒルベルト曲線γＭ上に写像したときに、ヒルベルト曲線γＭ上における点Ａの序数をiAとし、iAを次式のように表す。
【０１３７】
【数１９】
2012177893.tif 000025
【０１３８】
このとき、ｚA,1，ｚA,2，…，ｚA,Mは、ターミナル・テーブルＴtermN及びインダクション・テーブルＴindNを用いて、以下のように逐次求めることができる。
【０１３９】
【数２０】
2012177893.tif 000026
【０１４０】
これにより、点Ａのアドレスａを算出することができる。ここで、ＴtermN[γk][i]は、図５のターミナル・テーブルにおいて曲線γkに対応するレコードのｉ番目のアドレスを表し、ＴindN[γk][i]は、図６のインダクション・テーブルにおいて曲線γkに対応するレコードのｉ番目のインデックスを表す。
【０１４１】
（２−３）〔関数Ｈｉｌ２の計算〕
前述のＮ次元空間内の点Ａのアドレスａから、点Ａを分割指数Ｍのヒルベルト曲線γＭ上に写像したときの、ヒルベルト曲線γＭ上における点Ａの序数iAの演算（関数Ｈｉｌ２）は、逆ターミナル・テーブルＩＴtermN及びインダクション・テーブルＴindNを用いて、以下のように逐次行うことができる。
【０１４２】
【数２１】
2012177893.tif 000027
【０１４３】
（３）鍵番号Ｋの交換
次に、図８のステップＳ３，Ｓ２３における暗号化装置２ｅと復号装置２ｄとの間の鍵番号Ｋの交換について説明する。鍵番号Ｋの交換方法については、本発明ではどのような方法を用いてもよいが、データ通信の秘匿性をより頑健なものとするためには、既存の公開鍵暗号方式を用いるのがよい。本実施例では、Diffie Hellman暗号化方式を用いた例について示す。
【０１４４】
図１０は、鍵番号Ｋの交換動作を表すフローチャートである。
【０１４５】
まず、ステップＳ３１，Ｓ４１において、復号装置２ｄ，暗号化装置２ｅのパラメータ交換部１７は、内部メモリから初期パラメータとしてＤ，ｑを読み出す。ここで、Ｄは原始元、ｑは素数であり、復号装置２ｄ及び暗号化装置２ｅにおいて、予め決められた共通の値が与えられているものとする。
【０１４６】
次に、ステップＳ３２，Ｓ４２において、復号装置２ｄ，暗号化装置２ｅのパラメータ交換部１７は、それぞれ、乱数ｒ１，ｒ２を生成する。
【０１４７】
次に、ステップＳ３３，Ｓ４３において、復号装置２ｄ，暗号化装置２ｅのパラメータ交換部１７は、それぞれ、公開鍵ｂＡ，ｂＢを次式により生成する。
【０１４８】
【数２２】
2012177893.tif 000028
【０１４９】
次に、ステップＳ４４において、暗号化装置２ｅのパラメータ交換部１７は、公開鍵ｂＢを復号装置２ｄに送信し、ステップＳ３４において、復号装置２ｄのパラメータ交換部１７は、当該公開鍵ｂＢを受信する。
【０１５０】
次に、ステップＳ３５において、復号装置２ｄのパラメータ交換部１７は、公開鍵ｂＡを暗号化装置２ｅに送信し、ステップＳ４５において、暗号化装置２ｅのパラメータ交換部１７は、当該公開鍵ｂＡを受信する。
【０１５１】
最後に、ステップＳ３６，Ｓ４６において、復号装置２ｄ，暗号化装置２ｅのパラメータ交換部１７は、それぞれ、次式により鍵番号Ｋを算出する。
【０１５２】
【数２３】
2012177893.tif 000029
【０１５３】
以上により、復号装置２ｄと暗号化装置２ｅにおいて、共通の鍵番号Ｋが交換される。
【０１５４】
（４）曲線演算テーブルの生成
次に、ステップＳ４における各曲線演算テーブルの設定方法について説明する。図１１は、各曲線演算テーブルの設定方法の全体動作を表すフローチャートである。
【０１５５】
まず、ステップＳ５０において、ターミナル・テーブル初期化部１３により、曲線演算テーブル記憶部１２内のターミナル・テーブルの初期化が行われる。ターミナル・テーブルの初期化処理の詳細については後述する。これにより、ターミナル・テーブルには、初期値として、分割指数１のＮ次ヒルベルト曲線である各ターミナル曲線が設定される。
【０１５６】
次に、ステップＳ５１において、ターミナル・テーブル初期化部１３により、曲線演算テーブル記憶部１２内の逆ターミナル・テーブルの初期化が行われる。
【０１５７】
次に、ステップＳ５２において、シード曲線設定部１４は、シード曲線テーブル記憶部１１内のシード曲線テーブから、鍵番号Ｋのシード曲線ＣＫを索出する。そして、シード曲線ＣＫの先頭のアドレスｃK1,N（１）と最後のアドレスｃK1,N（２Ｎ）を読み出し、このアドレスｃK1,N（１），ｃK1,N（２Ｎ）を検索キーとしてターミナル・テーブルを検索し、始点及び終点がアドレスｃK1,N（１），ｃK1,N（２Ｎ）に一致するターミナル曲線ａξ1,Nを索出する。ここで、ターミナル・テーブルに格納された各ターミナル曲線は、始点と終点の組合せが全て異なる。従って、始点及び終点がアドレスｃK1,N（１），ｃK1,N（２Ｎ）に一致するターミナル曲線は唯１つに特定される。
【０１５８】
ステップＳ５３，Ｓ５４において、ターミナル曲線ａξ1,Nが索出されると、シード曲線設定部１４は、ターミナル・テーブルのターミナル曲線ａξ1,Nをシード曲線ＣＫに置換する。すなわち、ＴtermN[ξ][ｉ]（＝ａξ1,N（ｉ））＝ｃK1,N（ｉ）（ｉ＝１，…，２Ｎ）に設定する。
【０１５９】
次に、ステップＳ５５，Ｓ５６において、シード曲線設定部１４は、逆ターミナル・テーブルのインデックスＩＴtermN[ξ][ｃK1,N（ｉ）]をシード曲線ＣＫのアドレスｃK1,N（ｉ）のインデックスｉに置換する。すなわち、ＩＴtermN[ξ][ｃK1,N（ｉ）]＝ｉ（ｉ＝１，…，２Ｎ）に設定する。
【０１６０】
最後に、ステップＳ５７において、インダクション・テーブル生成部１５により、曲線演算テーブル記憶部１２内のインダクション・テーブルの生成が行われる。インダクション・テーブルの生成処理の詳細については後述する。これにより、インダクション・テーブルには、連結曲線を指定する各インデックス値が設定される。
【０１６１】
以上の処理により、曲線演算テーブル記憶部１２に、ターミナル・テーブル，逆ターミナル・テーブル，インダクション・テーブルがそれぞれ生成される。
【０１６２】
（４−１）ターミナル・テーブルの初期化
次に、図１１のステップＳ５０におけるターミナル・テーブル初期化部１３によるターミナル・テーブルの初期値の処理方法について説明する（非特許文献１参照）。図１２は、ターミナル・テーブル初期化部１３によるターミナル・テーブルの初期値の設定処理を表すフローチャートである。尚、図１２のフローチャートはＰＡＤ（Problem Analysis Diagram；JIS X0128参照）により表している。
【０１６３】
まず、ステップＳ６１において、ターミナル・テーブル初期化部１３は、１番目のターミナル曲線ａ11,Nを生成する種となる分割指数１の１次元ヒルベルト曲線ａ11,1を（０，１）に設定する。
【０１６４】
次に、ステップＳ６２，Ｓ６３において、ターミナル・テーブル初期化部１３は、分割指数１の１次元ヒルベルト曲線ａ11,1から分割指数１の１次元ヒルベルト曲線ａ11,Nを、次の逐次式によって生成する。
【０１６５】
【数２４】
2012177893.tif 000030
【０１６６】
次に、ステップＳ６４，Ｓ６５，Ｓ６６において、ターミナル・テーブル初期化部１３は、先に生成した１番目のターミナル曲線ａ11,Nの各アドレス値を用いて、(N(i-1)+j)番目（ｉ＝１，…，２Ｎ−１；ｊ＝１，…，Ｎ）のターミナル曲線ａN(i-1)+j1,Nの先頭のアドレスａN(i-1)+j1,N（１）を、ターミナル曲線ａ11,Nの（２ｉ−１）番目のアドレス値ａ11,N（２ｉ−１）に設定する。
【０１６７】
【数２５】
2012177893.tif 000031
【０１６８】
次に、ステップＳ６７，Ｓ６８，Ｓ６９において、ターミナル・テーブル初期化部１３は、先に生成したターミナル曲線ａN(i-1)+j1,Nの先頭のアドレス値ａN(i-1)+j1,N（１）を用いて、(N(i-1)+j)番目（ｉ＝１，…，２Ｎ−１；ｊ＝１，…，Ｎ）のターミナル曲線ａN(i-1)+j1,Nの最後のアドレスａN(i-1)+j1,N（２Ｎ）を、当該ターミナル曲線ａN(i-1)+j1,Nの１番目のアドレス値ａN(i-1)+j1,N（１）のｊ番目のビットを反転したアドレス値ibit（ａN(i-1)+j1,N（１））に設定する。
【０１６９】
【数２６】
2012177893.tif 000032
【０１７０】
次に、ステップＳ７０〜Ｓ７４において、ターミナル・テーブル初期化部１３は、ｋ番目（ｋ＝２，…，Ｎ）のターミナル曲線ａk1,Nのｉ’番目（ｉ’＝２，…，２Ｎ−１）の中間点アドレスａk1,N（i'）を次式により設定する。
【０１７１】
【数２７】
2012177893.tif 000033
【０１７２】
次に、ステップＳ７５〜Ｓ７８において、ターミナル・テーブル初期化部１３は、(Ni+j)番目（ｉ＝１，…，２Ｎ−１−１；ｊ＝１，…，Ｎ）のターミナル曲線ａ(Ni+j)1,Nのｉ’番目（ｉ’＝２，…，２Ｎ−１）の中間点アドレスａ(Ni+j)1,N（i'）を次式により設定する。
【０１７３】
【数２８】
2012177893.tif 000034
【０１７４】
最後に、ステップＳ７９〜Ｓ８１において、ターミナル・テーブル初期化部１３は、生成したアドレスａk1,N(i)を、ターミナル・テーブルの要素ＴtermN[k][i]に格納して、ターミナル・テーブルの初期化処理を終了する。生成されたターミナル・テーブルは、図５のようになる。このターミナル・テーブルの初期値は、次元数Ｎを特定すれば、一意的に生成することができる。
【０１７５】
（４−２）逆ターミナル・テーブルの生成
次に、図１１のステップＳ５１における、ターミナル・テーブル初期化部１３による逆ターミナル・テーブルの初期値の設定方法について説明する。図１３は、ターミナル・テーブル初期化部１３による逆ターミナル・テーブルの初期値の設定処理を表すフローチャートである。尚、図１３のフローチャートもＰＡＤにより表している。この処理は極めて簡単であり、ターミナル・テーブルのｋ番目（ｋ＝１，…，Ｎ２Ｎ）のターミナル曲線ａk1,Nのｉ番目（ｉ＝１，…，２Ｎ）のアドレスａk1,N（ｉ）をＴtermN[k][i]から読み出して（Ｓ９３）、このインデックスｉを逆ターミナル・テーブルの要素ＩＴtermN[k][ａk1,N（ｉ）]に格納する（Ｓ９４）という操作を、すべてのｋ，ｉについて繰り返し行うことにより実行される。
【０１７６】
（４−３）インダクション・テーブルの生成
最後に、図１１のステップＳ５７における、インダクション・テーブル生成部１５によるインダクション・テーブルの生成方法について説明する（非特許文献１参照）。図１４は、インダクション・テーブル生成部１５によるインダクション・テーブルの作成処理を表すフローチャートである。
【０１７７】
ステップＳ１００において、インダクション・テーブル生成部１５は、インデックスｋを１からＮ２Ｎまで１ずつ増加させながら、以下のステップＳ１０１からＳ１１３までの処理を行う。
【０１７８】
（４−３−１）最初のアドレスの連結パスの設定処理
まず、インダクション・テーブル生成部１５は、以下のステップＳ１０１〜Ｓ１０４において、インダクション・テーブルにおけるターミナル曲線ａk1,Nの最初のアドレスに連結するパスの設定処理を行う。
【０１７９】
ステップＳ１０１において、インダクション・テーブル生成部１５は、ターミナル・テーブルからｋ番目のターミナル曲線ａk1,Nの１番目のアドレスａk1,N（１）を読み出して、これを始点アドレス変数ｓに設定する。
【０１８０】
次に、ステップＳ１０２において、インダクション・テーブル生成部１５は、ターミナル・テーブルからｋ番目のターミナル曲線ａk1,Nの２番目のアドレスａk1,N（２）を読み出して、次式の演算により、終点アドレス変数ｅに設定する。
【０１８１】
【数２９】
2012177893.tif 000035
【０１８２】
次に、ステップＳ１０３において、インダクション・テーブル生成部１５は、始点アドレス変数ｓ及び終点アドレス変数ｅを検索キーとして、ターミナル・テーブルを検索し、始点アドレスａk*1,N（１）が始点アドレス変数ｓと一致し、終点アドレスａk*1,N（２Ｎ）が終点アドレス変数ｅと一致するターミナル曲線ａk*1,Nを索出し、そのインデックスｋ＊を取得する。
【０１８３】
最後に、ステップＳ１０４において、インダクション・テーブル生成部１５は、インダクション・テーブルのｋ番目のレコードの最初のインデックスＴindN[k][1]をインデックスｋ＊に設定する。
【０１８４】
（４−３−２）中間の連結パスの設定処理
次に、ステップＳ１０５において、インダクション・テーブル生成部１５は、序数指定変数ｉを２から２Ｎ−１まで１ずつ増加させながら、以下のステップＳ１０６〜Ｓ１０９の中間の連結パスの設定処理を繰り返し実行する。
【０１８５】
まず、ステップＳ１０６において、インダクション・テーブル生成部１５は、先に設定した終点アドレス変数ｅと、ターミナル・テーブルから読み出されるｋ番目のターミナル曲線ａk1,Nのアドレスａk1,N（２ｉ−２），ａk1,N（２ｉ−３）から、次式により始点アドレス変数ｓを変更する。
【０１８６】
【数３０】
2012177893.tif 000036
【０１８７】
次に、ステップＳ１０７において、インダクション・テーブル生成部１５は、新たに設定した始点アドレス変数ｓと、ターミナル・テーブルから読み出されるｋ番目のターミナル曲線ａk1,Nのアドレスａk1,N（２ｉ−１），ａk1,N（２ｉ−２）から、次式により終点アドレス変数ｅを変更する。
【０１８８】
【数３１】
2012177893.tif 000037
【０１８９】
次に、ステップＳ１０８において、インダクション・テーブル生成部１５は、新たに再設定された始点アドレス変数ｓ及び終点アドレス変数ｅを検索キーとして、ターミナル・テーブルを検索し、始点アドレスａk*1,N（１）が始点アドレス変数ｓと一致し、終点アドレスａk*1,N（２Ｎ）が終点アドレス変数ｅと一致するターミナル曲線ａk*1,Nを索出し、そのインデックスｋ＊を取得する。
【０１９０】
最後に、ステップＳ１０９において、インダクション・テーブル生成部１５は、インダクション・テーブルのｋ番目のレコードの（２ｉ−２）番目及び（２ｉ−１）番目のインデックスＴindN[k][2i-2]，ＴindN[k][2i-1]をインデックスｋ＊に設定する。尚、ヒルベルト曲線の対称性によって、インダクション・テーブルの（２ｉ−２）番目のインデックスと（２ｉ−１）番目のインデックスは、常に同じ値となる（表２，表４参照）。
【０１９１】
（４−３−３）最後の連結パスの設定処理
最後に、インダクション・テーブル生成部１５は、以下のステップＳ１１０〜Ｓ１１３において、インダクション・テーブルにおけるターミナル曲線ａk1,Nの最後のアドレスに連結するパスの設定処理を行う。
まず、ステップＳ１１０において、インダクション・テーブル生成部１５は、先に設定した終点アドレス変数ｅと、ターミナル・テーブルから読み出されるｋ番目のターミナル曲線ａk1,Nのアドレスａk1,N（２Ｎ），ａk1,N（２Ｎ−１）から、次式により始点アドレス変数ｓを変更する。
【０１９２】
【数３２】
2012177893.tif 000038
【０１９３】
次に、ステップＳ１１１において、インダクション・テーブル生成部１５は、終点アドレス変数ｅをターミナル・テーブルから読み出されるｋ番目のターミナル曲線ａk1,Nのアドレスａk1,N（２Ｎ）に変更する。
【０１９４】
次に、ステップＳ１１２において、インダクション・テーブル生成部１５は、新たに再設定された始点アドレス変数ｓ及び終点アドレス変数ｅを検索キーとして、ターミナル・テーブルを検索し、始点アドレスａk*1,N（１）が始点アドレス変数ｓと一致し、終点アドレスａk*1,N（２Ｎ）が終点アドレス変数ｅと一致するターミナル曲線ａk*1,Nを索出し、そのインデックスｋ＊を取得する。
【０１９５】
最後に、ステップＳ１１３において、インダクション・テーブル生成部１５は、インダクション・テーブルのｋ番目のレコードの最後のインデックスＴindN[k][2N]をインデックスｋ＊に設定する。以上の処理によって、インダクション・テーブルを作成することができる。
【実施例２】
【０１９６】
図１５は、本発明の実施例２に係る暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）の構成を表すブロック図、図１６は、本発明の実施例２に係る復号装置２ｄ（メッセージ受信側の暗号処理装置２）の構成を表すブロック図である。尚、本実施例において、暗号処理システムの全体構成は図１と同様であるとする。本実施例は、実施例１の暗号処理装置２の構成を、さらに単純化したものである。
【０１９７】
図１５，図１６において、共通モジュール４、暗号コード生成モジュール５、復号モジュール６、通信インタフェース７、平文コード入力部８、平文コード出力部９、曲線上演算部１６、公開鍵入力部２１、暗号化倍数生成部２２、平文コード点生成部２３、暗号コード生成部２４、暗号コード出力部２５、復号倍率数生成部３１、公開鍵生成部３２、暗号コード入力部３３、及び復号演算部３４は、実施例１の図２，図３の同符号の構成部分に対応している。
【０１９８】
本実施例では、図２，図３のシード曲線テーブル記憶部１１に代えて、鍵曲線記憶部１１’を備えており、図２，図３の曲線演算テーブル記憶部１２、ターミナル・テーブル初期化部１３、シード曲線設定部１４、及びインダクション・テーブル生成部１５は省略されている。また、本実施例では、パラメータＭ，Ｎ，ｐは、各暗号処理装置２において予め与えられており、図２，図３のパラメータ交換部１７の代わりに鍵番号交換部１７’を備えている。
【０１９９】
本実施例では、鍵曲線記憶部１１’には、Ｎ次元整数空間内の所定の部分空間を充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）そのものが複数記憶されている。ここで、空間充填曲線としては、実施例１と同様に、分割指数Ｍのヒルベルト曲線を使用することもできるが、本実施例では他の例として、分割指数ＭのＮ次元ペアノ曲線、分割指数ＭのＮ次元シェルピンスキー曲線、及び分割指数ＭのＮ次元ムーア曲線を使用することとする。図１７に、２次元に於けるペアノ曲線、シェルピンスキー曲線、及びムーア曲線の例を示す。これらの空間充填曲線も、Ｍ回分割することにより、自己相似的に拡張することができる。
【０２００】
鍵番号交換部１７’は、他の暗号処理装置２との間で、鍵曲線を特定する鍵番号Ｋを交換する。鍵番号Ｋの交換処理については、実施例１の図１０で説明したDiffie Hellman暗号化方式による鍵番号Ｋの交換処理が行われるものとする。
【０２０１】
以上のように構成された本実施例の暗号処理システム１について、以下その動作を説明する。
【０２０２】
図１８は、実施例２の暗号処理システム１による暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）と復号装置２ｄ（メッセージ受信側の暗号処理装置２）との間の暗号化通信の動作を表すフローチャートである。
【０２０３】
ステップＳ１〜Ｓ３，Ｓ２１〜Ｓ２３は、図８と同様であるため説明は省略する。尚、本実施例では、パラメータＭ，Ｎ，ｐは、各暗号処理装置２に予め与えられているので、ステップＳ１，Ｓ２１ではパラメータＭ，Ｎ，ｐの交換は行われない。
【０２０４】
ステップＳ３において、鍵番号Ｋの交換が行われることによって、暗号化装置２ｅと復号装置２ｄの双方において共通の鍵番号Ｋが保有される。
【０２０５】
次に、ステップＳ５において、復号装置２ｄの公開鍵生成部３２は、乱数により（ｑＭ×Ｎ）ビットのビット・シーケンスを発生させることにより、Ｎ次元整数空間内の点を生成し、これを第一基準点Ｘ1に設定する。ここで、ｑは使用する空間充填曲線により決まる定数であり、ペアノ曲線の場合にはｑ＝２，シェルピンスキー曲線、ムーア曲線の場合にはｑ＝１である。
【０２０６】
次に、ステップＳ６において、復号装置２ｄの公開鍵生成部３２は、曲線上演算部１６により、第一基準点Ｘ1に基づき、次式により第二基準点Ｘ２を算出する。
【０２０７】
【数３３】
2012177893.tif 000039
尚、本実施例では、エンコード関数ｆｅとして、実施例１と異なる関数の例を示すが、実施例１と同様のエンコード関数ｆｅを使用してもよい。その場合、式（３３）の代わりに式（１１）を使用すればよい。
【０２０８】
次に、ステップＳ７において、復号装置２ｄの公開鍵生成部３２は、生成した第一基準点Ｘ1及び該第二基準点Ｘ2をエンコード情報｛Ｘ1，Ｘ2｝として、通信インタフェース７により通信ネットワーク３を介して暗号化装置２ｅへ送信する。
【０２０９】
次に、ステップＳ２５において、暗号化装置２ｅの公開鍵入力部２１は、復号装置２ｄから送信されるエンコード情報｛Ｘ1，Ｘ2｝を受信する。
【０２１０】
次に、ステップＳ２６において、暗号化装置２ｅの平文コード入力部８から、復号装置２ｄへ送信する平文コードＭｅｓが入力される。
【０２１１】
次に、ステップＳ２７において、暗号化装置２ｅの平文コード点生成部２３は、平文コードＭｅｓを（ｑＭ×Ｎ）ビットのビット・シーケンスに分割し、それぞれのビット・シーケンスをＮ次元整数空間内の点に対応させることにより、平文コード点Ｙ１，Ｙ２，…を生成する。平文コード点Ｙの数は、平文コードＭｅｓの長さにより決まるが、ここでは簡単のために平文コード点Ｙの数を１個として説明する。
【０２１２】
次に、ステップＳ２８において、暗号化装置２ｅの暗号コード生成部２４は、曲線上演算部１６により、次式により第三基準点Ｘ３及び暗号コード点Ｖを算出する。そして、算出された第三基準点Ｘ３を、エンコード関数の逆関数ｆｅ−１を特定するデコード情報とし、暗号コード点Ｖを暗号コードとする。
【０２１３】
【数３４】
2012177893.tif 000040
ここで、ｆｅ（ＬＫ（Ｘ２）；ｓ２，ｐ）はエンコード関数である。尚、実施例１と同様のエンコード関数ｆｅを使用する場合、式（３４ａ）（３４ｂ）の代わりに式（１２ａ）（１２ｂ）を使用すればよい。
【０２１４】
次に、ステップＳ２９において、暗号化装置２ｅの暗号コード出力部２５は、暗号コード生成部２４が算出する第三基準点Ｘ３及び暗号コード点Ｖを、通信インタフェース７により通信ネットワーク３を介して復号装置２ｄへ送信する。
【０２１５】
次に、ステップＳ８において、復号装置２ｄの暗号コード入力部３３は、暗号化装置２ｅから送信される、点（Ｘ３，Ｖ）を受信する。
【０２１６】
次に、ステップＳ９において、復号装置２ｄの復号演算部３４は、曲線上演算部１６により、次式により得られる点Ｙを算出する。これにより、もとの平文コード点Ｙが復元される。
【０２１７】
【数３５】
2012177893.tif 000041
ここで、ｇｅ（ＬＫ（Ｘ３）；ｓ２，ｐ）はエンコード関数ｆｅと可換なデコード関数である。尚、実施例１と同様のエンコード関数ｇｅを使用する場合、式（３５）の代わりに式（１３）を使用すればよい。
【０２１８】
次に、ステップＳ１０において、復号装置２ｄの復号演算部３４は、平文コード点Ｙに対応する平文コードＭｅｓを算出する。
【０２１９】
最後に、ステップＳ１１において、復号装置２ｄの平文コード出力部９は、平文コードＭｅｓを出力し、復号処理を終了する。
【実施例３】
【０２２０】
図１９は、本発明の実施例３に係る暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）の構成を表すブロック図、図２０は、本発明の実施例３に係る復号装置２ｄ（メッセージ受信側の暗号処理装置２）の構成を表すブロック図である。尚、本実施例においても、暗号処理システムの全体構成は図１と同様であるとする。本実施例は、実施例２の暗号処理装置２の構成を、さらに単純化したものである。
【０２２１】
図１９，図２０において、共通モジュール４、暗号コード生成モジュール５、復号モジュール６、通信インタフェース７、平文コード入力部８、平文コード出力部９、曲線上演算部１６、平文コード点生成部２３、暗号コード生成部２４、暗号コード出力部２５、暗号コード入力部３３、及び復号演算部３４は、実施例１の図２，図３の同符号の構成部分に対応している。
【０２２２】
本実施例では、図２，図３のシード曲線テーブル記憶部１１に代えて、鍵曲線記憶部１１’を備えており、図２，図３の曲線演算テーブル記憶部１２、ターミナル・テーブル初期化部１３、シード曲線設定部１４、及びインダクション・テーブル生成部１５は省略されている。また、本実施例では、パラメータＭ，Ｎ，ｐは、各暗号処理装置２において予め与えられており、図２，図３のパラメータ交換部１７の代わりに鍵番号交換部１７’を備えている。
【０２２３】
また、本実施例では、第一基準点Ｘ１，第二基準点Ｘ２，第三基準点Ｘ３を使用しないので、図２，図３の公開鍵入力部２１、暗号化倍数生成部２２、復号倍率数生成部３１、公開鍵生成部３２は省略されている。
【０２２４】
本実施例では、実施例２と同様、鍵曲線記憶部１１’には、Ｎ次元整数空間内の所定の部分空間を充填する空間充填曲線である鍵曲線Ｈｋ（ｋ＝１，２，…）そのものが複数記憶されている。
【０２２５】
鍵番号交換部１７’は、他の暗号処理装置２との間で、鍵曲線を特定する鍵番号Ｋを交換する。鍵番号Ｋの交換処理については、実施例１の図１０で説明したDiffie Hellman暗号化方式による鍵番号Ｋの交換処理が行われるものとする。
【０２２６】
以上のように構成された本実施例の暗号処理システム１について、以下その動作を説明する。
【０２２７】
図２１は、実施例３の暗号処理システム１による暗号化装置２ｅ（メッセージ送信側の暗号処理装置２）と復号装置２ｄ（メッセージ受信側の暗号処理装置２）との間の暗号化通信の動作を表すフローチャートである。
【０２２８】
ステップＳ１〜Ｓ３，Ｓ２１〜Ｓ２３は、図８と同様であるため説明は省略する。尚、本実施例では、パラメータＭ，Ｎ，ｐは、各暗号処理装置２に予め与えられているので、ステップＳ１，Ｓ２１ではパラメータＭ，Ｎ，ｐの交換は行われない。
【０２２９】
ステップＳ３において、鍵番号Ｋの交換が行われることによって、暗号化装置２ｅと復号装置２ｄの双方において共通の鍵番号Ｋが保有される。
【０２３０】
次に、ステップＳ２６において、暗号化装置２ｅの平文コード入力部８から、復号装置２ｄへ送信する平文コードＭｅｓが入力される。
【０２３１】
次に、ステップＳ２７において、暗号化装置２ｅの平文コード点生成部２３は、平文コードＭｅｓを（ｑＭ×Ｎ）ビットのビット・シーケンスに分割し、それぞれのビット・シーケンスをＮ次元整数空間内の点に対応させることにより、平文コード点Ｙ１，Ｙ２，…を生成する。平文コード点Ｙの数は、平文コードＭｅｓの長さにより決まるが、ここでは簡単のために平文コード点Ｙの数を１個として説明する。
【０２３２】
次に、ステップＳ２８において、暗号化装置２ｅの暗号コード生成部２４は、曲線上演算部１６により、次式により暗号コード点Ｖを算出し、この暗号コード点Ｖを暗号コードとする。
【０２３３】
【数３６】
2012177893.tif 000042
ここで、ｆｅ（ＬＫ（Ｙ））はエンコード関数である。関数ｆｅ（ｘ）としては、任意の単射関数を使用することができる。
【０２３４】
次に、ステップＳ２９において、暗号化装置２ｅの暗号コード出力部２５は、暗号コード生成部２４が算出する暗号コード点Ｖを、通信インタフェース７により通信ネットワーク３を介して復号装置２ｄへ送信する。
【０２３５】
次に、ステップＳ８において、復号装置２ｄの暗号コード入力部３３は、暗号化装置２ｅから送信される、暗号コード点Ｖを受信する。
【０２３６】
次に、ステップＳ９において、復号装置２ｄの復号演算部３４は、曲線上演算部１６により、次式により得られる点Ｙを算出する。これにより、もとの平文コード点Ｙが復元される。
【０２３７】
【数３７】
2012177893.tif 000043
ここで、ｆｅ−１（ＬＫ（Ｖ））はエンコード関数ｆｅの逆関数である。
【０２３８】
次に、ステップＳ１０において、復号装置２ｄの復号演算部３４は、平文コード点Ｙに対応する平文コードＭｅｓを算出する。
【０２３９】
最後に、ステップＳ１１において、復号装置２ｄの平文コード出力部９は、平文コードＭｅｓを出力し、復号処理を終了する。
【実施例４】
【０２４０】
本実施例では、空間充填曲線として、実施例１で示したヒルベルト曲線以外のものを使用する例について説明する。空間充填曲線としては、様々なものがあり、本発明においてはどのような種類の空間充填曲線を使用することも可能であるが、ここではわかりやすい例として、ペアノ曲線及びペアノ曲線から発展させたペアノ型曲線を使用する例を挙げて説明する。
【０２４１】
（１）Ｎ次元ペアノ曲線
閉単位区間をＩ＝［０，１］，閉単位正方形をＱ＝［０，１］２とする。区間［０，１］内の点の値のｑ進数表現を０ｑ．ｔｑ,１ｔｑ,２ｔｑ,３…のように表す。例えば、区間［０，１］内の中点を２進数表現で表記する場合０２．１２０２０２０２…、３進数表現で表記する場合０３．１３１３１３１３…、４進数表現で表記する場合０４．２４０４０４０４…のように表す。ｔｑ,１，ｔｑ,２，ｔｑ,３，…は各桁のリテラルを表し０〜（ｑ−１）までの値をとる。
ＩからＱへの写像関数ｆ３（２）を次式により定義する。
【０２４２】
【数３８】
2012177893.tif 000044
【０２４３】
ここで、ｔの添字の１番目は３進数であること、２番目は桁番号を表す。ｓの添字の１番目は３進数であること、２番目は座標軸の番号、３番目は桁番号を表している。また、関数Ｋ３は３進数リテラル反転関数である。一般に、ｑ進数リテラル反転関数Ｋｑは次式により定義される（非特許文献２，ｐ．４０参照）。
【０２４４】
【数３９】
2012177893.tif 000045
また、関数Ｋｑのν回の合成は次のように定義される。
【０２４５】
【数４０】
2012177893.tif 000046
【０２４６】
以下では写像関数ｆ３（２）の式（３８）のような定義式を次式（４１ａ）（４１ｂ）のように簡略表記することとする。ここで、ｎは写像する２次元ベクトルｓの各成分の桁数であり、「分割指数」という。ｎ→∞とすると式（４１ａ）は式（３８）と等価となる。
【０２４７】
【数４１】
2012177893.tif 000047
【０２４８】
ここで、式（４１ｂ）の最初の和の記号は、１以上でｋ−１以下のすべてのｉについての和をとることを表し、２番目の和の記号は、ｊ＝１から２までｊ＝ｍを除き和をとることを表している。
【０２４９】
式（４１ａ）で定義された写像ｆ３（２,n）：［０，１］→［０，１］２によって生成される２次元空間の曲線を２次元ペアノ曲線という（非特許文献２，ｐ．４２参照）。式（４１ａ）のｆ３（２）は区間［０，３２ｎ］の各整数点を２次元空間の正方形［０，３n］2の各整数格子点に写像する写像関数ｆ３（２,n）：［０，３２ｎ］→［０，３n］2と考えることもできる。
【０２５０】
そこで、この写像関数ｆ３（２,n）をＮ次元に拡張し、一般に、Ｎ次元ペアノ曲線を生成する写像関数ｆ３（N,n）を次式（４２ａ）で定義する。写像関数ｆ３（N,n）が単射であること、及び写像ｆ３（N,n）：［０，３Ｎｎ］→［０，３ｎ］Nによって生成されるＮ次元空間曲線が連続空間充填曲線であることは数学的に証明することができる。
【０２５１】
【数４２】
2012177893.tif 000048
【０２５２】
図２２に写像ｆ３（２,n）：［０，３２ｎ］→［０，３ｎ］２によって生成される２次元ペアノ曲線の一例を示す。図２３に写像ｆ３（３,n）：［０，３３ｎ］→［０，３ｎ］３によって生成される３次元ペアノ曲線の一例を示す。
【０２５３】
（２）Ｎ次元ペアノ型曲線
式（４２ａ），（４２ｂ）は、各リテラルが３進数で表現されているが、これを一般のｑ進数にまで拡張した写像関数ｆq（N,n）を次式により定義する。
【０２５４】
【数４３】
2012177893.tif 000049
【０２５５】
式（４３ａ）で定義された写像ｆｑ（N,n）：［０，ｑＮｎ］→［０，ｑｎ］Nによって生成されるＮ次元空間の曲線を「Ｎ次元ｑ進ペアノ型曲線」と呼ぶ。ｑが奇数の場合、Ｎ次元ｑ進ペアノ型曲線は連続空間充填曲線であることが数学的に証明される。ｑが偶数の場合には、Ｎ次元ｑ進ペアノ型曲線は不連続空間充填曲線となる。ｑ＝３の場合がＮ次元ペアノ曲線である。
【０２５６】
図２４は、式（４３ａ），（４３ｂ）による分割指数ｎのＮ次元ｑ進ペアノ型曲線の生成方法を具体的に示したフローチャートである。図２５は、２次元５進ペアノ型曲線、図２６は、２次元７進ペアノ型曲線の例を示す図である。尚、図２４のフローチャートはＰＡＤにより表している。
【０２５７】
（３）ターミナル／インダクション・テーブルによるＮ次元ｑ進ペアノ型曲線の生成
点ｓを起点とする分割指数ｎのＮ次元ｑ進ペアノ型曲線をＣ（ｎ，Ｎ）と記す（ｑは固定値として省略する）。曲線Ｃ（ｎ，Ｎ）は、一辺の長さがｑｎのＮ次元超立方体ＨＣｑ（ｎ，Ｎ）内のｑｎＮ個の整数格子点を充填する曲線である。従って、曲線Ｃ（ｎ，Ｎ）はこれらのｑｎＮ個の整数格子点の点列として、次のように表すことができる。
【０２５８】
【数４４】
2012177893.tif 000050
【０２５９】
ここで、各ｃ（ｎ，Ｎ）（ａ）（ａ＝０，１，…，ｑｎＮ−１）は超立方体ＨＣｑ（ｎ，Ｎ）内の整数格子点の位置ベクトル、ｓは曲線Ｃ（ｎ，Ｎ）の始点の位置ベクトル、ｅは曲線Ｃ（ｎ，Ｎ）の終点の位置ベクトルを表す。ｓは超立方体ＨＣｑ（ｎ，Ｎ）の２Ｎ個の頂点のうちの何れかである。また、ペアノ型曲線の性質により、ｅはｓに対して対角位置の頂点となる。
【０２６０】
今、分割指数ｎの曲線Ｃ（ｎ，Ｎ）［ｓ］が与えられているとする。分割指数（ｎ＋１）の曲線Ｃ（ｎ＋１，Ｎ）［ｓ］は、曲線Ｃ（ｎ，Ｎ）［ｓ］の各整数格子点を分割指数１のＮ次元ｑ進ペアノ型曲線で置き換えることによって生成することができる。従って、曲線Ｃ（ｎ＋１，Ｎ）［ｓ］は次式のように表すことができる。
【０２６１】
【数４５】
2012177893.tif 000051
【０２６２】
ここで、演算子「‖」はリテラル連結演算子である（例えば、０１‖２０１＝０１２０１）。
【０２６３】
それぞれの曲線Ｃ（１，Ｎ）［ｓｋ］（ｋ＝０，１，…，ｑｎＮ−１）の選び方は任意であるが、曲線Ｃ（ｎ＋１，Ｎ）［ｓ］が連続であるという条件を課した場合（この場合、ｑは奇数でなければならない。）には、各曲線Ｃ（１，Ｎ）［ｓｉ］の始点ｓｉと終点ｅｉは一意的に決定される。尚、始点ｓｉと終点ｅｉが同じ曲線Ｃ（１，Ｎ）［ｓｉ］の種類の数（位数）は、Ｎ次元超立方体の１つの頂点から出る辺の数Ｎに等しい。
【０２６４】
今、整数格子点ｃ（ｎ，Ｎ）（ｋ）から整数格子点ｃ（ｎ，Ｎ）（ｋ＋１）へ向かう単位ベクトルをｖｋ＝ｃ（ｎ，Ｎ）（ｋ＋１）−ｃ（ｎ，Ｎ）（ｋ）とする。曲線Ｃ（ｎ＋１，Ｎ）［ｓ］が連続の場合、曲線Ｃ（１，Ｎ）［ｓｋ＋１］の始点ｓｋ＋１は曲線Ｃ（１，Ｎ）［ｓｋ］の終点ｅｋのｖｋ方向の座標成分を超立方体ＨＣｑ（１，Ｎ）内で反転させたものであるので、始点ｓｋ＋１は次式により決定される。
【０２６５】
【数４６】
2012177893.tif 000052
【０２６６】
ここで、関数Ｋｑ［ｖｋ］（ｅ）はベクトルｅのｖｋ方向の成分のリテラルを反転するリテラル反転関数を表す。尚、式（４６）において、ｖｋの成分が負の場合、ｅｋ＋ｖｋの成分が負となる場合があるが、その場合にはｑを加えてｓｋ＋１の各成分は区間［０，ｑ−１］内の値となるように規格化するものとする。
【０２６７】
また、曲線Ｃ（１，Ｎ）［ｓｋ］の終点ｅｋは始点ｓｋの対角頂点なので、終点ｅｋは次式により決定される。
【０２６８】
【数４７】
2012177893.tif 000053
ここで、関数Ｋｑ（ｓ）はベクトルｓのすべての成分のリテラルを反転するリテラル反転関数を表す。
【０２６９】
従って、曲線Ｃ（ｎ＋１，Ｎ）［ｓ］が連続であるという条件を課した場合には、曲線Ｃ（１，Ｎ）［ｓｋ＋１］の始点ｓｋ＋１は次式によって一意的に決定される。
【０２７０】
【数４８】
2012177893.tif 000054
【０２７１】
このように、ペアノ型曲線の場合、始点が決まると終点が一意的に決まるので、生成可能な曲線数はヒルベルト曲線よりも少なく、次式のようになる。
【０２７２】
【数４９】
2012177893.tif 000055
【０２７３】
尚、始点の変更は、式（２３ａ），（２３ｂ）により生成されるＮ次元ｑ進ペアノ型曲線Ｃ（ｎ，Ｎ）［０］の座標軸を置換すれば、容易に行うことができる。また、始点から出る方向ベクトルの変更は、元となるＮ次元ｑ進ペアノ型曲線Ｃ（ｎ，Ｎ）［ｓ］の始点から２番目の格子点への方向ベクトルの軸の座標と、変更したい軸の座標について、ｑ進数リテラル反転をすることにより、容易に行うことができる。
【０２７４】
以上のようなペアノ型曲線の自己相似性を利用することにより、ヒルベルト曲線の場合と同様に、以下のようにターミナル／インダクション・テーブルを用いて分割指数ｎのＮ次元ｑ進ペアノ型曲線を生成することができる。図２７に、Ｎ次元ｑ進ペアノ型曲線Ｃ（ｎ，Ｎ）のターミナル・テーブルの計算アルゴリズム、図２８に、Ｎ次元ｑ進ペアノ型曲線Ｃ（ｎ，Ｎ）のインダクション・テーブルの計算アルゴリズムを示す。図２７，図２８のフローチャートはＰＡＤにより表している。尚、図２７において、原始曲線ｓは、図２４のアルゴリズムにより分割指数１のＮ次元ｑ進ペアノ型曲線を計算することにより求めることができる。
【０２７５】
（例３）
ｑ＝３，Ｎ＝２の場合、ターミナル・テーブル及びインダクション・テーブルは、例えば、（表５），（表６）のようになる。
【０２７６】
【表５】
2012177893.tif 000056
【０２７７】
【表６】
2012177893.tif 000057
【０２７８】
この場合、シード曲線の数は２Ｎ×Ｎ＝８であり、シード曲線テーブルは（表７）のようになる。
【０２７９】
【表７】
2012177893.tif 000058
（例終り）
【０２８０】
（例４）
ｑ＝３，Ｎ＝３の場合、ターミナル・テーブル及びインダクション・テーブルは、例えば、（表８），（表９）のようになる。
【０２８１】
【表８】
2012177893.tif 000059
【０２８２】
【表９】
2012177893.tif 000060
この場合、シード曲線の数は２Ｎ×Ｎ＝２４であり、シード曲線テーブルは（表１０）のようになる。
【０２８３】
【表１０】
2012177893.tif 000061
（例終り）
【０２８４】
ターミナル／インダクション・テーブルを用いた、１次元序数空間内の序数ｉＡと、これをＮ次元ｑ進ペアノ型曲線により写像したＮ次元空間内の点Ａとの間の変換は、実施例１で説明した関数Hil1(γM, M, iA)，Hil1(γM, M, a)と全く同様にして行うことができる。すなわち、ヒルベルト曲線のターミナル／インダクション・テーブルを、Ｎ次元ｑ進ペアノ型曲線のターミナル／インダクション・テーブルに置き換えるだけでよい。尚、この場合、アドレスａ及び序数ｉＡの各リテラルはｑ進数のリテラルであるので、式（１９）は次式（５０）のように書き換えられることになる。
【０２８５】
【数５０】
2012177893.tif 000062
【０２８６】
（４）さらなる一般化
ここまでは、暗号処理に使用する空間充填曲線を連続空間充填曲線に限定して説明してきたが、本発明に係る暗号処理技術で利用する空間充填曲線は、必ずしも連続である必要はない。不連続空間充填曲線を使用する場合にも、上述のシード曲線テーブル及びターミナル／インダクション・テーブルを用いた自己相似曲線の生成手法をそのまま適用することが可能である。なぜならば、上述のターミナル／インダクション・テーブルによる再帰的な曲線生成演算は、ターミナル曲線の始点と終点さえ確定していれば、その中間の格子点の配列が如何なるものであるかは問われないからである。
【０２８７】
例えば、（表１０）のシード曲線テーブルにおいて、各行の曲線について始点（アドレス１）と終点（アドレス２７）以外の中間格子点をランダムに置換することにより、任意の自己相似な空間充填曲線に変更することができる。この場合、シード曲線の全数は、２Ｎに（３Ｎ−２）個の数の置換の数を掛けた値となり、全部で２Ｎ・（３Ｎ−２）！となる。
【０２８８】
なお、シード曲線テーブル又はターミナル・テーブルの曲線を不連続空間充填曲線とする場合には、インダクション・テーブルの生成の際に注意が必要である。例えば、ターミナル・テーブル内のターミナル曲線Ｔｍ（ｔｅｒｍ）が不連続空間充填曲線であったとする（図２７（ａ）参照）。この場合、ターミナル曲線Ｔｍ（ｔｅｒｍ）上には、隣接点間の距離が１より大きい不連続隣接点ペアが必ず２組以上生じる。そこで、このような不連続隣接点ペアを（Ｔｍ，ｉ（ｔｅｒｍ），Ｔｍ，ｉ＋１（ｔｅｒｍ））とする。点Ｔｍ，ｉ（ｔｅｒｍ）と点Ｔｍ，ｉ＋１（ｔｅｒｍ）はＮ次元整数空間では隣接していないため、不連続点Ｔｍ，ｉ＋１（ｔｅｒｍ）を置き換えるターミナル曲線Ｔｍ，ｉ＋１（ｉｎｄ）（図２８参照）の始点の位置は、予め決められた何らかの始点決定規則なくしては、一意的には決定できないことに注意する必要がある（なお、ペアノ型曲線では、不連続点Ｔｍ，ｉ（ｔｅｒｍ）を置き換えるターミナル曲線Ｔｍ，ｉ（ｉｎｄ）（図２８参照）の終点の位置は始点から一意的に決定されるが、ヒルベルト曲線の場合には、ターミナル曲線Ｔｍ，ｉ（ｉｎｄ）の終点の位置も一意的には決定できないことになる）。
【０２８９】
そこで、例えば、図２８のようなインダクション・テーブル生成のアルゴリズムを使用する場合には、図２８のステップＳ９０における「ｖ←Ｔｍ，ｉ＋１（ｔｅｒｍ）−Ｔｍ，ｉ（ｔｅｒｍ）」の計算を「ｖ←（Ｔｍ，ｉ＋１（ｔｅｒｍ）−Ｔｍ，ｉ（ｔｅｒｍ））  ｍｏｄ  ２（但し、ｍｏｄ演算はベクトルの各成分に対して行う）」に変更し、ステップＳ９１の後に「if ｓｊ＝ｑ−１ thenｓｊ←ｑ」（Ｓ９１−１）及び「if ｓｊ＝１ thenｓｊ←０」（Ｓ９１−２）の条件演算式を追加すればよい。「ｍｏｄ  ２」演算により、方向ベクトルｖの各成分ｖｊは０，１，−１のいずれかとなるため、ステップＳ９１〜Ｓ９２の演算により、不連続隣接点ペア（Ｔｍ，ｉ（ｔｅｒｍ），Ｔｍ，ｉ＋１（ｔｅｒｍ））が生じた場合でも、不連続点Ｔｍ，ｉ＋１（ｔｅｒｍ）を置き換えるターミナル曲線Ｔｍ，ｉ＋１（ｉｎｄ）の始点は一意的に決定され、このような始点不確定の問題は回避される。
【実施例５】
【０２９０】
実施例５及び実施例６では、本発明に係る暗号処理技術を共通鍵暗号方式に適用した例について説明する。本実施例５では、共通鍵暗号方式として、ＤＥＳ（Data Encryption Standard）アルゴリズム（非特許文献３参照）に本発明を適用した例を説明する。
【０２９１】
〔１〕通常のＤＥＳ方式による暗号化アルゴリズム
（１）ＤＥＳ暗号化アルゴリズム
最初に、標準的な暗号化方式として広く使用されているＤＥＳ方式の暗号化アルゴリズムについて簡単に説明する（非特許文献３参照）。ＤＥＳ方式では、２進数数字｛０，１｝の列からなるブロック長６４ビットの平文ｐ∈｛０，１｝６４が、ブロック長６４ビットの暗号文ｃ∈｛０，１｝６４に暗号化される。ＤＥＳ方式は、Feistel暗号を改良したものとなっている。
【０２９２】
図２９は、ＤＥＳ方式による暗号化アルゴリズムの流れを示すブロック図である。図２９において、平文ｐ及び暗号文ｃはブロック長６４ビットの２進数字列｛０，１｝６４、鍵Ｋはブロック長６４ビットの２進数字列｛０，１｝６４である。図中において矢印に付された数値は、各矢印に沿って送られる数字ブロックのブロック長（ビット数）を表している。また、矩形ボックスは数値ブロック、グレーで塗られた帯直円形ボックスは関数を表している。ＤＥＳ方式による暗号化アルゴリズムは、大きく分けて、初期置換、Feistel構造による暗号化、最終置換の３段階から構成される。各段階の概略は、以下の通りである。
【０２９３】
（１．１）初期置換
最初の段階として、平文ｐに対して初期置換ＩＰを行う。初期置換ＩＰは固定されており、次式で表される６４ビットのビット置換である。ここで、次式の置換関数ＩＰ（ｐ）の演算式の表記法は、平文ｐを２進数表記したときのリテラルをｐ＝ｐ１ｐ２ｐ３．．．ｐ６３ｐ６４とすると、ＩＰ（ｐ）＝ｐ５８ｐ５０ｐ４２．．．ｐ１５ｐ７に置換されることを意味している。
【０２９４】
【数５１】
2012177893.tif 000063
【０２９５】
（１．２）Feistel構造
次に、ＩＰ（ｐ）をブロック長３２ビットの２つのブロックＬ０，Ｒ０に分割する。すなわち、次式で表されるようなブロックＬ０，Ｒ０に分割する。演算子「‖」はリテラル連結演算子である。
【０２９６】
【数５２】
2012177893.tif 000064
【０２９７】
次いで、ブロックＬ０，Ｒ０を、１６巡回のFeistel構造の暗号方式により暗号化し、暗号化ブロックＬ１６，Ｒ１６を生成する。この暗号化は、次のようにして反復実行される（図２９参照）。
【０２９８】
【数５３】
2012177893.tif 000065
【０２９９】
ここで、Ｋｊ（ｊ＝０，１，２，…，１５）は鍵Ｋから生成される巡回鍵、関数Ｆ（Ｒｊ，Ｋｊ）は内部ブロック暗号の暗号化関数である。これらは後述する。
【０３００】
（１．３）最終置換
最後に、ブロック長３２ビットの暗号化ブロックＬ１６，Ｒ１６を連結してブロック長６４ビットの数字列Ｌ１６‖Ｒ１６とし、この数字列Ｌ１６‖Ｒ１６に対して最終置換ＩＰ−１を行うことにより暗号文ｃ∈｛０，１｝６４を生成する。
【０３０１】
【数５４】
2012177893.tif 000066
【０３０２】
最終置換ＩＰ−１（ｘ）は、次式により表され、置換ＩＰの逆置換である。ここで、変数ｘを２進数表記したときのリテラルをｘ＝ｘ１ｘ２ｘ３．．．ｘ６３ｘ６４とすると、ＩＰ−１（ｘ）＝ｘ４０ｘ８ｘ４８．．．ｘ５７ｘ２５となる。
【０３０３】
【数５５】
2012177893.tif 000067
【０３０４】
（２）内部ブロック暗号Ｆ
図２９の各内部ブロック暗号Ｆは、図３０に示すアルゴリズムにより表される。図３０において、変数Ｒｉ及び巡回鍵Ｋｉ（ｉ＝０，１，…，１５）は、図２９の変数Ｒｉ及び巡回鍵Ｋｉにそれぞれ相当する。また、図中において矢印に付された数値は、各矢印に沿って送られる数字ブロックのブロック長（ビット数）を表している。変数Ｒｉはブロック長３２のビット列であり、巡回鍵Ｋｉはブロック長４８のビット列である。
【０３０５】
（２．１）  まず、拡大関数Ｅ：｛０，１｝３２→｛０，１｝４８により、ブロック長３２の変数Ｒｉ∈｛０，１｝３２をブロック長４８の変数Ｒ（Ｒｉ）∈｛０，１｝４８に拡大する。拡大関数Ｅは、次式により表されるビット写像関数である。ここで、次式の写像関数Ｅ（Ｒｉ）の演算式の表記法は、変数Ｒｉを２進数表記したときのリテラルをＲｉ＝Ｒｉ,１Ｒｉ,２Ｒｉ,３．．．Ｒｉ,31Ｒｉ,32とすると、Ｅ（Ｒｉ）＝Ｒｉ,32Ｒｉ,1Ｒｉ,2．．．Ｒｉ,32Ｒｉ,1に各ビットが写像されることを意味している。
【０３０６】
【数５６】
2012177893.tif 000068
【０３０７】
（２．２）  次に、ブロック長４８ビットの変数Ｅ（Ｒｉ）とブロック長４８ビットの巡回鍵Ｋｉとの（ビット毎の）排他的論理和を計算することにより、ブロック長４８ビットの変数Ｂを生成する。
【０３０８】
【数５７】
2012177893.tif 000069
【０３０９】
（２．３）  変数Ｂをブロック長６ビットの８個のブロックＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６，Ｂ７，Ｂ８に分割する。
【０３１０】
【数５８】
2012177893.tif 000070
【０３１１】
（２．４）  ブロック長６ビットの各ブロックＢｊ（ｊ＝１，２，…，８）を、それぞれ、Ｓボックスと呼ばれる関数Ｓｊ：｛０，１｝６→｛０，１｝４（ｊ＝１，２，…，８）により、ブロック長４ビットの変数Ｃｊ（ｊ＝１，２，…，８）に変換する。ここで、各Ｓボックスは、次のような４行１６列の次式で表される非線形写像関数である。なお、下記の各ＳボックスＳｊの各成分は１０進数で表示している。
【０３１２】
【数５９】
2012177893.tif 000071
【０３１３】
上記Ｓボックスによる演算は次のように行われる。上式のＳボックスＳｊのα行β列の成分をＳｊ［α，β］と記す。変数Ｂｊ（ｊ＝１，２，…，８）の２進数表記したリテラルをＢｊ＝ｂｊ，１ｂｊ，２ｂｊ，３ｂｊ，４ｂｊ，５ｂｊ，６と記す。ｂｊ，ｋ∈｛０，１｝（ｋ＝１，２，…，６）である。これらのリテラルを用いて行指数ξｊ＝ｂｊ，１ｂｊ，６及び列指数ηｊ＝ｂｊ，２ｂｊ，３ｂｊ，４ｂｊ，５を構成し、次式によって変数Ｃｊを算出する。なお、変数Ｃｊは、上式のＳボックスＳｊの成分Ｓｊ［ξｊ，ηｊ］を４ビットの２進数で表記したものである。
【０３１４】
【数６０】
2012177893.tif 000072
【０３１５】
（２．５）  ８個の変数Ｃｊ（ｊ＝１，２，…，８）を連結し、ブロック長３２ビットの変数Ｃを生成する。
【０３１６】
【数６１】
2012177893.tif 000073
【０３１７】
（２．６）  最後に、変数Ｃの各ビットの順序を次式の置換関数Ｐによりビット置換し、暗号化した変数Ｆ（Ｒｉ，Ｋｉ）＝Ｐ（Ｃ）を算出する。ここで、変数Ｃを２進数表記したときのリテラルをＣ＝ｃ１ｃ２ｃ３．．．ｃ３１ｃ３２とすると、Ｐ（Ｃ）＝ｃ１６ｃ７ｃ１０．．．ｃ４ｃ２５となる。
【０３１８】
【数６２】
2012177893.tif 000074
【０３１９】
（３）巡回鍵Ｋｉの生成
図２９の各巡回鍵Ｋｉ（ｉ＝０，１，…，１５）は、鍵Ｋに基づいて、図３１のアルゴリズムによって生成される。図３１において、ＲＫ０〜ＲＫ１５の部分は、図２９の同符号を付した関数ボックスの部分に相当する。図３１において、関数ボックスＬＳは、左巡回シフト関数を表している。
【０３２０】
（３．１）  まず、ブロック長６４ビットの鍵Ｋ∈｛０，１｝６４に対して、次式のようなビット写像関数ＰＣ１：｛０，１｝６４→｛０，１｝２８×｛０，１｝２８により、ブロック長２８ビットの２つの変数（Ｃ０，Ｄ０）＝ＰＣ１（Ｋ）を生成する。
【０３２１】
【数６３】
2012177893.tif 000075
【０３２２】
（３．２）  得られた変数（Ｃ０，Ｄ０）を連結し、ブロック長５６ビットの変数Ｃ０‖Ｄ０に対して、次式のようなビット写像関数ＰＣ２により、ブロック長４８ビットの巡回鍵Ｋ０＝ＰＣ２（Ｃ０‖Ｄ０）を生成する。
【０３２３】
【数６４】
2012177893.tif 000076
【０３２４】
（３．３）  次に、以下の（３．３．１）〜（３．３．３）の処理を１５巡反復して繰り返すことにより、鍵Ｋｉ（ｉ＝１，２，…，１５）を順次生成する。
【０３２５】
（３．３．１）  変数Ｃｉ−１（ｉ＝１，２，…，１５）に対し、左巡回シフトを施すことにより、変数Ｃｉを生成する。ここで、シフト量は、ｉ∈｛１，２，９，１６｝のときは１、それ以外のときは２とする。
【０３２６】
【数６５】
2012177893.tif 000077
【０３２７】
（３．３．２）  同様に、変数Ｄｉ−１（ｉ＝１，２，…，１５）に対し、左巡回シフトを施すことにより、変数Ｄｉ＝ＬＳ（Ｄｉ−１）を生成する。ここで、シフト量は、ｉ∈｛１，２，９，１６｝のときは１、それ以外のときは２とする。
【０３２８】
（３．３．３）  得られた変数（Ｃｉ，Ｄｉ）を連結し、ブロック長５６ビットの変数Ｃｉ‖Ｄｉに対して、上述のビット写像関数ＰＣ２により、ブロック長４８ビットの巡回鍵Ｋｉ＝ＰＣ２（Ｃｉ，Ｄｉ）を生成する。
【０３２９】
（４）ＤＥＳ復号アルゴリズム
ＤＥＳ暗号の復号は、巡回鍵Ｋ０〜Ｋ１５を逆方向の順序で使用すればよい。図３２にＤＥＳ暗号の復号アルゴリズムを示す。
【０３３０】
〔２〕本発明を適用した改良ＤＥＳ方式による暗号化アルゴリズム
（１）改良ＤＥＳ暗号化アルゴリズム
次に、上述のＤＥＳ暗号化方式に本発明を適用した実施例５の暗号化方式について説明する。図３３はＤＥＳ暗号化方式に本発明を適用した暗号化方式のアルゴリズムの流れを示すブロック図である。本実施例に係る暗号化方式においては、上述のＤＥＳ方式のFeistel構造の格段において、内部ブロック暗号Ｆにより変数Ｒｉ（ｉ＝０，１，…，１５）を変換した後、生成された変数Ｆ（Ｒｉ，Ｋｉ）を、鍵曲線ＨＫを用いて暗号化を行う内部ブロック暗号Ｇによりさらに変換した後に、Ｇ（Ｆ（Ｒｉ），ＨＫ）と変数Ｌｉとの排他的論理和をとることにより次段の変数Ｒｉ＋１又はＬ１６を生成する。すなわち、式（５３ａ），（５３ｂ）が、それぞれ次式（６６ａ），（６６ｂ）に置き換えられる。それ以外は、上述したＤＥＳ方式と同様である。
【０３３１】
【数６６】
2012177893.tif 000078
【０３３２】
（内部ブロック暗号Ｇ）
ここで、新たに追加した内部ブロック暗号Ｇにおいて、本発明に係る空間充填曲線を使用した暗号化方法が使用される。以下、内部ブロック暗号Ｇにおける演算方法について具体的に説明する。
【０３３３】
まず、内部ブロック暗号関数Ｇに入力される変数Ｆ（Ｒｉ，Ｋｉ）をＹとおく。Ｙ∈｛０，１｝３２である。最初に、変数Ｙをブロック長ＭビットのＮ個のブロックＹ１，…，ＹＮに等分割する。Ｎは３２の約数２，４，８，１６の何れかを選択可能であるが、ここではＮ＝８とするのが適当である。そして、分割した各ブロックを成分とするＮ次元のベクトルＹを生成する。
【０３３４】
次に、鍵曲線ＨＫによりＮ次元ベクトルＹを１次元序数空間内の序数ｉＹに写像する関数ＬＫ（Ｙ）により、ベクトルＹから序数ｉＹを算出する。ここで、序数ｉＹは３２ビットのスカラー変数である。関数ＬＫ（Ｙ）は、ベクトルＹを、鍵曲線ＨＫにより生成される、一辺の長さがＭ（＝４）のＮ次元超立方体を充填する空間充填曲線Ｃ（Ｍ，Ｎ）におけるベクトルＹに対応する点の序数ｉＹに写像する関数である。関数ＬＫ（Ｙ）としては、例えば、実施例１で説明したようなヒルベルト曲線を用いた写像関数を用いることができる。また、ヒルベルト曲線の代わりに、実施例４で説明したペアノ型曲線やその他の空間充填曲線を使用した写像関数を用いることもできる。
【０３３５】
次いで、序数ｉＹをスカラー関数であるエンコード関数ｆｅにより変換した後、ｆｅ（ｉＹ）を、関数ＬＫの逆関数ＬＫ−１により変換し、Ｎ次元ベクトルＶ＝（Ｖ１，…，ＶＮ）を生成する。そして、ベクトルＶの各成分Ｖ１，…，ＶＮを連結してこれをＧ（Ｙ，ＨＫ）とする。即ち、次式（６７ａ）〜（６７ｄ）の演算によってＧ（Ｙ，ＨＫ）は計算される。
【０３３６】
【数６７】
2012177893.tif 000079
尚、エンコード関数ｆｅとしては、例えば、実施例１で説明したような関数を使用することができる。
【０３３７】
（２）改良ＤＥＳ復号アルゴリズム
図３４はＤＥＳ暗号化方式に本発明を適用した復号方式のアルゴリズムの流れを示すブロック図である。復号についても、同様に、上述のＤＥＳ方式のFeistel構造の格段において、内部ブロック暗号Ｆにより変数Ｒｉ（ｉ＝１６，１５，…，１）を変換した後、生成された変数Ｆ（Ｒｉ，Ｋｉ）を、鍵ＨＫを用いて暗号化を行う内部ブロック暗号Ｇによりさらに変換した後に、Ｇ（Ｆ（Ｒｉ），ＨＫ）と変数Ｌｉとの排他的論理和をとることにより次段の変数Ｒｉ−１又はＬ０を生成する。すなわち、次式のようになる。
【０３３８】
【数６８】
2012177893.tif 000080
【０３３９】
〔３〕実施例５に係る暗号化装置及び復号装置
図３６は、実施例５に係る暗号処理装置の構成を表すブロック図である。尚、図３３，図３４から分かるように、本実施例の暗号化方式と復号方式のアルゴリズムは対照的な構造をしているため、暗号化装置及び復号装置は図３５のように同じ構成となる。
【０３４０】
実施例５に係る暗号処理装置２は、データ入力部４１、処理データ記憶部４２、巡回鍵記憶部４３、鍵曲線記憶部４４、左ブロック記憶部４５、右ブロック記憶部４６、初期置換部４７、巡回鍵生成部４８、内部ブロック関数Ｆ演算部４９、内部ブロック関数Ｇ演算部５０、ＥＸＯＲ演算部５１、ブロック交換部５２、最終置換部５３、及びデータ出力部５４を備えている。尚、暗号処理装置２は、ハードウェア的に暗号化通信の専用装置として構成することも可能であるが、パーソナル・コンピュータ等の汎用のコンピュータにプログラムをロードして実行することによりソフトウェア的に暗号処理装置２を実現するようにしてもよい。
【０３４１】
データ入力部４１は、暗号化を行う平文ｐ、復号を行う暗号文ｃ、ＤＥＳ暗号で使用するＤＥＳ暗号鍵Ｋ，Ｋ’、本発明に係る暗号方式で使用する曲線鍵ＨＫを入力する部分である。先に説明した通り、平文ｐ及び暗号文ｃは二進数数字｛０，１｝からなるブロック長６４ビットの数字ブロックである。ＤＥＳ暗号鍵Ｋ，Ｋ’は二進数数字｛０，１｝からなるブロック長６４ビットの数字ブロックである。曲線鍵ＨＫは二進数数字｛０，１｝からなるブロック長３２ビットの数字ブロックである。
【０３４２】
処理データ記憶部４２は、データ入力部４１から入力された平文ｐ又は暗号文ｃを記憶する。巡回鍵記憶部４３は、データ入力部４１から入力されたＤＥＳ暗号鍵Ｋ，Ｋ’を記憶する。鍵曲線記憶部４４は、データ入力部４１から入力された曲線鍵ＨＫを記憶する。また、左ブロック記憶部４５及び右ブロック記憶部４６は、先に説明したFeistel構造の格段で使用するブロック長３２ビットの２つのブロックＬｉ，Ｒｉ（ｉ＝０，１，…，１６）を記憶する。
【０３４３】
初期置換部４７は、図３３，図３４における初期置換ＩＰの演算を行うモジュールである。巡回鍵生成部４８は、図３３，図３４における関数ボックスＲＫ０〜ＲＫ１５の部分の演算（即ち、ＤＥＳ暗号鍵Ｋ，Ｋ’に基づき巡回鍵Ｋ０〜Ｋ１５を生成する演算）を行うモジュールである。
【０３４４】
内部ブロック関数Ｆ演算部４９は、図３３，図３４における内部ブロック関数Ｆの演算を行うモジュールである。内部ブロック関数Ｆ（Ｒｉ，Ｋｊ）（ｉ＝０，１，…，１５）の演算については、上記〔１〕（２）において説明した通りである。尚、暗号化の際には、図３３のようにｉ＝０，１，…，１５に対してそれぞれｊ＝０，１，…，１５となり、復号の際には図３４のようにｉ＝０，１，…，１５に対してそれぞれｊ＝１５，１４，…，０となる。
【０３４５】
内部ブロック関数Ｇ演算部５０は、図３３，図３４における内部ブロック関数Ｇの演算を行うモジュールである。内部ブロック関数Ｇの演算については、上記〔２〕（１），（２）において説明した通りである。
【０３４６】
ＥＸＯＲ演算部５１は、図３３，図３４におけるＥＸＯＲブロックに相当し、式（６６ａ），（６６ｂ）及び式（６８ｂ），（６８ｃ）に示したように、左ブロック記憶部４５に記憶された数字ブロックＬｉと、内部ブロック関数Ｇ演算部５０が出力する数字ブロックＺ＝Ｇ（Ｆ（Ｒｉ，Ｋｊ），ＨＫ）との排他的論理和の演算を行うモジュールである。
【０３４７】
ブロック交換部５２は、図３３，図３４又は式（６６ａ），（６６ｂ）及び式（６８ｂ），（６８ｃ）に示したように、ｉ＝０，１，…，１４の場合には右ブロック記憶部４６に記憶された数字ブロックＲｉを左ブロック記憶部４５に格納するとともに、ＥＸＯＲ演算部５１が出力する排他的論理和を右ブロック記憶部４６に格納する。ｉ＝１５の場合には、数字ブロックＲｉの移動は行わず、ＥＸＯＲ演算部５１が出力する排他的論理和を左ブロック記憶部４５に格納する。
【０３４８】
最終置換部５３は、図３３，図３４における最終置換ＩＰ−１の演算を行うモジュールである。
【０３４９】
データ出力部５４は、最終置換部５３の演算結果を、暗号化文ｃ又は平文ｐとして出力する。
【０３５０】
これら各部の処理動作については、図３３，図３４のアルゴリズムで説明した通りであり、重複するため省略する。
【０３５１】
図３６は、図３５における内部ブロック関数Ｇ演算部５０の構成を表すブロック図である。内部ブロック関数Ｇ演算部５０は、共通モジュール４、共通鍵入力部２１’、暗号化倍数生成部２２、平文コード点生成部２３、暗号コード生成部２４、及び暗号コード出力部２５を備えている。共通モジュール４、暗号化倍数生成部２２、平文コード点生成部２３、暗号コード生成部２４、及び暗号コード出力部２５については、実施例１の図２において同符号を付した構成部分と同様のものであり、説明は省略する。
【０３５２】
共通鍵入力部２１’は、鍵曲線記憶部４４に記憶された曲線鍵ＨＫを読み出して暗号コード生成部２４へ入力するモジュールである。
【０３５３】
内部ブロック関数Ｆ演算部４９が生成するブロック長３２ビットの数字ブロックＹ＝Ｆ（Ｒｉ，Ｋｊ）は平文コード点生成部２３へ入力される。平文コード点生成部２３は、数字ブロックＹを式（６７ａ）のように、ブロック長４ビットの数字ブロックＹ１，Ｙ２，…，Ｙ８に等分割し、式（６７ｂ）のように各数字ブロックＹ１，Ｙ２，…，Ｙ８を成分とする８次元ベクトルＹを生成する。これが、実施例１で説明した平文コード点に相当する。
【０３５４】
暗号コード生成部２４は、ベクトルＹと曲線鍵ＨＫに基づいて、式（６７ｃ）により暗号化点の８次元ベクトルＶ＝（Ｖ１，Ｖ２，…，Ｖ８）を算出し、ベクトルＶの各成分を式（６７ｄ）により連結してＺ＝Ｇ（Ｙ，ＨＫ）を算出する。暗号コード生成部２４における具体的な演算処理は、実施例１で説明した通りである。
【０３５５】
暗号コード出力部２５は、暗号コード生成部２４が算出した数字ブロックＺ＝Ｇ（Ｙ，ＨＫ）をＥＸＯＲ演算部５１へ出力する。
【０３５６】
ＤＥＳ方式においては、Ｓボックス演算が唯一の非線形な部分であり、このＳボックスの非線形性が暗号の安全性を向上させている。本発明に係る空間充填曲線を利用した暗号方式も非線形写像が利用されているため、本発明に係る空間充填曲線を利用した暗号方式を、共通鍵暗号であるＤＥＳ暗号方式のFeistel構造の格段に適用することによって、暗号の安全性をさらに向上させることができる。
【０３５７】
なお、本実施例では、ＤＥＳ暗号のFeistel構造（図３３，図３４）におけるＦ関数の後に、本発明の空間充填曲線暗号化演算を行うＧ関数を追加した構成としたが、Ｆ関数の代わりにＧ関数を使用する構成とすることもできる。この場合、図３３，図３４におけるＦ関数を除けばよい。空間充填曲線暗号化演算は非線形演算であるため、Ｆ関数の代わりにＧ関数を使用する構成としても、暗号の安全性は十分に確保される。
【実施例６】
【０３５８】
本実施例６では、共通鍵暗号方式として、ＡＥＳ（Advanced Encryption Standard）アルゴリズム（非特許文献４参照）に本発明を適用した例について説明する。
【０３５９】
〔１〕通常のＡＥＳ方式による暗号化アルゴリズム
（１）暗号化アルゴリズム
最初に、標準的な暗号化方式として広く使用されているＡＥＳ方式の暗号化アルゴリズムについて簡単に説明する（非特許文献４参照）。ＡＥＳ方式では、２進数数字｛０，１｝の列からなるブロック長１２８ビットの平文ｐ∈｛０，１｝１２８が、ブロック長１２８ビットの暗号文ｃ∈｛０，１｝１２８に暗号化される。共通鍵Ｋとしては、鍵長ＮＫが１２８ビット，１９２ビット，２５６ビットのものの何れかを選択することができる。鍵長ＮＫに応じて、内部ブロック暗号（ラウンド関数）の繰り返し実行回数であるラウンド数Ｎｒが決められており、鍵長ＮＫが１２８ビット，１９２ビット，２５６ビットに対し、ラウンド数Ｎｒがそれぞれ１０，１２，１８となる。
【０３６０】
（１．１）全体の流れ
図３７は、ＡＥＳ方式による暗号化アルゴリズムの流れを示すブロック図である。図３７において、平文ｐ及び暗号文ｃはブロック長１２８ビットの２進数字列｛０，１｝１２８、鍵Ｋはブロック長ＮＫビットの２進数字列｛０，１｝ＮＫである。図中において矢印に付された数値は、各矢印に沿って送られる数字ブロックのブロック長（ビット数又はバイト数）を表している。また、矩形ボックスは数値ブロック、グレーで塗られた帯直円形ボックスは関数を表している。ＡＥＳ方式による暗号化アルゴリズムは、大きく分けて、初期処理、ラウンド処理の２段階から構成される。各段階の概略は、以下の通りである。
【０３６１】
（１．２）初期処理
最初の段階として、ブロック長１２８ビットの平文ｐを、次式のように、１６個の１バイト数字列ｐｉ，ｊ（ｉ，ｊ＝０，１，２，３）に分割し、各数字列ｐｉ，ｊを成分とする４行４列の状態配列Ｐを構成する。ＡＥＳ方式では、このような４行４列の状態配列が処理単位となる。
【０３６２】
【数６９】
2012177893.tif 000081
【０３６３】
上記状態配列Ｐと４×４バイトの巡回鍵配列ＲＫ０とのビット毎の排他的論理和をとることにより、次式のように初期の状態配列Ｂ０を算出する。なお、巡回鍵配列ＲＫｒ（ｒ＝０，１，…，Ｎｒ）は、共通鍵Ｋに基づき鍵拡張関数により算出される。鍵拡張関数の詳細については、本発明とは直接関係ないため説明は省略する。
【０３６４】
【数７０】
2012177893.tif 000082
【０３６５】
（１．３）ラウンド処理
次に、図３７のラウンド処理における各ラウンド関数ＲＦｒ（ｒ＝１，２，…，Ｎｒ）について説明する。図３８は、図３７の各ラウンド関数ＲＦｒにおける暗号処理アルゴリズムを表すブロック図である。各ラウンドｒ（ｒ＝１，２，…，Ｎｒ）においては、ラウンド関数ＲＦｒには４×４バイトの状態配列Ｂｒ−１が入力される。ラウンド関数ＲＦｒ（１≦ｒ≦Ｎｒ−１）では、状態配列Ｂｒ−１に対して、（ａ）バイト置換（BubByte），（ｂ）行シフト（ShiftRows），（ｃ）列内ミックス（MixColumns），（ｄ）巡回鍵加算（AddRoundKey）の４つの操作が順次実行される（図３８（ａ））。最後のラウンド関数ＲＦＮｒでは、（ａ），（ｂ），（ｄ）の処理のみが実行される（図３８（ｂ））。以下、（ａ）〜（ｄ）の各処理について簡単に説明する。
【０３６６】
（１．３．１）バイト置換（SubByte）
図３８（ａ），（ｂ）のSubByte関数は、状態配列Ｂｒ−１の各成分に対して、Ｓボックス置換により非線形変換を行い状態配列Ｍ１を生成する。生成される状態配列Ｍ１の各成分をｍ１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３）と記す。このＳボックス置換は次のようにして行われる。
【０３６７】
まず、入力される１バイト（８ビット）の数字ｂ∈｛０，１｝８（ｂ＝ｂｒ−１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３））を、Ｐ（Ｘ）＝Ｘ８＋Ｘ４＋Ｘ３＋Ｘ＋１を法多項式とする拡大体ＧＦ（２８）の元とみなして、その逆元ｘを算出する。次に、逆元ｘ∈｛０，１｝８を体ＧＦ（２）上の８次元ベクトルｘ＝（ｘ０，ｘ１，ｘ２，ｘ３，ｘ４，ｘ５，ｘ６，ｘ７）と考えて、次式（７１ｂ）により体ＧＦ（２）上の８次元ベクトルｙ＝（ｙ０，ｙ１，ｙ２，ｙ３，ｙ４，ｙ５，ｙ６，ｙ７）を算出し、ベクトルｙの各成分を連結して得られる８ビットのｙ＝ｙ０ｙ１ｙ２ｙ３ｙ４ｙ５ｙ６ｙ７をＳボックス置換の出力とする。
【０３６８】
【数７１】
2012177893.tif 000083
【０３６９】
実際に実装する場合には、上記式（７１ａ），（７１ｂ）を予め計算して求められる、次表のようなルックアップ・テーブルを使用する。
【０３７０】
【表１１】
2012177893.tif 000084
【０３７１】
表１１のｉ行ｊ列（ｉ，ｊ＝０，１，…，１５）の要素をＳ［ｉ，ｊ］と記す。表１１において各要素の数値は１６進数で表記されている。入力数字ｂ（ｂ＝ｂｒ−１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３））を２進数で表記したときのリテラルをｂ＝ｂ０ｂ１ｂ２ｂ３ｂ４ｂ５ｂ６ｂ７とし、行指数をξ＝ｂ０ｂ１ｂ２ｂ３、列指数をη＝ｂ４ｂ５ｂ６ｂ７を構成し、ｍ＝Ｓ［ξ，η］により出力変数ｍ（ｍ＝ｍ１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３））を算出する。尚、出力変数ｍは、表要素Ｓ［ξ，η］を２進数で表記した数字列である。こうして求められた各変数ｍ１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３）を（ｉ，ｊ）成分とする４×４配列を状態配列Ｍ１とする。
【０３７２】
（１．３．２）行シフト（ShiftRows）
図３８（ａ），（ｂ）のShiftRows関数は、上記状態配列Ｍ１の各行に対して左巡回シフトを行う関数である。状態配列Ｍ１をShiftRows関数により変換して得られる状態配列をＭ２、状態配列Ｍ２の各（ｉ，ｊ）成分をｍ２（ｉ，ｊ）と記す。ShiftRows関数は、状態配列Ｍ１の２行目は左へ１、３行目は左へ２、４行目は左へ３だけ巡回シフトする。すなわち、ShiftRows関数をＬＳＲと記すと、ShiftRows関数は次式で表される。
【０３７３】
【数７２】
2012177893.tif 000085
【０３７４】
（１．３．３）列内ミックス（MixColumns）
図３８（ａ）のMixColumns関数は、上記状態行列Ｍ２の各列に対して成分混合を行う。MixColumn関数をＭＸＣと記す。状態配列Ｍ２をMixColumns関数により変換して得られる状態配列をＭ３と記す。MixColumns関数は、状態配列Ｍ２の４つの列に対して、それぞれ、次のような操作を行う関数である。
【０３７５】
状態配列Ｍ２の第ｊ列の成分を（ｍ２（０，ｊ），ｍ２（１，ｊ），ｍ２（２，ｊ），ｍ２（３，ｊ））（ｍ２（ｉ，ｊ）∈｛０，１｝８）とする。この４つの要素のそれぞれをＧＦ（２８）の元とみなす。また、要素（ｍ２（０，ｊ），ｍ２（１，ｊ），ｍ２（２，ｊ），ｍ２（３，ｊ））を係数とする３次多項式をＭ２（Ｘ）とし、３次多項式Ｍ３（Ｘ）を次式により算出する。
【０３７６】
【数７３】
2012177893.tif 000086
【０３７７】
このようにして計算される３次多項式Ｍ３（Ｘ）の各係数（ｍ３（０，ｊ），ｍ３（１，ｊ），ｍ３（２，ｊ），ｍ３（３，ｊ））を、新たな状態配列Ｍ３の第ｊ列の４つの成分とする。実際に実装する場合には、MixColumns関数ＭＸＣは、上記計算と等価な次式の計算により算出される。
【０３７８】
【数７４】
2012177893.tif 000087
【０３７９】
（１．３．４）巡回鍵加算（AddRoundKey）
図３８（ａ），（ｂ）のAddRoundKey関数は、入力される状態配列Ｍ３（ｒ＝Ｎｒのときは状態配列Ｍ２）と巡回鍵配列ＲＫｒとの排他的論理和をとり、次段の状態配列Ｂｒを生成する。配列Ｂｒ，ＲＫｒの各要素をｂｒ（ｉ，ｊ），ｋｒ（ｉ，ｊ）∈｛０，１｝８（ｉ，ｊ＝０，１，２，３）と記す。状態配列Ｂｒは次式により算出される。
【０３８０】
【数７５】
2012177893.tif 000088
【０３８１】
（２）復号アルゴリズム
図３９は、ＡＥＳ方式による復号アルゴリズムの流れを示すブロック図である。図４０は、図３９の各ラウンド関数ＲＦｒ−１における暗号処理アルゴリズムを表すブロック図である。
【０３８２】
復号は、暗号化処理の逆を行えばよい。図３９において、関数ＲＦｒ−１は、図３７，図３８のラウンド関数ＲＦｒの逆関数であり、図４０のようなアルゴリズムで表される。図４０において、InvMixColumns関数、InvShiftRows関数、InvSubByte関数は、それぞれ、図３８のMixColumns関数、ShiftRows関数、SubByte関数の逆関数である。尚、InvSubByte関数では、Ｓボックス置換の逆置換を実行するが、次表のようなルックアップ・テーブルが使用される。
【０３８３】
【表１２】
2012177893.tif 000089
【０３８４】
表１２において、ｉ行ｊ列の表要素をＳ−１［ｉ，ｊ］と記す。表１２の各要素は１６進数で表記されている。入力数字ｍ（ｍ＝ｍ１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３））を２進数で表記したときのリテラルをｍ＝ｍ０ｍ１ｍ２ｍ３ｍ４ｍ５ｍ６ｍ７とし、行指数をΞ＝ｍ０ｍ１ｍ２ｍ３、列指数をＺ＝ｍ４ｍ５ｍ６ｍ７を構成し、ｂ＝Ｓ［Ξ，Ｚ］により出力変数ｂ（ｂ＝ｂｒ−１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３））を算出する。尚、出力変数ｂは、表要素Ｓ［Ξ，Ｚ］を２進数で表記した数字列である。こうして求められた各変数ｂｒ−１（ｉ，ｊ）（ｉ，ｊ＝０，１，２，３）を（ｉ，ｊ）成分とする４×４配列を状態配列Ｂｒ−１とする。
【０３８５】
〔２〕ＡＥＳ方式に本発明を適用した暗号化アルゴリズム
本発明に係る空間充填曲線を利用した暗号方式を、上記ＡＥＳ方式に組み込む場合、各ラウンド関数のSubByte関数の後段に、空間充填曲線を使用した非線形変換による内部ブロック暗号化関数Ｇを挿入すればよい。内部ブロック暗号化関数Ｇは、実施例５で説明したものと同様である。
【０３８６】
図４１に、本実施例６の暗号化アルゴリズムにおける各ラウンド関数ＲＦのアルゴリズムのブロック図を示す。図４２に、本実施例６の復号アルゴリズムにおける各ラウンド関数ＲＦ−１のアルゴリズムのブロック図を示す。尚、暗号化アルゴリズム及び復号アルゴリズムの全体の流れは、図３７，図３９と同様であるため説明は省略する。図４１におけるSubByte関数、ShiftRows関数、MixColumns関数、AddRoundKey関数は、図３８と同様である。図４２におけるInvSubByte関数、InvShiftRows関数、InvMixColumns関数、AddRoundKey関数は、図４０と同様である。
【０３８７】
本実施例の暗号化アルゴリズムにおけるラウンド関数ＲＦでは、SubByte関数により算出される状態配列Ｍ１を、内部ブロック暗号化関数Ｇにより４行４列の状態配列Ｍ１’に変換し、この状態配列Ｍ１’をShiftRows関数の入力とする。また、本実施例の復号アルゴリズムにおけるラウンド関数ＲＦ−１では、InvShiftRows関数により算出される状態配列Ｍ１’を、内部ブロック暗号化関数Ｇの逆関数Ｇ−１により４行４列の状態配列Ｍ１に変換し、この状態配列Ｍ１をInvSubByte関数の入力とする。それ以外については、通常のＡＥＳ方式のラウンド関数ＲＦ，ＲＦ−１と同様である。
【０３８８】
図４３は、実施例６の暗号処理装置の構成を表すブロック図である。図４３の暗号処理装置は、暗号化処理機能と復号処理機能の両方の機能を有する。図４３において、図３５と同様の部分については、同符号を付している。巡回鍵生成部６０は、図３７，図３９における鍵拡張関数を演算する部分であり、ＡＥＳ鍵Ｋから各巡回鍵Ｋｒを算出するモジュールである。初期・最終処理部６１は、図３７における初期処理及び図３９における最終処理の演算を行うモジュールである。ラウンド処理部６２は、図３７，図３８，図３９，図４０におけるラウンド関数ＲＦ，ＲＦ−１の演算を行うモジュールである。ラウンド処理部６２は、状態配列記憶部６３、バイト置換部６４、行シフト部６５、列内ミックス部６６、及び巡回鍵加算部６７から構成されている。状態配列記憶部６３は、図３７，図３９における各状態配列Ｂｒ（ｒ＝０，１，…，Ｎｒ）及び状態配列Ｐを記憶する。バイト置換部６４は、図４１におけるSubByte関数及び図４２におけるInvSubByte関数の演算を行う。暗号処理装置２は、図４１における内部ブロック暗号化関数Ｇ及び図４２における逆内部ブロック暗号化関数Ｇ−１関数の演算を行う。行シフト部６５は、図４１におけるShiftRows関数及び図４２におけるInvShiftRows関数の演算を行う。列内ミックス部６６は、図４１におけるMixColumns関数及び図４２におけるInvMixColumns関数の演算を行う。巡回鍵加算部６７は、図４１及び図４２におけるAddRoundKey関数の演算を行う。
【０３８９】
図４３の暗号処理装置２の構成は、図３６に示した構成と同様である。暗号処理装置２は、暗号化の際には内部ブロック暗号化関数Ｇの演算を行い、復号の際には、内部ブロック暗号化関数Ｇの逆関数Ｇ−１の演算を行う。
【０３９０】
本実施例の場合、暗号化処理において、内部ブロック暗号化関数Ｇには、４行４列の状態配列Ｍ１が入力される。平文コード点生成部２３は、状態配列Ｍ１の１６個の成分ｍ１（ｉ，ｊ）∈｛０，１｝８（ｉ，ｊ＝０，１，２，３）を用いて１６次元のベクトルＹを構成し、これを平文コード点Ｙとして出力する。次に、暗号コード生成部２４は、鍵曲線ＨＫにより１６次元ベクトルＹを１次元序数空間内の序数ｉＹに写像する関数ＬＫ（Ｙ）により、ベクトルＹから序数ｉＹを算出する。ここで、序数ｉＹは３２ビットのスカラー変数である。関数ＬＫ（Ｙ）は、ベクトルＹを、鍵曲線ＨＫにより生成される一辺の長さがＭ（＝２８）の１６次元超立方体を充填する空間充填曲線Ｃ（Ｍ，Ｎ）におけるベクトルＹに対応する点の序数ｉＹに写像する関数である。関数ＬＫ（Ｙ）としては、例えば、実施例１で説明したようなヒルベルト曲線を用いた写像関数を用いることができる。また、ヒルベルト曲線の代わりに、実施例４で説明したペアノ型曲線やその他の空間充填曲線を使用した写像関数を用いることもできる。次いで、序数ｉＹをスカラー関数であるエンコード関数ｆｅにより変換した後、ｆｅ（ｉＹ）を、関数ＬＫの逆関数ＬＫ−１により変換し、１６次元ベクトルＶ＝（Ｖ０，Ｖ１，…，Ｖ１５）を生成する。そして、ベクトルＶの各成分Ｖ０，Ｖ１，…，Ｖ１５を連結してこれを出力Ｇ（Ｍ１，ＨＫ）とする。即ち、Ｇ（Ｍ１，ＨＫ）は、次式の演算によって計算される。
【０３９１】
【数７６】
2012177893.tif 000090
【０３９２】
復号の際には、内部ブロック暗号化関数Ｇの逆関数Ｇ−１では上記演算の逆演算が実行される。
【０３９３】
このように、本発明に係る空間充填曲線を利用した暗号方式を、共通鍵暗号であるＳＥＳ暗号方式のラウンド処理の格段に適用することによって、暗号の安全性をさらに向上させることができる。
【実施例７】
【０３９４】
本実施例においては、実施例１，２で示したような公開鍵方式の暗号処理システムにおける曲線上演算部１６（図２，図３参照）の演算処理に関して、他の例を用いる場合についての説明を行う。尚、本実施例における暗号化処理システムの構成については、曲線上演算部１６の演算処理以外は実施例１の図１〜図３に示したものと同様であるため説明は省略する。
【０３９５】
〔１〕実施例１，２の暗号処理システムの動作
上述の実施例１，２の暗号処理システムの動作アルゴリズムを要約すると、次の通りである。
【０３９６】
（動作アルゴリズム１）
（Ｓｔｅｐ１）［メッセージ送信側・メッセージ受信側］
空間充填曲線の鍵番号Ｋを交換。
【０３９７】
（Ｓｔｅｐ２）［メッセージ受信側］
（１）Ｎ次元空間点Ｘ１をランダムに生成。
（２）Ｎ次元空間点Ｘ２を次式により生成。
【０３９８】
【数７７】
2012177893.tif 000091
【０３９９】
（３）Ｘ１，Ｘ２を公開鍵として送信（公開）
【０４００】
（Ｓｔｅｐ３）［メッセージ送信側］
（１）平文コードＭｅｓ（平文）をＮ次元空間点Ｙ（平文点）に単射。
（２）Ｎ次元空間点Ｖ（暗号文点），Ｘ３（復号鍵）を次式により生成。
【０４０１】
【数７８】
2012177893.tif 000092
（３）Ｖ（暗号文点），Ｘ３（復号鍵）を送信。
【０４０２】
（Ｓｔｅｐ４）［メッセージ受信側］
（１）Ｖ（暗号文点），Ｘ３（復号鍵）からＹ（平文点）を次式により復元。
【０４０３】
【数７９】
2012177893.tif 000093
（２）Ｙ（平文点）を平文コードＭｅｓ（平文）に単射。
（アルゴリズム終わり）
【０４０４】
上記式（７９）に式（７７ａ），（７８ａ），（７８ｂ）を代入することにより、Ｙ（平文点）が完全に復元できるためには、エンコード関数ｆｅとデコード関数ｇｅとは互いに可換な単射関数であれば、どのような関数を選択してもよいことが分かる。
【０４０５】
〔２〕曲線上演算部１６の演算処理の他の例１
上記動作アルゴリズム１を変形し、可換な単射関数ｆｅ２，ｇｅ２と逆関数を有する単射関数（可逆単射関数）ｆｅ１を用いて、次のような動作アルゴリズムとしても、Ｖ（暗号文点）からＹ（平文点）を完全に復元することが可能である。
【０４０６】
（動作アルゴリズム２）
（Ｓｔｅｐ１）［メッセージ送信側・メッセージ受信側］
空間充填曲線の鍵番号Ｋを交換。
【０４０７】
（Ｓｔｅｐ２）［メッセージ受信側］
（１）Ｎ次元空間点Ｘ１をランダムに生成。
（２）Ｎ次元空間点Ｘ２を次式により生成。
【０４０８】
【数８０】
2012177893.tif 000094
【０４０９】
（３）Ｘ１，Ｘ２を公開鍵として送信（公開）
【０４１０】
（Ｓｔｅｐ３）［メッセージ送信側］
（１）平文コードＭｅｓ（平文）をＮ次元空間点Ｙ（平文点）に単射。
（２）Ｎ次元空間点Ｖ（暗号文点），Ｘ３（復号鍵）を次式により生成。
【０４１１】
【数８１】
2012177893.tif 000095
ここで、関数ｆｅ１としては、例えば、ｆｅ１（ｘ）＝ａｘ＋ｂ mod ｐ（ａ，ｂは定数）などの可逆単射関数を用いることができる。
（３）Ｖ（暗号文点），Ｘ３（復号鍵）及び関数ｆｅ１を送信。
【０４１２】
（Ｓｔｅｐ４）［メッセージ受信側］
（１）Ｖ（暗号文点），Ｘ３（復号鍵）及び関数ｆｅ１の逆関数ｆｅ１−１からＹ（平文点）を次式により復元。
【０４１３】
【数８２】
2012177893.tif 000096
（２）Ｙ（平文点）を平文コードＭｅｓ（平文）に単射。
（アルゴリズム終わり）
【０４１４】
従って、実施例１において、式（１１）の代わりに式（８０）、式（１２ａ），（１２ｂ）の代わりに式（８１ａ），（８１ｂ）、式（１３）の代わりに式（８２ａ），（８２ｂ）の演算を行うように変更することが可能である。
【０４１５】
〔２〕曲線上演算部１６の演算処理の他の例２
上記動作アルゴリズム１を変形し、次のような動作アルゴリズムとしても、Ｖ（暗号文点）からＹ（平文点）を完全に復元することが可能である。
【０４１６】
（動作アルゴリズム３）
（Ｓｔｅｐ１）［メッセージ送信側・メッセージ受信側］
空間充填曲線の鍵番号Ｋを交換。
【０４１７】
（Ｓｔｅｐ２）［メッセージ受信側］
（１）Ｎ次元空間点Ｘ１をランダムに生成。但し、Ｘ１は次の正則条件を満たすものとする。
【０４１８】
【数８３】
2012177893.tif 000097
（２）Ｎ次元空間点Ｘ２を次式により生成。
【０４１９】
【数８４】
2012177893.tif 000098
【０４２０】
（３）Ｘ１，Ｘ２を公開鍵として送信（公開）
【０４２１】
（Ｓｔｅｐ３）［メッセージ送信側］
（１）平文コードＭｅｓ（平文）をＮ次元空間点Ｙ（平文点）に単射。
（２）Ｘ１，Ｘ２からＮ次元空間点Ｖ（暗号文点），Ｘ３（復号鍵）を次式により生成。
【０４２２】
【数８５】
2012177893.tif 000099
（３）Ｖ（暗号文点），Ｘ３（復号鍵）を送信。
【０４２３】
（Ｓｔｅｐ４）［メッセージ受信側］
（１）Ｖ（暗号文点），Ｘ３（復号鍵），Ｘ１からＹ（平文点）を次式により復元。
【０４２４】
【数８６】
2012177893.tif 000100
（２）Ｙ（平文点）を平文コードＭｅｓ（平文）に単射。
（アルゴリズム終わり）
【０４２５】
従って、実施例１において、式（１１）の代わりに式（８４）、式（１２ａ），（１２ｂ）の代わりに式（８５ａ）〜（８５ｃ）、式（１３）の代わりに式（８６ａ）〜（８６ｃ）の演算を行うように変更することが可能である。
【符号の説明】
【０４２６】
１  暗号処理システム
２  暗号処理装置
２ｅ  暗号化装置
２ｄ  復号装置
３  通信ネットワーク
４  共通モジュール
５  暗号コード生成モジュール
６  復号モジュール
７  通信インタフェース
８  平文コード入力部
９  平文コード出力部
１１  シード曲線テーブル記憶部
１１’  鍵曲線記憶部
１２  曲線演算テーブル記憶部
１３  ターミナル・テーブル初期化部
１４  シード曲線設定部
１５  インダクション・テーブル生成部
１６  曲線上演算部
１７  パラメータ交換部
１７’  鍵番号交換部
２１  公開鍵入力部
２１’  共通鍵入力部
２２  暗号化倍数生成部
２３  平文コード点生成部
２４  暗号コード生成部
２５  暗号コード出力部
３１  復号倍率数生成部
３２  公開鍵生成部
３３  暗号コード入力部
３４  復号演算部
４１  データ入力部
４２  処理データ記憶部
４３  巡回鍵記憶部
４４  鍵曲線記憶部
４５  左ブロック記憶部
４６  右ブロック記憶部
４７  初期置換部
４８  巡回鍵生成部
４９  内部ブロック関数Ｆ演算部
５０  内部ブロック関数Ｇ演算部
５１  ＥＸＯＲ演算部
５２  ブロック交換部
５３  最終置換部
５４  データ出力部
６０  巡回鍵生成部
６１  初期・最終処理部
６２  ラウンド処理部
６３  状態配列記憶部
６４  バイト置換部
６５  行シフト部
６６  列内ミックス部
６７  巡回鍵加算部
【図１】
2012177893.tif 000101
【図２】
2012177893.tif 000102
【図３】
2012177893.tif 000103
【図４】
2012177893.tif 000104
【図５】
2012177893.tif 000105
【図６】
2012177893.tif 000106
【図７】
2012177893.tif 000107
【図８】
2012177893.tif 000108
【図９】
2012177893.tif 000109
【図１０】
2012177893.tif 000110
【図１１】
2012177893.tif 000111
【図１２】
2012177893.tif 000112
【図１３】
2012177893.tif 000113
【図１４】
2012177893.tif 000114
【図１５】
2012177893.tif 000115
【図１６】
2012177893.tif 000116
【図１７】
2012177893.tif 000117
【図１８】
2012177893.tif 000118
【図１９】
2012177893.tif 000119
【図２０】
2012177893.tif 000120
【図２１】
2012177893.tif 000121
【図２２】
2012177893.tif 000122
【図２３】
2012177893.tif 000123
【図２４】
2012177893.tif 000124
【図２５】
2012177893.tif 000125
【図２６】
2012177893.tif 000126
【図２７】
2012177893.tif 000127
【図２８】
2012177893.tif 000128
【図２９】
2012177893.tif 000129
【図３０】
2012177893.tif 000130
【図３１】
2012177893.tif 000131
【図３２】
2012177893.tif 000132
【図３３】
2012177893.tif 000133
【図３４】
2012177893.tif 000134
【図３５】
2012177893.tif 000135
【図３６】
2012177893.tif 000136
【図３７】
2012177893.tif 000137
【図３８】
2012177893.tif 000138
【図３９】
2012177893.tif 000139
【図４０】
2012177893.tif 000140
【図４１】
2012177893.tif 000141
【図４２】
2012177893.tif 000142
【図４３】
2012177893.tif 000143