(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0004】
上述のようなシステムにおいて、クライアント認証子とサーバ認証子の生成要素のサーバ乱数が重複する。(具体的には、Q1(n−1)が重複している。)したがって、クライアント認証子とサーバ認証子よりクライアント今回認証用乱数とクライアント次回認証用乱数を求めることができる可能性がある。クライアント次回認証用乱数を求めたならば、共通暗号鍵を導出することが可能となり、次回認証において、クライアントまたはサーバに成りすますことが可能となる。
【0005】
しかし、クライアント装置とサーバ装置間認証においての重複情報を無くし、装置間が認証時に交換することのない隠蔽固定情報を追加する認証方式とすることによりセキュリティを強化することができる。
【0006】
更に、共通暗号鍵をクライアント装置とサーバ装置で1つであったものを、クライアント装置送信用共通暗号鍵とサーバ装置送信用共通暗号鍵の2つとすることによりセキュリティの一層強化を実現することができる。
【0007】
また、クライアント装置の認証が失敗となった場合は、以後の認証が行えなくなるために、通常認証と再認証の認証モードを設け、通常認証と再認証それぞれに通常認証シードと再認証シードを用意する。
【0008】
通常認証が失敗となった場合は、再認証のための再認証シードにより実施を行い、再認証成功時に通常認証シードを再構成することにより、以後は通常認証を行うことを可能とするが、再認証においても通常認証同様のセキュリティ強度を保証する。
【0009】
本発明は、上記の問題に鑑みてなされたものであり、重複する認証情報要素を持つことなく、通常の認証が失敗となった場合は、再認証により通常認証の認証シードを生成し、その後、継続的に認証を繰り返し行うことができるワンタイム認証システム、並びにそのシステムに生体認証を組み込むことにより本人認証を可能とすることを目的とする。
【課題を解決するための手段】
【0010】
本発明では、以下のような解決手段を提供する。
【0011】
(1)サーバ装置と、
クライアント装置とを備え、
前記サーバ装置および前記クライアント装置は、それぞれ通常認証シードおよび再認証シードからなる認証シードを生成し、前記認証シードを暗号化して相互に送信し、前記認証シードからワンタイム認証子を生成して送信し、前記サーバ装置により生成された前記認証シードと前記クライアント装置により生成された前記認証シードとに基づいて互いにワンタイム認証子についての認証を行い、前記認証に成功するたびに次回認証用シードで前記認証シードを更新して行き保持し、
前記クライアント装置は、通常認証またはヘルスチェック認証において、前記認証シードの前記通常認証シードを読み出し、読み出したシードに基づいてワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記ワンタイム認証子および前記サーバ装置から受信した前記ワンタイム認証子についての認証に成功すると、前記通常認証またはヘルスチェック認証の前記次回認証用シードを更新し、前記ワンタイム認証子についての認証に失敗すると、再認証において、前記認証シードの前記再認証用シードを読み出し、読み出した前記再認証用シードに基づいてワンタイム認証子を生成して前記サーバ装置へ送信し、前記サーバ装置へ送信した前記ワンタイム認証子および前記サーバ装置から受信した前記ワンタイム認証子についての認証に成功すると、前記再認証の前記次回認証用シードを更新し、前記通常認証の前記次回認証用シードを更新し、
前記サーバ装置は、通常認証またはヘルスチェック認証において、前記クライアント装置より受信した前記ワンタイム認証子についての認証に成功すると、前記通常認証の前記次回認証用シードを更新し、次回の通常認証またはヘルスチェック認証での認証時まで保持し、前記再認証において、前記クライアント装置より受信した前記ワンタイム認証子についての認証に成功すると、前記再認証の前記次回認証用シードを更新し、次回の再認証での認証時まで保持し、前記通常認証用シードを生成して前記通常認証の前記シードを更新し、次回の通常認証まで保持すること、
を特徴とするワンタイム認証システム。
【0012】
(1)の構成によれば、通常のワンタイム認証に失敗すると、再認証のワンタイム認証が実行され、再認証のワンタイム認証に成功すれば、クライアント装置とサーバ装置の双方において、通常認証の次回認証用シードが更新されるので、次回、通常認証を行うことが可能となる。
また、通常認証以外にセッション中にヘルスチェック認証を行い、通常認証の次回認証用シードを更新しているので、耐タンパ性が向上する。
【0013】
(2)記憶装置および前記サーバ装置が、前記認証シードとして、通常認証クライアント側シード、通常認証サーバ側シード、再認証クライアント側シードおよび再認証サーバ側シードを保持し、
前記クライアント装置は、
(a1)前記記憶装置から前記通常認証クライアント側シード、前記通常認証サーバ側シード、前記再認証クライアント側シードおよび前記再認証サーバ側シードを読み出し、
(a2)前記通常認証クライアント側シードおよび前記通常認証サーバ側シードから、通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子を生成し、
(a3)次回認証用通常認証クライアント側シードを生成し、
(a4)前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子、および暗号化後の前記次回認証用通常認証クライアント側シードを前記サーバ装置へ送信し、
(a5)前記サーバ装置から通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子、および暗号化後の次回認証用通常認証サーバ側シードを受信し、
(a6)前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子についての認証に成功すると、前記次回認証用通常認証クライアント側シードおよび前記次回認証用通常認証サーバ側シードを更新し、
(a7)前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子について認証に失敗すると、前記再認証クライアント側シードおよび前記再認証サーバ側シードから再認証クライアント側ワンタイム認証子を生成し、
(a8)次回認証用再認証クライアント側シードおよび次回認証用通常認証クライアント側シードを生成し、
(a9)前記再認証クライアント側ワンタイム認証子、暗号化後の前記次回認証用再認証クライアント側シードおよび暗号化後の前記次回認証用通常認証クライアント側シードを前記サーバ装置へ送信し、
(a10)前記サーバ装置から再認証サーバ側ワンタイム認証子、暗号化後の次回認証用再認証サーバ側シードおよび暗号化後の次回認証用通常認証サーバ側シードを受信し、
(a11)前記再認証サーバ側ワンタイム認証子について認証に成功すると、前記次回認証用再認証クライアント側シード、前記次回認証用再認証サーバ側シード、前記次回認証用通常認証クライアント側シードおよび前記次回認証用通常認証サーバ側シードを更新し、
前記サーバ装置は、
(b1)前記クライアント装置から前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子および暗号化後の前記次回認証用通常認証クライアント側シードを受信し、
(b2)前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子について認証に成功すると、次回認証用通常認証サーバ側シードを生成し、
(b3)前記通常認証クライアント側シードおよび通常認証サーバ側シードから通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子を生成し、
(b4)前記クライアント装置へ前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子および暗号化後の前記次回認証用通常認証サーバ側シードを送信し、
(b5)前記クライアント装置から前記再認証クライアント側ワンタイム認証子、暗号化後の前記次回認証用再認証クライアント側シードおよび暗号化後の前記次回認証用通常認証初期値クライアント側シードを受信し、
(b6)前記再認証クライアント側ワンタイム認証子について認証に成功すると、次回認証用再認証サーバ側シードおよび次回認証用通常認証初期値サーバ側シードを生成し、
(b7)前記再認証クライアント側シードおよび再認証サーバ側シードから再認証サーバ側ワンタイム認証子を生成し、
(b8)前記クライアント装置へ前記再認証サーバ側ワンタイム認証子、暗号化後の前記次回認証用再認証サーバ側シードおよび暗号化後の前記次回認証用通常認証初期値サーバ側シードを送信すること、
を特徴とする(1)に記載のワンタイム認証システム。
【0014】
(2)の構成によれば、次回認証用シードを装置間で伝送する際に、暗号化して伝送しているので、認証シードについての安全性が保たれる。
【0015】
(3)前記通常認証クライアント側ワンタイム認証子、ヘルスチェック認証クライアント側ワンタイム認証子および前記再認証クライアント側ワンタイム認証子は、同一の一方向性関数で計算され、
前記一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数であって、
前記通常認証クライアント側ワンタイム認証子およびヘルスチェック認証クライアント側ワンタイム認証子の場合、3つの引数は、前記通常認証クライアント隠蔽固定値乱数、前記通常認証クライアント側シード1、および前記通常認証サーバ側シード2であり、
前記再認証クライアント側ワンタイム認証子の場合、3つの引数は、前記再認証クライアント隠蔽固定値乱数、前記再認証クライアント側シード1、および前記再認証サーバ側シード2であること、
を特徴とする(2)に記載のワンタイム認証システム。
【0016】
(3)の構成によれば、通常認証クライアント側ワンタイム認証子、ヘルスチェック認証クライアント側ワンタイム認証子および再認証クライアント側ワンタイム認証子を計算する関数の引数に隠蔽固定値乱数が使用されており、隠蔽固定値乱数は装置間で認証時に交換されることがないので、セキュリティが強化される。
【0017】
(4)前記通常認証サーバ側ワンタイム認証子、ヘルスチェック認証サーバ側ワンタイム認証子および再認証サーバ側ワンタイム認証子は、同一の一方向性関数で計算され、
前記一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数であって、
前記通常認証サーバ側ワンタイム認証子およびヘルスチェック認証サーバ側ワンタイム認証子の場合、3つの引数は、前記通常認証サーバ隠蔽固定値乱数、前記通常認証サーバ側シード1、および前記通常認証クライアント側シード2であり、
前記再認証サーバ側ワンタイム認証子の場合、3つの引数は、前記再認証サーバ隠蔽固定値乱数、前記再認証サーバ側シード1、および前記再認証クライアント側シード2であること、
を特徴とする(2)または(3)に記載のワンタイム認証システム。
【0018】
(4)の構成によれば、通常認証サーバ側ワンタイム認証子、ヘルスチェック認証サーバ側ワンタイム認証子および再認証サーバ側ワンタイム認証子を計算する関数の引数に隠蔽固定値乱数が使用されており、隠蔽固定値乱数は装置間で認証時に交換されることがないので、セキュリティが強化される。
【0019】
(5)前記クライアント装置は、前記次回認証用通常認証クライアント側シード、前記次回認証用通常認証サーバ側シード、前記次回認証用再認証クライアント側シードおよび前記次回認証用再認証サーバ側シードを前記記憶装置に書き込むまでメモリに保持し、前記次回認証用通常認証クライアント側シード、前記次回認証用通常認証サーバ側シード、前記次回認証用再認証クライアント側シードおよび前記次回認証用再認証サーバ側シードを、前記記憶装置に書き込んだ後、前記メモリから消去することを特徴とする(2)に記載のワンタイム認証システム。
【0020】
(5)の構成によれば、次回認証用通常認証クライアント側シード、次回認証用通常認証サーバ側シード、前記次回認証用再認証クライアント側シードおよび前記次回認証用再認証サーバ側シードを、記憶装置に書き込んだ後、メモリから消去するので、次回認証用通常認証シードをクライアント装置のメモリから不正に入手することが困難になる。
【0021】
(6)前記クライアント装置および前記サーバ装置は、通常認証共通暗号鍵および再認証共通暗号鍵を保持し、
前記クライアント装置は、前記通常認証共通暗号鍵を読み出し、前記通常認証共通暗号鍵で、前記次回認証用通常認証クライアント側シードを暗号化し、前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子についての認証に成功すると、前記通常認証共通暗号鍵を更新し、
前記クライアント装置は、前記再認証共通暗号鍵を読み出し、前記再認証共通暗号鍵で、前記次回認証用再認証クライアント側シードを暗号化し、前記再認証サーバ側ワンタイム認証子についての認証に成功すると、前記再認証共通暗号鍵および通常認証共通暗号鍵を更新し、
前記サーバ装置は、前記通常認証共通暗号鍵で、前記次回認証用通常認証サーバ側シードを暗号化し、前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子についての認証に成功すると、前記通常認証共通暗号鍵を更新し、更新後の前記通常認証共通暗号鍵を次回の通常認証または次回のヘルスチェック認証での認証時まで保持し、前記再認証共通暗号鍵で、前記次回認証用再認証サーバ側シードを暗号化し、前記再認証クライアント側ワンタイム認証子についての認証に成功すると、前記再認証共通暗号鍵および通常認証共通暗号鍵を更新し、更新後の前記再認証共通暗号鍵および通常認証共通暗号鍵を次回の再認証での認証時または通常認証での認証時まで保持すること、
を特徴とする請求項2記載のワンタイム認証システム。
【0022】
(6)の構成によれば、通常認証時の共通暗号鍵と、再認証時の共通暗号鍵とを別々に設け、再認証に成功すると、再認証共通暗号鍵と通常認証共通暗号鍵の両方を更新しているので、耐タンパ性が向上する。
【0023】
(7)前記クライアント装置は、前記更新後の通常認証共通暗号鍵および前記更新後の再認証暗号鍵を前記記憶装置に書き込むまでメモリに保持し、前記更新後の通常認証共通暗号鍵および前記更新後の再認証暗号鍵を、前記記憶装置に書き込んだ後、前記メモリから消去することを特徴とする(6)に記載のワンタイム認証システム。
【0024】
(7)の構成によれば、更新後の通常認証共通暗号鍵および更新後の再認証暗号鍵を、記憶装置に書き込んだ後、メモリから消去するので、更新後の共通暗号鍵をクライアント装置のメモリから不正に入手することが困難になる。
【0025】
(8)記憶装置および前記サーバ装置が、前記認証シードとして、通常認証クライアント側シード、通常認証サーバ側シード、再認証クライアント側シードおよび再認証サーバ側シードを保持し、
前記クライアント装置は、
(a1)前記記憶装置から前記通常認証クライアント側シード、前記通常認証サーバ側シード、前記再認証クライアント側シードおよび前記再認証サーバ側シードを読み出し、
(a2)前記通常認証クライアント側シードおよび前記通常認証サーバ側シードから通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子を生成し、
(a3)前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子を前記サーバ装置へ送信し、
(a4)前記サーバ装置から通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子、暗号化後の次回認証用通常認証サーバ側シードおよび次回認証用通常認証クライアント側シードを受信し、
(a5)前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子についての認証に成功すると、前記次回認証用通常認証クライアント側シードおよび前記次回認証用通常認証サーバ側シードを更新し、
(a6)前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子について認証に失敗すると、前記再認証クライアント側シードおよび前記再認証サーバ側シードから再認証クライアント側ワンタイム認証子を生成し、
(a7)前記再認証クライアント側ワンタイム認証子を前記サーバ装置へ送信し、
(a8)前記サーバ装置から再認証サーバ側ワンタイム認証子、暗号化後の次回認証用再認証サーバ側シード、暗号化後の次回認証用通常認証初期値サーバ側シード、暗号化後の次回認証用再認証クライアント側シードおよび暗号化後の次回認証用通常認証初期値クライアント側シードを受信し、
(a9)前記再認証サーバ側ワンタイム認証子について認証に成功すると、前記次回認証用再認証クライアント側シード、前記次回認証用再認証サーバ側シード、前記次回認証用通常認証クライアント側シードおよび前記次回認証用通常認証サーバ側シードを更新し、
前記サーバ装置は、
(b1)前記クライアント装置から前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子を受信し、
(b2)前記通常認証クライアント側ワンタイム認証子またはヘルスチェック認証クライアント側ワンタイム認証子について認証に成功すると、次回認証用通常認証サーバ側シードおよび次回認証用通常認証クライアント側シードを生成し、
(b3)前記通常認証クライアント側シードおよび通常認証サーバ側シードから通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子を生成し、
(b4)前記クライアント装置へ前記通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子、暗号化後の前記次回認証用通常認証サーバ側シードおよび暗号化後の次回認証用通常認証クライアント側シードを送信し、
(b5)前記クライアント装置から前記再認証クライアント側ワンタイム認証子を受信し、
(b6)前記再認証クライアント側ワンタイム認証子について認証に成功すると、次回認証用再認証サーバ側シード、次回認証用通常認証初期値サーバ側シード、次回認証用再認証クライアント側シードおよび次回認証用通常認証初期値クライアント側シードを生成し、
(b7)前記再認証クライアント側シードおよび再認証サーバ側シードから再認証サーバ側ワンタイム認証子を生成し、
(b8)前記クライアント装置へ前記再認証サーバ側ワンタイム認証子、暗号化後の前記次回認証用再認証サーバ側シード、暗号化後の前記次回認証用通常認証初期値サーバ側シード、暗号化後の前記次回認証用再認証クライアント側シードおよび暗号化後の前記次回認証用通常認証初期値クライアント側シードを送信すること、
を特徴とする(1)のワンタイム認証システム。
【0026】
(8)の構成によれば、クライアント装置を調べても乱数発生の仕組みを知ることができないので、耐タンパ性が向上する。
【発明の効果】
【0027】
本発明によれば、クライアント装置とサーバ装置間の盗聴に対する耐タンパ性が強化され、認証が失敗した後の再認証の耐タンパ性も強化されたワンタイム認証システムが得られる。
【発明を実施するための形態】
【0029】
以下、図に基づいて本発明の実施の形態を説明する。
【0031】
図1は、本発明の実施の形態に係るワンタイム認証システムの構成を示すブロック図である。
【0032】
図1に示すシステムでは、クライアント装置としての端末装置1が、ネットワーク3に接続されており、そのネットワーク3にはサーバ装置4が接続されている。端末装置1は、例えば、スマートフォンである。ネットワーク3は、有線および/または無線のLAN(Local Area Network)、および/またはインターネットなどのWAN(Wide Area Network)、および/または公衆無線通信網を含んでいる。
【0033】
本発明の実施の形態に係るワンタイム認証システムでは、クライアント側においてシードおよび共通暗号鍵を記憶するための記憶装置2が使用される。
記憶装置2の態様としては、少なくとも次の3種類の態様を取ることができる。
(A)端末装置1であるスマートフォンが備えている記憶部。
(B)端末装置1であるスマートフォンに対して着脱可能なSDカードなどの記憶媒体。
(C)端末装置1であるスマートフォンに対して近接通信が可能な装置が備えている記憶部。
【0034】
シードは、ワンタイム認証子を生成するために使用されるデータであって、この実施の形態では、乱数が使用される。ワンタイム認証子は、認証時に1度だけ使用可能なID(ワンタイムID)またはパスワード(ワンタイムパスワード)である。この実施の形態では、ワンタイム認証子は、ワンタイムIDとされる。
【0035】
サーバ装置4および端末装置1は、それぞれシードを生成し、認証に成功するたびにシードを更新していき、そのシードを暗号化して相互に送受し、両者のシードからワンタイム認証子を生成し、シードに基づいて、互いにワンタイム認証子についての認証を行う。
したがって、サーバ装置4は、サーバ装置4のシードと端末装置1のシードの両方を保持している。また、端末装置1側も、サーバ装置4のシードと端末装置1のシードの両方を、記憶装置2に記憶している。
なお、以下では、ワンタイム認証子についての認証のことを、ワンタイム認証という。
【0036】
サーバ装置4および端末装置1は、通常認証、ヘルスチェック認証、および再認証のワンタイム認証を行う。通常認証は、通常時のワンタイム認証を行うモードであり、ヘルスチェック認証は、通常認証後の成りすましを防止かつ検出するモードであり、再認証は、通常認証に失敗した場合に実行される認証モードである。
【0037】
通常認証を行うか、ヘルスチェック認証を行うかは、端末装置1のワンタイム認証プログラムによる。その判断は、ワンタイム認証プログラム上位層より引き渡される要求コードRQSTが0か0以外によりなされ、0以外であれば通常認証とし、0であればヘルスチェック認証を行う。なお、再認証の場合は、要求コードRQSTを0とする。
【0038】
通常認証において、端末装置1は、記憶装置2から両者のシードを読み出し、そのシードに基づいてワンタイム認証子を生成してサーバ装置4へ送信し、ワンタイム認証子について認証に成功すると、次回認証用シードを記憶装置2に書き込む。
【0039】
一方、サーバ装置4は、通常認証の次回認証用シードを、次回の通常認証またはヘルチェック認証での認証時まで保持する。
【0040】
以下、上記システムにおける各装置の構成および動作について説明する。
【0042】
図2は、
図1における端末装置1の構成を示すブロック図である。
【0043】
図2に示すように、端末装置1は、表示部201,操作部202、記憶部203、電源部204、制御部205、ROM(Read Only Memory)206、RAM(Random Access Memory)207、NFC(Near Field Communication)通信部208,無線LAN通信部209、公衆無線通信部210を備える。
【0044】
表示部201は、例えばLCDやLEDにより構成され、ユーザが視覚で認知可能な情報を出力する機能を有している。操作部202は、ユーザが各種入力などを行い、通信装置を操作するための機能を有する。なお、表示部201と操作部202とをタッチパネルなどによって一体として構成してもよい。
【0045】
記憶部203は、例えば、HDD、フラッシュメモリなどの記憶媒体により構成され、無線通信ネットワーク情報、データ送受信情報、アプリケーションなどの各種データを記憶し、管理する。
図2では、記憶部203の中に、記憶装置2があり、その記憶装置2の中にシード101が記憶されている例を示している。
電源部204は、例えばバッテリであり、装置全体を動作させるための電源を保持し、各ハードウェアに電力を供給する。
【0046】
制御部205は、例えばCPU(Central Processing Unit)であり、端末装置1全体の動作を制御する。ROM206は、制御命令つまりプログラムを格納する。後述するワンタイム認証の動作は、ROM206に記憶されたワンタイム認証プログラム31を制御部205が実行することにより実現される。RAM207は、プログラムを実行する際のワークメモリやデータの一時保存などに利用される。
【0047】
NFC通信部208は、NFC規格に準拠したNFC通信を行う。また、NFC通信部208は、通信範囲内に通信可能な装置を検出すると、自動的にNFC通信を確立する。無線LAN通信部209は、IEEE802.11シリーズおよびBluetooth(登録商標)に準拠した無線通信を行う。公衆無線通信部210は、3GPP(Third Generation Partnership Project)で規格が定められたLTE(Long Term Evolution)などの通信方式に準拠した無線通信を行う。
【0048】
図3は、
図2に示す端末装置1において実現される処理部を示すブロック図である。
図3に示すように、この端末装置1において、通信処理部42、および認証処理部43が実現される。
【0049】
通信処理部42は、無線LAN通信部209または公衆無線通信部210を使用して、所定の通信プロトコルでサーバ装置4とネットワーク3を介してデータ通信を行う。
【0050】
認証処理部43は、制御部205がワンタイム認証プログラム31を実行することにより実現され、通信処理部42を使用して、サーバ装置4との相互認証におけるクライアント側の処理を実行する。
【0051】
図4は、
図1におけるサーバ装置4の構成を示すブロック図である。
【0052】
図4において、CPU51は、プログラムを実行し、プログラムに記述された処理を実行する演算処理装置である。また、ROM52は、プログラムおよびデータを予め記憶した不揮発性のメモリである。また、RAM53は、プログラムを実行する際にそのプログラムおよびデータを一時的に記憶するメモリである。
【0053】
記憶装置55は、インタフェース54に接続され、図示せぬオペレーティングシステム、ワンタイム認証プログラム61、認証に使用されるデータなどを格納する記録媒体を有する装置である。記憶装置55としては、ハードディスクドライブ、SSDなどが使用される。記憶装置55には、認証に使用されるデータとして、シードテーブル71、および認証子テーブル72が保持されている。
【0054】
シードテーブル71は、最後の認証時に更新された、通常認証、ヘルスチェック認証および再認証のそれぞれについての次回認証用シードおよび次回認証用共通暗号鍵を有する。ただし、ヘルスチェック認証の次回認証用シードおよび次回認証用共通暗号鍵については、通常認証の次回認証用シードおよび次回認証用共通暗号鍵を流用する。
【0055】
認証子テーブル72は、最後の認証時に更新された、通常認証またはヘルスチェック認証および再認証のそれぞれについての次回認証用のクライアント側ワンタイム認証子を有する。認証子テーブル72は、通常認証テーブル72aと再認証テーブル72bとを含む。通常認証テーブル72aは、通常認証またはヘルスチェック認証についての次回認証用のクライアント側ワンタイム認証子を有し、再認証テーブル72bは、再認証についての次回認証用のクライアント側ワンタイム認証子を有する。
【0056】
また、インタフェース56は、通信装置57を接続可能なインタフェース回路である。通信装置57は、ネットワークインタフェースカード、モデムなどといったネットワーク3に接続可能な装置である。
【0057】
CPU51、ROM52、RAM53、およびインタフェース54,56は、バスやコントローラチップによって相互にデータ通信可能に接続されている。
【0058】
図5は、
図2に示すサーバ装置4において実現される処理部を示すブロック図である。
図5に示すように、このサーバ装置4において、通信処理部81、およびサーバ側認証処理部82が実現される。
【0059】
通信処理部81は、通信装置57を使用して、所定の通信プロトコルで端末装置1とネットワーク3を介してデータ通信を行う。
【0060】
サーバ側認証処理部82は、CPU51がワンタイム認証プログラム61を実行することにより実現され、通信処理部81を使用して、1または複数のクライアント装置(端末装置1など)との相互認証におけるサーバ側の処理を実行する。
【0062】
図6は、
図1に示すシステムにおいて実行されるワンタイム認証子を使用して繰り返し行われる認証について説明するシーケンス図である。
【0063】
ステップS1において、認証処理部43は、モードフラグMに、通常認証を示す値(ここでは1)をセットする。モードフラグMは、認証のモードを示すデータである。モードフラグMの値から、現時点のモードが識別され、ひいては、通常認証からヘルスチェック認証、または通常認証から再認証、またはヘルスチェック認証から再認証へ移行したことも判定される。
【0064】
ステップS2において、端末装置1の認証処理部43とサーバ装置4のサーバ側認証処理部82との間で、通常認証でのワンタイム認証が実行される。このとき、認証処理部43は、読み込んだシードからワンタイム認証子を生成し、また、次回認証用シードを生成して暗号化し、ワンタイム認証子および暗号化された次回認証用シードおよび暗号化された要求コードをサーバ装置4へ送信する。サーバ側認証処理部82は、そのワンタイム認証子および暗号化された次回認証用シードおよび暗号化された要求コードを受信し、そのワンタイム認証子が正当なものであるか否かを判定する。サーバ側認証処理部82は、そのワンタイム認証子が正当なものであれば、クライアント側の次回認証用シードを復号して保持する。
【0065】
なお、通常認証のクライアント側シードの初期値、サーバ側シードの初期値、および共通暗号鍵の初期値は、記憶装置2とサーバ装置4に予めセットされる。サーバ装置4には、記憶装置2に関連付けて、それらの初期値がセットされる。
【0066】
サーバ装置4では、シードテーブル71に記憶装置2のシード101と同一のシードが保持されており、また、通常認証の次回認証用クライアント側ワンタイム認証子および再認証の次回認証用クライアント側ワンタイム認証子が、認証子テーブル72に保持されている。通常認証の次回認証用クライアント側ワンタイム認証子および再認証の次回認証用クライアント側ワンタイム認証子は、前回の認証時に生成され、認証子テーブル72に書き込まれたものである。この通常認証の次回認証用クライアント側ワンタイム認証子および再認証の次回認証用クライアント側ワンタイム認証子は、端末装置1から送信されてくるワンタイム認証子の正当性判定に使用される。つまり、端末装置1から送信されてきたワンタイム認証子が、認証子テーブル72に保持されているワンタイム認証子と一致すると、そのワンタイム認証子は正当なものであると判定される。
【0067】
なお、通常認証シードの初期値および再認証シードの初期値は、予め記憶装置2およびサーバ装置4にセットされる。通常認証が成功するたびに、通常認証のシードの値が更新されていく。また、ヘルスチェック認証が成功した場合も、通常認証のシードの値が更新されていく。また、再認証が成功するたびに、通常認証のシードの値および再認証のシードの値が更新されていく。
【0068】
通常認証またはヘルスチェック認証でのワンタイム認証が成功すると、サーバ装置4では、サーバ側認証処理部82は、次回認証用シードからクライアント側ワンタイム認証子を生成し、通常認証テーブル72aにおいて、記憶装置2についての通常認証の次回認証用クライアント側ワンタイム認証子を更新する。
端末装置1の認証処理部43は、次回認証用シードに基づいて、記憶装置2内のシード101を更新する。
【0069】
再認証でのワンタイム認証が成功すると、サーバ装置4では、サーバ側認証処理部82は、再認証の次回認証用シードから再認証の次回認証用クライアント側ワンタイム認証子を生成し、また、通常認証の次回認証用シードから通常認証の次回認証用クライアント側ワンタイム認証子を生成し、認証子テーブル72において、記憶装置2についての再認証の次回認証用クライアント側ワンタイム認証子および通常認証の次回認証用クライアント側ワンタイム認証子を更新する。
端末装置1の認証処理部43は、次回認証用シードに基づいて、記憶装置2内のシード101を更新する。
【0070】
ここで、通常認証でのワンタイム認証(ステップS2)の詳細について説明する。
図7は、
図6における通常認証でのワンタイム認証(ステップS2)の詳細について説明するシーケンス図である。なお、以下において、通常認証の説明中のnとヘルスチェック認証の説明中のnとは無関係である。
【0071】
記憶装置2には、シード101の他に、通常認証用の共通暗号鍵および再認証用の共通暗号鍵も保持されている。また、サーバ装置4にも、シードの他に、同一の共通暗号鍵が通常認証用の共通暗号鍵および再認証用の共通暗号鍵として保持されている。つまり、通常認証用の共通暗号鍵の初期値および再認証用の共通暗号鍵の初期値は、予め記憶装置2およびサーバ装置4にセットされている。そして、後述のように、通常認証またはヘルスチェック認証用の認証が成功するたびに、通常認証の共通暗号鍵の値は更新され、再認証の認証が成功するたびに、再認証の共通暗号鍵および通常認証の共通暗号鍵の値は更新されていく。
なお、ヘルスチェック認証は、必ず通常認証から移行するので、「ヘルスチェック認証の共通暗号鍵の初期値」というものは存在しない。
【0072】
ステップS21およびステップS22において、認証処理部43が、記憶装置2から、通常認証クライアント側シードCR1(n−1)およびCQ1(n−1)、通常認証クライアント側暗号鍵CK1(n−1)、通常認証クライアント側隠蔽固定情報CZ1、通常認証サーバ側シードSR1(n−1)およびSQ1(n−1)、通常認証サーバ側暗号鍵SK1(n−1)、通常認証サーバ側隠蔽固定情報SZ1、および再認証クライアント側シードXCR1(m−1)およびXCQ1(m−1)、再認証クライアント側暗号鍵XCK1(m−1)、再認証クライアント側隠蔽固定情報XCZ1、再認証サーバ側シードXSR1(m−1)およびXSQ1(m−1)、再認証サーバ側暗号鍵XSK1(m−1)、再認証サーバ側隠蔽固定情報XSZ1を読み込み、RAM207上に保持する。
【0073】
なお、再認証クライアント側隠蔽固定情報XCZ1は、通常認証クライアント側隠蔽固定情報CZ1と異なっていてもよいし、同一であってもよい。また、再認証サーバ側隠蔽固定情報XSZ1は、通常認証サーバ側隠蔽固定情報SZ1と異なっていてもよいし、同一であってもよい。
【0074】
シードCR1(n−1)およびCQ1(n−1)は、今回(n−1)のワンタイム通常認証についてのクライアント側シードである。シードSR1(n−1)およびSQ1(n−1)は、今回(n−1)のワンタイム通常認証についてのサーバ側シードである。クライアント共側通暗号鍵CK1(n−1)は、今回(n−1)のワンタイム通常認証時に、次回認証用のクライアント側シードCR1(n)およびCQ1(n)をサーバ装置4へ送信する際に、そのCR1(n)およびCQ1(n)を暗号化するためのクライアント側暗号鍵である。サーバ共側通暗号鍵SK1(n−1)は、今回(n−1)のワンタイム通常認証時に、次回認証用のサーバ側シードSR1(n)およびSQ1(n)を端末装置1へ送信する際に、そのSR1(n)およびSQ1(n)を暗号化するためのサーバ側暗号鍵である。
【0075】
ステップS23において、認証処理部43は、乱数CRおよびCQを生成し、その乱数CRおよびCQを、次回認証用のクライアント側シードCR1(n)およびCQ1(n)にセットする。
【0076】
ステップS24において、認証処理部43は、今回のワンタイム認証についての、クライアント側ワンタイム認証子C1(n−1)を生成する。
【0077】
ワンタイム認証子C1(n−1)は、一方向性関数で計算される。この一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hcである。
【0078】
ワンタイム認証子C1(n−1)は、次式に従って計算される。
【0079】
C1(n−1)=hc(CZ1,CR1(n−1),SQ1(n−1))
【0080】
ここで、ハッシュ関数hcの第1引数には、CZ1が使用され、第2引数には、CR1(n−1)が使用され、第3引数には、SQ1(n−1)が使用される。
【0081】
また、認証処理部43は、所定の暗号化方式に従って、クライアント暗号鍵CK1(n−1)で、CR1(n)、CQ1(n)およびRQST(n)を暗号化する。なお、クライアント暗号鍵CK1(n−1)での暗号化後のCR1(n)、CQ1(n)およびRQST(n)を、CK1(n−1)*CR1(n)、CK1(n−1)*CQ1(n)およびCK1(n−1)*RQST(n)と表現する。
【0082】
ステップS25において、認証処理部43は、通信処理部42を使用して、ワンタイム認証子C1(n−1)、CK1(n−1)*CR1(n)、CK1(n−1)*CQ1(n)およびCK1(n−1)*RQST(n)をサーバ装置4へ送信する。このとき、通信処理部42は、ワンタイム認証子C1(n−1)、CK1(n−1)*CR1(n)、CK1(n−1)*CQ1(n)およびCK1(n−1)*RQST(n)を1つのメッセージとして送信する。
【0083】
ステップS26において、サーバ装置4のサーバ側認証処理部82は、通信処理部81を使用して、そのメッセージを受信し、そのメッセージからワンタイム認証子C1(n−1)、CK1(n−1)*CR1(n)およびCK1(n−1)*CQ1(n)を抽出し、受信したワンタイム認証子C1(n−1)が、保持している通常認証のクライアント側ワンタイム認証子に一致するか否かを判定する。
【0084】
なお、端末装置1からサーバ装置4へのメッセージのデータフォーマット(ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置、およびサービス番号のサイズと位置)は、通常認証またはヘルスチェック認証と再認証で異なる。
【0085】
また、通常認証またはヘルスチェック認証のクライアント側ワンタイム認証子と再認証クライアント側ワンタイム認証子は異なるデータフォーマット(つまり、同一データ長ではない)ではあるが、受信ワンタイム認証子のみからでは、通常認証またはヘルスチェック認証のワンタイム認証子か再認証のワンタイム認証子かの区別がつかない。このため、サーバ側認証処理部82は、受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子に一致するか否か、および受信したワンタイム認証子が、再認証テーブル72bに保持されているワンタイム認証子に一致するか否かを判定し、受信したワンタイム認証子が、
(1)通常認証またはヘルスチェック認証の正当なワンタイム認証子、
(2)再認証の正当なワンタイム認証子、および
(3)不正なワンタイム認証子
のいずれかであるかを判定する。
【0086】
受信したワンタイム認証子C1(n−1)が、不正なワンタイム認証子であると判定した場合、サーバ側認証処理部82は、認証失敗と判定し、処理を終了する。
【0087】
受信したワンタイム認証子C1(n−1)が、通常認証テーブル72aに保持している通常認証用のクライアント側ワンタイム認証子に一致した場合、サーバ側認証処理部82は、認証成功と判定する。
【0088】
ステップS27において、サーバ側認証処理部82は、乱数SRおよびSQを生成し、その乱数SRおよびSQを、次回認証用サーバ側通常認証シードSR1(n)およびSQ1(n)にセットする。
【0089】
ステップS28において、サーバ側認証処理部82は、シードテーブル71に保持しているクライアント暗号鍵CK1(n−1)を用いて、CK1(n−1)*CR1(n)およびCK1(n−1)*CQ1(n)を、CR1(n)およびCQ1(n)へ復号する。そして、サーバ側認証処理部82は、今回(n−1)のワンタイム認証用の通常認証サーバ側ワンタイム認証子S1(n−1)を生成する。
【0090】
ワンタイム認証子S1(n−1)は、一方向性関数で計算される。この一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hsである。
【0091】
ワンタイム認証子S1(n−1)は、次式に従って計算される。
【0092】
S1(n−1)=hs(SZ1,SR1(n−1),CQ1(n−1))
【0093】
ここで、ハッシュ関数hsの第1引数には、SZ1が使用され、第2引数には、SR1(n−1)が使用され、第3引数には、CQ1(n−1)が使用される。なお、ハッシュ関数hsは、ハッシュ関数hcと同一の関数でもよいし、異なる関数でもよい。
【0094】
また、サーバ側認証処理部82は、所定の暗号化方式に従って、サーバ側共通暗号鍵SK1(n−1)で、SR1(n)およびSQ1(n)を暗号化する。なお、サーバ側共通暗号鍵SK1(n−1)での暗号化後のSR1(n)およびSQ1(n)を、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)と表現する。
【0095】
ステップS29において、サーバ側認証処理部82は、通信処理部81を使用して、ワンタイム認証子S1(n−1)、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)を端末装置1へ送信する。このとき、通信処理部81は、ワンタイム認証子S1(n−1)、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)を1つのメッセージとして送信する。
【0096】
なお、サーバ装置4から端末装置1へのメッセージのデータフォーマット(ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置)は、通常認証またはヘルスチェック認証と再認証とで異なる。
【0097】
また、通常認証サーバ側ワンタイム認証子と再認証サーバ側ワンタイム認証子は、同一のデータフォーマット(つまり、同一データ長)ではないが、端末装置1の認証処理部43は、モードフラグMの値で通常認証かヘルスチェック認証か再認証かのモードを特定し、受信したワンタイム認証子を、特定したモードのワンタイム認証子として取り扱う。
【0098】
ステップS30において、端末装置1の認証処理部43は、通信処理部42を使用して、そのメッセージを受信し、ワンタイム認証子S1(n−1)、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n−1)を抽出する。そして、認証処理部43は、モードフラグMの値に基づいて、受信したワンタイム認証子が通常認証のワンタイム認証子であることを特定する。
【0099】
次に、認証処理部43は、SZ1、SR1(n−1)およびCQ1(n−1)に基づいて、上述の式に従って正当なワンタイム認証子S1(n−1)の値を計算し、受信したワンタイム認証子S1(n−1)が、計算した値に一致するか否かを判定する。
【0100】
このとき、受信したワンタイム認証子S1(n−1)が、計算した値に一致しない場合、認証処理部43は、認証失敗と判定し、処理を終了する。この場合、シード101の通常認証シードと通常認証クライアント暗号鍵および通常認証サーバ暗号鍵は更新せず、再認証を実行する。
【0101】
受信したワンタイム認証子S1(n−1)が、計算した値に一致した場合、認証処理部43は、認証成功と判定し、まず、SK1(n−1)*SQ1(n)およびSK1(n−1)*SR1(n)を、保持している共通暗号鍵SK1(n−1)で、SR1(n)およびSQ1(n)へ復号し、この値を、次回認証用サーバ側通常認証シードにセットする。
【0102】
ステップS31において、認証処理部43は、次回認証用クライアント通常認証暗号鍵CK1(n)および次回認証用サーバ通常認証暗号鍵SK1(n)を次式に従って計算し、通常認証クライアント暗号鍵および通常認証サーバ暗号鍵を更新する。
【0103】
CK1(n)=hk(CR1(n),CQ1(n),CK1(n−1))
SK1(n)=hk(SR1(n),SQ1(n),SK1(n−1))
【0104】
ここで、hkは、一方向性関数であって、かつハッシュ関数である。
【0105】
ステップS32において、認証処理部43は、記憶装置2内のシード101およびクライアント暗号鍵およびサーバ暗号鍵を、CR1(n)、CQ1(n)、SR1(n)、およびSQ1(n)、並びにCK1(n)およびSK1(n)で更新する。
【0106】
ステップS33において、サーバ装置4のサーバ側認証処理部82は、次回認証用クライアント通常認証暗号鍵CK1(n)および次回認証用サーバ通常認証暗号鍵SK1(n)を上述の式に従って計算し、通常認証クライアント暗号鍵および通常認証サーバ暗号鍵を更新する。
【0107】
ステップS34において、サーバ側認証処理部82は、通常認証またはヘルスチェック認証の次回のワンタイム認証時に使用するクライアント側ワンタイム認証子C1(n)を、CZ1およびCR1(n)およびSQ1(n)から、上述の式に従って計算する。そして、サーバ側認証処理部82は、CR1(n)、CQ1(n)、SR1(n)、SQ1(n)、CK1(n)およびSK1(n)で、シードテーブル71における、記憶装置2についての通常認証のデータを更新し、C1(n)で、通常認証テーブル72aにおける、ワンタイム認証子を更新する。これにより、これらの値が、次回のセッション(つまり、次回の通常認証またはヘルスチェック認証)まで保持される。
【0108】
このようにして、通常認証でのワンタイム認証が実行される。
【0109】
図8は、実施の形態1におけるシードテーブル71の構造の一例を示す図である。
図9(a)は、実施の形態1における通常認証テーブル72aの構造の一例を示す図である。
図9(b)は、実施の形態1における再認証テーブル72bの構造の一例を示す図である。
【0110】
図8における通常認証アドレスは、通常認証テーブル72a内の、当該通常認証アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。
【0111】
図8における再認証アドレスは、再認証テーブル72b内の、当該再認証アドレスに関連付けられている管理番号と同一の管理番号を有するレコードの位置を示すデータである。
【0112】
また、
図9(a)において、サーバ側認証処理部82により、通常認証テーブル72a内のレコードは、ワンタイム認証子の値について昇順にソートされる。これにより、ワンタイム認証時に迅速に、クライアントから受信したワンタイム認証子が、通常認証テーブル72aに登録されているか否かを判定することができる。
【0113】
また、
図9(b)において、サーバ側認証処理部82により、再認証テーブル72b内のレコードは、ワンタイム認証子の値について昇順にソートされる。これにより、ワンタイム認証時に迅速に、クライアントから受信したワンタイム認証子が、再認証テーブル72bに登録されているか否かを判定することができる。
【0114】
なお、シードテーブル71、通常認証テーブル72a、再認証テーブル72bは、予め所定数のレコードを有しており、レコード内の管理番号以外のフィールドには初期値がセトされる。
【0115】
次にステップS26の詳細について説明する。
ステップS26では、サーバ側認証処理部82は、クライアント側から受信したクライアント側ワンタイム認証子C(サーバ側認証処理部82では、受信したクライアント側ワンタイム認証子が、通常認証ワンタイム認証子であるのか、ヘルスチェック認証ワンタイム認証子であるのか、それとも再認証ワンタイム認証子であるのか、まだ不明なため、取りあえずクライアント側ワンタイム認証子Cとしておく。)が、通常認証テーブル72aに登録されているクライアント側ワンタイム認証子のいずれかであるか否かを判定する。
【0116】
クライアント側から受信したクライアント側ワンタイム認証子Cが、通常認証テーブル72aに登録されているクライアント側ワンタイム認証子のいずれかである場合、今回の認証は通常認証またはヘルスチェック認証であったということになり、認証成功である。
【0117】
サーバ側認証処理部82は、通常認証テーブル72aにおいて、受信したクライアント側ワンタイム認証子Cに関連付けられている管理番号を特定する。そして、サーバ側認証処理部82は、特定された管理番号に対応するシードテーブル71中のレコードを用いてステップS27以降の処理を進める。
【0118】
クライアント側から受信したクライアント側ワンタイム認証子Cが、通常認証テーブル72aに登録されているクライアント側ワンタイム認証子のいずれかでなかった場合、サーバ側認証処理部82は、クライアント側から受信したクライアント側ワンタイム認証子Cが、再認証テーブル72bに登録されているクライアント側ワンタイム認証子のいずれかであるか否かを判定する。
【0119】
クライアント側から受信したクライアント側ワンタイム認証子Cが、再認証テーブル72bに登録されているクライアント側ワンタイム認証子のいずれかである場合、今回の認証は再認証であったということになり、認証成功である。
【0120】
サーバ側認証処理部82は、再認証テーブル72bにおいて、受信したクライアント側ワンタイム認証子Cに関連付けられている管理番号を特定する。そして、サーバ側認証処理部82は、特定された管理番号に対応するシードテーブル71中のレコードを用いて、後述する再認証時の処理を進める。
【0121】
クライアント側から受信したクライアント側ワンタイム認証子Cが、再認証テーブル72bに登録されているクライアント側ワンタイム認証子のいずれでもなかった場合、認証は失敗したことになる。
【0122】
次にステップS27の詳細について説明する。
図10は、ステップS27の詳細を説明するフローチャートである。
【0123】
ステップS101において、サーバ装置4では、サーバ側認証処理部82は、乱数SRを生成し、次回認証用サーバ側シードSR1(n)にセットする。
【0124】
ステップS102において、サーバ側認証処理部82は、乱数SQを作成する。
【0125】
ステップS103において、この乱数SQを次回認証用サーバ側シードに使用した場合に、次回認証用クライアント側ワンタイム認証子が、通常認証テーブル72aに登録されているクライアント側ワンタイム認証子に一致するか否かを判定する。つまり、生成した乱数SQを使用した場合のクライアント側ワンタイム認証子の一意性(つまり、同じ値のクライアント側ワンタイム認証子が存在しないこと)が確保されるか否かが判定される。
この時、サーバ側認証処理部82は、次式に従って、この乱数SQを次回認証用サーバ側シードに使用した場合の、次回認証用クライアント側認証子X1を計算し、このワンタイム認証子が、通常認証テーブル72aに登録されているか否かを判定する。
X1=hash1{CZ1,CR1(n),SQ}
ステップS104において、乱数SQを次回認証用サーバ側シードに使用した場合に、次回認証用クライアント側ワンタイム認証子が、再認証テーブル72bに登録されているクライアント側ワンタイム認証子に一致するか否かを判定する。
【0126】
そして、生成した乱数SQで一意性が確保されないと判定した場合、サーバ側認証処理部82は、一意性が確保されるまで、ステップS102へ戻って乱数SQを再生成する。一方、生成した乱数SQで一意性が確保されると判定した場合、ステップS105へ移る。
【0127】
ステップS105において、サーバ側認証処理部82は、乱数SQを、次回認証用サーバ側シードSQ1(n)にセットする。
【0128】
次に、ステップS34の詳細について説明する。
図11は、ステップS34の詳細を説明するフローチャートである。
【0129】
ステップS111において、サーバ側認証処理部82は、シードテーブル71に、その管理番号の次回認証用のシードCR1(n)、CQ1(n)、SR1(n)、SQ1(n)、CK1(n)、SK1(n)を書き込む。
【0130】
ステップS112において、ステップS103、S104での判定時に計算したX1を、次回認証用クライアント側ワンタイム認証子C1(n)とし、そのC1(n)で、認証子テーブル72において、その管理番号に関連付けられているワンタイム認証子を更新する。
すなわち、サーバ側認証処理部82は、その管理番号に関連付けられている通常認証アドレスをシードテーブル71から読み出し、その通常認証アドレスで、通常認証テーブル72aにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム認証子を更新する。
【0131】
ステップS113において、サーバ側認証処理部82は、通常認証テーブル72a内のレコードをワンタイム認証子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル71においてそのレコードの管理番号に関連付けられている通常認証アドレスを更新する。
【0132】
次に、ここで、ヘルスチェック認証でのワンタイム認証(ステップS4)の詳細について説明する。
図12は、
図6におけるヘルスチェック認証でのワンタイム認証(ステップS4)の詳細について説明するシーケンス図である。なお、以下において、通常認証の説明中のnとヘルスチェック認証の説明中のnとは無関係である。
【0133】
記憶装置2には、シード101の他に、通常認証用の共通暗号鍵が保持されている。また、サーバ装置4にも、シードの他に、同一の通常認証用の共通暗号鍵として保持されている。つまり、通常認証の共通暗号鍵の初期値は、予め記憶装置2およびサーバ装置4にセットされている。そして、後述のように、通常認証またはヘルスチェック認証が成功するたびに、通常認証の共通暗号鍵の値は更新され、再認証の認証が成功するたびに、再認証の共通暗号鍵および通常認証の共通暗号鍵の値は更新されていく。
【0134】
ステップS21において、認証処理部43が、記憶装置2から、通常認証クライアント側シードCR1(n−1)およびCQ1(n−1)、通常認証クライアント側共通暗号鍵CK1(n−1)、通常認証クライアント側隠蔽固定情報CZ1、通常認証サーバ側シードSR1(n−1)およびSQ1(n−1)、通常認証サーバ側共通暗号鍵SK1(n−1)、通常認証サーバ側隠蔽固定情報SZ1を読み込み、RAM207上に保持する。
【0135】
実施の形態1のヘルスチェック認証では、通常認証のためのシードや共通暗号鍵や隠蔽固定情報が使用される。そして、ヘルスチェック認証に成功すると、通常認証に成功したときと同様に、通常認証のためのシードや共通暗号鍵が更新される。ヘルスチェック認証では、要求コードRQSTの値が0であり、要求コードRQSTが暗号化されずに端末装置1からサーバ装置4へ送信される点が、通常認証と異なっている。
【0136】
シードCR1(n−1)およびCQ1(n−1)は、今回(n−1)のワンタイムヘルスチェック認証についてのクライアント側シードである。シードSR1(n−1)およびSQ1(n−1)は、今回(n−1)のワンタイムヘルスチェック認証についてのサーバ側シードである。クライアント側共通暗号鍵CK1(n−1)は、今回(n−1)のワンタイムヘルスチェック認証時に、次回認証用のクライアント側シードCR1(n)およびCQ1(n)をサーバ装置4へ送信する際に、そのCR1(n)およびCQ1(n)を暗号化するためのクライアント暗号鍵である。サーバ側共通暗号鍵SK1(n−1)は、今回(n−1)のワンタイムヘルスチェック認証時に、次回認証用のサーバ側シードSR1(n)およびSQ1(n)を端末装置1へ送信する際に、そのSR1(n)およびSQ1(n)を暗号化するためのサーバ側暗号鍵である。
【0137】
ステップS23において、認証処理部43は、乱数CRおよびCQを生成し、その乱数CRおよびCQを、次回認証用のクライアント側シードCR1(n)およびCQ1(n)にセットする。
【0138】
ステップS24において、認証処理部43は、今回のワンタイム認証についての、クライアント側ワンタイム認証子C1(n−1)を生成する。
【0139】
ワンタイム認証子C1(n−1)は、一方向性関数で計算される。この一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hcである。
【0140】
ワンタイム認証子C1(n−1)は、次式に従って計算される。
【0141】
C1(n−1)=hc(CZ1,CR1(n−1),SQ1(n−1))
【0142】
ここで、ハッシュ関数hcの第1引数には、CZ1が使用され、第2引数には、CR1(n−1)が使用され、第3引数には、SQ1(n−1)が使用される。
【0143】
また、認証処理部43は、所定の暗号化方式に従って、クライアント暗号鍵CK1(n−1)を用いて、CR1(n)およびCQ1(n)を暗号化する。なお、クライアント暗号鍵CK1(n−1)で暗号化した後のCR1(n)およびCQ1(n)を、CK1(n−1)*CR1(n)およびCK1(n−1)*CQ1(n)と表現する。
【0144】
ステップS40において、認証処理部43は、通信処理部42を使用して、ワンタイム認証子C1(n−1)、CK1(n−1)*CR1(n)、CK1(n−1)*CQ1(n)、および値が0の要求コードRQST(0)をサーバ装置4へ送信する。このとき、通信処理部42は、ワンタイム認証子C1(n−1)、CK1(n−1)*CR1(n)、CK1(n−1)*CQ1(n)および要求コードRQST(0)を1つのメッセージとして送信する。
【0145】
ステップS26において、サーバ側認証処理部82は、通信処理部81を使用して、そのメッセージを受信し、そのメッセージからワンタイム認証子C1(n−1)、CK1(n−1)*CR1(n)、CK1(n−1)*CQ1(n)を抽出し、受信したワンタイム認証子C1(n−1)が、保持している通常認証のクライアント側ワンタイム認証子に一致するか否かを判定する。
【0146】
なお、端末装置1からサーバ装置4へのメッセージのデータフォーマット(暗号化されたシードのサイズと位置、およびサービス番号のサイズと位置)は、ヘルスチェック認証と再認証で異なる。
【0147】
また、通常認証またはヘルスチェック認証クライアント側ワンタイム認証子と再認証クライアント側ワンタイム認証子は、異なるデータフォーマット(つまり、通常認証とヘルスチェック認証は同一データ長であるが、再認証のデータ長は異なる)であり、受信ワンタイム認証子のみからでは、通常認証またはヘルスチェック認証のワンタイム認証子かの区別がつかない。
【0148】
しかし、受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子に一致すれば、受信したワンタイム認証子が、通常認証またはヘルスチェック認証のワンタイム認証子であると判定できる。
また、受信したワンタイム認証子が、再認証テーブル72bに保持されているワンタイム認証子に一致すれば、受信したワンタイム認証子が、再認証のワンタイム認証子であると判定できる。
【0149】
また、受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子にも一致せず、再認証テーブル72bに保持されているワンタイム認証子に一致しなければ、不正なワンタイム認証子であると判定できる。
受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子に一致した場合、要求コードRQSTが0以外であれば、通常認証のワンタイム認証子であると判断できる。そして、要求コードRQSTが0であれば、ヘルスチェック認証のワンタイム認証子であると判定できる。
【0150】
受信したワンタイム認証子C1(n−1)が、不正なヘルスチェック認証のワンタイム認証子であると判定した場合、サーバ側認証処理部82は、認証失敗と判定し、処理を終了する。
【0151】
受信したワンタイム認証子C1(n−1)が、通常認証テーブル72aに保持しているクライアント側ワンタイム認証子に一致した場合、サーバ側認証処理部82は、認証成功と判定する。
ステップS27において、サーバ側認証処理部82は、乱数SRおよびSQを生成し、その乱数SRおよびSQを、次回認証用サーバ側通常認証兼ヘルスチェック認証シードSR1(n)およびSQ1(n)にセットする。
【0152】
ステップS28で、サーバ側認証処理部82は、シードテーブル71に保持しているクライアント暗号鍵CK1(n−1)を用いて、CK1(n−1)*CR1(n)およびCK1(n−1)*CQ1(n)を、CR1(n)およびCQ1(n)へ復号する。そして、サーバ側認証処理部82は、今回(n−1)のワンタイム認証用のヘルスチェック認証サーバ側ワンタイム認証子S1(n−1)を生成する。
【0153】
ワンタイム認証子S1(n−1)は、一方向性関数で計算される。この一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hsである。
【0154】
ワンタイム認証子S1(n−1)は、次式に従って計算される。
【0155】
S1(n−1)=hs(SZ1,SR1(n−1),CQ1(n−1))
【0156】
ここで、ハッシュ関数hsの第1引数には、SZが使用され、第2引数には、SR1(n−1)が使用され、第3引数には、CQ1(n−1)が使用される。なお、ハッシュ関数hsは、ハッシュ関数hcと同一の関数でもよいし、異なる関数でもよい。
【0157】
また、サーバ側認証処理部82は、所定の暗号化方式に従って、サーバ側暗号鍵SK1(n−1)で、SR1(n)およびSQ1(n)を暗号化する。なお、サーバ側暗号鍵SK1(n−1)で暗号化した後のSR1(n)およびSQ1(n)を、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)と表現する。
【0158】
ステップS29において、サーバ側認証処理部82は、通信処理部81を使用して、ワンタイム認証子S1(n−1)、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)を端末装置1へ送信する。このとき、通信処理部81は、ワンタイム認証子S1(n−1)、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)を1つのメッセージとして送信する。
【0159】
なお、サーバ装置4から端末装置1へのメッセージのデータフォーマット(暗号化されたシードのサイズと位置)は、通常認証およびヘルスチェック認証と再認証とで異なる。
【0160】
また、通常認証およびヘルスチェック認証のサーバ側ワンタイム認証子と再認証サーバ側ワンタイム認証子は、同一のデータフォーマット(つまり、同一データ長)ではないが、端末装置1の認証処理部43は、モードフラグMの値で通常認証かヘルスチェック認証か再認証かのモードを特定し、受信したワンタイム認証子を、特定したモードのワンタイム認証子として取り扱う。
【0161】
ステップS30において、端末装置1の認証処理部43は、通信処理部42を使用して、そのメッセージを受信し、ワンタイム認証子S1(n−1)、SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n−1)を抽出する。そして、認証処理部43は、モードフラグMの値に基づいて、受信したワンタイム認証子がヘルスチェック認証のワンタイム認証子であることを特定する。
【0162】
次に、認証処理部43は、SZ1、SR1(n−1)およびCQ1(n−1)に基づいて、上述の式に従って正当なワンタイム認証子S1(n−1)の値を計算し、受信したワンタイム認証子S1(n−1)が、計算した値に一致するか否かを判定する。
【0163】
このとき、受信したワンタイム認証子S1(n−1)が、計算した値に一致しない場合、認証処理部43は、認証失敗と判定し、処理を終了する。この場合、シード101の通常認証兼ヘルスチェックシードと通常認証兼ヘルスチェック認証クライアント暗号鍵および通常認証兼ヘルスチェック認証サーバ暗号鍵は更新せず、再認証を実行する。
【0164】
受信したワンタイム認証子S1(n−1)が、計算した値に一致した場合、認証処理部43は、認証成功と判定し、まず、SK1(n−1)*SQ1(n)およびSK1(n−1)*SR1(n)を、保持している共通暗号鍵SK1(n−1)で、SR1(n)およびSQ1(n)へ復号し、この値を、次回認証用サーバ側通常認証シードにセットする。
【0165】
ステップS31において、認証処理部43は、次回認証用クライアント通常認証暗号鍵CK1(n)および次回認証用サーバ通常認証暗号鍵SK1(n)を次式に従って計算し、通常認証クライアント暗号鍵および通常認証サーバ暗号鍵を更新する。
【0166】
CK1(n)=hk(CR1(n),CQ1(n),CK1(n−1))
SK1(n)=hk(SR1(n),SQ1(n),SK1(n−1))
【0167】
ここで、hkは、一方向性関数であって、かつハッシュ関数である。
【0168】
ステップS32において、ヘルスチェック認証のワンタイム認証に成功した後、認証処理部43は、記憶装置2内のシード101およびクライアント側暗号鍵およびサーバ側暗号鍵を、CR1(n)、CQ1(n)、SR1(n)およびSQ1(n)、並びにCK1(n)およびSK1(n)で更新する。
【0169】
ステップS33において、サーバ側認証処理部82は、次回認証用クライアント側通常認証暗号鍵CK1(n)および次回認証用サーバ側通常認証暗号鍵SK1(n)を上述の式に従って計算し、通常認証クライアント側暗号鍵および通常認証サーバ側暗号鍵を更新する。
【0170】
ステップS34において、サーバ側認証処理部82は、通常認証の次回のワンタイム認証時に使用するクライアント側ワンタイム認証子C1(n)を、CZ1およびCR1(n)およびSQ1(n)から、上述の式に従って計算する。そして、サーバ側認証処理部82は、CR1(n)、CQ1(n)、SR1(n)、SQ1(n)、CK1(n)およびSK1(n)で、シードテーブル71における、記憶装置2についての通常認証のデータを更新し、C1(n)で、通常認証テーブル72aにおける、ワンタイム認証子を更新する。これにより、これらの値が、次回のセッション(つまり、次回の通常認証またはヘルスチェック認証)まで保持される。
【0171】
このようにして、ヘルスチェック認証でのワンタイム認証が実行される。
【0172】
なお、サーバ装置のステップS26、S27およびS34の処理の詳細は、通常認証で説明したとおりであるので、省略する。
【0173】
次に、ここで、再認証でのワンタイム認証(ステップS7)の詳細について説明する。
図13は、
図6における再認証でのワンタイム認証(ステップS7)の詳細について説明するシーケンス図である。
【0174】
ステップS22において、認証処理部43は、通常認証のシードおよび暗号鍵の読み込み時に、再認証のためのシードおよび暗号鍵の初期値も、同時に読み込み、RAM207上に保持している。
【0175】
シードXCR1(m−1)およびXCQ1(m−1)は、今回(m−1)のワンタイム再認証についてのクライアント側シードである。シードXSR1(m−1)およびXSQ1(m−1)は、今回(m−1)のワンタイム再認証についてのサーバ側シードである。クライアント側共通暗号鍵XCK1(m−1)は、今回(m−1)のワンタイム再認証時に、次回認証用のクライアント側シードXCR1(m)およびXCQ1(m)をサーバ装置4へ送信する際に、そのXCR1(m)およびXCQ1(m)を暗号化するためのクライアント側暗号鍵である。サーバ側共通暗号鍵XSK1(m−1)は、今回(m−1)のワンタイム再認証時に、次回認証用のサーバ側シードXSR1(m)およびXSQ1(m)をサーバ装置4へ送信する際に、そのXSR1(m)およびXSQ1(m)を暗号化するためのサーバ側暗号鍵である。
【0176】
ステップS71において、認証処理部43は、再認証乱数XCRおよびXCQおよび通常認証初期乱数CRおよびCQを生成し、その乱数XCR、XCQ、CRおよびCQを、次回再認証用のクライアント側シードXCR1(m)およびXCQ1(m)、並びに次回通常認証用のクライアント側シードCR1(0)およびCQ1(0)にセットする。
【0177】
ステップS72において、認証処理部43は、今回のワンタイム認証についての、クライアント側ワンタイム認証子XC1(m−1)を生成する。
【0178】
ワンタイム認証子XC1(m−1)は、一方向性関数で計算される。この一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hcである。
【0179】
ワンタイム認証子XC1(m−1)は、次式に従って計算される
【0180】
XC1(m−1)=hc(XCZ1,XCR1(m−1),XSQ1(m−1))
【0181】
ここで、ハッシュ関数hcの第1引数には、XCZ1が使用され、第2引数には、XCR1(m−1)が使用され、第3引数には、XSQ1(m−1)が使用される。
【0182】
また、認証処理部43は、所定の暗号化方式に従って、再認証クライアント側共通暗号鍵XCK1(m−1)で、XCR1(m)、XCQ1(m)、CR1(0)およびCQ1(0)を暗号化する。なお、再認証クライアント側共通暗号鍵XCK1(m−1)で暗号化した後のXCR1(m)、XCQ1(m)、CR1(0)およびCQ1(0)を、XCK1(m−1)*XCR1(m)、XCK1(m−1)*XCQ1(m)、XCK1(m−1)*CR1(0)およびXCK1(m−1)*CQ1(0)と表現する。
【0183】
ステップS73において、認証処理部43は、通信処理部42を使用して、再認証クライアント側ワンタイム認証子XC1(m−1)、XCK1(m−1)*XCR1(m)、XCK1(m−1)*XCQ1(m)、XCK1(m−1)*CR1(0)、XCK1(m−1)*CQ1(0)および値が0の要求コードRQST(0)をサーバ装置4へ送信する。このとき、通信処理部42は、ワンタイム認証子XC1(m−1)、XCK1(m−1)*XCR1(m)、XCK1(m−1)*XCQ1(m)、XCK1(m−1)*CR1(0)、XCK1(m−1)*CQ1(0)および値が0の要求コードRQST(0)を1つのメッセージとして送信する。
【0184】
ステップS74において、サーバ装置4では、サーバ側認証処理部82は、通信処理部81を使用して、そのメッセージを受信し、そのメッセージから再認証クライアント側ワンタイム認証子XC1(m−1)、XCK1(m−1)*XCR1(m)、XCK1(m−1)*XCQ1(m)、XCK1(m−1)*CR1(0)、XCK1(m−1)*CQ1(0)を抽出し、受信した再認証ワンタイム認証子XC1(m−1)が、保持している再認証のクライアント側ワンタイム認証子に一致するか否かを判定する。
【0185】
なお、端末装置1からサーバ装置4へのメッセージのデータフォーマット(ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置、およびサービス番号のサイズと位置)は、通常認証またはヘルスチェック認証と再認証で異なる。
【0186】
また、通常認証またはヘルスチェック認証クライアント側ワンタイム認証子と再認証クライアント側ワンタイム認証子は異なるデータフォーマット(つまり、同一データ長ではない)ではあるが、受信ワンタイム認証子のみからでは、通常認証またはヘルスチェック認証のワンタイム認証子か再認証のワンタイム認証子かの区別がつかない。
しかし、受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子に一致すれば、受信したワンタイム認証子が、通常認証またはヘルスチェック認証のワンタイム認証子であると判定できる。
【0187】
また、受信したワンタイム認証子が、再認証テーブル72bに保持されているワンタイム認証子に一致すれば、受信したワンタイム認証子が、再認証のワンタイム認証子であると判定できる。
前述の通常認証のフローのステップS26において、受信したワンタイム認証子が再認証テーブル72bに保持されているワンタイム認証子に一致すれば、その後の処理は、このステップS75に継続されることになる。
【0188】
また、受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子にも一致せず、再認証テーブル72bに保持されているワンタイム認証子に一致しなければ、不正なワンタイム認証子であると判定できる。
受信したワンタイム認証子が、通常認証テーブル72aに保持されているワンタイム認証子に一致した場合、要求コードRQSTが0以外であれば、通常認証のワンタイム認証子であると判断できる。そして、要求コードRQSTが0であれば、ヘルスチェック認証のワンタイム認証子であると判定できる。
【0189】
受信したワンタイム認証子XC1(m−1)が、不正な再認証のワンタイム認証子であると判定した場合、サーバ側認証処理部82は、認証失敗と判定し、処理を終了する。
【0190】
ステップS74において、サーバ側認証処理部82は、受信したワンタイム認証子XC1(m−1)が、再認証テーブル72aに保持している再認証用のクライアント側ワンタイム認証子に一致した場合、今回のワンタイム認証は再認証であり、認証成功と判定する。
【0191】
ステップS75において、サーバ側認証処理部82は、再認証サーバ側乱数XSRおよびXSQ並びに通常認証サーバ側乱数SRおよびSQを生成し、その再認証乱数XSRおよびXSQを、次回認証用サーバ側再認証シードXSR1(m)およびXSQ1(m)に、その通常認証乱数SRおよびSQを、次回認証用サーバ側通常認証シードSR1(0)およびSQ1(0)に、セットする。
【0192】
ステップS76において、サーバ側認証処理部82は、シードテーブル71に保持しているクライアント側暗号鍵XCK1(m−1)を用いて、XCK1(m−1)*XCR1(m)、XCK1(m−1)*XCQ1(m)、XCK1(m−1)*CR1(0)、およびXCK1(m−1)*CQ1(0)を、XCR1(m)、XCQ1(m)、CR1(0)およびCQ1(0)へ復号する。そして、サーバ側認証処理部82は、今回(m−1)のワンタイム認証用の再認証サーバ側ワンタイム認証子XS1(m−1)を生成する。
【0193】
ワンタイム認証子XS1(m−1)は、一方向性関数で計算される。この一方向性関数は、3つの引数をとり、引数の順序によって関数値の異なる関数である。この実施の形態では、この一方向性関数は、ハッシュ関数hsである。
【0194】
ワンタイム認証子XS1(m−1)は、次式に従って計算される。
【0195】
XS1(m−1)=hs(XSZ1,XSR1(m−1),XCQ1(m−1))
【0196】
ここで、ハッシュ関数hsの第1引数には、XSZ1が使用され、第2引数には、XSR1(m−1)が使用され、第3引数には、XCQ1(m−1)が使用される。なお、ハッシュ関数hsは、ハッシュ関数hcと同一の関数でもよいし、異なる関数でもよい。
【0197】
また、サーバ側認証処理部82は、所定の暗号化方式に従って、サーバ暗号鍵XSK1(m−1)で、XSR1(m)、XSQ1(m)、SR1(0)およびSQ1(0)を暗号化する。なお、サーバ暗号鍵XSK1(m−1)での暗号化後のXSR1(m)、XSQ1(m)、SR1(0)およびSQ1(0)を、XSK1(m−1)*XSR1(m)、XSK1(m−1)*XSQ1(m)、XSK1(m−1)*SR1(0)およびXSK1(m−1)*SQ1(0)と表現する。
【0198】
ステップS77において、サーバ側認証処理部82は、通信処理部81を使用して、再認証サーバ側ワンタイム認証子XS1(m−1)、XSK1(m−1)*XSR1(m)、XSK1(m−1)*XSQ1(m)、XSK1(m−1)*SR1(0)およびXSK1(m−1)*SQ1(0)を端末装置1へ送信する。このとき、通信処理部81は、再認証サーバ側ワンタイム認証子XS1(m−1)、XSK1(m−1)*XSR1(m)、XSK1(m−1)*XSQ1(m)、XSK1(m−1)*SR1(0)およびXSK1(m−1)*SQ1(0)を1つのメッセージとして送信する。
【0199】
なお、サーバ装置4から端末装置1へのメッセージのデータフォーマット(ワンタイム認証子のサイズと位置、および暗号化されたシードのサイズと位置)は、通常認証またはヘルスチェック認証と再認証とで異なる。
【0200】
また、通常認証サーバ側ワンタイム認証子またはヘルスチェック認証サーバ側ワンタイム認証子と再認証サーバ側ワンタイム認証子は、同一のデータフォーマット(つまり、同一データ長)ではないが、端末装置1の認証処理部43は、モードフラグMの値で通常認証かヘルスチェック認証か再認証かのモードを特定し、受信したワンタイム認証子を、特定したモードのワンタイム認証子として取り扱う。
【0201】
ステップS78において、端末装置1の認証処理部43は、通信処理部42を使用して、そのメッセージを受信し、再認証サーバ側ワンタイム認証子XS1(m−1)、XSK1(m−1)*XSR1(m)、XSK1(m−1)*XSQ1(m−1)、XSK1(m−1)*SR1(0)およびXSK1(m−1)*SQ1(0)を抽出する。そして、認証処理部43は、モードフラグMの値に基づいて、受信したワンタイム認証子が再認証のワンタイム認証子であることを特定する。
【0202】
次に、認証処理部43は、XSZ1、XSR1(m−1)、XCQ1(m−1)に基づいて、上述の式に従って正当な再認証ワンタイム認証子XS1(m−1)の値を計算し、受信した再認証ワンタイム認証子XS1(m−1)が、計算した値に一致するか否かを判定する。
【0203】
このとき、受信したワンタイム認証子XS1(m−1)が、計算した値に一致しない場合、認証処理部43は、認証失敗と判定し、処理を終了する。この場合、記憶装置2のシード101とクライアント暗号鍵およびサーバ暗号鍵は更新しない。
【0204】
受信したワンタイム認証子XS1(m−1)が、計算した値に一致した場合、認証処理部43は、認証成功と判定し、保持しているサーバ再認証暗号鍵XSK1(m−1)で、XSK1(m−1)*XSR1(m)およびXSK1(m−1)*XSQ1(m)を、XSR1(m)およびXSQ1(m)へ復号し、この値を次回認証用サーバ側再認証シードにセットし、保持しているサーバ再認証暗号鍵XSK1(m−1)で、XSK1(m−1)*SR1(0)およびXSK1(m−1)*SQ1(0)を、SR1(0)およびSQ1(0)へ復号し、この値を、次回認証用サーバ側通常認証シードにセットする。
【0205】
ステップS79において、認証処理部43は、次回認証用クライアント側再認証共通暗号鍵XCK1(m)および次回認証用サーバ側再認証共通暗号鍵XSK1(m)を次式に従って計算し、クライアント側再認証共通暗号鍵およびサーバ側再認証共通暗号鍵を更新し、次回認証用クライアント側通常認証共通暗号鍵CK1(0)および次回認証用サーバ側通常認証共通暗号鍵SK1(0)を次式に従って計算し、クライアント側通常認証共通暗号鍵およびサーバ側通常認証共通暗号鍵を更新する。
【0206】
XCK1(m)=hk(XCR1(m),XCQ1(m),XCK1(m−1))
XSK1(m)=hk(XSR1(m),XSQ1(m),XSK1(m−1))
CK1(0)=hk(CR1(0),CQ1(0),XCK1(m−1))
SK1(0)=hk(SR1(0),SQ1(0),XSK1(m−1))
【0207】
ここで、hkは、一方向性関数であって、かつハッシュ関数である。
ステップS80において、認証処理部43は、記憶装置2の再認証シードおよび通常認証シードを含むシード101、および再認証のクライアント側およびサーバ側共通暗号鍵並びに通常認証のクライアント側およびサーバ側共通暗号鍵を更新する。
【0208】
ステップS81において、サーバ装置4のサーバ側認証処理部82は、再認証次回認証用クライアント側共通暗号鍵XCK1(m)および再認証次回認証用サーバ側共通暗号鍵XSK1(m)および通常認証次回認証用クライアント側共通暗号鍵CK1(0)および通常認証次回認証用サーバ暗号鍵SK1(0)を上述の式に従って計算し、再認証クライアント側共通暗号鍵および再認証サーバ側共通暗号鍵および通常認証クライアント側共通暗号鍵および通常認証サーバ側共通暗号鍵を更新する。
【0209】
ステップS82において、サーバ装置4のサーバ側認証処理部82は、再認証の次回のワンタイム認証時に使用するクライアント側ワンタイム認証子XC1(m)を、XCZ1、XCR1(m)およびXSQ1(m)から、上述の式に従って計算する。そして、サーバ側認証処理部82は、XCR1(m)、XCQ1(m)、XSR1(m)、XSQ1(m)、XCK1(m)およびXSK1(m)で、シードテーブル71における、再認証のデータを更新する。そして、サーバ側認証処理部82は、通常認証の次回のワンタイム認証時に使用するクライアント側ワンタイム認証子C1(0)を、CZ1およびCR1(0)およびSQ1(0)から、通常認証の次回のワンタイム認証子を上述の式に従って計算する。そして、サーバ側認証処理部82は、CR1(0)、CQ1(0)、SR1(0)、SQ1(0)、CK1(0)およびSK1(0)で、シードテーブル71における、通常認証のデータを更新する。これにより、これらの値が、次回のセッション(つまり、次回の通常認証)まで保持される。
【0210】
このようにして、再認証でのワンタイム認証が実行され、通常認証シードの初期設定が実行される。
【0211】
次に、ステップS75の詳細について説明する。
図14は、ステップS75の詳細を説明するフローチャートである。
【0212】
ステップS151において、サーバ装置4では、サーバ側認証処理部82は、再認証乱数XSRを生成し、次回認証用サーバ側シードXSR1(m)にセットする。
【0213】
ステップS152において、サーバ側認証処理部82は、再認証乱数XSQを作成する。
【0214】
ステップS153において、サーバ側認証処理部82は、この再認証乱数XSQを次回再認証サーバ側シードに使用した場合に、次回再認証クライアント側ワンタイム認証子が、通常認証テーブル72aに登録されているクライアント側ワンタイム認証子に一致するか否かを判定する。つまり、生成した再認証乱数XSQを使用した場合のクライアント側ワンタイム認証子の一意性(つまり、同じ値のクライアント側ワンタイム認証子が存在しないこと)が確保されるか否かが判定される。
この時、サーバ側認証処理部82は、次式に従って、この再認証乱数XSQを次回再認証サーバ側シードに使用した場合の、次回再認証クライアント側認証子X1を計算し、このワンタイム認証子が、通常認証テーブル72aに登録されているか否かを判定する。
X1=hash1{XCZ1,XCR1(m),XSQ}
ステップS154において、サーバ側認証処理部82は、この再認証乱数XSQを次回再認証サーバ側シードに使用した場合に、次回再認証クライアント側ワンタイム認証子が、再認証テーブル72bに登録されているクライアント側ワンタイム認証子に一致するか否かを判定する。
【0215】
そして、生成した再認証乱数XSQで一意性が確保されないと判定した場合、サーバ側認証処理部82は、一意性が確保されるまで、再認証乱数XSQを再生成する。一方、生成した再認証乱数XSQで一意性が確保されると判定した場合、ステップS155へ移る。
【0216】
ステップS155において、サーバ側認証処理部82は、再認証乱数XSQを、次回再認証用サーバ側シードXSQ1(m)にセットする。
【0217】
ステップS156において、サーバ装置4では、サーバ側認証処理部82は、乱数SRを生成し、次回認証用サーバ側シードSR1(0)にセットする。
【0218】
ステップS157において、サーバ側認証処理部82は、乱数SQを作成する。
【0219】
ステップS158において、サーバ側認証処理部82は、この乱数SQを次回通常認証サーバ側シードに使用した場合に、次回通常認証クライアント側ワンタイム認証子が、通常認証テーブル72aに登録されているクライアント側ワンタイム認証子に一致するか否かを判定する。つまり、生成した乱数SQを使用した場合のクライアント側ワンタイム認証子の一意性(つまり、同じ値のクライアント側ワンタイム認証子が存在しないこと)が確保されるか否かが判定される。
この時、サーバ側認証処理部82は、次式に従って、この乱数SQを次回通常認証サーバ側シードに使用した場合の、次回通常認証クライアント側認証子X2を計算し、このワンタイム認証子が、通常認証テーブル72aに登録されているか否かを判定する。
X2=hash1{CZ1,CR1(0),SQ}
ステップS159において、サーバ側認証処理部82は、この乱数SQを次回通常認証サーバ側シードに使用した場合に、次回通常認証クライアント側ワンタイム認証子が、再証テーブル72bに登録されているクライアント側ワンタイム認証子に一致するか否かを判定する。
【0220】
そして、生成した乱数SQで一意性が確保されないと判定した場合、サーバ側認証処理部82は、一意性が確保されるまで、乱数SQを再生成する。一方、生成した乱数SQで一意性が確保されると判定した場合、ステップS160へ移る。
【0221】
ステップS160において、サーバ側認証処理部82は、乱数SQを、次回通常認証用サーバ側シードSQ1(0)にセットする。
【0222】
次に、ステップS82の詳細について説明する。
図15は、ステップS82の詳細を説明するフローチャートである。
【0223】
ステップS171において、サーバ側認証処理部82は、シードテーブル71に、その管理番号の次回認証用のシードおよび共通暗号鍵XCR1(m),XCQ1(m),XSR1(m),XSQ1(m),XCK1(m),XSK1(m),CR1(0),CQ1(0),SR1(0),SQ1(0),CK1(0),およびSK1(0)を書き込む。
【0224】
ステップS172において、ステップS153、S154での判定時に計算したX1を、次回再認証クライアント側ワンタイム認証子XC1(m)とし、そのXC1(m)で、再認証テーブル72bにおいて、その管理番号に関連付けられているワンタイム認証子を更新する。
すなわち、サーバ側認証処理部82は、その管理番号に関連付けられている再認証アドレスをシードテーブル71から読み出し、その再認証アドレスで、再認証テーブル72bにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム認証子を更新する。
【0225】
ステップS173において、サーバ側認証処理部82は、再認証テーブル72b内のレコードをワンタイム認証子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル71においてそのレコードの管理番号に関連付けられている再認証アドレスを更新する。
【0226】
ステップS174において、ステップS158、S159での判定時に計算したX2を、次回通常認証クライアント側ワンタイム認証子C1(0)とし、そのC1(0)で、通常認証テーブル72aにおいて、その管理番号に関連付けられているワンタイム認証子を更新する。
すなわち、サーバ側認証処理部82は、その管理番号に関連付けられている通常認証アドレスをシードテーブル71から読み出し、その通常認証アドレスで、通常認証テーブル72aにおけるその管理番号のレコードを特定し、そのレコード内のワンタイム認証子を更新する。
【0227】
ステップS175において、サーバ側認証処理部82は、通常認証テーブル72a内のレコードをワンタイム認証子の値が昇順になるようにソートし、ソートにより位置に変更のあったレコードについて、シードテーブル71においてそのレコードの管理番号に関連付けられている通常認証アドレスを更新する。
【0228】
[実施の形態1の変形例1]
今回のクライアント側ワンタイム認証子は、次式で得られる。
C1(n−1)=hash1{CZ1,CR1(n−1)、SQ1(n−1)}
【0229】
3つの引数の内、CZ1は、隠蔽固定情報であり、CR1(n−1)とSQ1(n−1)は、前回のワンタイム認証の終了時にシード101に書き込まれた値であるから、C1(n−1)は、前回のワンタイム認証の終了時に決まっている値である。したがって、前回のワンタイム認証の終了時に、今回のクライアント側ワンタイム認証子C1(n−1)の値を求めてシード101に書き込んでおくように、実施の形態1を変形することが可能である。この変形例によれば、今回の認証処理の冒頭のステップS24において、ハッシュ回路を使ってクライアント側ワンタイム認証子を計算するステップを省くことができるから、今回の認証に要する時間を短縮することができる。
【0230】
[実施の形態1の変形例2]
実施の形態1では、クライアント側の乱数CR,CQは端末装置1で発生させていた。これらの乱数もサーバ側で発生するように変更すれば、仮に、悪意ある第三者に端末装置1を調べられても、乱数発生の仕組みを知られることがなくなる。
【0231】
図16は、このように全ての乱数をサーバ装置側で発生させるようにした場合の通常認証のフローを示す図である。
図7と比較して変更のあるステップのみを説明する。
【0232】
ステップS181では、クライアント側ワンタイム認証子C1(n−1)と、暗号化された要求コードCK1(n−1)*RQST(n)をサーバ装置4へ送信する。
【0233】
ステップS182では、サーバ側認証処理部82は、乱数CR,CQ,SRおよびSQを生成する。そして、乱数CRおよびCQを、次回認証用クライアント側通常認証シードCR1(n)およびCQ1(n)にセットする。また乱数SRおよびSQを、次回認証用サーバ側通常認証シードSR1(n)およびSQ1(n)にセットする。
【0234】
ステップS183では、サーバ側認証処理部82は、通信処理部81を使用して、ワンタイム認証子S1(n−1)、SK1(n−1)*CR1(n),SK1(n−1)*CQ1(n),SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)を端末装置1へ送信する。このとき、通信処理部81は、ワンタイム認証子S1(n−1)、SK1(n−1)*CR1(n),SK1(n−1)*CQ1(n),SK1(n−1)*SR1(n)およびSK1(n−1)*SQ1(n)を1つのメッセージとして送信する。
【0235】
図17にステップS182の詳細を示す。
図10と比較して変更のあるステップのみを説明する。
【0236】
ステップS191では、サーバ側認証処理部82は、乱数CR,CQ,SRを生成し、次回認証用クライアント側シードCR1(n),CQ1(n),および次回認証用サーバ側シードSR1(n)にセットする。
【0237】
ヘルスチェック認証および再認証のフローについても、同様に、全ての乱数をサーバ装置側で発生させるように変形することができる。
【0238】
上述の実施の形態に対する様々な変更および修正については、その主題の趣旨および範囲から離れることなく、かつ意図された利点を弱めることなく行われてもよい。つまり、そのような変更および修正が特許請求の範囲に含まれることを意図している。
【0239】
例えば、上記実施の形態1において、再認証での相互認証で通常認証のシードを復旧したように、再認証での相互認証に失敗したときに、再々認証モードでの相互認証で、再認証のシードを復旧するようにしてもよい。
【0240】
また、上記実施の形態1において、サーバ装置4のサーバ側認証処理部82は、サーバ装置4の起動時に、シードテーブル71および認証子テーンブル72を記憶装置55からRAM53へ読み出し、ワンタイム認証子に基づく相互認証を、RAM53上のシードテーブル71および認証子テーブル72に基づいて実行し、サーバ装置4のシャットダウン時に、RAM53上のシードテーブル71および認証子テーブル72で、記憶装置55上のシードテーブル71および認証子テーブル72を更新するようにしてもよい。