[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: sb-exconn.el



>> On Tue, 29 Jun 2004 16:44:13 +0900
>> 「土」== tsuchiya@namazu.org (TSUCHIYA Masatoshi) said as follows:

山> (md5 url) ってのは一意性が保証されないのでは?

土> (md5 url-a) と (md5 url-b) の結果が偶然に一致(= ハッシュ値が衝突)
土> することを心配されているのですよね? 確かに,保証はされませんけど,
土> 非常に低い確率でしか衝突は起こらないはずなので,無視できるのではな
土> いかと思うのですが.

と書きましたが,冷静に考えてみると

  (a) shimbun-generate-id() で encode した url が 998 バイトを越える確率
  (b) md5() で得られたハッシュ値が衝突する確率

のどちらが大きいと考えるか,という単純な問題なんですね.

;; で,山岡さんは(b)が大きいと想定し,私は(a)が大きいと想定している,と.

でまあ,はっきり言って,(a)も(b)も実用上問題ないほど小さい確率だと思い
ます.ただ,(a)の方は,それが生じた場合には RFC 違反になってしまうのに
対して,(b)の方は,RFC に常に適合することが保証されているので,それが
メリットかなと思います.

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )

(defun shimbun-generate-id (server group url)
  (let ((pos 0) buf)
    (while (string-match "[^0-9a-zA-Z_:.]" url pos)
      (setq buf (cons (format "%%%02x" (aref url (match-beginning 0)))
                      (cons (substring url pos (match-beginning 0))
                            buf))
            pos (match-end 0)))
    (setq buf (concat "<"
                      (apply (function concat)
                             (nreverse (cons (substring url pos) buf)))
                      "@" group "." server ".shimbun.namazu.org>"))
    (if (<= (length buf) 986) ;; == (- 998 (length "Message-Id: "))
        buf
      (concat "<" (md5 url) "@" group "." server ".shimbun.namazu.org>"))))

みたいな関数を書けば,より安全になるのは分かりきっているのですが,こん
な汚い処理は見たくない.md5() だけで済むのなら,それで片付けたい.