(57)【要約】【課題】  ハッシュ関数を用いた暗号化を効率化する。【解決手段】  相異なる擬似ランダム関数を使用するのではなく同じ擬似ランダム関数を２回使用する暗号化方法により、暗号化を効率化する。さらに、本発明は、非常に効率的なハッシュ関数を使用する。本発明のハッシュ関数は、乗算を使用するのではなくキーａとデータストリングｍの和を２乗する２乗ハッシュ関数h(m)=(m+a)2 mod nである（データストリングのビット数は2n）。その結果、ハッシュ演算は、従来技術で使用される非効率的なハッシュ関数によって要求されるw2回の演算ではなく、(w2+w)/2回の演算しか必要としない。さらに、本発明は、従来技術の排他的OR演算を、ｎを法とする加算で置き換える。擬似ランダム関数ｆは、好ましくは、周知の標準であるSHA擬似ランダム関数である。【選択図】        図３
2004361969.tif 000002
【特許請求の範囲】
【請求項１】
容易に傍受できるセルラー通信において使用されるデータにデータセキュリティを提供するために電気的ビット系列にあるデータを暗号化する方法において、該方法は、コンピュータ内のプロセッサにおいてプログラムを通して実行されており、該プログラムは、
前記電気的ビット系列にあるデータのブロックを入力して、該入力したブロックを第１のｎビットストリング（Ｒ）と第２のｎビットストリング（Ｌ）に分割するステップと、
第１のキーを用いて前記第１のｎビットストリングの２乗ハッシュを実行して第１のハッシュ結果を生成するステップと、
前記第１のハッシュ結果と前記第２のｎビットストリングをｎを法として加算して第１の和（Ｓ）を生成するステップと、
前記第１の和を第２のキーによる擬似ランダム関数のオペランドとして使用して第１の擬似ランダム結果を生成するステップと、
前記第１の擬似ランダム結果と前記第１のｎビットストリングをｎを法として加算して第２の和（Ｔ）を生成するステップと、
前記第２の和を第３のキーによる前記擬似ランダム関数のオペランドとして使用して第２の擬似ランダム結果を生成するステップと、
前記第２の擬似ランダム結果と前記第１の和をｎを法として加算して第３の和（Ｖ）を生成するステップと、
第４のキーを用いて前記第３の和の２乗ハッシュを実行して第２のハッシュ結果を生成するステップと、
前記第２の和と前記第２のハッシュ結果をｎを法として加算して第４の和（Ｗ）を生成するステップと、
前記入力したデータの暗号化表現として、前記第３の和と前記第４の和を電気的ビット系列として出力するステップとからなる方法。
【請求項２】
前記第２のキーと前記第３のキーは等しいことを特徴とする請求項１に記載の方法。
【請求項３】
前記擬似ランダム関数はＳＨＡ擬似ランダム関数であることを特徴とする請求項１に記載の方法。
【請求項４】
前記第２のキーと前記第３のキーは等しいことを特徴とする請求項３に記載の方法。
【請求項５】
容易に傍受できるセルラー通信において使用されるデータにデータセキュリティを提供するために電気的ビット系列にあるデータを暗号化する方法において、該方法は、コンピュータ内のプロセッサにおいてプログラムを通して実行されており、該プログラムは、
前記電気的ビット系列にあるデータのブロックを入力して、該入力した通信データのブロックを第１のｎビットストリング（Ｒ）と第２のｎビットストリング（Ｌ）に分割するステップと、
第１のハッシュ関数を用いて、第１のキーによる前記第１のｎビットストリングのハッシュを実行して第１のハッシュ結果を生成するステップと、
前記第１のハッシュ結果と前記第２のｎビットストリングをｎを法として加算して第１の和（Ｓ）を生成するステップと、
前記第１の和を第２のキーによる擬似ランダム関数のオペランドとして使用して第１の擬似ランダム結果を生成するステップと、
前記第１の擬似ランダム結果と前記第１のｎビットストリングをｎを法として加算して第２の和（Ｔ）を生成するステップと、
前記第２の和を第３のキーによる前記擬似ランダム関数のオペランドとして使用して第２の擬似ランダム結果を生成するステップと、
前記第２の擬似ランダム結果と前記第１の和をｎを法として加算して第３の和（Ｖ）を生成するステップと、
第２のハッシュ関数を用いて、第４のキーによる第３の和のハッシュを実行して第２のハッシュ結果を生成するステップと、
前記第２の和と前記第２のハッシュ結果をｎを法として加算して第４の和（Ｗ）を生成するステップと、
前記入力したデータの暗号化表現として、前記第３の和と前記第４の和を電気的ビット系列として出力するステップとからなる方法。
【請求項６】
前記第１のハッシュ関数と前記第２のハッシュ関数は同じであることを特徴とする請求項５に記載の方法。
【請求項７】
前記擬似ランダム関数はＳＨＡ擬似ランダム関数であることを特徴とする請求項５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ操作に関し、特に、データ暗号化に関する。
【背景技術】
【０００２】
ブロックデータ暗号化とは、データのブロックあるいはストリングを入力し、対応する暗号化されたデータのブロックあるいはストリングを生成するものである。ブロック暗号化は、セルラ通信のような容易に傍受可能な通信を使用する際にデータセキュリティを提供するために用いられる。
【０００３】
以前は、データのブロックを暗号化するために、Luby-Rackoff法を用いた。この方法を図１に例示する。ステップ１００で、２ｎビットを含む暗号化されるべきデータのブロックを入力する。ステップ１０２で、２ｎビットの入力データのブロックあるいはストリングを、それぞれＬ0およびＲ0とラベルされたｎビットの２個のブロックに分割する。ステップ１０４で、Ｒ0データブロックは、擬似ランダム関数ｆ1のオペランドとして使用される。擬似ランダム関数ｆ1は、ＲＩＰＥ−ＭＤ擬似ランダム関数、ＧＧＭ擬似ランダム関数、あるいはＭＤ５擬似ランダム関数のような関数とすることが可能である。ステップ１０４からの出力と、ステップ１０２からのＬ0ビットストリングとの排他的ＯＲをとる。ステップ１０６の出力はステップ１０８に渡される。ステップ１０８で、ステップ１０６の出力をｎビットのＲ1として用い、Ｌ1は、同じくｎビットのＲ0に等しいとセットされる。ステップ１１０で、Ｒ1は第２の擬似ランダム関数ｆ2のオペランドとして使用される。擬似ランダム関数ｆ2は、擬似ランダム関数ｆ1とは異なる。ステップ１１２で、ステップ１１０によって得られる結果と、Ｌ1との排他的ＯＲをとる。ステップ１１４で、ステップ１１２の出力をｎビットストリングＲ2として記憶し、ストリングＬ2は、ｎビットストリングＲ1に等しいとセットされる。ステップ１１６で、ストリングＲ2は、擬似ランダム関数ｆ3のオペランドとして使用される。擬似ランダム関数ｆ3は、擬似ランダム関数ｆ1およびｆ2とは異なる。ステップ１１８で、擬似ランダム関数ｆ3の出力と、値Ｌ2の排他的ＯＲをとる。ステップ１２０で、ステップ１１８の出力をｎビットストリングＲ3として記憶し、ストリングＬ3は、ｎビットストリングＲ2に等しいとセットされる。ステップ１２２で、擬似ランダム関数ｆ4は、ストリングＲ3をオペランドとして使用して、ステップ１２４によって使用される出力を生成する。擬似ランダム関数ｆ4は、擬似ランダム関数ｆ1〜ｆ3とは異なる。ステップ１２４で、擬似ランダム関数ｆ4の出力と、ストリングＬ3の排他的ＯＲをとる。ステップ１２６で、ステップ１２４からの出力をｎビットストリングＲ4として記憶し、ストリングＬ4は、ｎビットストリングＲ3に等しいとセットされる。ステップ１２８で、ストリングＬ4およびＲ4は、図示された暗号化方法の２ｎビット出力として出力される。
【０００４】
図１の方法は、４個の相異なる擬似ランダム関数を使用し、その結果、計算量の大きい方法である。
【０００５】
図２に、データのブロックあるいはストリングを暗号化する第２の従来技術の方法を示す。この方法は、Naor-Reingold暗号化法として知られている。ステップ１４０で、暗号化されるべき２ｎビットのデータブロックを入力する。ステップ１４２で、この２ｎビットのデータは、式（１）のハッシュ関数のようなハッシュ関数のオペランドとして使用され、２ｎビットが出力される。
【０００６】
ｈ（ｍ）＝（ｍａ＋ｂ）ｍｏｄ  ｎ    （１）
【０００７】
ステップ１４４で、ステップ１４２により生成された２ｎビットを、それぞれｎビットからなるブロックＬ0およびＲ0に分解する。ステップ１４６で、擬似ランダム関数ｆ1は、データブロックＲ0をオペランドとして用いて、ステップ１４８によって使用される出力を生成する。擬似ランダム関数ｆ1は、例えば、図１に関して説明した擬似ランダム関数のうちの１つである。ステップ１４８で、ステップ１４６からの出力と、データブロックあるいはストリングＬ0の排他的ＯＲをとる。ステップ１５０で、ステップ１４８の出力を、ｎビットストリングＲ1として記憶し、ｎビットストリングＬ1は、ｎビットストリングＲ0に等しいとセットされる。ステップ１５２で、擬似ランダム関数ｆ2は、データストリングＲ1をオペランドとして用いて、ステップ１５４のための出力を生成する。擬似ランダム関数ｆ2は、擬似ランダム関数ｆ1とは異なる。ステップ１５４で、ｎを法として、ステップ１５２の出力と、データストリングＬ1の排他的ＯＲをとる。ステップ１５６で、ステップ１５４の出力をｎビットストリングＲ2として記憶し、ストリングＬ2は、ｎビットストリングＲ1に等しいとセットされる。ステップ１５８で、第２のハッシュ関数は、ｎビットストリングＬ2およびｎビットストリングＲ2の両方からの２ｎビットをオペランドとして用いて、ステップ１６０で出力される２ｎビット出力を生成する。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
図２に示される従来技術の暗号化法も計算量が大きい。これは、２個の擬似ランダム関数および２個の非効率的なハッシュ関数を使用する。式（１）のハッシュ関数のようなハッシュ関数は、キー（ａ）とデータストリングの乗算を含む。このような乗算は計算量が大きく、ｗ2回の乗算を含む。ただし、ｗは、データストリング内のワード数である。例えば、データブロックの長さが１６０ビットであり、この方法を実行するプロセッサが３２ビットワードを使用する場合、５ワードでストリングを構成し、その結果、この乗算を実行するには５2すなわち２５回の演算が必要である。
【課題を解決するための手段】
【０００９】
本発明は、相異なる擬似ランダム関数を使用するのではなく同じ擬似ランダム関数を２回使用する暗号化方法を提供することによって、上記の非効率性を解決する。さらに、本発明は、非常に効率的なハッシュ関数を使用する。本発明のハッシュ関数は、乗算を使用するのではなくキーとデータストリングの和を２乗する２乗ハッシュ関数である。その結果、ハッシュ演算は、従来技術で使用される非効率的なハッシュ関数によって要求されるｗ2回の演算ではなく、（ｗ2＋ｗ）／２回の演算しか必要としない。さらに、本発明は、従来技術の排他的ＯＲ演算を、ｎを法とする加算で置き換える。
【発明の効果】
【００１０】
本発明によれば、ハッシュ関数を用いた暗号化において、相異なる擬似ランダム関数を使用するのではなく同じ擬似ランダム関数を２回使用する暗号化方法を提供することによって、従来技術の非効率性を解決することができる。
【発明を実施するための最良の形態】
【００１１】
図３に、２乗ハッシュ関数と１種類の擬似ランダム関数を用いる効率的な暗号化法を示す。ステップ２００で、データのブロックあるいはストリングを暗号化のために入力する。ステップ２０２で、２ｎビットのストリングを、それぞれｎビットからなるストリングＬとＲに分解する。ステップ２０４で、式（２）の２乗ハッシュ関数のような２乗ハッシュ関数を使用する。
【００１２】
ｈ（ｍ）＝（ｍ＋ａ）2  ｍｏｄ  ｎ    （２）
【００１３】
このハッシュ関数は、キーＫ1と、データブロックＲをオペランドとして用いてｎビットの出力を生成する。ステップ２０６で、ステップ２０４からのｎビット出力を、ｎを法として、データブロックＬと加算する。ステップ２０８で、ステップ２０６からの出力をｎビットストリングＳとして記憶し、ストリングＲを、再びｎビットストリングブロックＲとして記憶する。ステップ２１０で、ｎビットブロックＳを、Ｋ2をキーとする擬似ランダム関数ｆのオペランドとして用いて、ステップ２１２で使用されるｎビット出力を生成する。擬似ランダム関数ｆは、図１および図２に関して説明した擬似ランダム関数のうちの１つとすることが可能であるが、好ましくは、周知の標準であるＳＨＡ擬似ランダム関数である。ステップ２１２で、ステップ２１０からの出力を、ｎを法として、データストリングＲと加算して、ｎビット出力を生成する。ステップ２１４で、ステップ２１２からのｎビット出力をｎビットストリングＴとして記憶し、ステップ２０８からのｎビットストリングを再びｎビットブロックＳとして記憶する。ステップ２１６で、ステップ２１０で使用したのと同じ擬似ランダム関数を、同じキーＫ2で再び使用して、データストリングＴに作用してｎビットストリングを生成する。ステップ２１８で、ステップ２１６からのｎビット出力を、ｎを法として、ｎビットストリングＳと加算する。ステップ２２０で、ステップ２１８からのｎビット出力をｎビットストリングＶとして記憶し、ｎビットストリングＴを再びストリングＴとして記憶する。ステップ２２２で、ステップ２０４で使用したのと同じ２乗ハッシュ関数を、Ｋ3をキーとして使用して、データストリングＶに作用してｎビット出力を生成する。ステップ２２６で、ステップ２２４の出力をｎビットストリングＷとして記憶し、ｎビットストリングＶを再びｎビットストリングＶとして記憶する。ステップ２２８で、データストリングＶおよびＷを使用して、入力ブロックあるいはストリングの暗号化表現である２ｎビット出力とする。
【００１４】
図４に、図３に示した暗号化法に対応する復号法を示す。ステップ２４０で、復号されるべき２ｎビット入力を入力する。ステップ２４２で、２ｎビット入力を、それぞれｎビットからなるストリングあるいはブロックＶとＷに分解する。ステップ２４４で、ｎビットストリングＶを、Ｋ3をキーとする式（２）によって記述される２乗ハッシュ関数のオペランドとして使用する。ステップ２４４は、ステップ２４６によって使用されるｎビット出力を生成する。ステップ２４６で、ステップ２４４の出力を、ｎを法とする演算を用いて、ストリングＷから減算する。ステップ２４８で、ステップ２４６の出力をｎビットストリングＴとして記憶し、ｎビットストリングＶを再びストリングＶとして記憶する。ステップ２５０で、暗号化プロセスで使用したのと同じ擬似ランダム関数を、Ｋ2をキーとして使用して、ストリングＴに作用してｎビット出力を生成する。ステップ２５２で、ステップ２５０からの出力を、ｎを法とする演算を用いてデータストリングＶから減算してｎビット出力を生成する。ステップ２５４で、ステップ２５２の出力をｎビットストリングＳとして記憶し、ｎビットストリングＴを再びストリングＴとして記憶する。ステップ２５６で、ステップ２５０と同じキーで同じ擬似ランダム関数がストリングＳに作用してｎビット出力を生成する。ステップ２５８で、ステップ２５６の出力を、ｎを法とする演算を用いてストリングＴから減算してｎビットストリングを生成する。ステップ２６０で、ステップ２５８からのｎビットストリングをｎビットストリングＲとして記憶し、ｎビットストリングＳを再びストリングＳとして記憶する。ステップ２６２で、式（２）によって記述される２乗ハッシュ関数を、Ｋ1をキーとして使用してデータストリングＲに作用してｎビット出力を生成する。ステップ２６４で、ステップ２６２からのｎビット出力を、ｎを法とする演算を用いてデータストリングＳから減算する。ステップ２６６で、ステップ２６４からのｎビット出力をｎビットストリングＬとして記憶し、ｎビットストリングＲを再びストリングＲとして記憶する。ステップ２６８で、ｎビットストリングＬおよびＲを、入力されたブロックあるいはストリングを復号したものに対応する２ｎビットブロックとして出力する。注意すべき点であるが、図３のステップ２０４および２２２、ならびに図４のステップ２４４および２６２のハッシュ関数を、他のハッシュ関数で置き換えることも可能である。また、注意すべき点であるが、ステップ２０４および２６２で使用されるハッシュ関数は同じでなければならず、ステップ２２２および２４４で使用されるハッシュ関数は同じでなければならない。また、図３のステップ２１０および２１６の擬似ランダム関数に対して、異なるキーまたは擬似ランダム関数を使用することも可能であり、図４のステップ２５０および２５６の擬似ランダム関数に対して、異なるキーまたは擬似ランダム関数を使用することも可能である。また、注意すべき点であるが、ステップ２１６および２５０で使用されるキーおよび擬似ランダム関数は同じでなければならず、ステップ２１０および２５６で使用されるキーおよび擬似ランダム関数は同じでなければならない。
【００１５】
本発明の一実施例では、ビット数ｎは１６０に等しい。その結果、２乗ハッシュ関数によって使用されるキーＫ1およびＫ3の長さはそれぞれ１６０ビットである。さらに、擬似ランダムＳＨＡ関数は２個のキーを使用する。第１のキーの長さは１６０ビットであり、第２のキーの長さは３５２ビットである。ＳＨＡ関数は、５１２ビットを１６０ビットに短縮する暗号化ハッシュ関数である。ＳＨＡ関数のオペランドは、式（３）に示すように、キーＫ2とデータブロックＢの連接である。ただし、ブロックＢは、図３および図４で説明した擬似ランダム関数のオペランドとして使用したｎビットのブロックあるいはストリングである。
【００１６】
ｆK2＝ＳＨＡ（Ｋ4，（Ｋ2，Ｂ））    （３）
【００１７】
キーＫ4の長さは１６０ビットであり、データを暗号化するユーザとデータを復号するユーザによって共有される秘密値である。
【００１８】
これらのキーは、データを暗号化するユーザとデータを復号するユーザの両方に既知の初期擬似乱数を用いて生成される。図５〜図８に、初期シードＳ0を用いてキーＫ1〜Ｋ4を生成するために使用されるプロセスを示す。図５に、キーを生成するプロセスの概略を示す。シードＳ0、公開定数ＰＣおよび公開キーＰＫを擬似ランダム関数ＳＨＡ（安全ハッシュ関数）に与える。
【００１９】
Ｓi＝ＳＨＡ（ＰＫ，（ＰＣ′，Ｓi-1））  （ｉ＝１，...，１１）  （４）
【００２０】
ステップ３０２で、式（４）によって例示されるＳＨＡ関数を繰り返し実行して値Ｓ1〜Ｓ11を生成する。値Ｓ1〜Ｓ11のそれぞれの長さは１６０ビットである。ステップ３０４で、値Ｓ1〜Ｓ11を多項式計算３０６に与える。
【００２１】
Ｘi＝（ＡＳi＋Ｂ）ｍｏｄ  Ｑ  （ｉ＝１，...，１１）    （５）
ただし、Ｑは、次数１６０の既約多項式である。
【００２２】
ステップ３０６で、式（５）を実行して、値Ｘ1〜Ｘ11を生成する。ただし、それぞれの値は１６０ビットを含む。式（５）は、多項式乗算の後に多項式加算を行うことを示している。ただし、オペランドＳiは、式（４）の出力Ｓiに対応する。多項式ＡおよびＢは、１６０ビットの１変数の任意の２個のランダム２元多項式である。式（５）を、Ｓiのそれぞれの値に対して実行して、値Ｘ1〜Ｘ11を生成する。それぞれの値Ｘiの長さは最初３２０ビットであり、２元既約多項式を用いて１６０ビットに短縮される。多項式算術および既約多項式は当業者に周知であり、Maurice Mignotte, "Mathematics for Computer Algebra", 1991, Springer-Verlag, New York、のような文献に記載されている。ステップ３１０で、ストリングＸ1〜Ｘ10の７６個の下位ビット（ＬＳＢ）およびＸ11の７２個のＬＳＢを用いて８３２ビットの集まりを作成する。ステップ３１０で生成されるこの８３２ビットは、キーＫ1〜Ｋ4に対応する。
【００２３】
図６および図７に、ＳＨＡ関数のオペランドが生成される方法を示す。想起すべき点であるが、ＳＨＡ関数は、１６０ビットのキーと５１２ビットのオペランドを用いて、１６０ビットの出力を生成する。図６に、ＳＨＡ関数に対するキーとして１６０ビットの公開キーＰＫを使用し、ＳＨＡ関数のオペランドとしてシードＳ0と、公開定数ＰＣの一部とを使用することによって、ストリングＳiが生成されることを示す。一般に、シードＳ0は、４０〜５１２ビットのどのビット数を含むことも可能であり、ＳＨＡ関数のオペランドは５１２ビットを必要とする。その結果、Ｓ0が５１２ビットより少ないときに、公開定数ＰＣのＬＳＢを使用して必要なビットを提供して、ＳＨＡ関数に対する５１２ビットのオペランドを生成する。例えば、シードＳ0のビット数がｘビットである場合、公開定数ＰＣの５１２−ｘ個の下位ビットをＳ0のビットと連接する。Ｓ0のビットは、ＳＨＡ関数に対する５１２ビットのオペランドの下位ビットとして使用される。図６に示す動作は、１６０ビットのストリングＳ1を生成する。図７は、残りのＳi（ここでｉ＝２、...、１１）を生成するプロセスを例示する。この場合も、ＳＨＡ関数は、１６０ビットのキーと、短縮されることになる５１２ビットのストリングとを必要とする。公開キーＰＫは、図７のＳＨＡ関数に対する１６０ビットキーとして使用され、短縮される５１２ビットのストリングは、前の１６０ビットストリングＳi-1と、公開定数ＰＣの３５２個のＬＳＢとの連接である。注意すべき点であるが、Ｓi-1は１６０ビットを提供するため、ＳＨＡ関数に対する全部で５１２ビットを生成するには、公開定数ＰＣから下位３５２ビットが必要である。Ｓi-1に対応する１６０ビットは、ハッシュされるべきストリングのＬＳＢとして使用され、公開定数ＰＣからの３５２個のＬＳＢは、ハッシュされるべきストリングの上位ビットとして使用される。
【００２４】
図５を想起すると、ストリングＳ1〜Ｓ11を生成した後、これらをそれぞれ、式（５）によって定義される多項式演算へのオペランドとして使用して、ストリングＸ1〜Ｘ11を生成する。ただし、各ストリングの長さは１６０ビットである。図８に、ストリングＸ1〜Ｘ11の集まりをどのようにして使用して、キーＫ1〜Ｋ4に対応する８３２ビットのストリングを生成するかを示す。ストリングＸ1〜Ｘ10の下位７６ビットと、ストリングＸ11の下位７２ビットを連接して、キーＫ1〜Ｋ4を生成するために使用される８３２ビットを生成する。この８３２ビットの下位ビットは、ストリングＸ1の下位７６ビットであり、その後は、ストリングＸ2の下位７６ビットであり、以下同様に続き、最後は、ストリングＸ11の下位７２ビットである。得られた８３２ビットストリングをキーＫ1〜Ｋ4に分解する。ただし、下位１６０ビットはキーＫ1に対応し、次の３５２ビットはキーＫ2に対応し、次の１６０ビットはキーＫ3に対応し、最後の１６０ビットはキーＫ4に対応する。
【図面の簡単な説明】
【００２５】
【図１】従来のLuby-Rackoff暗号化法の図である。
【図２】従来のNaor-Reingold暗号化法の図である。
【図３】２乗ハッシュ関数を使用する効率的な暗号化法の図である。
【図４】２乗ハッシュ関数を使用する効率的な復号法の図である。
【図５】キーＫ1〜Ｋ4を生成するために用いられる方法の概略図である。
【図６】Ｓ1を生成するためにＳＨＡ関数に対するオペランドをどのように選択するかを説明する図である。
【図７】Ｓ2〜Ｓ11を生成するためにＳＨＡ関数に対するオペランドをどのように選択するかを説明する図である。
【図８】ストリングＸ1〜Ｘ11の下位ビットを用いてキーＫ1〜Ｋ4として使用される８３２ビットをどのようにして生成するかを説明する図である。
【図１】
2004361969.tif 000003
【図２】
2004361969.tif 000004
【図３】
2004361969.tif 000005
【図４】
2004361969.tif 000006
【図５】
2004361969.tif 000007
【図６】
2004361969.tif 000008
【図７】
2004361969.tif 000009
【図８】
2004361969.tif 000010