微軟跟 HTC 討論在 Android 上跑 Windows 的可行性...

剛剛在 Zite 上看到微軟希望 HTC 能夠將 Windows 移植到 Android 手機上:「Microsoft Said to Ask HTC for Windows on Android Phones」。

這個想法... 很有趣啊?不過效果就不知道會怎麼樣...

而 2013-Q2 智慧型手機的出貨市佔數據可以在 Gartner 這邊翻到參考資訊:「Gartner Says Smartphone Sales Grew 46.5 Percent in Second Quarter of 2013 and Exceeded Feature Phone Sales for First Time」。

Android 是 79%,iOS 是 14.2%,Microsoft 系統是 3.3%,Blackberry 是 2.7%。

美國法院可以強制公司交出 SSL Private Key...

前幾天解密的文件證實了先前的傳言:美國法院可以以協助犯罪搜查的名義,強制商業公司交出 SSL Private Key 給 FBI,並且可以用「偵查犯罪中」的理由要求公司不得公開這件事情。

報導在這:「Edward Snowden’s E-Mail Provider Defied FBI Demands to Turn Over Crypto Keys, Documents Show」,解密的文件 (整個系列的文件) 則在「Redacted Pleadings Exhibits 1 23」這邊可以讀到。

Edward Snowden 的 E-mail 服務提供商 Lavabit 在七月時被法院要求配合調查,其中被要求交出 SSL Private Key:

A week later, prosecutors upped the ante and obtained the search warrant demanding “all information necessary to decrypt communications sent to or from the Lavabit e-mail account [redacted] including encryption keys and SSL keys.”

而且「交出 SSL key 這件事情」不得公開:

The judge also rejected Lavabit’s motion to unseal the record. “This is an ongoing criminal investigation, and there’s no leeway to disclose any information about it.”

而 Lavabit 最後決定以紙本形式提供:

In an interesting work-around, Levison complied the next day by turning over the private SSL keys as an 11 page printout in 4-point type. The government, not unreasonably, called the printout “illegible.”

在法院要求提供電子格式後,Levison (Lavabit 的頭) 決定讓 Lavabit 停止服務,同時因為受限封口令,網站上只能寫得很隱晦,表達對美國的不信任:

這件事情預定要到第四巡迴庭去打:「Let's rally for Lavabit to fight for the privacy rights of the American people. | Rally.org」。

如何設計好的 API

一樣是在 Zite 上看到在分享要如何設計 API 的文章與影片:「Parse Developer Day Video Series: How to Design Great APIs」。

算是觀念性的分享,很多觀念很有趣... 而不可避免的,講到 naming 的時候,PHP 又被拿出來婊... (沒辦法,這個程式語言的 naming 實在太經典 XD)

Puppet 新給的入門文件

Puppet 寫了一份新的入門文件:「Check Out Our New Beginner's Guide to Writing Modules」,實際的文件在「Beginner's Guide to Modules」這裡。

文件不是給完全新碰 Puppet 的人讀的,你還是必須先知道基本的結構,這部份可以看「Learning Puppet」這份,尤其是名詞定義的部份。

看過一次後覺得是從不同面向解釋 Puppet,跟原來的那份文件互補。最近剛好會用到...

資安研討會上的封包測錄...

國內外資安研討會上都愛玩的主題:封包測錄分析。

這次是 BruCON 2013 的記錄,有兩篇:「BruCON 0×05 Wrap Up」、「What Do Attendees During a Security Conference?」。

第一篇首先是依照 OS 數量的分析:

另外還有整體的數量分析:

另外發現有大量的 OpenVPN 以及 IPsec 封包,這也的確是資安研討會應該要出現的東西... XD

第二篇的分析也很有趣,像是對 DNS 的分析:

大紅點是官方提供的 DNS (10.4.0.1),兩個小紅點是 Google 提供的 DNS 服務 (8.8.8.8 與 8.8.4.4),而黃點則是 mDNS

然後官方有提供兩包 50GB 的檔案... 要分析的人也可以拿去玩 XD

然後提到 The Bro Network Security Monitor,找機會玩看看好了...

Firefox 以 JavaScript 支援 Flash

標題不知道怎麼下比較好...

一樣是在 Zite 上看到的消息,Firefox 將引入內建的 Flash Player,是以 JavaScript 實做的:「HTML5 Flash Player (Shumway ) landed」。

專案在 GitHubmozilla/shumwayMozilla 的 Bugzilla 則是在「Bug 904346 - (shumway) [meta] add built-in SWF support to Firefox with Shumway」這裡。

純 JavaScript 的實做版本,有機會 porting 到 Chrome 上嗎?感覺安全性問題會少很多?(或是被發現安全性問題的時間?)

EdgeCast 提供的 DNS 服務:EdgeCast Route

Zite 上看到 EdgeCast 也要進入 DNS 服務這個市場了:「CDN Provider EdgeCast Gets Into The DNS Market With Launch Of EdgeCast Route」。

服務的頁面已經公開,並且公開價錢:「Managed DNS Provider | Outsourced DNS Service | Route | EdgeCast」,服務分成三種:

Standard Routing

利用 EdgeCast 的 IP Anycast Network 服務。每百萬個 query 是 USD$0.4 (超過十億個 query 的部份降到半價 USD$0.2)。

Adaptive Availability

除了 IP Anycast Network 外,還可以設定 health check 與 ratio (以達到 load sharing 的功能)。每百萬個 query 是 USD$0.6 (超過十億個 query 的部份降到半價 USD$0.3)。

Advanced Policy Routing

可以依照這些條件分析:GeoIP、GeoCountry、GeoCity、ASN、IP Group、Network Groups、Anycast PoPs 或是 IP Type。每百萬個 query 是 USD$1.5 (超過十億個 query 的部份降到 USD$1)。

另外價錢還有 zone 的部份。前面 50 個 zone 是 USD$50/month (算是低消吧?),後面每 50 個 zone 是 USD$35/month。而 health check 的部份是每個 USD$0.5/month。

可以設這麼細,而且又取這個名字,算是跟 Amazon Route 53 打對台?不過那個 Geo 系列以及 ASN 的部份看起來不賴啊,以前是自己寫 DNS resolver 處理這部份,把國外流量指到 CDN 上,然後台灣流量放在台灣的機房 (因為 CDN 不一定有台灣機房的 PoP)。

找機會來看看效果如何...

因為 NIST 而換掉 AES?

Slashdot 上看到有人因為最近 NIST 被抖出來的事蹟 (SHA-3 的問題),而決定換掉 AES:「Silent Circle Moving Away From NIST Cipher Suites After NSA Revelations」。原報導在「Non-NIST Cipher Suite」。

換掉 AES 不確定這是不是好主意...

Rijndael 從 1998 年公開後,2001 年被選為 AES,之後被廣泛應用在所有資安協定上,也因為被廣泛應用,全世界打了這十多年下來,都還是屬於可用的狀態。換成其他 cipher 會比較安全嗎?

非常經典的 UTF-8...

Hacker News 文摘上看到「UTF-8 – “The most elegant hack”」這篇。除了維基百科上的資料以外,Rob Pike 與其他人在 2003 年寫的 mail 也是相當重要的資料。

Ken Thompson 與 Rob Pike 兩位發展出來的 UTF-8 被譽為最優雅的 hack 真的一點都不為過。Unicode 1.0 在 1991 年 10 月公佈。之後就陸陸續續有表示的格式出來...

相容於 ASCII 0-127 的 UTF-1 在 1992 年被提出來,但 parsing performance 並不好。

1992 年 7 月,Dave Prosser 提出 FSS-UTF,很類似後來的 UTF-8 但缺乏 self-synchronizing 特性 (這個特性指的是,從字串中間可以很容易找到切割點)。

1992 年 8 月,Ken Thompson 改善了 FSS-UTF,讓 bit 使用效率低一點,但因此擁有 self-synchronizing 特性。之後在 1992 年 9 月,Rob Pike 與 Ken Thompson 將 UTF-8 實做到 Plan 9 上。而 UTF-8 正式公開發表則是在 1993 年 1 月的 USENIX 上。

UTF-8 的設計看起來很 hack,但卻有這些優美的特性:

與既有系統的相容性

只包含 ASCII 0-127 的字串是合法的 UTF-8 字串。

重點是 0 被保留下來,也就是本來的 NULL-terminated 字串處理全部都可以沿用,這使得從 C 語言的 strcpy(),到一堆網路上已經跑很久的通訊協定,都可以繼續沿用。

極高的辨識性

UTF-8 很容易被判斷出來,引用維基百科的數字:

The probability of a random string of bytes which is not pure ASCII being valid UTF-8 is 3.9% for a two-byte sequence, and decreases exponentially for longer sequences.

非 ASCII 字串只要稍微有長度 (四個中文字,12 bytes?),判斷字串是否為 UTF-8 的正確性應該跟各種服務的 SLA 有得拼...

與 Unicode 的順序對應相容

Unicode 的編號順序與 UTF-8 相容,也就是說連傳統的 strcmp() 都可以直接拿來用:

Sorting a set of UTF-8 encoded strings as strings of unsigned bytes yields the same order as sorting the corresponding Unicode strings lexicographically by codepoint.

避開 UTF-16 的 BOM

BOM 的 0xFE 與 0xFF 在合法 UTF-8 文件裡是看不到的,所以如果開頭有看到 BOM 時一定不是 UTF-8:

The bytes 0xFE and 0xFF do not appear, so a valid UTF-8 stream never matches the UTF-16 byte order mark and thus cannot be confused with it.

self-synchronizing 特性

由於 encoding 的特性,UTF-8 字串要找下一個斷點是很容易的:

找到符合這六種開頭的 string pattern 就是斷點。也因為如此,容錯率相當高。

可以容納所有 Unicode 字元

也因為 encoding 特性,UTF-8 理論值可以容納百萬個字元 (依照 RFC3629 的額外限制,是 1112064 個)。在還沒有找到很多外星文明之前,應該都還夠用。(2012 年發佈的 Unicode 6.2 也才十一萬個字元,110182 個字元)

Unicode 與 UTF-8 之間的轉換很方便

再次因為 encoding 特性,轉換幾乎是 bit 運算就可以操作完畢。(注意 Last code point 的值都切齊)

因為太多好處,變成超級標準了...

這是一個幾乎找不到缺點的 standard,所以早期很多 programmer 選擇的原因是「看了就喜歡」,於是就有大量的 library。接下來有大量的 standard (這還包括 XML standard) 直接挑明講 UTF-8 的處理能力是必要條件。

總結...

UTF-8 encoding 怎麼看都很 hack (看起來很隨意的把不同 Unicode 區段切割到不定寬度字集內,感覺不到特別的處理),但卻很完美的解決了「如果可以處理 8bits 時,要與現有系統相容」的問題。也因為這個 encoding 把問題解決得很乾淨 (UTF-8 解決不了的,其他人都解不乾淨),於是就變成超級主流 encodoing...

Google 在 2012 年 2 月時就寫過一篇「Unicode over 60 percent of the web」,這還是扣掉 ASCII 的 20%!

現在是 2013 年快年尾了,可以預期之後是 UTF-8 萬萬歲了...

如果想要了解更細,可以參考維基百科的「Comparison of Unicode encodings」,裡面有與其他 Unicode 格式的比較。