区块链密码 —— 通付盾数据安全存储、加密分享和公平交易实践
现代密码学技术发展已近百年,先进、安全、可控的密码技术是网络安全的基础,在中国大力发展数字经济的今天,更是被赋予重要的历史使命。区块链技术虽然近年来才兴起,但其作为“信任机器”,与密码一样是数字化时代的信息安全基础设施,区块链与密码技术的有机结合将大大降低建立信任的成本,大大提高信息安全防护能力。
通付盾长期致力于区块链与密码技术的研究和开发工作,近年来更是积极的将区块链密码技术应用于实际,研发的区块链密码可用于数据安全存储、数据加密分享和数据公平交易等场景,保护数据安全。
一、数据安全存储
问题描述
云端数据存储是一种网上在线存储模式,即把数据存放在通常由第三方托管的多台虚拟服务器,而非专属的服务器上。需要对数据进行存储托管的人,通过向托管公司提供的数据中心购买或租赁存储空间来满足数据存储的需求。
然而,现有云存储技术在使用过程中会存在一定的隐患,例如,用户通过平台上传至云端存储的文件中不乏用户的机密文件或用户私隐,这些数据的存储多为明文存储或简单加密存储,即使是加密存储,其安全性也仅依赖于云平台本身,一旦平台数据被入侵、篡改,将严重泄露用户的隐私;另外,云平台上的数据无法真正的证明该数据的所有权是用户还有平台,即平台本身对用户的数据存在任意篡改的风险,使得用户的隐私数据,例如身份信息、证件照、照片、身份证件、通讯记录等储存内容的安全性受到极大威胁。
区块链密码解决方案
步骤1:DID生成
若用户没有DID,则需要为用户生成DID以及DID文档并保存到区块链中。
步骤2:密钥生成
若用户没有用于数据加密的公私钥对,则需要生成公私钥对,将公钥保存到DID文档中,将私钥加密保存到本地。
步骤3:私钥备份与恢复
利用密钥共享技术,将私钥分成N片备份到区块链节点中,恢复时只需要其中的M片即可。
步骤4:数据加密上传
生成对称密钥,使用对称密钥对数据进行加密,得到数据密文,使用公钥对对称密钥进行加密,得到密钥密文,将数据密文以及密钥密文上传到云服务器。
步骤5:数据下载解密
从云服务器中下载选择的数据对应的数据密文以及密钥密文,使用私钥解密密钥密文得到对称密钥,使用对称密钥解密数据密文得到选择的数据。
技术拆解
DID生成
(1) 生成区块链账户地址。
(2) 根据账户地址生成DID以及DID文档。
(3) 将DID和DID文档保存在区块链中。
密钥生成
(1) 根据公钥加密算法,生成公私钥对,用于对对称密钥进行加解密。
(2) 将公钥保存到DID文档中,可以通过DID访问其公钥。
(3) 将私钥通过口令加密保存到本地。
密钥备份与恢复
(1) 密钥备份
A. 根据密钥分享技术,将私钥分成N个密钥片。
B. 将N个密钥片分别备份到区块链节点中。
(2) 密钥恢复
A. 从N个备份密钥片的区块链节点中选择其中的M个节点。
B. 从这M个节点中获取密钥片。
C. 根据密钥分享技术,利用这M个密钥片恢复出私钥。
D. 利用口令对私钥进行加密然后将密文保存到本地。
数据加密
(1) 生成安全的随机数作为数据加密的对称密钥。
(2) 根据对称加密,使用对称密钥对数据进行加密,得到数据密文。
(3) 根据公钥加密,根据口令读取本地私钥,使用私钥对对称密钥进行加密,得到密钥密文。
(4) 将数据密文以及密钥密文上传到云服务器进行保存。
数据解密
(1) 从云服务器中下载选择的数据密文以及密钥密文。
(2) 根据口令读取本地私钥,根据公钥加密算法,使用私钥解密密钥密文,得到对称密钥。
(3) 根据对称加密算法,使用对称加密解密数据密文,得到数据。
二、数据加密分享
问题描述
目前,数据的分享通常只是信道加密,发送方和接收方多是以明文的形式通过服务器实现端到端的分享。在分享过程中,数据在服务器端通常是可见的,因此存在严重的数据泄露的风险。同时,数据的分享记录由第三方服务器保存,甚至不保存分享记录,使得分享记录的可信性完全依赖于第三方服务器或者无从追溯。当数据的分享记录存储在第三方服务器上时,如果第三方服务器受到攻击、被篡改或伪造,服务器的不可信直接导致存储的分享记录变得不可信。数据分享缺少时间的限制条件等。
区块链密码解决方案
步骤1:数据授权
Alice生成对Bob的重加密密钥并保存到区块连接点,生成授权记录并上链,将云服务器中的待分享数据的链接地址发送给Bob。
步骤2:数据访问
Bob根据Alice分享的数据链接地址向云服务器请求数据,云服务接收到请求后验证授权身份后根据重加密密钥对密钥密文进行重加密,得到密钥重加密密文,将数据密文以及密钥重加密密文返回给Bob。
步骤3:数据下载解密
Bob将数据密文以及密钥重加密密文下载完成后,根据私钥解密密钥重加密密文得到对称密钥,根据对称密钥解密数据密文得到对称密钥。
技术拆解
发送方数据访问授权
Alice根据自己和Bob的DID从区块链中读取DID文档中的公钥(Alice的公钥pkA和Bob的公钥pkB)。
Alice根据口令读取本地私钥skA,然后调用代理重加密中重加密密钥生成算法,根据Alice的私钥skA,Alice的公钥pkA以及Bob的公钥pkB生成N个重加密密钥片nrkfrags。
Alice将N个重加密密钥片nrkfrags保存到N个区块链节点中,每一个节点只保存一个重加密密钥片rkfrag。
Alice生成数据对Bob的授权记录record,包括Alice的DID,数据Hash值,授权时间,授权截止时间,Bob的DID,Alice的签名等,最后保存到区块链中。
(5) Alice将云服务器中分享的数据链接地址发送给Bob。
接收方请求访问数据
Bob根据Alice分享的数据链接地址,向云服务端请求分享的数据。
云服务器读取区块链中的Alice的授权记录record,并验证Bob的身份以及授权时间等信息。
验证通过后,云服务器从保存了重加密密钥片的区块链节点中去读M个重加密密钥片mrkfrags。
云服务端根据选择的M个重加密密钥片mrkfrags调用代理重加密中的重加密算法,对分享的数据对应的密钥密文keyCipher进行重加密,得到密钥重加密密文keyReencryptCipher。
云服务器将分享的数据密文dataCipher以及密钥重加密密文keyReencryptCipher返回给Bob。
接收数据并解密
(1) Bob得到云服务器返回的数据密文以及密钥重加密密文后,根据口令读取本地私钥。
(2) Bob根据公钥加密算法,使用私钥解密密钥重加密密文,得到对称密钥。
(3) Bob根据对称加密算法,使用对称密钥解密数据。
三、数据公平交易
问题描述
问题1:如何证明数据是我的?
问题2:如何保障数据没有中心化泄露风险?
问题3:如何保障数据不被中间人劫持或窃听(数据只正确传输给了我希望发送的人,并且加密数据只可以由对方解密)?
问题4:如何保障我传输的数据不被对方随意复制使用?
问题5:对于数据交换和数据交易而言,如何保障我分享了数据(或付了钱)就一定能获得我想要的数据(或钱)?
问题6:对于数据交换和数据交易而言,如何保障我分享(销售)的数据不会被对方二次分享(销售)?
区块链密码解决方案
步骤1:数据确权
Alice作为数据持有方创建DID,并将数据的信息写入DID文档,然后将DID上链,实现数据的确权。
步骤2:数据检索
Bob作为用户创建DID,然后查看区块链中的数据信息,初步确定Alice的数据是自己需要的类型,并从区块链上获得Alice的DID以及公钥。
步骤3:建立安全连接
Bob向Alice发送数据“试吃”请求,并建立安全连接。
步骤4:数据“试吃”与数据传输
Alice向Bob加密发送“试吃”数据。Bob通过“试吃”数据从数据格式和质量等方面进一步确定数据是自己需要的。
步骤5:公平交易
Bob向Alice发送交易请求,Alice生成安全参数并发送给Bob,Bob验证通过后发布智能合约,智能合约验证参数后执行交易。
步骤6:数据使用
Bob得到数据m后,使用数据m,并在区块链中保存对数据m的评价。
技术拆解
数据确权
(1) Alice生成DID_Alice,其DID文档中包含DID_Alice的公钥PK_Alice。
(2) Alice生成公共参数G,G是椭圆曲线循环群生成元。
(3) Alice对于数据m,计算其属性,包括:
数据m的哈希值Hash(m),用于数据m的完整性验证。
数据m的Pedersen Commitment M=m*G,用于验证Bob接收到的数据m的真实性。
Alice对数据Hash(m)的签名sig=Sign(SK_Alice,Hash(m)),用于证明Alice对数据m的所有权。
数据m的特征提取值feature=FeatureExtraction(m)及其Hash值Hash(feature),保证区块链中保存的数据m的唯一性。
数据m的特征描述信息msg=Describe(m),用于用户初步了解数据的信息,初步确定数据m是否是自己需要的。
(4) Alice更新DID_Alice,将公共参数G以及m的属性写入其DID文档中。
(5) Alice将DID_Alice上传到区块链中。
数据检索
(1) Bob生成DID_Bob,其DID文档中包含DID_Bob的公钥PK_Bob。
(2) Bob将DID_Bob上传到区块链中。
(3) Bob通过DID_Bob浏览区块链上所有的DID文档中的数据描述信息msg。
(4) Bob根据msg初步确定数据m是自己需要的。
建立安全连接
Bob生成随机数nonce作为Alice与Bob之间的会话密钥。
Bob从blockchain中查找didAlice并获得其DID文档,其中包含其公钥PKA。
Bob使用didAlice的公钥pkA加密didBob和nonce,得到密文cipher.。
Bob使用didBob的私钥skBob对Hash(didBob,nonce)进行签名,得到签名sig。
Bob前Alice发送cipher和sig,作为连接请求的参数。
Alice解密cipher得到didBob和nonce。
Alice根据didBob在区块链上查询其DID文档获得其公钥pkB。
Alice用pkB以及didBob和nonce验证签名sig的有效性。若有效,则可以进行安全连接;若无效,则放弃连接或者重新发起连接。
数据“试吃”与传输
(1) Alice用会话密钥nonce加密“试吃”数据m_try,得到E(m_try)。
(2) Alice向Bob发送E(m_try)以及Hash(m_try)。
(3) Bob解密E(m_try)得到m_try,并验证Hash(m_try),证明数据完整性。
(4) Bob试用m_try,进一步确定数据m是自己需要的。
公平交易
Bob向Alice发送交易请求,建立安全连接。
Alice生成随机数k和r作为对称密钥. 其中k用于加密m, r用于加密k。
Alice计算k, r和m的承诺K=k\*G, R=r\*G, M=m*G,并保存到区块链。
Alice计算m和r的密文E(m)=m+k, z=E(k)=k+r。
Alice根据didBob从区块链上获得didBob的公钥pkB,然后加密z得到密文E(z)。
Alice将K,R,E(m),E(z)发送给Bob。
Bob用私钥skB解密E(z),得到z=k+r。
Bob根据didAlice从区块链中获得didAlice的公共参数G以及数据m的承诺M。
(9) Bob验证E(m)\*G=M+K, z\*G=K+R.验证通过后向Alice发送成功的消息。E(m)\*G=M+K验证数据m与承诺M对应数据是否一致以及k是否为密文E(m)的密钥; z\*G=K+R验证密钥k与承诺K对应的密钥是否一致以及r是否为密文z的密钥。
(10) Bob发布智能合约以及参数R。
(11) Alice收到Bob发送的验证成功的消息后将r发布到区块链中。
(12) 智能合约验证R=r\*G,验证成功后执行交易,将r发送给Bob,Token发送给Alice。
(13) Bob收到r后,计算k=z-r, m=E(m)-k。
数据使用
(1) Bob使用交易的数据m。
(2) Bob反馈对数据m的评价并将其保存在区块链中。
目前,区块链密码技术已成功应用于通付盾DApp的多个实际场景中并长期稳定运行。通付盾DApp为用户提供安全、隐私、去中心化联结工具。
#加密云盘 #加密分享
在通付盾DApp的“加密云盘”和“加密分享”功能中,利用区块链密码,DApp实现了:数据云端加密存储,密钥只由用户自己保管,只有自己可以授权解密,保障用户的数据主权;实现数据点对点加密分享,数据分享通道安全且秘密。
#密信消息
在通付盾DApp的“密信”功能中,区块链密码适配了语音电话、视频电话、文字、表情、声音消息、图片消息、文件消息等各种数据类型,保障“密信”消息的安全性和秘密性。
#数字身份
通付盾DApp中的“数字身份”是区块链数字身份,在区块链密码的去中心化环境下,用户的公私钥体系取代传统互联网的账户体系。用户具有完全的自主性,私钥本地生成,从中导出公钥再变换出地址,非常隐秘,自己给自己开账户,不需要中介。公私钥成为了用户可以自证的身份。
数字化技术正带领我们来到了一个更广阔的数字经济时代,数字空间的安全是构建有序、稳定数字经济环境的重要基础,而安全最重要的核心是信任与隐私,信任成本的降低和数据隐私的安全将是加速社会进步的重大推动力,这就需要密码技术和区块链技术的发展与结合。
成立至今,通付盾人始终秉承“诚信、质量、效率、价值”的企业文化,凝心聚力、务实笃行,坚持服务好用户,保障数字空间安全。2021年通付盾人将以此为新起点,继续为客户提供更优质的产品及更高效的服务,承担起更多的社会责任,为我国数字经济建设贡献自己的力量,让数字生活更安全更美好!