SSL broken *NOW*

UpdateMozillaMicorosft 都發出 security report 了,參考 MD5 Weaknesses Could Lead to Certificate Forgery (Mozilla) 與 Microsoft Security Advisory (961509) Research proves feasibility of collision attacks against MD5

標題的 NOW 有兩個意思,一個是強調「已經」,另外一個是「現在」。

在 2004 與 2005 年的時候,密碼學界相當轟動的事情:王小雲的 MD5 collision。這件事情很有名,但實際上更具破壞性的是 Arjen Lenstra、王小雲、Benne de Weger 三位所發表的「Colliding X.509 Certificates」,示範如何使用 MD5 collision 湊出一個合法的 X.509 certificate。

2005 年 Arjen Lenstra 所示範的重點在於「MD5 collision 已經有能力去配合 protocol 變化」,同時說明攻擊其他 protocol 的可行性。

不過,Arjen Lenstra 的論文似乎沒被重視,還是有 Chain SSL Certificate 是用 RSA-MD5 簽,於是在 2008 年年底,事情就爆發了,有團體拿了兩百台 PS3 硬是產生出一組合法的 Chain CA:「MD5 considered harmful today」。

換句話說,有了這組 Chain CA private key 的人,他可以自己建立任何一個站台的 SSL key (像是 www.paypal.com) 再自己簽。簽出來的 Certificate 可以被所有主流瀏覽器認為合法的 SSL Certificate。就像下面這張圖他們簽了 127.0.0.1:

大爆走了... IE 可能過陣子就會上 security update 把 RSA-MD5 擋下來,不過這樣就會有一堆站台爛掉。而這陣子這幾家還在用 MD5 的公司可能會忙著重簽?

暫時性的 RSA-SHA1 不是一個好方法 (雖然 SHA1 collision 還不到可接受的時間範圍),而 RSA-SHA2 還在 draft (目前是 05),看起來大家要頭痛一陣子了...

PXELinux 的 Image

如果要建立 FreeBSD 的 image (給 PXELinux 用),通常會參考「FreeBSD disk image creation」這篇的方法建立。

不過這個方法很繁雜,所以早就有人寫成 script 了:Log of /src/nrelease/install-iso2img.sh,不過這個檔案有點問題,要自己把 =3D 換成 =,另外以 = 結尾的要自己接起來。

忙碌...

年末了,除了一些年末總是會有的事情外 (像是帳務問題),最近一直找問題、解決問題、再找問題、再解決問題...

一個是 SmokePing 啟動速度很慢的問題,我在「Smokeping 啟動速度很慢的問題」有提到問題點與 dirty hack 的方法。

最近想辦法改善 am-utils (amd) 在 FreeBSD 上的穩定度,jnlin 看起來頗無奈 XD

MySQL Percona 版本跑起來相當不錯,不過還是踩中地雷 (5.1 也有的地雷,某些情況下會用到比較奇怪的 index,不僅效率較差,結果居然是錯的...),得生一組可重製問題的 public dataset 讓 MySQL 官方修正。

然後秋番也差不多結束了,冬番也快要開始了,這個元旦大概會狂衝進度,把一些覺得還可以的作品看完吧 XD

jQuery 1.3 的 Live Event Delegration,以及速度問題

到公司跟 ManicjQuery 1.3 的時候才發現少提了一個很重要新功能:Live Event Delegration。

假設你對 #foo 裡的圖掛上一些 event:

$('#foo img').hover(f);

接下來你重新讀取 #foo:

$('#foo').load('/url/foo.php?page=' + num);

在 1.3 之前,本來的事件必須重新再掛一次:

$('#foo img').hover(f);

在 1.3 後,你可以一開始用 Live Event Delegration 掛上去,他會自己在裡面內容更新後重掛:

$('#foo img').live('hover', f);

這個功能可以少寫不少 code...

另外一點是速度問題。有人在 mailing list (Google Groups) 上回報掛上 Sizzle 後,FirefoxOpera 的速度反而比較慢:「Sizzle maybe slowing down DOM manipulations」,這個問題在 John Resig 確認後發現是 Sizzle 的 cache 問題後修正了:「Removing the caching code for Firefox and Opera - caused a severe negative performance impact for those browsers.」,所以在 1.3 Beta 2 的時候應該會感覺到更快。

jQuery 1.3 Beta 1

John Resig 丟出 jQuery 1.3 Beta 1 讓大家測試:「Help Test jQuery 1.3 Beta 1」,文章裡面提到新的 Selector Engine,也就是 Sizzle,速度會再往上提昇。

Selector Engine 的速度繼續往上提昇當然是好事,不過主要是對於不良習慣的 programmer 會有更大的好處:

var queryString; // 某個很複雜的 css3 selector
$(queryString).html('some string');
$(queryString).css('opacity', '0.5');
$(queryString).show();

這種 code 看了就很想要巴人腦袋... =_=

另外有很多地方改寫後速度快更多了 (像是 DOM 的寫入操作),參考「jQuery 1.3 beta: Sizzling and feature testing」這篇。

jQuery 不再使用 browser-detecting 的技巧

Twitter 上看到 John Resig 的訊息,說 jQuery 不再使用 browser detecting 的技巧,完全改用 Object detecting:「They said it couldn't be done: jQuery no longer uses any browser/useragent sniffing! http://bit.ly/eXrP

Browser detecting 在 ppk 的「Browser detect」這篇文章裡有提到,經常被用於 (且誤用於) 功能的判斷。比較好的方法是 Object detecting

譬如說,目前 Firefox 3 支援 getElementsByClassName(),但 Firefox 2 並不支援。如果你要使用這個功能,應該利用 object detecting 這樣寫:

if (document.getElementsByClassName) {
    // do something with getElementsByClassName
} else {
    // use getElementsByTagName to emulate it
}

而非用 browser detecting:

if (firefox3) {
    // do something with getElementsByClassName
} else {
    // ...
}

除了程式碼比較合理 (乾淨) 外,這樣寫出來的 code 也比較 future proofing。這點可以參考 John Resig 的「Future-Proofing JavaScript Libraries」。

Mercurial 的 LocalbranchExtension

Mercurial 並沒有內建 local branch 的功能,需要安裝 3rd-party extension 模擬 local branch。在官方網站的 wiki 上上有說明這項功能的下載地點與使用方法:Local Branch Extension

下載了之後,在自己 ~/.hgrc 裡加上:

localbranch = /full/path/localbranch.py

有個試了好幾次才發現問題的地方:FreeBSD 上 1.0.2 版的 Mercurial 與最新版的 localbranch extension 會有問題,要配上 2007 年九月的版本才會動。

不過畢竟是「模擬」出來的,比起 Git 還是差不少。

XtraDB:InnoDB 的取代品

Percona 宣佈新的 Storage Engine,從 InnoDB 修改出的 XtraDB:Announcing Percona XtraDB Storage Engine: a Drop-in Replacement for Standard InnoDB

據他們所宣稱,這個版本會 100% 相容於 MySQL 內建的 InnoDB,所以他們推薦大家直接換過去用。而 OurDelta 的 5.1 版本會直接內建 XtraDB 作為 InnoDB 的取代品。

這狠狠的打了 Sun/MySQL AB (以及 Oracle) 一巴掌。

有些有趣的想法可以從 Jeremy Zawodny (High Performance MySQL 第一版第二版的作者之一) 的 The New MySQL Landscape 這篇文章裡看到。配合 SlashdotIs MySQL's Community Eating the Company? 這篇看就更有感覺了... (尤其是 comments)

Update 2008/12/19:有興趣的人可以看「XtraDB benchmarks - 1.5X gain in IO-bound load」這篇文章,裡面有一份 benchmarking。(不是很嚴謹的方式)