littlebot
Published on 2025-04-13 / 0 Visits
0

【源码】基于Python和C语言的U2F身份验证设备固件项目

项目简介

本项目是用于U2F(Universal 2nd Factor)身份验证的开源项目,包含Python脚本和C语言代码库。U2F是基于USB的二次验证标准,允许用户在支持U2F的网站上使用USB设备(如U2F安全密钥)进行身份验证。项目主要提供嵌入式系统的U2F固件实现,使U2F设备与电脑通信并处理相关操作。其中,C语言代码负责处理U2F APDU命令、USB HID通信、椭圆曲线密码学操作,Python脚本用于生成和转换证书和密钥,可帮助开发者在嵌入式系统上实现U2F设备固件,提升系统安全性。

项目的主要特性和功能

  1. 支持多类型开发板,包括Tomu board、Blue pill、Black pill、各类基于ST32F103的中国St - Link V2复制板以及各种Maple Mini复制板等。
  2. 可处理U2F协议中的注册和认证操作,计算并管理密钥和密钥句柄。
  3. 使用Neug生成高质量随机数,基于内置的模数转换器作为熵源,经过CRC32和SHA256处理。
  4. 通过设备密钥存储、密钥句柄计算和闪存读保护等措施,增强设备安全性。
  5. 提供生成、转换和注入证书与密钥的功能,方便开发者进行调试和备份。

安装使用步骤

环境准备

sh sudo apt update sudo apt upgrade sudo apt autoremove sudo apt install build-essential git python3-pip openssl gcc-arm-none-eabi sudo apt install openocd libhidapi-hidraw0 python3-hid sudo ./VBoxLinuxAdditions.run pip3 install --user -u asn1crypto pip3 install --user asn1crypto pip3 install --user easyhid pip3 install --user pyu2f 允许访问新的令牌USB设备: sh sudo nano /etc/udev/rules.d/10-u2f-token.rules ACTION=="add|change", KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0e90", TAG+="uaccess" ACTION=="add|change", SUBSYSTEM=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0e90", TAG+="uaccess"

代码获取

sh cd ~ cd u2f-token/src/cert sudo chmod +x gen.sh ./gen.sh cd ..

编译

sh make TARGET=BLUE_PILL 支持的目标板有TOMU、MAPLE_MINI、BLUE_PILL、BLACK_PILL、ST_DONGLE、ST_DONGLE_NO_PUSH 。

烧录固件

STM32F103板

  • 擦除整个闪存: sh openocd -c 'set CPUTAPID 0x1ba01477' -f interface/stlink-v2.cfg -f target/stm32f3x.cfg -c "init" -c "halt" -c "wait_halt" -c "stm32f1x mass_erase 0" -c "sleep 200" -c "reset run" -c "shutdown"sh openocd -c 'set CPUTAPID 0x2ba01477' -f interface/stlink-v2.cfg -f target/stm32f3x.cfg -c "init" -c "halt" -c "wait_halt" -c "stm32f1x mass_erase 0" -c "sleep 200" -c "reset run" -c "shutdown"
  • 烧录闪存: sh openocd -c 'set CPUTAPID 0x1ba01477' -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'init' -c 'halt' -c 'flash write_image erase unlock build/u2f.bin 0x08000000' -c 'exit'sh openocd -c 'set CPUTAPID 0x2ba01477' -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'init' -c 'halt' -c 'flash write_image erase unlock build/u2f.bin 0x08000000' -c 'exit'

EFM32HG (Tomu)板

sh dfu-util -v -d 1209:70b1 -D build/u2f.bin

初始化密钥

sh cd cert python3 certtool init

清除生成文件

sh make certclean && make distclean && make clean

生成自定义密钥

sh cd cert openssl ecparam -name prime256v1 -genkey -noout -outform der -out key.der cd .. python3 ./inject_key_bin.py --key cert/key.der

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】