基于IC卡的比特币支付方式设计与实现
2016-01-19王卫红
王卫红,李 鹏
(浙江工业大学 计算机科学与技术学院,浙江 杭州 310023)
基于IC卡的比特币支付方式设计与实现
王卫红,李鹏
(浙江工业大学 计算机科学与技术学院,浙江 杭州 310023)
摘要:为了让比特币的使用更加便捷并提高比特币支付的安全性,借助存储安全和使用便捷的IC卡作为支付工具,设计了基于IC卡的比特币支付方式.通过使用主密钥间接加密使用口令和账户私钥机制,解决了使用口令简单导致私钥加密安全度降低的问题;通过分级确认性地址机制,解除了一卡一账户限制,增强了IC卡账户交易的匿名性.为了改进交易签名安全性过度依赖系统随机数的弱点,设计了基于密钥和消息唯一确定的交易签名随机数方案,实现了基于IC卡的比特币私钥安全存储和比特币交易的安全支付.通过实际的刷卡支付实验,表明上述方案效果良好.
关键词:比特比支付;IC卡;交易选择
Design and implement of the Bitcoin payment system based on IC card
WANG Weihong, LI Peng
(College of Computer Science and Technology, Zhejiang University of Technology, Hangzhou 310023, China)
Abstract:IC card with its high security, portability and other virtues has become a most widely used payment tool in the financial field. In order to cope with increasingly wide application of the Bitcoin, this research designs Bitcoin payment system based on the IC card in order to improves its safety and convenience. The master key encryption is used to indirectly encrypt password and account private key, avoiding using simple password to cause the reduced safety of private key encryption. Using hierarchical deterministic address will enhance the anonymity of the IC card account. The uniquely determined transaction signature random number scheme based on the key and message will achieve Bitcoin private key secure storage based on IC card and secure payment of Bitcoin transactions.
Key words:Bitcoin payment;IC card;transaction selection
2008年,一位自称日裔美籍的工程师“中本聪”在密码学网站的邮件组列表中发表了一篇论文[1],描述了比特币的电子现金系统并发行了比特币[2].比特币是一种基于密码学的无中性化、高匿名性[3]以及高安全[4]性的电子货币,通过工作量证明机制[5-6]来实现比特币的产出与分配.利用签名机制和时间戳服务器来验证每一笔交易,确保货币的不可伪造和重复支付.比特币在电子商务中优势明显,比特币支付及时到账无需用户等待.跨国支付无需各国金融机构参与,用户不用等待交易批准或担心账户被限制.比特币不受任何机构监管,用户可以完全按照自己的方式来开展业务和进行交易.2014年,比特币陆续进入各大主流市场,TigerDirect,Lord & Taylor,Overstock,PayPal等都表示会接受比特币.2014年3月,荷兰跨国零售商巨Spar在荷兰最大的城市之一的阿纳姆建立了第一个支持比特币支付的超市.据统计全球已经有超过1 400家实体商店加入比特币支付行列.截止2014年12月,发行的比特币已超过1 350万枚,世值超过50亿美元,日交易额超过500万美元[7].
IC卡凭借体积小、容量大、安全性高、可靠性强以及寿命长等优点,已经成为金融领域内最广泛使用的支付工具[8-9].因此使用IC卡作为比特币支付的工具不仅可以使支付变得更加简单便捷,而且使用离线IC卡存储私钥会比软件钱包更加安全.加之目前各类IC卡终端也日渐成熟,多样的IC卡支付手段也将为比特币日后的线下交易提供良好的技术基础.2014年9月,澳大利亚比特币公司CoinJar推出一款比特币借记卡“Swipe”卡,该卡允许用户在ATM和终端上使用电子货币,但是用户预存入卡内的电子货币将被转化为澳元.
1比特币支付方式分析
比特币支付全功能钱包功能如图1所示,目前比特币钱包或比特币支付方式都实现了全功能钱包的全部或者部分功能.
图1 全功能钱包示意图Fig.1 Full-service wallet
根据用户是否掌握账户私钥,可以分为链上钱包和链下钱包.链下钱包是一款纯粹的中心化钱包,用户并不拥有自己比特币账户的私钥.但是链下钱包效率高,可以实时到账,可以通过中心节点避免比特币被双花.链下钱包由服务提供商统一管理账户私钥,用户无需为私钥安全而操心.但是钱包公司可能遭受来自黑客的攻击.
目前使用的绝大多数钱包都是链上钱包,因为链上钱包用户可以拥有比特币账户私钥,让用户对账户有足够的自主权和透明度.根据使用的情况不同,又可以分为本地钱包,在线钱包和冷钱包.
比较主流的是本地钱包和在线钱包.本地钱包直接安装在电脑或者手机上.BTC-Core钱包是比特币官方提供的一款全功能比特币钱包,包含比特币支付所需要的所有功能,钱包初始化时会在地址池中生成100个备用地址,以便用于日后交易或者找零.用户在完全使用这些地址之后必须对该钱包进行备份,否者就会发生丢币的危险.本地钱包使用简单,但是由于钱包设备一直处于联网状态,电脑或者手机容易被人植入木马,黑客可以通过网络盗取你的钱包文件,从而导致账户被盗.
由于在线钱包并不需要客户端,所以在线钱包比本地钱包具有更强的易用性.在线钱包在浏览器端用用户口令加密比特币账户私钥后并将其保存至服务器,使用时从服务器端下载密钥文件,并用浏览器解密.虽然服务器同样容易受到黑客的攻击,但是服务器上保存着的是加密后的用户私钥.在安全性上会有所提高,但是加密后的私钥同样有被黑客破解的风险.
冷钱包非常安全,但是成本高,易用性差.像传统的Armory,需要一台不联网的电脑专门安装Armory连线端.使用时需要通过介质在离线电脑和在线电脑之间做数据交换.但是介质同样有携带木马或者病毒的风险.Trezor硬件钱包是一款类似于网银U顿的工具,可以实现离线存储比特币,并可以在连网的电脑上安全使用该设备.
2IC卡文档结构设计
2.1IC卡文档结构
比特币卡主要用于记录比特币账户信息以及IC卡和终端相互验证信息.其存储的数据主要分为3类:用户数据、认证数据和账户数据,如图2所示.
图2 IC卡文件结构设计Fig.2 The document structure of the card
用户数据包括,控制该模块读取的控制数据,用户的姓名,电话等基本的用户数据.
认证数据包括:控制数据、用户口令hash值、认证密钥和账户主公钥.用户口令hash值用于验证卡片在使用时用户输入的使用口令.在IC卡遗失情况下,避免非法用户暴力破解用户口令的情况,卡内只保存口令hash值并不保存加密口令.认证密钥用于IC卡和终端之间的安全认证.用户在使用时需要通过账户主公钥,查询其子公钥上各个账户的余额.
账户数据包括:读取控制、主密钥密文和主私钥密文.通过主私钥密文、主密钥密文和用户使用口令等参数解密得到比特币账户的主私钥.再由主私钥根据比特币协议中使用的椭圆曲线算法[10-11]得到比特币账户地址.拥有比特币账户的私钥就能对该账户下的比特币进行使用.
2.2主密钥密文、主私钥密文加解密过程
加密:首先随机生成一个32字节随机主密钥,然后使用用户口令和主密钥生成参数对主密钥进行AES-256-CBC加密,得到主密钥密文.使用主密钥和账户主私钥进行AES-256-CBC加密得到主私钥密文,如图3所示.
图3 主密钥密文、主私钥密文加解密过程Fig.3 The encryption of the master private key
解密:从账户数据内读取主密钥密文,从刷卡终端读入用户使用口令,从终端安全模块中读入主密钥生成参数.用使用口令和主密钥生成参数将主密钥密文还原成主密钥.然后从IC卡中读取主私钥密文,使用主密文将主私钥密文还原成私钥.
修改口令:输入新口令和旧口令,用旧口令结合主密钥密文和主密钥密文生成参数解密出主密钥,使用新口令重新加密主密钥得到新主密钥密文,然后删除主密钥,保存新主密钥密文而终止.整个过程中主密钥和私钥密文都没变,变化的是主密钥密文.
由于用户的使用口令基本为6位数字密码,如果用使用口令直接加密32字节账户私钥,将使得系统的安全度大大降低.因此引入32字节主密钥对使用口令和账户私钥进行间接关联.账户私钥的加密参数由6位数字参数提升至32字节随机数,使得私钥变得不可暴力破解.
3交易模型
3.14层确定性地址机制
比特币交易全网公开,所有的有效交易都会被打包进比特币块链.因此任何一个用户都能根据公开的比特币地址查询关于该账户的余额和交易历史.虽然比特币的匿名性保证了用户身份的匿名,但是公开的交易却无法保证账户的匿名.为了不让其他用户窥探账户隐私,比特币规范建议用户尽量不要使用重复的地址进行交易或者找零.同一地址被使用的次数越多,该地址的相关性就越容易暴露.由于IC卡容量有限,只能保存一定数量私钥,且不容易频繁备份.为了解决一卡一号的限制问题,采用分级确定性地址机制,IC卡只需要保存扩展主私钥,通过相对应的链码实现各层子密钥对的分散.其规范被定义为比特币改进协议Bip32[12].32字节扩展码每次分散都能得到232个子密钥对,也就是232个独立子账户,足够用户的日常使用.
由于分层确定性地址机制生成的密码树过于庞大,无法在实际情况中使用,定义如下的4层分散路径作为比特币IC卡的地址机制:
/purpose/account/change/address
其中为了不和Bip44[13]协议冲突,purpose设为常数45.表明该路径通过IC卡使用分级确定性地址支付.
account代表账户,用户可以根据使用目的的不同设置不同的账户.account下标从0开始.随着使用依次增加,只有上一个下标的地址被完全使用后才能使用新账户的地址.
change=0时为外链,表明该地址对外可见,作为比特币收款地址.change=1为内链,表明该地址对外不可见,只用于账户内部找零.
address为分层确定性地址机制中的下标值.
将分层确定性地址规范为4层路径地址,不仅对得每一层地址的作用进行规范,同时还有利于设计地址探测算法.IC卡在使用时通过刷卡系统获取卡内账户主公钥,主公钥根据地址探测规则查找子公钥账户,并得知账户余额.设计地址探测规则如下:
1) 导入账户主公钥,令account=0.
2) 根据扩展码分散求得change层密钥对.
3) 扫描该层所有外链,如果外链上有历史交易则继续扫描下一个外链.如果连续20个地址上都没有历史交易.则停止地址探测过程.
4) 如果该账户的所有外链上都有历史交易,这将account值加1,回到2).
由于系统在使用交易地址的时候要求优先使用低下标账户地址,只有低下标账户的地址被完全使用之后才会被允许使用高下标账户的地址,因此保证了地址探测规则的有效性.
3.2交易选择机制
在支付比特币时需要在众多收入交易中选择一笔或者多笔作为该交易的输入值,不同选择算法各有利弊.主要使用的算法有以下几种.
3.2.1后进先出算法
指即使在交易未被确认的情况下也优先使用最近收到的交易.该算法会增加该笔交易接受者的风险,因为该笔交易使用的比特币未被网络确认,所以这些比特币可能会被双花.而且如果前一笔交易因在网络中被篡改而导致确认失败时,将直接导致后一笔交易无效.
3.2.2先进先出算法
指在交易选择时优先选择最早被确定的交易.越早确认的比特币在网络中是越稳定的,因为如果要改变这些比特币的交易就需要修改越多被确认的比特币区块.另外一个好处就是稳定性高的交易在使用时可以申请无交易费交易,但是目前系统中交易费已经很低,所以这个优势也不是十分明显.
3.2.3融合避免算法
由于比特币交易账单全网公开,所以用户都能通过网络查看和跟踪某个地址的交易情况.如果在交易中使用多个输入交易,则这些交易的发出者都能探知彼此的信息.在一笔交易中使用多笔输入交易的方式称为交易融合.融合避免算法就是在交易时尽可能少得选择输入交易的个数,因此系统会选择比将要花费的比特币多且接近该金额的最少数量的交易作为这笔交易的输入交易.为了最大程度的保护用户的敏感信息,系统使用融合避免算法来进行交易的选择.
3.3交易签名随机数问题
比特币在使用时需要使用账户私钥对交易进行签名,以便让网络上的各节点验证该笔交易的合法性.签名数据包括:上一笔交易的交易标识、输出交易下标、全公钥脚本、接收者公钥脚本以及交易金额等.使用输入交易1和用户私钥签名交易数据生成交易2的过程如图4所示.
图4 交易签名Fig.4 Transaction signment
比特币协议中规定使用椭圆曲线数字签名算法(ECDSA)对数据进行签名.使用参数(p,a,b,G,N)定义一个ECDSA算法,使用的椭圆曲线为secp256k1[14].
在参数(p,a,b,G,N)中:p为一个大素数;G为椭圆曲线的基点;N为点G的阶,使得NG=0∞;a,b为椭圆方程系数.
定义k为椭圆曲线加密算法私钥;e为数据签名哈希值;m为签名算法所需随机数;R,S分别为签名算法输出值,其计算式为
R=mG
(1)
(2)
签名时如果随机数m足够随机,则该算法是安全的.如果m值不够随机而导致同一账户使用相同m值签名,将导致用户私钥的泄露.假设2次数据哈希值分别为e1,e2,并使用相同的随机值m签署,代入式(1,2)得到
R1=mG
(3)
(4)
R2=mG
(5)
(6)
2014年,比特币交易网站blockchain.info和安卓系统都曾出现随机数漏洞,blockchain.info由于使用重复随机值签署同一账户交易的漏洞使得大量用户私钥泄露.因此交易的安全性很大程度上依赖系统随机数生成算法的安全性,但是在有限的条件下生成无限多且足够随机的m值并不那么容易.为了减小随机数对交易签名的影响,设计了基于账户私钥和交易消息的确定性随机数签名算法.因为对于比特币交易而言m可以是不随机的,只要满足保密且唯一这两个条件就能安全签名.因此确定m的计算式为
m=SHA(k+e)
(7)
式中:e为交易消息哈希值;k为账户私钥;SHA为哈希256算法.因为账户私钥是保密的,且交易消息哈希值e是确定唯一的.所以对于账户私钥而言m是保密且唯一的.而且哈希函数做为单向函数,无法进行逆向推导,因此并不会降低账户私钥的安全性.
4实现
系统采用Mifare S50卡作为实验卡,S50非接触式卡符合MIFAREI的国际标准,卡与读写器之间的通讯采用国际通用的DES和RES保密交叉算法,具有极高的保密性能.卡片中的密码是受保护、不可读的,只有知道密码的用户才能修改它.卡中的EEPROM存储区分为16个扇区,每个扇区都有自己的访问密码,用户可根据扇区的不同应用设定不同的密码.
图5为设计的IC卡、采用的读写器和POS机,读卡器需要完成对防碰撞[15]、密钥验证和块读写等操作.图6为IC卡读写系统部分功能截图,通过读写系统初始化IC卡,将账户数据、用户数据和验证数据分别写入IC卡数据块并为不同的扇区设置不同的读写权限.
图5 IC与读写设备Fig.5 Read /write devices
图6 IC卡读写系统Fig.6 Read/write system
交易时通过读卡设备读取IC卡内的账户主公钥,按照账户探测算法查询所有有效账户,账户余额以及相应的收入交易.当要对比特币进行使用时,在交易栏中输入比特币交易地址和交易金额.确定支付后在终端输入IC卡使用口令,再验证使用口令无误后解密账户主私钥,并签署交易发转至比特币P2P网络.图7展示使用低费率向另一地址支付0.2 mBTC的过程.之后就能在网上查询到该笔交易的具体信息.图8为Blockchain交易网站上查询到的关于刚刚支付的交易的详细信息,交易显示从地址115F2VbXncJHeZoud7aGAZz8eUzAw61pDd向地址1HmLXESLP51gYKrtr35CS8UpBH4NxzemMj支付0.2 mBTC,收取0.01 mBTC作为手续费,并找零0.79 mBTC.
图7 比特币支付图Fig.7 Sends satoshis
图8 BlockChain上显示的交易信息Fig.8 Details of the transaction on blockchain.info
分析:基于IC卡的比特币支付方式是一种介于本地钱包和冷钱包之间的一款支付工具,IC卡类似于冷钱包用于离线保存账户私钥,确保私钥不受木马或恶意软件的攻击.刷卡终端是一个本地交易签名工具,负责比特币账户私钥的解密并对交易进行签名.IC卡和终端需要通过PSAM安全控制模块实现安全访问,确保IC卡数据不被泄露.基于IC卡的比特币支付采用无中心化支付,并不需要中心节点验证IC卡以及卡内账户的有效性,IC卡的有效性由PSAM卡验证,卡内账户有效性由比特币网络验证.所有IC卡账户内的余额只要使用IC卡内部私钥签名就能使用.产生的交易满足比特币交易标准格式,交易将直接发送至比特币P2P网络,由网络内的各个节点验证交易的有效性.目前只有Cryptex card和Swipe card能实现比特币交易.但是Cryptex card和Swipe card主要是使用现有的ATM机等设备实现比特币和现实货币之间的转换且都是纯中性化的解决方案.使用智能卡支付比特币的研究方兴未艾,2015年初Xapo公司将推出一款比特币借记卡.笔者是采用无中心化验证IC卡方案,对比特币智能卡支付的一种新探索.
5结论
采用IC卡作为比特币的支付手段,在加强了支付安全性的同时也便捷了比特币的使用.系统采用了类似软件钱包的支付逻辑,通过IC卡还原账户私钥并签署交易,通过比特币网络直接实现比特币的支付.IC卡内直接存储账户私钥,且并不需要中性化机构验证,不同于纯中心化的Cryptex card和Swipe card等现存的比特币借记卡.相对于Cryptex card和Swipe card,笔者设计的方式让用户有对账户更大的自由度和透明度.但是该卡不具备比特币和现实货币之间的兑换功能.通过现有的POS机,刷卡器等多种终端设备进行支付实现,证明基于IC卡的比特币支付便捷且安全.
参考文献:
[1]NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system[J]. Consulted,2008(1):28-38.
[2]MIERS I, GARMAN C, GREEN M, et al. Zerocoin: anonymous distributed e-cash from bitcoin[C]//Security and Privacy. Piscataway: IEEE,2013:397-411.
[3]REID F, HARRIGAN M. An analysis of anonymity in the bitcoin system[C]// Security and Privacy in Social Networks. Berlin: Springer,2013.
[4]RON D, SHAMIR A. Quantitative analysis of the full bitcoin transaction graph[C]// Financial Cryptography and Data Security. Berlin: Springer,2013.
[5]BACK A. Hashcash-a denial of service counter-measure[EB/OL].[2002-08-01].http://www.hashcash.org/ papers/hashcash.pdf.
[6]DWORK C, NAOR M. Pricing via processing or combatting junk mail[C]//Advances in Cryptology — CRYPTO’ 92. Berlin: Springer,1993.
[7]BARBER S, BOYEN X, SHI E,et al. Bitter to better-how to make bitcoin a better currency[C]// Financial Cryptography and Data Security. Berlin: Springer,2012.
[8]王履涛.我国银行卡业务发展研究[D].北京:首都经济贸易大学,2010.
[9]陈杰,应时彦,朱华.基于MFRC522的RFID读卡器设计[J].浙江工业大学学报,2014,42(6):616-620
[10]JR, LENSTRA H W. Factoring integers with elliptic curves[J]. Annals of Mathematics,1986,171(3):649-673.
[11]MONTGOMERY P L. Speeding the pollard and elliptic curve methods of factorization[J].Mathematics of Computation,1987,48(177):243-264.
[12]PIETER W S. Hierarchical deterministic wallets[EB/OL].[2012-02-11]. https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki.
[13]MAREK P, PAVOL R. Multi-account hierarchy for deterministic wallets[EB/OL].[2014-04-24]. https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki.
[14]Certicomcorp.Recommended elliptic curve domain parameters[EB/OL].[2000-09-20].http://perso.univ-rennes1.fr/sylvain.duquesne/master/standards/sec2_final.pdf.
[15]周晓,曹美玲,李杰,等.一种标签防冲突算法设计[J].浙江工业大学学报,2011,39(6):679-682.
(责任编辑:陈石平)
文章编号:1006-4303(2015)06-0618-06
中图分类号:TP399
文献标志码:A
作者简介:王卫红(1969—),男,浙江临海人,教授,研究方向为空间信息服务和网络信息安全,E-mail:wwh@zjut.edu.cn.
基金项目:国家自然科学专项基金资助项目(61340058);浙江省自然科学基金资助项目(LZ14F020001)
收稿日期:2015-03-12