[pgsql-jp: 39382] Re: BYTEA型の値の検索方法
HIRATSUKA Sadao
hiratsuka.sadao @ nttcom.co.jp
2008年 5月 7日 (水) 12:17:38 JST
平塚といいます。
On Wed, 7 May 2008 10:57:30 +0900
"Imaoka Yumiko" <shinoi @ osk2.3web.ne.jp> wrote:
> サンプルをありがとうございます。
> 私も、暗号化の値がその度ごとに違うのではないかと
> 調査しているところです。
> 鍵を使っての暗号化なので、鍵と暗号化前の文字列が
> 同じなら常に同じ暗号化データが生成されるのだと思っていましたが…。
>
> ちなみに、暗号化で使用しているのは下記です。
> 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 メーリングリストの案内