如何用不到10元人民币 DIY 一个 YubiKey

2015-11-12 10:18


DigiSpark 开发板

需要用到的额外材料就是图中的 DigiSpark ,在淘宝上大约在10元人民币左右。

DigiSpark 其实是一个小型的类似 Arduino 的开发版,我们可以写代码刷到板子中的芯片里,芯片可以按照代码执行一些简单的任务。最近看到很多人都在海淘 YubiKey 这种小巧的密码保存器,因为正好 DigiSpark 本身有模拟 HID 的功能,何不自己做一个。

板子插到 USB 之后的效果

注意我的手指没有挨着板子,这个时候进入 LastPass 或者 PasswordSafe 等软件的主密码输入界面,然后手轻轻碰一下板子的背部,效果如下图。

输入密码

板子上的第二个 LED 灯亮起,这个时候会模拟键盘把预先烧到芯片中的密码输入到电脑里。

代码其实很简单,如下。

#include "DigiKeyboard.h"

void setup() {
  pinMode(0, INPUT);
  pinMode(1, OUTPUT);
}

void loop() {
  if (digitalRead(0) == HIGH) {
    digitalWrite(1, HIGH);
    DigiKeyboard.sendKeyStroke(0);
    DigiKeyboard.println("YouPasswordHere");
  }
  DigiKeyboard.delay(5000);
  digitalWrite(1, LOW);
}

用 Arduino 密码下载的 IDE 就可以把代码直接烧到板子上,非常方便。比较适合的场景包括开机密码,前面说的密码管理器的主密码,TrueCrypt 等软件的加密密码等,但不适合在线密码。

几个问题:

  1. 密码是明文的,可以 dump 出来,注意不要直接使用它存储在线密码。
  2. 芯片和板子会损坏,所以一定要有备份。
  3. 可以存储多个密码,但需要修改代码,并且安装几个 Button,用 Button 或 Button 组合区分。
  4. 理论上可以实现 FIDO U2F ,但我没有具体实验,如果你有兴趣欢迎联系我。

Happy Hacking