(57)【要約】      （修正有）【課題】パスワードの安全性を向上させる情報処理装置、制御方法、及びプログラムを提供する。【解決手段】分割部２０２０は、第１文字列を、所定の規則で複数の部分文字列に分割する。第１文字列は、ユーザの識別子に対応づけられている。ハッシュ値列生成部２０４０は第１ハッシュ値列を生成する。ハッシュ値列生成部２０４０は、所定のハッシュ関数を用いて、複数の部分文字列それぞれについてハッシュ値を算出し、算出された複数のハッシュ値からなる列を第１ハッシュ値列とする。判定部２０６０は、第１ハッシュ値列と第２ハッシュ値列とが類似するか否かを判定する。第２ハッシュ値列は、ユーザの識別子に対応づけられている第２文字列から生成されたものである。その生成方法は、第１文字列から第１ハッシュ値列を生成する方法と同じ方法である。【選択図】図１
2017182377.tif 000002
【特許請求の範囲】
【請求項１】
ユーザの識別子に対応づけられた第１の文字列を、所定の規則で複数の部分文字列に分割する分割手段と、
所定のハッシュ関数を用いて、前記複数の部分文字列それぞれについてハッシュ値を算出し、前記算出された複数のハッシュ値の列である第１のハッシュ値列を生成するハッシュ値列生成手段と、
前記第１のハッシュ値列と第２のハッシュ値列とが類似するか否かを判定する判定手段と、
を有し、
前記第２のハッシュ値列は、前記所定の規則及び前記所定のハッシュ関数を用いて、前記ユーザの識別子に対応づけられた第２の文字列から生成されたハッシュ値列である、情報処理装置。
【請求項２】
前記第１の文字列と前記第２の文字列は、互いに異なるタイミングで生成される、請求項１に記載の情報処理装置。
【請求項３】
前記ハッシュ値列生成手段は、
前記複数の部分文字列それぞれを所定の規則で変換し、
前記所定のハッシュ関数を用いて、前記変換された複数の部分文字列それぞれのハッシュ値を算出し、
前記算出された複数のハッシュ値の列を前記第１のハッシュ値列とする、請求項１又は２に記載の情報処理装置。
【請求項４】
前記所定の規則は、前記複数の部分文字列それぞれに対し、前記ユーザの識別子に対応づけられている所定のデータを付加する規則である、請求項３に記載の情報処理装置。
【請求項５】
前記ユーザの識別子に対し、前記ハッシュ関数の適用回数が対応づけられており、
前記ハッシュ値列生成手段は、前記複数の部分文字列それぞれについて、前記ハッシュ関数の適用を前記適用回数行う、請求項１乃至４いずれか一項に記載の情報処理装置。
【請求項６】
前記判定手段によって前記第１のハッシュ値列と前記第２のハッシュ値列とが類似すると判定された場合に警告情報を出力する警告情報出力手段を有する、請求項１乃至５いずれか一項に記載の情報処理装置。
【請求項７】
コンピュータによって実行される制御方法であって、
ユーザの識別子に対応づけられた第１の文字列を、所定の規則で複数の部分文字列に分割する分割ステップと、
所定のハッシュ関数を用いて、前記複数の部分文字列それぞれについてハッシュ値を算出し、前記算出された複数のハッシュ値の列である第１のハッシュ値列を生成するハッシュ値列生成ステップと、
前記第１のハッシュ値列と第２のハッシュ値列とが類似するか否かを判定する判定ステップと、
を有し、
前記第２のハッシュ値列は、前記所定の規則及び前記所定のハッシュ関数を用いて、前記ユーザの識別子に対応づけられた第２の文字列から生成されたハッシュ値列である、制御方法。
【請求項８】
請求項７に記載の制御方法が有する各ステップをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は文字列処理に関する。
【背景技術】
【０００２】
ユーザ認証を行う手段の１つとして、パスワードを用いた認証がある。パスワードを用いて認証を行うためには、予め各ユーザについて、ユーザ識別子及びパスワードの組み合わせを記憶装置に記憶させておく。ユーザ認証を行う装置（以下、認証装置）は、ユーザ認証を行う際、ユーザ識別子及びパスワードの組み合わせをユーザから取得する。そして、認証装置は、取得したユーザ識別子及びパスワードの組み合わせが、記憶装置に記憶されているユーザ識別子及びパスワードの組み合わせと合致するか否かを判定することで、ユーザ認証を行う。
【０００３】
パスワードは、何らかの原因で漏洩する可能性がある。そのため、同一のパスワードが長期間使い続けられることは好ましくない。そこで、ユーザに対してパスワードの変更が求められる。
【０００４】
パスワードを変更する際、新たなパスワードは、元のパスワードと類似しないことが好ましい。仮に元のパスワードが漏洩していると、そのパスワードから、そのパスワードに類似している新たなパスワードが推測されてしまう恐れがあるためである。
【０００５】
パスワードの管理に関する技術を開示している文献には、例えば特許文献１から特許文献３がある。特許文献１と特許文献２は、新たなパスワードを表す文字列と、これまでに入力されたパスワードを表す文字列との類否を判定するシステムを開示している。特許文献１のシステムは、現在のパスワードを表す文字列と新たなパスワードを表す文字列との間で内積を計算し、この内積の大きさで類否を判定する。特許文献２のシステムは、隠れマルコフモデルなどの確率モデルを用いて、これまでに入力された１つ以上のパスワードの文字列に基づき、文字列の状態遷移モデルを生成する。そして、特許文献２のシステムは、この状態遷移モデルを用いて、新たに入力されたパスワードの各文字の出現確率を算出し、算出した出現確率の積の大きさで、新たに入力されたパスワードとこれまでに入力されたパスワードとの類否を判定する。
【０００６】
特許文献３は、ユーザに入力されたパスワードが、所定の禁止されたパスワードと同一又は類似の場合に、入力されたパスワードの登録を拒否するシステムを開示している。所定の禁止されたパスワードは、例えば覚えやすい簡単なパスワード（例えば「password」）である。特許文献３では、「ａと＠」や「Ｇと６」など、外見上似ている文字の対応表を予め用意しておくことで、所定の禁止パスワードに外見上類似しているパスワードの登録を拒否する。例えば「password」が禁止パスワードである場合、「p@ssword」というパスワードの登録も拒否される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２３０６８４号公報
【特許文献２】特開２０１０−１９１８７１号公報
【特許文献３】欧州特許第１９４３７６８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
パスワードを安全に管理するため、ユーザから取得したパスワードそのものについては記憶装置に記憶せず、パスワード全体のハッシュ値を記憶装置に記憶しておく手法が利用されることがある。
【０００９】
この手法が利用されていると、前述した特許文献１から特許文献３に開示されている技術が利用できない。これらの技術は、新たなパスワードとの比較対象とするパスワード（例えば現在のパスワード）が記憶装置に記憶されていることを前提としているためである。
【００１０】
また、パスワード全体のハッシュ値同士を比較しても、パスワードそのもの同士の類否を判定することはできない。パスワード全体のハッシュ値同士の類否と、パスワードそのもの同士の類否は、必ずしも一致しないためである。
【００１１】
本発明は、上記の課題に鑑みてなされたものであり、パスワードの安全性を向上する技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の情報処理装置は、（１）ユーザの識別子に対応づけられた第１の文字列を、所定の規則で複数の部分文字列に分割する分割手段と、（２）所定のハッシュ関数を用いて、前記複数の部分文字列それぞれについてハッシュ値を算出し、前記算出された複数のハッシュ値の列である第１のハッシュ値列を生成するハッシュ値列生成手段と、（３）前記第１のハッシュ値列と第２のハッシュ値列とが類似するか否かを判定する判定手段と、を有する。
前記第２のハッシュ値列は、前記所定の規則及び前記所定のハッシュ関数を用いて、前記ユーザの識別子に対応づけられた第２の文字列から生成されたハッシュ値列である。
【００１３】
本発明の制御方法は、コンピュータによって実行される。当該制御方法は、（１）ユーザの識別子に対応づけられた第１の文字列を、所定の規則で複数の部分文字列に分割する分割ステップと、（２）所定のハッシュ関数を用いて、前記複数の部分文字列それぞれについてハッシュ値を算出し、前記算出された複数のハッシュ値の列である第１のハッシュ値列を生成するハッシュ値列生成ステップと、（３）前記第１のハッシュ値列と第２のハッシュ値列とが類似するか否かを判定する判定ステップと、を有する。
前記第２のハッシュ値列は、前記所定の規則及び前記所定のハッシュ関数を用いて、前記ユーザの識別子に対応づけられた第２の文字列から生成されたハッシュ値列である。
【００１４】
本発明のプログラムは、本発明の制御方法が有する各ステップをコンピュータに実行させる。
【発明の効果】
【００１５】
本発明によれば、パスワードの安全性を向上する技術が提供される。
【図面の簡単な説明】
【００１６】
【図１】実施形態１に係る情報処理装置を例示するブロック図である。
【図２】文字列全体のハッシュ値同士を比較する方法を例示する図である。
【図３】文字列から生成されるハッシュ値列を比較する方法を例示する図である。
【図４】情報処理装置を実現するための計算機を例示する図である。
【図５】情報処理装置の実現例を示す図である。
【図６】実施形態１の情報処理装置によって実行される処理の流れを例示するフローチャートである。
【図７】第１文字列を２文字ずつ分割する方法を例示する図である。
【図８】第１文字列を３個の部分文字列に分割する方法を例示する図である。
【図９】第１文字列において連続していない文字から部分文字列を生成する方法を例示する図である。
【図１０】第１部分文字列群から第１ハッシュ値列を生成する方法を例示する図である。
【図１１】一致するハッシュ値の個数を基準としてハッシュ値列の類否を判定するケースを例示する図である。
【図１２】編集距離を利用してハッシュ値列の類否を判定するケースを例示する図である。
【図１３】ユーザの現在のパスワードから生成されたハッシュ値列がユーザＩＤと対応づけられて記憶されている様子を例示する図である。
【図１４】部分文字列に対してソルトを付加するケースを例示する図である。
【図１５】情報処理装置の外部に設けられているデータベースにおいて、ユーザＩＤと対応付けられたソルトが管理されている様子を例示する図である。
【図１６】実施形態２の情報処理装置によって実行される処理の流れを例示するフローチャートである。
【図１７】情報処理装置の外部に設けられているデータベースにおいて、ユーザＩＤと対応付けられたハッシュの適用回数が管理されている様子を例示する図である。
【図１８】データベースにおいて、ハッシュの適用回数とソルトがユーザＩＤと対応づけられて管理される様子を例示する図である。
【図１９】実施形態４の情報処理装置を例示するブロック図である。
【図２０】実施形態４の情報処理装置によって実行される処理の流れを例示するフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【００１８】
［実施形態１］
図１は、実施形態１に係る情報処理装置２０００を例示するブロック図である。図１において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を表している。
【００１９】
情報処理装置２０００は、分割部２０２０、ハッシュ値列生成部２０４０、及び判定部２０６０を有する。分割部２０２０は、第１文字列を、所定の規則で複数の部分文字列に分割する。第１文字列は、ユーザの識別子に対応づけられている。例えば第１文字列がパスワードである場合、ユーザの識別子は、パスワードと共に入力されるユーザＩＤ（Identifier）である。以下、第１文字列を分割することで得られた複数の部分文字列を、第１部分文字列群とも表記する。
【００２０】
ハッシュ値列生成部２０４０は第１ハッシュ値列を生成する。具体的には、ハッシュ値列生成部２０４０は、所定のハッシュ関数を用いて、上記複数の部分文字列それぞれについてハッシュ値を算出する。これにより、複数のハッシュ値が算出される。ハッシュ値列生成部２０４０は、この算出された複数のハッシュ値からなる列を、上記第１ハッシュ値列とする。
【００２１】
判定部２０６０は、第１ハッシュ値列と第２ハッシュ値列とが類似するか否かを判定する。第２ハッシュ値列は、上記ユーザの識別子に対応づけられている第２文字列から生成されたものである。その生成方法は、第１文字列から第１ハッシュ値列を生成する方法と同様の方法である。具体的には、（１）第２文字列を上記所定の規則で複数の部分文字列に分割し、（２）上記所定のハッシュ関数を用いて各部分文字列のハッシュ値を算出する。これによって算出された複数のハッシュ値からなる列が、第２ハッシュ値列である。なお第２文字列は、第１文字列とは異なるタイミングで生成されたものである。
【００２２】
ここで第２ハッシュ値列は、第１ハッシュ値列の生成を行う情報処理装置２０００によって生成されたものに限定されない。例えば情報処理装置２０００を実現する計算機が複数ある場合、第１ハッシュ値列の生成と第２ハッシュ値列の生成は、それぞれ異なる計算機によって行われてもよい。また例えば、第２ハッシュ値列の生成は、情報処理装置２０００を実現する計算機以外の計算機によって行われてもよい。
【００２３】
＜作用・効果＞
第１文字列と、第１文字列とは異なるタイミングで生成された第２文字列とが類似しているか否かを判定したい場合、第１文字列と第２文字列とを直接比較するためには、第２文字列を記憶装置などに記憶しておく必要がある。そのため、第２文字列そのものを記憶しておくことが不都合な環境では、第１文字列と第２文字列とを直接比較する方法が利用できない。例えばパスワードの管理においては、パスワードそのもの（第２文字列）を記憶しておくことは好ましくなく、パスワードのハッシュ値を記憶しておくことが好ましい。
【００２４】
ここで、第２文字列全体のハッシュ値を記憶しておき、第１文字列全体のハッシュ値と第２文字列全体のハッシュ値とを比較する方法も考えられる。しかし、文字列全体のハッシュ値同士の比較では、文字列同士の類否を判断することが難しい。文字列全体のハッシュ値同士の比較では、文字列全体が同一であるか否かの判定はできても、文字列全体がどの程度類似しているかの判定ができないためである。これは一般に、文字列同士の類似度合いと、文字列から生成されたハッシュ値同士の類似度合いとの間に相関が無いためである。
【００２５】
図２は、文字列全体のハッシュ値同士を比較する方法を例示する図である。図２（ａ）では、ハッシュ値同士が一致していることから、文字列同士も一致していることが分かる。一方、図２（ｂ）と図２（ｂ）ではいずれも、ハッシュ値同士が一致していないことから、文字列同士が一致していないことが分かる。
【００２６】
ここで、図２（ｂ）の場合、文字列Ａと文字列Ｂの差異は末尾の１文字である。よって、これらの文字列は類似していると言える。一方、図２（ｃ）の場合、文字列Ａと文字列Ｂは全ての文字が一致してない。よって、これらの文字列は類似していないと言える。しかし、ハッシュ値同士の比較では類似の度合いが判定できないため、「前者では文字列同士が類似しており、後者では文字列同士が類似していない」ということが分からない。
【００２７】
そこで本実施形態の情報処理装置２０００は、第１文字列全体のハッシュ値を算出するのではなく、第１文字列を複数の部分文字列に分割し、部分文字列ごとにハッシュ値を算出することで、第１文字列に対応する第１ハッシュ値列を生成する。同様に、第２文字列についても、第２ハッシュ値列が生成されている。そして情報処理装置２０００は、これらハッシュ値列同士を比較する。
【００２８】
図３は、文字列から生成されるハッシュ値列を比較する方法を例示する図である。なお、図３では、文字列を先頭から２文字ずつに区切ることで、文字列を部分文字列に分割している。
【００２９】
図３（ａ）では、２つのハッシュ値列が一致している。そのため、非常に高い確率で文字列同士も一致していることが分かる。なお、きわめて稀に異なる文字列のハッシュ値が同じになる「衝突」が発生する場合もあるが、本発明では「衝突」が発生した場合、文字列同士は同じであると見なす。
【００３０】
一方、図３（ｂ）と図３（ｃ）では、２つのハッシュ値列は一致していない。ここで、図３（ｂ）において２つのハッシュ値列を比較すると、１番目と２番目のハッシュ値は一致しており、３番目のハッシュ値が一致していない。これに対し、図３（ｃ）において２つのハッシュ値列を比較すると、いずれのハッシュ値も一致していない。このことから、図３（ｂ）における２つのハッシュ値列の類似度合いは、図３（ｃ）における２つのハッシュ値列の類似度合いよりも高いということが分かる。ひいては、図３（ｂ）における２つの文字列の類似度合いは、図３（ｃ）における２つの文字列の類似度合いよりも高いということが分かる。
【００３１】
このように本実施形態の情報処理装置２０００によれば、文字列全体のハッシュ値ではなく、文字列から生成されるハッシュ値列を比較することにより、元の文字列同士の類否を精度よく判定することができる。よって、文字列をそのまま記憶装置に記憶しておくことが不都合な環境であっても、元の文字列同士の類否を精度よく判定することができるようになる。
【００３２】
例えば本実施形態の情報処理装置２０００において、第１文字列と第２文字列としてパスワードを扱うことが考えられる。こうすることにより、パスワードそのものを記憶することを避けつつ、パスワード同士の類否を精度よく判定することができるようになる。よって、例えば新たにユーザが入力しようとしているパスワードが、現在又は過去のパスワードと類似しているか否かを判定することができる。そのため、現在又は過去のパスワードと類似しているパスワードが新たに登録されることを避けるといったことが可能となり、パスワードの安全性が向上する。
【００３３】
以下、本実施形態についてさらに詳細に説明する。
【００３４】
＜情報処理装置２０００のハードウエア構成例＞
情報処理装置２０００の各機能構成部は、各機能構成部を実現するハードウエア（例：ハードワイヤードされた電子回路など）で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ（例：電子回路とそれを制御するプログラムの組み合わせなど）で実現されてもよい。以下、情報処理装置２０００の各機能構成部がハードウエアとソフトウエアとの組み合わせで実現される場合について、さらに説明する。
【００３５】
図４は、情報処理装置２０００を実現するための計算機１０００を例示する図である。計算機１０００は任意の計算機である。例えば計算機１０００は、Personal Computer（PC）、サーバマシン、タブレット端末、又はスマートフォンなどである。計算機１０００は、情報処理装置２０００を実現するために設計された専用の計算機であってもよいし、汎用の計算機であってもよい。
【００３６】
計算機１０００は、バス１０２０、プロセッサ１０４０、メモリ１０６０、ストレージ１０８０、入出力インタフェース１１００、及びネットワークインタフェース１１２０を有する。バス１０２０は、プロセッサ１０４０、メモリ１０６０、ストレージ１０８０、入出力インタフェース１１００、及びネットワークインタフェース１１２０が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ１０４０などを互いに接続する方法は、バス接続に限定されない。プロセッサ１０４０は、CPU (Central Processing Unit) や GPU (Graphics Processing Unit) などの演算処理装置である。メモリ１０６０は、RAM (Random Access Memory) や ROM (Read Only Memory) などのメモリである。ストレージ１０８０は、ハードディスク、SSD (Solid State Drive)、又はメモリカードなどの記憶装置である。また、ストレージ１０８０は、RAM や ROM などのメモリであってもよい。
【００３７】
入出力インタフェース１１００は、計算機１０００と入出力デバイスとを接続するためのインタフェースである。例えば入出力インタフェース１１００には、キーボードやマウスなどが接続される。
【００３８】
ネットワークインタフェース１１２０は、計算機１０００を外部の装置と通信可能に接続するためのインタフェースである。ネットワークインタフェース１１２０は、有線回線と接続するためのネットワークインタフェースでもよいし、無線回線と接続するためのネットワークインタフェースでもよい。
【００３９】
ストレージ１０８０は、情報処理装置２０００の各機能構成部を実現するプログラムモジュールを記憶している。プロセッサ１０４０は、これら各プログラムモジュールをメモリ１０６０に読み出して実行することで、そのプログラムモジュールに対応する各機能を実現する。
【００４０】
計算機１０００のハードウエア構成は図４に示した構成に限定されない。例えば、各プログラムモジュールはメモリ１０６０に格納されてもよい。この場合、計算機１０００は、ストレージ１０８０を備えていなくてもよい。
【００４１】
＜情報処理装置２０００の実現例＞
図５は、情報処理装置２０００の実現例を示す図である。図５（ａ）において、情報処理装置２０００を実現する計算機１０００は、第１文字列に対応づけられたユーザが操作する計算機である。例えばユーザが操作する計算機は、ユーザが所有する携帯端末や PC である。第１文字列や第２文字列としてユーザのパスワードを扱う場合、情報処理装置２０００は、例えば計算機１０００上で動作するオペレーティングシステムやアプリケーションにおけるユーザのパスワードについて類否を判定する。より具体的には、情報処理装置２０００は、例えばユーザの新たなパスワードと現在又は過去のパスワードとの類否を判定する。
【００４２】
一方、図５（ｂ）において、情報処理装置２０００を実現する計算機１０００は、第１文字列に対応づけられたユーザが操作する計算機（計算機３０００）とは別の計算機である。例えば計算機１０００は、ネットワーク上でサービスを提供するサーバである。第１文字列や第２文字列としてユーザのパスワードを扱うとすれば、情報処理装置２０００は、提供するサービスにおけるユーザのパスワードについて類否を判定する。より具体的には、情報処理装置２０００は、例えばユーザの新たなパスワードと現在又は過去のパスワードとの類否を判定する。なお、図５（ｂ）のケースにおいて、計算機３０００は、通信回線（インターネットや Local Area Network）を介して、計算機１０００から第１文字列を取得する。
【００４３】
＜処理の流れ＞
図６は、実施形態１の情報処理装置２０００によって実行される処理の流れを例示するフローチャートである。分割部２０２０は、第１文字列を取得する（Ｓ１０２）。分割部２０２０は、第１文字列を複数の部分文字列に分割する（Ｓ１０４）。ハッシュ値列生成部２０４０は第１ハッシュ値列を生成する（Ｓ１０６）。判定部２０６０は、第２ハッシュ値列を取得する（Ｓ１０８）。判定部２０６０は、第１ハッシュ値列と第２ハッシュ値列とが類似するか否かを判定する（Ｓ１１０）。
【００４４】
＜第１文字列の取得方法：Ｓ１０２＞
分割部２０２０は第１文字列を取得する（Ｓ１０２）。分割部２０２０が第１文字列を取得する方法は様々である。ユーザが操作する計算機によって情報処理装置２０００が実現される場合（図５（ａ）参照）、分割部２０２０は、情報処理装置２０００を実現する計算機に対してユーザが入力した第１文字列を取得する。第１文字列の入力は、例えば上記計算機に接続されている入力デバイスを用いて行われる。入力デバイスは、例えばキーボードやタッチパネルである。なお、入力デバイスによって入力された文字列を取得する方法には、既存の技術を利用できる。
【００４５】
ただし、第１文字列はユーザによって入力される文字列に限定されない。例えば第１文字列は、情報処理装置２０００を実現する計算機によって自動生成された文字列であってもよい。例えば分割部２０２０は、文字列を自動生成するツール（例えばパスワードを自動生成するツール）によって生成された文字列を第１文字列として取得してもよい。
【００４６】
ユーザが操作する計算機以外の計算機によって情報処理装置２０００が実現される場合、分割部２０２０は、例えば通信回線を介して、ユーザが操作する計算機から第１文字列を取得する（図５（ｂ）参照）。通信回線を介して他の計算機からデータを取得する方法には、既存の技術を利用できる。なおこの場合も、第１文字列は、ユーザが操作する計算機に対してユーザが入力したものや、ユーザが操作する計算機上で動作するツールによって自動生成されたものなどである。
【００４７】
＜第１文字列の分割：Ｓ１０４＞
分割部２０２０は、所定の規則で、第１文字列を複数の部分文字列に分割する（Ｓ１０４）。この所定の規則は、文字列の分割に利用できる任意の規則である。以下、その規則を例示する。
【００４８】
＜所定文字ずつ分割する＞
分割部２０２０は、第１文字列を所定文字ずつ（例えば１文字）の文字列に分割する。この分割は、例えば先頭の文字また末尾の文字から順に行われる。
【００４９】
図７は、第１文字列を２文字ずつ分割する方法を例示する図である。図７では、第１文字列が、先頭から順に２文字ずつに分割されている。ただし、第１文字列の長さは５文字であるため、最後の部分文字列の長さは１文字となっている。
【００５０】
＜所定個に分割する＞
分割部２０２０は、第１文字列を所定個の部分文字列に分割する。この分割も、例えば先頭の文字また末尾の文字から順に行われる。
【００５１】
図８は、第１文字列を３個の部分文字列に分割する方法を例示する図である。図８では、第１文字列が先頭から順に分割されている。各部分文字列の長さは、第１文字列の長さを上記所定個で割った値である。ただし、商の値は整数にする。図８の例では、第１文字列の長さが７であるため、部分文字列の長さは２となる。ただし、商余が１であるため、最後の部分文字列の長さを３としている。
【００５２】
＜所定文字ごとに文字を抽出して連結する＞
上述した２つの規則では、第１文字列において連続している文字からなる文字列を部分文字列としている。しかし、部分文字列は、第１文字列において連続していない文字列を連結した文字列であってもよい。例えば分割部２０２０は、第１文字列から所定文字ごとに文字を抽出し、その文字を連結することで部分文字列を生成する。
【００５３】
図９は、第１文字列において連続していない文字から部分文字列を生成する方法を例示する図である。図９では、第１文字列から、４文字ごとに１文字抽出し、抽出した文字を連結することで、部分文字列を生成している。例えば１つ目の部分文字列は、先頭の a、a から４文字後ろにある e、及び e から４文字後ろにある i を抽出して得られる「aei」となっている。
【００５４】
なお上述した各規則はあくまで例示である。情報処理装置２０００では、第１文字列と第２文字列とが同じ規則で部分文字列に分割されていればよい。そのため、分割に利用する所定規則には、文字列を分割する任意の規則を利用できる。
【００５５】
第１文字列を部分文字列に分割する所定規則は、予め分割部２０２０に設定されていてもよいし、分割部２０２０からアクセス可能な記憶装置に記憶されていてもよい。
【００５６】
＜第１ハッシュ値例の生成：Ｓ１０６＞
ハッシュ値列生成部２０４０は、所定のハッシュ関数を用いて、分割部２０２０によって生成される第１部分文字列群から第１ハッシュ値列を生成する（Ｓ１０６）。第１部分文字列群から第１ハッシュ値列を生成する方法は、例えば以下の数式（１）によって表される。
【数１】
2017182377.tif 000003
v_i は、第１ハッシュ値列の先頭から i 番目のハッシュ値である。st_i は、第１部分文字列群の先頭から i 番目の部分文字列である。h は所定のハッシュ関数である。
【００５７】
上述の方法により、ハッシュ値列生成部２０４０は各部分文字列 st_i をハッシュ値 v_i に変換する。そして、生成されたハッシュ値の列 {v_i: 0<=i<m} を第１ハッシュ値列とする。ここで、m は第１文字列から生成された部分文字列の個数である。
【００５８】
図１０は、第１部分文字列群から第１ハッシュ値列を生成する方法を例示する図である。図１０において、第１部分文字列群は「a, b, c, d」である。ハッシュ値列生成部２０４０は、所定のハッシュ関数 h を用いて、第１部分文字列群に含まれる各部分文字列のハッシュ値を算出する。その結果、第１ハッシュ値列は「h(a), h(b), h(c), h(d)」となる。
【００５９】
所定のハッシュ関数は、任意のハッシュ関数である。ただし、セキュリティを向上させる観点から、ハッシュ関数は暗号学的ハッシュ関数であることが好適である。
【００６０】
所定のハッシュ関数は、予めハッシュ値列生成部２０４０に設定されていてもよいし、ハッシュ値列生成部２０４０からアクセス可能な記憶装置に記憶されていてもよい。
【００６１】
＜第２ハッシュ値列の取得：Ｓ１０８＞
判定部２０６０は、第２ハッシュ値列を取得する（Ｓ１０８）。前述したように、第２ハッシュ値列は第２文字列から生成されたものである。また、第２文字列から第２ハッシュ値列を生成する方法は、第１文字列から第１ハッシュ値列を生成する方法と同様の方法である。例えば第２文字列は、情報処理装置２０００のユーザによって過去に入力された文字列や、ユーザが操作する計算機によって過去に自動生成された文字列である。
【００６２】
第２ハッシュ値列は、ユーザの識別子（以下、ユーザＩＤ）と対応づけて記憶装置に記憶されている。判定部２０６０は、第１文字列と対応づけられているユーザＩＤを取得し、そのユーザＩＤに対応づけられている第２ハッシュ値列を上記記憶装置から取得する。例えばユーザＩＤは、第１文字列と共に、ユーザが操作する計算機から取得される。
【００６３】
＜第１ハッシュ値列と第２ハッシュ値列の類否判定：Ｓ１１０＞
判定部２０６０は、第１ハッシュ値列と第２ハッシュ値列の類否を判定する（Ｓ１１０）。第１ハッシュ値列と第２ハッシュ値列とが類似しているか否かの判定基準は様々である。以下、この判定基準を例示する。
【００６４】
＜＜一致するハッシュ値の個数＞＞
例えば判定基準は、第１ハッシュ値列と第２ハッシュ値列との間で一致するハッシュ値の個数である。これらの間で一致するハッシュ値の個数が所定個以上である場合に、判定部２０６０は、これらが類似すると判定する。一方で、これらの間で一致するハッシュ値の個数が所定個未満である場合、判定部２０６０は、これらが類似しないと判定する。
【００６５】
図１１は、一致するハッシュ値の個数を基準としてハッシュ値列の類否を判定するケースを例示する図である。第１ハッシュ値列は、第１文字列「abcde」から生成された「h(a), h(b), h(c), h(d), h(e)」である。一方、第２ハッシュ値列は、第２文字列「aecdg」から生成された「h(a), h(e), h(c), h(d), h(g)」である。
【００６６】
第１ハッシュ値列と第２ハッシュ値列を比較すると、２番目と５番目のハッシュ値が異なっている。つまり、異なるハッシュ値の個数は２個である。
【００６７】
よって、上記所定個が２個であれば、判定部２０６０は「第１ハッシュ値列と第２ハッシュ値列は類似する」と判定する。一方、上記所定個が３個であれば、判定部２０６０は「第１ハッシュ値列と第２ハッシュ値列は類似しない」と判定する。
【００６８】
上記所定個は、判定部２０６０に予め設定されていてもよいし、判定部２０６０からアクセス可能な記憶装置に記憶されていてもよい。この所定個は、例えば情報処理装置２０００の管理者によって決定される。情報処理装置２０００の管理者は、例えば第１文字列の要件に基づいて、上記所定個を決定する。具体的には、第１文字列の要件が「第１文字列は、第２文字列と３文字以上一致してはいけない」であるとする。この場合、情報処理装置２０００の管理者は、上記所定個を３に決定する。なおこの場合、分割部２０２０は、第１文字列を１文字ずつの部分文字列に分割するとする。
【００６９】
＜＜類似度＞＞
また例えば、第１ハッシュ値列と第２ハッシュ値列の類否の判定基準は、第１ハッシュ値列と第２ハッシュ値列との間の類似度である。具体的には、判定部２０６０は、第１ハッシュ値列と第２ハッシュ値列の類似度を算出し、算出した類似度に基づいてこれらの類否を判定する。
【００７０】
第１ハッシュ値列と第２ハッシュ値列との類似度の算出方法は任意である。例えば判定部２０６０は、第１ハッシュ値列と第２ハッシュ値列について、レーベンシュタイン距離などの編集距離を算出し、この編集距離を類似度として扱う。この場合、判定部２０６０は、編集距離が所定値以上であれば「第１ハッシュ値列と第２ハッシュ値列とは類似しない」と判定し、編集距離が所定値未満であれば「第１ハッシュ値列と第２ハッシュ値列とは類似する」と判定する。
【００７１】
上記所定値は、判定部２０６０に予め設定されていてもよいし、判定部２０６０からアクセス可能な記憶装置に記憶されていてもよい。この所定値も、例えば情報処理装置２０００の管理者によって、第１文字列の要件に基づいて決定される。
【００７２】
図１２は、編集距離を利用してハッシュ値列の類否を判定するケースを例示する図である。第１ハッシュ値列は「h(ab), h(cd), h(ef)」である。このハッシュ値列は、第１文字列「abcdef」から第１部分文字列群「ab, cd, ef」を生成し、さらにハッシュ関数 h を用いて各部分文字列のハッシュ値を算出することで得られたものである。第２ハッシュ値列は「h(ab), h(eg), h(ef), h(i)」である。このハッシュ値列は、第１文字列「abegefi」から第１部分文字列群「ab, eg, ef, i」を生成し、さらにハッシュ関数 h を用いて各部分文字列のハッシュ値を算出することで得られたものである。
【００７３】
ここで、第１ハッシュ値列から第２ハッシュ値列を得るためには、（１）２番目のハッシュ値 h(cd) を h(eg) に変更し、（２）末尾に h(i) を追加するという２つの処理を要する。そのため、第１ハッシュ値と第２ハッシュ値との間の編集距離は２である。
【００７４】
よって、例えば編集距離について定める上記所定値が２であれば、判定部２０６０は、「第１ハッシュ値列と第２ハッシュ値列は類似しない」と判定する。一方、例えば編集距離について定める上記所定値が３であれば、判定部２０６０は、「第１ハッシュ値列と第２ハッシュ値列は類似する」と判定する。
【００７５】
なお判定部２０６０は、編集距離以外にも、データ列同士の類似度を算出する任意のアルゴリズムを利用できる。ここで、アルゴリズムが文字列を対象とするものである場合、判定部２０６０は、ハッシュ値列に含まれる各ハッシュ値を文字として扱うことで、そのアルゴリズムを利用することができる。
【００７６】
＜情報処理装置２０００を利用したパスワードの類否判定＞
情報処理装置２０００は、例えばパスワードの登録を受け付ける装置として利用できる。この場合、第１文字列は新たに設定されるパスワードである。また、第２文字列は、現在又は過去のパスワード（新たなパスワードとは異なるタイミングで生成されたパスワード）である。
【００７７】
現在のパスワードや過去のパスワードは、ユーザＩＤに対応づけられたハッシュ値列（前述した第２ハッシュ値列）として記憶されている。第２ハッシュ値列を記憶する記憶装置は、情報処理装置２０００の内部に設けられていてもよいし、外部に設けられていてもよい。図１３は、ユーザの現在のパスワードから生成されたハッシュ値列がユーザＩＤと対応づけられて記憶されている様子を例示する図である。図１３において、記憶装置は情報処理装置２０００の外部に設けられている。
【００７８】
ユーザは、キーボードなどを操作して、新たなパスワードを入力する。分割部２０２０は、このパスワードを複数の部分文字列に分割する。ハッシュ値列生成部２０４０は、この複数の部分文字列から、第１ハッシュ値列を生成する。
【００７９】
判定部２０６０は、新たなパスワードに対応するハッシュ値列（第１ハッシュ値列）と、現在又は過去のパスワードに対応するハッシュ値列（第２ハッシュ値列）との類否を判定する。これらが類似していると、新たなパスワードが現在又は過去のパスワードと類似していることとなる。新たなパスワードが現在又は過去のパスワードと類似することは好ましくないため、情報処理装置２０００は、このパスワードの登録を拒否する。一方、第１ハッシュ値列と第２ハッシュ値列とが類似してない場合、新たなパスワードは現在又は過去のパスワードと類似していない。そのため、情報処理装置２０００は、そのパスワードの登録を許可する。
【００８０】
このように、本実施形態の情報処理装置２０００によれば、現在又は過去のパスワードそのものが記憶されておらず、これらのパスワードのハッシュ値列が記憶されている場合であっても、新たなパスワードと現在又は過去のパスワードとの類否を判定することができる。よって、パスワードそのものを記憶せずにパスワードのハッシュ値列を記憶しておくことでパスワードの安全な管理を実現しつつ、新たなパスワードと現在又は過去のパスワードとが類似しないようにすることで、パスワード漏洩の危険性及びパスワードが漏洩した際の被害を減らすことができる。
【００８１】
［実施形態２］
実施形態２の情報処理装置２０００は、実施形態１の情報処理装置２０００と同様に、例えば図１で表される。下記で説明する点を除き、実施形態２の情報処理装置２０００は、実施形態１の情報処理装置２０００と同様の機能を有する。
【００８２】
実施形態１のハッシュ値列生成部２０４０は、各部分文字列からハッシュ値を算出する前に、各部分文字列を所定規則で変換する。ハッシュ値列生成部２０４０は、この変換後の部分文字列からそれぞれハッシュ値を算出する。
【００８３】
部分文字列を所定規則で変換してから第１ハッシュ値列を生成する方法は、例えば以下の数式（２）によって表される。
【数２】
2017182377.tif 000004
c は、上記所定規則を表す関数である。v_i、st_i、及び h の意味は、数式（１）と同じである。
【００８４】
上述の方法により、ハッシュ値列生成部２０４０は各部分文字列 st_i をハッシュ値 v_i に変換する。そして、生成されたハッシュ値の列 {v_i: 0<=i<m} を第１ハッシュ値列とする。ここで、m は第１文字列から生成された部分文字列の個数である。
【００８５】
上記所定規則は、或るデータを別のデータに変換する任意の規則である。例えば上記所定規則は、部分文字列に対して所定のデータを付加する規則である。この所定のデータは、一般にソルトと呼ばれる。ソルトは、レインボーテーブルなどを用いた攻撃への対策として利用される。
【００８６】
部分文字列に対してソルトを付加する規則 c は、例えば以下の数式（３）によって表される。
【数３】
2017182377.tif 000005
uid はユーザＩＤであり、salt(uid) は uid というユーザＩＤに対応づけられているソルトである。st_i の意味は、数式（１）と同じである。
【００８７】
図１４は、部分文字列に対してソルトを付加するケースを例示する図である。図１４において、第１部分文字列群は「ab, cd, e」である。また、ソルトは「123」である。
【００８８】
ハッシュ値列生成部２０４０は、各部分文字列に対してソルト「123」を付加する。その結果、第１部分文字列群は「ab123, cd123, e123」に変換される。その後ハッシュ値列生成部２０４０は、変換後の第１部分文字列群についてハッシュ値を算出することで、第１ハッシュ値列「h(ab123), h(cd123), h(e123)」を生成する。
【００８９】
ソルトは、ユーザＩＤに対応づけて記憶装置に記憶されている。ここで、ソルトを記憶する記憶装置は、情報処理装置２０００の内部に設けられていてもよいし、情報処理装置２０００の外部に設けられていてもよい。後者の場合、例えばソルトは、情報処理装置２０００の外部に設けられる装置（例えばデータベースサーバ）で管理される。図１５は、情報処理装置２０００の外部に設けられているデータベースにおいて、ユーザＩＤと対応付けられたソルトが管理されている様子を例示する図である。
【００９０】
ここで、ソルトを管理する装置（以下、ソルト管理装置）と情報処理装置２０００の間では、一定程度のアイソレーションが実現されていることが好ましい。これにより、ソルトを管理する装置と情報処理装置２０００のいずれか一方がクラッキングなどの被害にあった場合でも、他方の装置によって管理されているデータに被害が及ぶことを防ぐことができる。
【００９１】
情報処理装置２０００とソルト管理装置との間でアイソレーションを実現する方法は様々である。例えば情報処理装置２０００とソルト管理装置とを、それぞれ異なる物理計算機で実現する。また例えば、情報処理装置２０００とソルト管理装置とを、それぞれ異なる仮想計算機で実現する。また例えば、情報処理装置２０００とソルト管理装置とを、それぞれ異なるコンテナで実現する。
【００９２】
＜処理の流れ＞
図１６は、実施形態２の情報処理装置２０００によって実行される処理の流れを例示するフローチャートである。ここで、図６のフローチャートと同じステップについての説明は省略する。
【００９３】
Ｓ２０２において、ハッシュ値列生成部２０４０は、部分文字列を所定規則で変換する。Ｓ２０４において、ハッシュ値列生成部２０４０は、変換後の部分文字列から第１ハッシュ値列を生成する。
【００９４】
＜ハードウエア構成例＞
実施形態２の情報処理装置２０００は、実施形態１と同様に計算機１０００を用いて実現される（図４参照）。本実施形態において、前述したストレージ１０８０に記憶される各プログラムモジュールには、本実施形態で説明した各機能を実現するプログラムがさらに含まれる。
【００９５】
＜作用・効果＞
本実施形態の情報処理装置２０００によれば、第１文字列から生成された部分文字列を所定規則で変換した後、その変換後の部分文字列にハッシュ関数を適用することで、第１ハッシュ値列が生成される。ここで前述したように、第２ハッシュ値列は第１ハッシュ値列と同様の方法で生成される。そのため記憶装置に記憶される第２ハッシュ値列は、「第２文字列から生成された部分文字列を所定規則で変換し、その変換後の部分文字列に対してハッシュ関数を適用する」という方法で生成されたものとなる。よって、本実施形態の情報処理装置２０００によれば、記憶装置に記憶されている第２ハッシュ値列に基づいて元の第２文字列が漏洩する危険性を減らすことができる。例えば前述したソルトを利用する方法によれば、レインボーテーブルなどを利用した攻撃への耐性が向上する。
【００９６】
［実施形態３］
実施形態３の情報処理装置２０００は、実施形態１の情報処理装置２０００と同様に、例えば図１で表される。下記で説明する点を除き、実施形態３の情報処理装置２０００は、実施形態１の情報処理装置２０００又は実施形態２の情報処理装置２０００と同様の機能を有する。
【００９７】
実施形態３のハッシュ値列生成部２０４０は、部分文字列に対してハッシュ関数を複数回適用する。つまり、部分文字列からハッシュ値列を構成するハッシュ値への変換は、以下の数式（４）によって行われる。
【数４】
2017182377.tif 000006
n は、部分文字列 st_i に対してハッシュ関数 h を適用する回数である。v_[i,n] は、第１ハッシュ値列の先頭から i 番目のハッシュ値である。v_[i,n] は、部分文字列 st_i に対して n 回ハッシュ関数を適用することで算出される。
【００９８】
上述の方法により、ハッシュ値列生成部２０４０は各部分文字列 st_i をハッシュ値 v_[i,n] に変換する。そして、生成されたハッシュ値の列 {v_[i,n]: 0<=i<m} を第１ハッシュ値列とする。ここで、m は第１文字列から生成された部分文字列の個数である。
【００９９】
上記所定回数 n は、全てのユーザについて共通して定義されている値であってもよいし、ユーザごとに定義されている値であってもよい。後者の場合、所定回数 n は、ユーザＩＤに対応づけて予め記憶されている。所定回数 n をユーザＩＤに対応づけて記憶する方法は、実施形態２で説明した、ソルトをユーザＩＤに対応づけて記憶する方法と同様である。図１７は、情報処理装置２０００の外部に設けられているデータベースにおいて、ユーザＩＤと対応付けられたハッシュの適用回数が管理されている様子を例示する図である。
【０１００】
＜ハードウエア構成例＞
実施形態３の情報処理装置２０００は、実施形態１と同様に計算機１０００を用いて実現される（図４参照）。本実施形態において、前述したストレージ１０８０に記憶される各プログラムモジュールには、本実施形態で説明した各機能を実現するプログラムがさらに含まれる。
【０１０１】
＜作用・効果＞
本実施形態の情報処理装置２０００によれば、第１文字列から生成された部分文字列に対してハッシュ関数を複数回適用することで、第１ハッシュ値列が生成される。ここで前述したように、第２ハッシュ値列は第１ハッシュ値列と同様の方法で生成される。そのため記憶装置に記憶される第２ハッシュ値列は、「第２文字列から生成された部分文字列に対してハッシュ関数を複数回適用する」という方法で生成されたものとなる。よって、本実施形態の情報処理装置２０００によれば、記憶装置に記憶されている第２ハッシュ値列に基づいて元の第２文字列が漏洩する危険性を減らすことができる。
【０１０２】
なお、本実施形態のハッシュ値列生成部２０４０は、実施形態２で説明した所定規則による変換を部分文字列に施し、その変換後の部分文字列に対してハッシュ関数を所定回数適用してもよい。この場合に算出されるハッシュ値 v_[i,n] は、例えば以下の数式（５）によって表される。
【数５】
2017182377.tif 000007
c は、部分文字列 st_i を上記所定規則で変換する関数である。
【０１０３】
例えば上記所定規則は、実施形態２で説明した、ユーザごとに定められているソルトを部分文字列に付加する規則である。この場合、例えばハッシュ関数を適用する所定回数 n は、ソルトと共にユーザＩＤと対応づけられて、情報処理装置２０００の外部に設けられた記憶装置に記憶される。図１８は、データベースにおいて、ハッシュの適用回数とソルトがユーザＩＤと対応づけられて管理される様子を例示する図である。
【０１０４】
このように、所定規則による部分文字列の変換、及び複数回のハッシュ関数の適用の双方を行うことにより、記憶装置に記憶されている第２ハッシュ値列に基づいて元の第２文字列が漏洩する危険性をさらに減らすことができる。
【０１０５】
［実施形態４］
図１９は、実施形態４の情報処理装置２０００を例示するブロック図である。下記で説明する点を除き、実施形態４の情報処理装置２０００は、実施形態１から実施形態３の情報処理装置２０００と同様の機能を有する。
【０１０６】
実施形態４の情報処理装置２０００は警告情報出力部２０８０を有する。警告情報出力部２０８０は、判定部２０６０により、第１ハッシュ値列と第２ハッシュ値列とが類似すると判定された場合に、警告情報を出力する。
【０１０７】
警告情報出力部２０８０が出力する警告情報は任意である。例えば警告情報は、「第１文字列と第２文字列が類似する」という旨のメッセージを示す情報である。なお、前述した通り、第１ハッシュ値列と第２ハッシュ値列とが類似する場合、第１文字列と第２文字列とが類似する蓋然性が高い。また例えば、警告情報は、異なる第１文字列の入力を要求するメッセージを示す情報である。また例えば、警告情報は、何らかの問題があることをユーザに気づかせるための情報（例えば警告音）であってもよい。
【０１０８】
警告情報を出力する方法は任意である。例えば警告情報出力部２０８０は警告情報を表すテキストデータや画像データをディスプレイ装置に表示させたり、警告情報を表す音声をスピーカから出力させたりする。ここで、上記ディスプレイ装置やスピーカは、ユーザが操作する計算機に接続されている。なお、ユーザが操作する計算機とは別の計算機を用いて情報処理装置２０００が実現されている場合、情報処理装置２０００を実現する計算機（図５（ｂ）の計算機１０００）からユーザが操作する計算機（図５（ｂ）の計算機３０００）へ警告情報を送信する。ユーザが操作する計算機は、その計算機に接続されているディスプレイ装置やスピーカに警告情報を出力させる。なお、受信した情報をディスプレイ装置やスピーカに出力させる技術には、既知の技術を利用できる。
【０１０９】
＜処理の流れ＞
図２０は、実施形態４の情報処理装置２０００によって実行される処理の流れを例示するフローチャートである。ここで、図６のフローチャートにも示されているステップについての説明は省略する。
【０１１０】
判定部２０６０によって第１ハッシュ値列と第２ハッシュ値列とが類似していると判定された場合（Ｓ４０２：ＹＥＳ）、図２０の処理はＳ４０４に進む。一方、  判定部２０６０によって第１ハッシュ値列と第２ハッシュ値列とが類似していないと判定された場合（Ｓ４０２：ＮＯ）、図２０の処理は終了する。Ｓ４０４において、警告情報出力部２０８０は警告情報を出力する。
【０１１１】
＜ハードウエア構成例＞
実施形態４の情報処理装置２０００は、実施形態１と同様に計算機１０００を用いて実現される（図４参照）。本実施形態において、前述したストレージ１０８０に記憶される各プログラムモジュールには、本実施形態で説明した各機能を実現するプログラムがさらに含まれる。
【０１１２】
＜作用・効果＞
本実施形態の情報処理装置２０００によれば、第１ハッシュ値列と第２ハッシュ値列とが類似している場合に警告情報が出力される。ここで、第１ハッシュ値列と第２ハッシュ値列とが類似している場合、第１文字列と第２文字列とが類似している蓋然性が高い。そのため、本実施形態の情報処理装置２０００によれば、第１文字列が第２文字列と類似していることを、ユーザに気づかせることができる。よって、第１文字列の入力をユーザにやり直させるといったことが可能となる。
【０１１３】
例えば第１文字列が新たなパスワードであり、第２文字列が現在又は過去のパスワードであるとする。この場合、警告情報出力部２０８０により、新たなパスワードが現在又は過去のパスワードに類似していることを、ユーザに気づかせることができる。よって、別のパスワードをユーザに入力させるといったことが可能となる。
【０１１４】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記各実施形態の組み合わせ、又は上記以外の様々な構成を採用することもできる。
【０１１５】
以下、参考形態の例を付記する。
１．  ユーザの識別子に対応づけられた第１の文字列を、所定の規則で複数の部分文字列に分割する分割手段と、
所定のハッシュ関数を用いて、前記複数の部分文字列それぞれについてハッシュ値を算出し、前記算出された複数のハッシュ値の列である第１のハッシュ値列を生成するハッシュ値列生成手段と、
前記第１のハッシュ値列と第２のハッシュ値列とが類似するか否かを判定する判定手段と、
を有し、
前記第２のハッシュ値列は、前記所定の規則及び前記所定のハッシュ関数を用いて、前記ユーザの識別子に対応づけられた第２の文字列から生成されたハッシュ値列である、情報処理装置。
２．  前記第１の文字列と前記第２の文字列は、互いに異なるタイミングで生成される、１．に記載の情報処理装置。
３．  前記ハッシュ値列生成手段は、
前記複数の部分文字列それぞれを所定の規則で変換し、
前記所定のハッシュ関数を用いて、前記変換された複数の部分文字列それぞれのハッシュ値を算出し、
前記算出された複数のハッシュ値の列を前記第１のハッシュ値列とする、１．又は２．に記載の情報処理装置。
４．  前記所定の規則は、前記複数の部分文字列それぞれに対し、前記ユーザの識別子に対応づけられている所定のデータを付加する規則である、３．に記載の情報処理装置。
５．  前記ユーザの識別子に対し、前記ハッシュ関数の適用回数が対応づけられており、
前記ハッシュ値列生成手段は、前記複数の部分文字列それぞれについて、前記ハッシュ関数の適用を前記適用回数行う、１．乃至４．いずれか一つに記載の情報処理装置。
６．  前記判定手段によって前記第１のハッシュ値列と前記第２のハッシュ値列とが類似すると判定された場合に警告情報を出力する警告情報出力手段を有する、１．乃至５．いずれか一つに記載の情報処理装置。
７．  コンピュータによって実行される制御方法であって、
ユーザの識別子に対応づけられた第１の文字列を、所定の規則で複数の部分文字列に分割する分割ステップと、
所定のハッシュ関数を用いて、前記複数の部分文字列それぞれについてハッシュ値を算出し、前記算出された複数のハッシュ値の列である第１のハッシュ値列を生成するハッシュ値列生成ステップと、
前記第１のハッシュ値列と第２のハッシュ値列とが類似するか否かを判定する判定ステップと、
を有し、
前記第２のハッシュ値列は、前記所定の規則及び前記所定のハッシュ関数を用いて、前記ユーザの識別子に対応づけられた第２の文字列から生成されたハッシュ値列である、制御方法。
８．  前記第１の文字列と前記第２の文字列は、互いに異なるタイミングで生成される、７．に記載の制御方法。
９．  前記ハッシュ値列生成ステップは、
前記複数の部分文字列それぞれを所定の規則で変換し、
前記所定のハッシュ関数を用いて、前記変換された複数の部分文字列それぞれのハッシュ値を算出し、
前記算出された複数のハッシュ値の列を前記第１のハッシュ値列とする、７．又は８．に記載の制御方法。
１０．  前記所定の規則は、前記複数の部分文字列それぞれに対し、前記ユーザの識別子に対応づけられている所定のデータを付加する規則である、９．に記載の制御方法。
１１．  前記ユーザの識別子に対し、前記ハッシュ関数の適用回数が対応づけられており、
前記ハッシュ値列生成ステップは、前記複数の部分文字列それぞれについて、前記ハッシュ関数の適用を前記適用回数行う、７．乃至１０．いずれか一つに記載の制御方法。
１２．  前記判定ステップによって前記第１のハッシュ値列と前記第２のハッシュ値列とが類似すると判定された場合に警告情報を出力する警告情報出力ステップを有する、７．乃至１１．いずれか一つに記載の制御方法。
１３．  ７．乃至１２．いずれか一つに記載の制御方法が有する各ステップをコンピュータに実行させるプログラム。
【符号の説明】
【０１１６】
１０００  計算機
１０２０  バス
１０４０  プロセッサ
１０６０  メモリ
１０８０  ストレージ
１１００  入出力インタフェース
１１２０  ネットワークインタフェース
２０００  情報処理装置
２０２０  分割部
２０４０  ハッシュ値列生成部
２０６０  判定部
２０８０  警告情報出力部
３０００  計算機
【図１】
2017182377.tif 000008
【図２】
2017182377.tif 000009
【図３】
2017182377.tif 000010
【図４】
2017182377.tif 000011
【図５】
2017182377.tif 000012
【図６】
2017182377.tif 000013
【図７】
2017182377.tif 000014
【図８】
2017182377.tif 000015
【図９】
2017182377.tif 000016
【図１０】
2017182377.tif 000017
【図１１】
2017182377.tif 000018
【図１２】
2017182377.tif 000019
【図１３】
2017182377.tif 000020
【図１４】
2017182377.tif 000021
【図１５】
2017182377.tif 000022
【図１６】
2017182377.tif 000023
【図１７】
2017182377.tif 000024
【図１８】
2017182377.tif 000025
【図１９】
2017182377.tif 000026
【図２０】
2017182377.tif 000027