原文 medium.com/swlh/taking…web
回到2009年,比特币容许 IP 到 IP 的信息交换。在2009年钱包还停留在原型阶段,并且因为开发者们没能理解比特币,它的不少最好的功能都被关闭了。算法
上周,我就比特币如何应用在智能卡上进行了讨论,带防火墙的id模型可以保护隐私。这周,我将展现如何使用web服务器安全地接受比特币支付,以及如何在进行法币或者其它token交易的同时保证隐私。数据库
 后端
这是比特币的点对点的部分,不是挖矿,这也是Core开发者们移除的东西之一。安全
 服务器
2009年,系统还没完成。一些可能的功能须要测试,2009年的客户端留下了不少悬念,只能算是一个原型。网络
要解决这些问题,首先咱们要清楚一点:节点和钱包是分开的。节点是矿工,而钱包是用户使用的,并且具备 P2P 交易功能。在本文中,我会解释:基于ECDSA的网络证书,SSL/TLS服务器证书,这些让你安全地上网冲浪的东西,可以成为一个商业支付系统的基础——这个系统能保证安全和隐私,这也是创建在单个地址只被支付一次的基础上。session
换句话说,不重钥。分布式
转帐有两种方式。收款人在线的话,输入他的 IP 就能连上,获取一个新的公钥,而后发送交易。收款人不在线的话,能够发送到他的比特币地址,那是他的公钥的哈希,事先给到你。在下次链接上,并获得交易所在的区块的时候,他就能够收到。缺点就是没有发送备注信息,并且因为地址重用,隐私性会受损。但对于没法同时在线,或者是接收者没有网络链接的状况,这仍是一个有用的替代方案。工具
证书是能够在 S/MIME 和 HTTPS 中使用的东西。
若是咱们使用和CA注册证书相关联的密钥,就不能在保留隐私的同时建立商人收款的公共记录。
举个例子,Alice 是一个消费者,Bob是一个网络商人,他的网站 HTTS://www.bob.com 是有ECDSA证书的。
Alice 有 Bob 的 主密钥。密钥不是用于收发比特币的,它能够用来建立一个身份密钥(能够用在智能卡上)。这样的密钥咱们称为P(Alice)。
Bob的网站的主密钥是 P(Bob)。(使用 S-MIME 能够很简单地将这套机制用在 email 上,留给你们思考)。
Alice 有一些 coin(UTXO索引),它们和 P(Alice) 毫无关系,也就是 P(Alice) 和她的基础密钥没有任何联系。咱们称其为 P(A-1-i),i 表明所用过的 coin。
Alice 可使用下面这个文档里描述的流程来建立一个通用密码(s1):
DETERMINING A COMMON SECRET FOR THE SECURE EXCHANGE OF INFORMATION AND HIERARCHICAL, DETERMINISTIC CRYPTOGRAPHIC KEYS
这套机制的其中一种用例:Alice在Bob的网上商店进行支付。双方能够计算出一个共用密码。为了更安全,Alice可使用她们共享的 web-session ID,发票号码,或者任何别的东西。可使用于一个基于 HMAC 的值来得到更多的安全和隐私,但为了便于理解,在这里我会使用简单的哈希。
Alice和Bob均可以计算出S的值,它和双方在网上使用的密钥有关。Alice有一个用于身份认证的密钥,这与她的支付没有公开的联系,但可以保证与Bob通讯的安全。
Alice经过一笔比特币交易发送一个加密的信息。这个交易彻底能够用于离线或在线的状况。若是Bob在线,他能够保留来自Alice的 nonce 做为网络检查的一部分。
若是Bob不在线,并且他的网站很简单,那么他可使用区块链来记录支付信息并检查它。
Alice发送给一笔交易到 P(Bob)。这个地址Bob不会去使用,因此这个支付是小额的;若是没有粉尘限制,只发一聪也是能够的。Alice只是发送了关于支付的信息给 P(Bob)地址,Bob不会动用里面的资金。能够这样说,只有当证书被标记为过时的时候,Bob才会花费这个地址(与P(Bob)公钥相关联)里的钱。这个流程相似于分布式的 “revocation list”,Bob掌控他本身的密钥。并且,若是Bob的密钥和证书被攻击了,粉尘交易被黑客给花费了,这就是一个自动的警报。Bob能够在这个帐户里放一些钱,好让黑客认为这是一个使用中的合法地址(例如2000美圆),若是这个帐户被黑了,那么它就会警告Bob的用户们。
Bob可使用一个 subkey 来让帐户更加隐私——请看专利中的这幅图:
Bob甚至能够有一个流程,让发票号码和某个 subkey 相关。
Alice向一个和 P(Bob) 相关联的地址发送信息——在脚本里,或者是OP_RETURN里附加一个加密后的值(使用例如AES的加密算法)。使用以前的方法,Bob能够计算出S。发送给Bob的一聪(加上手续费)交易里,包含了让Bob知道Alice从哪里发起支付所需的全部信息。Bob使用对称密码(S)来解密消息中的数据:
M是 Alice 要给到 Bob 的信息。
Bob如今能够从密钥中派生出一个密钥地址:
— P(Bob-Paid) = P(Bob) + HMAC(M ~S)xG
— 消息密码是 P(Shard Message) = HMAC(M ~S)xG
新密码 HMAC(M ~S) 只有Bob和Alice知道。
Alice能够证实她已经支付给了Bob。Bob能够找到Alice发送的钱,而且验证交易。
同时,没有任何第三方能够肯定Alice用于支付的地址——P(A-1-i)到Bob的P(Bob-Paid)。
Bob在区块链上有着 P(Bob) 的记录,以及它收到的全部支付地址的完整帐目。这些记录能够联系到发票,订单等等,让Bob可以构造一个无人可删除,增添,或操控的,完整的关于全部交易的帐目,这个方法知足了Bob在法律上所需的全部审计问题,并且他还能够有一个分离地址,用于向政府发送 VAT 和其它消费税。换句话说,Bob不须要经历昂贵的审计,就能够马上交税。
使用例如 Tokenized 或者 nChain专利中的任意一种协议,Alice 和 Bob 能够交易 token化的法币。这意味着Alice在英国可使用由某个银行发行的 GBP token 来支付 Bob。这种token可使用上面的流程被发送,使得 Alice 和 Bob 能够安全地以他们本地货币的形式发送数字货币,同时以比特币做为交易的“管道”。
即便Bob运行的是一个离线网站——没有后端数据库——密钥P(Bob)所收到的记录也能够做为一种不可变的数据存储。
Alice 加密发送给 Bob 的消息,能够是完整的订单。
这可使用现有的 EDI 消息类型来完成。并且比 EDI 更安全,可靠,私密。
更好的是,记录是不可变的。没有审计欺诈的空间。你能够撤销交易,可是须要把资金发回其来源。
Bob 能够持有一系列的分级地址,它们记录了订单的每一个环节——从帐单和支付到送货和收货。若是 Bob 拥有每位客户的 sub-master key(见上文 Fig.9 的专利),他也能够构造另一个 subkey,只有他本身,客户以及审计税收的机构会知道,这使得他能保持彻底的隐私,别的客户和供应商不会知道他到底作了多少交易。除此以外,他还能够经过构造支付流程,来分隔内部员工,让他们只知道和本身部门相关的信息。
只要CA相关的key没有被动过,帐目就能够被发送到旧的地址。一个 sub-CA key 能够和帐目年份相关联,并在每一个纳税周期被调用。你能够关闭这个证书,收集全部粉尘支付,同时,合上书本准备迎接新一年的帐目。
EDI 是一种现有的商业编码格式。
下图是 ASNI 和 EDIFACT 消息的格式:
在咱们的系统中,咱们使用密钥以“群消息”的形式为消息中的数据进行加密。再也不须要一个“交换信息”。在比特币里,咱们消除了对中间人的须要。
新的商业模式是全部的记录都不可变,不会丢失,并且容许 Alice 和 Bob 进行私密交易。
并且,使用比特币交易的 EDI 工具就像现有的 EDI 工具同样简单。
即便是嵌入在比特币交易内,加密的EDI XML格式仍然能够被简单地解析并显示或者是打印在发票或订单上:
在现有的EDI世界中,客户是根据字符或者文档的数量来付费的。并且有许多供应商设置了最低收费长度,从128到512个字符。结果就是若是你发送了12个有12字符的文档,你将被按照最高5120字节来收费,即便只发送了144个字符。
对于有着大量小额交易的商家,这会形成大量的支出。
这些在比特币里不是问题。
尽管 NACCS EDI 规定的最大消息体积是 500,000 bytes,实际上这个EDI和其它相关的消息一般是 150 bytes。
只须要几分之一美分就可以发送一笔不可变的,私密的,可靠的发票,附带帐目系统;相比花费2到3美圆在某些EDI方案上,或者是 0.20美圆发送一笔简单的 Visa 交易… 是时候从新思考你的商业活动了。
在这个模型里,没有比特币的地址会被屡次使用,支付和发票是被私密地连接在一块儿——若是 ID 不须要放在用户的证书内,甚至可使用假名。