3

調査のために公開したい IIS ログ ファイルのセットがあります。

ただし、これらには匿名化したい機密情報が含まれています。

UserName=XXXX65

ログファイルの視覚的検査に「ユーザーフレンドリー」性を保持するアルゴリズムを使用したいと思いますが、元のユーザー名を導出することは不可能/非現実的です。

ログ全体で同じユーザー名からの要求を関連付けることができることが重要なので、* * すべての UserNames を出力することはできません。

SHA1ハッシュを使用すると、次のような結果が得られます

UserName=AD5CBF0BA0A8646EBDBA6BE1B5DA4FCB1F385D39

これはほぼ使用可能であり、

SHA256 では次のようになります。

UserName=C9B84EE0DD2EFA53645D5268602E23A9E788903B31BBEB99C03982D9B50AF70C

長くなりすぎて使い物にならなくなりつつありますが、

そしてPBKDF2-SHA1ハッシュ

UserName=1000:153JkeeGAqtG2UsHX57RBqm3O0DIkXhF:31BBDlQrUqqeyaMo/ikCJAXRC4fFXf82

私の意見では、これは長すぎて使用できません。

比較的短い一方向ハッシュを提供するが、安全性/非可逆性を維持するアルゴリズムはありますか?

ログ ファイルを目で見て、UserName の相関関係を確認できるものを探しています。

4

1 に答える 1

5

一方向のハッシュは実際には匿名ではありません。なんで?どのユーザーがどのハッシュに対応しているかを簡単に確認できます。

  1. Say"root"はユーザーです。
  2. 適用するhash("root")と、結果はfooです。へのいくつかの参照を含むログを公開しfooます。
  3. root私はあなたのマシンのユーザーであると賢明に推測します。次に、自分自身を適用hash("root")して取得しfooます。これで、どのログがに対応するかがわかりました"root"

つまり、本質的には、ハッシュは、特定のユーザーが特定のログの原因であったことを、公開されたログから後で確認できるようにする場合に役立ちます。目標が匿名性である場合ではありません。

さらに、ハッシュは読みにくいです。

ランダムに発音可能な文字列を生成し、各ユーザー名にマップします。次に、ランダムな文字列を使用してログを公開します。本当に匿名で、本当に読みやすい。

ランダムな発音可能な文字列を生成する方法は?子音と母音を交互に。Cでこれを行う方法は次のとおりです(もちろん、これはランダムな6文字の文字列のみを生成します。ログを処理するときに、各ユーザー名を文字列にマッピングし、文字列が一意であることを確認するなど、より多くのロジックが必要です):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#define NAME_LENGTH 6

#define RAND_CHAR(string) \
  ( (string)[rand () % strlen (string)])

int main (void)
{
  char vowel[] = "aeiou";
  char consonant[] = "bcdfghjklmnpqrstvwxyz";
  int i;

  char rand_name[NAME_LENGTH + 1];

  srand (time (NULL));

  for (i = 0; i < NAME_LENGTH; i++)
    rand_name[i] = (i % 2) ? RAND_CHAR (vowel) : RAND_CHAR (consonant);

  rand_name[NAME_LENGTH] = '\0';

  printf ("%s\n", rand_name);

  return 0;
}

これが私のために作成したいくつかの例です:

cemala
gogipa
topeqe
lixate
fasota
rironu

サービスを提供するユーザーの数が125*21 3に匹敵する場合は、より長い文字列を生成する必要があります。発音を簡単にするために、区切り文字を使用することもできます。

cemala-gogipa

于 2012-07-24T18:09:06.280 に答える