[筆記] Vesper 開發日記 by Brent Simmons-加密金鑰(Keys)

Vesper 是 Q Branch 開發的 iOS 筆記軟體,目前僅支援 iPhone。主要開發人員為 Brent Simmons,前陣子他在個人部落格 Inessential 開始了一系列 Vesper 的開發筆記(Vesper Sync Diary),無私地分享許多開發 Vesper Sync(同步功能)的技術細節,值得一讀。

Brent Simmons 的這篇開發日記(#14)談到了 Vesper 筆記的加密方式。一開始的設計是把每一個記事(note)的文字加密後存到資料庫,而加密金鑰(Key)不放在原始碼裡:

Here’s the initial design: the text of notes is encrypted in the database. The key is not stored in the source code. (The source code could get out and you wouldn’t be able to decrypt notes.)

原先 Brent 覺得這樣的設計已經夠好了,與幾位安全專家討論後,專家建議以原設計基礎,但調整成:每一個記事(note)的文字加密後存到資料庫,而加密金鑰(Key)不放在原始碼裡,但加密金鑰(Key)必須不定時更新

The text of notes is encrypted in the database. They key is not stored in the source code. The key should change from time to time.

做法是:

  1. 總是用最新的加密金鑰(Key)來加密記事。
  2. 在加密的文字附上額外的記號(token),用來確定記事是否被成功解密。
  3. 解密時,一律先以最新的金鑰來解密,如果記號(token)不對,則用舊一點的金鑰,以此類推,直到成功解密為止(取得正確的記號)。
  4. 定時更換金鑰,例:一年兩次。
  5. 準備一個腳本(script),能將所有筆記以最新的金鑰重新加密。此舉是為了因應可能的安全疑慮。

我喜歡,也很佩服這樣的高手願意花時間把自己的開發經驗撰寫成文字,並無私地分享出來。此舉讓其他開發人員能夠站在巨人的肩膀上,減少撞牆的機會。