[pgsql-jp: 39383] Re: BYTEA型の値の検索方法

Imaoka Yumiko shinoi @ osk2.3web.ne.jp
2008年 5月 7日 (水) 13:29:36 JST


今岡です。

平塚様、貴重な情報をありがとうございます。
暗号化の度に生成されるデータが違っているということは、
先ほどはっきりと確認したところでした。
理由が判って、すっきりしました。
ある意味、とても強い暗号化方式ということになるのでしょうか。

上記のことから、完全一致検索でもあいまい検索でも、
検索時には復号化したデータを持つ一時テーブルを作成し、
検索後にそれを削除するといった処理を入れるしかないのですね。

暗号化の実装がはじめてで、且つ暗号化の書籍を買っておいて
まだ読んでいないバカ者にはとても勉強になりました。

MLの皆様、ありがとうございました。

------------------------------------------------------

>> ちなみに、暗号化で使用しているのは下記です。
>> ccrypt-1.7-1.i386.rpm
>
> ccryptはAESを使っているようですね。
>
> AESでは暗号化/復号の際、
> 鍵の他にIV(初期化ベクタ)と呼ばれるものが必要で、
> これをランダムにすることで同じ平文から同じ暗号文が
> めったに出ないようになっています。
>
> ですから、今岡さんの予想は当たっています。
>
> ccryptのマニュアルで「DESCRIPTION OF THE CIPHER」節に解説があります。
> ソースでは srv/ccryptlib.c の↓このあたりでIVを作っています。
>
> /* return a 256-bit value that is practically unique */
> static void make_nonce(word32 nonce[8]) {
>  char acc[512], host[256];
>  struct timeval tv;
>  static int count=0;
>
>  gethostname(host, 256);
>  gettimeofday(&tv, NULL);
>  sprintf(acc, "%s,%ld,%ld,%ld,%d", host, (long)tv.tv_sec, 
> (long)tv.tv_usec,
>   (long)getpid(), count++);
>  hashstring(acc, nonce);
> }
>
> ためしに最後の sprintf() を塗りつぶすと
>
>  sprintf(acc, "test");
>
> 同じ平文から同じ暗号文が出せます。
> # やっていいのかどうかは別にして
>
> PostgreSQL直接関係ないですが、
> ご参考まで、よろしくお願いいたします。
>
> -- 
> 平塚貞夫 hiratsuka.sadao @ nttcom.co.jp
>
> 




pgsql-jp メーリングリストの案内