一、为什么要上 WASM?
在写完 ESP8266 IoT 架构 之后,我一直在思考一个问题:既然代码开源,IoT 网关岂不是谁都能连?你自建的网关,别人是不是也一样能连?
想象这样一个场景:
用户 A 自己搭建了一套 IoT 网关,也部署了配套的微信小程序。
用户 B 也自己搭建了一套 IoT 网关和小程序。
两份代码一模一样,都公开在 GitHub 上。
这时问题来了:
用户 B 能不能用他的小程序,连到用户 A 的网关?
答案是:如果不做防护,完全可以。
因为逻辑是公开的,接口是公开的,协议也是公开的。
这不是“漏洞”,这是开源带来的结构性问题。
我想要的效果其实很简单:
✅ 用户 A 的小程序只能连用户 A 的网关
✅ 用户 B 的小程序只能连用户 B 的网关
❌ 任何一方都不能随意连别人的网关
不是靠“藏代码”,也不是靠“暗箱协议”,而是在开源的前提下,让“乱连”这件事变得极难自动化、极难低成本复制。
但问题是:微信小程序本身也是开源的,不能硬编码密钥,也不能简单靠接口鉴权。
为什么不能写在普通代码里?
无论是 JS 逻辑、请求方式还是加密算法,只要你写在明文里,有心人花点时间就能分析出来。
这不是“会不会被破解”的问题,而是:你能不能把攻击成本抬到一个不值得的地步。
为什么是 WASM?
我不想制造“伪安全”,也不想搞“玄学黑盒”。
我选择 WASM,是因为它刚好解决了三个问题:
-
它是“不可读的”
WASM 不是给人看的。它不是 JavaScript,不是 TypeScript,也不是配置文件。它是编译后的二进制,很难一眼看懂逻辑。
-
它是“不可轻易改的”
你很难在小程序里“热更新” WASM 的逻辑,也很难在不破坏整体结构的情况下随意篡改。
-
它是“跨项目的隔离”
每一个部署者,编译出来的 WASM 都只服务于自己的环境。用户 A 的 WASM 和用户 B 的 WASM,天然就是不同的。
二、它到底防住了什么?
WASM 并不能防止“终极逆向”,但它能做到一件事:让“随便连别人的网关”变成一件高成本的事。
❌ 不再是复制粘贴就能连
❌ 不再是改个配置就能通用
❌ 不再是一套代码跑所有人的网关
而是:
✅ 每个部署者有自己的小程序
✅ 每个小程序有自己的 WASM
✅ 每个 WASM 只认自己的网关
一句话总结
我做 WASM,不是为了证明“谁也破不了”,而是为了回答一个问题:在开源的世界里,我能不能让“乱连”变得不再划算?
答案是:可以。WASM 不是万能钥匙,但它是一把隐形的锁。
锁不住所有人,但足以拦住绝大多数。而这,对我来说,就够了。
三、它目前的进展
我很高兴地宣布:
这一机制现在已经完整实现,并在实际环境中生效。
当微信开发者工具日志打印出如下内容时,我高兴得蹦了起来:

这对硬核物联网开源来说,我又向前走出了踏实的一步。
它的设计思路非常简单,却非常有效:
- 在客户端,获取当前小程序的
APPID
- 使用 Ed25519 进行签名
- 生成一个短期有效的
Token
- 后端对签名进行严格校验
配合后端鉴权体系后,这套机制已经能够拦截绝大多数恶意连接尝试。
它并没有制造“绝对安全”的幻觉,而是把“随意连别人的网关”这件事,变成了一件成本高、收益低、难以规模化的行为。
在开源的前提下,这就是我想要的结果。
|