具体实施方式
下面结合附图提供的详细描述旨在作为本发明示例的描述,并不旨在表示可以构建或使用本发明示例的唯一形式。本描述阐述了本发明示例的功能,以及用于构建和操作本发明示例的步骤的序列。然而,可以通过不同的示例来实现相同或等效功能和序列。
虽然在本文中将本发明的示例描述并示出为在智能计量系统中实现,但是所描述的系统只是作为示例而非限制来提供的。本领域的技术人员将会明白,本发明示例适合在各种不同类型的计量系统中的应用。
在下文中给出的示例中,在计量应用中使用密码技术来保护用户的隐私。现在不使用正式数学定义在高层面解释密码学领域的一些术语,以帮助理解本发明的各示例。
承诺方案是使发送者能够对值作出承诺并以对接收者隐藏的方式将该值发送给接收者的方法。发送者稍后能够揭示该隐藏的值。因为发送者对该值作出承诺,所以发送者不能够通过在该值被揭示给接收者之前改变该值来“欺骗”或偏置发送者与接收者之间的交互。想出用于对值作出承诺的过程是可能的,例如将该值置于一个盒中、锁住该盒并将该盒给予不能解锁该盒的接收者。发送者不能改变该值,因为接收者拥有该盒。该值对接收者而言是隐藏的,因为该盒是锁住的。然而,发送者可以通过帮助接收者解锁该盒来揭示该值。并非使用盒子和物理锁,可以使用类似的数学过程来使发送者能够对值作出承诺。在揭示阶段,发送者可以提供与上例中的钥匙类似的开启值,并使接收者能够使用数学过程来揭示或开启该承诺。
同态承诺方案是这样的方案:通过将各单独承诺的开启要求进行组合,可将使用该方案形成的两个承诺进行组合以使得经组合的承诺可被开启(即,揭示)。对承诺的操作造成对所承诺的值的操作。关于同态承诺方案的更多细节将在以下给出。
零知识证明是两个实体(证明者和验证者)之间的方法,它使证明者能够在除一声明的真实性之外不揭示任何事物的情况下向验证者展示该声明是真实的。例如,在计量应用的情况下,用户可能希望在不向公用事业公司或其他提供者(验证者)揭示计量读数的情况下向该提供者证明他或她的账单是正确的。例如,零知识证明可以是允许证明者使接收者确信他们在不揭示一些所承诺的值情况下知道这些值的三方协议。在第一阶段,证明者生成对随机值的一组承诺,它想要为其提供知识的值中的每一个都有一个承诺。在第二方,通过将单向函数用于对随机值的这些承诺上,证明者生成质询。在第三方,证明者计算应变于这些秘密值、随机值、以及该质询的一组响应。验证者随后可以确保该响应满足公共等式,以使它自己确信证明者知道该秘密的所承诺的值。为了对证明知晓的零知识证明进行验证,给定质询和来自证明者的响应,验证者首先计算承诺。随后,它重新计算质询并检查它是否等于证明者给出的质询。
非交互式零知识证明是特定类型的零知识证明,其中证明者能通过向验证者发送消息(例如,该消息包括质询和响应)(验证者随后可以检查该消息)来以零知识向验证者证明一声明。以此方式,验证者不需要向证明者发送任何信息,并且因而证明者与验证者之间没有交互。
数字签名方案(在本文中称为签名方案)是使诸如文档、电子邮件、消息或其他内容等项能够由发送者以使接收者能够确信该内容实际上由所声称的发送者发送的方式来签署的密码方案。签名随后由任何人验证为是有效的并且被称为是“可普遍验证的”。可重新随机化的签名方案是这样的方案:任何人可以生成许多签名,每一签名与另一签名稍微不同,并且接收实体能够验证这些签名中的任一个源自签署实体。给定有效的可重新随机化的签名,任何人(不需要秘密)可以在同一消息上生成另一有效的签名。这一新鲜签名不可连接到原始签名。签名方案可具有对拥有签名的有效零知识证明。
图1是保护隐私的计量系统102的示意图。用户108消费可以是任何商品或服务的资源并且该消费由计量器100来监视。该资源由提供者114提供,在一些示例中提供者114能够向计量器100发送通信(提供者并非必需能够向计量器发送通信)。为保护用户108的隐私,计量器100的可信内核与提供者114之间不存在直接的无中介通信链路。提供者与计量器的同计量不相关的其他各方之间的直接通信可以存在。例如,以使提供者能够将电力供应打开和关闭。计量器100在地理上可以远离提供者来放置。
用户108具有代理,在图1中示为保护隐私的账单生成器106。这是计算机实现的并且被安排成接收来自计量器100的经证实的读数104。保护隐私的账单生成器106具有被安排成接收来自提供者的经证实的定价策略110或价目表的输入组件。它将这些存储在经证实的定价策略存储中。保护隐私的账单生成器使用计量器读数以及定价策略来计算要由用户108支付给提供者的账单。计算得到的账单给出要支付的总额并且省去可损害用户隐私的详细的计量读数。在用户授权的情况下,计算得到的账单可包含计量读数细节。保护隐私的账单生成器106包括确定用于证实该账单正确的零知识证明的证明引擎,并且将该证明与账单112一起发送给提供者。该账单不包含单独的计量读数或只包含用户已授权发布给提供者的计量读数。因为该证明是零知识的,所以它不公开任何用户消费数据并且用户108的隐私得到保护。提供者114处的计算机实现的验证者116接收经证实的账单和证明112,并通过检查该证明来验证该账单是正确的。这一验证是在不需要验证者或提供者访问任何计量读数的情况下来实现的。
各方(计量器、提供者、以及账单生成器)中的每一方生成公钥私钥对,并在可信登记实体处登记其公钥。提供者计算承诺方案的参数,并将这些参数发送给计量器(在计量器将承诺输出给计量读数的示例中)和账单生成器106。
在本文描述的示例中,计量器100是防篡改的。即,假定计量器正确地监视资源的消费并提供准确的经证实的读数104。因为计量器是防篡改的,所以提供者、用户、或第三方难以用不能由用户和/或提供者检测到的未经授权的方式来更改计量器的工作。计量器的大小在物理上和功能上可以都是小型的,因为计量器只需要测量并签署消费。计量器可被认为是可信计算基础的一部分。这一可信计算基础的最小大小提供了用于安全工程设计的好处。例如,它允许更彻底的评估、易于验证、易于代码复查、更便宜的防篡改、以及更小的攻击面。
保护隐私的账单生成器106独立于计量器100。因此,最终账单的计算可以在防篡改外壳之外完成,并且可以随时间或在顾客更换提供者时应用和修改各种策略,而无需修改可信计算基础。这在诸如电力和燃气计量等顾客经常更换提供者的应用领域中是有益的。
在一些示例中,保护隐私的账单生成器106和计量器100作为更大的智能计量器的一部分来提供,该更大的智能计量器提供用户界面、计算最终账单和相关联的正确性证明、以及将这些发送给提供者。智能计量器可具有用于提供丰富功能的全CPU、显示器、局域网和广域网通信、以及远程升级能力。在这种情况下,智能计量器的不与消费测量和记账相关联的功能可以在可信内核之外执行。在这种情况下,顾客必须信任智能计量器的提供者会只发送保护隐私的账单信息。
在其他示例中,保护隐私的账单生成器106可以使用用户108所拥有的家庭服务器来实现。这在顾客不愿信任智能计量器的情况下是有用的。在计量器不与提供者直接通信而是改为使用顾客的设备来进行网络访问的情况下,这也是适用的。
在其他示例中,保护隐私的账单生成器106可被实现成诸如web服务等第三方服务。这提高了对故障或拒绝服务的稳健性。在这种情况下,用户108将它们的私密数据委托给第三方服务。
在其他示例中,保护隐私的账单生成器106被合并在带有WAN连接的移动电话或其他计算设备中。
现在描述其中由计量器提供的经证实的计量读数104是实际计量读数而非对这些计量读数的承诺的各实施例。如果计量器输出经证实的读数104(其是对计量读数的承诺),则这些计量读数的隐私性得到增强。这是因为计量器所输出的承诺不公开实际计量读数值,直至这些承诺被揭示为止。然而,在制造阶段在提供者114与计量器100之间存在勾结风险的情况下,提供者可能与计量器相勾结以知晓如何揭示计量器所输出的承诺并找出私密计量读数值。为了防止这样的勾结,计量器可被安排成输出经签署的计量读数而非对这些读数的承诺。在这种情况下,保护隐私的账单生成器106具有更困难的工作来确保计量读数的隐私性,因为它们是作为实际值而非作为承诺来提供的。现在参考图2-3给出这一类型的情况的示例。
图2是保护隐私的账单生成器处的方法的示例,而图3是提供者处的要结合图2的方法来使用的方法的示例。在图2和3的示例中,提供者以表的形式来发出离散定价策略,其中每一计量读数被映射到一价格或费用f。例如,在交通堵塞计费应用中,每一计量读数可以是街道名称并且费用可以是通行费。如在以下示例中进一步描述的,可以使用其他类型的定价策略。
账单生成器接收并可任选地验证200来自计量器的经签署的计量读数元组。每一元组是一组三个值(d,cons,other),其中d是初始化为0且在计量器每次输出新元组时递增的计数值。cons(消费)是消费计量读数(例如,街道名称)并且other(其他)是计量器提供的影响费用的任何其他信息,如读数的时间。
账单生成器接收并可任选地验证202来自提供者的经签署的定价策略表的各行。例如,该表的每一行可以将计量读数(例如,街道名称)映射到费用f。每一行都是分开签署的。
账单生成器获取204经签署的计量读数之一(例如,指定街道的计量读数)。它随后找出206包含适当的费用fi的经签署的表行(例如,该指定街道的费用)并将该经签署的表行重新随机化。账单生成器生成208对fi的承诺并且生成210零知识证明以示出:
●它持有经证实的读数;
●它持有经证实的表行;
●消费(cons值)对读数和表行(例如,街道名称相同)而言是相同的;以及
●所生成的承诺表示该表行的费用。
如上所述,形成零知识证明的过程可包括三个步骤。第一,生成对随机值的一组承诺,账单生成器想要证明知道的各值中的每一个值都有一个承诺。第二,通过将单向函数用于对随机值的这些承诺上,账单生成器生成质询。第三,账单生成器计算作为这些秘密值、随机值、以及该质询的函数的一组响应。该质询和响应被发送给执行验证过程的提供者。
该证明被构建成非交互式地对用于形成该账单的所有计量读数和定价策略信息进行证明的位串。。该证明可以是可普遍验证的,即不需要秘密就能验证其正确性。该零知识证明是使用将消费数据映射到价格或费用的信息上的一个或多个签名来生成的。然而,提供者处的验证者不能够获得在其上使用签名来计算证明的任何信息。否则,如果提供者找出这些签名,则提供者可能能够从费用映射到消费数据。该零知识证明是使用一个或多个构件块来生成的,在该示例中构件块是对拥有签名的非交互式零知识证明、证明所承诺的值是两个所承诺的值的乘积的证明、以及证明所承诺的值处于区间内的证明。本文稍后给出这些构件块的详细示例。
如上所述,该零知识证明包括证明账单生成器持有经证实的计量读数并且持有经证实的表行的证明。即,该证明示出账单生成器拥有计量读数和表行上的签名。以零知识来证明拥有签名的目的是验证者不能获得在其上使用签名来计算该证明的任何信息。验证者只知道证明者(账单生成器)拥有由其签名公钥被用来验证该证明的一方所签署的签名。在该示例中,提供者P计算将消费值映射到价格的若干签名并将它们发送给账单生成器U。在记账时间段的结尾时,U计算要支付的总费用并将它连同证明该总费用被正确地计算的证明一起揭示给P。该证明不向P揭示与U的消费数据有关的任何信息。因此,U不向P揭示被用来计算费用的签名(将消费值映射到价格),因为签名揭示了与消费有关的信息。为了避免揭示签名,U计算证明拥有签名的零知识证明,这仍然允许P知道这些签名是由他根据定价策略来计算的并且因而是有效的。
如上所述,账单生成器不向P揭示被用来计算费用的签名。在其中计量不被信任(即,在制造阶段提供者与计量器之间可能存在勾结)的实施例中,所使用的签名方案至少部分地是可重新随机化的,以提供附加保护来免于向P揭示被用来计算费用的签名。例如,如图2所示,包含费用和消费的表行的签名由账单生成器来重新随机化206。因为这些签名是在被用来生成该证明之前由账单生成器来重新随机化的,所以不存在它们被提供者识别的风险。然而,并非必须使用可重新随机化的签名方案。
对每一计量读数重复该生成对费用的承诺以及生成零知识证明的过程。账单生成器形成对总费用的承诺212并将包含证明质询和响应以及对总费用的承诺的经签署的消息发送给214提供者。该经签署的消息或者包括对策略条目的承诺和计量读数,或者包括它们的经重新随机化的签名。验证者使用这一信息来将行承诺(策略片段和计量读数)链接到每读数的最终费用。提供者继续进行来如参考图3所描述的那样验证该证明。
现在参考图3来描述提供者处的过程,除了已经在上文描述了的签署并将定价策略发送给账单生成器的过程之外。
如上所述,为了验证零知识证明,给定来自账单生成器的质询和响应,验证者可以计算承诺。随后,它重新计算质询并检查它是否等于账单生成器给出的质询。
提供者接收300包含证明和对总费用的承诺的经签署的消息。它验证消息上的签名并随后验证302该证明。这通过对每一计量读数进行以下操作来完成:
●检查cons对读数和表行而言是相同的;以及
●检查承诺是针对正确的表行的。
提供者还检查306承诺的组合与对总费用的承诺相同,并且检查计量读数是顺序的308并且没有计量读数被省去(否则用户可能欺骗并避免支付所省去的计量读数)。为此,提供者可知道计量器在每一记账时间段输出的元组的数量(因为这一信息是公用域)。另一可能性是使计量器能够在记账时间段的结尾时在该时间段内输出的元组的数量上输出签名。这一签名随后由账单生成器报告给提供者。
提供者可任选地能够请求314账单生成器揭示某些指定的计量读数。如果账单生成器准许这一点,例如如果用户给予授权,则将适当的开口细节发送给提供者。提供者接收316对这些承诺的开口,并且能够揭示指定的计量读数。
在一些实施例中,提供者能够发起新定价策略。为了确保账单生成器使用最新定价策略,提供者可以生成318新密钥对。将该新公钥通知给账单生成器,并随后用该新密钥来签署新定价策略并将其发送给322账单生成器。定价策略中可包括有效性时间段。
在该示例中,账单生成器向提供者揭示总费用,并且可通过任意支付渠道来支付该账单。在一些情况下,用户也可能想要隐藏总费用。这可以通过使用现在描述的预付费机制来实现。用户通过任意支付渠道来向提供者支付初始保证金。为了计算账单,账单生成器对保证金的新值(即,旧值减去该记账时间段期间的总费用)作出承诺,并以零知识来证明所承诺的值是保证金的正确更新且它是非负的,使得提供者可以检查用户仍然具有足够资金。
在图2和3的示例中,提供者以表的形式来发出离散定价策略,其中每一计量读数被映射到一价格或费用f。可使用其他类型的定价策略。例如,在可能的消费值的集合是大型集合的情况下,线性定价策略是有益的。线性策略指定每单位价格,而非指定每一可能消费的价格。例如,如果该策略说每单位价格是3并且消费是6,则应付款是18。在线性定价策略的情况下,账单生成器和提供者要证明和验证更多。各类型的定价策略的其他示例包括但不限于:区间策略、累积策略、以及由多项式函数定义的策略。区间策略对一定范围的消费量设置固定费用。累积策略考虑将消费值域分成各个区间,每一区间被映射到一价格,该价格是每消费单位的价格。
通过以这些方式来表示不同类型的定价策略,表达复杂的非线性定价策略是可能的。可以对任何时间间隔,如每天、每星期、或每月,应用任何策略。这些类型的策略的更多细节在下文给出。
在一些示例中,用户信任计量器。即,用户信任计量器不会泄露除计量读数之外的更多信息。现在参考图4来描述这一类型的实施例的示例,其中资源是可使用云计算、作为服务的软件、或以任何其他方式来提供的计算资源。然而,可使用任何其他合适的资源。
图4是用于对计算资源402的使用进行计量的保护隐私的计量系统的示意图。该计算资源可以是web服务,一个或多个CPU、GPU、或其他处理器,分布式计算资源,将软件作为服务来提供的一个或多个计算设备,社交网络服务,公共数据库,或其他计算资源。计算资源402可由用户设备400使用任何类型的通信网络404来访问。用户设备400可以是个人计算机、移动通信设备、膝上型计算机、个人数字助理、或能够使用通信网络404访问计算资源402的任何其他计算设备。
用户设备400包括监视用户设备400对计算资源的使用的计量器406。如上所述,计量器406在物理上和/或在功能上是防篡改的,并且如上所述被安排成提供经证实的计量读数和/或使用指定的承诺方案提供对计量读数的经证实的承诺。计量器406不必如图4中示出的那样与用户设备400集成在一起。计量器可以位于与用户设备400进行通信以使得它能够以准确且可证实的方式来监视用户108对计算资源的消费的任何位置。
用户设备400还包括保护隐私的账单生成器106,它与计量器406进行通信并且被安排成将零知识证明和保护隐私的账单发送给提供者114。如上所述,保护隐私的账单生成器106可以在远离用户设备400的其他位置处提供。
提供者114控制对计算资源402的使用并且根据一个或多个定价策略来向对计算资源402的使用进行收费。它包括被安排成验证由账单生成器提供的零知识证明的计算机实现的验证者116。
在安装了计量器之后,可以阻止该计量器与提供者之间的通信以保护用户的隐私。提供者能够与账单生成器进行通信来对用户的消费记账,并且在用户准许的情况下能够知道消费数据。
在图4的示例中,用户信任计量器。如上所述,计量器因而能够输出对计量读数的承诺而非实际计量读数本身。同样,计量器和提供者所使用的签名方案可以是或不是具有证明拥有签名的有效证明的可重新随机化的签名方案。可以使用不可伪造且可普遍验证的任何签名方案。不可伪造的签名方案是这样的签名方案:没有签名密钥的人在他们没有预先看到有效签名之前不能作出对消息的签名。可普遍验证的签名方案是这样的签名方案:具有公共验证密钥的任何人都可以验证签名消息对是真实的。
图5是诸如图4的账单生成器或保护隐私的计量系统中使用的任何其他账单生成器等账单生成器处的方法的流程图,其中用户信任计量器不会泄露除计量读数之外的任何信息。
如上所述,各方(计量器M、提供者P、以及账单生成器U)中的每一方生成公钥私钥对,并在可信登记实体处登记其公钥。提供者计算附加同态承诺方案的参数并将这些参数发送给计量器和账单生成器。不必使用附加同态承诺方案。
在初始化阶段,提供者能够选择将消费值映射到价格的定价策略。提供者签署该策略并将其发送给账单生成器。提供者稍后能够通过向账单生成器发送新签署的策略来更新定价策略。
参考图5,现在描述账单生成器处的示例过程。账单生成器接收并验证500经签署的定价策略上的签名。
账单生成器从计量器获取502对计量读数的经签署的承诺以及这些承诺的开口。例如,在记账时间段期间,计量器产生如以上参考图2所描述的元组(d,cons,other)。计量器对cons和other作出承诺,并随后计算这些承诺上的以及d上的签名sc。计量器将该消息签名对和这些承诺的开口发送给账单生成器。在该示例中,计量器分别对cons和other作出承诺。这使得U能够在揭示阶段选择性地向P公开一个值或另一个值。然而,在两个参数被一起公开或省去揭示阶段的应用中,计量器可在单个承诺中对这两个值作出承诺以提高效率。
对于对计量读数的每一经签署的承诺504,账单生成器获取计量读数并根据定价策略来计算506该计量读数的价格。它计算508对该价格的承诺。同样,它生成零知识证明,该零知识证明证明:
●账单生成器持有对计量读数的承诺的开口;
●账单生成器持有对价格的承诺的开口;
●账单生成器持有对定价策略的签名,该定价策略在被用于计算计量读数的价格时给出计算得到的价格。
如上所述,生成零知识证明的过程可包括生成质询和响应。
该零知识证明包括证明拥有签名的证明和证明拥有对承诺的开口的证明。这确保该证明不向提供者公开可用于找出消费值的任何细节。在这两种情况下,该零知识证明包括证明拥有将消费值从计量器映射到价格的信息上的签名的证明。
因为所使用的承诺方案是附加同态的,所以账单生成器能够合计512对价格的承诺的开口以获取对总费用的开口。这简化了账单生成器处的计算。在使用其他非同态承诺方案的情况下,总费用的开口是用任何其他合适的方式来计算得到的。例如,账单生成器可以构建对总费用的承诺并以零知识来证明这是对各部分费用的总和的承诺。
账单生成器签署支付消息并将其发送给514提供者。该支付消息包括对总费用的承诺、总费用的开口、对计量读数的经签署的承诺、对价格的承诺、以及零知识证明质询和响应。
在该示例中,对于每一504经签署的对计量读数的承诺,账单生成器计算对要支付的价格的承诺和证明这一价格正确的证明。为了证明总费用是所有所承诺的价格的总和,账单生成器向P提供所有承诺的开口的总和。在不知道总费用时,计算每一元组的承诺和证明使得账单生成器能够从记账时间段的开头来开始账单的计算。
在支付消息的计算被延迟直至账单生成器知道了元组为止的应用中,避免对价格的承诺的计算以及避免对每一元组计算证明知晓的一个证明是可能的。相反,对每一账单消息计算证明知晓的一个零知识证明是可能的。该证明示出要为每一元组支付的价格的总和等于总费用。
参考图6,现在给出提供者处的示例方法以与图5的示例方法结合使用。提供者接收600来自账单生成器的支付消息并验证签名以确信该消息实际上是从账单生成器接收到的。提供者还验证602计量器在对计量读数的承诺上的签名。以此方式,提供者确信计量读数确实实际上源自该计量器。
提供者处的验证者验证604零知识证明。例如,这包括给定来自账单生成器的质询和响应来计算承诺。验证者重新计算质询并检查它是否等于账单生成器给出的质询。
验证者合计606对价格的承诺以获取对总费用的承诺。它检查608在支付消息中接收到的开口是否是所合计的承诺的有效开口并从如果是则获取总费用。验证者还检查610对计量读数的承诺是顺序的并且没有计量读数被省去。在一些情况下,提供者可以请求612账单生成器揭示一些特定计量读数。这是可任选步骤。响应于这样的请求,在用户给出了用于公开该信息的授权的情况下,提供者可以接收614对指定计量读数的承诺的开口。在这种情况下,计量读数不能被伪造,并且提供者能够向第三方证明它们正确或不正确。
现在给出实现图5和6的方法的协议的详细示例。
在该示例中,使用包括算法(Keygen;Sign;Verify)(密钥生成器;签署;验证)的签名方案。Keygen(1k)输出密钥对(sk,pk)。Sign(sk,m)输出消息m上的签名s。如果s是m上的有效签名,则Verify(pk,s,m)输出接受(accept),都则输出拒绝(reject)。这一定义可被扩展以支持多块消息m={m1,...,mn}。提供了不可伪造性,由此p.p.t.(概率性多项式时间)对手不能够输出消息-签名对(s,m),除非该对手先前获得了m上的签名。
在该示例中,使用了包括算法ComSetup(设置承诺)、Commit(承诺)、以及Open(开启)的非交互式承诺方案。ComSetup(1
k)生成承诺方案的参数par
c。Commit(par
c,x)输出对x的承诺c
x以及辅助信息open
x。承诺是通过揭示(x,open
x)并检查Open(par
c,c
x,c,open
x)是否输出接受来开启的。承诺方案具有隐藏属性和绑定属性。简言之,隐藏属性确保对x的承诺c
x不揭示关于x的任何信息,而绑定属性确保c
x不对另一值x′开启。如果给定分别具有开口
和
的两个承诺
和
存在一运算使得在
的情况下
输出接受,则说承诺方案是附加同态的。另外,承诺方案还可提供承诺
与值x
2之间的运算⊙,
使得在
的情况下
输出接受。
在该示例中,使用陷门承诺方案,其中算法ComSetup(1k)生成parc和陷门td。给定具有开口的承诺c和值x2,陷门td允许找出使得算法 输出接受。
在该示例中,证明知晓的零知识证明是证明者与验证者之间的双方协议。证明者向验证者证明知晓某些秘密输入(证明),该秘密输入可以在不向验证者公开这一输入的情况下满足某一声明。该协议满足两个属性。第一,它是证明知晓的证明,即证明者在不知道秘密输入的情况下基本不可能使验证者信服。技术上而言,基本上不可能存在从成功的证明者提取秘密输入的知识提取器。第二,它是零知识,即验证者除了该声明的真实性之外不知道任何事。技术上而言,对于可能的验证者,存在着这样的仿真器:在不知道秘密输入的情况下,它产生不能与同真实证明者的交互区分开的分布。证明不可区分性是要求该证明不揭示证明者(在所有可能的证明中)使用的那些证明的较弱属性。
在该示例中,账单生成器可以使用以下证明中的任何一个或多个来生成零知识证明:证明知晓秘密算法的证明;证明知晓不同表示中的某一元素的等同性的证明;具有区间检查的证明、范围证明、以及前述证明中的任何两个的分开或结合的证明。这些结果通常以∑protocol(∑协议)的形式给出,但在随机谕示(oracle)模型中它们可经由Fiat-Shamir试探法被转换成非交互式零知识论据。
在引用上述证明时,本文遵循Camenisch和Stadler对证明知晓离散算法的各种证明和证明与离散算法有关的声明的有效性的证明引入的记法。
其中y,g
0,g
1,
是具有相同次数的一些群y,g
0,g
1,
的元素。(注意,y和
的表示中的一些元素是相同的)。约定如下:圆括号中的字母(在该示例中是α、β、和δ)表示已证明知晓的数量值,而其他值对验证者而言是已知的。在本文中,证明拥有签名的非交互式证明表示为NIPK{(x,s
x):Verify(pk,x,s
x)=接受}。
在该示例中,M、U、以及P所使用的签名方案表示为:(Mkeygen;Msign;Mverify)、(Ukeygen;Usign;Uverify)、以及(Pkeygen;Psign;Pverify)。H表示抗冲突散列函数。在设置阶段,M运行Mkeygen(1k)来获取密钥对(skM,pkM),U运行Ukeygen(1k)来获取密钥对(skU,pkU),且P运行Pkeygen(1k)来获取密钥对(skP,pkP)。每一方向可信登记实体登记其公钥,并通过查询该可信登记实体来检索来自其他方的公钥。P运行ComSetup(1k)来获取parc和陷门td,计算证明π=NIPK{(td):(parc,td)←ComSetup(1k)}并将(parc,π)发送给U且将(parc)发送给M。U验证π。
提供隐私的计量的示例协议包括以下阶段,初始化、消费、支付、以及揭示。现在更详细地描述这些阶段。
初始化。
在用(策略,Υ)激活P时,P运行SignPolicy(skp,Υ)(签署策略)来获取经签署的策略Υs。P将Υs发送给U。U运行VerifyPolicy(pkP,Υs)(验证策略)来获取一个位b。如果b=0,则U拒绝该策略。否则,U存储Υs。
消费。
在用(consume,cons,other)((消费,消费,其他))激活M时,M使计数器dM(初始化为0)递增,并运行SignConsumption(skM,parc,cons,other,dM)(签署消费)来获取经签署的消费SC。M将(SC)发送给U。U递增计数器dU并运行VerifyConsumption(pkM,parc,SC,du)(验证消费)来获取一个位b。如果b=0,则U拒绝SC并向P发送指示计量器不正常工作的消息。否则,U将SC附加到存储所有消费的表T。
支付。
在用(payment)(支付)激活P时,P将(payment)发送给U。令N是U自接收到前一消息(payment)以来接收到的(consume,...)(消费)消息的数量。U运行Pay(skU,parc,Υs,T[dU-N:dU])(支付)来获取支付消息Q并将(Q)发送给P。P运行VerifyPayment(pkM,pkU,pkP,parc,Q,dP)(验证支付)来获取(b,d′P)。如果b=0,则P拒绝该支付,而否则接受它并设置dP=d′P。
揭示。
在用(reveal,i)(揭示)激活P时,P检查i∈[0,dP]并且将(i)发送给U。U运行Reveal(skU,T,i)(揭示)来获取开口消息R并将(R)发送给P。P选取包含i的支付消息Q并运行VerifyReveal(pkU,parc,Q,R,i)(验证揭示)来获取一个位b。如果b=0,则P将(reject,Q,R)(拒绝)发送给U,而否则它将(accept)(接受)发送给U。
现在指定在各示例协议阶段中使用的函数的示例。
SignPolicy(skP,Υ)。
对于每一元组(cons,other,price)∈Υ,计算sp=Psign(sk
P<cons,other,price>)。(如以下更详细地描述的,签署元组(cons,other,price)(消费,其他,价格)的方式取决于要被签署的特定策略Υ。)令
是消息-签名元组的集合。输出Υ
s。
VerifyPolicy(pkP,Υs)。
对于i=1到n,将Υ
s解析成
且对于i=1到n,运行Pverify(pk
P,sp
i,<cons
i,other
i,price
i>)。如果这些输出中的任一个是拒绝,则输出b=0,而否则输出b=1。
SignConsumption(skM,parc,cons,other,dM)。
执行(ccons,opencons)=Commit(parc,cons)和(Cother,openother)=Commit(parc,other)两者。运行sc=Msign(skM,<dM,ccons,cother>)并输出SC=(dM,cons,opencons,ccons,other,openother,cother,sc)。
VerifyConsumption(pkM,parc,SC,dU).
将消息SC解析成(dM,cons,opencons,ccons,other,openother,cother,sc)。计算Open(parc,ccons,cons,opencons)和Open(parc,cother,other,openother),并且如果它们中的任一个输出拒绝则输出b=0。运行Mverify(pkM,sc,<dU,ccons,cother>)并且如果该输出是拒绝则输出b=0。否则输出b=1。
Pay(skU,parc,Υs,T)。
对于每一条目(dM,cons,opencons,ccons,other,openother,cother,sc)∈T,计算price(价格)=Υ(cons,other),运行(cprice,openprice)=Commit(parc,price)并计算非交互式的证明不可区分开的证明π:1
NIPK{(price,openprice,cons,opencons,other,openother,sp):
(ccons,opencons)=Commit(parc,cons)∧
(cother,openother)=Commit(parc,other)∧
(cprice,openprice)=Commit(parc,price)∧
Pverify(pkP,sp,<cons,other,price>)=accept}
令N是T中的条目的数量。计算总费用
并添加所有开口
以获取对费用的承诺的开口。将支付消息设为
计算签名
2sp=Usign(sk
U,p)并将支付消息设为Q=(p,s
p)。
VerifyPayment(pkM,pkU,pkP,parc,Q,dp)(验证支付)。
将Q解析成(p,s
p)并运行Uverify(pk
U,s
p,p)。如果它拒绝则输出b=0。否则,将p解析成
并且对于i=1到N,递增d
p,运行Mverify(pk
M,sc
i,<d
p,c
cons,c
other,>)并验证π
i。如果签名或证明中的任一个是不正确的,则输出b=0。添加对价格的承诺
并执行Open(par
c,c′
fee,fee,open
fee)。如果输出是接受,则设b=1而否则b=0。输出(b,d
p)。
Reveal(skU,T,i)。
选取条目(i,...)∈T中的元组r=(i,cons,opencons,other,openother),签署sr=Usign(skU,r)并输出R=(r,sr)。
VerifyReveal(pkU,parc,Q,R,j).
将Q解析成(p,s
p)并将p解析成
选取元组
使得d
i=j。将R解析成(r,s
r)并将r解析成(i,cons,open
cons,other,open
other)。运行算法Open(parc,c
cons,cons,open
cons)和
如果这两个算法输出接受,则输出b=1而否则b=0。
如上所述,提供者能够使用不同形式的定价策略。例如,离散定价策略、线性定价策略、累积定价策略、以及由一个或多个多项式定义的定价策略。签署元组(cons;other;price)的方式取决于要签署的特定形式的策略,并且这进而影响零知识证明所需要示出的事物。现在一起给出不同类型的定价策略的示例和对于这些类型的定价策略中的每一类型的签署元组的方法的示例,以及如何生成每一类型的定价策略的适当的零知识证明的示例。一般而言,越复杂的定价策略需要越复杂的零知识证明,因为要证明的事物越多。用于定价策略的数据结构以及经签署的元组的仔细设计因而是重要的,因为它影响账单生成器和验证者处的计算复杂度和效率。在以上参考图2和3讨论的示例中,使用离散定价策略。然而,这不是必需的。通过使用数据结构和签署元组的方法并生成现在描述的零知识证明,图2和3的方法可被安排成与其他类型的定价策略一起操作。
离散定价策略。
离散定价策略考虑由n个元组(cons,other)描述的离散域。每一元组被映射到价格price。为了签署该策略,对于i=1到n,P运行sp
i=Psign(sk
P,<cons
i,other
i,price
i>),并设置
为了计算证明π,U使用SC中包括的对消费的承诺ccons和对其他参数的承诺cother,并对(cons,other)的策略中指定的价格作出承诺(cprice,openprice,)=Commit(parc,price)。U证明拥有(cons,other,price)上的签名sp∈Υs以及经签署的值与在(ccons,cother,cprice)中承诺的值之间的等同性。非交互式零知识证明(NIPK)随后变成:
NIPK{(price,openprice,cons,opencons,other,openother,sp):
(ccons,opencons)=Commit(parc,cons)∧
(cother,openother)=Commit(parc,other)∧
(cprice,openprice)=Commit(parc,price)∧
Pverify(pkP,sp,<cons,other,price>)=accept}
线性定价策略。
离散策略在可能的消费值的集合是有限的且是小型的情况下是有益的。否则,签署所有可能的元组(cons,other)是低效的。线性策略指定每单位价格,而非指定每一可能消费的价格。例如,如果该策略说每单位价格是3并且消费是6,则应付款是18。因此,因为线性策略指定每消费单位的价格,所以它由Υ:other→price给出。参数other表示影响每单位价格的任何变量,例如消费发生的时间间隔。
为了签署该策略,对于i=1到n,P运行sp
i=Psign(sk
P,<other
i,price
i>),并设置
为了计算证明π,U使用sc中包括的对消费的承诺c
cons和对其他参数的承诺c
other,并对总价格
作出承诺。(总价格等于price
t=price·cons,其中price=Υ(other)。)
随后,U计算证明拥有(other,price)上的签名sp∈Υ
s的证明、证明other与c
other中承诺的值之间的等同性的证明、以及证明
中承诺的price
t等于price·cons的证明。证明知晓的非交互式证明随后变成:
NIPK{(price,openprice,cons,opencons,other,openother,sp):
(ccons,opencons)=Commit(parc,cons)∧
(cother,openother)=Commit(parc,other)∧
(cprice,openprice)=Commit(parc,price)∧
Pverify(pkP,sp,<cons,other,price>)=accept}
区间定价策略。
在区间策略中,消费值域被分成各个区间,并且每一区间被映射到一价格。例如,如果该策略说4和7之间的所有消费必须支付价格3并且消费是5,则应付款是3。因此,区间策略由Υ:(consmin,consmax,other)→price给出,其中要求[consmin,consmax]所定义的区间是不相交的。
为了签署该策略,对于i=1到n,P运行
并设置
(注意如果π是单调函数,则足以签署cons
max(在该函数是增函数的情况下)或cons
min(在该函数是减函数的情况下))。为了计算证明π,U使用SC中包括的对消费的承诺c
cons和对其他参数的承诺c
other,并对(cons
min,cons
max,other)的策略中指定的价格(c
price,open
price)=Commit(par
c,price)作出承诺,使得cons∈[cons
min,cons
max]。随后,U计算证明拥有(cons
min,cons
max,other,price)上的签名sp∈Υ
s的证明、证明(other,price)与(c
other,c
price)中承诺的值之间的等同性的证明、以及证明cons∈[cons
min,cons
max]的证明。如果策略是单调递增的,则它足以证明∈[0,cons
max],而如果它是单调递减的,则它足以证明cons∈[cons
min,∞]。证明知晓的非交互式证明随后变成:
NIPK{(price,openprice,cons,opencons,other,openother,consmin,consmax,sp):
(ccons,opencons)=Commit(parc,cons)∧
(cother,openother)=Commit(parc,other)∧
(cprice,openprice)=Commit(parc,price)∧
Pverify(pkP,sp,<cons,other,price>)=accept∧
cons∈[consmin,consmax]}
累积定价策略。
如在区间策略的情况下一样,消费值域被分成各个区间并且每一区间被映射到一价格。然而,在这种情况下,这一价格是每消费单位价格。应付款是策略Υ在区间[0,cons]上的定积分。例如,令Υ是如下策略:[0,3]→2,(3,7]→5,(7,∞),(未使用参数other),并且令消费为9。则应付款是3×2+4×5+2×8=42。因此,累积策略由Υ:(cons
min,cons
max,F,other)→price给出,其中要求[cons
min,cons
max]所定义的区间是不相交的。F是Υ在[0,cons
min]上的定积分。为了签署该策略,对于i=1到n,P运行
并设置
在先前示例中,要签署的元组是(0,3,0,⊥,2),(3,7,6,⊥,5)以及(7,max,26,⊥,8)(max表示最大消费)。为了计算证明π,U使用sc中包括的对消费的承诺c
cons和对其他参数的承诺c
other,并对要支付的价格
作出承诺,它等于price
t=(cons-cons
min)×price+F)。随后,U计算证明拥有(cons
min,cons
max,F,other,price)上的签名sp∈Υ
s的证明、证明(other)与c
other中承诺的值之间的等同性的证明、以及证明cons∈[cons
min,cons
max]的证明、以及证明price
t=(cons-cons
min)×price+F的证明。证明知晓的非交互式证明随后变成:
其他定价策略。
另一可能的定价策略Υ是由多项式函数
在交换环R上定义的,在一实现中这由整数对非素数取模来给出。这给出了任何定价策略可被近似成任意精度的益处。应付款是Υ在输入消费x=cons上的估计。
令n是定义该策略的多项式的数量(例如,它们中的每一个与不同的参数other相关联)。为了签署该策略,对于i=1到n,P运行sp
i=Psign(sk
P,<a
Ni,...,a
0i,other
i>),并设置
为了计算证明π,U使用sc中包括的对消费的承诺c
cons和对其他参数的承诺c
other,并对要支付的价格
作出承诺,它等于
随后,U计算证明拥有(a
N,...,a
0,other)上的签名sp∈Υ
s的证明、证明(other)与c
other中承诺的值之间的等同性的证明、以及证明
的证明。证明知晓的非交互式证明随后变成:
现在给出可以使用的承诺方案、签名方案、以及证明知晓的非交互式证明的具体示例。这些仅是示例。
如现在描述的,可以使用整数承诺方案。
对于示例整数承诺方案,令ln是RSA对n所取的模的位长度且lr是安全参数的位长度。示例值是ln=2048且lr=80。该方案随后变成:
CompSetup(1k)。给定RSA模数,选取随机生成器h∈QRn。选取随机且对于=1到k,计算输出承诺参数parc=(g1,...,gk,h,n)和陷门td=(α1,...,αk)。
Commit(par
c,<m
1,...,m
k>)。在长度l
m的输入整数(m
1,...,m
k)上,选择随机
并计算
(对n取模)。输出承诺c和开口open。
Open(par
c,c,<m′
1,...,m′
k>,open′)。在输入整数(m′
1,...,m′
k)和open′上,计算
(mod n)并检查是否c=c′。
签名方案。
M和U的签名方案可用于任何现有的不可伪造的签名方案来实例化。在一些示例中,对于P的签名方案,可以使用现在描述的Camenisch和Lysyanskaya签名方案。在此描述的各实施例中,这是有益的,因为它是可部分随机化的并且具有证明拥有签名的有效证明。
Keygen(1
k)。在输入1
k上,生成长度k的两个素数p、q,使得p=2p′+1且q=2q′+1,其中p′和q′也是素数。长度l
n的RSA模被定义成n=pq。输出密钥sk=(p,q)。均匀随机地选择S←QR
n,以及R
1,...,R
k,Z←<S>。计算非交互式零知识证明
输出公钥pk=(n,R
1,...,R
k,S,Z,π)。
Sign(sk,<m1,...,mk>)。在长度lm的输入消息(m1,...,mk)上,选择长度le>lm+2的随机素数e和长度lv=ln+lm+lr的随机数v。计算值A,使得 输出签名s=(e,A,v)。
Verify(pk,s,<m1,...,mk>)。在输入消息(m1,...,mk)和签名s=(e,A,v)上,检查 mi∈±{0,1}lm,以及
示例值是ln=2048,lr=80,lm=256,le=597,lv=2724([29])。
现在给出组成在各实施例中使用的非交互式零知识证明的基本构件块的示例。这样的非交互式零知识证明包括这些构件块中的一些的组合。基本构件块可以是证明拥有Camenisch-Lysyanskaya签名的非交互式零知识证明、证明承诺值是两个承诺值的积的证明、以及证明承诺值处于区间内的证明。
为了证明拥有Camenisch-Lysyanskaya签名,一种示例方法是:
给定消息(m
1,...,m
k)上的签名s=(e,A,v),通过选取随机
和计算(e,A′=AS
-r(mod n),v′=v+er)来随机化s。另外,设
将A′与以下非交互式零知识证明一起发送给验证者:
经由以下Fiat-Shamir试探法,这一证明变成非交互式零知识论据。(各实施例中的其他证明可以经由该Fiat-Shamir试探法以类似的方式来计算。)令H是被建模成随机谕示的散列函数。提供者选取随机值:
其中l
H是质询的大小,
控制统计零知识且
是确定从中取出e以完成具有区间检查
的证明的区间的位长度。证明者计算承诺
和质询ch=H(n||A′||R
1||...||R
k||S||Z||t
Z)。证明者计算响应:
se =re-ch·e′
sv′ =rv′-ch·v′
并向验证者发送
验证者计算
验证是否ch=H(n||A′||R
1||...||R
k||S||Z||t
Z),并运行区间检查
和
参数的示例值是且l′e=120。
为了证明
中承诺的消息m
3是分别在
和
中承诺的两个消息m
1和m
2的积,可以使用以下证明:
为了证明所承诺的值x处于区间[a,b]内,示出了x-a≥0且b-x≥0。例如,非交互式零知识证明可被用来证明整数m≥0。该证明基于以下事实:任何正整数m的形式为4m+1可被写成三个平方的总和a2+b2+d2。因此,为了证明m≥0,该方法证明4m+1=a2+b2+d2。值(a,b,d)可以经由Rabin-Shallit算法来计算。证明是:
现在给出用于保护隐私的计量的系统的示例,其中定价策略是每单位费用定价策略(其是公用域)并且计量读数在指定的时间间隔(其是公用域)取得。该示例特别适用于公用事业计量,其中计量读数通常在指定的时间间隔(如每一个半小时)取得,并且这一信息以及定价策略是公共的。在该示例中,计量器是可信的,即用户信任计量器除计量读数之外不泄露任何信息。参考图7,计量器700提供每一公共的固定时间间隔t的经证实的读数。这些计量读数可以是以上针对其他实施例描述的元组。如上所述,计量器是防篡改的并且可以是智能公用事业计量器。如上所述,经证实的计量读数被提供给作为用户708的代理的保护隐私的账单生成器706。诸如要由用户消费的电力或水公用事业等资源的提供者714具有计算机实现的以阻止716并存储一个或多个公用域定价策略718,该定价策略是每单位费用类型的定价策略(也被称为线性定价策略)。提供者能够域计量器700进行通信,但这不是必需的。提供者将经证实的定价策略710发送给账单生成器706。账单生成器使用经证实的计量读数704和经证实的定价策略710来生成不向提供者公开用户的消费数据的账单。账单生成器706还生成证明712(在这种情况下不需要是零知识)并将该证明与账单一起发送给提供者。该证明由验证者716验证以在无需向提供者公开用户的消费数据的情况下示出该账单是正确的。
在该示例中,账单生成器处的方法可以如下。参考图8,账单生成器接收并验证800经签署的表的形式的经签署的定价策略,该表的每一行具有时间和要用于该时间的计量读数的费用。因为签署了整个表而非签署每一单独的表行,所以获得了效率。以与参考图5所描述的相同的方式,账单生成器接收802对计量读数的一批经签署的承诺以及这些承诺的开口。账单生成器计算804对总价格的承诺并使用支付消息将该承诺及其开口发送给806提供者。账单生成器形成证明806,证明:账单生成器持有定价策略表上的签名,以及所承诺的总价格等于各单独费用乘以各单独消费值。因为定价策略是公用域并且计量读数区间是公用域,所以该证明不必是零知识。与图3和5相比,该证明的计算因而被简化。账单生成器将经签署的支付消息发送给808提供者,该支付消息包括对总价格的承诺、该承诺的开口、对计量读数的经签署的承诺、以及证明。
提供者处的验证者接收支付消息并验证其签名并验证证明。它开启对总价格的承诺。
现在描述其中定价策略是公用域并且定价策略包括形式为price=a1·cons+a0的线性公式的详细示例。这一示例是避免使用非交互式零知识证明的有效构造。这一示例使用用给定对消费值的承诺来允许计算对价格的承诺的两个运算和⊙(在此描述)来提供的承诺方案。
在这种情况下,用于提供隐私的计量的示例协议包括以下阶段:
初始化
在用(policy,Υ)(策略)激活P时,其中Υ是线性策略,P发布唯一的策略标识符idi并将(idi,Υ)发送给U。
消费
这一阶段如在本文中早先描述的一样。
支付
在用(payment)激活P时,P将(payment)发送给U。令N为U自接收到前一消息(payment)以来接收到的(consume,...)消息的数量。U运行EffPay(skU,parc,idΥ,Υ,T[dU-N:dU])来获取支付消息Q并将(Q)发送给P。
P运行EffVerifyPayment(pkM,pkU,parc,idΥ,Q,dP)(验证支付)来获取(b,d′P)。如果b=0,则P拒绝该支付,而否则接受它并设置dP=d′P。
揭示
这一阶段如在本文中早先描述的一样。
现在指定在各示例协议阶段中使用的函数的示例。
EffPay(sk
U,par
c,id
Υ,Υ,T)。对于每一表条目(d
M,cons,open
cons,c
cons,other,open
other,c
other,sc)∈T,计算price=a
1·cons+a
0以及open
price=open
cons·a。令N是T中的条目的数量。计算总费用
并添加所有开口
以获取对费用的承诺的开口。将支付消息设为
计算签名s
p=Usign(sk
U,p)并将支付消息设为Q=(p,s
p)。如果p不属于该签名方案的消息空间,则签署H(p),其中H是值域为该签名方案的消息空间的抗冲突散列函数。
EffVerifyPayment(pk
M,pk
U,par
c,id
Υ,Q,d
P).将Q解析成(p,s
p)并运行Uverify(pk
U,s
p,p)。如果它拒绝则输出b=0。否则,将p解析成
检查id
Υ=id
Υ′,并且对于i=1到N,递增d
P并运行
如果签名或证明中的任一个是不正确的,则输出b=0。计算对价格的承诺
将它们相加
并执行Open(par
c,c′
fee,fee,open
fee)。如果输出是接受,则设b=1,否则b=0。输出(b,d
P)。
这一方案的安全性依赖于签名方案的不可伪造性以及承诺方案的绑定和隐藏属性。引入策略标识符idΥ以确保U和P采用由P先前公布的策略来计算并验证支付消息。
图9示出可以被实现为任何形式的计算和/或电子设备并且可以在其中实现保护隐私的计量系统中的一实体的实施例的示例性基于计算的设备900的各组件。例如,智能计量器、账单生成器、或账单验证者。
基于计算的设备900包括一个或多个处理器902,该一个或多个处理器可以是用于处理计算可执行指令以控制设备的操作以便提供保护隐私的计量系统的至少一部分的微处理器、控制器、或任何其他合适类型的处理器。例如,通过提供包括账单生成器或账单验证者的智能计量器,账单生成器能够生成保护隐私的账单和用于证实该账单的零知识证明,账单验证者能够验证账单,该账单与证实该账单的零知识证明一起提供。可以在基于计算的设备上提供包括操作系统904的平台软件或任何其他合适的平台软件,以允许应用程序软件906在设备上执行。
可以使用可由基于计算的设备900访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如诸如存储器918等计算机存储介质和通信介质。诸如存储器918等计算机存储介质包括以用于存储如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EPROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储或其他磁存储设备,或者可用于存储供计算设备访问的信息的任何其他介质。相反,通信介质可以以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或者其他数据。虽然在基于计算的设备900中示出了计算机存储介质(存储器918),但将明白,该存储可以是分布式的或位于远处并经由网络或其他通信链路(例如,使用通信接口914)来访问。
该基于计算的设备包括使它能够通过通信网络924与其他实体进行通信的通信接口914。
基于计算的设备900还包括被安排成向可与基于计算的设备900分开或集成在一起的显示设备920输出显示信息的输入/输出控制器916。显示信息可以提供图形用户界面。输入/输出控制器916还被安排成接收并处理来自一个或多个设备的输入,如用户输入设备922(例如,鼠标或键盘)。这一用户输入可被用来控制该设备以生成保护隐私的账单或验证这些账单。在该设备是智能计量器的各实施例中,可以使用用户输入来控制由智能计量器来进行计量的对资源的使用。在一实施例中,如果显示设备920是触敏显示设备,则它还可担当用户输入设备922。输入/输出控制器916还向除显示设备之外的设备输出数据,例如,本地连接的打印机。
此处使用的术语‘计算机’指的是具有处理能力以使其能够执行指令的任何设备。本领域技术人员将认识到这些处理能力被结合到许多不同设备中,并且因此术语‘计算机’包括PC、服务器、移动电话、个人数字助理和许多其他设备。
本文描述的方法可由有形存储介质上的机器可读形式的软件来执行,例如计算机程序的形式,该计算机程序包括在该程序在计算机上运行时适用于执行本文描述的任何方法的所有步骤的计算机程序代码装置并且其中该计算机程序可被包括在计算机可读介质上。有形(或非暂态)存储介质的示例可包括盘、拇指型驱动器、存储器等并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行以使得各方法步骤可以按任何合适的次序或同时执行。
这确认了软件可以是有价值的、可单独交易的商品。它旨在包含运行于或者控制“哑”或标准硬件以实现所需功能的软件。它还旨在包含例如用于设计硅芯片,或者用于配置通用可编程芯片的HDL(硬件描述语言)软件等“描述”或者定义硬件配置以实现期望功能的软件。
本领域技术人员将认识到用于存储程序指令的存储设备可分布在网络上。例如,远程计算机可存储描述为软件的该过程的示例。本地或终端计算机可访问远程计算机并下载该软件的一部分或全部以运行该程序。或者,本地计算机可按需下载软件的片断,或可以在本地终端处执行一些软件指令而在远程计算机(或计算机网络)处执行一些软件指令。本领域技术人员将认识到,通过使用本领域技术人员已知的常规技术,软件指令的全部或部分可由诸如DSP、可编程逻辑阵列等专用电路来执行。
如本领域技术人员将清楚的,此处给出的任何范围或者设备值都可以被扩展或者改变而不失去所寻求的效果。
可以理解,上述各好处和优点可涉及一个实施例或者可涉及若干实施例。各实施例不限于解决所述问题中的任一个或全部的实施例或具有所述好处和优点中的任一个或全部的实施例。还可以理解,对‘一个’项目的引用指的是这些项目中的一个或多个。
本文中描述的各方法步骤可以在适当时按任何合适的次序或同时执行。另外,可从任一种方法中删除各个框,而不背离此处所述的主题的精神和范围。上述示例中的任一个的各方面可以与所述其他示例中的任一个的各方面组合以形成其他示例而不失去所寻求的效果。
术语‘包括’此处用来指包括所标识的方法框或元素,但这些框或元素不构成排他列表,并且方法或装置可包含附加框或元素。
可以理解,上面对于较佳实施例的描述仅仅是作为示例给出的,而本领域的技术人员可以做出各种修改。以上说明、示例和数据提供了对本发明的各示例性实施例的结构和使用的全面描述。虽然上文以一定的详细度或参考一个或多个单个实施例描述了本发明的各实施例,但是,在不偏离本发明的精神或范围的情况下,本领域的技术人员可以对所公开的实施例作出很多更改。