(57)【要約】  暗号化装置（１０）は、メッセージＭをｂビット毎に分割してデータＭ［１］，．．．，データＭ［ｍ］を生成する。暗号化装置（１０）は、ｎ＝ｂ＋ｃビットのデータＳ０を変数Ｓに設定し、ｉ＝１，．．．，ｍの各整数ｉについて昇順に、変数Ｓを入力としてブロック暗号Ｅを計算して変数Ｓを更新し、更新された変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して変数Ｓを更新し、更新された変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する。暗号化装置（１０）は、ｉ＝１，．．．，ｍの各整数ｉについてのデータＣ［ｉ］を連結してメッセージＭの暗号文Ｃを生成する。暗号化装置（１０）は、変数Ｓから１以上の整数ｔビットを認証子Ｔとして抽出する。
2019043921.tif 000002
【特許請求の範囲】
【請求項１】
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成する分割部と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定部と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する関数計算部と、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成する暗号文生成部と、
前記関数計算部によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔを生成する認証子生成部と
を備える暗号化装置。
【請求項２】
前記認証子生成部は、前記メッセージＭの長さがｂビットの倍数である場合には、前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して前記認証子Ｔを生成する
請求項１に記載の暗号化装置。
【請求項３】
前記変数設定部は、ｎビットのデータＳ０と、初期パラメータＮに定数ｃｏｎｓｔ［１］が連結されたデータＹとを入力として前記排他的論理和を計算して得られたデータを、前記変数Ｓに設定する
請求項１又は２に記載の暗号化装置。
【請求項４】
前記分割部は、公開データＡをｂ’ビット毎に分割して、ｂ’ビットのデータＡ［１］，．．．，データＡ［ａ］を生成し、
前記変数設定部は、ｎビットの固定データＩＶを前記変数Ｓに設定し、
前記暗号化装置は、さらに、
ｉ＝１，．．．，ａの各整数ｉについて昇順に、前記変数ＳとデータＡ［ｉ］にｃ’＝ｎ−ｂ’ビットのビット列を付加したデータＸ＊［ｉ］とを入力として排他的論理和を計算して得られたデータにより変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新する事前計算部
を備え、
前記変数設定部は、前記事前計算部によって更新された前記変数Ｓを前記データＳ０とする
請求項３に記載の暗号化装置。
【請求項５】
前記データＸ［ｉ］は、前記データＭ［ｉ］の下位にｃビットのビット列が付加され、
前記データＣ［ｉ］は、前記変数Ｓの上位ｂビットを抽出してを生成される
請求項１から４までのいずれか１項に記載の暗号化装置。
【請求項６】
暗号文Ｃをｂビット毎に分割して、ｂビットのデータＣ［１］，．．．，データＣ［ｍ］を生成する分割部と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定部と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから抽出されたｂビットとデータＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算し、更新された前記変数Ｓと前記データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新する関数計算部と、
ｉ＝１，．．．，ｍの各整数ｉについて、前記データＭ［ｉ］を連結して前記暗号文Ｃを復号したメッセージＭを生成するメッセージ生成部と、
前記関数計算部によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔ’を生成する認証子生成部と
を備える復号装置。
【請求項７】
前記認証子生成部は、前記暗号文Ｃの長さがｂビットの倍数である場合には、前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して前記認証子Ｔ’を生成する
請求項６に記載の復号装置。
【請求項８】
前記変数設定部は、ｎビットのデータＳ０と、初期パラメータＮに定数ｃｏｎｓｔ［１］が連結されたデータＹとを入力として前記排他的論理和を計算して、前記変数Ｓに設定する
請求項６又は７に記載の復号装置。
【請求項９】
前記分割部は、公開データＡをｂ’ビット毎に分割して、ｂ’ビットのデータＡ［１］，．．．，データＡ［ａ］を生成し、
前記変数設定部は、ｎビットの固定データＩＶを前記変数Ｓに設定し、
前記復号装置は、さらに、
ｉ＝１，．．．，ａの各整数ｉについて昇順に、前記変数ＳとデータＡ［ｉ］にｃ’＝ｎ−ｂ’ビットのビット列を付加したデータＸ＊［ｉ］とを入力として排他的論理和を計算して得られたデータにより変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新する事前計算部
を備え、
前記変数設定部は、前記事前計算部によって更新された前記変数Ｓを前記データＳ０とする
請求項８に記載の復号装置。
【請求項１０】
前記データＸ［ｉ］は、前記データＭ［ｉ］の下位にｃビットのビット列が付加され、
前記データＣ［ｉ］は、前記変数Ｓの上位ｂビットを抽出してを生成される
請求項６から９までのいずれか１項に記載の復号装置。
【請求項１１】
前記認証子生成部は、前記認証子Ｔ’と、前記メッセージＭに対応する認証子Ｔとが一致するか否かを判定する
請求項６から１０までのいずれか１項に記載の復号装置。
【請求項１２】
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成し、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定し、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成し、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成し、
最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔを生成する暗号化方法。
【請求項１３】
暗号文Ｃをｂビット毎に分割して、ｂビットのデータＣ［１］，．．．，データＣ［ｍ］を生成し、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定し、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから抽出されたｂビットとデータＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算し、更新された前記変数Ｓと前記データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、
ｉ＝１，．．．，ｍの各整数ｉについて、前記データＭ［ｉ］を連結して前記暗号文Ｃを復号したメッセージＭを生成し、
最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔ’を生成する復号方法。
【請求項１４】
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成する分割処理と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定処理と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する関数計算処理と、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成する暗号文生成処理と、
前記関数計算処理によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔを生成する認証子生成処理と
をコンピュータに実行させる暗号化プログラム。
【請求項１５】
暗号文Ｃをｂビット毎に分割して、ｂビットのデータＣ［１］，．．．，データＣ［ｍ］を生成する分割処理と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定処理と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから抽出されたｂビットとデータＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算し、更新された前記変数Ｓと前記データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新する関数計算処理と、
ｉ＝１，．．．，ｍの各整数ｉについて、前記データＭ［ｉ］を連結して前記暗号文Ｃを復号したメッセージＭを生成するメッセージ生成処理と、
前記関数計算処理によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔ’を生成する認証子生成処理と
をコンピュータに実行させる復号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ブロック暗号を用いた認証暗号アルゴリズムに関する。
【背景技術】
【０００２】
認証暗号アルゴリズムは、秘匿機能と改ざん検知機能とを実現する暗号アルゴリズムである。認証暗号アルゴリズムを用いると、２者間でメッセージを秘匿した上で通信できるとともに、送信されたメッセージが改ざんされているか否かを受信者が確認できる。【０００３】
認証暗号アルゴリズムは、暗号化関数Ｅｎｃと復号関数Ｄｅｃとの２つのアルゴリズムを備える。
暗号化関数Ｅｎｃは、秘密鍵Ｋと、初期パラメータＮと、公開データＡと、メッセージｍとを入力とし、暗号文Ｃと改ざん検知用の認証子Ｔとを出力する関数である。なお、初期パラメータＮは暗号化毎に異なる値が用いられる。
復号関数Ｄｅｃは、秘密鍵Ｋと、初期パラメータＮと、公開データＡと、暗号文Ｃと、改ざん検知用の認証子Ｔとを入力とし、暗号文Ｃ等が改ざんされていない場合にはメッセージｍを出力し、暗号文Ｃ等が改ざんされている場合にはメッセージｍを出力しない関数である。【０００４】
送信者Ａｌｉｃｅと受信者Ｂｏｂとが認証暗号アルゴリズムを用いた通信を行うとする。この場合、送信者Ａｌｉｃｅは、秘密鍵Ｋと、初期パラメータＮと、公開データＡと、メッセージｍとから暗号化関数Ｅｎｃを用いて、暗号文Ｃと改ざん検知用の認証子Ｔとを計算する。そして、送信者Ａｌｉｃｅは、初期パラメータＮと、公開データＡと、暗号文Ｃと、改ざん検知用の認証子Ｔとを受信者Ｂｏｂに送信する。受信者Ｂｏｂは、秘密鍵Ｋと、初期パラメータＮと、公開データＡと、暗号文Ｃと、改ざん検知用の認証子Ｔとを復号関数Ｄｅｃの入力とする。復号関数Ｄｅｃは、初期パラメータＮと、公開データＡと、暗号文Ｃと、改ざん検知用の認証子Ｔとのいずれも改ざんされていない場合はメッセージｍを出力する。
なお、秘密鍵Ｋは、事前にＡｌｉｃｅとＢｏｂとで共有されている。また、公開データＡは公開してもよい値である。公開データＡは、無くても構わない。【０００５】
認証暗号アルゴリズムの構成方法として、非特許文献１に記載されたＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）等のブロック暗号を用いる方法がある。
ブロック暗号は、暗号化関数Ｅと復号関数Ｄとから構成される。暗号化関数Ｅは、鍵Ｋとｎビットのメッセージｍとを入力とし、ｎビットの暗号文ｃを出力する関数である。これをｃ＝ＥＫ（ｍ）と書く。復号関数Ｄは、鍵Ｋとｎビットの暗号文ｃとを入力とし、ｎビットのメッセージｍを出力する関数である。これをｍ＝ＤＫ（ｃ）と書く。
ブロック暗号のメッセージｍ及び暗号文ｃのサイズｎはブロックサイズと呼ばれる。ブロック暗号の暗号化関数Ｅ及び復号関数Ｄは、鍵Ｋを固定するとｎビットの置換関数となる。ブロックサイズｎはブロック暗号によって定義されるパラメータで、ＡＥＳの場合ｎ＝１２８である。【０００６】
認証暗号の暗号化関数Ｅｎｃは、ブロック暗号の暗号化関数Ｅを用いて構成される。また、認証暗号の復号関数Ｄｅｃは、ブロック暗号の暗号化関数Ｅ又は復号関数Ｄを用いて構成される。【０００７】
認証暗号の復号関数Ｄｅｃがブロック暗号の復号関数Ｄを用いて構成される場合、認証暗号でブロック暗号の暗号化関数Ｅ及び復号関数Ｄの両方を用いることになる。認証暗号でブロック暗号の暗号化関数Ｅ及び復号関数Ｄの両方を用いる場合、暗号化関数Ｅ及び復号関数Ｄを両方実装する必要がある。例えば、ソフトウェアで実装する場合、暗号化関数Ｅ及び復号関数Ｄの両方のプログラムが必要となり、ハードウェアで実装する場合、暗号化関数Ｅ及び復号関数Ｄの両方の回路等が必要となる。
一方、認証暗号の復号関数Ｄｅｃがブロック暗号の暗号化関数Ｅを用いる場合、認証暗号でブロック暗号の暗号化関数Ｅのみを用いることになる。認証暗号でブロック暗号の暗号化関数Ｅのみを用いる場合、復号関数Ｄの実装が不要となる。そのため、ソフトウェア又はハードウェアのサイズが小さくなる。ソフトウェアのサイズ及びハードウェアのサイズを実装サイズと呼ぶ。【０００８】
ブロック暗号のＥのみで実装可能な認証暗号アルゴリズムとして、非特許文献２に記載されたＡＥＳ−ＧＣＭがある。ＡＥＳ−ＧＣＭは、秘匿機能を実現するためにカウンターモードを用いて認証暗号の暗号化関数Ｅｎｃ及び復号関数Ｄｅｃを実現している。また、ＡＥＳ−ＧＣＭは、改ざん検知機能を実現するために、ガロア体ＧＦ（２ｎ）上の掛け算を用いている。秘匿機能のアルゴリズムであるカウンターモードでは、ブロック暗号の暗号化関数Ｅの他に、排他的論理和ＸＯＲ演算を用いる。
よって、ＡＥＳ−ＧＣＭでは、暗号化関数Ｅの他に、ガロア体ＧＦ（２ｎ）上の掛け算と排他的論理和とを実装する必要がある。【０００９】
非特許文献３には、暗号化関数Ｅと排他的論理和ＸＯＲのみから構成される認証暗号アルゴリズムＪＡＭＢＵが記載されている。ＪＡＭＢＵは、ガロア体ＧＦ（２ｎ）上の掛け算が必要ないため、ＡＥＳ−ＧＣＭと比べ実装サイズが小さい。
認証暗号アルゴリズムＪＡＭＢＵの暗号化関数Ｅｎｃまたは復号関数Ｄｅｃでは、ブロック暗号のＥを用いて３ｎ／２ビットの内部変数を更新しながら暗号化を行っていく。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】ＦＩＰＳ  １９７，  Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ  （ＡＥＳ）．
【非特許文献２】ＮＩＳＴ  Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ８００−３８Ｄ，  Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  ｆｏｒ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ  Ｍｏｄｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ：  Ｇａｌｏｉｓ／Ｃｏｕｎｔｅｒ  Ｍｏｄｅ  （ＧＣＭ）  ａｎｄ  ＧＭＡＣ．
【非特許文献３】Ｓｕｂｍｉｔｔｅｄ  ｔｏ  ｔｈｅ  ＣＡＥＳＡＲ  ｃｏｍｐｅｔｉｔｉｏｎ，  Ｔｈｅ  ＪＡＭＢＵ  Ｌｉｇｈｔｗｅｉｇｈｔ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｅｎｃｒｙｐｔｉｏｎ  Ｍｏｄｅ  （ｖ２．１）．
【発明の概要】
【発明が解決しようとする課題】
【００１１】
実装サイズに加え、認証暗号アルゴリズムの実行時に使用される内部変数のサイズも重要である。組み込み機器といった安価な機器になるとＲＡＭサイズ及びＲＯＭサイズが小さくなる。このように、実装環境が制限されている場合、実装サイズ及び内部変数サイズはできるだけ小さいほうが望ましい。内部変数は、ブロック暗号Ｅによってアップデートされる値である。例えば、ＪＡＭＢＵの内部変数サイズは３ｎ／２ビットである。また、ＡＥＳ−ＧＣＭの内部変数サイズは２ｎビット以上必要となる。
この発明は、実装サイズ及び内部変数サイズが小さくすることが可能な認証暗号アルゴリズムを実現することを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係る暗号化装置は、
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成する分割部と、
ｎ＝ｂ＋ｃビットのデータＳ０を変数Ｓに設定し、ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号Ｅを計算したデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算したデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する関数計算部と、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成する暗号文生成部と、
前記関数計算部によって最後に更新された前記変数Ｓから１以上の整数ｔビットを認証子Ｔとして抽出する認証子生成部と
を備える。
【発明の効果】
【００１３】
この発明では、ブロック暗号の暗号化関数Ｅと排他的論理和ＸＯＲとから認証暗号アルゴリズムを構成可能である。また、内部変数である変数Ｓのサイズはｎビットである。したがって、実装サイズを認証暗号アルゴリズムＪＡＭＢＵと同等にしつつ、内部変数のサイズを認証暗号アルゴリズムＪＡＭＢＵよりも小さくすることができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１に係る暗号化装置１０の構成図。
【図２】実施の形態１に係る復号装置２０の構成図。
【図３】実施の形態１に係る暗号化装置１０の動作を示すフローチャート。
【図４】実施の形態１に係る暗号化装置１０の動作の説明図。
【図５】実施の形態１に係る復号装置２０の動作を示すフローチャート。
【図６】実施の形態１に係る復号装置２０の動作の説明図。
【図７】変形例１に係る暗号化装置１０の構成図。
【図８】変形例１に係る復号装置２０の構成図。
【図９】実施の形態２に係る暗号化装置１０の構成図。
【図１０】実施の形態２に係る復号装置２０の構成図。
【図１１】実施の形態２に係る暗号化装置１０及び復号装置２０の動作を示すフローチャート。
【図１２】実施の形態２に係る暗号化装置１０及び復号装置２０の動作の説明図。
【発明を実施するための形態】
【００１５】
実施の形態１．
実施の形態１では、ブロックサイズｎのブロック暗号の暗号化関数Ｅを用いて構成された認証暗号アルゴリズムを説明する。
【００１６】
＊＊＊変数及び記法の説明＊＊＊
以下の説明における変数及び記法について説明する。
整数ｂと整数ｃと整数ｂ’’と整数ｃ’’とは、ｃ＝ｎ−ｂ、ｃ’’＝ｎ−ｂ’’の関係を満たす。また、整数ｔは、ｔ≦ｎの関係を満たす。
整数ｘのｙビット表現をｓｔｒ［ｙ］（ｘ）とする。例えば、ｓｔｒ［４］（２）＝００１０である。ｎビットのビット列ｚの上位ｗビットをｍｓｂ［ｗ］（ｚ）、下位ｗビットをＬｓｂ［ｗ］（ｚ）とする。ビット列ｗのビット長をＬｅｎ（ｗ）とする。
ｃｏｎｓｔ［１］とｃｏｎｓｔ［２］とｃｏｎｓｔ［３］とは、０ではない整数であり、すべて異なる値である。
【００１７】
＊＊＊構成の説明＊＊＊
図１を参照して、実施の形態１に係る暗号化装置１０の構成を説明する。
暗号化装置１０は、プロセッサ１１と、メモリ１２と、ストレージ１３と、通信インタフェース１４とのハードウェアを備える。プロセッサ１１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１８】
暗号化装置１０は、機能構成要素として、受付部１１１と、分割部１１２と、変数設定部１１３と、関数計算部１１４と、認証子生成部１１５と、暗号文生成部１１６と、出力部１１７とを備える。暗号化装置１０の各機能構成要素の機能はソフトウェアにより実現される。
ストレージ１３には、暗号化装置１０の各機能構成要素の機能を実現するプログラムが記憶されている。このプログラムは、プロセッサ１１によりメモリ１２に読み込まれ、プロセッサ１１によって実行される。これにより、暗号化装置１０の各機能構成要素の機能が実現される。
【００１９】
図２を参照して、実施の形態１に係る復号装置２０の構成を説明する。
復号装置２０は、プロセッサ２１と、メモリ２２と、ストレージ２３と、通信インタフェース２４とのハードウェアを備える。プロセッサ２１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００２０】
復号装置２０は、機能構成要素として、受付部２１１と、分割部２１２と、変数設定部２１３と、関数計算部２１４と、認証子生成部２１５と、メッセージ生成部２１６と、出力部２１７とを備える。復号装置２０の各機能構成要素の機能はソフトウェアにより実現される。
ストレージ２３には、復号装置２０の各機能構成要素の機能を実現するプログラムが記憶されている。このプログラムは、プロセッサ２１によりメモリ２２に読み込まれ、プロセッサ２１によって実行される。これにより、復号装置２０の各機能構成要素の機能が実現される。
【００２１】
プロセッサ１１，２１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ１１，２１は、具体例としては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００２２】
メモリ１２，２２は、データを一時的に記憶する記憶装置である。メモリ１２，２２は、具体例としては、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２３】
ストレージ１３，２３は、データを保管する記憶装置である。ストレージ１３，２３は、具体例としては、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、ストレージ１３，２３は、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ，登録商標）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記憶媒体であってもよい。
【００２４】
通信インタフェース１４，２４は、外部の装置と通信するためのインタフェースである。通信インタフェース１４，２４は、具体例としては、Ｅｔｈｅｒｎｅｔ（登録商標）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＨＤＭＩ（登録商標，Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）のポートである。
【００２５】
＊＊＊動作の説明＊＊＊
図３から図６を参照して、実施の形態１に係る暗号化装置１０及び復号装置２０の動作を説明する。
実施の形態１に係る暗号化装置１０の動作は、実施の形態１に係る暗号化方法に相当する。また、実施の形態１に係る暗号化装置１０の動作は、実施の形態１に係る暗号化プログラムの処理に相当する。
実施の形態１に係る復号装置２０の動作は、実施の形態１に係る復号方法に相当する。また、実施の形態１に係る復号装置２０の動作は、実施の形態１に係る復号プログラムの処理に相当する。
【００２６】
図３及び図４を参照して、実施の形態１に係る暗号化装置１０の動作を説明する。
（ステップＳ１１：受付処理）
受付部１１１は、暗号化する対象のメッセージＭの入力を受け付ける。
具体的には、受付部１１１は、利用者によって入力装置が操作され入力されたメッセージＭを、通信インタフェース１４を介して受信する。
【００２７】
（ステップＳ１２：分割処理）
分割部１１２は、ステップＳ１１で受け付けられたメッセージＭの長さＬｅｎ（Ｍ）がｂビットの倍数であるか否かを判定する。長さＬｅｎ（Ｍ）がｂビットの倍数でない場合には、長さＬｅｎ（Ｍ）がｂビットの倍数になるように、メッセージＭの後に１を付加し、さらに後ろに０のビット列を付加して、データＭ＊を生成する。一方、長さＬｅｎ（Ｍ）がｂビットの倍数である場合には、メッセージＭをデータＭ＊として扱う。
分割部１１２は、データＭ＊を、先頭からｂビット毎に分割して、データＭ［１］，．．．，データＭ［ｍ］を生成する。“ｍ”は１以上の整数である。
【００２８】
（ステップＳ１３：変数設定処理）
変数設定部１１３は、ｎビットのデータＳ０と、ｂ’’ビットの初期パラメータＮにｃ’’ビットの定数ｃｏｎｓｔ［１］が連結されたデータＹとを入力として前記排他的論理和を計算して得られたデータを、暗号化装置１０の内部の変数Ｓに設定する。つまり、変数設定部１１３は、Ｓ＝Ｓ０  ＸＯＲ  （Ｎ｜｜ｃｏｎｓｔ［１］）を計算する。
実施の形態１では、データＳ０は、固定データＩＶである。暗号化装置１０の内部の変数Ｓは、暗号化装置１０のメモリ１２に記憶された変数である。
【００２９】
（ステップＳ１４：関数計算処理）
関数計算部１１４は、ｉ＝１，．．．，ｍの各整数ｉについて昇順に以下の処理Ａから処理Ｃを実行する。
【００３０】
（処理Ａ）
関数計算部１１４は、変数Ｓ及び鍵Ｋを入力としてブロック暗号の暗号化関数Ｅを計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここで、鍵Ｋは、暗号化装置１０と復号装置２０との間で事前に共有されている。
つまり、関数計算部１１４は、Ｓ＝ＥＫ（Ｓ）を計算する。
【００３１】
（処理Ｂ）
関数計算部１１４は、処理Ａで更新された変数Ｓと、データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、関数計算部１１４は、データＭ［ｉ］の後に０をｃビット付加したデータＸ［ｉ］を用いる。
つまり、関数計算部１１４は、Ｓ＝Ｓ  ＸＯＲ  （Ｍ［ｉ］｜｜０ｃ）を計算する。
【００３２】
（処理Ｃ）
関数計算部１１４は、処理Ｂで更新された変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する。ここでは、関数計算部１１４は、変数Ｓの上位ｂビットを抽出してデータＣ［ｉ］を生成する。
つまり、関数計算部１１４は、Ｃ［ｉ］＝ｍｓｂ［ｂ］（Ｓ）を計算する。
【００３３】
（ステップＳ１５：認証子生成処理）
認証子生成部１１５は、メッセージＭの長さがｂビットの倍数である場合には、ステップＳ１４で計算された変数Ｓと、定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、認証子生成部１１５は、変数Ｓと、定数ｃｏｎｓｔ［２］をｃビット表現したビット列の前に０をｂビット付加したデータとを入力として、排他的論理和を計算する。つまり、認証子生成部１１５は、Ｓ＝Ｓ  ＸＯＲ  （０ｂ｜｜ｓｔｒ［ｃ］（ｃｏｎｓｔ［２］））を計算する。
一方、認証子生成部１１５は、メッセージＭの長さがｂビットの倍数でない場合には、ステップＳ１４で計算された変数Ｓと、定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、認証子生成部１１５は、変数Ｓと、定数ｃｏｎｓｔ［３］をｃビット表現したビット列の前に０をｂビット付加したデータとを入力として、排他的論理和を計算する。つまり、認証子生成部１１５は、Ｓ＝Ｓ  ＸＯＲ  （０ｂ｜｜ｓｔｒ［ｃ］（ｃｏｎｓｔ［３］））を計算する。
【００３４】
認証子生成部１１５は、更新された変数Ｓを入力として暗号化関数Ｅを計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。つまり、認証子生成部１１５は、Ｓ＝ＥＫ（Ｓ）を計算する。
そして、認証子生成部１１５は、更新された変数Ｓからｔビット抽出して、認証子Ｔとする。ここでは、認証子生成部１１５は、変数Ｓから上位ｔビット抽出して、認証子Ｔを生成する。つまり、認証子生成部１１５は、Ｔ＝ｍｓｂ［ｔ］（Ｓ）を計算する。
【００３５】
（ステップＳ１６：暗号文生成処理）
暗号文生成部１１６は、ステップＳ１４で計算されたｉ＝１，．．．，ｍの各整数ｉについてのデータＣ［ｉ］を連結する。暗号文生成部１１６は、連結されたデータから上位のメッセージＭの長さＬｅｎ（Ｍ）ビットだけ抽出して、メッセージＭを暗号化した暗号文Ｃを生成する。
つまり、暗号文生成部１１６は、Ｃ＝ｍｓｂ［Ｌｅｎ（Ｍ）］（Ｃ［１］｜｜．．．｜｜Ｃ［ｍ−１］｜｜Ｃ［ｍ］）を計算する。
【００３６】
（ステップＳ１７：出力処理）
出力部１１７は、ステップＳ１５で計算された認証子Ｔと、ステップＳ１６で生成された暗号文Ｃとを出力する。
具体的には、出力部１１７は、認証子Ｔ及び暗号文Ｃを、通信インタフェース１４を介して復号装置２０に送信する。
【００３７】
図５及び図６を参照して、実施の形態１に係る復号装置２０の動作を説明する。
（ステップＳ２１：受付処理）
受付部２１１は、認証子Ｔ及び暗号文Ｃの入力を受け付ける。
具体的には、受付部１１１は、暗号化装置１０よって送信された認証子Ｔ及び暗号文Ｃを、通信インタフェース２４を介して受信する。
【００３８】
（ステップＳ２２：分割処理）
分割部２１２は、ステップＳ２１で受け付けられた暗号文Ｃを、先頭からｂビット毎に分割して、データＣ［１］，．．．，データＣ［ｍ］を生成する。
暗号文Ｃの長さＬｅｎ（Ｃ）がｂビットの倍数でない場合には、データＣ［ｍ］の長さＬｅｎ（Ｃ［ｍ］）はｂビットよりも短くなり、長さＬｅｎ（Ｃ）がｂビットの倍数である場合には、長さＬｅｎ（Ｃ［ｍ］）はｂビットになる。
【００３９】
（ステップＳ２３：変数設定処理）
変数設定部２１３は、ｎビットのデータＳ０と、ｂ’’ビットの初期パラメータＮにｃ’’ビットの定数ｃｏｎｓｔ［１］が連結されたデータＹとを入力として排他的論理和を計算して得られたデータを、復号装置２０の内部の変数Ｓに設定する。つまり、変数設定部２１３は、Ｓ＝Ｓ０  ＸＯＲ  （Ｎ｜｜ｃｏｎｓｔ［１］）を計算する。
実施の形態１では、データＳ０は、固定値ＩＶである。ここで設定されるデータＳ０は、図３のステップＳ１３で設定されるデータＳ０と同じデータである。復号装置２０の内部の変数Ｓは、復号装置２０のメモリ２２に記憶された変数である。
【００４０】
（ステップＳ２４：関数計算処理）
関数計算部２１４は、ｉ＝１，．．．，ｍ−１の各整数ｉについて昇順に以下の処理Ａ’から処理Ｃ’を実行する。その後、関数計算部２１４は、処理Ｄ’から処理Ｅ’を実行する。
【００４１】
（処理Ａ’）
関数計算部２１４は、変数Ｓ及び鍵Ｋを入力としてブロック暗号の暗号化関数Ｅを計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここで、鍵Ｋは、暗号化装置１０と復号装置２０との間で事前に共有されている。
つまり、関数計算部２１４は、Ｓ＝ＥＫ（Ｓ）を計算する。
【００４２】
（処理Ｂ’）
関数計算部２１４は、処理Ａ’で更新された変数Ｓから抽出されたｂビットと、データＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算する。ここでは、関数計算部２１４は、処理Ａ’で更新された変数Ｓの上位ｂビットを抽出し、抽出されたデータと、データＣ［ｉ］とを入力として排他的論理和を計算する。
つまり、関数計算部２１４は、Ｍ［ｉ］＝Ｃ［ｉ］  ＸＯＲ  ｍｓｂ［ｂ］（Ｓ）を計算する。
【００４３】
（処理Ｃ’）
関数計算部２１４は、処理Ａ’で更新された変数Ｓと、データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、関数計算部２１４は、データＭ［ｉ］の後に０をｃビット付加したデータＸ［ｉ］を用いる。
つまり、関数計算部２１４は、Ｓ＝Ｓ  ＸＯＲ  （Ｍ［ｉ］｜｜０ｃ）を計算する。
【００４４】
（処理Ｄ’）
関数計算部２１４は、処理Ａ’で更新された変数Ｓの先頭から抽出された長さＬｅｎ（Ｃ［ｍ］）ビットと、データＣ［ｍ］とを入力として排他的論理和を計算してデータＭ［ｍ］を計算する。
つまり、関数計算部２１４は、Ｍ［ｍ］＝Ｃ［ｍ］  ＸＯＲ  ｍｓｂ［Ｌｅｎ（Ｃ［ｍ］）］（Ｓ）を計算する。
【００４５】
（処理Ｅ’）
関数計算部２１４は、処理Ｄ’で生成されたデータＭ［ｍ］の長さＬｅｎ（Ｍ［ｍ］）がｂビットよりも短い場合には、長さＬｅｎ（Ｍ［ｍ］）がｂビットになるように、データＭ［ｍ］の後に１を付加し、さらに後ろに０のビット列を付加して、データＭ＊［ｍ］を生成する。一方、長さＬｅｎ（Ｍ［ｍ］）がｂビットである場合には、データＭ［ｍ］をデータＭ＊［ｍ］として扱う。
そして、関数計算部２１４は、処理Ｃ’で更新された変数Ｓと、データＭ＊［ｍ］にｃビットのビット列を付加したデータＸ［ｍ］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、関数計算部２１４は、データＭ＊［ｍ］の後に０をｃビット付加したデータＸ［ｍ］を用いる。
つまり、関数計算部２１４は、Ｓ＝Ｓ  ＸＯＲ  （Ｍ＊［ｍ］｜｜０ｃ）を計算する。
【００４６】
（ステップＳ２５：認証子生成処理）
認証子生成部２１５は、暗号文Ｃの長さがｂビットの倍数である場合には、ステップＳ２４で計算された変数Ｓと、定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、認証子生成部２１５は、変数Ｓと、定数ｃｏｎｓｔ［２］をｃビット表現したビット列の前に０をｂビット付加したデータとを入力として、排他的論理和を計算する。つまり、認証子生成部２１５は、Ｓ＝Ｓ  ＸＯＲ  （０ｂ｜｜ｓｔｒ［ｃ］（ｃｏｎｓｔ［２］））を計算する。
一方、認証子生成部２１５は、暗号文Ｃの長さがｂビットの倍数でない場合には、ステップＳ２４で計算された変数Ｓと、定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、認証子生成部２１５は、変数Ｓと、定数ｃｏｎｓｔ［３］をｃビット表現したビット列の前に０をｂビット付加したデータとを入力として、排他的論理和を計算する。つまり、認証子生成部２１５は、Ｓ＝Ｓ  ＸＯＲ  （０ｂ｜｜ｓｔｒ［ｃ］（ｃｏｎｓｔ［３］））を計算する。
【００４７】
認証子生成部２１５は、更新された変数Ｓを入力として暗号化関数Ｅを計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。つまり、認証子生成部２１５は、Ｓ＝ＥＫ（Ｓ）を計算する。
そして、認証子生成部２１５は、更新された変数Ｓからｔビット抽出して、認証子Ｔ’とする。ここでは、認証子生成部２１５は、変数Ｓから上位ｔビット抽出して、認証子Ｔ’を生成する。つまり、認証子生成部２１５は、Ｔ＝ｍｓｂ［ｔ］（Ｓ）を計算する。
【００４８】
（ステップＳ２６：メッセージ生成処理）
メッセージ生成部２１６は、ステップＳ２４で計算されたｉ＝１，．．．，ｍの各整数ｉについてのデータＭ［ｉ］を連結する。暗号文生成部１１６は、連結されたデータから上位の暗号文Ｃの長さＬｅｎ（Ｃ）ビットだけ抽出して、暗号文Ｃを復号したメッセージＭを生成する。
つまり、暗号文生成部１１６は、Ｍ＝ｍｓｂ［Ｌｅｎ（Ｃ）］（Ｍ［１］｜｜．．．｜｜Ｍ［ｍ−１］｜｜Ｍ［ｍ］）を計算する。
【００４９】
（ステップＳ２７：出力処理）
出力部２１７は、ステップＳ２１で受け付けられた認証子Ｔと、ステップＳ２６で計算された認証子Ｔ’とが一致する場合には、ステップＳ２６で生成されたメッセージＭを出力する。具体的には、出力部２１７は、メッセージＭを、通信インタフェース２４を介して表示装置等に送信する。
一方、出力部２１７は、ステップＳ２１で受け付けられた認証子Ｔと、ステップＳ２６で計算された認証子Ｔ’とが一致しない場合には、認証子Ｔと認証子Ｔ’とが一致しないことを示すメッセージを出力する。
【００５０】
＊＊＊実施の形態１の効果＊＊＊
以上のように、実施の形態１に係る暗号化装置１０及び復号装置２０は、ブロック暗号の復号関数を用いることなく、ブロック暗号の暗号化関数Ｅと排他的論理和ＸＯＲとから認証暗号アルゴリズムを構成可能である。また、内部変数である変数Ｓのサイズはｎビットである。したがって、実装サイズを認証暗号アルゴリズムＪＡＭＢＵと同等にしつつ、内部変数のサイズを認証暗号アルゴリズムＪＡＭＢＵよりも小さくすることができる。
【００５１】
＊＊＊他の構成＊＊＊
＜変形例１＞
実施の形態１では、暗号化装置１０及び復号装置２０の各機能構成要素の機能がソフトウェアで実現された。しかし、変形例１として、暗号化装置１０及び復号装置２０の各機能構成要素の機能はハードウェアで実現されてもよい。この変形例１について、実施の形態１と異なる点を説明する。
【００５２】
図７を参照して、変形例１に係る暗号化装置１０の構成を説明する。
各機能構成要素の機能がハードウェアで実現される場合、暗号化装置１０は、プロセッサ１１とメモリ１２とストレージ１３とに代えて、電子回路１５を備える。電子回路１５は、暗号化装置１０の各部の機能とメモリ１２とストレージ１３との機能とを実現する専用の電子回路である。
【００５３】
図８を参照して、変形例１に係る復号装置２０の構成を説明する。
各機能構成要素の機能がハードウェアで実現される場合、復号装置２０は、プロセッサ２１とメモリ２２とストレージ２３とに代えて、電子回路２５を備える。電子回路２５は、復号装置２０の各部の機能とメモリ２２とストレージ２３との機能とを実現する専用の電子回路である。
【００５４】
電子回路１５，２５は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）が想定される。
暗号化装置１０の各部の機能を１つの電子回路１５で実現してもよいし、暗号化装置１０の各部の機能を複数の電子回路１５に分散させて実現してもよい。同様に、復号装置２０の各部の機能を１つの電子回路２５で実現してもよいし、復号装置２０の各部の機能を複数の電子回路２５に分散させて実現してもよい。
【００５５】
＜変形例２＞
変形例２として、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。つまり、暗号化装置１０の各機能構成要素のうち、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。同様に、復号装置２０についても、各機能構成要素のうち、一部の機能がハードウェアで実現され、他の機能がソフトウェアで実現されてもよい。
【００５６】
プロセッサ１１，２１とメモリ１２，２２とストレージ１３，２３と電子回路１５，２５とを、処理回路という。つまり、暗号化装置１０及び復号装置２０の各部の機能は、処理回路により実現される。
【００５７】
実施の形態２．
実施の形態２では、公開データＡがある点が実施の形態１と異なる。実施の形態２では、この異なる点を説明し、同一の点については説明を省略する。
【００５８】
＊＊＊変数及び記法の説明＊＊＊
整数ｂ’と整数ｃ’とは、ｃ’＝ｎ−ｂ’の関係を満たす。
ｃｏｎｓｔ［４］とｃｏｎｓｔ［５］とは、異なる値である。また、ｃｏｎｓｔ［４］とｃｏｎｓｔ［５］とは、ｃｏｎｓｔ［１］とは異なる値である。
【００５９】
＊＊＊構成の説明＊＊＊
図９を参照して、実施の形態２に係る暗号化装置１０の構成を説明する。
暗号化装置１０は、機能構成要素として、事前計算部１１８を備える点が図１に示す暗号化装置１０と異なる。事前計算部１１８は、他の機能構成要素と同様に、ソフトウェア又はハードウェアで実現される。
【００６０】
図１０を参照して、実施の形態２に係る復号装置２０の構成を説明する。
復号装置２０は、機能構成要素として、事前計算部２１８を備える点が図２に示す復号装置２０と異なる。事前計算部２１８は、他の機能構成要素と同様に、ソフトウェア又はハードウェアで実現される。
【００６１】
＊＊＊動作の説明＊＊＊
図１１から図１２を参照して、実施の形態２に係る暗号化装置１０及び復号装置２０の動作を説明する。
実施の形態２に係る暗号化装置１０の動作は、実施の形態２に係る暗号化方法に相当する。また、実施の形態２に係る暗号化装置１０の動作は、実施の形態２に係る暗号化プログラムの処理に相当する。
実施の形態２に係る復号装置２０の動作は、実施の形態２に係る復号方法に相当する。また、実施の形態２に係る復号装置２０の動作は、実施の形態２に係る復号プログラムの処理に相当する。
【００６２】
図１１及び図１２を参照して、実施の形態２に係る暗号化装置１０及び復号装置２０の動作を説明する。
暗号化装置１０は、図１１に示す処理を実行した後、図３に示す処理を実行する。具体的には、暗号化装置１０は、図１１の処理Ｅ’’で計算された変数Ｓを、図３のステップＳ１３におけるデータＳ０として、図３に示す処理を実行する。
同様に、復号装置２０は、図１１に示す処理を実行した後、図５に示す処理を実行する。具体的には、復号装置２０は、図１１の処理Ｅ’’で計算された変数Ｓを、図５のステップＳ２３におけるデータＳ０として、図５に示す処理を実行する。
以下の説明では、暗号化装置１０が図１１に示す処理を実行する場合を説明する。復号装置２０が図１１に示す処理を実行する場合には、受付部１１１と分割部１１２と事前計算部１１８と通信インタフェース１４とを、受付部２１１と分割部２１２と事前計算部２１８と通信インタフェース２４と読み替えればよい。
【００６３】
（ステップＳ３１：受付処理）
受付部１１１は、公開データＡの入力を受け付ける。
具体的には、受付部１１１は、利用者によって入力装置が操作され入力された公開データＡを、通信インタフェース１４を介して受信する。受付部１１１は、公開データＡを外部のサーバ等から取得してもよい。
【００６４】
（ステップＳ３２：分割処理）
分割部１１２は、ステップＳ３１で受け付けられた公開データＡの長さＬｅｎ（Ａ）がｂ’ビットの倍数であるか否かを判定する。長さＬｅｎ（Ａ）がｂ’ビットの倍数でない場合には、長さＬｅｎ（Ａ）がｂ’ビットの倍数になるように、公開データＡの後に１を付加し、さらに後ろに０のビット列を付加して、データＡ＊を生成する。一方、長さＬｅｎ（Ａ）がｂ’ビットの倍数である場合には、公開データＡをデータＡ＊として扱う。
分割部１１２は、ステップＳ３１で受け付けられた公開データＡを、ｂ’ビット毎に分割して、ｂ’ビットのデータＡ［１］，．．．，データＡ［ａ］を生成する。“ａ”は１以上の整数である。
【００６５】
（ステップＳ３３：変数設定処理）
変数設定部１１３は、ｎビットの固定データＩＶを暗号化装置１０の内部の変数Ｓに設定する。固定データＩＶは、ｃｏｎｓｔ［１］とｃｏｎｓｔ［２］とｃｏｎｓｔ［３］とｃｏｎｓｔ［４］とｃｏｎｓｔ［５］とは、下位ｃ’ビットが異なるデータである。
【００６６】
（ステップＳ３４：事前計算処理）
事前計算部１１８は、ｉ＝１，．．．，ａ−１の各整数ｉについて昇順に以下の処理Ａ’’から処理Ｂ’’を実行する。その後、処理Ｃ’’から処理Ｅ’’を実行する。
【００６７】
（処理Ａ’’）
事前計算部１１８は、変数ＳとデータＡ［ｉ］にｃ’ビットのビット列を付加したデータＸ＊［ｉ］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、事前計算部１１８は、データＡ［ｉ］の後に０をｃ’ビット付加したデータＸ＊［ｉ］を用いる。
つまり、事前計算部１１８は、Ｓ＝Ｓ  ＸＯＲ  （Ａ［ｉ］｜｜０ｃ’）を計算する。
【００６８】
（処理Ｂ’’）
事前計算部１１８は、処理Ａ’’で更新された変数Ｓと鍵Ｋとを入力として暗号化関数Ｅを計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。
つまり、事前計算部１１８は、Ｓ＝ＥＫ（Ｓ）を計算する。
【００６９】
（処理Ｃ’’）
事前計算部１１８は、変数ＳとデータＡ［ａ］にｃ’ビットのビット列を付加したデータＸ＊［ａ］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、事前計算部１１８は、データＡ［ａ］の後に０をｃ’ビット付加したデータＸ＊［ａ］を用いる。
つまり、事前計算部１１８は、Ｓ＝Ｓ  ＸＯＲ  （Ａ［ａ］｜｜０ｃ’）を計算する。
【００７０】
（処理Ｄ’’）
事前計算部１１８は、公開データＡの長さがｂ’ビットの倍数である場合には、処理Ｂ’’で計算された変数Ｓと、定数ｃｏｎｓｔ［４］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、事前計算部１１８は、変数Ｓと、定数ｃｏｎｓｔ［４］をｃ’ビット表現したビット列の前に０をｂ’ビット付加したデータとを入力として、排他的論理和を計算する。つまり、事前計算部１１８は、Ｓ＝Ｓ  ＸＯＲ  （０ｂ’｜｜ｓｔｒ［ｃ’］（ｃｏｎｓｔ［４］））を計算する。
一方、事前計算部１１８は、公開データＡの長さがｂ’ビットの倍数でない場合には、処理Ｂ’’で計算された変数Ｓと、定数ｃｏｎｓｔ［５］とを入力として排他的論理和を計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。ここでは、事前計算部１１８は、変数Ｓと、定数ｃｏｎｓｔ［５］をｃ’ビット表現したビット列の前に０をｂ’ビット付加したデータとを入力として、排他的論理和を計算する。つまり、事前計算部１１８は、Ｓ＝Ｓ  ＸＯＲ  （０ｂ’｜｜ｓｔｒ［ｃ’］（ｃｏｎｓｔ［５］））を計算する。
【００７１】
（処理Ｅ’’）
事前計算部１１８は、処理Ｄ’’で更新された変数Ｓを入力として暗号化関数Ｅを計算して、得られたデータを変数Ｓに設定することにより変数Ｓを更新する。つまり、事前計算部１１８は、Ｓ＝ＥＫ（Ｓ）を計算する。
【００７２】
＊＊＊実施の形態２の効果＊＊＊
以上のように、実施の形態２に係る暗号化装置１０及び復号装置２０は、公開データＡがある場合にも、ブロック暗号の復号関数を用いることなく、ブロック暗号の暗号化関数Ｅと排他的論理和ＸＯＲとから認証暗号アルゴリズムを構成可能である。また、内部変数である変数Ｓのサイズはｎビットである。したがって、実装サイズを認証暗号アルゴリズムＪＡＭＢＵと同等にしつつ、内部変数のサイズを認証暗号アルゴリズムＪＡＭＢＵよりも小さくすることができる。
【００７３】
固定データＩＶとｃｏｎｓｔ［１］とｃｏｎｓｔ［２］とｃｏｎｓｔ［３］とｃｏｎｓｔ［４］とｃｏｎｓｔ［５］との例を説明する。例えば、固定データＩＶ＝０ｎ、ｃｏｎｓｔ［１］＝３、ｃｏｎｓｔ［２］＝１、ｃｏｎｓｔ［３］＝２、ｃｏｎｓｔ［４］＝１、ｃｏｎｓｔ［５］＝２である。この場合、整数ｃ’≧３、整数ｃ’’≧３であればよい。
【００７４】
整数ｃの値は、安全性を考慮して決定される。実施の形態１，２で説明した認証暗号アルゴリズムは、暗号化関数Ｅｎｃで呼び出されるブロック暗号の暗号化関数Ｅの回数が２ｎ／２回を超える、又は、復号関数Ｄｅｃで検証失敗時に呼び出されるブロック暗号の暗号化関数Ｅの回数が２ｃを超えるまで安全性を担保できる。呼び出されるブロック暗号の暗号化関数Ｅの回数がこれらの回数を超えた場合には、安全性を担保するためには、鍵Ｋを交換する必要がある。
例えば、復号関数Ｄｅｃで検証失敗時に呼び出されるブロック暗号の暗号化関数Ｅの回数を２１６に制限する場合には、整数ｃの最小値は１６になる。
【符号の説明】
【００７５】
１０  暗号化装置、１１  プロセッサ、１２  メモリ、１３  ストレージ、１４  通信インタフェース、１５  電子回路、１１１  受付部、１１２  分割部、１１３  変数設定部、１１４  関数計算部、１１５  認証子生成部、１１６  暗号文生成部、１１７  出力部、１１８  事前計算部、２０  復号装置、２１  プロセッサ、２２  メモリ、２３  ストレージ、２４  通信インタフェース、２５  電子回路、２１１  受付部、２１２  分割部、２１３  変数設定部、２１４  関数計算部、２１５  認証子生成部、２１６  メッセージ生成部、２１７  出力部、２１８  事前計算部。
【図１】
2019043921.tif 000003
【図２】
2019043921.tif 000004
【図３】
2019043921.tif 000005
【図４】
2019043921.tif 000006
【図５】
2019043921.tif 000007
【図６】
2019043921.tif 000008
【図７】
2019043921.tif 000009
【図８】
2019043921.tif 000010
【図９】
2019043921.tif 000011
【図１０】
2019043921.tif 000012
【図１１】
2019043921.tif 000013
【図１２】
2019043921.tif 000014
【手続補正書】
【提出日】令和1年9月24日(2019.9.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成する分割部と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定部と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する関数計算部と、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成する暗号文生成部と、
前記関数計算部によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔを生成する認証子生成部であって、前記メッセージＭの長さがｂビットの倍数である場合には、前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して前記認証子Ｔを生成する認証子生成部と
を備える暗号化装置。
【請求項２】
前記変数設定部は、ｎビットのデータＳ０と、初期パラメータＮに定数ｃｏｎｓｔ［１］が連結されたデータＹとを入力として前記排他的論理和を計算して得られたデータを、前記変数Ｓに設定する
請求項１に記載の暗号化装置。
【請求項３】
前記分割部は、公開データＡをｂ’ビット毎に分割して、ｂ’ビットのデータＡ［１］，．．．，データＡ［ａ］を生成し、
前記変数設定部は、ｎビットの固定データＩＶを前記変数Ｓに設定し、
前記暗号化装置は、さらに、
ｉ＝１，．．．，ａの各整数ｉについて昇順に、前記変数ＳとデータＡ［ｉ］にｃ’＝ｎ−ｂ’ビットのビット列を付加したデータＸ＊［ｉ］とを入力として排他的論理和を計算して得られたデータにより変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新する事前計算部
を備え、
前記変数設定部は、前記事前計算部によって更新された前記変数Ｓを前記データＳ０とする
請求項２に記載の暗号化装置。
【請求項４】
前記データＸ［ｉ］は、前記データＭ［ｉ］の下位にｃビットのビット列が付加され、
前記データＣ［ｉ］は、前記変数Ｓの上位ｂビットを抽出してを生成される
請求項１から３までのいずれか１項に記載の暗号化装置。
【請求項５】
暗号文Ｃをｂビット毎に分割して、ｂビットのデータＣ［１］，．．．，データＣ［ｍ］を生成する分割部と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定部と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから抽出されたｂビットとデータＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算し、更新された前記変数Ｓと前記データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新する関数計算部と、
ｉ＝１，．．．，ｍの各整数ｉについて、前記データＭ［ｉ］を連結して前記暗号文Ｃを復号したメッセージＭを生成するメッセージ生成部と、
前記関数計算部によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔ’を生成する認証子生成部であって、前記暗号文Ｃの長さがｂビットの倍数である場合には、前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して前記認証子Ｔ’を生成する認証子生成部と
を備える復号装置。
【請求項６】
前記変数設定部は、ｎビットのデータＳ０と、初期パラメータＮに定数ｃｏｎｓｔ［１］が連結されたデータＹとを入力として前記排他的論理和を計算して、前記変数Ｓに設定する
請求項５に記載の復号装置。
【請求項７】
前記分割部は、公開データＡをｂ’ビット毎に分割して、ｂ’ビットのデータＡ［１］，．．．，データＡ［ａ］を生成し、
前記変数設定部は、ｎビットの固定データＩＶを前記変数Ｓに設定し、
前記復号装置は、さらに、
ｉ＝１，．．．，ａの各整数ｉについて昇順に、前記変数ＳとデータＡ［ｉ］にｃ’＝ｎ−ｂ’ビットのビット列を付加したデータＸ＊［ｉ］とを入力として排他的論理和を計算して得られたデータにより変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新する事前計算部
を備え、
前記変数設定部は、前記事前計算部によって更新された前記変数Ｓを前記データＳ０とする
請求項６に記載の復号装置。
【請求項８】
前記データＸ［ｉ］は、前記データＭ［ｉ］の下位にｃビットのビット列が付加され、
前記データＣ［ｉ］は、前記変数Ｓの上位ｂビットを抽出してを生成される
請求項５から７までのいずれか１項に記載の復号装置。
【請求項９】
前記認証子生成部は、前記認証子Ｔ’と、前記メッセージＭに対応する認証子Ｔとが一致するか否かを判定する
請求項５から８までのいずれか１項に記載の復号装置。
【請求項１０】
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成し、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定し、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成し、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成し、
前記メッセージＭの長さがｂビットの倍数である場合には、最後に更新された前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、最後に更新された前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから１以上の整数ｔビット抽出して認証子Ｔを生成する暗号化方法。
【請求項１１】
暗号文Ｃをｂビット毎に分割して、ｂビットのデータＣ［１］，．．．，データＣ［ｍ］を生成し、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定し、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから抽出されたｂビットとデータＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算し、更新された前記変数Ｓと前記データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、
ｉ＝１，．．．，ｍの各整数ｉについて、前記データＭ［ｉ］を連結して前記暗号文Ｃを復号したメッセージＭを生成し、
前記暗号文Ｃの長さがｂビットの倍数である場合には、最後に更新された前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、最後に更新された前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して１以上の整数ｔビットの認証子Ｔ’を生成する復号方法。
【請求項１２】
メッセージＭをｂビット毎に分割して、ｂビットのデータＭ［１］，．．．，データＭ［ｍ］を生成する分割処理と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定処理と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数ＳとデータＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｂビットを抽出してデータＣ［ｉ］を生成する関数計算処理と、
ｉ＝１，．．．，ｍの各整数ｉについての前記データＣ［ｉ］を連結して前記メッセージＭの暗号文Ｃを生成する暗号文生成処理と、
前記関数計算処理によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔを生成する認証子生成処理であって、前記メッセージＭの長さがｂビットの倍数である場合には、前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して前記認証子Ｔを生成する認証子生成処理と
をコンピュータに実行させる暗号化プログラム。
【請求項１３】
暗号文Ｃをｂビット毎に分割して、ｂビットのデータＣ［１］，．．．，データＣ［ｍ］を生成する分割処理と、
ｎ＝ｂ＋ｃビットのデータを変数Ｓに設定する変数設定処理と、
ｉ＝１，．．．，ｍの各整数ｉについて昇順に、前記変数Ｓを入力としてブロック暗号の暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓから抽出されたｂビットとデータＣ［ｉ］とを入力として排他的論理和を計算してデータＭ［ｉ］を計算し、更新された前記変数Ｓと前記データＭ［ｉ］にｃビットのビット列を付加したデータＸ［ｉ］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新する関数計算処理と、
ｉ＝１，．．．，ｍの各整数ｉについて、前記データＭ［ｉ］を連結して前記暗号文Ｃを復号したメッセージＭを生成するメッセージ生成処理と、
前記関数計算処理によって最後に更新された前記変数Ｓから１以上の整数ｔビットの認証子Ｔ’を生成する認証子生成処理であって、前記暗号文Ｃの長さがｂビットの倍数である場合には、前記変数Ｓと定数ｃｏｎｓｔ［２］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、前記メッセージＭの長さがｂビットの倍数でない場合には、前記変数Ｓと前記定数ｃｏｎｓｔ［２］とは異なる定数ｃｏｎｓｔ［３］とを入力として排他的論理和を計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓを入力として前記暗号化関数Ｅを計算して得られたデータにより前記変数Ｓを更新し、更新された前記変数Ｓからｔビット抽出して前記認証子Ｔ’を生成する認証子生成処理と
をコンピュータに実行させる復号プログラム。
【国際調査報告】
2019043921.tif 000015
2019043921.tif 000016
2019043921.tif 000017
2019043921.tif 000018