FDE 小破解

此處的 FDE 是指 Full Disk Encryption.

根據 [1] 這篇文章, 他在 Qualcomm 的系統中找到了 FED 的漏洞. 下面我把這篇文章的重點摘要出來, 細節就略過了.

首先我們都知道加密需要密碼, 因此好用的方式就是把硬體上的唯一密碼 (unique HW key) 和使用者輸入的密碼 (Passcode key) 做運算, 得到一個沒有人知道的新密碼. 下圖是 Apple iOS 用的方法. (KDF = key derivation function)

Apple’s FDE KDF

試想, 如果我把整個 FLASH (eMMC or SD Card) 裡面的資料都加密了. 那我換了密碼之後, 是否要把整個資料重新加密一遍? 當然不可能, 新的密碼只能用來加密 “File key", 而加密真正資料 (file contents) 的 key 是不變的.

Android 的做法也類似 [2].

Androids-FDE-1-768x487
Android FDE’s KDF
  1. 首先裝置隨機產生一個 16 byte 的 master key (Device Encryption Key – DEK), 然後準備一把鹽巴調味 (16 byte = 128 bit random-generated salt).
  2. 用 user password 加鹽巴 scrypt 出 32 byte (=256 bit) 的中間 key 1 (IK1 = intermediate key 1).
  3. 把 IK1 前面加一個 zero byte, 後面加 233 個 zero byte 墊成 256 bit (padded IK1) , 這是因為裝置上的 key (hardware-bound private key = HBK) 就是 256 byte.
  4. 用 HBK 去sign padded IK1. 產生 256 byte IK2.
  5. 用 IK2 加鹽巴 scrypt 出 32 byte IK3.
  6. 用 IK3 的前 16 byte 當 KEK (key encryption key), 後 16 byte 當 IV ( initialization vector).
  7. 把 DEK 用 AES-CBC 加密, 其中 KEK 和 IV 取材自上一步.

除了這些複雜的 key, iOS 和 Android 都有防止嘗試錯誤的軟體機制, 錯愈多次就要休息愈久. 所以破解方法就要用外部的硬體來做, 這也就是 Android 網頁上 [2] 所說的, 把產生 key 的方法複雜化, 以對抗 off the box 的破解. “In order to make the key resilient against off-box attacks, we extend this algorithm by signing the resultant key with a stored TEE key." 然而, 這樣還是被破了.

在 [1] 當中提到, 破壞的關鍵在於 key master module. 在 TEE (Trusted Execution Environment) 架構裡面, 有安全顧慮的動作, 都會由 REE (rich execution environment, non-secure world) 送到 TEE (secure world), 然後再把結果回傳 REE. Key master 本身長在 secure world, 理論上夠安全才對.

access-to-keymaster

不過, 畢竟 TEE 需要 SW 實作, 所以從 binary code 可以被反組譯, 再搭配公開的 data structure, 就可以找出 HMAC (Keyed-Hash Message Authentication Code) [7]. 下圖中間的 QSEE 就是 Qualcomm Secure Execution Environment. 破解的流程如下:

  • Enable the DACR (ARM 裡面的 Domain Access Control Register) in the TrustZone kernel to allow us to modify the code cave.
  • Write a small shellcode stub in the code cave which reads the keys from the KeyMaster application.
  • Hijack the “qsee_hmac" system-call and point it at our shellcode stub.
  • Call the KeyMaster’s key-generation command, causing it to trigger the poisoned system-call and exfiltrate the keys into the shared buffer.
  • Read the leaked keys from the shared buffer.

All-Android-System

作者認為 FDE 雖然已經被公認是安全可靠加密方式, 但是在 Android + QSEE 的組合之下, 還是被找到了漏洞. QSEE 使用 SHK (hardware key) 衍生的 key 來加密, 作者認為不如直接用 SHK 比較好, 因為 SHK 反而保證是 SW 不能讀取的. 不過在其他的使用案例, 這樣又會有別的問題 [1].

[REF]
1.  Extracting Qualcomm’s KeyMaster Keys – Breaking Android Full Disk Encryption
2.  https://source.android.com/security/encryption/
3.  Nikolay Elenkov’s blog, “Android Explorations"
4. Dan Guido’s superb post about the technical aspects of Apple v. FBI,
5. Matthew Green’s great overview on Apple’s FDE
6. iOS Security Guide
7. https://en.wikipedia.org/wiki/Hash-based_message_authentication_code

2016 匯僑股東會記要

一早跑來參加股東會, 結果園區大塞車, 錯過高鐵班次. 出了捷運還找不到會場的方向, 最後遲到 1 分鐘才進場. 

20160630_092435-1-768x576

會議其實很快就結束, 沒有人提意見. 感覺只有投票的時候計時 2 分鐘花了比較久的時間. 我都衝動想去投票了, 不過我心知投了也沒影響就忍住了. 最後選舉都都依大股東的意見通過, 沒有任何意外.

會後我想認識身邊的一些股東朋友, 畢竟大家互通訊息的話應該會更好. 正在東張西望的時候, 財務長兼發言人陳重光先生主動過來遞名片, 隨後吸引了董事長廖述群先生和總經理葉唐榮先生靠過來.

陳發言人應該是公關專家, 很客氣地提到有什麼問題都可以找他. 也特別跟其他人介紹我是特別請假來參加. 我的確是為了對小朋友負責, 不得不來關心一下. 廖董表示去年也有一對退休夫妻說要來參加過才放心… 寒暄已畢, 於是我趁機把我的小問題提出來.

我主要擔心的問題是, 匯僑的專業不在高科技, 如果轉投資這些產業, 怕沒有人可以監督管理. 廖董事長表示, 過去也有同樣的擔心, 已經將那些投資處分掉. 現在投資的太陽能獲利不錯.

另外一個更小的問題是, 公司有沒有買回股票的打算?葉總經理表示承認事項 2 中提到這句只是慣用的 wording, 最近股價在穩定的高點, 實際上沒有這樣的計畫.

最後要離開會場時, 在電梯遇到一位先生看似來參加的股東. 一問之下是匯僑的蘇坤明副總經理. 他也提到公司投資太陽能獲利不錯. 蘇副總好說台語, 人很爽朗, 還關心我幾塊錢買的, 哈!由於他要趕去搭車, 我就沒再打擾他. 

雖然串連股東同好的目的沒有達成, 不過來日方長. 如果有關心這檔股東的同好, 請加我 Facebook 好友. 畢竟這家公司的股東結構除了千張以上的超大股東 (閎常國際, 泰禹投資, 利揚資產管理) 之外, 就只有和個人股東地位差不多, 只買幾百張的法人 (新藏興投資, 德意志銀行, 南山人壽, 富同投資), 以及我們這些喊冰箱也不會結凍的小股東了.

比我預期早結束的股東, 讓我還有銷假上班的機會. 於是先跑去台北內湖的辦公室回 email, 中午再去行程中的林東芳吃牛肉麵. 不過光是這樣跑來跑去, 體力已經不多了. 回到新竹後更是累, 最終放棄回去上班的念頭. (下圖: 林東芳大半筋半肉麵 250 NTD).

20160630_115937-768x576

因為沒酸菜, 所以我加了牛油, 使得原本好喝的湯變鹹了! ><||| 下次我想點半筋半肉湯就好. 因為肉質沒話說, 但麵不是我愛的. 偶然發現帶位的歐巴桑會說日語, 因為我左手邊坐了日本人, 而右手邊又坐了大陸客. 小小一個隔間就有來自不同地方的人來探險, 難怪要開發票!哈!

網路修修

前幾天老婆一直抱怨樓下的網路慢, 我在手機裝了 APK 測試一下, 發現下載大概 3 Mbps, 上傳大概 100 Kbps 而已. 不過在小烏龜上測試, 上傳可以有 38 Mbps 的水準, 這未免也差太多了.

看了網友的文章 [1], 似乎是 AP 裡面設定的問題 – 需要手動設定上傳頻寬. 不過我的 AP 和他的不同牌子, 調了半天也沒有起色. 尤其 Tenda W309R 的韌體快 3 年沒更新了, 不由得令我惡向膽邊生, 決定把這樓上樓下的這兩個 AP  淘汰掉.

畢竟我們產品線 OTT box 兼著做 AP router 都號稱 AC1200 了, 不如趁機進版到 802.11ac wave 2 吧! 很快爬了 802.11ac router 的文章, 確認 ACXXX 的數字並不見得是愈大愈好 [2], 於是我把目標放在一位香港人小 U 推薦的品牌 [3]. 他比較重視 CP 值, 這樣應該不至於冤枉花了大錢.

在此先回頭講一下 ACXXX 是怎麼來的? 首先, 一定要把 2.4GHz 和 5GHz 的數字加在一起, 然後再灌水到整數. 不過數字大了之後, AC3200 和 AC5300 可以視為沒直接灌水! 話說 2.4G 真的可以和 5G 同時用嗎? 可以的, 根據 [2], 11ac 的部分會掉 30~40%, 11n 的部分掉 0~25%.

Mbps 2.4G 5G 5G Total
1T1R 433 433
AC600 150 433 583
AC750 300 433 733
2T2R 867
AC1200 300 867 1167
3T3R 1300 1300
AC1750 450 1300 1750
4T4R 1734 1734
AC1900 600 1300 1900
AC2350 600 1734 2333
AC2400 600 1734 2333
AC2600 800 1734 2533
AC3100 1000 2167 3100
AC3200 600 1300 1300 3200
AC5300 1000 2167 2167 5333

上表要怎麼解讀呢? 在 5 GHz 的 80MHz 頻寬的 11ac 部分 1T1R 就是 433 Mbps, 接著 2T2R, 3T3R, 4T4R 都比照辦理, 所以最高就是 1734 Mbps [4]. 除非頻寬長到 160 MHz. 那 Asus RT-AC88U (AC3100) 的 5 GHz 跑到 2167 是怎麼回事呢? 因為它是 1024-QAM, 不是 256-QAM, 速度比 1734 快 25%, 所以應該是 802.11ax 的規範 [5] .

至於 5 GHz 的部分有時候出現兩欄, 這就是所謂的 3 頻 ( 1 個 2.4 G, 2 個 5G). 一個 5G 給高速使用, 1 個 5G 給低速使用. 兩者各占一個頻寬通道, 理論上速度可以相加. 但事實上就沒那麼理想.

那麼 2.4GHz 的速度從 150~1000 Mbps 要如何解釋呢? 150 Mbps 是 11n 的 1T1R, 依此類推, 2T2R/3T3R/4T4R 就是 300/450/600 Mbps. 至於 800 Mbps 是 4T4R 的 200 Mbps, 它恰好是 11ac 的 256-QAM 在 40MHz 頻寬的速度. 而 1000 Mbps 就是 800 Mbps 快 25% 的 1024-QAM.

總結起來, AC2400 的 4T4R 應該就很夠用了. 所以買個兩台 7~8K NTD 的路由器, 應該可以讓我們家的網路升級到前所未有的地步!!! 於是我點開 PChome 的網頁, 滑鼠準備要按下去的時候, 忽然看見下方 “看此分類的人也看了…." 裡面有 “最新★1000Mbps速率“, 靠腰! 2005 年我買過左邊這個, 還放在抽屜裡面沒丟掉. 若干年後, 我又買過右邊這個 500 Mbps 的. 理論上的速度已經快了 35.7 倍.

現在居然已經進步到 1800 Mbps, 價錢只比 1/3 台高級路由器多一點點, 而且一次有兩支. 那…那…只好不讓公司 6 月業績創新高了 (各少賣了兩顆 802.11n 和 ac 的 IC), 我先買 HomePlug 頂著吧, 這樣一樓的網速可以先上到 20 Mbps. 畢竟這產品的效能打 0.1 折都堪用了.

buy-powerline1800Mbps

2016/6/5 實測結果 OK. 這樣就符合期待了.

DrSpeed-1-768x623

[REF]

  1. 光世代上傳速度過慢排除
  2. AC2400! AC3200! 是數字遊戲還是越大越好?分析最新AC WIFI製式、明白什麽規格才適合自己
  3. 嚴選性價比: 小U網販路由器/接收器五虎將列陣!- 刺激一下行貨代理吧^_^
  4. 無線傳輸速率
  5. https://en.wikipedia.org/wiki/IEEE_802.11ac

Ultra HD Premium 小註解

所謂的 UHD (Ultra HD) Premium 是由 UHD Alliance [1] 提出的規範, 主要在於和一般的UHD (4K 解析度) 劃清界線, 以便提高自身的價值. 不然大家都是 4K / UHD, 那麼比較厲害的 4K 就很可能被普普的 4K 打壞名聲.

達到 UHD Premium 的條件在今年 (2016) 的 CES 宣布底定, 內容包括:

[Content 與 device]

  1. 解析度達到 4K (3840×2160)
  2. 支援 10 bit / BT2020 / HDR

[TV]

  1. 涵蓋 DCI P3 [3] 的色域達 90% 以上.
  2. 符合下面的亮度規範之一:
    1. 最亮達到 1,000 nit [4], 最暗低於 0.05 nit.
    2. 最亮達到 540 nit, 最暗低於 0.0005 nit.

涵蓋 DCI P3 的色域達 90% 以上 – 這是甚麼樣的概念呢? 其實 DCI P3 也就比 BT.709 更寬廣一點 (更多的綠, 略多的紅). DCI P3 能涵蓋可視頻譜的 50% [5], BT.709 只有 35%. 而 BT.2020 高達 75%. 換言之, 符合 BT2020 就比 DCI-P3 大了 [6], 這條規範有點放水.

為何 TV 電視可以有雙重標準呢? 因為 OLED TV 的明暗表現遠勝於 LCD TV, 所以它整個相對區間都下降了, 理論上這樣比較不傷眼, 只是螢幕容易烙印~~~

[REF]

  1. http://www.digitaltrends.com/home-theater/uhd-alliance-explained/#:HRpZC9sXRmFE0A
  2. http://www.whathifi.com/advice/ultra-hd-premium-what-are-specs-which-tvs-support-it
  3. https://en.wikipedia.org/wiki/DCI-P3
  4. nit = cd / m2, cd = candle = 1 燭光, 除以單位面積就是 Luminance (輝度)
  5. 根據 [3],  精確地說是 CIE 1931: 45.5%, CIE 1976: 41.7%. CIE (International Commission on Illumination) 是指 CIE 的規範
  6. http://www.rtings.com/tv/tests/movies/hdr/wide-color-gamut-rec-709-dci-p3-rec-2020

我讀 «證券分析» 第六版 – 普通股投資理論 2 (完)

第 29 章主要是講 (現金) 股息, 第 30 章講股票股息. 

在現金股息的部分, Graham 認為應該要讓股東決定配息率. 原因是公司若賺了錢卻不發股息, 等於是一種 “預扣" (Withholding Dividends). 把錢留下來, 不發給股東當然有其正面的意義:

  1. 鞏固財務狀況 (營運資金)
  2. 提高生產力
  3. 根除過度資本化的問題

其中第一、二點很好理解, 手上多一點錢, 緊急時無須找人周轉, 也比較好做事. 第三點是說公司不需要為了以上的理由增資, 以至於股本膨脹. 不過, 即便有這樣的理由, 作者說: “給兩家行業地位相似且盈利能力相同的公司, 派息較高的公司永遠對應著更高的股價." (p. 444)

美國企業經常留存大部分的盈餘, 只發給股東一小部分. 看似公司因此更能度過寒冬. 但事實上不然, Atchison 公司從 1910~1924 年都賺 12 元以上, 並發出 6 元股息. 1927 ~1931 年改發 10 元股息, 股價因此大漲. 不過到了 1932 年遭遇大蕭條, 公司卻發不出股息了. 過去的幾十年當中, 公司理當儲備了大量的現金可以應付災難, 但事實上一夕還是歸零. United States Steel 是當時美國工業的龍頭, 存了 30 年的未分配股息, 不過仍然抵不過為期一年半的衰退.

既然公司應該要發股息, 而且是把賺的錢儘量發給股東. 我們就可以據此來估計一檔股票的相對價值. 比方說 A 公司股價 100 元, 每股賺 7 元 (earnings rate), 配息 5 元, 那麼 dividend rate = 7 /100 = 7%, dividend ratio = dividend return = dividend yield = 5 / 100 = 5%.

若有一家類似的 B 公司, 同樣賺 7 元, 但配息 4 元, 則我們認為它的相對合理股價落在 A 公司的 4/5 = 80% ~ 7/7 = 100% 之間. 而且要更偏向 80% 這端.  反之, 同樣賺 7 元卻配息 6 元的 C 公司, 它的相對股價應該要落在 7/7= 100% ~ 6/5 = 1.2 之間, 而且更偏向 100 元這邊. 因為如果偏向 120 這邊, earnings ratio = earnings return = earnings yield = 7 / 120 = 5.83%, 顯得本益比 (5.83% 的倒數) 過高.

另一個重點是盈餘再投資之後, 公司是否相應地成長? 舉例來說, 公司每股賺 10 元, 發出 7 元的股息, 留下 3 元給公司做事. 但公司有成長 3/100 = 3% 嗎? (這裡的 100 元是指公司的股價面額) 反之, 將這 3 元發給股東, 股東再去買公司的股票, 或許還真的能以 3% 的複利成長.

第 30 章的重點是股票股息, 它和公司保留不發的盈餘很類似, 只是資本公積不會影響股價, 但股票股息會. 一家公司經常發股票股息好嗎? 作者說, 這比不定期發股票股息好. 因為不定期發的話, 很容易變成股東炒作的武器. 那經常發股票股息會有什麼問題呢?

以北美公司為例, 它的 EPS 大概 2.01~5.03 元. 由於從 1923~1932 年每年都發出 10% 的股票股利, 股價一度漲到 187 元  (1929 年). 當年度的股價在 67~187, 均價約 127 元, 10% 是 12.7 元. 問題是該公司當年每股也只賺了 5.03 元, 卻配出 12.7 元價值的股票股息, 這就很有趣了 (p.463).

P.464 說, 美國照明和電車公司在 1910~1919 年每年支付 10 美元現金股息和 10% 的股票股息, 在 1916 年的股價為 400 美元. 換言之, 公司的 EPS 只有 25 美元, 股東卻領走 50 美元. 這種情況持續了一陣子, 到了 1920~1921 的蕭條期, 股價一度跌到 80  美元. 當然該公司此後也就不發股票股息了.

以台灣的中信金而言, 上週五 (2016/5/27) 股價算 17 元, 去年 EPS 2.1 元, 準備發股票股息 0.8 元, 價值 17 x 0.8/10 = 1.36, 以及現金股息 0.81 元. 兩者相加 0.81+1.36 = 2.17 元, 這也是稍稍爆表 (2.17 > 2.1). 竟然發得比賺得還多, 那誰買單的咧? 就是日後幫它填權息的人.

最後, 不得不補上一句, 這老巴還真是孽徒啊, 老師都說要發股息, 他卻堅持不發並將它發揚光大 (波克夏海瑟威不發股息), 還真是有種. 書上也說了, 不發股息有利於公司派, 發股息有利於股東. 我們為了讓老巴幫我們賺錢, 只好聽他的.

———— 以上, 證券分析上冊 (完) ——————