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

【源码】基于STM32F103和GnuPG的USB加密令牌实现

项目简介

本项目Gnuk是为GNU Privacy Guard设计的USB加密令牌实现。它支持OpenPGP卡协议版本3,运行于STM32F103处理器,以USB令牌形式保障私钥存储安全,解决开发者将私钥存于普通二级存储设备的安全顾虑。

项目的主要特性和功能

  1. 多算法支持:支持EdDSA、ECDSA(NIST P256和secp256k1)、ECDH(X25519、NIST P256和secp256k1)以及RSA - 4096,ECC功能处于实验阶段,RSA - 4096签名/解密耗时较长。
  2. 卡片个性化:可更改登录名、URL、姓名、性别、语言等信息。
  3. 密码处理:支持PW1、RC、PW3等密码的操作。
  4. 密钥管理:支持三种类型密钥(数字签名、解密、认证)的导入、设备端RSA - 2048密钥生成以及密钥覆盖导入和移除。
  5. 安全操作:支持数字签名、解密、内部认证等操作。
  6. 其他特性:支持OpenPGP卡序列号设置、卡片持有者证书读写、通过“EXTERNAL AUTHENTICATE”进行升级等。

安装使用步骤

编译

  1. 准备GNU工具链和适用于arm - none - eabi目标的newlib,在Debian系统中安装gcc - arm - none - eabigdb - arm - none - eabi等相关包。
  2. 进入src目录:cd gnuk - VERSION/src
  3. 运行configure脚本并指定USB厂商ID和产品ID,如FSIJ的ID:./configure --vidpid = 234b:0000
  4. 执行make命令,在src/build目录下生成gnuk.elf文件。

安装

  • Olimex STM32 - H103板:在src目录下执行openocd -f interface/ftdi/olimex - jtag - tiny.cfg -f board/olimex_stm32_h103.cfg -c "program build/gnuk.elf verify reset exit"
  • Flying Stone Tiny 01:使用OpenOCD 0.9.0和ST - Link/V2,执行openocd -f interface/stlink - v2.cfg -f target/stm32f1x.cfg -c "program build/gnuk.elf verify reset exit"
  • STBee:按下“USER”开关重置板子,在tool目录下执行./dfuse.py ../src/build/gnuk.hex,然后重置板子。

运行

  • 调试模式:若编译时使用--enable - debug选项,可通过cu -l /dev/ttyACM0打开虚拟COM端口查看调试输出。
  • 测试:执行gpg --card - status命令测试Gnuk是否运行。
  • 个性化、密钥导入和密码更改:使用gpg --card - edit命令对令牌进行个性化设置,可导入2048位RSA密钥。

调试

可使用arm - none - eabi - gdb gnuk.elf进行调试,在GDB中通过target remote localhost:3333target extended - remote localhost:3333连接OpenOCD。

固件更新

具体更新方法见doc/note/firmware - update

下载地址

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