掌桥专利:专业的专利平台
掌桥专利
首页

用于分配数字签名数据份额的计算机实现的系统和方法

文献发布时间:2023-06-19 11:17:41


用于分配数字签名数据份额的计算机实现的系统和方法

技术领域

本公开总体涉及秘密共享,更具体地涉及分配数字签名数据的份额。本公开特别适合于但不限于分配已签名区块链交易的份额。

背景技术

在本文中,“区块链”一词涵盖所有形式的基于计算机的电子分布式分类账。这些分类账包括基于共识的区块链和交易链技术、许可和非许可的分类账、共享分类账,及其变体。虽然已提出并开发了其他区块链实施方案,但是区块链技术最广为人知的应用是比特币分类账。为了方便和说明的目的,在本文中可能会提及比特币。但应注意,本公开不限于与落入本公开范围内的比特币区块链以及替代的区块链实施方案和协议一起使用。“用户”一词在本文中可指人员或基于处理器的资源。

区块链是一种点对点的电子分类账,其实现为基于计算机的去中心化的分布式系统,所述系统由区块组成,而区块又由交易组成。每个交易都是一种数据结构,所述数据结构对所述区块链系统参与者之间的数字资产控制权的转移进行编码,并且包括至少一个输入和至少一个输出。每个区块都包含前一个区块的哈希值,因此区块被链接在一起,以创建自所述区块链创建以来写入其中的所有交易的永久性且不可更改的记录。交易包括嵌入到其输入和输出中的小程序,称为脚本,这些脚本指定如何以及由谁访问所述交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。

为了将交易写入区块链,必须对其进行“验证”。网络节点(矿工)进行工作以确保每个交易均有效,而无效交易则被网络拒绝。安装在所述节点上的软件客户端通过执行其锁定和解锁脚本对未花费的交易输出(UTXO)执行此验证工作。如果所述锁定和解锁脚本的执行评估为真,则所述交易有效,将所述交易写入所述区块链。因此,为了将交易写入所述区块链,所述交易必须:i)由接收所述交易的第一个节点进行验证—如果所述交易通过验证,则此节点将其中继到网络中的其他节点;ii)添加到由矿工建造的新区块中;iii)已开采,即,添加到过去交易的公共分类账中。

虽然区块链技术最广为人知的是用于加密货币实现,但数字企业家已经开始探索如何利用比特币所基于的加密安全系统和可以存储在区块链上的数据来实现新系统。如果区块链可以用于加密货币领域之外的自动任务和过程,则会非常有利。这类解决方案将能够发挥区块链的优势(例如,永久及防篡改的事件记录、分布式处理等),同时其应用将更加广泛。

区块链技术在其实施中利用秘密共享技术,例如分配密码或数字签名的份额,以启用交易的门限签名。

现有秘密共享技术,例如门限签名工艺,不能很好地扩展,因为产生的私钥打包成具有很少或没有排序或组织的数据结构中。

发明内容

因此,需要提供可更有效扩展的秘密共享改良方法。

现在已设计出这种改进的解决方案。

因此,根据本公开,提供了一种如所附权利要求中所限定的方法。

根据本公开,可提供一种在多个参与者之间分配共享秘密的计算机实现的方法,所述方法包括:

第一映射步骤,其中将输入至所述第一映射步骤的多个输入映射至所述参与者共用的椭圆曲线密码系统的椭圆曲线的对应的椭圆曲线点;

第一加密步骤,其中多个所述椭圆曲线点通过所述椭圆曲线密码系统的公私密钥对的公钥进行加密,以提供适于通过所述公私密钥对的相应私钥解密的输出;

第二加密步骤,其中将输入至所述第二加密步骤的至少一个输入的多个部分乘以所述参与者知悉的序列的对应项;以及

秘密共享步骤,其中将输入至所述秘密共享步骤的输入的多个份额分配至多个所述参与者,从而使所述输入对于阈值数量的所述份额是可存取的(accessible),且对于少于所述阈值数量的所述份额是不可存取的(inaccessible)。

这提供了增进安全性的优势,这是由于共享秘密伪装成椭圆曲线点,且因此较难被非授权方检测到。

所述秘密共享步骤的至少一个输入可基于所述第一加密步骤或所述第二加密步骤的输出。

所述第一加密步骤的至少一个输入可基于共享秘密,所述第二加密步骤的至少一个输入可基于所述第一加密步骤的输出,所述秘密共享步骤的至少一个输入可基于所述第二加密步骤的输出。

所述第二加密步骤的至少一个输入可基于共享秘密,所述第一加密步骤的至少一个输入可基于所述第二加密步骤的输出,所述秘密共享步骤的至少一个输入可基于所述第一加密步骤的输出。

所述第一加密步骤的至少一个输入可基于所述秘密共享步骤或所述第二加密步骤的输出。

通过执行秘密共享步骤于其他步骤的至少一个步骤之前,这提供了增进程序的计算效率的优势。

所述秘密共享步骤的至少一个输入可基于共享秘密,所述第二加密步骤的至少一个输入可基于所述秘密共享步骤的输出,所述第一加密步骤的至少一个输入可基于所述第二加密步骤的输出。

所述第二加密步骤的至少一个输入可基于共享秘密,所述秘密共享步骤的至少一个输入可基于所述第二加密步骤的输出,所述第一加密步骤的至少一个输入可基于所述秘密共享步骤的输出。

所述第二加密步骤的至少一个输入可基于所述秘密共享步骤或所述第一加密步骤的输出。

所述秘密共享步骤的至少一个输入可基于共享秘密,所述第一加密步骤的至少一个输入可基于所述秘密共享步骤的输出,所述第二加密步骤的至少一个输入可基于所述第一加密步骤的输出。

所述第一加密步骤的至少一个输入可基于共享秘密,所述秘密共享步骤的至少一个输入可基于所述第一加密步骤的输出,所述第二加密步骤的至少一个输入可基于所述秘密共享步骤的输出。

所述第二加密步骤可包括执行背包算法。

这提供了提高该方法的效率的优势。

所述第二加密步骤可包括基于Stern序列的所述序列。

这通过减少执行算法的时间复杂性,提供了提高效率的优势。

所述第二加密步骤可包括包含所述参与者已知的项(term)的幂(power)的所述序列。

所述项可基于在所述参与者之间共享的信息。

第二加密步骤可包括超递增序列。

这提供了能够更有效解密共享秘密的优势。

第一映射步骤可包括确定一个椭圆曲线点,所述椭圆曲线点具有基于所述输入的坐标。

所述坐标可基于所述输入乘以所述参与者已知的量。

这提供了增进安全性的优势。

所述第一加密步骤可包括确定包含椭圆曲线点乘以表示输入至所述第一加密步骤的输入的整数的项。

所述第一加密步骤可包括基于临时密钥和参与者的公钥确定项。

该方法可进一步包括向至少一个参与者发送一椭圆曲线点,基于乘以临时密钥的所述椭圆曲线密码系统的生成点,以及一椭圆曲线点,基于乘以临时密钥的参与者公钥。

所述共享秘密可以为数字签名信息。

所述数字签名信息可以为区块链交易。

本公开还提供了一种系统,包括:

处理器;以及

包含可执行指令的存储器,所述指令被处理器执行时,使系统执行本文描述的计算机实现的方法的任何实施方式。

本公开还提供了一种非暂时性计算机可读存储介质,其上存储有可执行指令,计算机系统的处理器执行所述可执行指令时,使得所述计算机系统至少执行本文所述的计算机实现的方法的实施方式。

本公开确保了机密性、认证、不可否认性以及在数字签名中添加信息恢复和可转换性。本公开实现了数据的安全传输(例如秘密或密钥脚本中的记录)。本公开还可防护银行系统中的唯密钥(key-only)攻击和信息(message)攻击等攻击。整体而言,本公开的实施例涉及实现整合与比特币交易有关的外部消息和用于其他用途的信息的过程。

本公开实施例的密钥分配和密钥份额有效打包机制在存储关键数据的过程中引入非线性,其通过增加散布与混乱步骤而增强了加密协议中安全性的程度。密钥份额的有效打包还使得解决方案可有效地扩展。密钥份额的分配特性可启用包含托管(ESCROW)服务的操作模型,其中托管代理作为转发代理,无任何加密秘密,同时仍可监视、验证、发送和接收信息。

附图说明

本公开的这些方面和其他方面将从本文所述的实施例中变得显而易见,并参考本文所述的实施例进行阐述。现将仅通过举例的方式并参考附图对本公开的实施例进行说明,其中:

图1是体现本公开分配数字签名信息份额的过程的示意图;

图2是图1所示过程的部分详图;

图3是图1所示过程的签名生成步骤;

图4是图1所示过程的加密步骤;

图5是用于获得由图1所示过程加密的数字签名的信息恢复过程;

图6是用于图5所示过程的解密过程;以及

图7是示出可实现各种实施例的计算环境的示意图。

具体实施方式

优选实施例

参照图1,其描述了在多个参与者之间分配数字签名的信息(message)的份额的过程。最初,数字信息m(其中m为诸如区块链交易的信息M的哈希)在步骤10中输入至椭圆曲线数字签名算法(ECDSA)。本领域技术人员将可理解ECDSA生成公钥和私钥对以及为随机整数的临时密钥,且用以下更详细的描述方式来提供数字签名(r,s)。在映射步骤20中,数字签名(r,s)映射至参与者共用的椭圆曲线密码系统的椭圆曲线点。然后,采用背包算法(knapsack algorithm)形式的第一加密步骤30应用至步骤20生成的椭圆曲线点,以生成数字签名(r,s)的加密版本(R,S);采用椭圆曲线密码学(ECC)加密形式的第二加密步骤40应用至数字签名(r,s)的加密版本(R,S),以提供数字签名(r,s)的双重加密版本(P

本公开实施例的技术使得可在共享方案中的参与者之间分配密钥份额。这进一步启用了信息的解密和信息恢复的分配机制。同样的机制也可以用于加密信息。下面将进行更为详细的说明。该技术采用背包算法,例如印第安诺拉辛普森学院Maya Hristakeva计算机科学系(IA 50125hristake@simpson.edu)披露的“解决0/1背包问题的不同方法”,通过优化数据打包问题使得密钥份额可以尽可能地进行有效打包和分配。

印第安诺拉辛普森学院Maya Hristakeva计算机科学系(IA 50125hristake@simpson.edu)披露的“解决0/1背包问题的不同方法”中定义的背包算法和标准解决方案的所有变型在配置空间上执行搜索的一些变型。通过使用Stern序列将背包算法初始化的比例播种,可以使配置空间的搜索变得系统化且详尽。这影响了算法的运算效率,因为Stern序列可用于一次生成所有可能的有理分数。如果分数值被限制为小于1的值,则可用作背包算法的打包比例,并且这构成了对密钥共享的所有可能比例的穷举搜索。签名生成是从任意数据信息执行的。

优选实施例的优点

比特币允许信息以其当前格式进行数字签名。本公开引入所提出的背包ECC方法对此进行扩展,以允许签名检索和解密,具体参见下文更详细的描述。因此,同样的机制也可以用于信息检索。

在本公开的方案中,签名的密文可发送至随后根据一(t,n)门限方案解密密文的一组验证者,其中该组中n个验证者中的任意n个可以解密和恢复信息,例如参见Hsu C.L和Wu T.C.(1998),(t,n)共享验证的认证加密方案,IEEE论文集(IEEE Proceedings)——计算机与数字技术,第145卷,第2期,第117-120页。这提高了数据传输的保密性,且允许与比特币交易直接相关联的加密会话的集成。

椭圆曲线密码学(ECC)(例如参见Koblitz N.(1987),“椭圆曲线密码系统”,计算数学,第203-209页)提供了交换加密消息的安全方法。椭圆曲线密码学(与其他已知的加密方法不同,诸如RSA)不需要保密的域参数。此程序的一些应用将包括公钥指示,其具有对自认证公钥密码系统的同时验证。随着背包算法的引入,本公开的方案呈非线性地引入至加密过程中。创建非线性的原因在于构成加密过程的密钥消息以节省空间的方式打包,而非以消息使用的顺序打包。这为发送至接收者前放入背包算法的加密信息提供了更高层级的安全性。然后,接收者可使用反向背包过程(reverse knapsack process)进行解密,以恢复信息。

初始域参数设定在比特币协议中。本方案中使用的信息交换可作为安全的认证机制,其ID基于用户的比特币密钥。这允许在用户和服务器之间形成挑战回应机制,例如参见Nyberg K.和Rueppel R.A.(1993),“基于DSA提供信息恢复的新签名方案”,ACM计算机与通信安全,第1卷,第58-61页。

客户端持有的基础公钥可使用下面详述的多重签名方法进行扩展。

采用这种方式,客户端的公钥可根据需要且针对各认证会话重新计算,例如参见Huang等人,“用于未来安全网络交易的椭圆曲线密码学的FPGA实现方式”,会议论文(Conference Paper),2007年1月。比特币交易中数字签名的创建遵循ECDSA(r,s)签名过程。

加密方法

参照图2,其描述了大致用于信息加密过程的消息流。从消息流中可以看出,存在可选分支70。可选分支70通过在执行背包加密前对(R,S)对进行分段(fragment),使得进一步增强加密方法的安全性成为可能。具体如下文所述。

ECDSA签名

参照图3,其详细描述了图1和图2的数字签名步骤10。除非在矿工可请求交易时创建了特殊形式的开放签名,否则与比特币中遵循的标准过程一样,交易交换部分的信息(M)由信息的发送者签名,并合并接收者的地址。ECDSA签名中r值的计算如下文所述。如果r值等于0,则在计算s值时选择另一个随机数k,如下所示。

其中d

比特币使用SHA256算法,并对信息的哈希值进行签名,从而:

m=Hash256(M)。

签名生成过程如图3所示。然后,比特币交易(r,s)的数字签名用作步骤30(图1和图2)中背包算法的输入,其背包序列的详细描述参见Rajaram Ramasamy R、Prabakar M.A、Devi M.I和Suguna M(2009),“基于背包的ECC加密和解密”,国际网络安全杂志,第9卷,第3期,第218-226页。由此,创建了编码值(R,S)之后,该编码值在步骤40中使用ECC进行加密。从而,返回与R值和S值相关的加密点(P

采用背包算法转换(r,s)的过程如下文方法1所示。背包算法中使用的序列应为超递增序列,有助于更容易地解决问题。超递增序列定义为序列的下一项大于先前所有项的和。为解决超递增背包序列,将背包的总重量与最大重量和序列进行比较。当总重量小于最大重量时,则不在背包内。当总重量大于最大重量时,则在背包内。该算法从总重量中减去最大重量,并将其与下一个最大数进行比较。一直重复该过程,直到总数达到零值。在总数未达到零时无解。这属于超递增序列的特性。

使用Stern序列的背包算法

一般背包问题及其算法求解参见印第安诺拉辛普森学院Maya Hristakeva计算机科学系(IA 50125hristake@simpson.edu)披露的“解决0/1背包问题的不同方法”。可以看出,背包问题的所有标准解决方案涉及配置空间的搜索。背包算法的一个变型的定义如下所述。此算法中的“背包序列”通过乘以整数K(K的定义见下文)的值来进行计算,其中“p”指模数运算中原位使用的素数(椭圆曲线的阶数),“k”指秘密整数(临时密钥),m

修改的Stern序列用于减少时间复杂性。Stern序列的更详细描述参见Reznick(2008),“有理数Stern枚举的正则性”,整数序列杂志。

数值K=Hash(k)在逆向背包算法(reverse knapsack algorithm)中使用。根据哈希值K确定k值在计算上是不可行的。

背包算法

此处详细描述图1、2和4的步骤30中所示的背包算法。

首先定义序列

ν通过乘以ν=p+K进行计算,其中p是模数运算中使用的“素数”,K=Hash(k)为秘密整数。L指二进制位串的长度。

ν值对于每个密钥都是唯一的,因此对于地址也是唯一的,在每次新的确定性交换时更新。

K=Hash(k)值应与反向背包算法中待使用的签名(r,s)一起发送。这应在使用标准多重签名方法(见下文)的各方之间进行发送。使用该方法和多重签名方法可以生成一系列随机值,而不仅仅是作为随机整数使用的临时k值。

背包算法中使用修改的Stern序列,由于这通过将0和1之间的有理值排序减少了时间复杂性,从而使得有理值易于搜索。

Stern序列(更详细的内容参见Stern,M.A.“关于数字理论函数”J.reine angew.数学55,193-220,1858):

Stern(1)=1

Stern(ν)=Stern(ν/2)-如果ν是偶数

Stern(ν)=Stern((ν-1)/2)+Stern((ν+1)/2)-如果ν是奇数

Stern序列中的数值比可用于创建二叉树,其中树叶构成所有的有理分数。这是Stern-Brochet树。一旦枚举出一组有理值集,便可以按大小顺序遍历。然后,可以考虑小于或等于1的有理值子集。此枚举和排序可用于提高背包算法的搜索效率。

考虑由以下迭代生成的二叉树a,b→a,a+b;a+b,b,(1)从根1 1开始。数a,a+b和a+b,b分别称为a、b的左右子元素;a b还称为其子元素的母元素。归纳法生成(generation)的概念定义如下:根1,1构成第一代(generation);第(n+1)代是第n代元素的所有子代的集合。通过此迭代获得的二叉树称为Calkin-Wilf树。

Stern-Brochot树的原理如下所述。

根据背包算法,使用方程式(3)来计算R。背包序列表示为a

系统的S值由方程式(4)给出。

(R,S)值可使用椭圆曲线函数进行加密。

其他值可以交换为K。这些值无需与签名中使用的原始k随机值有关。然而,K=Hash(k)的集成允许之后在比特币中创建额外的脚本形式。(R,S)的使用产生了双重加密的形式。这为后续的信息交换提供了认证和保密性。在与Menezes-Vanstone椭圆曲线算法(参见Nyberg K.和Rueppel R.A.(1993),“基于DSA提供信息恢复的新签名方案”,ACM计算机与通信安全,第1卷,第58-61页)类似的形式中,输入被分段成大约160位的区块。部分区块使用具有接收者公钥的ECC算法输入进行校正或分段。托管代理或云端服务器用于交换。每个分段也使用该系统的公钥进行加密。

签名被发送至服务器或其他云节点。该系统还可以是托管代理或其他第三方。该第三方或云端服务器由于需要最终接收方的私钥,而无法对签名进行解密。ECC加密算法如下所示。

在本公开的ECC加密算法版本中,首先用Koblitz方法将输入转换为椭圆曲线上的点。Koblitz方法参见Koblitz N.(1987),“椭圆曲线密码系统”,计算数学,第203-209页,和Padma Bh等人/(IJCSE)国际计算机科学与工程杂志第02卷,第05期,2010,1904-1907,利用Koblitz方法实现椭圆曲线密码学中的信息编码和解码。

Stern-Brochet树的定义

本节介绍如何使用Stern-Brochet树生成有理数。

从上图中可以看出,有理数可以采用树的形式排列。树叶之间的关系是其均来自顶层元素,即(1/1)。

通过将此值考虑为向量并将其乘以左矩阵L或右矩阵R,可以生成在树上连续的树叶。矩阵L和R的定义如下:

且呈现的结构如下:

通过递归地应用矩阵L和R,可以看出可以生成树的进一步分支。然后,可以从左到右读取树的任何给定层级的项,并且可以生成有理数的排序。中心线左侧的那些数值(与矩阵I对齐)在0至1之间。中心线右侧的值大于1。

多重签名方法

本节介绍了使用ECSDA作为基础技术的多重签名机制。

为了清楚起见,下面采用示例进行描述,其中秘密共享所涉及的双方为某种类型的互联网服务提供者(以下称为“服务端”)以及该服务端的客户(以下称为“客户端”)。所描述的方法可用于任何双方(例如,参见变体V2)。

假定各方均具有执行ECC操作的能力。实际上,

第一阶段:注册

1)各方均同意依据标准ECC系统,诸如secp256k1(由比特币系统使用),使用通用生成器,G。

2)服务端使用secp256k1生成公钥/私钥对,并发布其公钥(例如,在官网上显示):

服务端私钥1=V

服务端公钥1=P

其中:

V代表私钥(由密钥的所有者保密)

P代表公钥(向所有人公开)

在下标中:

M指“主密钥”

S指密钥属于服务端

请注意,在ECC中,公钥是通过使用如下所示的椭圆曲线点乘法从私钥派生得出的:

P

私钥是ECC系统指定的允许范围内的随机整数。

a.客户端使用secp256k1生成公钥/私钥对:

客户端私钥1=V

客户端公钥1=P

再次:

P

b.客户端在服务端上注册其主公钥(P

注册阶段仅在初始设置时发生一次。之后,主密钥将以安全的方式重复使用,以生成一次性对称加密密钥。

第二阶段:会话启动

3)客户端创建“信息”并发送至服务端,并使用标准算法来创建该信息的哈希,得出256位整数:

信息=M (UnixTime+Nonce)

信息哈希值=SHA-256(M)0

为了产生共享秘密,信息的选择是任意的,但是(UnixTime+Nonce)的选择对于某些计划应用是有用的(参见实施例1)。

4)客户端计算二级私钥,如下所示:

客户端私钥#2=V

应当注意的是,在这种情况下,二级私钥不是随机数,而是由主公钥确定性地派生得出。使用此方法,其配对的公钥(P

P

=(V

=V

=P

应注意的是,“+”运算符指椭圆曲线点的加法。

因此,尽管客户端的二级私钥(V

5)客户端使用V

已签名信息=Sig-V

椭圆曲线数字签名算法(ECDSA)的更多详细内容参见:

https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm;http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf

此步骤表示在客户端与服务端之间建立共享秘密并启动安全通信会话所需的唯一传输。服务端将使用接收到的信息M生成自己的二级公钥/私钥对。这使得客户端可以立即计算服务端的二级公钥:

6)客户端使用与步骤4)中相同的技术来计算服务端的二级公钥(P

P

7)服务端接收客户端信息并独立计算M=SHA-256(M)的哈希值

8)服务端根据步骤(4)中的公式计算客户端的二级公钥(P

9)服务端根据计算出的P

有关更多细节,请参见:

https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm;

http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf

此时,服务端还可以根据任何约定条件(例如,在实施例1中)基于信息M的内容执行进一步的检查。

10)服务端计算二级私钥,如下所示:

V

可以使用与步骤4)相同的技术验证V

11)客户端和服务端现在具有彼此的二级公钥,并且可以各自使用其自身的二级私钥独立地计算共享秘密S,如下所示:

服务端计算S=V

客户端计算S=V

两种计算得出相同值的验证如下:

(i)V

=(V

(ii)V

=(V

ECC代数是可交换的,因此:

(V

因此,方程式(i)和(ii)是等同的。

共享秘密S呈椭圆曲线点(x

此协议中的第二阶段可以重复多次,以生成用于单一用途的连续共享秘密。或者,可以重复使用相同的共享秘密。对于后者,为了安全起见,将不会存储实际秘密,因为可以根据公开消息和现有秘密保存的私钥重新计算实际秘密(例如,如实施例2所示)。

方法1——背包算法

本节中描述了如何使用图1、2和4的步骤30的背包算法优化地打包ECDSA签名,更多详细描述参见“背包程序的进一步扩展”。如上所述,背包算法的非线性打包程序增加了密钥共享的安全性。

-背包序列

1)将(r,s)转换为二进制形式

2)生成背包序列

3)计算(R,S)

签名扩展

通过整个信息的签名,此方法可以扩展到比特币内部使用的签名过程之外。在此方法中,使用部署在比特币内的过程对各方之间共享和加密的信息进行数字签名,无需信息哈希值。也就是说,对整个信息签名,从而创建(r,s)签名对的更大版本。

背包算法再次用于编码(R,S)值。在大多数情况下,优选使用信息哈希值,但是在某些情况下,可存在整个签名信息。

在使用发送者的私钥和服务端或托管代理的公钥进行双重加密之前,(R,S)值应分段为多个区块。

当服务端收到签名后,则其使用其维护的私钥对此签名进行解密。然后,使用最终接收方的公钥对此签名进行加密。在此过程之后,此签名从服务端或代理发送至接收者。

单个字符的ECC算法实现细节

该方法描述了通过图1、2和4的ECC加密步骤40来加密单个字符,这可以概括为字符流。

从椭圆曲线选择基点G。

G具有符合方程式y

基点在符合EC的同时使x,y值最小化,即在椭圆曲线上使x,y值最小化的点。

在ECC方法中,选择一个随机整数k(k<p),需要对其保密。

然后,按照椭圆曲线代数的标准,通过一系列加法和加倍运算来评估kG。

来源指定为主机A,目标指定为主机B。

选择主机B的私钥,称为n

B的公钥评估如下

P

为了使A加密并将字母字符传送给B,执行以下操作。

例如,如果A想传送字符“S”。

然后,字符“S”的ASCII值用于修改任意点P

P

完成此转换有两个目的。首先,将单值ASCII转换为EC的x,y坐标。其次,它对于潜在的黑客是完全伪装的。

在ECC的下一步中,有必要评估kP

这将产生一组坐标x

C

kG→x

P′

因此,已修改的明文已通过应用ECC方法进行了加密。

背包程序的进一步扩展

背包程序引入了彻底的散布与混乱,以防止暴力攻击的企图。

背包程序使用一系列称为a

有几种生成这些向量的方法。例如,可能有n的幂的序列,如下所示:

a

此处,为简单起见,n为小于10的随机整数,或者涉及p和k整数进行计算。p是模数运算中使用的素数,k是秘密整数,m是二进制位串的长度。

信息按照背包过程进行加密,如下所示:

假设x

x

根据背包算法,计算出累积总和S[x

在最终的加密版本中,坐标x

类似地,y

C

应注意的是,两对整数代表一条信息中的一个字符。据此,总信息将由与信息中字符数量相等的整数对表示。

接收方B具有用于逆转该背包程序和恢复坐标的位模式(bit pattern)的所有相关信息。例如,B知晓a

为了逆转背包过程,即在图5和图6的步骤90中,例如考虑

其是x

确定S[x

如果该值为正,即S[x

此时,从S[x

然后,对y

n

将其从P′

P′

减法还涉及ECC加倍和加法,其中唯一的区别是负项的y坐标前带有负号。确定斜率的表达式,x

这将产生P′

ECC加密算法

本节介绍了用于结合ECC加密算法、Koblitz算法和背包算法的方法。

-接收者的公钥P

-发送方使用的随机整数K=Hash(k)

-椭圆曲线基点G

方法:

解释用于

1)Koblitz方法在图1的映射步骤20中用于识别对应于R的唯一椭圆曲线点。这是通过识别具有x坐标x∈Z

2)发送者生成一个随机数K。这可以选择为K=Hash(k)。

3)发送者发送加密的密文

至接收者。点

解密

图5和6中步骤80的解密程序中的信息流如下所示。

本节(解密)的其余部分介绍了每个步骤的机制。

信息恢复

服务端收到的信息签名可以使用服务端的私钥进行解密。一旦解密后,则使用在云端服务器和最终接收方之间共享的秘密密钥对信息进行加密。这允许服务端或代理充当托管或转发代理,而无需获知任何加密秘密,同时仍然能够监视和验证发送方和接收方。数值的交换通过秘密共享方法完成,详细内容参见下面的“秘密值共享”一节。

云端服务器还可以在创建基于ID的加密方案时充当认证机构。ECC解密算法的详细信息如下所示。接收方能够使用输入到ECC解密算法的私钥恢复(R,S)。这允许接收者将椭圆曲线点解码回信息。

ECC解密算法

示出了图5和6中步骤80的ECC解密算法的操作。

-接收方的私钥d

方法:

1)其中KG为第一点(first point),

2)计算

3)使用Koblitz方法对点进行解码。这可以通过识别

小于(x-1)/λ的最大整数R来实现。

(R,S)值用作反向背包算法的输入,以通过使用值的迭代过程恢复(R,S)值。

然后将R的当前值设置为:

在结果为负的情况下,分配位0,并且R的值保持不变。接下来,从R的当前值中减去

然后,可以使用方程式5恢复信息。信息可以是ASCII格式或包括非文本输入的任何其他编码。

秘密值分享

密码系统中的一个基本问题是跨非安全网络在各方之间建立共享秘密。例如,在对称密钥密码学中(参见https://en.wikipedia.org/wiki/Symmetric-key_algorithm),如AES使用的(详细信息参见https://aesencryption.net/),单个秘密密钥由双方共享。其缺点在于,必须首先以某种方式在双方之间安全地传输秘密密钥。由于密钥的传输通常是通过诸如互联网的通信系统以电子方式完成,共享步骤可能会带来灾难性的漏洞。由于对称密钥协议简单且使用广泛,因此需要一种能够在非安全网络中安全地共享秘密密钥的能力。

Diffie-Hellman密钥交换(详细内容参见https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)和三次传递协议(详细内容参见https://en.wikipedia.org/wiki/Three-pass_protocol)等现有协议可在非安全网络中安全地共享秘密。但是,在不断生成和共享新秘密的情况下,这些方法在计算上很昂贵。本实施例提供了一种用于安全秘密共享的有效且成本较低的方法。更进一步地,所描述的技术允许基于单个主密钥来生成和方便地管理多个安全秘密密钥。

本实施例的过程的主要内容如下:

1.该方法利用“椭圆曲线密码学”(ECC)(详细内容参见https://en.wikipedia.org/wiki/Elliptic-curve_cryptography)和“椭圆曲线运算”的特性。如称为高效密码学标准群组(SECG)(http://www.secg.org/)的独立机构所描述,存在几种使用椭圆曲线的密码学标准。

2.ECC用于为非对称密码生成加密密钥对(详细内容参见https://searchsecurity.techtarget.com/definition/asymmetric-cryptography),其中一个密钥是公开可用的,而另一个则是保密的。本实施例使得各方能够基于其自身的非对称密钥对独立地计算相同的秘密密钥,该非对称密钥对由secp256k1等约定的ECC标准生成。安全性由以下事实得出:共享秘密由各方计算,但从未传输过。

3.效率源自将多个步骤合并为一个步骤,以及使用成本较低的计算来推导新密钥。在建立主密钥的初始设置阶段之后,每一个新的秘密密钥的后续创建都是有效且可重复的。

技术说明

为了清楚起见,下面采用示例进行描述,其中秘密共享所涉及的双方为某种类型的互联网服务提供者(以下称为“服务端”)以及服务端的客户端(以下称为“客户端”)。所描述的方法可用于任何双方(例如,参见下文变体V2)。

假定各方均具有执行ECC操作的能力。实际上,

第一阶段:注册

12)各方均同意依据标准ECC系统,诸如secp256k1(由比特币系统使用),使用通用生成器G。

13)服务端使用secp256k1生成公钥/私钥对,并发布其公钥(例如,在官网上显示):

服务端私钥1=V

服务端公钥1=P

其中:

V代表私钥(由密钥的所有者保密)

P代表公钥(向所有人公开)

在下标中:

M指“主密钥”

S指密钥属于服务端

请注意,在ECC中,公钥是通过使用如下所示的椭圆曲线点乘法从私钥派生得出的:

P

私钥是ECC系统指定的允许范围内的随机整数。

14)客户端使用secp256k1生成公钥/私钥对:

客户端私钥1=V

客户端公钥1=P

再次:

P

15)客户端在服务端上注册其主公钥(P

注册阶段仅在初始设置时发生一次。之后,主密钥将以安全的方式重复使用,以生成一次性对称加密密钥。

第二阶段:会话启动

16)客户端创建“信息”,发送至服务端,并使用标准算法创建信息的哈希值,得出256位整数:

信息=M(UnixTime+Nonce)

为了产生共享秘密,信息的选择是任意的,但是(UnixTime+Nonce)的选择对于某些计划应用是有用的(例如参见实施例1)。

信息哈希值=SHA-256(M)

有关更多详细信息,请参见:https://hash.online-convert.com/sha256-generator

17)客户端计算二级私钥,如下所示:

客户端私钥#2=V

应当注意的是,在这种情况下,二级私钥不是随机数,而是由主公钥确定性地派生得出。使用此方法,其配对的公钥(P

P

=(V

=V

=P

(应注意的是,“+”运算符指椭圆曲线点的加法。)

因此,尽管客户端的二级私钥(V

18)客户端使用V

已签名信息=Sig-V

(https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorith m)

此步骤表示在客户端和服务端之间建立共享秘密并启动安全通信会话所需的唯一传输。服务端将使用接收到的信息M生成自己的二级公钥/私钥对。这使得客户端可以立即计算服务端的二级公钥:

19)客户端使用与步骤(4)相同的技术来计算服务端的二级公钥(P

P

20)服务端接收客户端信息并独立计算M=SHA-256(M)的哈希值

21)服务端根据步骤(4)中的公式计算客户端的二级公钥(P

22)服务端根据计算出的P

23)服务端计算二级私钥,如下所示:

V

可以使用与步骤(4)相同的技术验证V

24)客户端和服务端现在具有彼此的二级公钥,并且可以各自使用其自身的二级私钥独立地计算共享秘密S,如下所示:

服务端计算S=V

客户端计算S=V

这两个计算得出相同值的验证如下:

(i)V

=(V

(ii)V

=(V

ECC代数是可交换的,因此:

(V

因此,方程式(i)和(ii)是等同的。

共享秘密S呈椭圆曲线点(x

此协议中的第二阶段可以重复多次,以生成用于单一用途的连续共享秘密。或者,可以重复使用相同的共享秘密。对于后者,为了安全起见,将不会存储实际秘密,因为可以根据公开信息和现有秘密保存的私钥重新计算实际秘密(例如,如实施例2所示)。

变体

本节描述了哈希变体的方法。

V1:哈希层级

通过双方之间的事先协议,无需重复第二阶段来生成连续的单一用途密钥,而是可以由双方重复使用以前使用的信息哈希值(SHA-256(M))来建立哈希值层级结构。实际上,信息的哈希可以是下一代(M’)的信息。这样做可以计算出连续生成的共享秘密,而无需进行进一步的协议建立传输。第二代共享秘密(S’)可以按以下方式计算。

V1.i双方计算第二代哈希值:

M’=SHA-256(M)

Hash’=SHA-256(SHA-256(M))

V1.ii客户端计算服务端的另一代公钥:

P

V1.iii服务端计算客户端的另一代公钥:

P

V1.iv双方计算其自身的第二代私钥:

V

V

V1.v服务端和客户端各自计算下一代共享秘密:

服务端计算S’=V

客户端计算S’=V

可以用相同的方法计算更多的代(S”、S”’、等),以创建链层级结构。此技术要求服务端和客户端都追踪原始信息或原始计算的哈希值(SHA-256(M))以及其与哪一方相关联。由于这是众所周知的信息,因此关于此信息的保留不存在任何安全性问题。因此,此信息可能会保存至“哈希表”(将哈希值链接到公钥),并在网络上自由分发(例如,使用Torrent)。应注意的是,如果在层级结构中有任何单个共享秘密曾经遭到破坏,只要私钥保持安全,便不会影响层级结构中任何其他秘密密钥的安全性。

除了如上所述的链(线性)层级结构以外,还可以创建树结构形式的层级。树的分支可以通过几种方式来完成,此处描述其中的三种方式。

(i)主密钥生成。首先,应注意的是,在链层级中,每个新的“链接”(公钥/私钥对)都是通过在原始主密钥上添加一个经过多次重复使用的信息来产生的。也就是说(为了清楚起见,仅显示私钥):

(ii)

V

V

V

等等。

为了创建分支,可以将任何密钥用作子主密钥。例如,通过像常规主密钥一样向其添加哈希值,可以将V

V

V

(iii)逻辑关联。在这种方法中,树中的所有节点(公钥/私钥对)均作为链生成(或采用任何其他方式——如下文(iii)所示),并且树中的节点之间的逻辑关系由表格维持,其中各个节点都使用指针简单地与其父节点相关联。

(iv)信息多样性。可以通过在链或树的任何点引入新信息M,生成新的私钥/公钥对。该信息本身可以是任意的,也可以带有某些含义或函数(例如,其可能与“真实”银行账号相关等等)。当然,任何新信息都必须安全地保留。

利用树形结构,可以提供用于不同目的的许多密钥,例如认证密钥、加密密钥、签名密钥、支付密钥等,所有这些都链接至单个安全维护的主密钥。这些中的每一个都可用于与另一方创建共享秘密。

V2:点对点秘密共享

本实施例可以在两个点(peer)之间使用,而非在服务端和客户端之间。在以上技术说明描述的示例中,服务端充当客户端信任的一方。服务端必须对客户端的凭据进行认证,以允许客户端访问其系统。服务端通过验证客户端的已签名信息来完成此操作。在点对点的情况下,各点必须彼此建立信任,即“客户端”还必须认证“服务端”的凭据。这可以通过双向过程来完成,在该过程中,双方均执行信息签名和验证步骤(技术说明中的步骤(0-(9))。

在点对点的情况下,客户端将已签名信息M发送至服务端后,服务端使用其计算出的二级私钥V

V2.i已签名信息=Sig-V

然后,客户端以在步骤(0中计算出的服务端的二级公钥P

现在转到图7,提供了可用于实施本公开的至少一个实施例的计算设备2600的说明性简化框图。在各种实施例中,所述计算设备2600可用于实现以上示出和说明的任何系统。例如,所述计算设备2600可配置为用作数据服务器、网络服务器、便携式计算设备、个人计算机或任何电子计算设备。如图7所示,计算设备2600可包括具有一级或多级高速缓存的一个或多个处理器以及存储器控制器(统称为2602),所述存储器控制器可被配置为与包括主存储器2608和永久存储器2610的存储子系统2606通信。如图所示,主存储器2608可以包括动态随机存取存储器(DRAM)2618和只读存储器(ROM)2620。存储子系统2606和高速缓存存储器2602可用于存储信息,诸如与本公开中所描述的交易和区块相关联的细节。处理器2602可用于提供本公开中描述的任何实施例的步骤或功能。

处理器2602还可以与一个或多个用户界面输入设备2612、一个或多个用户界面输出设备2614和网络接口子系统2616通信。

总线子系统2604可以提供用于使计算设备2600的各个组件和子系统能够按预期彼此通信的机制。虽然总线子系统2604示意性地示出为单个总线,但是总线子系统的替代实施例可以利用多个总线。

网络接口子系统2616可以向其他计算设备和网络提供接口。网络接口子系统2616可以作为从计算设备2600接收数据和向其他系统传输数据的接口。例如,网络接口子系统2616可以使数据技术人员能够将设备连接到网络,使得数据技术人员能够在远程位置(例如数据中心)向设备发送数据并从设备接收数据。

用户界面输入设备2612可以包括一个或多个用户输入设备,例如键盘;指点设备,如集成鼠标、轨迹球、触摸板或图形平板电脑;扫描仪;条形码扫描仪;包含在显示器中的触摸屏;音频输入设备,如语音识别系统、麦克风;以及其他类型的输入设备。一般而言,术语“输入设备”的使用旨在包括用于向计算设备2600输入信息的所有可能类型的设备和机制。

一个或多个用户界面输出设备2614可包括显示子系统、打印机、或非视觉显示器(例如音频输出设备等)。显示子系统可以是阴极射线管(CRT)、平板设备(例如液晶显示器(LCD))、发光二极管(LED)显示器或投影或其他显示设备。通常,术语“输出设备”的使用旨在包括用于从计算设备2600输出信息的所有可能类型的设备和机制。例如,可以使用一个或多个用户界面输出设备2614来呈现用户界面,以便于用户与执行所描述的过程和其中变体的应用程序进行交互(当这种交互可能合适时)。

存储子系统2606可以提供计算机可读存储介质,该计算机可读存储介质用于存储可提供本公开的至少一个实施例的功能的基本编程和数据构造。当由一个或多个处理器执行时,应用程序(程序、代码模块、指令)可以提供本公开的一个或多个实施例的功能,并且可以存储在存储子系统2606中。这些应用程序模块或指令可以由一个或多个处理器2602执行。存储子系统2606可另外提供用于存储根据本公开所使用的数据的存储库。例如,主存储器2608和高速缓存存储器2602可以为程序和数据提供易失性存储。永久存储器2610可以提供用于程序和数据的永久(非易失性)存储,且可包括闪存、一个或多个固态驱动器、一个或多个磁硬盘驱动器、一个或多个具有关联可移动介质的软盘驱动器、一个或多个具有关联可移动介质的光驱动器(例如CD-ROM或DVD或蓝光)以及其他类似的存储介质。这样的程序和数据可以包括用于执行如在本公开中描述的一个或多个实施例的步骤的程序以及与在本公开中描述的交易和区块相关联的数据。

计算设备2600可以是各种类型的,包括便携式计算机设备、平板电脑、工作站或下文描述的任何其他设备。另外,计算设备2600可包括可通过一个或多个端口(例如,USB、耳机插孔、闪电连接器等)连接至计算设备2600的另一设备。可以连接到计算设备2600的设备可以包括被配置为接受光纤连接器的多个端口。因此,该设备可以被配置为将光信号转换成电信号,所述电信号可经由将该设备连接至计算设备2600进行处理的端口传输。由于计算机和网络的不断变化的性质,图7所示的计算设备2600的描述仅用作说明设备的优选实施例的特定示例。可能存在比图7所示系统的组件更多或更少的许多其他配置。

需要说明的是,上述实施例说明而不是限制本发明,本领域技术人员能够在不脱离所附权利要求定义的本公开范围的前提下设计出许多替代实施例。在权利要求书中,括号中的任何附图标记都不应解释为对权利要求的限制。词语“包括”等不排除任一项权利要求或说明书中整体列出的元件或步骤之外的元件或步骤的存在。在本说明书中,“包括”是指“包含或由......组成”。元件的单数形式并不排除此类元件的复数形式,反之亦然。本公开可以通过包括几个不同元件的硬件以及通过适当编程的计算机来实现。在列举几个装置的设备权利要求中,这些装置中的几个装置可以由同一硬件来体现。在互不相同的从属权利要求中引用某些措施的事实并不意味着不能有利地使用这些措施的组合。

参考文献

1.Chen T.S.Huang G.S.Liu T.P.和Chung Y.F(2002),“基于椭圆曲线密码系统识别协议的数字签名方案”,IEEE论文集TENCON’02,第192-195页

2.Hsu C.L和Wu T.C.(1998),“(t,n)共享验证的认证加密方案”,IEEE论文集(IEEE Proceedings)——计算机与数字技术,第145卷,第2期,第117-120页.

3.Graham,R.L.;Knuth,D.E.;和Patashnik,O.具体数学:计算机科学基础,第2版,阅读版,MA:Addison-Wesley,第116-117页,1994.

4.Koblitz N.(1987),“椭圆曲线密码系统”,计算数学,第203-209页.

5.Nyberg K.和Rueppel R.A.(1993),“基于DSA提供信息恢复的新签名方案”,ACM计算机与通信安全,第1卷,第58-61页。

6.Rajaram Ramasamy R、Prabakar M.A、Devi M.I和Suguna M(2009),“基于背包的ECC加密和解密”,国际网络安全杂志,第9卷,第3期,第218-226页.

7.Rajaram Ramasamy R.和Amutha Prabakar M.(2011),“使用基于背包的ECC信息恢复的数字签名方案”,国际网络安全杂志,第12卷,第1期,第15、20页.

8.Reznick(2008),“有理数Stern枚举的正则性”,整数序列杂志.

9.Stern,M.A.“关于数字理论函数”J.reine angew.数学55,193-220,1858.

10.解决0/1背包问题的不同方法,印第安诺拉辛普森学院Maya Hristakeva计算机科学系(IA 50125hristake@simpson.edu)

11.Huang等人,“用于未来安全网络交易的椭圆曲线密码学的FPGA实现方式”,会议论文(Conference Paper),2007年1月.

1a.对称密钥密码学:https://en.wikipedia.org/wiki/Symmetric-key_algorithm

2a.AES加密:http://aesencryption.net/

3a.Diffie-Hellman密钥交换:

https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

4a.三次传递协议:https://en.wikipedia.org/wiki/Three-pass_protocol

5a.椭圆曲线密码学:

https://en.wikipedia.org/wiki/Elliptic_curve_cryptography

6a.高效密码学标准群组(SECG):http://www.secg.org/

7a.非对称密码学:http://searchsecurity.techtarget.com/definition/asymmetric-cryptography

8a.SHA-256算法:http://hash.online-convert.com/sha256-generator

9a.椭圆曲线数字签名算法(ECDSA):

https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm;

http://cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf

10a.RIPEMD160算法:

http://homes.esat.kuleuven.be/~bosselae/ripemd160.html

4aa.Padma Bh等人/(IJCSE)国际计算机科学与工程杂志第02卷,第05期,2010,1904-1907,利用Koblitz方法实现椭圆曲线密码学中的信息编码和解码

相关技术
  • 用于分配数字签名数据份额的计算机实现的系统和方法
  • 获取数字签名的数据的计算机实现方法和系统
技术分类

06120112876010