Medtabka/monero-web

GitHub: Medtabka/monero-web

一款完全在浏览器中运行的开源非托管 Monero 钱包,支持所有主流助记词格式,私钥永远不会离开客户端。

Stars: 4 | Forks: 1

# monero-web ![monero-web — 浏览器中的非托管 Monero 钱包](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/925cdc5fb7152153.png) **开源、非托管的 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,构建流水线就会失败。项目中绝对不存在 `