You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Golang/JavaScript获取Ledger Nano设备序列号或读写唯一ID?

Ledger Nano S/X 唯一标识获取方案

JavaScript 实现

依赖安装

npm install @ledgerhq/hw-transport-webusb @ledgerhq/hw-app-hw

代码示例

import TransportWebUSB from "@ledgerhq/hw-transport-webusb";
import HwApp from "@ledgerhq/hw-app-hw";

async function fetchLedgerSerial() {
  const transport = await TransportWebUSB.create();
  const hwApp = new HwApp(transport);
  const deviceInfo = await hwApp.getDeviceInfo();
  const serial = deviceInfo.serialNumber;
  console.log("设备序列号:", serial);
  await transport.close();
  return serial;
}

// 调用执行
fetchLedgerSerial().catch(err => console.error("获取失败:", err));

通过Ledger官方WebUSB传输库调用getDeviceInfo接口,可直接获取设备出厂序列号,该序列号为设备唯一标识。

Golang 实现

依赖安装

go get github.com/LedgerHQ/ledger-go/hid

代码示例

package main

import (
	"fmt"
	"github.com/LedgerHQ/ledger-go/hid"
)

func main() {
	devices, err := hid.ListDevices()
	if err != nil {
		fmt.Println("设备列表获取失败:", err)
		return
	}
	if len(devices) == 0 {
		fmt.Println("未检测到Ledger设备")
		return
	}

	device, err := hid.Open(devices[0].Path)
	if err != nil {
		fmt.Println("设备连接失败:", err)
		return
	}
	defer device.Close()

	// 发送获取设备信息的APDU指令
	apdu := []byte{0xE0, 0x01, 0x00, 0x00, 0x00}
	response, err := device.Exchange(apdu)
	if err != nil {
		fmt.Println("指令发送失败:", err)
		return
	}

	if len(response) >= 16 {
		serial := string(response[:16])
		fmt.Println("设备序列号:", serial)
	} else {
		fmt.Println("响应数据异常,无法解析序列号")
	}
}

通过HID库连接设备后,发送标准APDU指令0xE001000000,响应数据前16字节即为设备ASCII格式的唯一序列号。

自定义唯一ID写入说明

Ledger Nano S/X不支持用户直接写入全局自定义唯一ID,原因如下:

  • 设备固件采用安全封闭设计,无公开API允许修改全局设备标识,防止恶意篡改破坏设备完整性。
  • 仅允许在自定义开发的Ledger应用存储区内写入数据(需通过Ledger开发者框架开发并部署应用),且该数据仅能在对应应用内读取。

替代方案

若需绑定用户与设备,建议:

  • 将设备出厂序列号与用户ID在后端系统建立映射关系。
  • 开发专属Ledger应用,在应用存储区写入用户关联标识,通过应用接口读取验证。

内容的提问来源于stack exchange,提问作者Muhammed Jishin Jamal TCP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:23:00