微软最近公开了 U-Prove 的 CTP 版本的源码,它是一种用来实施认证的加密的解决方案,并且不会透露关于用户的个人信息。CTP 版本包括 U-Prove 加密规范 V1.0 、对该规范的 C#和 Java 实现、对 WIF 、 AD FS2 和 CardSpace 2 的扩展,此外还有大量用来说明该项技术的白皮书。
当前的安全解决方案是基于透露从相关安全服务获益的人的信息的。此外,很多网站都倾向于尽可能多地发现它们的用户的信息,以便于提高它们的业务模型,从而得到更好的效率和收益。U-Prove 技术想要提供更高级别的安全性,只透露用户想要透露的信息。这与匿名活动是类似的,比方说只需要投币,就可以从公共售卖机购买商品,或者匿名投票等等。
U-Prove 技术最初是由 Stefan Brands 在 Credentica 开发的,在 2007 年发布了第一个 SDK 之后,越来越被人们所熟悉。 2008 年微软收购了该项技术以及相关的专利,并且将其包含在 Windows Identity Foundation 中。最近,微软发布了 Microsoft U-Prove CTP ,这项加密技术包括以下内容:
- 遵循开放规范承诺( Open Specification Promise )证书的 U-Prove 加密规范 V1.0
- 实现该项规范的 C# SDK 和 Java SDK ,它们是基于 BSD 开源证书发布的
- U-Prove CTP 白皮书
- U-Prove 技术概览
- 整合在身份验证元系统中的 U-Prove V1.0
- Windows Identity Foundation 的扩展——“它是对 WIF 的扩展,为 U-Prove 令牌的发布提供了创建自定义安全令牌服务(STS)的能力(对于身份验证提供商),以及校验 U-Prove 令牌表现(presentations)的能力(对于依赖于它的组织)”
- 活动目录联合服务 2.0 ——它是 AD FS 2.0 支持 U-Prove 的版本,它拥有发布支持 U-Prove 的信息卡的能力。
- Windows CardSpace 2.0 ——它是 Windows CardSpace 2.0 支持 U-Prove 的版本
U-Prove 技术是基于 _U-Prove_ 令牌的想法创建的,这个令牌是包含加密的、被保护的信息的二进制字符串,我们把这种信息叫做属性。在使用 U-Prove 令牌的过程中会涉及到三类组织:发布方——发布令牌的实体组织,验证方——需要令牌的用户,校验方——与认证用户相关的第三方组织。发布方与验证方通过 _ 发布协议(Issuance Protocol)_ 通信,而验证方与校验方通过 _ 表现协议(Presentation Protocol)_ 通信,如下图所示:
当验证方想要得到令牌的时候,它会通过发布协议与发布方联系,以一种秘密的形式来展现他的属性。这与现今使用的标准安全令牌有所不同,因为验证方可以得到令牌,而不需要将他所有的属性都透露给发布方:
为了让验证方从发布方获得 U-Prove 令牌,这两个组织必须位于 U-Prove 发布协议的同一实例中。这是在一部分输入和属性需要编码到令牌中的时候所要采用的加密协议。U-Prove 技术中的创新技术在于对发布协议的加密设计,它基于当代密码学的发展。为了达到概览的目的,它可以知道发布者的签名不是传统的 RSA 或者 DSA 的签名,并且发布方是 3-leg 的交互协议,支持验证方针对发布方隐藏特定的令牌元素。
发布方可能会使用各种方法来对验证方进行认证,包括访问包含在 U-Prove 令牌中由其它发布方生成的信息。发布方会通过对其进行签名并且包含只有验证方才知道的公钥来保护令牌。
- 每个发布的 U-Prove 令牌都包含了发布方关于所有内容的不可伪造的数字签名,这是通过使用它的私钥由发布方创建的。发布方签名后的 U-Prove 会成为 U-Prove 令牌上的可信赖标记。这使得任何人都能够校验出来 U-Prove 令牌是由发布者所发布的,并且其中的内容没有被篡改过。
- 重放攻击(Replay attack)防护:每个发布的 U-Prove 令牌中还包含专门针对每个令牌的公钥,这只有验证方才知道。验证方会在发布协议中随机生成公钥,此时会使用针对 U-Prove 令牌的相关私钥。与令牌的公钥不同的是,这个私钥并不是 U-Prove 令牌的一部分;验证方永远不会在使用 U-Prove 令牌的时候透露它。在下一节中,我们会说明这是如何防止校验方重放已经存在的 U-Prove 令牌的。
在获得了令牌之后,验证方会与校验放取得联系并通过表现协议在二者之间确立可信任的关系:
为了向校验方描述 U-Prove 令牌,验证方和校验方会处于 U-Prove 描述协议的同一个实例中。除了提供令牌属性(或者正如我们在 4.3 节中看到的,只是属性的一个子集)、发行方的签名以及验证方为令牌指定的公钥之外,验证方还将对校验方的响应一起发送过来。为了对这个响应进行计算,验证方会把针对 U-Prove 令牌的私钥应用于校验方的表现请求。这个表现请求必须包含一个迄今为止从未用过的唯一数字,一个大的随机数就可以。同样还会向唯一的校验方身份附加时间戳或者计数器。 我们使用验证方计算的响应作为表示的证据。它是拥有私钥的加密的证据,而私钥是与当前的 U-Prove 令牌相关的。它证实私钥已经被应用给表现请求,但私钥本身会保持私密性。即便所有的校验方和发行方联合,检查很多和相同的 U-Prove 令牌一起创建的二进制表现证据,并且从发布和表现协议脱离,这种安全保证也会保持。结果,校验方就无法重放指定给他们的 U-Prove 令牌。
有很多与使用 U-Prove 令牌相关的安全特性:不可跟踪性、不可链接性、可撤销性、可重用性等等、其中最有趣的是选择性地暴露、在令牌中包含加密属性的能力,即便对发布者也不会公开信息,除非验证方想要那样做。
据微软所说,事实上 U-Prove 可以用于任何通信和事务系统,例如:“数字权限管理、电子投票、电子支付设备、电子健康记录、电子邮费、在线拍卖、公共运输售票、道路收费定价、忠实顾客奖励计划以及电子游戏等等。”它还可以被应用于“非人实体,像计算机过程、软件应用程序、硬件设备等等”。U-Prove 帮助我们方便地通过不可信任的组织来共享信息,使得“我们可以不在现实世界模拟就可以设计新的应用程序;与之相关的领域是云计算服务,它可以在来自于不同源头的整合性保护的输入数据上执行有限的操作。”
关于 U-Prove 更多的信息: U-Prove 主页,微软的U-Prove 社区技术预览(CTP)的发布以及深入探索U-Prove 加密协议,还有Channel 9 上两次对Stefan Brands 的采访, U-Prove CTP:从开发者的视角。
评论