一种基于区块链的软件许可验证方法

本次整理一篇来自2015年ACSC会议的论文,主要内容是使用区块链解决软件许可验证问题,其信息在这里

内容简介

自从19世纪70年代晚期开始,保护软件版权就成为了一个问题。软件授权的验证成为减少盗版、保护版权的主要方法。本文展示了一种全新的方法,使用密码货币式的区块链,去中心化、点对点地进行软件许可验证,以减少盗版,为所有的软件开发者提供一种保护版权的方法。

概述

背景

验证软件授权的方法主要可分为三大类:

  • 使用记录在纸上的密钥进行激活
  • 使用在线注册验证软件授权
  • 使用硬件设备

小型厂商通常使用激活密钥,而像Microsoft、Adobe这样的大型厂商一般使用专有的、基于网络的软件中心化验证服务作为主要方法。

由于软件日益复杂、销售渠道多样,以及技术与经济结合造成的原因,软件许可验证的复杂度逐渐增加。这篇文章利用了与比特币类似的区块链,为去中心化、点对点、公众可审计、从小型开发者到大型公司都可使用的软件许可验证提供了方法。

文章首先介绍了区块链的功能,讨论去中心化点对点体系的优势。之后,概述基于区块链的软件许可验证,介绍其事务消息和流程的构造,并探讨未来的可能性及问题。

软件许可验证

商业软件联盟(Business Software Alliance,BSA)将盗版软件定义为未经授权的复制或发行具有版权的软件,包括下载、共享、销售或安装许可软件的多个副本。互联网为盗版软件提供了便利的媒介,使参与者可以轻松下载具有版权的软件,将盗版全球化,且在法律层面难以管理。据BSA估计,在2013年,家用电脑上有43%的软件没有被正常授权,其商业价值约62.7B美元。

从19世纪80年代开始,保护软件所有者版权的方法开始提出和实现。Suhler等人提出成功的软件许可验证应该是价格低廉、多系统兼容、易于实现的。在阶段初,最有效的方法由于受加密、硬件、计算能力的限制未能应用。而随着网络的发展,新的方法成为可能。Peyravian等人提出一种新型的C/S软件许可验证方法,使用网络数据库进行软件许可验证,并检测软件安装的硬件平台特征。诸如Microsoft、Adobe这样的大型厂商已经采用了这种方法。然而,在线验证在客户管理方面需要很大的开销,维护个人信息和验证方法的安全可通过简单的方式破解,例如使用DNS重定向伪造身份验证服务器、修改代码删除软件许可验证子程序,或者可以通过复制密钥规避许可协议模型,如同一许可密钥在多个设备上安装。

软件许可验证方法需求

Suhler等人提出成功的软件许可验证应该是价格低廉、多系统兼容、易于实现的。此外,为有效防止盗版,一个成功的软件许可验证方法应满足以下条件:

  • 许可机制难以复制
  • 软件授权易于验证
  • 软件许可不能重复生成
  • 验证应能防止中间人攻击

因此,需要一种能够产生独一许可的机制,许可不能被重新生成,但是可以在任何时候轻松进行验证。像比特币这样的加密货币已经提供了软件许可验证所需的基本构件。比特币被表示为密码验证的数字签名,因此无法复制,而分散的交易功能可以防止比特币的双重支出,确保比特币的数字签名不能重复生成和使用。最后,比特币交易使用公钥加密技术加密,以防止中间人攻击。因此,为了满足软件许可验证所列出的前提,文章提出了一个加密货币区块链,以创建一种新的软件许可验证机制。

有关区块链与比特币的知识,本篇博文不再介绍,可参考本博客其它文章。

去中心化的软件许可验证

下文用比特币描述一枚来自于某种密码货币的虚拟硬币。可以利用区块链的特点提供由所有最终用户拥有的软件许可。通过去中心化、点对点的区块链结构,任意软件厂家或开发者可以快速容易地为用户分配许可。去中心化的软件许可验证,其准则是使用用户持有的比特币代表其对软件拥有的权利。

下面讨论两种利用比特币进行软件许可验证的方法,分别是Master比特币模型与Bespoke模型。

Master比特币模型

Master比特币模型是Fortin于2011年提出的软件许可验证的基本形式,由Lebo于2014年在一个名为“dissent”的概念项目的证明中实现,使用Namecoin作为基础区块链。在这个模型中,供应商地址/比特币的组合代表了许可所有权,如果用户有一个显示来自特定供应商地址的比特币的交易,用户就被认为拥有该软件的所有权。Master比特币的所有权也可以在用户间转移。

在Master比特币模型中,比特币的价值并不重要,重要的是来自原始Master比特币的交易历史。如果一个Master比特币售出,最大的比特币接收者是持有Master比特币的人,或者在交易链中拥有最低地址(字母数字)的拥有者。这一属性建立了比特币的不可分割的所有权,允许所有权转移。

总而言之,通过使用一个特定区块链地址来表示一个特定的软件应用程序,Master比特币模型可以用来提供不可否认的证明,它是源于特定地址的比特币的所有权,从而赋予了用户软件许可的权利。但是,软件应用程序需要有能力读取区块链来为用户建立授权。

Bespoke模型

讨论Bespoke模型时,使用令牌(Token)作为数字签名,代表某个特定软件的所有权。这里不使用比特币,因为这个许可验证模型没有使用数字签名代表虚拟货币。从特定供应商地址持有特定令牌的用户地址有权获得软件许可,因此有权使用该软件。因此,供应商/令牌组合代表了使用该软件的权利。

Bespoke模型使用自定义的区块链交易规范,其中包括针对灵活的软件许可验证模式需求定制的其他字段。这将提供在现代技术环境中广泛的用户和许可模型所需要的范围。我们还可以提供几个有用的机制,添加额外的字段,使用区块链作为许可验证、许可升级、所有权转移甚至软件完整性检查的基础。这些字段作为数据存储在区块链上,使用内置的公钥/私钥机制加密。原则上,软件供应商使用用户的公钥对被放置到字段中的数据进行加密,并使用用户的私钥对字段进行解密。用户可以通过供应商的公钥确认交易完整性签名。

下面介绍文中提及的几个字段:

  • 令牌(Token)。令牌用于标准的许可验证机制,令牌的所有权代表权利。令牌可以用于软件许可验证操作,例如用于软件升级,或者为交易提供一个独特的属性,比如“前100个购买者”,这在将来可能具有可收集的价值。
  • 许可密钥。许可密钥比Master比特币模型更具有优势,因为许多软件应用程序在每个特性基础上激活的应用程序具有特定的特性。将许可密钥安全地保存在区块链上意味着软件供应商可以很容易地启用“功能激活”,并具有软件应用许可模型的灵活性,用户可以在一小段时间内租用软件,而不是按月购买或租用。
  • 哈希值。软件提供商可以在区块链上放置软件的哈希值。一个引导加载程序或软件自己可读取并检查升级。可以通过引导加载程序提供额外的保护,它是用于预执行软件应用程序的可执行代码的一部分,或者作为应用程序执行的组成部分使用。这样做的目的是为了进一步防止软件应用程序的逆向工程。
  • 签名字段是一个可选的附加字段,供应商使用软件MasterAddress的公钥/私钥对签署整个交易内容。

现有的软件验证使用数字签名来验证可下载的软件,使用数字证书以防止在下载过程中出现中间人攻击。然而,这个模型提供了对用户设备上安装的软件的持续验证,从而降低了恶意代码注入攻击的风险。

如前所述,令牌用于授予所有权,但是与主比特币模型相比,Bespoke模型提供了更多的机会来使用令牌用于软件许可验证的目的。除了验证用户拥有令牌之外,它还可以用于升级软件版本或所有权转移机制。

由此,已经证明使用区块链可以很容易地实现许可验证,并且通过相同的机制可以添加额外的完整性和安全性保护。此外,区块链脚本允许在交易中进行智能编程。这提供了一个新的动态级别,因为交易可以根据输入、输出、字段内容和起始地址和目标地址采取不同的操作。新的区块链协议(如以太坊),包括完整的图灵完备性功能,允许任何人以他们自己的任意规则来编写智能合约和分散的应用程序,以获得所有权、交易格式和状态转换函数。

得到解决的问题

我们可以看到,Bespoke模型克服了本文前面所强调的问题,并显著改进了Master比特币模型。然而,它确实需要开发和维护一个单独的加密货币生态系统,而Master比特币模型可以在现有的加密货币生态系统中使用和运行。虽然Master比特币方法满足了成功的软件许可验证方法的要求,并且已经证明它是可行的,但它的局限性可能会降低它的有效性。Bespoke模型克服了以下几点问题:

  • 每个软件许可都很难复制,因为它是由供应商和用户之间的交易来表示的,是加密的、可验证的,并存储在用户的区块链钱包中。
  • 软件许可通过区块链的“所有链”和在区块链内部的数据很容易验证。此外,使用区块链许可密钥允许供应商为特定的功能激活分发密钥,并允许在不涉及任何中间方的情况下快速和有效地重新切割密钥。
  • 软件许可不能重新生成,因为软件应用程序直接从区块链获取许可密钥,需要用户的私钥。即使在供应商的密钥生成器丢失,也没有办法在没有供应商的私钥的情况下将许可证密钥拿到区块链上。
  • 不可能使用区块链进行中间人攻击。如果没有用户的私钥,敌手就无法拦截区块链中的任何数据,也不能将DNS或IP流量重定向到敌手的自定义服务器以提供软件验证。

除了软件许可验证方法之外,还有其它优势,例如软件供应商为他们的软件应用程序提供完整性和保护。此外,区块链点对点架构意味着软件许可验证没有单一的中心故障点。许可验证器可以在世界任何地方运行,并且既可以在非营利性的基础上运行,也可以在适当的情况下运行在其他商业模式上。供应商将运行特定的软件来管理许可创建过程、与区块链的交互,但不需要维护他们自己的专用许可验证基础设施,和承担相关的开销。

提出的软件许可验证模型为小型开发人员提供了一个机会,让他们可以通过大型软件供应商来保护他们的软件的版权,并防止软件盗版,同时有一个灵活的机制来授权他们的软件。

可能存在的问题

为了使Bespoke模型工作,用户需要为其钱包提供某种形式的身份验证,以便访问私钥,使软件程序能够完成其验证功能。这是一个与“用户需要访问他们的区块链钱包以任何加密货币进行任何交易”类似的过程,所以操作是很平常的。但是,如果我们要实现真正的用户迁移,用户可以登录到任何已安装的应用程序,那么钱包将需要一些可移植性。公开私钥是不可取的,因此钱包需要是一个应用程序,并且有能力在区块链上解密数据,并通过API接口将其呈现给软件应用程序。或者,用户可以通过身份验证或OAuth授权服务提供商(如Facebook或谷歌)来证明其身份,并允许授权的API请求到用户钱包。

其他问题是数据丢失的安全威胁模型,或者如果用户失去了对钱包和用户凭证的控制,或者供应商系统被泄露,系统就会受到损害。多签名授权已经为这些问题提供了可能的解决方案,类似于要求双方(或更多)签署。这可能会在软件许可验证方法上增加额外的开销,但是它也可以显著降低妥协或所有权损失的风险。

同时,这篇论文有许多局限性。区块链依赖于加密货币生态系统中的其他参与者来创建和验证交易。然而,文章并没有探索区块链生态系统或商业模式,因为在区块链生态系统的结果中,存在着各种各样的利益相关者,他们可能会感知到不同的含义,或者有既得利益。这些考虑超出了本文的范围。

更多的机遇

本文讨论了单个用户获得软件应用程序的单一许可、以及单个用户在其钱包和区块链上拥有多个表示软件应用程序的地址的情况。然而,在多用户的企业环境中,还存在一些额外的挑战,比如不能永久分配给员工许可,这些许可必须在组织内转移。例如,离开该组织的工作人员不得在其个人区块链钱包中持有软件许可。

在Bespoke模型中,每个授权许可都需要一个属于组织的唯一地址来发送令牌,地址数量定义组织可用的令牌数量。因此,一个拥有100名用户的组织将在一个专门为该组织服务的钱包中拥有100个地址。许可证需要分配给组织内的用户,并被组织内的用户撤销。此外,用户需要使用企业登录凭证进行身份验证,最好使用单点登录方式从该组织的钱包中获取许可证。这需要在内部为区块链软件许可证验证提供某种形式的身份验证服务,以便将功能集成到一个服务中,如LDAP或Active Directory,以便进行单点登录。在多用户环境中,需要一个组织级别的区块链许可验证应用程序来实现一个成功的多用户软件许可验证。

此外,区块链许可验证方法提供了一个管理非人类操作设备许可证的机会。随着物联网的发展,这些设备将需要以合法方式自动更新软件和验证软件的机制。例如,拥有10000个联网设备、但只支付2000个设备的软件维护费的用户,只会拥有更新2000个设备的许可密钥。这很容易在点对点的分布式软件许可验证生态系统中实现,并且很难使用任何其他类型的流程来管理。

Perkins于2014年指出,物品身份(Identity of Things)是物联网日益增长的结果。也就是说,设备和数据与某人或某些物品的关系需要识别,而与这些需求相关的资产和用户需要被管理。许可验证方法满足这一的需求,本质上定义为令牌/源对象,通过区块链地址提供各方的身份,并通过交易历史记录各方之间的活动类型。

结语

本文作为一篇2015年的文章,虽有些老气,但其中却穿插了许多新问题,如智能合约与结尾提及的物联网等,值得认真学习。