博鱼中国官网基于区块链的智能锁设计与实现基于区块链技术实现的智能锁应用,可实现常规厂商难以企及的 高安全性,同时亦不损失 灵活性。该论断基于以下几点:
• 门锁。硬件,内置程序,该程序需要联网读取区块链数据,以验证钥匙的权限,从而决定是否开锁;
• 钥匙。软件,区块链钱包应用程序负责其创建、存储、使用 和 转让 等业务操作。 开锁 操作需要持有者向锁证明其拥有锁的控制权,锁通过访问区块链上数据来执行验证。钱包内的钥匙可以在不同用户的钱包内进行转让流通,即交付给下一个使用者。这可以广泛应用于共享经济,如租房、租车等。
锁在区块链上查找包含有自身ID 标识的那个UTXO,通过验证UTXO 的控制权以确认是否有锁的控制权(该UTXO 的控制权即锁的控制权)。具体过程是:取出控制者的公钥(或地址),然后向试图开锁者发送一个要求,要求其对自己生成的一个随机数用私钥签名,并发回给自己,如果签名正确,那么说明对方持有正确的钥匙,即验证通过,可以开锁。钥匙可以使用比特币本身拥有的多重签名机制,如2/3签名,表示3把钥匙有任意2把同时通过验证(需要配合 不同钥匙的有效期),即可以开锁。这特别适合用于 共享经济。
在租房应用场景中,我们可以为锁配备3把不同的钥匙,应用2/3签名,并分别分配给3方各自持有。具体如下:
• 房东持有1把钥匙,开锁操作永久有效(在全部3方持有者没有任何变更的情况下),即:相当于这把钥匙一直插在钥匙孔里。由于是2/3签名,再有任一另一把钥匙插进来,即可开锁。
这样以来,租户和中介公司任意一方都可以使用自己的钥匙开锁,但房东不行,他必须再找个人帮他开锁。
• 中介公司持有的钥匙在使用时通常比较谨慎,因为其需要维护良好的信用和口碑。因此中介公司不会随意开锁去危害租房者的利益,即使有个别极端情况,概率上是比房东更受控的;
因此上述设置是合理的。但房东也应该有开门的需求,那么可以找中介公司和租户任一方协助开门,这同时保证了两方的知情权;而房东也需要在必要的时候能够维权博鱼体育,那么我们也正好兼容此需求!在上述设置方案中,房东可以随时拔下钥匙(即:通知锁让本钥匙失效),此时租户和中介公司单方面都无法开锁,他们必须再找一方协商解决问题。不过房东通常没有理由这样做,除非利益受到损害。仅能拔下钥匙的维权方式设计,也避免了维权过猛而造成的伤害。
在房东拔下钥匙后,如果仍希望避免租户和中介公司串通单方面开锁,可以在锁程序中给房东的钥匙设置投票权超过1的权重,这样租户和中介的权重之和低于2,仍无法开锁,必须经过房东的同意并重新插入钥匙。即:房东拔下钥匙可以迫使租户和中介公司积极应对房东的维权要求。
这个过程非常简单,与比特币的支付操作无异。只不过如果是多签名的话,也需要多方签署这笔交易。支付操作完成后,这个携带锁ID 的UTXO 将归比特币接收地址的控制者所有,控制者的数量也可以变更,各方的投票权重可以由植入UTXO 内的协议控制。UTXO 控制权的变更意味着锁的控制权变更,即等同于钥匙的变更交接:钥匙进入了新的使用者的钱包。使用者的变更可以仅仅是租户,也可以是任意各方使用者,这取决于(或决定着)UTXO 的收款地址如何构造。
需要将锁的ID 植入到 UTXO,这需要创建协议数据结构并完成一个支付操作,此时该协议化的UTXO 便存在于区块链上了。
应该在scriptPubKey 字段位置插入协议信息。协议内容格式 可初步定义为如下Uri 格式:
将该Uri + OP_DROP 插入到scriptPubKey字段值的OP_DUP 前面,即可完成植入。其中:lock是协议的识别标识;id表示锁的ID;sig表示多签名规则;pubs表示多签验证需要使用的公钥信息,这里紧填开头最短的部分,用于辨识与weights权重设置对应的公钥;addrs表示多签验证需要使用的公钥hash 地址信息(与pubs 二选一,其中的“*”是分隔符,将多个地址或者公钥分开);weights表示每个公钥的投票权重;povs表示组合有效期,0为永久有效,1为单次有效。
每个锁硬件需要能够在重置时生成 ID(确切地说,是符合高阶最小熵分布的安全随机数),并能够在特定操作下(如按住某按键)允许查询该 ID,以备创建协议UTXO 和钥匙时使用。
需要为锁安装程序,该程序需要随时联网查询其ID 对应的 UTXO,进而验证该UTXO 的控制权以确认是否拥有钥匙。但需要注意一点:该UTXO必须与初始化时的UTXO处于同一条支付流转链上,不可以是任意UTXO,以防恶意破坏。在操作上,应遵循如下逻辑:锁程序应当存储初始化时的UTXO 的txid(区块链账本上记录的一条交易的 id),若发现该UTXO 已经被支付,则应当查找支付目的地的UTXO 并更新锁内存储的txid,而忽略任何包含本ID 的UTXO(它们可能是恶意混淆,当然自己也可以故意混淆以防止追踪)。有txid 的跟踪,可以 不要求锁ID必须唯一。
用户端程序,即:区块链钱包(后文简称钱包)。用于钥匙的 创建、存储、使用 和 转让 等业务操作。其中存储和转让操作与比特币的支付操作无异。关于创建和使用开锁操作见后文。
3. 钱包读取门锁 ID。读取方式可通过 二维码 或 无须配对的 低功耗蓝牙BLE技术来实现;
前提假设:锁完全受控于主人,锁的 验证程序 是开源且可信的。这意味着:锁不会恶意开锁或不开锁,不会泄露用户数据和隐私信息,也不会有严重的 bug 导致执行非预期的逻辑。不过即便如此,我们仍然 不应向锁提供私钥,这是底线。下面分两种情况来描述开锁操作的具体步骤。
- 单签名钥匙。如果协议化UTXO 的收款地址是一个公钥或公钥hash,那么它的钥匙就是单签名钥匙(也可以说这把锁是单钥匙孔的锁),这需要在初始化时与生成的协议保持一致。开锁步骤如下:
② 锁联网连接区块链节点查询指定txid(见3.2节)的 UTXO,检查其内置的协议是否包含自身 ID,并检查该UTXO 是否已经被花费。若未被花费,进行下一步;否则一直向后追溯到最新没有被花费的 UTXO,并用其txid覆盖锁内之前存储的txid,然后进行下一步;
③ 锁生成一个随机数并通过BLE 蓝牙广播一条报文,报文中同时携带锁ID 的前几位以示区别。该报文可简单表示如下:
④ 钱包收到该报文,用控制该UTXO 的私钥签名该随机数,并回复报文(其中sig 表示对随机数的签名,pub 表示公钥):
⑤ 锁收到报文,先判断 pub 是否与UTXO 中的公钥或公钥hash匹配,若匹配,则用公钥解密sig 数据,看结果是否与自己发出去的随机数random 相等,相等表示验证通过(即:插入了正确的钥匙);
- 多签名钥匙。协议化UTXO 的收款地址是多个公钥或公钥hash。由于多签名钥匙的开锁组合有效期分为单次有效,和永久有效。这里定义单次有效 为 从该钥匙请求开锁到实际物理开锁的整个时间段内(开锁即清除状态)。永久有效 是指 从当前UTXO 产生到被花费的整个时间段内(更新txid 即清除状态)。开锁步骤如下:
② 锁联网连接区块链节点查询指定txid(见3.2节)的 UTXO,检查其内置的协议是否包含自身 ID,并检查该UTXO 是否已经被花费。若未被花费,进行下一步;否则一直向后追溯到最新没有被花费的 UTXO,并用其txid覆盖锁内之前存储的txid,然后进行下一步;
③ 锁生成一个随机数并通过BLE 蓝牙广播一条报文,报文中同时携带锁ID 的前几位以示区别。该报文可简单表示如下:
④ 钱包收到该报文,用对该UTXO 有一部分控制权 的私钥签名该随机数,并回复报文(其中sig 表示对随机数的签名,pub 表示公钥,script 表示多签名收款脚本):
⑤ 锁收到报文,先判断hash(script) 是否与UTXO 中的地址匹配,若匹配,则用公钥解密sig 数据,看结果是否与自己发出去的随机数random 相等,相等表示验证通过(即:插入了正确的钥匙);
硬件厂商生产可扩展的智能锁硬件,软件开发者发布开源智能锁软件。用户可根据自己的喜好选择两者进行组装(相当于把电脑裸机和操作系统分开,用户根据需求组装)。这可以打破垄断,促进软硬件质量的提升,促进行业的发展。
为什么使用UTXO 而不使用智能合约?智能合约的每次调用都需要支付 gas,虽然gas 费用极低,但由于每次开锁都需要去更新数据,会导致智能合约函数的调用频率很高,日积月累也是一笔不小的费用。本方案采用 UTXO,是因为区块链数据的查询是免费的。
完美主义者,物理爱好者,吉他爱好者,编程爱好者。精通多种编程语言,prefer 用 Scala 技术栈构建一切,兴趣为物联网、比特币/区块链领域。现为 dEdge(币兜) Wallet 创始人。dEdge Wallet 利用安全芯片和 TEE 微操作系统技术,是实现了助记词透明加密的加密货币钱包。
Copyright © 2012-2025 博鱼(中国)官方网站-BOYU SPORTS 版权所有HTML地图 XML地图 赣ICP备17014991号-1
收到你的留言,我们将第一时间与你取得联系