[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 メーリングリストの案内