(57)【要約】【課題】暗号の堅牢化と、計算時間の削減という、相反する命題を同時に解決しつつ、暗号の単一性をも保証するような、擬似ランダム置換、および暗号化を可能とする。さらに、機密の保護を保ちつつ、デジットについての入力と出力を有するような構造を構築する。【解決手段】一般化されたＦｅｉｓｔｅｌスキーマを用いる。さらに、該構造におけるラウンド関数を、ラウンド関数の入力ワードが、デジットのワードを二進数のワードに変換することで生成され、これら二進数のワードに一方向関数を適用し、デジットでの出力が、これら二進数のワードの関数である、ような関数とする。さらに、最低でも５ラウンドを含む構造とする。【選択図】図２
2004258667.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個のデジットを含むワードの擬似ランダム置換の生成方法であり、該方法において、
・一般化されたＦｅｉｓｔｅｌスキーマがインプリメントされ、
該方法が、  
・インプリメントされる一般化されたＦｅｉｓｔｅｌスキーマにおけるラウンド関数が、次の（Ａ）から（Ｃ）の項目を満たす関数（Ｆｉ）であること、
（Ａ）ラウンド関数の入力ワードが、デジットのワードを二進数のワードに変換することで生成され、
（Ｂ）これらの二進数のワードに一方向関数を適用し、
（Ｃ）デジットでの出力が、これら二進数のワードの関数である、
・メモリの中で、暗号化すべきデジットのワードが読み込まれること、
・使用する一般化されたＦｅｉｓｔｅｌスキーマが、少なくともＴ＝５ラウンドを含むこと、
とを特徴とする方法。
【請求項２】
二進数のワードに対する一方向関数が、二進数のワードに対する暗号法の標準的な擬似ランダム関数を用いることを特徴とする、請求項１に記載の方法。
【請求項３】
二進数のワードに対する標準的な擬似ランダム関数が、関数ＳＨＡ−１を用いることを特徴とする、請求項１または請求項２に記載の方法。
【請求項４】
Ｆｅｉｓｔｅｌスキーマのラウンド数Ｔが３０以下であることを特徴とする、請求項１から請求項３のいずれか一つに記載の方法。
【請求項５】
Ｆｅｉｓｔｅｌスキーマのラウンド数Ｔが６に等しいことを特徴とする、請求項１から請求項４のいずれか一つに記載の方法。
【請求項６】
Ｆｅｉｓｔｅｌスキーマの奇数ラウンドのとき、ラウンド関数は長さＢの一ワードに作用し、Ｆｅｉｓｔｅｌスキーマの偶数ラウンドのとき、長さがＡのデジットである複数のワードに作用し、ここでＡ＋Ｂ＝Ｎであることを特徴とする、請求項１から請求項５のいずれか一つに記載の方法。
【請求項７】
Ａの値がＮ／２の整数部であり、Ｂの値がＮ−Ａであることを特徴とする、請求項６に記載の方法。
【請求項８】
Ｎが区間［７，３０］に含まれる整数であることを特徴とする、請求項１から請求項７のいずれか一つに記載の方法。
【請求項９】
Ｎが区間［１０，３０］に含まれる整数であることを特徴とする、請求項１から請求項８のいずれか一つに記載の方法。
【請求項１０】
Ｎが区間［１３，３０］に含まれる整数であることを特徴とする、請求項１から請求項８のいずれか一つに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｎ個のデジットを含むワードの置換における、擬似ランダムな計算方法を目的とする。
本発明の分野は暗号通信法である。より特徴的には、本発明の分野は、デジットで構成されるワードの暗号化に適用される暗号通信法である。
【０００２】
本発明の一つの目的は、Ｎ個のデジットで構成されるワードの、堅牢な暗号化を可能にすることであり、ここでＮは区間［７、３０］に含まれる。
【０００３】
本発明のもう一つの目的は、Ｎ個のデジットで構成されるワードの、迅速な暗号化を可能にすることであり、ここでＮは区間［７、３０］に含まれる。
【０００４】
本発明のもう一つの目的は、基数１０N の集合において、堅牢な擬似ランダム置換を決定することであり、従って、この基数は２の累乗ではない。
【０００５】
本発明のもう一つの目的は、例えば電話番号のような、デジットの使用に基づく識別子の暗号化を行うことである。
【０００６】
本発明のもう一つの目的は、擬似ランダムであるような、Ｎ個のデジットからなるチェーン（ストリング、文字列）を生成することである。  
つまり、そのチェーンを生成するために用いられた秘密鍵を知らない人にとっては、そのチェーンは、本当に乱数になっているチェーンとは、実際に区別ができないということである。
【０００７】
本発明のもう一つの目的は、生成過程が同じチェーンを二度生成しないことを保証するような、Ｎ個のデジットからなるチェーンを生成することである。
【背景技術】
【０００８】
現行技術では、ビットは、０という値または１という値を取ることができるサイズを意味する。これら二つの値は、コンピュータまたはメモリの中で、二つの値を取ることが可能な、一つの電気信号によって物理的に表示され、一つが０に、もう一つが１に結び付けられている。二進数のワードは、整列させられたビットの連続物である。
【０００９】
デジットとは、０、１、２、３、４、５、６、７、８、９という値の一つをとることができるサイズのことである。
デジットは、ビットでコード化することができる。その場合、各デジットに二進数のワードが対応する。
一般的に、この二進数のワードは４ビットの長さであるが、８ビット（ＡＳＣＩＩコード）もしくはそれ以上の長さの二進数のワードも考えられる。
デジットのワードは、整列させられたデジットの連続物である。
【００１０】
一つの置換は一つの有限集合への全単射である。
【００１１】
秘密鍵Ｋに基づいて計算できる程に単純な情報プログラムによって生成される置換は、「擬似ランダム置換」と名づけられており、その秘密鍵Ｋは、その鍵Ｋを知らない人が、そのような置換を、（入力と出力のサイズが同じ）本当に乱数である置換と区別することは、実際にはできない、という特性を有する。
なぜなら、既知の方法でそれらを区別するために行うべき計算の回数が、現実的な方法で実行可能な数を越えているからである。
【００１２】
現に、一つの問題を解くのに２８０回（またはそれ以上）の基本的な計算をしなければならないとすれば、この計算回数は、潜在的なハッカーにとって過大である。
【００１３】
現行技術では、要素数が２の累乗の集合における置換が知られている。
これらの置換を、要素数が２の累乗ではない集合に適合させるための試みも知られている。そのような技術は、ｎ個の要素を含む集合Ｅの要素を暗号化するために、２の累乗からなる要素数を含むＥの上位集合ＳＥに作用する置換Ｐを用いることからなる。
Ｃｋ（ｘ）を決定するため、つまり、Ｅに属するｘの暗号化を鍵Ｋで行うために、まず以下の式を用いて、ｎ個の要素からなる（ｎ−ｕｐｌｅｔ）Ｖを計算する。
Ｖ＝｛Ｐｋ（ｉ）｝、ここでｉはＥを記述している。
【００１４】
Ｖのすべての要素が異なっているので、Ｖの各要素をｏＶの中の要素の列で置き換えてｎ個の要素からなる（ｎ−ｕｐｌｅｔ）Ｗが生成されるが、ここでｏＶは、整列させられた、ｎ個の要素からなる（ｎ−ｕｐｌｅｔ）Ｖである。
そのとき、Ｃｋ（ｘ）はＷのｘ番目の要素だということが得られる。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
この方法の不都合な点は、ワードを暗号化／復号化するためには、最初の集合のワードすべてを暗号化／復号化しなければならないということである。
このことは、膨大で手が出せないほどの計算時間をもたらす。そのような計算には実際、膨大な時間がかかり、それが、クライアントサーバアプリケーションにおいて、サーバの応答時間を削減することになる。
クライアントが携帯電話のような自律的な携帯機器であり、クライアントがこのような方法をインプリメントしなければならない場合は、クライアントはサーバよりも少ない計算能力しか使えないため、この不都合はさらに有害である。
【００１６】
２の累乗ではない要素数を含む集合Ｅの置換を実現するための、既知のもう一つの方法は、Ｅの上位集合ＳＥを考慮することであり、ここで、ＳＥは２の累乗である要素数と、集合ＳＥの置換Ｐとを含む。
【００１７】
そのとき、Ｃｋ（ｘ）つまり鍵ｋについてのｘの暗号化は、以下の回帰アルゴリズムによって得られる。
アルゴリズムＣｋ（ｘ）
ｙ＝Ｐｋ（ｘ）
ｉｆ  ｙ  ｉｓ  ｉｎ  Ｅ  ｔｈｅｎ  ｒｅｔｕｒｎ  ｙ
ｅｌｓｅ  ｒｅｔｕｒｎ  Ｃｋ（ｙ）
ｅｎｄ
【００１８】
この方法の弱点は、使用するアルゴリズムの収束時間にある。実際、膨大な計算をしようとするので、その場合には、計算時間が手のつけられないものになるということも起こりうる。
【００１９】
現行技術において、置換に基づかない、つまり全単射に基づかない他の暗号化の解決策も知られている。しかしながら、可逆的暗号化を行おうとする限り、暗号化の結果が単一であるということを保証しなければならない。
そういうわけで、実際には、いくつかのアプリケーションにおいて、暗号の単一性を保証するために、何年も前から生成したデジットのすべてのチェーンを保存しているような人々も、実業家やオペレータの中には存在する。
そうすることで彼らは、各チェーンが新しいものであることを確認することができる。なぜなら、既に用いられたチェーンが生成されたならば、それを検知し、そのチェーンを新たに循環させずに、他のチェーンを生成するからである。
しかし、そのような方法には費用がかかり、長い目で見て簡便ではないことがわかる。なぜならば、多くのメモリを早く自由に使用し、膨大で、高度に機密保持された場所に急速にアクセス可能な、バックアップ手段も持つ必要があるからである。
さらに、行うべき計算数は、既に生成された値の数と共に増大し、それゆえに、時間とともに増大する。
【００２０】
特に、これら三つの解決策は、クレジットカード型の番号や電話番号に対する置換を生成するには、あまり良い性能は示さない。
実際、実施すべき計算数は手のつけられないものとなりえ、暗号の機密保持も確実とはいえない。
これら三つの解決策の代わりに、これから説明するように、デジットについての擬似ランダム置換の生成器を用いることが可能である。同じ値が二回生成されないようにすることは、生成器の全単射的特徴により保証されることになる（生成器は置換を生成する）。
【００２１】
現に、あらゆる標準的な暗号関数は、秘密鍵暗号方式において、入力において一定数のビットを取り入れ、出力において一定数のビットを出力する。それは例えば、関数ＳＨＡ−１、関数ＤＥＳ、関数ＡＥＳなどの場合にあてはまる。
ところで、いくつかの産業機器への応用では、例えば電話の場合、入力と出力で得たいと思うのは、一定数のビットではなく、一定数のデジットである。
そのために、一つの解決法は、特定の関数を書き直すということになるが、それらの検討には膨大な時間がかかりかねず、そのような関数はまず、国際的な暗号社会ではほとんど分析されないであろう。
そこで、本発明によれば、デジットについての入力と出力を有する構造を構築することができ、該構造はその内部で、機密保護を確実にするために、ビットについては従来の暗号関数を用いる。特徴的な問題に対して、ここでインプリメントされるのは、そのような方法である。
【課題を解決するための手段】
【００２２】
本発明の主題と目的とをよりよく把握するために、ここでＦｅｉｓｔｅｌスキーマに関するいくつかの概念を簡潔におさらいしておく。
まずＦｅｉｓｔｅｌスキーマと呼ばれるものを定義しよう。
【００２３】
ｎを自然数とする。Ｉｎ＝｛０、１｝ｎはｎビットのチェーンの集合である。
【００２４】
ｆ１をＩｎからＩｎへの任意の関数とする。
【００２５】
ＧとＤをＩｎの二つの要素とする。
【００２６】
［Ｇ，Ｄ］はＩ２ｎの要素で、その最初のｎ個のビットの値はＧで、それに続くｎ個の値はＤである。
【００２７】
Ψ（ｆ１）は、Ｉ２ｎからＩ２ｎに向かう全単射で、この全単射は、Ｉ２ｎのすべての［Ｇ，Ｄ］、そしてＩ２ｎのすべての［Ｕ，Ｖ］ついて、次式
【００２８】
【数１】
2004258667.tif 000003
【００２９】
が成り立つ時に、（かつ、成り立つ時に限って、）Ψ（ｆ１）［Ｇ，Ｄ］＝［Ｕ，Ｖ］というような全単射であり、ここで次の演算
【００３０】
【数２】
2004258667.tif 000004
【００３１】
は、「ＸＯＲ」演算（あるいはビットとビットの加算剰余２（加算ｍｏｄ  ２））を示す。
【００３２】
Ψ（ｆ１）は確かに全単射である。なぜなら、その逆関数が、次式
【００３３】
【数３】
2004258667.tif 000005
【００３４】
となるような関数ｇだからである。
【００３５】
最後に、Ｔは整数で、Ｆｅｉｓｔｅｌスキーマのラウンド数と呼ぶものであり、ｆ１、ｆ２、．．．、ｆＴは、Ｔ回のラウンド関数と呼ばれる、ＩｎからＩｎへのＴ回の関数であるので、Ｉ２ｎからＩ２ｎに向かう全単射をΨ（ｆ１、ｆ２、．．．、ｆＴ）と記し、Ψ（ｆ１、ｆ２、．．．、ｆＴ）＝Ψ（ｆＴ）．．．°Ψ（ｆ２）°Ψ（ｆ１）、である。
ここで「°」は関数の結合法則を示す。
【００３６】
全単射Ψ（ｆ１、ｆ２、．．．、ｆＴ）を「ＴラウンドでのＦｅｉｓｔｅｌスキーマ」と呼ぶ。
【００３７】
では、一般化されたＦｅｉｓｔｅｌスキーマと呼ばれるものを定義しよう。
Ｆｅｉｓｔｅｌスキーマの、この異なった態様の根底にある考え方は次のようなものである。
２ｎビットを得るために、ｎビットの二つの等しい部分に分割する代わりとして、より一般的に、ラウンド毎に一つのａビットの部分ともう一つのｂビットの部分に分割することも可能であり、ここでａ＋ｂ＝Ｎ（Ｎはこの場合、入力ビットと出力ビットの合計数である）である。
ラウンド数ｉに従ってａとｂを変化させることも可能であり、ラウンドに従って変化するａとｂの値はａｉとｂｉとで記される。そうして一般化されたＦｅｉｓｔｅｌスキーマと呼ばれるものが得られる。
この定義は、下記のように詳細化できる。
【００３８】
ｎは任意の自然数であり、ｎビットのチェーンの集合を常にＩｎ＝｛０，１｝ｎと記す。
【００３９】
ａ、ｂそしてｎをａ＋ｂ＝ｎとなるような三つの自然数とする。
【００４０】
ｆ１をＩｂからＩａへの任意の関数とする。
【００４１】
ＧをＩａの一つの要素、ＤをＩｂの一つの要素とする。
【００４２】
Ｉｎの要素を［Ｇ，Ｄ］と記し、その最初のａビットの値がＧで、続くｂビットの値がＤである。
【００４３】
ＩｎからＩｎへの全単射をΨ’（ｆ１）と記し、この全単射は、Ｉｎのすべての［Ｇ，Ｄ］について、そしてＩｎのすべての［Ｕ，Ｖ］ついて、次式
【００４４】
【数４】
2004258667.tif 000006
【００４５】
が成り立つ時かつ成り立つ時に限り、Ψ’（ｆ１）［Ｇ，Ｄ］＝［Ｕ，Ｖ］となるような全単射であり、ここで次の演算
【００４６】
【数５】
2004258667.tif 000007
【００４７】
は「ＸＯＲ」演算（あるいはビットとビットの加算剰余２（加算ｍｏｄ２））を示す。
【００４８】
そして、λはａビットのビットについてローテーション（ｒｏｔａｔｅ）させる関数であり（新しい最初のビットは古い（ａ＋１）番目のビットであり、新しい二番目のビットは古い（ａ＋２）番目のビットであるなど）、
Ψ（ｆ１）＝λ°Ψ’（ｆ１）
と記す。
【００４９】
最後に、Ｔは整数であり、一般化されたＦｅｉｓｔｅｌスキーマのラウンド数と呼ばれる。そして、ｆｉは、１≦ｉ≦Ｔであり、Ｔ回のラウンド関数と呼ばれるＩｂｉからＩａｉへのＴ回の関数である。また、Ｉ２ｎからＩ２ｎに向かう全単射をΨ（ｆ１、ｆ２、．．．、ｆＴ）と記し、
Ψ（ｆ１、ｆ２、．．．、ｆＴ）＝Ψ（ｆＴ）．．．°Ψ（ｆ２）°Ψ（ｆ１）
である。ここで、「°」は関数の結合法則を示す。
【００５０】
全単射Ψ（ｆ１、ｆ２、．．．、ｆＴ）は、「Ｔラウンドでの一般化されたＦｅｉｓｔｅｌスキーマ」と呼ばれる。
【００５１】
ここでまた、一般化されたＦｅｉｓｔｅｌスキーマの特徴的な場合を、例えばａビットとｂビットを交替させることにより、考案することもできる。
したがって、ａビットを変化させる関数とｂビットを変化させる関数とを、以下に示すように交互に行うことも可能である。
【００５２】
そういうわけで、例えば、すべての奇数ラウンドについて、
ｆｉがＩｂからＩａへの関数であり、次式
【００５３】
【数６】
2004258667.tif 000008
【００５４】
が成り立つ時、（かつ、成り立つ時に限り、）
Ψ（ｆｉ）［Ｇ，Ｄ］＝［Ｕ，Ｖ］
というタイプの変換が得られることになる。
【００５５】
そしてすべての偶数ラウンドについては、次のタイプの変換が得られる。
Ψ（ｆｊ）［Ｇ，Ｄ］＝［Ｕ，Ｖ］
ｆｊはＩａからＩｂへの関数であり、次式
【００５６】
【数７】
2004258667.tif 000009
【００５７】
が成り立つ時である（かつ、成り立つ時に限る）。
【００５８】
本発明では一般化されたＦｅｉｓｔｅｌスキーマを用いて、上述の問題を解決する。使用する一般化されたＦｅｉｓｔｅｌスキーマは、最低でも５ラウンドを含む構造で、そして好ましい例においては６ラウンドである。
しかし、時には、さらにラウンド数を増やすことによって、暗号解析に対するより良い抵抗力が得られる。
したがって、本発明を活用するシステムの応答時間と両立可能な計算時間内に納めながら、３０ラウンドまで増やしてもよい。
一般化されたＦｅｉｓｔｅｌスキーマのラウンド関数は、入力（段階）においてａ個のデジットを入力し、出力（段階）においてｂ個のデジットを出力する。それらの関数は、二進数のワードに作用しなければならないとした上で、次の方法で実行される。
【００５９】
１．二進数のワードＡを、これらｂ個のデジット、鍵Ｋ、およびラウンド番号ｉに基づいて計算する。例えばここでは、それらの値の連結を、単純に二進数に変換することが問題となる。
２．Ｂ＝ｆ（Ａ）を計算するが、ここでｆはビットについての一方向関数である。この手順は一般的に、関数ｆの、一方向であるという特徴のために、機密保持のための最も重要な手順である。
３．Ｃ＝ｇ（Ｂ）を計算するが、ここでｇは、入力において二進数のワードを入力し、出力においてａ個のデジットを含むワードを出力する関数であり、例えばここでは、二進数のワードを単純にデジットに変換することが問題となる。
手順２としてしばしば取り上げられる関数ｆは、Ｂがそのような直接変換に適合したフォーマットを正確に有するような関数である。
【００６０】
このように、ラウンド関数の出力の二進数のワードは、デジットに変換される。
そのようなラウンド関数は、例えば、ハッシュアルゴリズムＳＨＡ−１（機密保護手段を講じたハッシュアルゴリズムである、Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ）に基づく。
この構造により、デジットで構成される要素の集合の中で擬似ランダム置換が得られる。
置換、つまり全単射的特徴は、構造、Ｆｅｉｓｔｅｌスキーマの利用によって保証される。
擬似ランダム的な側面も保証される。なぜなら、ここでは少なくとも５ラウンド用いられるので、既知の暗号に対するいかなる攻撃も、この暗号化の方法を打ち破ることはできないからである。
【００６１】
したがって、本発明はＮ個のデジットを含むワードの擬似ランダム置換の生成方法を対象とし、該方法において、
・一般化されたＦｅｉｓｔｅｌスキーマがインプリメントされ、
該方法が、  
・インプリメントされる一般化されたＦｅｉｓｔｅｌスキーマにおけるラウンド関数が、次の（Ａ）から（Ｃ）の項目を満たす関数（Ｆｉ）であること、
（Ａ）ラウンド関数の入力ワードが、デジットのワードを二進数のワードに変換することで生成され、
（Ｂ）これらの二進数のワードに一方向関数を適用し、
（Ｃ）デジットでの出力が、これら二進数のワードの関数である、
・メモリの中で、暗号化すべきデジットのワードが読み込まれること、
・使用する一般化されたＦｅｉｓｔｅｌスキーマが、少なくともＴ＝５ラウンドを含むこと、
とを特徴としている。
【００６２】
すなわち、本発明の課題を解決するための手段は、次のとおりである。
【００６３】
第１に、
Ｎ個のデジットを含むワードの擬似ランダム置換の生成方法であり、該方法において、
・一般化されたＦｅｉｓｔｅｌスキーマがインプリメントされ、
該方法が、  
・インプリメントされる一般化されたＦｅｉｓｔｅｌスキーマにおけるラウンド関数が、次の（Ａ）から（Ｃ）の項目を満たす関数（Ｆｉ）であること、
（Ａ）ラウンド関数の入力ワードが、デジットのワードを二進数のワードに変換することで生成され、
（Ｂ）これらの二進数のワードに一方向関数を適用し、
（Ｃ）デジットでの出力が、これら二進数のワードの関数である、
・メモリの中で、暗号化すべきデジットのワードが読み込まれること、
・使用する一般化されたＦｅｉｓｔｅｌスキーマが、少なくともＴ＝５ラウンドを含むこと、
とを特徴とする方法。
第２に、
二進数のワードに対する一方向関数が、二進数のワードに対する暗号法の標準的な擬似ランダム関数を用いることを特徴とする、上記第１に記載の方法。
第３に、
二進数のワードに対する標準的な擬似ランダム関数が、関数ＳＨＡ−１を用いることを特徴とする、上記第１または上記第２に記載の方法。
第４に、
Ｆｅｉｓｔｅｌスキーマのラウンド数Ｔが３０以下であることを特徴とする、上記第１から上記第３のいずれか一つに記載の方法。
第５に、
Ｆｅｉｓｔｅｌスキーマのラウンド数Ｔが６に等しいことを特徴とする、上記第１から上記第４のいずれか一つに記載の方法。
第６に、
Ｆｅｉｓｔｅｌスキーマの奇数ラウンドのとき、ラウンド関数は長さＢの一ワードに作用し、Ｆｅｉｓｔｅｌスキーマの偶数ラウンドのとき、長さがＡのデジットである複数のワードに作用し、ここでＡ＋Ｂ＝Ｎであることを特徴とする、上記第１から上記第５のいずれか一つに記載の方法。
第７に、
Ａの値がＮ／２の整数部であり、Ｂの値がＮ−Ａであることを特徴とする、上記第６に記載の方法。
第８に、
Ｎが区間［７，３０］に含まれる整数であることを特徴とする、上記第１から上記第７のいずれか一つに記載の方法。
第９に、
Ｎが区間［１０，３０］に含まれる整数であることを特徴とする、上記第１から上記第８のいずれか一つに記載の方法。
第１０に、
Ｎが区間［１３，３０］に含まれる整数であることを特徴とする、上記第１から上記第８のいずれか一つに記載の方法。
【発明の効果】
【００６４】
本発明の教示に従って、Ｎ個のデジットを含むワードの擬似ランダム置換の生成を行うことにより、擬似ランダムな計算、特に、堅牢な擬似ランダム置換を行うことが可能となる。このことにより、擬似ランダムであるような、デジットのチェーンを作成することが可能となる。
そして、一般化されたＦｅｉｓｔｅｌスキーマがインプリメントされ、該構造のラウンド関数を、デジットと二進数間の変換を考慮したものとし、かつ一方向関数を適用することによって、暗号の堅牢化と、膨大な計算時間の削減という、互いに相反する問題を同時に解決することが可能となる。また、本発明に係る構造の全単射性により、暗号の単一性をも保証することも可能となる。さらに、暗号化／複合化において、デジットについての入力と出力を有する構造を構築することも可能となる。
ここで、該構造はその内部で、機密保護を確実にするために、ビットについては従来の暗号関数を用いることができる。即ち、従来の暗号関数を組み込むことが可能である。
【発明を実施するための最良の形態】
【００６５】
本発明は以下の説明を読み、添付図面を検討することにより、さらによく理解されるだろう。
これらの図面は本発明の指標として示されるのであって、まったく限定的ではない。
−  図１は、本発明による方法のインプリメンテーションにおいて、有利な手段を示す図である。
−  図２は、本発明による方法の手順を示す図である。
【００６６】
一般的に、マイクロプロセッサと、そのマイクロプロセッサを制御するための指示コードを備えたメモリとを含んだ装置が、以下において説明されるような動作を請け負う。
それらの指示コードは、本発明による方法の手順のインプリメンテーションに対応している。
ワードは、二進数であるにせよ、デジットであるにせよ、メモリまたはレジスタ中の、大きさの電気的表示、あるいは電気信号である。
一つの機器に一つの動作を与えるとき、その動作は、その機器のマイクロプロセッサによって実行され、該マイクロプロセッサは、その機器のメモリの中に登録されている指示コードによって制御される。
【００６７】
図１は、本発明の方法をインプリメントする機器１０１を示す。つまり、本発明による方法の手順は、機器１０１によってインプリメントされる。
そのような機器は実際には、電気通信網のオペレータのサーバである。しかしながら、本発明の方法は、図１に対応するあらゆる装置やシステムによってインプリメントされることが可能である。
例として、本発明の方法をインプリメントすることができる機器としては、移動電話、ＰＤＡ、携帯用、固定またはデスクトップのパソコンなどが挙げられるが、このリストは網羅的ではない。
【００６８】
図１は、機器１０１が、マイクロプロセッサ１０２と、プログラムメモリ１０３と、入力のデジットのワードのメモリ１０４と、出力のデジットのワードのメモリ１０５と、鍵のメモリ１０６と、ラウンド数のメモリ１０７と、インターフェイス回路１０８とを含んでいることを示している。
要素１０２から１０８は、バス１０９で互いに接続されている。
【００６９】
図１では、メモリ１０３から１０７は別々のメモリとして示されている。実際には、これらのメモリはただ１つの同じメモリ部品、あるいはメモリ部品と専用回路（ＡＳＩＣ）のいくつかのレジスタ、とすることが十分に可能である。
【００７０】
メモリ１０４により、暗号化すべきデジットのワードを、本発明の方法によって記憶することができるようになる。
メモリ１０５により、メモリ１０４の中に記憶されたワードを暗号化した結果を、本発明の方法で保存できるようになる。
メモリ１０６により、本発明による暗号化方法で用いられる鍵を保存できるようになる。
メモリ１０７により、本発明による方法のＦｅｉｓｔｅｌスキーマ／ネットワークのラウンド数を保存できるようになる。
【００７１】
メモリ１０３は、マイクロプロセッサ１０２にインプリメントされる様々な機能に対応する、いくつかの区域に分割されている。
区域１０３ａは、Ｆｅｉｓｔｅｌスキーマのインプリメンテーションに対応する指示コードを含む。
区域１０３ｂは、ハッシュ関数のインプリメンテーションに対応する指示コードを含み、本文中の例ではＳＨＡ−１である。
区域１０３ｃは、通信機能のインプリメンテーションに対応しており、より特徴的には、区域１０３ｃの指示コードによって、回路１０８の制御が可能になる。
区域１０３ｄは、ラウンド関数をインプリメントするための指示コードを含む。
【００７２】
メモリ１０３は、作業と保存のための、図１には示されていない、他の区域を含む。
【００７３】
回路１０８により、機器１０１を、ネットワーク、キーボード、モニタなどの外部装置に接続できるようになる。
回路１０８と、区域１０３ｃの指示コードを介して、メモリ１０４から１０７の中での読み込みおよび／または書き込みが可能であり、メモリ１０４から１０７もまた、本発明による方法のパラメータ／コンフィギュレーションメモリである。
【００７４】
図２は、本発明による一般化されたＦｅｉｓｔｅｌスキーマの作動を示している。
図２は予備手順２０１を示し、該手順において、ユーザーが暗号化しようとするデジットのワードを把握する。
この把握は、暗号化すべきデジットのワードＭをメモリ１０４に書き込むことからなる。
手順２０１において、ユーザーは、鍵メモリ１０６の内容、並びにラウンド数のメモリ１０７の内容も与える。これらのメモリの更新は回路１０８を介して行われる。
【００７５】
次に、本来の意味での暗号化方法の第一の手順に移るが、その手順とは、デジットのワードＭを二つの二進数のワードＧ０とＤ０に分割し、変換する手順２０２のことである。
この分割はＭ＝［Ｇ０、Ｄ０］となるようなものである。構造上及び定義上、Ｇ０はＭの左の部分であり、Ｄ０はＭの右の部分である。
例として、Ｍが１０個のデジットを含む、つまりＮの値が１０だと考えよう。
標準的なＦｅｉｓｔｅｌスキーマの場合、暗号化すべきワードは、長さの等しい二つの部分に分割される。一般化されたＦｅｉｓｔｅｌスキーマについては後で論じる。
そういうわけで、本文中の例では、Ｇ０とＤ０は、それぞれ５個のデジットに対応する二進数のワードである。したがってこの例では、Ａ＝Ｂ＝５であり、ここでＡはワードＧ０のデジットでの長さであり、ＢはワードＤ０のデジットでの長さである。
【００７６】
デジットのワードは、メモリにおいては二進数で表示される。
この二進数表示は、ほとんどの場合、カルテット（４ビット）の数列、またはそれぞれオクテット（ＡＳＣＩＩコードについては８ビット）の数列である。
各カルテットまたはオクテットは、それぞれ、一つのデジットに対応する。
既知の方法でカルテットを用いる場合を考えると、デジットのワードの二進数のワードへの変換は、その場合には単純に、各デジットに対応する二進数のワードを並列することよってなされる。
したがって、デジットの０はカルテット００００に対応し、１はカルテット０００１、２はカルテット００１０、．．．というように、カルテット１００１に対応する９までいく。
このコード化方式では、例えばデジットのワード１２３４５の二進数変換は、五つのカルテットで構成される、二進数のワード０００１００１０００１１０１０００１０１である。
【００７７】
デジットのワードを二進数のワードに変換する他の方法もあり、その、他の方法とは、本発明の望ましい実施態様のものである。
この、他の変換方法は、読み取られたデジットのワードと同じ十進法での値を有する二進数のワードを用いることで、デジットのワードを変換することからなる。
したがって、デジットのワード１２３４５は、その十進法での値に対応する二進数のワードに変換され、それはつまり、二進数のワード１１００００００１１１００１である。
【００７８】
そういうわけで、手順２０２の最後において、デジットのワードＭを二つの二進数のワードＧ０とＤ０に分割した。
例えば、デジットのワードが１２３４５６７８９０ならば、Ｇ０は１２３４５の二進数変換であり、Ｄ０は６７８９０の二進数変換である。
そこで、手順２０２、すなわち本発明によるＦｅｉｓｔｅｌスキーマの最初のラウンドに移る。
【００７９】
手順２０２では、実際にはＤ０に等しい二進数のワードＧ１が計算される。
【００８０】
【数８】
2004258667.tif 000010
【００８１】
であるような二進数のワードＤ１も計算される。上式において、次の記号
【００８２】
【数９】
2004258667.tif 000011
【００８３】
は、「排他的ＯＲ」に対応し、これは関数「ＸＯＲ」としても知られている。
関数Ｆ１は、本発明によるＦｅｉｓｔｅｌスキーマの最初のラウンドにおけるラウンド関数である。
一般的には、本発明によるＦｅｉｓｔｅｌスキーマのｉラウンドのラウンド関数をＦｉと記す。関数Ｆｉは以下のような式で表される。
Ｆｉ（ｘ）＝＜ＳＨＡ＿１（ｉ｜｜Ｋ｜｜×｜｜ｊ）＞（１）
【００８４】
上式で、ＳＨＡ＿１（）は、同名のハッシュ関数である。
実際には、例えばＭＤ５のような、他のハッシュアルゴリズムを用いてもよい。ＡＥＳ（進歩した暗号化規格を意味するＡｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）やＴＤＥＳ（三重のデータ暗号化規格を意味するＴｒｉｐｌｅ  Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）のような、他の関数を用いてもよい。
ここでは、二進数のワードに対する暗号の標準的な擬似ランダム関数が問題なのである。さらに一般的に言えば、ビットに対するどのような関数あるいは擬似ランダム関数でも用いてよい。
【００８５】
｜｜は連結の演算子であり、Ｋはメモリ１０６で読み取られる鍵、ｉはＦｅｉｓｔｅｌスキーマの関数のラウンド指標である。
＜｜｜ｊ＞という記号は、ｊを０に初期化し、それから、関数ＳＨＡ＿１の出力のうち、最も重要な１７個のビットを抽出する、ということを表す。
それらの１７ビットが、正確に５個のデジットに対応する場合には、この出力が保持される。そうでない場合には、ｊを一単位だけ増加させ、その特性が得られるまで、式（１）を再評価する。
このようなｊに対する反復は実のところ、二進数をデジットへ変換することに対応する。ラウンド関数の入力ワードは、したがって、デジットのワードを二進数のワードに変換することによって生成される。
ラウンド関数の出力である二進数のワードは、そういうわけで、デジットのワードに変換される。１７ビットが正確に５個のデジットに対応するためには、この１７ビットのワードの十進法への変換を、五つの数字で表さなければならない。
【００８６】
１７ビットを抽出するということは、長さが５個のデジットのワードで作業するということに関連している。より特徴的には、それは懸案のラウンド関数が５個のデジットのワードを生成するということに関連している。
実際に、抽出したビットの数は、以下に示すような考慮によって生成されるデジットのワードの長さに関連するが、この考慮とは、抽出したビットの数が、生成されたワードのデジットでの数で表示可能な、十進法での最大値をコード化できる二進数のワードの長さに対応するということである。
そういうわけで、５個のデジットでは、表示可能な十進法の最大値は９９  ９９９である。この値を二進数でコード化するためには１７ビット必要である。
例えば、７個のデジットのワードを考える場合、表示可能な十進法の最大値は９  ９９９  ９９９である。この場合、２４ビットを抽出しなければならない。
この論理は、いかなるデジットにも適用される。
【００８７】
一つの変形例において、抽出されたビットが、ラウンド関数で生成すべきデジットでの数で表示可能な十進法の値に対応するとすぐに、ｊに対する繰返しは停止する。
【００８８】
ここで、処理されたワードは５個のデジットの長さを有することを思い留めておく。なぜなら、ワードＭは１０個のデジットの長さを有し、それをそれぞれ５個のデジットの２ワードに分割したからである。
【００８９】
式（１）に記載された関数は不可逆的、つまり一方向であるが、それは、それ自体が不可逆的なハッシュ関数をインプリメントするからである。
不可逆的とは、ある関数の出力を知りつつも、その関数の入力を決定できないということを意味する。
一般的にはラウンド関数の不可逆性は、その出力のあるビット数を抽出し、それゆえに全単射は問題になりえないということに関連している。
【００９０】
手順２０３の終わりには、したがって、ワードＭ１＝［Ｇ１、Ｄ１］が得られる。これからワードＭ２＝［Ｇ２，Ｄ２］の計算の手順２０４に移るが、ここで、次式の通りである。
【００９１】
【数１０】
2004258667.tif 000012
【００９２】
手順２０４は、本発明によるＦｅｉｓｔｅｌスキーマの第二ラウンドである。
手順２０３がワードＭに作用する一方で、手順２０４はワードＭ１に作用するということを除けば、手順２０４は手順２０３と同一である。
【００９３】
一般的な場合には、Ｆｅｉｓｔｅｌスキーマではｉ番目のラウンドはワードＭｉ＝［Ｇｉ，Ｄｉ］を生成し、ここで次式の通りである。
【００９４】
【数１１】
2004258667.tif 000013
【００９５】
本文の例では、５ラウンドのＦｅｉｓｔｅｌスキーマを考えるので、Ｔの値は５である。したがって手順２０４の後、一般的な場合について説明したように、三番目と四番目のラウンドが実行される。
【００９６】
Ｔ回目のラウンドに際して、（本例では五回目のラウンドで、手順２０５である。）ワードＭＴ＝［ＧＴ，ＤＴ］を生成し、ここで次式の通りである。
【００９７】
【数１２】
2004258667.tif 000014
【００９８】
そういうわけで、ワードＭＴは鍵Ｋを使用して、Ｆｅｉｓｔｅｌスキーマの入力として用いることができ、出力において開始のワードＭを再び見いだすことになる。
ワードＭＴは、ワードＭを本発明の方法で暗号化した結果である。
手順２０５の終わりにおいて、ワードＭＴはメモリ１０５に書き込まれる。本発明による方法を要約して書くと、
ＭＴ＝Ｃｈｉ（Ｍ，Ｋ，Ｔ）
となる。これはＭＴとして読むべき式であり、この式は鍵Ｋを使って本発明の方法でＭを暗号化（Ｃｈｉ）した結果で、ラウンド数はＴに等しい。
その場合、複号化関数は同一であり、
Ｍ＝Ｃｈｉ（ＭＴ，Ｋ，Ｔ）
が得られる。
【００９９】
メモリ１０５は回路１０８を介して読み取られ、このことによって暗号化の結果を用いることが可能になる。
【０１００】
本文の例では、ＦｅｉｓｔｅｌスキーマはＴ＝５ラウンドを含む。そして、望ましい実施例においては、Ｆｅｉｓｔｅｌスキーマは６ラウンドを含む。実際には、３０ラウンドまで上げることが可能である。
しかしながら、実行速度との折り合いのつけ方も知っておかなければならない。実際、ラウンド数が増えるのに応じて、計算時間も増大する。
実際には、６ラウンドあれば、暴力に基づくものではない、既知のあらゆる攻撃に対して、十分な備えとなる。
現に使用可能な計算出力では、本発明の方法をインプリメントするシステムの応答時間をほとんど損なうことなく、３０ラウンドまで上げることができる。
そういうわけで、実際には、ラウンド数Ｔは３０未満である。
【０１０１】
本明細書の例では、ワードＭが１０個のデジットを含むとした。実際には、ワードＭは奇数個のデジットを含んでもよい。
実際にはまた、ワードＭの非対称の分割も実行できる。これらの二つの場合において、一般化されたＦｅｉｓｔｅｌスキーマ、つまりＡとＢが異なっているようなＦｅｉｓｔｅｌスキーマがインプリメントされる。
Ａ＝Ｂというケースは、一般化された構造における、特殊なケースだということに注目すべきである。
【０１０２】
例えば、ＭはＮ＝１１個のデジットを含むとする。その場合、Ａの値は５でＢの値は６であるとすると、確かにＮ＝Ａ＋Ｂとなる。
また、Ｇ０は５個のデジットの長さ、Ｄ０は６個のデジットの長さを有する。
一般化されたＦｅｉｓｔｅｌ関数の最初のラウンドが終わると、Ｇ１＝Ｄ０は６個のデジットを含み、そして、次式を満たすＤ１は５個のデジットを含む。
【０１０３】
【数１３】
2004258667.tif 000015
【０１０４】
その場合、長さが５個のデジットのワードを生成するために、関数Ｆ１は長さが６個のデジットのワードに作用し、従って上記で説明したように、関数ＳＨＡ＿１の出力の１７ビットが抽出される。
【０１０５】
Ｆｅｉｓｔｅｌスキーマの二回目のラウンドが終わると、Ｇ２＝Ｄ１は、５個のデジットを含む。また、次式を満たすＤ２も、６個のデジットを含む。
【０１０６】
【数１４】
2004258667.tif 000016
【０１０７】
その場合には、長さが６個のデジットのワードを生成するために、関数Ｆ２は、長さが５個のデジットのワードに作用し、既に見られるような考慮にしたがって、関数ＳＨＡ＿１の出力の２０ビットが抽出される。
【０１０８】
一般化されたＦｅｉｓｔｅｌスキーマの場合には、暗号化すべきワードの分割は対称ではなく、それゆえ、ラウンド関数は、ラウンド指標が偶数か奇数かに応じて、同数のデジットに作用するわけではない。
そういうわけで、奇数の指標のラウンドに際し、長さがＡ個のデジットのワードを生成するために、Ｆｅｉｓｔｅｌスキーマのラウンド関数は長さがＢ個のデジットのワードに作用する。
偶数の指標のラウンドに際しては、長さがＢ個のデジットのワードを生成するために、Ｆｅｉｓｔｅｌスキーマのラウンド関数は、長さがＡ個のデジットのワードに作用する。
【０１０９】
一般的に、ＡとＢは、Ａ＋Ｂ＝Ｎである限り、任意の値を取りうる。実際には、デジットのワードは対称に分割するのが望ましい。
Ｎが偶数の場合は問題が生じず、Ａ＝Ｂ＝Ｎ／２である。
Ｎが奇数の場合、Ａの値はＮ／２の整数部分であり、一方、Ｂの値はＮ−Ａになる。したがって、確かにＡ＋Ｂ＝Ｎになる。
この分割法では、Ｂは決してＡを一単位以上は上回らず、それゆえに、対称的な分割に可能な限りもっとも近い整数分割が得られる。
【０１１０】
この暗号化方法は、通常用いられるデジットのワードを暗号化するために用いられる。
そのようなワードは、電話番号（８桁から１０桁）やクレジットカードの番号（１６桁）、社会保険番号（１３桁）、銀行口座の番号、電子バウチャー等であるが、このリストは網羅的ではない。
さらに、これらの番号をつなげて、さらに大きな番号にすることで、長さが３０個のデジットのワードに達することも可能である。
【０１１１】
本発明の方法では、一般的に、暗号化するワードが長ければ長いほど、つまり、Ｎが大きければ大きいほど、暗号解析に対する抵抗力がより良いものとなる。
【０１１２】
入力されるワード、所与の暗号化鍵、そしてＦｅｉｓｔｅｌスキーマのラウンド数については、常に同一の暗号化されたワードが得られる。
その暗号化を強化するために、そして特に、電子識別子に基づいた振る舞いのリサーチを避けるために、暗号化すべきデジットの番号を、デジットの乱数と連結させてもよい。
例えば、電話番号を暗号化するために、それをまず、現在の時刻の開始時点から経過した秒数と連結させる。それから、その連結の結果を暗号化する。
そういうわけで、所与の電話番号について、同一の暗号化されたワードが得られることはごく稀にしかない。
使用する乱数のタイプは任意であり、例えば使用するたびに加算される単純なカウンターでも、予め計算した一連の擬似乱数列から導いた数でもよいが、このリストは網羅的ではない。
【産業上の利用可能性】
【０１１３】
そういうわけで、本発明による方法の可能な使い方の中で、情報の発信者とその受信者との間で情報を暗号化する可能性が挙げられる。
また、二つのネットワークを互いに隔離する可能性も挙げられる。この隔離は、例えば、最初のネットワークのオペレータのサーバによって実現される。
このサーバが、本発明の方法により、第二のネットワークについての識別子を生成するために、第一のネットワークの識別子をコード変換する。したがって、その第二のネットワークに関与するエンティティは、第一のネットワークのオペレータは別として、最初のネットワークのユーザーを識別することができない。
【０１１４】
それゆえ、本発明は特に、そして非常に好適に、電話通信に応用される。
そういうわけで、電話通信事業者の加入者の私生活を保護し、（「スパム・メール」という名称でも知られている）望まないメールと戦う、という場合において、あらゆるプロトコルが、加入者の識別子として１５個のデジットにコード化されたＭＳＩＳＤＮ（加入者の国際電話番号）を用いるが、その場合、この情報はユーザーのプロフィールを作る目的、あるいは望まれないメッセージを発信する目的で、サービスの供給業者に流用される可能性がある。
暗号化によってその値を隠そうとすることは可能であるが、その場合には、（暗号化の）結果が電気通信プロトコルのフォーマットと互換性がある必要があり、特に、オペレータが容易に複号化できなければならない。
これら二つの目的は、本発明による方法によって達成される。
【０１１５】
電子バウチャー（クーポン）の場合もまた、本発明の良い応用例の一つである。
携帯電話でのインターフェイスは、デジタルキーボードの制約があり、それゆえに、ユーザーのデジットのデータ収集入力には限界がある。
電子バウチャーの生成という場合（バウチャーの番号が、例えば３０ユーロというような金額に相当する）において、各バウチャーのデータ収集入力によって、口座に貸方記入することが可能になる。
これらの値の生成器が、デジットに作用する対称アルゴリズムを利用する場合、サービスの供給業者によるバウチャーの管理は単純化される。
カウンターが１からＭまで進み、そのカウンターを暗号化することで、まったく異なった擬似ランダムデータが供給される。そのようにして、Ｎ個のデジットについて擬似ランダムコードを生成することが可能であり、それはサービスの供給業者によって容易に管理することができる。
なぜなら、保存するのは使用されるカウンターの最後の値だけであり、値の単一性を確保するために、既に生成されたバウチャーのすべての値を保存するわけではないからである。
【０１１６】
一般的に「膨大な」データベースでは、保存は分かりやすい形で行われ、その構造は組み合わせ（均一ではなく、数字や数字混じりのアルファベットなどのフォーマット）が可能であり、そして機密保持の必要性から暗号化が求められる。
その場合にも、デジットによる暗号化によって、その構造を変更することなく、非常に経済的な低価格で、データを効率的に保護することが可能である。
【０１１７】
本発明のこれらの実施例は、本発明の応用分野を限定するものではない。
【図面の簡単な説明】
【０１１８】
【図１】本発明による方法のインプリメンテーションにおいて、有利な手段を示す図である。
【図２】本発明による方法の手順を示す図である。
【符号の説明】
【０１１９】
１０１          機器
１０２          マイクロプロセッサ
１０３          プログラムメモリ
１０４          入力のデジットのワードのメモリ
１０５          出力のデジットのワードのメモリ
１０６          鍵のメモリ
１０７          ラウンド数のメモリ
１０８          インターフェイス回路
１０９          バス
【図１】
2004258667.tif 000017
【図２】
2004258667.tif 000018