了 URl后,用户设备130进行操作以通过未修改的URl接入由网络服务器150主持的网址。
[0033]因此,尽管签名基于数据的不同版本生成,本示例中用户设备130能够验证接收的NDEF消息所承载的数据的认证。显然,可以修改上述示例的各种细节,而仍实现这里描述的灵活认证的各种特征。考虑以下描述的附加示例,一些这种变型将显而易见。
[0034]图2示出了根据第一实施例支持灵活数据认证的示例性NFC数据交换格式(NDEF)消息200ο在各实施例中,示例性NDEF消息200可以描述示例性环境100中在NFC标签110上存储且通过NFC读取器120检索的数据。示例性NDEF消息200基于URI片段支持具有灵活认证并提供与当前标准全消息签名的后向兼容性。如所示,NDEF消息包括各自具有各种标准字段的两个NDEF记录270、280:NDEF报头字段210、有效载荷长度字段220、类型长度字段230、类型字段240以及有效载荷字段250。参照由例如NFC论坛公布的标准(包括其之前或未来的各种版本),在字段210-250中存储的值是显而易见的。此外,各种备选实施例可以包括附加或备选的字段,如可以通过相关标准的之前、当前或未来的版本或通过专用非标准实施方式来定义。
[0035]NDEF消息200的第一 NDEF记录270具有有效载荷,指示要由例如网络浏览器的读取设备访问的URI。具体地,示例有效载荷承载“http://www.domain, com/page#04223344556677x00001A”的URI。可以理解,URl语法可以包括多个部分,例如方案名称、分层部分、查询串以及片段。在NDEF记录270的示例中,有效载荷URI包括片段,由井字符(#) “04223344556677x00001A”表示,对各种动态或静态数据进行编码。例如,片段可以指示“04223344556677”(在制造时分配)的标签标识符以及指示标签已经被读取26次的值为“00001A”(在最近标签读取时分配)的电流计数器值。显然,实际上片段可以承载任何信息,并且id和计数器值仅作为数据的示例提供,数据可以为了专用而从认证过程中获得。
[0036]NDEF记录280的第一 NDEF记录280具有有效载荷,指示要在认证NDEF消息200中使用的签名(或潜在地,在备选示例中包括其附加记录部分)。在各实施例中,签名NDEF记录280的位置指示了签名NDEF记录280应用于哪些其他记录270。例如,在一些实施例中,可以采用签名NDEF记录来应用于在前签名记录(如果有)之后出现的所有在先记录。在示例NDEF消息200的情况下,可以采用签名NDEF记录280来应用于NDEF记录270,因为NDEF记录270是仅有的在先记录。用于确定签名记录要应用记录的各种其它方法是显而易见的。
[0037]签名记录280包括根据多个子字段来划分的有效载荷:版本字段252、URI存在字段254、签名类型字段256、签名长度字段258、签名/URI字段260以及证书链字段262。参照由NFC论坛提出的适当标准(包括其任何在先或未来版本),子字段252、254、256、258、260,262中所存储的值是显而易见。此外,各种备选实施例可以包括由相关标准的在前、当前或未来版本定义或通过专用非标准实施方式定义的附加或备选字段。应理解:各子字段可以包括进一步的子字段。例如,证书链字段可以包括存储一个或更多个数字证书的证书存储子字段,或存储指示从哪里检索可应用数字证书的一个或更多个URI的证书URI字段。
[0038]在签名NDEF记录280的示例中,存储数字签名“0xF531DA555796DE93BA83”。可以理解,签名NDEF记录280可以备选地存储指示从哪里检索可应用数字签名的URI,可以相对于远程存储的数字签名来应用这里描述的各种特征。可以通过与所存储的证书或证书链字段的参考相关联的私钥来加密数字签名。此外,可以基于其他NDEF记录270的剥离的版本,预先生成“未”或“非”加密的数字签名。如这里所使用的,可以理解,术语“剥离的”是指在数字签名验证的过程中,具有基于考量被删除的、被预定数据替代或修改的部分以移除该部分的记录版本或其他数据。在NDEF消息200的示例中,可以基于具有备选片段“00000000000000x000000”或整体省略片段的其他版本NDEF记录270,来产生签名NDEF记录280的签名。
[0039]签名NDEF记录280还包括预处理标识符257,以指示是否应当作为认证或验证NDEF记录270的一部分来执行诸如剥离的任何预处理。在该示例中,预处理标识符257是标准签名类型字段256的最高有效比特,其中“I”指示应当执行预处理片段剥离,而“O”指示不应当执行预处理,由此提供与NDEF记录的当前标准数字签名的后向兼容性。显然,可以使用各种备选预处理标识符,例如签名类型子字段256的不同或附加比特、诸如版本子字段252或签名字段260的其他子字段的一个或更多个比特、诸如NDEF头字段210或类型字段240的其他签名NDEF记录字段的一个或更多个比特,或附加专用字段或子字段(未示出)。备选地,可以省略预处理标识符257,并始终作为实施的标准或非标准实施方式的一部分来执行一个或更多个预处理类型。附加的变型是显而易见的。
[0040]图3示出了支持灵活数据认证的备选NDEF消息300。在各种实施例中,示例性NDEF消息200可以描述示例性环境100中在NFC标签110上存储并且通过NFC读取器120检索的数据。备选NDEF消息300可以最类似于先前描述的NDEF消息200,而在示例各种备选实施方式的一些细节方面存在不同。显然,尽管在备选NDEF消息300中例示了多个备选实施方式的细节,这些实施方式细节可以不彼此依赖并且仅一些这种细节被包含在其他备选实施例中。
[0041]如所示,备选NDEF消息300包括第一 NDEF记录370中的备选URI。在该备选URI中,要剥离的数据(而不是片段)作为查询串的一部分被存储,由问号字符(?)指示。这样,作为正常浏览器操作的一部分,可以将id和计数器发送到URI的分层部分所指向的服务器,这与先前示例性NDEF消息中片段的数据不同,其通常不作为浏览器资源请求的一部分来发送。
[0042]备选NDEF消息300包括URI NDEF记录370和签名NDEF记录380之间的备选NDEF记录375。NDEF记录375可以是通过先前、当前或未来的标准或专用的非标准实施方式来定义的文本NDEF记录。文本NDEF记录375还包括要在数字签名验证之前剥离的动态信息。如所示,在问号字符(?)的两侧指示动态值。尽管文本NDEF消息275的有效载荷可以不遵循URI语法,然而针对这里描述的灵活数据认证方法,由问号字符(?)指出的可剥离字段可以被称为查询串。按照类似方法,如果替代地使用井号字符(#),针对这里描述的灵活数字认证方法,可以将可剥离的字段称为片段。在各实施例中,右侧的问号字符可以指示要剥离的区域的结束,并防止NFC设备将剩余记录275作为要剥离的数据。用于定义由URI语法定义的部分之外的要剥离数据部分的各种备选方法是显而易见的。
[0043]如上所述,根据各个实施例,签名NDEF记录380可以应用于(并且因此可验证)NDEF消息300中不在另一签名NDEF记录之前的所有在先记录。这样,在NDEF消息300的示例中,可以基于其他NDEF记录370、375 二者的剥离版本来计算签名a0x96EllD120F0E045D81CC,,o在另一备选NDEF记录中,签名记录380可以仅应用于文本NDEF记录375,如同URl NDEF记录370和文本NDEF记录375之间存在另一个(可能空白的)签名NDEF记录(未示出)所指示的。各种其他布置将显而易见。
[0044]备选NDEF消息300还利用专用预处理类型字段357来存储预处理标识符。例如,签名NDEF消息380的有效载荷可以在标准化位置(例如在签名类型字段256和签名长度字段258之间)处具有附加的字节来容纳附加字段。此外,因为预处理标识符357包括多个比特,与第一示例NDEF消息200的预处理标识符257相比较,预处理标识符357可以识别多于两个用于预处理的选项。例如,值0x0可以指示没有要执行的预处理,值Oxl可以指示应当执行片段剥离,值0x2可以指示应当执行查询串剥离,值0x3可以指示应当执行片段和查询串剥离二者。各种附加形式的预处理是显而易见的并且能够根据这里定义的框架实现。
[0045]图4示出了能够执行灵活数据认证的示例性NFC设备400。示例性NFC设备400可以对应于示例性环境100的用户设备130。NFC设备400可以在一些方面是抽象的;将理解,NFC设备400的各种组件可以通过硬件设备来实现。以下将参照图5以更详细的细节来描述用于支持NFC设备400的组件的示例性硬件。
[0046]示例性NFC设备400包括用于与一个或更多个NFC标签进行通信的NFC读取器410。NFC读取器410包括配置为根据NFC协议进行通信的硬件和软件。当从NFC标签读取NDEF消息时,NFC读取器410向已签名记录提取器420传递NDEF消息。
[0047]已签名记录提取器420包括在NDEF消息中识别任何已签名记录组的硬件和软件。例如,已签名记录提取器420可以对于任何NDEF签名记录中扫描NDEF消息,如果发现存在NDEF签名消息,则提取非空白的NDEF签名记录以及应用了相应NDEF签名记录的附加NDE