web-dev-qa-db-ja.com

クリアテキストで部分文字列を明らかにせずに機密部分文字列の存在を検索する

非常に機密性の高い文字列のリストがあり、これらの文字列が一連のドキュメント(非常に大きなドキュメントになる可能性がある)に存在しないことを確認したい。

ただし、これらの部分文字列はsoセンシティブです。つまり、検索を実行するサードパーティに、クリアテキストの部分文字列が表示されたり、アクセスされたりすることは望ましくありません。

このコンテキストのサードパーティは私が運用しているシステムですが、この機密データをクリアテキストでこのシステムに存在させる権限も、そのシステムのデータを他の場所に存在させる権限もありません(ラップトップにプルダウンするなど)クリアテキストを検索します)。

部分文字列が見つかったかどうかについて、アルゴリズムから単純なはい/いいえの答えが欲しいだけです。

非常に単純でパフォーマンスの低いソリューションは、部分文字列をハッシュとして提供することであり、サードパーティはドキュメントのすべての部分文字列をハッシュして回答に到達できます。

より良い方法はありますか、この目的のために設計されたアルゴリズムはありますか?

3
Matt Harrison

機密情報が特定の方法でフォーマットされている場合(13〜19桁のクレジットカードなど)、機密性の高い文字列である可能性のある候補を検索し、ハッシュのアイデアを候補に適用できます。

「UFO's are real」などの特定のフレーズを検索する場合、正規表現を使用して「[AZ] {3} '\ w\s\w {3}\s\w {4に一致する文字列を検索できます。 } "、ただし、語句の長さと構造に関する情報の漏洩が許容される場合。次に、各結果のハッシュをオリジナルのハッシュと比較して、それが存在するかどうかを確認できます。

1
Maybe_Factor

非常に単純でパフォーマンスの低いソリューションは、部分文字列をハッシュとして提供することであり、サードパーティはドキュメントのすべての部分文字列をハッシュして回答に到達できます。

パフォーマンスの低下( Maybe_Factor's answer が示すように)は別として、「秘密の文字列」が、必要な候補ドキュメント文字列の数を制限するために使用できる認識可能な構造を持っている場合、部分的に相殺される可能性がありますハッシュ化される)、このアプローチに潜在的なセキュリティの脆弱性があります...サードパーティがハッシュを見つけた場合プレーンテキストドキュメントの一部の一部が「スーパーシークレット文字列」のハッシュの1つと一致する場合、彼らはそのスーパーシークレット文字列、彼らはそれにハッシュする少しプレーンテキストを持っているので!


文字列が十分に秘密で、上記が問題である場合、私は強くsuspect特に秘密の文字列が(ほぼ)の任意の位置で発生する可能性がある場合、これを回避する方法を見つける機会はほとんどありませんターゲットドキュメント。

秘密の文字列とドキュメントの両方を暗号化することは(サードパーティに渡す前に)うまくいくとは思わないドキュメント:

...SECRET-STRING.......
.....SECRET-STRING.....
.......SECRET-STRING...

SECRET-STRINGの暗号化に対応する共通の文字列は含まれません。 (単純なシーザー暗号wouldこのような検索を許可しますが、チェックされるドキュメントに適度に認識可能なテキストが含まれている場合、サードパーティは簡単にリバースできます)。

すべてのドキュメント、すべてのオフセット(または「ブロックサイズ」までのすべてのオフセット)に「標準」の暗号化アルゴリズムを適用すると、この問題を回避できる可能性がありますが、それまでにyou'd完了これで、自分で検索を実行することもできます。

0
TripeHound