燒錄OpenSK至nrf52840 dongle(PCA10059)

鑑於愈來愈多的帳號密碼被盜事件, 各大網路公司如Google, Facebook, Amazon, MSN, ...都開始使用FIDO聯盟制訂的通用第二要素(Universal 2nd Factor, U2F)開放協定, 主要的瀏覽器如Chrome, Firefox開始支持, 讓我們的帳號不再那麼容易被盜走了。以前只要知道帳號和密碼, 就可以登入, 現在最常見的第二要素就是使用簡訊傳送一個暫時碼, 因為駭客沒有你的手機, 所以他收不到暫時碼, 也就無法以你的身份登入。但是簡訊系統其實也很容易被破解, 所以又有其他更安全的方法出現了。

現在手機都是連網的小電腦, 所以除了SMS的傳輸方式, 使用網際網路是更方便安全的, 到手機的APP商店, 搜尋Authenticator這個關鍵字, 在我的Apple手機裡, 可以看到Google Authenticator, Microsoft Authenticator, Twilio Authy, ...許許多多的這種驗證APP。

其實任選一個都可以用, 用法就和簡訊通知差不多, 只是改成用驗證APP來取得暫時碼(一次性密碼), 我自己使用Microsoft Authenticator, 裡面設定了MSN, Amazon, Facebook三種不同帳號。所以如果在新的電腦或新的瀏覽器登入這些網站時, 除了原本的帳號密碼外, 還要再輸入驗證APP上看到的暫時碼。

另一種方法是USB安全鑰匙, 目前市面上可以看到商家Yubico 所推出的FIDO U2F 安全鑰匙(Security Key), 以及Plug-up International推出的Security Key.


這種安全鑰匙的使用方式就更方便了, 不用再輸入什麼一次性密碼或暫時碼, 只要登入時在USB插槽這支特定的安全鑰匙, 依照指示按一下, 就可以了。別入要登入你的帳號, 必須有這支, 否則是登不進去的。所以就算駭客拿到你的帳號密碼也是沒用!
還有許多其他商家有類似產品, 例如: FEITIAN BioPass, 這支有指紋辨識, 就算掉了或被偷走了, 沒有你的指紋, 別人也沒有辦法用你的身份登入。
只是這些產品都不便宜哦, 至少美金20, 就是約台幤600!
但現在我們其實可以自己做一個哦! 因為Google發佈了一個open source的專案: OpenSK
https://github.com/google/OpenSK/blob/stable/docs/install.md

這個專案提供幾個開發板現成的firmware, 可以提供符合FIDO U2F標準的功能。簡單說, 只要去買它支持的開發板, 再依OpenSK專案網站上的方法取得firmware, 然後燒到開發板就可以有一支安全鑰匙了。

那麼有那些開發板呢? OpenSK專案網站上列出了4個:

Nordic nRF52840-DK development kit. 

Nordic nRF52840 Dongle to have a more practical form factor.

Makerdiary nRF52840-MDK USB dongle.

Feitian OpenSK dongle.

我今天想介紹其中的第2個開發板: nRF52849 Dongle (PCA10059)給大家, 因為第1張開發板是很大一張的板子, 內建除錯器, 開發firmware很好用, 但實在太大了, 沒有人會想要這麼的一個安全鑰匙。而nRF52849 Dongle就跟一般的隨身碟一樣大, 很適合用來做安全鑰匙使用。至於其他的選擇, 價錢較貴或者我找不到去那買!

我在三個主要的賣廠: Mouser, Digi-Key, RS Component查到的價錢如下: 
NT$ 323, NT$331, NT$365
這應該是不含稅的, 但是各家的運費規定不太一樣, 有的要NT1,400以上才免運費, 有的更低就可以免運, 所以自己盤算一下那個合算! 

有了這張開發板後, 到OpenSK專案的網站, 按其說明安裝就可以了。只是其燒錄firmware的方法是使用JLINK除錯器來做的! 對於nRF52840 Dongle來說, 因為沒有內建除錯器, 所以你必須去買或借一張JLINK除錯器來用, 而且還要想辦法把除錯器接上開發板, 這其實有些困難! 以其網站的說明來說, 它使用了一條特別的線: TC2050 Tag-Connect programming cable.
如圖, 把線的一端接在這10個接點, 另一端接在除錯器, 光這條線印象中就要NT1,500了, 而且除錯器更貴, 更討壓的是除錯器本身要接出來的接頭也很多種。光要弄清楚這些細節, 就花了很多時間。實際上, 我自己也試過其他方法燒錄, 可以參看我之前的貼文:
https://ops9.blogspot.com/2020/04/micropython-112nrf52840-dongle.html

總有一些問題會出現! 但昨天我發現了一個很好的方法可以避免這些問題: 使用這張板子的Open bootloader來燒錄, 不要用JLINK。

其實nRF52840 dongle本來就可以不用JLINK就能進行燒錄, 也就是使用Open bootloader DFU, 當插在USB槽時, 按下板子上的RESET按鍵, 就會讓板子進入DFU狀態。這個時候, 使用nRF Connect裡的programmer工具就可以做燒錄firmware的動作。

OpenSK專案其實現在也支援這種做法了, 只要將nRF52840 dongle插入USB插槽,再依OpenSK網站說明:

1. 取得OpenSK專案程式檔案

$ git clone https://github.com/google/OpenSK.git

2. 進入OpenSK目錄

$ cd OpenSK

3. 安裝一下

$ ./setup.sh

4. 燒錄firmware至開發板

$ ./deploy.py --board=nrf52840_dongle_dfu --opensk --programmer=nordicdfu

我在Mac OSX操作,如圖,可以成功的把OpenSK燒錄至nRF52840 dongle, 再下
$ ioreg -p IOUSB
可以看到出現的最後一行是:
OpenSK@14100000 ...
那應該就是成功了!!!!!
但我想因為之前我有安裝Nordic nrfConnect裡的programmer工具,才能使用這個選項吧!

接著到測試網站試試: https://webauthn.io/

任意輸入一個帳號,在插入nRF52840 dongle的狀態下,按Register, 出現一個提示視窗,依照指示按一下dongle上的按紐。
dongle上原本閃爍的LED燈,就會熄掉,出現下面的成功指示。

這樣大致就沒問題了,之後你可以試試按Login來登入看看。

以下是facebook的設定畫面,請在設定裡找帳號和安全性登入,再找雙重驗證,會看到如下圖,其中有一個安全性金鑰的選項,在這裡你可以加入剛剛做好的金鑰,依照畫面指示操作,可能要輸入自訂的PIN碼。或按一下dongle上的按紐。

之後,當你在新電腦或新的瀏覽器要登入臉書時,就可以利用這支安全金鑰來登入了。這樣帳號就更不容易被盜用了。至於你工作或家裡常用的電腦,是不會每次都要插入安全金鑰的。所以也不會變得很煩人。



留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel