Tiny AES Library 好移植加密函式庫

這兩年的工作越來越常碰到有關 “Security” 的需求。簡單的說,就是資料要加密、通訊要加密。昨天有客戶來詢問可能的合作方案,也是有關於 Security 方面的東西。我一直覺得終端使用者其實不太在乎安全的問題,也許是用戶已經將這個視為理所當然,出包的時候才驚覺”居然沒加密”。

記得之前台北市的 pay.taipei,被傳出傳回的帳號密碼是沒加密的 (新聞出處),連美國的無人機視訊畫面也沒加密(新聞出處)。原來大家是真的不在乎…..直到被抓包前。

Tiny AES 加密 Library

其實 AES 加密的工具已經很普遍了,openssl, Linux kernel, GnuPG 等軟體都提供了各式各樣的的加密演算法,Linux kernel 也可以利用硬體幫助加解密速度。但在一些小場合,移植這些東西就是個大工程了,而且通常只需要其中一小部份的功能而已。

最近工作上就有需要做加密的工作,對速度也不要求。所以就上網找到了這個 Tiny AES Library  它提供了包含了 128, 192, 256 bits 的 AES ECB, CBC, 與 CTR mode 的加密功能。這樣已足以符加絕大部份的加密需求了,又很容易移植,所以就把它收錄下來,另外寫個簡單的例子做展示。

AES 模式 ECB, CBC, 與 CTR

取自 Wiki. ECB 加密後還是可看出輪廓

稍微詳細的介紹,可以看 Wiki 上的資料。簡單的說 ECB 模式不安全、CBC 不適合用在會掉資料的狀況(ex.網路),而且資料一定要是16的倍數。CTR 可以平行加解密、中間的資料掉了後面也解的出來、資料不需是16倍數。

ECB 不安全當然就不用考慮。CBC 掉一個bit,後面的資料就會全錯,也不能平行加解密。聽起來好像是缺點,但這樣可以拖慢破解的速度,保証資料是完整的,也是有其需求。CTR 就通用一點,雖然其IV的產生方式就是不停的+1,看似好像有點弱,但在理論分析上,強度跟 CBC 是差不多的。所以,沒事就用 CTR Mode 就好了….

AES CTR 加解密範例

附件有精簡過後的 Tiny AES Library CTR 範例,下面解說一下程式碼。

附件

精簡過後的 Tiny AES Library 與範例

Leave a Reply