Medtabka/monero-web
GitHub: Medtabka/monero-web
一款完全在浏览器中运行的开源非托管 Monero 钱包,支持所有主流助记词格式,私钥永远不会离开客户端。
Stars: 4 | Forks: 1
# monero-web

**开源、非托管的 Monero 网页钱包。你的私钥永远不会离开你的浏览器。**
在线访问 [monero-web.com](https://monero-web.com)
## 这是什么?
一个完全在客户端运行的基于浏览器的 Monero 钱包。无需下载,无需扩展插件,无需应用商店。只需输入你的助记词或私钥,即可从任何设备访问你的钱包。
## 功能特性
- **创建新钱包** — 使用浏览器加密随机数生成器生成 25 个单词的助记词
- **通过助记词恢复** — 支持 25 词标准和 13 词 MyMonero 旧版助记词
- **通过支付密钥导入** — 粘贴你的 64 字符十六进制私有支付密钥
- **支持 13 种语言** — 英语、简体中文、荷兰语、世界语、法语、德语、意大利语、日语、逻辑语、葡萄牙语、俄语、西班牙语、古英语
- **实时网络数据** — 通过远程节点连接获取区块链高度、手续费估算、交易池大小
- **二维码收款** — 为你的 Monero 地址生成二维码
- **非托管** — 私钥仅在浏览器中派生和使用,绝不进行传输
- **零依赖** — 纯 JavaScript 加密引擎,无 npm,无构建工具
## 系统架构
```
Browser (client-side)
├── keccak256.js — Original Keccak-256 (0x01 padding, NOT SHA-3)
├── monero-ed25519.js — Ed25519 scalar mult, sc_reduce32, CryptoNote base58
├── monero-wordlist.js — Mnemonic handler with CRC32 checksum verification
├── monero-keys.js — Key derivation: seed → spend key → view key → address
├── monero-rpc.js — JSON-RPC client via serverless proxy
└── monero-wordlists — All 13 language wordlists (1626 words each)
Cloudflare Pages (serverless)
├── functions/api/proxy.js — Smart RPC proxy (prefers own node when synced, falls back to public nodes)
└── functions/_middleware.js — Cache-control headers
Dedicated Server (Hetzner, self-hosted)
├── monerod — Pruned Monero node (synced, RPC on localhost:18081)
└── monero-lws — Light-wallet server for balance scanning (REST on localhost:8443)
```
### 密钥派生
```
Seed Phrase (25 words)
↓ decode via wordlist
Private Spend Key (32 bytes)
↓ sc_reduce32
Private Spend Key (valid scalar)
↓ Keccak-256 → sc_reduce32
Private View Key
↓ ed25519 base point multiplication
Public Spend Key + Public View Key
↓ network byte + pub keys + Keccak checksum → base58
Monero Address (95 characters, starts with 4)
```
### MyMonero 13 词助记词
MyMonero 使用了与标准 Monero 不同的派生路径:
- 12 个数据词 + 1 个校验和 → 16 字节
- 16 字节 → Keccak-256 → sc_reduce32 → 私有支付密钥
- 16 字节 → Keccak-256 → Keccak-256 → sc_reduce32 → 私有查看密钥
在 MyMonero 于 2026 年 1 月关闭后,本钱包是少数仍支持 MyMonero 13 词旧版助记词的钱包之一。
## 安全性
- **纯客户端** — 所有加密操作均在你的浏览器中运行
- **无密钥存储** — 密钥仅存在于 sessionStorage 中,关闭标签页即被清除
- **无跟踪** — 无分析、无 Cookie、无遥测数据
- **开源** — 你可以自行审计代码
- **代理对密钥不可见** — Cloudflare Pages 代理将 RPC 请求转发至 Monero 节点,但永远不会看到你的私钥。轻钱包服务器 看得到你的查看密钥以进行扫描,但永远不会看到你的支付密钥
### 代理能看到什么
无服务器代理将 JSON-RPC 调用转发给 Monero 远程节点。它可以看到:
- 有人在发起 RPC 请求(区块链高度、手续费估算)
- 交易广播(已签名的交易十六进制数据,而非支付密钥)
它**无法**看到你的私钥、助记词或钱包余额。
## 自托管
克隆此仓库并部署至任何静态托管平台:
```
git clone https://github.com/Medtabka/monero-web.git
cd monero-web
# 部署到 Cloudflare Pages、Vercel 或任何静态主机
# 对于 RPC proxy,你需要 Cloudflare Functions 或自己的 backend
# 要进行余额扫描,请在 VPS 上运行 monerod + monero-lws
```
或在本地运行:
```
python3 -m http.server 8000
# 打开 http://localhost:8000/verify.html
# 注意:RPC proxy 在本地无法工作,仅支持 key derivation
```
## 测试
加密引擎包含针对新代码路径的 Node 可运行测试:
```
node tests/test-new-paths.js
```
此测试涵盖了 BIP-39、polyseed(规范格式 + 4 字符前缀)、子地址生成、网络选择(mainnet / stagenet / testnet),以及 WalletVault 加密的 sessionStorage 往返过程。
## 威胁模型
本钱包旨在确保你的支付密钥不会泄露到你无法控制的任何系统中。
以下是其能防范和不能防范的内容——在将大额资金托付给它之前,请仔细阅读。
**CI 强制执行的约束条件:** 浏览器执行的每一个字节(HTML、JS、CSS、字体、图像、二维码编码库)均由 `monero-web.com` 提供。如果任何 HTML 文件引用了外部 CDN URL,构建流水线就会失败。项目中绝对不存在 `