密語與密碼產生器¶
會用到的兩種情況:
- 剛申請密碼管理器,要設一組主密碼:那組密碼是所有其他密碼的門,隨手打幾個字應付過去很常見,但沒人知道那樣夠不夠強。用密語模式抽六個字,畫面上會直接顯示熵有多少。
- 懷疑手邊的電腦被人動過:切到「實體骰子」模式,隨機性來自你自己的手,不需要相信這台機器。
密語與隨機密碼怎麼抽出來¶
「密語」模式從 asian-diceware 的 7776 字詞表裡獨立抽幾個字串起來。那份詞表是社群參考 EFF Diceware 做的版本,混進了 oolong、boba、tofu 這類已經進英文字典的亞洲外來語,對在台灣與亞洲各地生活的人更好認、更好記。
「隨機密碼」模式從你勾選的字元集裡逐字抽。適合用密碼管理器保管、不需要用手打的場合。
兩個模式的亂數都來自 crypto.getRandomValues,那是瀏覽器提供的密碼學等級亂數,比網頁常用的 Math.random 更難被推算出下一個值。取樣時如果直接拿亂數對 7776 取餘數,詞表最後幾個字會比其他字容易被抽到,所以不能整除的尾巴會丟掉重抽,讓每個字被抽中的機率完全相同。細節與測試見原始碼。
熵那個數字¶
熵是「要猜多少次才猜得到」的度量,單位是位元。每多一個位元,猜的次數就要多一倍。
七千七百多個字裡抽六次,熵大約是 77.5 位元。那代表即使攻擊者知道你用的是這份詞表、知道你抽了六個字,仍然要在 2^77.5 種組合裡找。EFF 建議一般用途至少六個字,主密碼或加密磁碟這類長期不換的地方可以用七到八個。
字數少於五個的密語不要拿來保護重要的東西。工具會把它標成偏弱。
為什麼密碼產生器可以放在網頁上¶
密碼產生器最大的疑慮是「這個網站會不會偷偷把產生的密碼送出去」。
答案是把網路關掉,工具照樣能用。斷網時瀏覽器送不出任何東西,而詞表與程式已經存在你的裝置上(見離線閱讀),密語照樣抽得出來。
連瀏覽器的亂數都不想信的話,切到「實體骰子」模式。
用實體骰子,不用信任這台電腦¶
Diceware 原本就是擲骰子的方法。詞表的順序本身就是編碼:第一個字是 11111,最後一個是 66666,中間按六進位排。
擲五顆骰子,照擲出的順序按下畫面上的數字,湊滿五顆就查出一個字。重複到你要的字數。
骰子模式的隨機性來自你的手,不來自電腦。crypto.getRandomValues 可不可信、程式有沒有被換掉,都不再是問題,剩下的只有查表。
而查表的正確性你也可以自己驗。按「下載完整對照表」會給你一份純文字檔,7776 行,每行是編碼加對應的字。印出來或存起來之後,網頁就不是必要的。
幾件實際操作上的事:
- 骰子要夠公正。便宜的塑膠骰子有偏差,賭場等級的精密骰子才真的均勻。日常用途一般骰子已經夠好,主密碼這種長期不換的用途才值得換成均勻度更高的骰子。
- 不要用手機上的擲骰 App。那繞了一圈回到「要相信軟體」。
- 五顆骰子一起擲比一顆擲五次快,但要記得分辨順序,可以用不同顏色的骰子。
- 熵跟程式抽取完全相同:詞表有 7776 個字,每擲一輪相當於從裡面抽一次,換算下來約 12.9 位元。
詞表的來源與選字標準見 asian-diceware。
複製之後記得清剪貼簿¶
按「複製」會把結果放進系統剪貼簿,那裡的內容其他程式讀得到,有些輸入法與同步服務還會把它上傳。貼進密碼管理器之後,複製一段無關的文字蓋掉它。
手機上更要注意,剪貼簿常常跨 App 共用。
接下來¶
- 產生好的密語要有地方放,見密碼管理器入門
- 詞表怎麼做出來的、選字有什麼原則,見 Asian Diceware
離線可用¶
跟這一區其他工具一樣,程式存進裝置之後沒有網路也能用。詞表也會一起存下來,斷網時照樣抽得出密語。
要把這一頁帶著走,見離線閱讀。