详细描述
以下结合附图提供的详细描述旨在作为对本示例的描述,并非旨在标识可构造或利用本示例的唯一形式。该描述阐明了该示例的功能以及用于构造和操作该示例的步骤序列。然而,可由不同的示例来实现相同或等效的功能和序列。
尽管此处将本示例描述并示出为在认证机制系统中实现,但是所描述的系统是作为示例而非局限来提供的。如本领域的技术人员所理解的,本示例适于在各种不同类型的认证、授权和访问控制系统中应用。
以下描述将介绍可扩展CGA(以下称为ECGA)的生成以及可如何由认证机制来认证ECGA。然后将讨论实现选项以及该认证机制可如何在其它情况下操作。ECGA的特征可用于提供一种简单的、轻量级的、和/或可部署的认证机制,以便于用于认证消息或其它信息。例如,该认证机制可确定信息可是否可被信任是来自发送者地址或它声称所来自的其它实体。该认证机制的全部或一部分可被应用于任何类型的消息或信息以增强安全性和/或认证。
一种认证机制可在诸如图1的示例网络等网络环境中部署。如图1所示,局域网(LAN)100上的计算设备102可伴有服务器104和/或路由器106。路由器允许LAN上的设备通过互联网络108与诸如设备110等远程计算设备通信。因特网是互联网络的一个示例。图1中的任何设备,包括路由器可向任何其它设备发送消息。在当今典型使用的协议中,消息包含发送者的网络地址(“发自(FROM)地址”)和接收者的网络地址(“发往(TO)地址”)。
作为第一示例,考虑设备102由被授权来重新配置路由器106的系统管理员操作。为安全起见,路由器不接受来自除设备102之外的设备的命令。但是当路由器接收到其发自地址被设为设备102的地址的重新配置命令消息时,路由器相信该消息是真实的,并执行该命令。(该示例仅出于说明性目的;路由器通信一般比此处所描述的要安全得多。)然而,创建并发送带有欺骗性的发自地址的消息是非常容易的。例如,设备112可创建路由器重新配置命令消息,并将设备102的网络地址放在发自地址域中。如果没有用于认证消息的机制,则路由器不能知道哪一设备实际发送了该消息。路由器不知道该消息不是真实的,并执行该命令,这可能会损害LAN上的所有设备的安全性。作为第二示例,设备102使用“邻居发现(NeighborDiscovery)”协议来将路由器的网络地址解析成链路层地址(即,MAC地址),然后在与诸如设备110等远程设备通信时使用该路由器。如果没有适当的认证机制,则设备114可能假扮路由器106。来自设备102的、针对设备110的消息因此会去往设备114,设备114可读取该消息的内容、丢弃该消息(由此针对设备102发起服务拒绝攻击)、和/或在将其继续发送到设备110之前更改消息。作为第三示例,设备114可干扰其中设备102获得网络地址的进程。例如,如果设备102执行“重复地址检测”协议来检查没有其它网络节点正在使用与设备102相同的地址,则设备114可生成使得看上去所有地址都已被某一其它网络节点使用(即,拥有)的消息。这样,设备114可阻止设备102获得网络上的地址。这些仅仅是示出对认证的普遍需求的三个示例。这些示例可被扩充到使用任何种类的通信方法或协议发送到任何种类的设备的任何种类的消息。
为阻挡诸如在前一段的前两个示例中描述的攻击,消息接收者可认证消息的发送者,即,确定该消息是否实际上是由该消息中指示的发送者发送的。当接收者能够可靠地确定消息的真实发送者时,则接收者可选择仅在消息是由适当或可信设备发送时才对其采取动作。为阻挡在前一段的第三个示例中描述的种类的攻击,网络节点需要生成新的网络地址并证明它本身有高概率生成了该地址的方法。这一方法以相当大的成功率阻止恶意网络节点虚假地声称该新地址的所有权。
在以下描述中,除非另外指明,否则该认证机制是参考由一个或多个计算机执行的动作和操作的符号标识来描述的。由此,可以理解,有时被称为计算机执行的这些动作和操作包括计算设备的处理单元对以结构化形式表示数据的电信号的操纵。这一操纵变换了数据或将数据维持在计算设备的存储器系统中的各位置上,这以本领域的技术人员都理解的方式重新配置或更改了计算机的操作。维护数据的数据结构是具有由数据的格式定义的特定属性的存储器的物理位置。然而,尽管在前述上下文中描述了该认证机制,但是它并不意味着局限,如本领域的技术人员所理解的,以下描述的各种动作和操作也可用硬件来实现。
参考图2,该认证机制可在连接的计算机网络上的网络节点之间的通信中实现。每一网络节点驻留在可具有许多不同计算机架构之一的计算设备中。出于描述的目的,图2示出了可用于这些设备的一个示例计算设备架构的示意图。所描绘的架构仅是合适的计算环境的一个示例,并非旨在对本发明的使用范围或功能提出任何局限。也不应将计算设备解释为对图2所示的任一组件或其组合具有任何依赖或需求。该认证机制可以使用众多其它通用或专用计算或通信环境或配置来操作。适用于本发明的众所周知的计算系统、环境和配置的示例包括但不限于,移动电话、袖珍计算机、个人计算机、膝上型设备、手持式设备、机顶盒、服务器、路由器、网络地址转换器、交换机、无线接入点、多处理器系统、基于微处理器的系统、小型机、大型计算机、以及包括上述系统或设备中的任一个的分布式计算环境。
在图2所示的基本配置中,计算设备102通常包括至少一个处理单元200和存储器202。存储器202可以是易失性(如RAM)、非易失性(如ROM、闪存等)或两者的某一组合。这一基本配置在图2中由虚线204示出。
存储介质设备可具有另外的特征和/或功能。例如,存储介质设备可包括另外的存储(可移动和/或不可移动),包括但不限于PCMCIA卡、磁盘和光盘、磁带、外部硬盘驱动器、以及任何其它合适的可移动或不可移动存储。这类另外的存储在图2中由可移动存储206和不可移动存储208示出。
计算机存储介质包括以用于储存如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器202、可移动存储206和不可移动存储208都是计算机存储介质的示例。计算机存储介质包括但不限于,HDD、RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、zip驱动器、数字多功能盘或其它光学存储、磁带盒、磁带、磁盘存储或其它磁存储设备、以及可以用来储存期望的信息并可由计算设备访问的任一其它介质。
计算设备102还可包含允许主机与其它设备通信的通信信道210。通信信道210可包括一个或多个通信信道,并且是通信介质的一个示例。通信介质通常可以用诸如载波或其它传输机制等已调制数据信号来具体化计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括如有线网络或直接线连接等有线介质,以及如声学、无线电、红外和其它无线介质等无线介质。此处使用的术语计算机可读介质包括存储介质和通信介质两者。
计算设备102还可具有输入设备212,如键盘、鼠标、输入笔、语音输入组件、触摸输入设备等等。输出组件214包括屏幕显示器、扬声器、打印机等等,以及用于驱动它们的呈现模块(通常称为“适配器”)。计算设备102具有电源216。
可扩展的用密码生成的地址
诸如计算设备102等设备可用使得消息只能由该特定设备来编写的方式来编写消息,例如,消息可诸如通过使用认证机制被认证为来自发送计算设备。认证机制可以是单边的,这表现在接收者无需具有与发送者的进一步通信来完成认证过程。例如,消息可包含诸如图1的路由器106等消息接收者解码该消息并确定它必定来自诸如计算设备102等特定设备所需的所有内容。
该认证机制可以基于结合消息发送者的网络地址的选择来使用的公钥密码技术。所选的网络地址可包括基于公钥和其它参数的可扩展的用密码生成的地址(ECGA)。在图1的示例中,ECGA地址是计算设备102的地址。可从设备102的公钥中导出这一地址的一种方式结合图3、4和5来描述。
ECGA可用任何适当的方式来生成,诸如由图3所示的ECGA生成器312来生成。ECGA生成器312可以在图1的计算设备102内实现,它可取一个或多个输入(或其任何组合),这些输入可包括地址所有者的公钥300、地址所有者的网络的路由前缀308、冲突计数310数据值(可以被初始地设为零)、修饰符306数据值、安全性参数(Sec)302、时间参数等中的一个或多个。修饰符306可以是任何适当的修饰符,在一个示例中可以是随机的16个八位组的串。安全性参数302可以是任何适当的安全输入,它可以是值在0到7之间的无符号3位整数。安全性参数302的值可由发送设备(地址所有者)来选择,诸如由计算设备102来选择。时间参数可定义在生成ECGA时计算第二散列值的时间。ECGA生成器312输出新ECGA地址314。输出的ECGA地址可以根据任何适当的协议,包括但不限于互联网协议版本6(IPv6)、链路层地址(MAC地址)等等。ECGA生成器可输出相关联的CGA参数316,以及可任选的自签名证书。
在一个示例中,输出的ECGA可以根据IPv6协议。如图5所示,IPv6地址314为128位长。它一般被划分成两部分。最左边的64位是路由前缀308,它用于通过因特网将互联网协议(IP)分组路由到目的地网络。最右边的64位是接口标识符504,它标识了本地网络内的单个节点。地址的接口标识符504部分被称为“节点可选择”部分,因为发送设备102能够自由地如它认为适合地设置该部分。接口标识符可用任何适当的方式来选择,例如随机地、只要同一网络上的两个节点共享同一值、由本地管理员分配等等。尽管128位IPv6地址314划分成两个64位部分是典型的,但是该划分可按某种其它比例来完成。例如,接口标识符504的长度可增加,其代价是减小路由前缀308的长度,或者接口标识符的某些部分可由一路由协议来确定,使得它们实际上成为地址前缀的一部分。
发送节点的网络地址可用任何适当的方式被标识为ECGA,包括但不限于路由前缀的预设部分、接口标识符的预设部分、消息中的首部或消息内容等中的一个或多个。例如,网络地址本身可将地址标识为ECGA。在一个示例中,接口标识符504可包括可被置位以指示该网络地址是ECGA的两个位。在IPv6地址中,从64位接口标识符504的左边开始的第7位是通用/本地位或“u”位。它通常被设为1以表示该接口标识符504是从来自接口硬件的EUI-64标识符配置的,且因此是全局唯一的。从左边开始的第8位是个别/组或“g”位,它一般对组播地址被设为1。位组合u=1,g=1通常不被使用,因为组播地址(如由g=1所指示的)不能是全局唯一的(如由u=1所指示的)。以此方式,可分配u=1,g=1的位组合来指示ECGA地址。分配了网络地址的一个或多个位,诸如IPv6地址的u和/或g位可便于在任何安全协议中对用密码生成的以及非用密码生成的地址的混合使用,而不会减弱任一地址类型的安全性。然而,可以理解,即使不进行这一分配也可使用ECGA地址和认证。
ECGA的路由前缀或接口标识符可包括指示生成ECGA时使用的散列值的类型或长度(或两者)的散列指示符。在一个示例中,散列指示符包括安全性参数(Sec)302,它可指示安全级别。如果在生成地址时使用了时间参数来确定安全级别,则所确定的安全级别可由安全性参数或散列指示符以与不使用时间参数时完全相同的方式来指示。即,用于确定安全级别的机制可以独立于用于在地址中传送安全级别的机制。然而,可以理解,可使用任何适当的散列指示符来指示所选择的第二散列值或一组可能的散列值。
如果散列指示符值被编码到地址位中,则攻击者可能无法在同时改变地址的情况下改变安全性参数的值或对第一和/或第二散列值的其它输入。在一个示例中,散列指示符是无符号整数。尽管可对散列指示符选择任何适当的位长度,但是图5示出了安全性参数的一个示例长度为3位。散列指示符550可以在接口标识符504的任何适当的部分中。例如,如图5所示,散列指示符可以在接口标识符的最左边位部分或ECGA的节点可选择部分中编码。散列指示符可允许地址所有者增加地址生成的计算成本,且因此一相应地增加了针对该地址的蛮力攻击的成本。由此,在某些情况下,如以下所描述的,将Sec302增加1可向该散列的长度添加攻击者必须破解的16位。
为生成ECGA,诸如IPv6地址等网络地址可包括基于公钥信息的散列值。然而,IPv6中网络地址的节点可选择部分通常是64位。在某些特殊协议中,节点可选择部分可以更长,其代价是减小了路由前缀的长度。在其它协议中,诸如在NAT和防火墙穿越协议中,节点可选择部分可以较短,诸如48位,因为路由前缀较长或者接口标识符的某些位由协议来确定。以此方式,散列输出的长度被限于大约64位,在IPv6中有时候被限于少至48位。然而,在某些情况下,大约48或64位可能无法提供足够的安全性和/或可能不包含足够强的密码散列值。
ECGA包括公钥的散列作为网络地址的一部分。如图5所示,接口标识符504的至少一部分可包括公钥300的散列的至少一部分。公钥的散列可由任何适当的第一散列函数510来生成,包括但不限于MD5、SHA-1、N散列等等。
参考图11的流程图,生成ECGA可从确定1100地址所有者的公钥开始。地址所有者的公钥可用任何适当的方式来确定。例如,公钥可由ECGA生成器诸如通过从地址所有者的计算设备的存储器检索公钥、从证书授权机构检索公钥等来确定。确定公钥可包括将公钥变换或编码成可由ECGA生成器使用的格式。例如,如图4的操作400中所示,地址所有者的公钥可以被DER编码为ASN.1结构,它可具有诸如SubjectPublicKeyInfo(主题公钥信息)等类型。
可确定1102ECGA参数。例如,如图4的流程图的操作402中所示,可将修饰符数据值(例如,图3的修饰符306)初始化为16个随机的八位组或任何其它适当的修饰符值。路由前缀(例如,图3的路由前缀308)可被设为地址所有者的本地子网处的路由器通告的路由前缀值。冲突计数(例如,图3的冲突计数310)可被初始化为零。公钥可被设为地址所有者的经DER编码的公钥。ECGA参数的确定可包括将ECGA参数值变换或编码成可由ECGA生成器使用的格式。例如,如图4的操作404中所示,可串接每一ECGA参数以形成如通过引用结合于此的IETF RFC 3972中定义的CGA参数数据结构。在另一示例中,CGA参数可以被DER编码为ASN.1结构。
可计算1104第二散列值。尽管此处称为“第二”散列值,但是它实际上是时间上首先计算的散列值。第二散列值可以是公钥300与操作1102中确定的CGA参数中的一个或多个的组合的散列。例如,第二散列值可以是图3的修饰符306与公钥300的组合的散列。例如,修饰符306和公钥300可与零值路由前缀和冲突计数串接404以形成如IETF RFC 3972中定义的CGA参数数据结构,如图5和图4的方法中所示。串接可由图5所示的第二散列函数520来散列化以提供图5所示的第二散列值500。第二散列函数可以是任何适当的散列函数,诸如SHA-1算法,并且可以与第一散列函数510相同或不同。
认证机制可使用SHA-1散列函数来同时实现第一和第二散列函数两者。散列函数的输出可以比算法所需的,诸如SHA-1的160位长。在这一情况下,散列值可例如通过取散列函数输出的最左边的所需位数而被截断到适当的长度。SHA-1算法是单向散列函数,这意味着它取一消息并将其转换成固定长度的数位串,也称为消息摘要。散列函数的速度对于地址生成过程可能不是重要的。第二散列函数的目的是设置第一散列函数的至少一个输入参数(诸如修饰符)的值,并且增加生成新地址的复杂度的是两个散列值的组合。由于第二散列函数指数地增加散列的成本,因此SHA-1和其它散列函数之间的微小的速度差别在本发明中是无关的。尽管此处使用SHA-1作为散列函数的一个示例,但是也可改为使用具有第二前象抵抗(second-preimage-resistance)特性的任何其它密码函数。
在一个示例中,第二散列函数的结果可以是图5中的第二散列值500。可将第二散列值的一部分的位与零进行比较1106,如图11所示。例如,如图4所示,可将第二散列值500的最左边N*Sec位与零进行比较(图4中的406和408)。例如,第二散列值00001ccd45bfe68e38b8d47bab2cd070781d765f具有最左边19个0位的计数值。如果N=16,则这对应于Sec=1且N*Sec=16。修饰符和所确定的计数值可用任何适当的方式来储存,诸如储存在数据存储中。
值N可以是取决于对其使用ECGA的协议的任何适当的值。如图4的步骤406中所示,N的值可以是16,然而,可以理解,对N可使用任何适当的值,诸如4、8、12等。如果最左边的N*Sec位都是0,或者如果Sec=0,(步骤408和1108),则该过程分别以图4和11中的步骤412和1112继续。否则,以任何适当的方式修改1110修饰符306(或作为对第一和第二散列值两者的输入的其它CGA参数)的值,如图11所示。例如,可对该修饰符选择另一随机数。在另一示例中,如图4所示,该修饰符可在步骤410中递增。计算第二散列值的过程再次分别以图4和11中的步骤404和1104继续,使用新修改的修饰符和公钥来确定第二散列值。
诸如步骤402、1102中的修饰符306等CGA参数的初始值以及步骤410、1110中的修改修饰符的方法可任意选择。为了避免对修饰符306重复地尝试同一值,可随机选择初始值。随机数生成器的质量可以不重要,只要不频繁重复相同的值。修改修饰符306的一种方式是如同它们是128位整数(采用任何字节顺序)那样递增内容八位组410。
对于大于0的安全性参数(Sec)302的值,不保证该过程在特定次数的迭代之后终止。步骤404-410中的蛮力搜索平均花费约216*Sec次迭代来完成(迭代次数的中位数是0.69*216*Sec)。
Sec的值可能难以确定。例如,Sec的值越大,生成ECGA的处理成本也越大。然而,如果Sec是静态的,则经过一段时间之后,市场上计算速度的增加可能会降低所得的ECGA的安全性。例如,如果计算能力的成本每18个月就减半,则第二散列值中所需的零位的个数(N*Sec)就应当每18个月递增1以维持针对蛮力攻击的相同的安全级别。然而,对计算能力在接下来5-50年内的预测可能是困难的。此外,要求用户或管理员增加N*Sec的值在ECGA是在操作系统安装或引导时自动生成的情况下可能是做不到或不切实际的。此外,N*Sec的预定值可能太小,这可能会导致所生成的ECGA的安全性要低于所需。相反,N*Sec的预定值可能太大,这可能导致地址生成过程中不可接受的延迟。
蛮力攻击的未来成本可由生成ECGA的成本,例如计算系统生成ECGA的计算能力来隐含。例如,输入的N*Sec(见图3的Sec302)可用指示要用于地址生成的时间的时间输入参数来替换。以此方式,第二散列值的生成可以基于生成该第二散列值的计算设备的速度。时间输入参数可由任何适当的一方,诸如设备制造商或操作系统销售商或由用户来设置或初始化(诸如在步骤1102中),并且可被设为用户希望花费在ECGA生成上的时间。例如,如果用户正在等待达大约1CPU日的计算或者在该计算在后台缓慢完成的情况下更多的时间,则时间输入可被设置在大约1-60秒的范围内。如果ECGA生成是由较快的计算机或除针对该地址的设备之外的专用机器完成的,则计算时间可取决于用于ECGA生成的机器的能力来设置。更具体地,输入到ECGA生成器312的时间参数可以参考计算图5的第二散列值500的时间,而非使输入N*Sec 302基于参考多个比特的个数。时间参数可以采用任何适当的形式和/或单位,诸如以秒、CPU周期等为单位的整数或实数值。ECGA生成器可在由该时间参数输入定义的一段时间内计算多个第二散列值,并且可选择输出的第二散列值500作为在该段时间内生成的“最安全”散列值。该最安全散列值可用任何适当的方式来确定,诸如由在输入时间内生成的具有最大个数的0位的散列值。如果0位的个数被表达为N*Sec,其中Sec是在该地址的某些位中编码的安全性参数,则最安全散列值可通过选择具有最大个数的0位的散列值并将该个数向下舍入到最近的N的整数倍来确定。最大个数的0位可以在散列值的预定部分中(诸如预定个数的最左边位)、可以是完整的所计算的散列值的最大个数的0位、可以是所计算的散列值内的最大个数的连续0位、最大散列扩展等等。
图12示出了基于时间而非安全性参数来生成ECGA的替换方法。参考图12,可确定1100公钥,这类似于图11的公钥确定。CGA参数的确定1202可包括将时间参数初始化为计算第二散列值所允许的时间。可诸如由ECGA生成器来计算1204公钥与诸如修饰符等一个或多个CGA参数的组合的散列值。该方法可检查1206是否超过了由时间参数指定的时间。ECGA生成器可用任何适当的方式,诸如通过将时间参数与注解已经过的时间的时钟、计算一个或多个散列值所花费的计算机周期数等进行比较来确定。或者,对于散列计算的终止条件1206可以由从硬件定时器接收的外部中断或从同一机器上的另一软件线程接收的信号来实现。如果未超过该时间参数,则可修改1210用作对第二散列值的输入的一个或多个CGA参数,诸如修饰符。例如,可以如上所述用任何适当的方式来修改该修饰符,诸如选择另一随机八位组、递增该修饰符的前一值等等。经修改的参数可以与公钥组合来计算1204散列值的下一迭代。
如果在散列值生成过程中已超过了时间参数,则可从由步骤1204计算的一个或多个生成的散列值中选择1208第二散列值。在一个示例中,最安全的所生成的散列值中的一个或多个可被储存在散列值数据存储中。每一散列值可与用于计算该散列值的CGA参数相关联地储存。第二散列值可用任何适当的方式来选择,诸如通过选择在由时间参数指定的时间段内生成的“最安全”散列值。例如,在生成1206每一散列值之后,可对所选择部分中0位的个数计数,并将其与先前计算的散列值的0位的计数进行比较。可储存用于计算在所选部分中具有最大个数的0位的散列值的CGA参数。以此方式,可选择在由时间参数定义的时间结束时所储存的CGA参数来输入到第一散列函数1112中。所储存和选择的值可用任何适当的方式来储存,诸如储存在数据存储中,并且可以与储存在该数据存储的数据矩阵内的一个或多个其它值相关联。
图13的流程图示出了图12的过程可以如何在RFC 3972中定义的ECGA格式的特定情况下实现的一个示例。与图5的流程图相比,其中安全性参数Sec的值是对ECGA生成过程的输入,图13中的Sec值是计算的输出,并且接收时间参数作为输入。生成将在超过1308时间参数时结束。在蛮力搜索循环(步骤404、1306、1308和410)期间,储存1306匹配找到的最高Sec值的散列值。在超过时间参数并且循环终止之后,产生找到的最高Sec值的修饰符将用于地址生成的其余部分。
时间参数限制了CGA生成可花费的最大时间。地址生成器可通过在不太可能在剩余时间内找到比已找到的更强的地址的情况下停止对新修饰符的搜索来进一步减少地址生成所消耗的平均时间。即,如果找到了对应于安全性参数Sec的第二散列值(即,第二散列值中的N*Sec个0位),则生成器可计算在时间参数限制内的剩余时间内找到具有下一更高安全性参数Sec+1的第二散列值的概率。可将这一概率与诸如1%、50%或99%等预定阈值进行比较。如果该概率低于阈值,则生成器可停止尝试其它修饰符值,并使用迄今为止找到的最安全的散列值和修饰符(即,具有安全性参数Sec的散列值和修饰符)。当N=8或N=16时,可在该过程的较早期找到产生合理安全的Sec值的CGA参数值(诸如修饰符值),并且继续蛮力搜索循环直到超过时间参数极不可能找到产生更高的SEc值的CGA参数值(诸如修饰符值)。因此,早期停止具有显著减少花费在ECGA生成上的平均时间的潜力。
早期停止条件可被评估1307,作为图13中的蛮力搜索循环的一部分。在这一情况下,对循环的终止条件1308不仅可以在超过时间参数时触发,而且还可以在早期停止条件为真时触发,如图13所示。图5和图13之间的差别示出了ECGA生成算法(诸如IETF RFC 3972中定义的)和将时间参数实现应用于RFC 3972的标准CGA地址的本示例之间的差别。
给定找到更安全的CGA参数值的阈值概率p、用于地址生成的最大时间MaxTime、已经过的时间t、迄今为止尝试的修饰符值的个数n、以及已找到的最大安全性参数Sec,可按对数比例(即,按照位的计数)来计算早期停止条件。例如,生成器可在t>MaxTime或t>MinTime且N*(Sec+1)>log2((Max-t)*n/t)-log2(ln(1/(1-p)))时终止蛮力搜索。MinTime是计算应花费的最小时间。适当的最小时间取决于可用于计算的CPU能力的变化量,并且应被设得足够大以防止计算速度的随机变化对停止条件产生影响。或者,计算散列的速率(n/t)可通过其它手段来估计,诸如通过在ECGA生成之前测量CPU的性能。
对于给定概率阈值p,终止条件可通过计算最后一项的数字值并将该项向上或向下舍入到最近的整数(即,舍入到满位)来逼近。例如,如果N=16且p=99%,则以上停止条件可被逼近为:t>Max或(t>Min且16*(Sec+1)>RoundDown(log2((Max-t)*n/t))+7)。
早期停止条件可提高仅在有较高概率在剩余时间内找到匹配的情况下继续对Sec+1的搜索的概率。散列长度(N=16或N=8)的16或8位递增是相对较大的步幅。因此,生成器通常在早期停止,因为它对于一个安全级别(Sec)找到了匹配,并且对到达下一级别(Sec+1)几乎没有改变。在大多数情况下,这将导致地址生成在所分配的时间之前很久即终止。然而,在某些机器上,地址生成将花费全部的所分配的时间MaxTime。
一旦生成了第二散列值(如图11中通过安全性参数所示,以及图12中通过时间参数所示),可通过确定1112第一散列值来生成可扩展的用密码生成的地址。可使用任何适当的过程来基于第二散列值确定第一散列值。
例如,可使用图4或图13的步骤412到424来使用第一散列函数确定第一散列值。例如,可将公钥与诸如一个或多个数据字段的合成等一个或多个其它参数(如图4和图5所示)串接,这些其它参数包括用于生成第二散列值的CGA参数(诸如修饰符306、路由前缀308、和/或冲突计数310)中的一个或多个。修饰符值306在第二散列计算的先前步骤中设置,并且可从合适的数据存储中检索出。冲突计数310最初被设为零,并且可在发生地址冲突时递增,如以下进一步解释的。路由前缀308可以由地址创建器用任何适当的方式,诸如从网络100获得。例如,路由前缀可通过在节点的网络链路上监听来自本地路由器106的通告来确定。关于这在IPv6网络上如何工作的细节,参见IETF RFC 2462的“IPv6 Stateless AddressAutoconfiguration”(IPv6无状态地址自动配置)和IETF RFC 3971的“SecureNeighbor Discovery(SEND)”(安全邻居发现(发送)),这两篇参考文献对于其描述的所有内容整体结合于此。
组合的公钥和CGA参数可被散列化,诸如通过可包括SHA-1算法的第一散列函数来进行(图4的步骤412)。结果是图5所示的第一散列值502。
可以理解,路由前缀308不是对上述步骤的第一散列函数的必要输入。从对第一散列函数的输入中省略路由前缀308在第一和第二散列输入的所有部分都相同的情况下可导致第一和第二散列值相同。防止两个相同的散列结果的一种解决方案是对第一和第二散列函数使用不同的散列函数。除此之外或者作为替代,可通过向第一和/或第二散列值计算的输入追加预定的静态第二修饰符(例如,值为1或0的字节)从SHA-1算法中实例化两个完全不同的散列值。作为另一示例,可通过将诸如160位SHA-1散列等较长的散列值划分成两个部分来计算两个散列值。以此方式,该散列值的一部分可用作第一散列值,而该散列值的第二部分可用作第二散列值。
如图11和12所示,可基于所计算的第一散列值的至少一部分来生成1114
ECGA。例如,第一散列值的至少一部分可被用作ECGA的接口标识符(或其它部分)的至少一部分。在一个示例中,如图4和图13所示,可串接64位路由前缀308和第一散列值502的最左边64位来形成128位IPv6地址314。可以理解,其它协议可能要求或允许将路由前缀和/或接口标识符部分选为其它适当的位长度。
在步骤416,如图5的示意图所示,可修改地址以指示该地址是ECGA。例如,如上所述,地址中的“u”和“g”位(即,由第一散列值形成的用户接口部分)可都被设为1,这可将该地址标识为ECGA。在一个示例中,可修改该地址以包括散列指示符。例如,在使用安全性参数Sec的情况下(如上参考图11所述),该安全性参数或计数值可被包括在ECGA的至少一部分中,诸如接口标识符中。在一个示例中,接口标识符的最左边3位可被设为Sec的值。以此方式,第一散列值的前三位可用安全性值来替换,或者第一散列值中插入到ECGA的接口标识符部分的部分可被移回以为在ECGA中插入安全性值而留出空间。如果使用时间参数来生成ECGA,则由允许的计算时间和用于ECGA生成的CPU的速度来确定Sec或其它散列指示符的值。在确定了Sec值(或其它散列指示符值)之后,可如它作为对ECGA生成的输入完全一样地处理该值。即,无需将时间参数编码到地址位中,也无需在使用地址时传递该时间参数。相反,将所选的Sec值或其它散列指示符编码到地址中或通过其它手段来传递。散列指示符可被编码到接口标识符的任何部分中,诸如接口标识符的最左边三位或ECGA的节点可选择部分中。可以理解,被编码到ECGA的接口标识符中的u位、g位、散列指示符等可替换第一散列值的那些位置中的那些位,或者替换地可被放置在ECGA和第一散列值中围绕所编码的参数的位置上。代替将ECGA指示符(例如,u和g位)、散列指示符等编码到ECGA地址中,一个或多个指示符可在协议消息中发送、由协议规范隐含、由通信上下文隐含、在证书中发送、在以下进一步讨论的IETF RFC 3972中定义的CGA参数数据结构中发送、等等。
计算设备102可检查图11和12的步骤1116(也示为图4中的步骤418)中的地址314是否已经由网络中的另一节点使用,即,是否存在地址冲突。例如,计算设备102可检查对于所生成的ECGA 314是否存在地址冲突。地址冲突可以用任何适当的方式来检测。例如,不同协议可提供确定冲突的不同方式。在作为用于向网络上的设备分配动态IP地址的协议的动态主机配置协议(DHCP)中,服务器104跟踪IP地址以及它所租用的地址之间的冲突。对于IPv6,该机制被称为“重复地址检测”。
如果使用ECGA作为其地址的设备移至另一网络,则可修改1118用于计算第一和第二散列值中的一个或多个的ECGA参数,并且可通过返回到计算1104第二散列值或返回到计算1112第一散列值来基于一个或多个经修改的ECGA参数计算新ECGA。CGA参数可用任何适当的方式来修改1118。例如,可递增或重新计算修饰符、可将冲突计数复位为零或将其递增、等等。
在一个示例中,ECGA生成中允许的冲突计数310值可被设定上限。例如,如图4和图13所示,可在步骤420中递增已编码的CGA参数结构304。可将冲突计数与诸如3等预定的最大允许冲突数进行比较422。如果存在预定数目的冲突(诸如3),则该过程可以终止。如果该过程终止,则可在步骤424处报告出错。如果该过程没有终止,则地址生成过程能以用递增的冲突计数值来计算新的第一散列值412来重新开始。
如果没有检测到地址冲突,则该过程可如图11和12所示成功终止1120。在成功终止中,在图4所示的一个示例中,通过串接修饰符、路由前缀、冲突计数、公钥(可被储存在经DER编码的ASN.1SubjectPublicKey数据项中)以及可能的扩展字段来创建IETF RFC 3972中定义的CGA参数数据结构。
可使用公钥300来创建自签名证书316(例如,X.509v3证书或任何其它适当的证书)并签署。证书可以采用任何适当的形式,并且可包括任何适当的参数以协助验证ECGA。例如,证书可使用公钥(可被储存在SubjectPublicKey数据项中)来创建。证书可包括扩展(诸如extnValue数据项),它编码了生成第一散列值和第二散列值中的任一个或两者时使用的CGA参数中的一个或多个。包括在证书或经优化的参数格式中的CGA参数除了在ECGA中包括第二散列指示符之外或作为其替代,可包括散列指示符。
在某些情况下,例如,在使用经优化的参数格式而非证书的协议中(例如,IETFRFC 3972中定义的CGA参数数据结构),创建和签署426可被跳过,并且可改为创建经优化的参数格式。证书和/或经优化的参数格式可用图11和12中任一个或两者中所示的方法生成。
如上所述,第一散列值502可创建地址314中的接口标识符504(可具有64位)的一部分(诸如59位)。第二散列函数增加了蛮力攻击,即攻击者改变散列输入来将其自己的公钥与别人的地址进行匹配的成本。除了将59个地址位与第一散列值进行匹配之外,攻击者必须将预定个数的0位(例如,最左边的0位)与第二散列值进行比较,如由上述可包括在ECGA中的安全性参数和/或零计数参数所指示的。如上所述,预定个数的0位可以是N*Sec或使用时间参数选择的第二散列值中的0位的个数。称为散列扩展的这一技术有效地将散列长度增加到早先的提议中的64位边界之外。在N*Sec示例中,所得的安全级别等于59+N*Sec位的散列长度。
在某些情况下,如果地址的路由前缀308改变,但是地址所有者的公钥300不变,则可使用修饰符306的旧值。以此方式,如果在计算第二散列值500时没有包括路由前缀308,则可以无需重复图4的步骤404到410(或步骤1104-1108)的蛮力搜索。
可扩展的密码地址的认证
对ECGA的认证可如通过引用结合于此的IETF RFC 3972中定义地进行。不论ECGA生成过程是取确定第二散列值中的0位的个数的Sec值还是确定用于ECGA生成的时间的时间参数作为输入,该认证过程都是相同的。
通过基于其公钥300来构造计算设备102的唯一ECGA 314,创建了计算设备102的ECGA 314与其公钥300之间的关联。该关联允许图6中的消息接收者106通过验证该管理以及消息上的签名来将计算设备102认证为消息发送者。为了将消息认证为来自特定ECGA地址314,作为地址所有者,计算设备102可用其公钥300来签署消息。如图6所示,计算设备102然后向计算设备106发送分组600,该分组可包括消息604、签名606、以及CGA参数数据结构316。接收计算设备可诸如通过使用发送者的公钥、用于生成第一和/或第二散列值的一个或多个CGA参数、和/或诸如第二散列值的预定部分中的0位的个数等散列指示符来验证ECGA。
现在参考图6、7、8和9,计算设备102向接收者计算设备106发送消息600,接收者计算设备106可以与图2所示的计算设备102类似或不同地配置。消息600可包含任何适当的内容,诸如标准和/或非标准IP首部608和消息正文610中的一个或多个,以及其它内容。IP首部608可包括源地址314、目的地地址602、以及任何其它适当的首部信息612中的一个或多个。消息600的正文610可以包括消息604、CGA参数数据结构、诸如在地址生成过程期间创建的数字签名606、以及任何其它适当的信息中的一个或多个。消息内容数据604可以是明文(即,未散列或加密)。数字签名606可以从消息中包括的数据来生成。
当计算设备106接收到经认证的消息600时,接收计算设备106可采用验证器700(图7)来试图认证消息发送者的身份。图7中的CGA验证器700可取来自接收的消息600的一个或多个输入来验证发送者。例如,ECGA验证器可取发送者地址314和CGA参数316。
验证器700可输出消息600可信的指示702。如果验证器700提供消息可信的指示702,则验证器知道CGA参数316包含地址所有者102的公钥300。验证器700然后可使用公钥300来认证来自地址所有者102的经签署的消息600,或与地址所有者102交换会话密钥。如果发送者不能被验证,则验证器可输出消息不能被认证的指示704。
图8和9示出了可由验证器700执行的示例验证过程。最初,地址314可被识别为ECGA。例如,地址中的“u”和“g”位可在步骤800处与1进行比较。如果任一个位为0,则地址314是非CGA地址,并且验证可能无法进行或者是不必要的834。或者,可使用某一其它机制来指示该地址是ECGA,或者这可从上下文或其它协议消息中推导。例如,某些协议可能要求某些地址是ECGA。继续步骤804,可从ECGA的预定部分中读取安全性参数Sec 302或第二散列值中0位的个数。例如,可从地址314的接口标识符的最左边三位读取安全性参数或0位个数。接着,在步骤806,确定公钥300的值。例如,公钥可从授权提供者检索、从CGA参数316检索、或者公钥可用任何适当的方式来检索。公钥的值可以是SubjectPublicKeyInfo(主题公钥信息)数据值。
在步骤808处,可找到并解码CGA参数(诸如CGA参数数据结构)。例如,CGA参数可随经签署的消息从地址所有者接收,或者它可用某种其它方式,诸如经由在线数据库传送。可检查冲突计数310的值以确定它是否小于预定的最大冲突数,如上所述该最大冲突数可以为3。由此,在一个示例中,可检查冲突计数的值以确定它是否为0、1或2。如果不是,则验证在步骤834处失败。接着,在步骤812处,可检查可被储存在CGA参数结构304316中的路由前缀308的数据的值以确定它是否等于消息600中的地址314的路由前缀(即,取决于协议,为最左边的64位或其它个数的位)。如果不同,则验证在步骤834处失败。如果验证失败,则可采取任何适当的响应动作,诸如验证器700可发出消息600(图6)的认证验证失败的指示704(图7)。
在步骤816处,可组合公钥300和CGA参数(可被储存在CGA参数结构304中)的一个或多个其它数据值,诸如串接。然后可对该组合执行适当的第一散列算法(例如,SHA-1算法)。结果是用于第一散列值的值。
在步骤818处,可将所计算的第一散列值的预定部分(例如,最左边64位)与地址314的接口标识符504(即,地址的最右边64位)进行比较。可忽略诸如“u”和“g”位等预定位设置以及储存安全性参数/时间参数的预定位(例如,接口标识符的最左边三位)中的差别。如果该64位值不同(除预定位值以外),则验证失败834,并且作为响应,验证器700可发出ECGA验证过程失败的指示704。
如果ECGA的接口标识符匹配所计算的第一散列值的所选部分,则可组合822公钥300和修饰符306的数据值。例如,可串接公钥和来自CGA参数数据结构的修饰符306。对于另一示例,可将CGA参数中的路由前缀和冲突计数设为0。然后对该组合执行第二散列函数(例如,SHA-1算法)。结果是用于第二散列值的值。在步骤824处,可将第二散列值的预定部分中的位(例如,最左边的几位)与0或另一预定值进行比较824。在一个示例中,可将预定部分中的0位的个数与值N*Sec进行比较,其中安全性参数Sec可从ECGA中提取。如果N*sec位中的任一个为非零,则验证失败834。作为响应,验证器700可发出指示704,该指示说明认证过程已失败。如果Sec等于0,则认证或验证从不会从步骤824失败,因为要比较的第二散列值的最左边位的个数为0(即,16*0=0)。
如果地址认证在步骤832处成功,则验证器700知道公钥300属于地址314的所有者。计算设备的验证器700将地址314认证为发送分组600的计算设备102的ECGA。接收计算设备106然后可自由地接受真实的消息内容数据604并作出相应的动作。
参考图10,将认证过程的一个示例性完整生命周期示为消息序列图。该过程以地址所有者(即,计算设备102)向地址创建器(即,生成器312)提供输入开始。输入可包括公钥、安全性值和/或时间参数、值为0的初始冲突计数、和/或适当的路由前缀。接收该输入的地址创建器可基于该输入和公钥来生成遵循协议的ECGA。地址生成器可将计算的ECGA和CGA参数返回给地址所有者。地址所有者可确定对所生成的ECGA是否发生了冲突。如果是,则地址所有者可递增冲突计数,并向地址创建器请求新的ECGA。该请求可包含一个或多个输入参数,和/或地址创建器可将该输入参数储存一段时间直到没有检测到冲突。如果没有检测到冲突,则地址所有者可开始使用该地址来进行通信。然后可使用ECGA来通过网络路由消息。例如,地址所有者可创建消息,并可用其公钥来签署该消息。消息可被发送到访问验证器来认证该消息的接收者。发送的消息可包含发送者的网络地址,例如ECGA、CGA参数、消息以及消息的签名。验证器可验证该消息,例如,验证ECGA对应于CGA参数并且签名是可验证的,等等。
尽管在计算设备生成要传输到接收计算设备106的分组600时使用大于0的用于安全性值302和/或时间参数的值是可任选的,但地址验证器700可支持所有的安全性参数值。更具体地,认证过程可能需要恒定量的计算和/或可能相对较快,而不论安全性或时间参数的值如何。此外,如果验证器不支持较高的安全性值,则地址所有者使用ECGA的动机可能较小。
CGA参数数据结构中的修饰符306和冲突计数310的值在验证器700执行的认证过程中可被忽略,例外是在步骤810处检查该冲突计数是否在允许范围内以及在步骤816和822处将两个值包括在适当的散列输入中。
验证方可以是与消息创建方相同的实体。例如,计算设备102创建消息600,并将其本地或远程地储存在图2的存储设备206或208之一中。稍后,计算设备检索消息600并采用可以为本地的验证器700来认证检索到的消息。实际上,本发明可在其中检索消息并需要检查其完整性来提供对进程安全的某一增强的置信度级别的任何情形中。
在使用自签名证书而非经优化的参数格式(例如,IETF RFC 3972中定义的CGA参数数据结构)的协议中,可增加签名验证。为简明起见,建议使用证书316的所有协议都需要验证其签名和有效性时段。
ECGA的其它实施例
基于ECGA的认证因性能和成本可能是有吸引力的。例如,ECGA可在没有适当的PKI证书可用时,或者在联系在线授权机构具有过高的性能损失时被用作后备。在许多情况下,在将基于ECGA的认证与其它同样强健的认证方法相结合时可能没有问题或者减少了问题。
单边认证的应用
如上所述,用于ECGA的认证机制将经认证的消息与其创建者相关联。所有权的ECGA认证可适用于除以上描述的之外的应用。对基于ECGA的认证的可能应用包括安全邻居发现以及重复地址(冲突)检测中的地址所有权证明、移动IPv6绑定更新认证、机会主义IP安全(IPSec)加密和认证的密钥交换等等。
协议(诸如IPv6)地址自动配置、重复地址(冲突)检测(DAD)、以及邻居发现(ND)可能受到服务拒绝攻击的威胁。协议的一种易受攻击性是不清楚谁拥有IP地址以及谁被授权来控制IP地址和链路层地址之间的映射。例如,在无状态自动配置中,IPv6节点选取它所处的网络中的一任意IPv6地址,并发送一广播消息来检查有没有别的任何人已经使用同一地址。攻击者可通过对所有重复地址检测消息进行响应并声称正在使用目标节点所选取的任何地址来阻止其它节点获得IP地址。ECGA的实现可减少这一难题,这表现在可使用消息地址和相关联的公钥来认证重复地址检测消息。
邻居发现是ARP的IPv6等效物,即用于将IP地址映射到链路层地址的协议。将IP地址映射到链路层地址的一种易受攻击性是攻击者可通过欺骗邻居发现消息来将分组重新定位到远离其直接下一中继段(hop)目的地之处。ECGA地址可减少或阻止上述攻击。在许多情况下,ECGA地址可能特别适用于保护这些协议的安全,因为目标是认证IP地址而非某一较高级标识符。节点可创建新的ECGA地址,然后通过签署DAD消息来证明其对该地址的所有权。类似地,ND消息上的签名可阻止或减少欺骗攻击。在两种协议中,签署各个IP分组。由此,经优化的参数格式对于这些应用可以是适当的。
在移动IPv6草稿规范的示例中,移动节点通过发送必须被认证以防止服务拒绝攻击的绑定更新来将其当前位置通知给其对应方。当前的移动IPv6草稿使用了基于某些网络路由器可能安全的假设的相对较弱的非密码认证方法。一种替代方案可以是使用基于ECGA的公钥认证。ECGA地址可能特别适用于这一目的,因为移动IP使用了IP地址作为唯一节点标识符。基于ECGA的认证还可减少协议消息数。由此,可以存在将基于ECGA的认证指定为对移动IPv6的可任选优化的情况。如果连接的两个端节点都具有ECGA地址,则端节点可在密钥交换中使用ECGA并创建IPSec安全关联来进行加密和数据认证。这种认证可“机会主义地”完成,即,只要两个端节点都支持ECGA就可完成。机会主义保护的好处可包括阻止IP源欺骗攻击、针对被动窃听的私密性、以及减少网络中介对IP分组的过滤中的一个或多个。在许多情况下,发送和接收节点认证彼此的IPv6地址,而非主机名或用户。在这一情况下,基于ECGA的认证可在攻击者干扰域名到IP地址的映射的情况下阻止IP源地址欺骗而非DNS欺骗。在将来,安全DNS可给出IP地址的真实性的合理保证。安全DNS和ECGA可一起来提供按照其域名对主机的强有力的认证。还可以有用于在DNS中储存PKI证书或公钥的提议。将ECGA与安全DNS相结合的一个优点在于名称服务无需储存公钥。它只需提供主机名和地址之间的可靠绑定,这是其原始功能。
关于进一步的信息,参见托马斯·奥拉(Tuomas Aura)于2003年1月提交公布的“Cryptographically Generated Address(CGA)”(用密码生成的地址),该文献对其所描述的全部内容整体结合于此。
非密码寻址
如上所述,可在网络地址本身内指示CGA或ECGA,诸如通过将IPv6接口标识符的u和g位都设为1。同样,包含不等于1的u或g位的网络地址不是CGA或ECGA。以此方式,接收节点可将网络地址标识为遵循或不遵循CGA或ECGA认证协议,这可意味着与该地址相关联的发送节点遵循或不遵循CGA或ECGA认证协议。
将地址及其相关联的节点正确标识为不遵循CGA或ECGA可允许在对某些节点可能需要或允许CGA或ECGA认证的同一网络或协议上的消息话务中使用非CGA或非ECGA认证方法。以此方式,下级节点可使用CGA或ECGA网络,同时仍限制攻击节点呈现CGA或ECGA作为非密码地址的能力。
将地址标识为CGA、ECGA、非密码地址或其它类型的地址可用于对消息区分优先级以供处理。例如,其中发送者地址是真实CGA或ECGA的消息可被分级在对其它消息和/或消息类型的处理之上。具有真实的非密码地址的消息可具有低于CGA或ECGA的优先级,但是可具有高于不包含发送者地址或不具有经认证的CGA、ECGA或非密码地址的消息的处理优先级。可以理解,可使用基于发送者地址类型的消息处理和/或认证的任何其它优先级区分。
可使用任何适当的方法来标识非CGA或非ECGA(以下称为非密码地址),同时降低攻击节点欺骗下级节点来获得对可能较不安全的认证方法的访问的能力。例如,可生成非密码地址的地址位,使得非密码地址不能是或可能不是对公钥的散列的编码。以此方式,接收节点可正确地标识发送节点的能力。
在一个示例中,可生成非密码地址,使得非密码地址的一个或多个节点可选择位为常数,或用对等节点已知的预定值来填充。网络地址的节点可选择位可包括不被协议托管或控制的网络地址的任何位。例如,在IPv6中,接口标识符是节点可选择的,例外是标识该地址的特征的某些托管位,诸如上述的u和g位。由此,IPv6地址的节点可选择位包括节点标识符中不包括诸如u和g位等位的那些位。在网络地址的节点可选择部分的至少一部分内设置的预定值可以是任何适当的值,诸如一系列0、或任何其它适当的值。在一个示例中,如图14的示例地址1400中所示,IPv6非密码地址的接口标识符1404的32-48个前导位1402可被设为0,然而可以理解,可预设不可选择位的任何合适部分以指示非密码地址。地址的节点可选择部分的预定位置中诸如一系列0等预定值可减小接口标识符匹配公钥的散列的可能性。
图15示出了生成如图14所示的非密码地址的示例方法1500。地址所有者或授权的第三方可通过根据支配协议来设置1502网络地址的不可选择部分来生成非密码地址。例如,网络地址的非选择部分可包括路由前缀和/或指示网络地址的特征、地址所有者、消息类型(例如,u和g位)等的其它位。网络地址的节点可选择位的预定部分可被设置1504为预定值。例如,如上所述,节点标识符的38-48个前导位可被设为0。节点可选择位的其余部分可根据地址生成技术来设置1406,这些技术包括标识冲突、子网标识等等。
地址所有者然后可在向网络的接收节点发送消息时使用非密码地址来标识其自身。图16示出了认证标识具有非密码地址的发送节点的消息的示例方法1600。接收节点可接收1602消息,并提取1604发送节点的网络地址。可将网络地址的预定部分与指示非密码地址的预定值进行比较1606。该预定值可以用任何适当的方式来检索,诸如通过对已鉴定的授权机构或地址分配授权机构的请求、从存储器中检索、通过对发送节点的请求等等。如果网络地址的预定部分等于该预定值,则接收节点可确定发送地址是非密码地址,并且采取1608适当的动作,该动作可以是在不认证的情况下接受消息、启动下级设备可接受的认证方法等等。如果网络地址的预定部分没有指示非密码地址,则接收节点最初可确定发送地址可以是CGA或非CGA,并启动1610适当的CGA或ECGA认证方法,如上述方法之一。
在另一示例中,可通过计算除地址所有者的公钥之外的值(以下称为非密码值)的散列来生成非密码地址。要散列化的非密码值可以是不会与公钥混淆的任何适当的值,诸如随机数、链路层地址、将节点标识为不遵循CGA或不遵循ECGA的串等等。对于由RFC-3972支配的CGA,公钥具有特定的ASN.1编码,可在选择非密码值避免它。
参考图17,非密码地址1700可包括路由前缀308和接口标识符1704。接口标识符可包括不是节点可选择的一个或多个位,诸如u和g位1706、1708。网络地址的节点可选择部分的至少一部分(例如,接口标识符1704的部分1710和部分1712,可以排除置位的位1706、1708)可包含非密码值的散列。节点可选择部分中包含密码值的散列的部分可以是网络地址中包含根据CGA或ECGA协议的公钥的散列的相同部分。
图18示出了生成诸如图17所示的非密码地址的示例方法1800。地址所有者或授权的第三方可生成非密码地址。可根据支配协议来设置1802网络地址的不可选择部分。例如,网络地址的不可选择部分可包括路由前缀和/或指示网络地址的特征、地址所有者、消息类型(例如,u和g位)等的其它位。可用任何方式来确定1804非密码值,诸如使用随机数生成器、预定值、链路层地址等。可使用任何适当的散列函数来散列化1806非密码值,该散列函数可以与用于生成CGA或ECGA的第一或第二散列函数相同或不同。可将网络地址的节点可选择位的预定部分设置1808为非密码值的散列的至少一部分。例如,可将接口标识符的59个预定位或最右边的40位(除不可选择位之外)设为包括非密码值的散列的最左边的值。节点可选择位的其余部分(诸如为安全性参数、散列指示符等保留的位)可根据地址生成技术来设置1810,这些技术可包括标识冲突、子网标识等。用于生成非密码地址的非密码值可被保存在适当的数据存储中。
地址所有者然后可在向网络的接收节点发送消息时使用非密码地址来标识其自身。图19示出了认证由诸如图16所示的非密码地址所标识的发送节点发送的消息的示例方法1900。发送节点可生成1902消息。消息可包括非密码地址作为发送节点标识符。消息还可包含用于生成发送节点的地址的非密码值。非密码值可被包括在消息中的任何适当位置中和/或用任何适当的方式包括在消息中。例如,非密码值可被包括在消息正文的证书中,非密码值可被包括在消息的首部和/或正文中、等等。或者,非密码值可从消息中省略。例如,接收节点可事先知道非密码值也可从数据存储中检索该非密码值,接收节点可从除消息之外的其它来源检索该非密码值,等等。
接收节点可接收1904消息并提取1906发送节点的网络地址。接收节点可用任何适当的方式来确定1908非密码值。例如,接收节点可从消息中提取非密码值、可从存储器中检索非密码值、可请求发送节点或其它节点在后续消息中发送非密码值、可从发送节点接收指示非密码值的单独消息、等等。接收节点可散列化1910该非密码值。可将网络地址的预定部分与所计算的非密码值的散列的至少一部分进行比较1912。如果网络地址的预定部分等于预定值的该部分,则接收节点可确定发送者的地址是非密码地址,并可采取1914适当的动作。适当的动作可包括诸如在不认证的情况下接受消息、启动下级设备可接受的认证方法等任何适当的动作。如果网络节点的预定部分没有指示非密码地址,则接收节点可确定发送地址可以是CGA或ECGA,并启动1816适当的CGA或ECGA认证方法,诸如以上描述的方法之一。可以理解,上述对CGA的扩展可以在生成并认证包括非密码值的散列的非密码地址时实现。
非密码值的至少一部分可以是接收节点已知或者可由其发现以认证该非密码地址。例如,非密码值可以是多个输入值的组合,诸如串接。例如,非密码值可以是诸如随机数、计数器值、或将使用该地址的节点特有的标识符等第一输入值和第二输入值的串接。接收节点可例如通过从授权提供者确定、通过从先前的或相关的通信中的信息确定、通过从上下文信息确定、或通过知道该发送节点或所有非CGA标识符节点的预定值,而事先知道第一输入值。如上所述,可使用任何适当的第一和第二输入值,使得所得的非密码值的组合不会与用于生成相应的CGA和/或ECGA的公钥和/或输入串混淆(或与其相似)。
消息可包括非密码值的散列以及用作该非密码值的一部分的第二输入值(例如,随机数),它如上所述可被包括在发送者地址中、消息的首部中、和/或消息的正文中。以此方式,消息可以不包括对第一输入值的未编码引用,例如明文。类似地,如果接收节点事先知道第二输入值,诸如随机数,则消息可包括非密码值的散列以及第一输入值,它如上所述可被包括在发送者地址中、消息首部中、和/或消息正文中。以此方式,消息可以不包括第二输入值。类似地,如果接收节点事先知道非密码值的第一和第二输入值,则除其在非密码值的散列内的已编码形式以外,消息中可以既不包括第一输入值也不包括第二输入值。尽管此处的描述包括第一和第二输入值,但是可以理解,可以适当地使用两个以上输入值以形成非密码值。
在一个示例中,第一输入值可对特定节点(或节点类型)预定,并且为接收节点所知。非密码值的第二输入值可以是多个可能的第二输入值之一。接收节点可能知道这多个可能的第二输入值,但是可能不知道使用这些可能的第二输入值中的哪一个来生成非密码值。如果可能的第二输入值的个数与接收节点的计算能力相比较小,则接收节点可尝试这些可能的第二输入值中的一个或多个来确定是否使用这些可能的第二输入值中的任一个。
在一个示例中,如图20所示,第一输入值2002和第二输入值2004可被串接以形成非密码值2000。第一输入值可以是任何适当的值,诸如子网前缀、链路层地址、NetBIOS、DNS名、发送节点的DNS域后缀、预定的非密码地址标识符等中的一个或多个。第二输入值可以是任何适当的值,诸如随机数、一组可能的第二输入值中的成员等等,它可以类似于以上参考修饰符值所描述的方式来生成和/或修改。非密码值2000可被输入到散列函数2006中,后者可以与以上参考图5描述的第一或第二散列函数相同或不同。散列函数的结果可用于确定非密码值的散列2008,诸如通过在由时间参数(以下进一步讨论)指定的一段时间内从散列函数的多个结果中选择、使用安全性值、或使用散列函数2006的直接结果来确定。如果时间参数被设为约为零,则该方法可选择所生成的第一个散列结果。以此方式,可限制生成非密码地址所花费的计算时间。
非密码值的散列的至少一部分可被插入到非密码地址的至少一部分中。例如,如图20所示,所选值2008的至少一部分可与路由前缀308和预设位2016(根据支配协议)串接。以此方式,所选散列值2008的一部分可作为非密码地址的部分2014来插入,另一部分可作为非密码地址的部分2018来插入,和/或再一部分可作为非密码地址的部分2020来插入。
如上所述,第一和/或第二输入值可用任何适当的方式,诸如通过消息中的首部、在消息的正文中(诸如在证书中)被传送到接收节点,或者可以是接收节点已知的。例如,如图20所示,第二输入值2004可通过将第二输入值插入到非密码地址的部分2020中,经由发送者的非密码地址被传送到接收节点。可以理解,可修改形成非密码地址的串接的顺序和长度以满足特定协议和/或节点的需求和/或关注事项。在一个示例中,第二输入值可被插入到具有16位的地址部分2014中,并且结果2012的部分可被插入到总共具有48位的地址部分2018和2020中。用于生成非密码地址的非密码值(例如,第一输入值和/或第二输入值)的至少一部分可被保存在适当的数据存储中。
图21示出了生成诸如图20所示的非密码地址的示例方法2100。可用任何适当的方式,诸如通过标识该地址所有者的预定的第一输入值,来确定2102第一输入值。例如,第一输入值可以是子网前缀、链路层地址、NetBIOS、DNS名、地址所有者的DNS域后缀、指示非密码地址的预定值等中的一个或多个。在一个示例中,指示非密码地址的预定值可以是诸如“this is not a cryptographic address”(这不是密码地址)等串或任何其它合适的串或值。
可用任何适当的方式初始化2104散列参数。例如,可诸如通过生成随机数、从预定的一组数字中选择一随机数等来初始化第二输入值。计算散列值的时间可被设为零,并开始运行以跟踪计算该散列值所使用的时间。冲突计数可被设为零。可组合2106,诸如串接第一和第二输入值。可散列化2108第一和第二散列值的组合以生成散列输出。可将计算散列输出的时间与预定的或输入的时间参数进行比较2110。如果未超过该时间参数,则可修改2122该非密码值的一个或多个部分。例如,可诸如通过将值递增1、选择该组可能的输入值中的下一输入值、生成另一随机数等,来修改第一和/或第二输入值。可组合2106新修改的输入值,并计算2108的另一散列值。该过程可重复,直到超过了时间参数。如果超过了时间参数,则可如上参考图12所描述的从所生成的散列值中选择2114非密码值的散列值。
可基于非密码值的散列用任何适当的方式来生成2118非密码地址。例如,可将路由前缀与所选的非密码值的散列的至少一部分串接。如果第二输入值是接收节点已知的或可由其确定(诸如通过尝试一组可能的第二输入值中的一个或多个),则可从非密码地址中省略第二输入值。在另一示例中,可将第二输入值与路由前缀以及非密码值的散列串接来形成非密码地址。
可将所生成的非密码地址与现有地址进行比较2120以确定是否发生了地址冲突。如果发生了冲突,则可修改2116第一和第二输入值中的一个或两者,并且该过程返回到组合2106第一和第二输入值。该过程可被重复,直到没有检测到与所生成的非密码地址的冲突或冲突数超过了最大冲突参数。如果没有检测到冲突,则可结束2124非密码地址的生成。所得的非密码地址可被提供给地址所有者、储存在数据存储中等等。另外,用于生成该非密码地址的输入值和/或非密码值中的一个或多个可被储存在适当的数据存储中。在一个示例中,如果地址所有者是下级节点,则网络管理员或地址服务可为该地址所有者计算非密码地址并诸如通过网络连接或配置接口(诸如用户接口或网络管理工具)将该地址传送到地址所有者。该非密码地址可由该地址所有者使用。
如上所述,作为非密码地址的所有者的发送节点可以是下级设备。由此,发送节点可能无法散列化公钥和/或形成证书。相反,发送节点本身可使用传统协议来认证来自其它节点的消息(例如,由接收节点发送的响应)。在某些情况下,地址所有者甚至可能不知道接收节点可将其地址验证为非密码地址。可以理解,上述散列扩展方法可用于扩展非密码生成和认证。以此方式,发送节点可指示其是下级设备,且由此无法验证CGA或ECGA,并且接收节点可确定发送节点具有非密码地址。
在一个示例中,接收节点可基于发送节点的非密码地址来启动对消息的认证。然而,在认证过程中,接收节点可将发送节点的地址标识为非密码地址。在某些情况下,如果检测到一非密码地址,则对该非密码地址的认证可以不包括任何进一步的认证动作,或者可使用替换(或传统)协议。
图22示出了确定由类似于图21的方法生成的地址是否可被标识为非密码地址的示例方法2200。方法2200可结合CGA和/或ECGA的认证方法来实现。该方法可串行、并行实现,和/或可被组合以减少计算等等。发送节点可生成2202消息。消息可包括非密码地址作为发送节点标识符。消息还可以不包含用于生成发送节点的地址的第一输入值和第二输入值、可以包含其中的一个或可包含两者。例如,如上所述,发送节点的地址可包括路由前缀以及非密码值的散列的至少一部分。消息可省略或排除对第一或第二输入值中任一个的未编码形式的引用或公开。
接收节点可接收2204消息,并提取2206发送节点的网络地址。接收节点可用任何适当的方式来确定2208第一输入值。例如,接收节点可从地址中提取子网前缀(或链路层地址等)作为第一输入值、可从存储器中检索预定的非密码标识符作为第一输入值、可请求发送节点在后续消息中发送第一输入值、可从发送节点接收指示第一输入值的单独消息等等。接收节点可确定2210第二输入值。例如,接收节点可从一组可能的第二输入值中选择一个第二输入值、从发送节点的地址中提取第二输入值等等。在一个示例中,该组可能的输入值可以是从0-16的一组整数,并且接收节点可选择这些可能的第二输入值中的一个。可以理解,可能的第二输入值的个数、范围、和/或值可以基于一个或多个因素来预定,这些因素包括第二输入值的长度、下级节点和/或接收节点的计算能力、网络大小、下级节点的个数等等。
接收节点可用任何适当的方式来生成2212非密码值,诸如通过串接第一和第二输入值、根据如对于ECGA讨论的扩展方法来散列化第一和/或第二输入值等等。接收节点可散列化2214非密码值。可将网络地址的预定部分与所计算的非密码值的散列的至少一部分进行比较2216。如果网络地址的预定部分等于非密码值的散列的该部分,则接收节点可标识2218发送地址是非密码地址并采取适当的动作,这些动作可以是在不认证的情况下接受消息、启动可由下级设备接受的认证方法等。如果网络地址的预定部分没有指示非密码地址,则接收节点可返回到确定2210第二输入值,并选择该组输入值中的下一可能的第二输入值且继续。如果在使用了所有可能的第二输入值之后并且没有一个所生成的散列值指示非密码地址,则接收节点可采取2220适当的动作。例如,接收节点可确定发送地址可能是CGA或ECGA并且启动适当的CGA或ECGA认证方法,诸如上述方法之一。或者,接收节点可确定地址既不是非密码地址,又不是CGA,也不是ECGA,并且可采取适当的动作,诸如丢弃所接收的消息、发送出错消息等等。
可以理解,上述对CGA的扩展可在生成并认证包括非密码值的散列的非密码地址时实现。例如,第一和第二输入值可被串接并通过第二散列函数来散列化。安全性参数或时间参数可用于选择第二散列值。诸如安全性参数Sec等散列指示符可被编码到地址位中,或可用另一方式传送来指定第二散列函数的该组允许值。非密码值可包括路由前缀、第一输入值、第二输入值、冲突计数、以及第二散列值中的一个或多个。非密码值可通过第一散列函数来散列化,并且第一散列函数的结果的至少一部分可被插入到非密码地址中。可使用类似的过程来认证非密码地址。
人类输入安全码
如上所述,用于生成ECGA的散列扩展技术可用于在其它应用中生成扩展的散列。例如,可使用类似的散列扩展技术来提高单向散列函数的强度和/或在某些外部要求限制了散列位的个数并且该限制低于被认为(或可能在将来)针对蛮力攻击安全的要求的任何情况下减少位数。
例如,为减少人类输入的安全码的长度(并维持相同的安全性),和/或提高人类输入的安全码的强度(并维持安全码的长度),可使用类似于ECGA的散列扩展的过程来生成和/或认证安全码。手动传送(例如,输入、验证、比较、发送等)的任何安全码可使用扩展散列方法来生成以提高安全性和/或限制安全码的长度同时维持相同的安全性级别。尽管以下使用允许媒体设备和遥控器之间的通信的安全码作为示例,但可以理解任何密钥交换协议(例如,TLS握手、互联网密钥交换(IKE)、安全支持提供者接口(SSPI))可使用要求是真实的、但不必是秘密(例如,网络设置、诸如车库门等设备的公钥、配置设置等),并可具有扩展的安全性和/或减少的长度的安全码。
图23示出了使用人类2310作为安全信道来传送安全码的系统。如图23所示,第二设备2302可能需要被第一设备2304认证以允许将第二设备用于第一设备。第一和第二设备可以是任何适当的设备,如上所述这些设备可彼此认证,或使用安全码来验证彼此的授权,或使用安全码对一个或多个参数达成一致。在此示例中,第二设备2302是诸如电视机等媒体设备,而第一设备2304是遥控器。
第一设备和第二设备可对作为诸如密钥分发等安全协议的一部分所需的某一数据2305达成一致。该数据可由第一设备发送给第二设备、由第二设备发送给第一设备、或作为诸如密码密钥交换等两个设备都发送和接收消息的协议的结果来创建。例如,数据2305可包含一个或多个分量,诸如设备或用户标识符、公钥、迪非一赫尔曼(Diffie-Hellman)指数、会话密钥、密码认证符、密码协议套标识符、时间或日期值、配置参数、实体标识符或安全策略描述。
在图23的示例中,第一设备2302可以是遥控器,安全码可以是第一设备的公钥的散列,而数据2305可以是公钥。第二设备可以是在人类输入安全码之前或之后使用公钥来认证第一设备的媒体设备。
用户2310可接收与第一设备相关联的安全码2306。在一个示例中,第一设备2304可用任何适当的方式将安全码传送给用户2310。例如,诸如第一设备的显示器等用户接口可将安全码传送给用户。在另一示例中,安全码可由第一设备被动地传送给用户。例如,安全码2306可通过可由用户在检索安全码时参考的标记或标签而可供用户2310使用。例如,安全码2308可以位于贴在第一设备上的标签上。除此之外或作为替代,用户可通过来自第三方的消息来发现该安全码。例如,用户可通过纸件邮件接收到将安全码通知给用户的证书。在另一示例中,用户可通过其它媒体,诸如电话呼叫或通过网络通信来访问安全码。在另一示例中,用户可能知道安全码,并且不需要从第一设备传送安全码。
为使人类用户2310担当安全信道,用户可使用任何适当的手段将安全码2306传送给第二设备2302。例如,在媒体设备或其它电子设备的情况下,用户可通过第二设备的字母数字键区或键盘来直接输入安全码。在另一示例中,用户2310可诸如通过将安全码输入到计算设备中并通过通信网络将该安全码发送到第二设备来将安全码传送给第二设备。在另一示例中,用户可通过电话链路将安全码传送给第二设备。例如,用户可通过电话机的数字键区来输入安全码,或者可说出安全码。可以理解,可使用任何通信手段来将安全码从用户传送到第二设备。
在另一示例中,第二设备可将同一安全码2306传送给用户,并且用户可将从设备2304接收到的安全码与从设备2302接收到的安全码进行比较。如果两个安全码相等,则用户可例如通过按下第二设备上的键或通过向第二设备输入某一其它确认输入来向第二设备发出接受信号。在安全协议中,对两个代码的这一比较可以等于用户将代码输入到第二设备中或作为其替代。两个代码的比较可具有减少了对用户需要的工作或与用户输入的安全码相比要求更简单的输入设备的益处。
除了第二设备认证第一设备之外,第一设备还可认证第二设备。在一个示例中,人类用户可将第二安全码传输到第一设备,该第二安全码可用于第二认证。在另一示例中,用户可通过按下键或通过向第二设备输入某一其它确认输入来用信号通知第二设备对该输入的接受。在又一示例中,用户可用信号通知两个设备两个安全码的成功比较,其中每一安全码是从设备之一输出的。在这些示例中,数据2305可包括诸如两个设备的公钥等两个设备的参数。
第二设备对第一设备的认证可授权第一设备访问第一设备、或控制第一设备、或使用第一设备作为输入或输出设备。第二设备向第一设备的认证同样可授权这些动作。
在另一示例中,用户可与单个设备对数据值2305达成一致,而非两个设备对数据2305达成一致。例如,参考图23,用户2310可检索不与第一设备2304相关联的安全码2306。如上所述,用户可用任何适当的方式来检索安全码,包括例如通过与第一设备相关联的标记或标签、来自纸件邮件的证书、电话呼叫或通过网络通信、在用户已知的情况下来自用户自己的存储器等等。第二设备2302可从通信网络接收数据、从诸如其存储器等存储设备检索数据、或者数据可由用户输入到第二设备中。为向第二设备2302认证或授权数据2305,用户可将安全码2306传送给第二设备。用户可用任何适当的方式来将安全码传送给第二设备,这些方式如上所述可包括,例如通过第一设备的字母数字键区或键盘直接输入安全码、将安全码输入到计算设备中并通过通信网络将安全码发送给第一设备、通过电话机的数字键区输入安全码或通过向之后可将安全码或授权消息传输到第一设备的人说出安全码,等等。或者,第二设备可输出安全码,用户然后可将该安全码与用户已知的值进行比较。用户然后可使用诸如按键等输入来用信号通知第二设备安全码的成功比较。在一个示例中,第二设备可在使用数据来配置设备设置、传送设置或访问控制设置之前认证或授权该数据。在另一示例中,第二设备可在允许用户采取期望的动作,诸如访问第二设备、与第二设备通信等之前认证或授权该数据。第一设备对输入的安全码的认证在以下进一步讨论。
图24示出了安全码生成的一个示例示意图,图25示出了生成安全码的示例方法的流程图。与如上参考图3、4、5和11-13所述的ECGA的生成相同,要由用户输入的安全码可通过使用扩展散列来生成。例如,对第二散列函数520的输入可包括数据2305和修饰符306。数据可以是任何适当的信息。例如,数据可包含设备或用户标识符、公钥、迪非—赫尔曼指数、会话密钥、配置参数、密码算法套件标识符、设备配置参数、通信参数、以及任何对安全性关键的信息中的一个或多个。修饰符306和数据2305可用任何适当的方式来组合。例如,如图24所示,修饰符与数据串接。然而,可以理解,可用任何适当的顺序和方式来实现对第二散列函数520的输入的顺序和组合。
第二散列函数520可散列化输入值以生成散列值500。可检查终止条件2404。终止条件可以是对预定的一组散列值中包括第二散列值的测试。例如,如上所述,终止条件可以是安全性值,诸如0位的个数或N*Sec。安全性值N*Sec可与散列值500的最左边部分中0位的个数进行比较。如果散列值500没有相等或更大个数的0位(或者任何其它预定位模式),则不满足终止条件。除此之外或作为替代,终止条件可以是时间参数。时间参数可以与总时间进行比较以确定第二散列值。如果未超过时间参数,则第二散列值的生成可继续。除此之外或作为替代,终止条件可包括指示生成比先前找到的更安全的散列值500的概率的概率阈值。如上所述,概率阈值可以与所计算的生成更安全散列值的概率进行比较。如果生成更安全散列值的概率大于或等于概率阈值,则第二散列值的生成可以继续。
如果散列值的生成继续(例如,不满足终止条件),则可修改2410修饰符306并可将新的修饰符值与数据2305组合(例如,串接)。散列值500的生成可继续,直到满足终止条件。应当注意,在某些实现中,修饰符不必是单独的数据字段,而数据的任何可变部分都可用作修饰符。
如果满足终止条件,则可从生成的多个散列值500中选择第二散列值。第二散列值可以用任何适当的方式来选择。例如,第二散列值可被选择为由第二散列函数生成的多个散列值500中“最安全”散列值(例如,产生最高Sec值的散列值500)。产生找到的最高Sec值的修饰符可被储存以用于安全码生成的其余部分。
一旦选择了第二散列值并储存了相关联的修饰符,可通过使用第一散列函数510确定第一散列值502来生成安全码2306。如上参考图5所述的,第一和第二散列函数可以是任何适当的散列函数,并且可以是相同或不同的散列函数。对第一散列函数的输入可用任何适当的方式来确定。例如,如图24所示,对第一散列函数的输入可包括修饰符306和数据2305的组合。在某些情况下,输入到第一散列函数的数据2305可以与输入到第二散列函数的数据不同,或者数据可以仅部分相同。在某些情况下,可在对第一散列函数的输入中包括一个或多个可任选附加数据值2412。
为防止第一散列值等于第二散列值,可修改一个或多个可任选参数以确保散列输入是不同的,例如,对第一散列函数的输入可以与对第二散列函数的输入不同,可向一个或多个输入追加静态变量等等。在其它情况下,第一散列函数可以与第二散列函数不同。在另一示例中,第二散列函数可以是较大散列值的预定部分,而第一散列值可以是该较大散列值的另一部分。
第一散列函数510的结果是第一散列值502。第一散列值502的至少一部分可用于形成安全码2306的至少一部分。例如,如图24所示,第一散列值502的至少一部分可形成整个安全码2306。可使用第一散列值的任何适当的部分,诸如第一散列值的最左边的、且具有对于安全码正确的个数的位的长度的部分。在其它情况下,可将第一散列值的至少一部分与一个或多个代码参数组合,诸如串接。这一个或多个代码参数(未示出)可包括例如制造商代码、日期指示符、位置指示符、网络指示符等。可以理解,可使用任何适当的预定代码参数来形成安全码2306。
可任选地,可将诸如Sec等散列指示符550与第一散列值的至少一部分组合以形成安全码2306。这例如在终止条件基于时间参数时是有用的。然而,如果散列指示符值是固定的、可从某一其它通信中知道、或从协议上下文中知道,则可能不必将散列指示符编码到安全码中。
在某些情况下,可将所生成的安全码2306与其它已知或可发现的安全码进行比较。如果没有冲突,则可将安全码2306与第一设备相关联地储存。在某些情况系,包含第一散列值的一部分的安全码可被编码以允许人类用户更容易理解和/或传输。例如,安全码可被编码到一系列字母数字字符中。如上所述,可准备要传送给用户2310的安全码,诸如打印在标签上、编码到第一设备中以向用户显示、打印到证书中以发送或用纸件邮件寄给用户等等。
如果与任何现有的安全码有冲突,并且应用程序或协议要求安全码是唯一的,则可修改对第一散列函数的一个或多个输入值。在一个示例中,可调整修饰符,并且安全码生成可返回到使用第二散列函数510来生成散列值500。在另一示例中,可如图4所示递增420冲突计数(可被初始化为零)。冲突计数可以是输入到第一散列函数510的附加数据值2412之一。以此方式,可使用递增的冲突计数以及其它原始输入参数(例如,修饰符306和数据2305)来确定新的第一散列值502。冲突计数也可以是输入到第二散列函数520的可任选输入值。然而,冲突计数值可在生成第二散列值时被初始化为零并保持为零。
如果应用程序或协议要求安全码是唯一的,则从新生成的第一散列值502得到的安全码可与已知和/或可发现安全码进行比较以确定是否发生冲突。该过程可重复直到不发生冲突。
图25示出了生成安全码的示例方法的流程图,该方法类似于图13的生成ECGA的方法。然而,可以理解,安全码可以用与上述可扩展散列中的任一种相似的方式来生成。如图25所示,可确定2502数据2305。如上所述,数据可以是两个设备或一个设备与用户希望达成一致的任何适当的信息。可初始化2504修饰符。例如,修饰符可被初始化为一随机值,在某些情况下该随机值可以是16个随机八位组。如果要进行冲突评估,则可将冲突计数初始化为零或其它适当的值。
可确定2506终止条件。如上所述,终止条件可以是第二散列值中的预定位模式。例如,在第二散列值的最左边位中可期望有至少N*Sec个0位。除此之外或作为替代,第二散列值的生成可接受在给定时间参数期间生成的“最安全”散列值。如上所述,时间参数可随时间修改以基于生成安全码的计算设备的计算速度和能力针对将来的计算期望进行调整。除此之外或作为替代,终止条件可包括指示在给定一段时间内生成第二散列函数的更安全散列值结果的概率的概率阈值,该给定一段时间可以是被分配给安全码生成的剩余时间。概率阈值可取决于生成第二散列值的计算系统所期望的计算时间、安全码中期望的安全性以及任何其它适当的参数而被设为任何适当的参数。
为形成对第二散列函数的输入,可用任何适当的方式将数据与修饰符组合2508。例如,数据可与修饰符串接。组合的值然后可由第二散列函数散列化以生成2510散列值。基于第二散列函数的结果,可确定2512散列指示符。例如,可如上所述对散列值的最左边部分中0的个数进行计数,并且可确定相关联的安全性值(Sec)作为散列指示符。
可用任何适当的方式,诸如通过选择由第二散列函数生成的多个散列值中最“安全”的散列值,来选择2516第二散列值。例如,第二散列值可被设为具有找到的最高安全性值(例如,最左边0位的个数)的散列值。更具体地,散列指示符可以是安全性值,并且可与先前确定的散列指示符进行比较。与最高安全性值(散列指示符)相关联的散列值可被选为当前第二散列值。与所选的第二散列值相关联的修饰符和散列指示符可用任何适当的方式储存,诸如储存在数据存储中。第二散列值可在生成第二散列函数的后续结果时更新,直到满足终止条件。
可评估2518终止条件。例如,可将时间参数与从第二散列函数生成多个散列值结果的运行时间进行比较。除此之外或作为替代,终止条件可确定第二散列值是否属于由散列指示符定义的一组可接受散列值。例如,终止条件可将散列指示符与第二散列值的一部分中的期望位模式进行比较。对于一个更具体示例,散列指示符可指示散列值的最左边部分中0位的个数,并且第二散列值的生成可在散列指示符等于或超过安全性参数时终止。除此之外或作为替代,终止条件可包括确定生成比现有的所选第二散列值更安全的第二散列值的概率。如果该概率低于或等于一概率阈值,则第二散列函数的生成可终止。
如果不满足终止条件,则可用任何适当的方式来修改2520修饰符,例如递增。应当注意,修饰符306无需是单独的数据字段,而可以是数据2305的可变部分。生成第二散列值的过程可返回到将修饰符与数据组合以继续生成第二散列函数的结果作为潜在的第二散列值。
如果满足终止条件,则可将所选第二散列值的修饰符与数据2305相组合2522,并可任选地与附加数据2418相组合2522。附加数据可以是两个设备,或一个设备与用户希望达成一致的任何适当的信息。在附加数据2418而非数据2305中包括特定信息的原因是附加数据比数据更频繁地改变,或者附加数据在生成第二散列并确定修饰符时是不可用的。数据或附加数据还可包括一个或多个可任选参数,诸如冲突计数。对第一散列函数的输入的分量可用任何适当的方式来组合,诸如串接。然后可由第一散列函数来散列化该组合以生成2524第一散列值。
然后可从第一散列值的至少一部分生成2526安全码。例如,可选择第一散列值的一部分,诸如第一散列值的最左边部分的正确个数的位,来形成安全码。可用任何适当的方式将第一散列值的该部分与其它信息相组合,诸如串接。例如,可将制造商标识符、日期指示符、散列指示符、修饰符等中的一个或多个与第一散列值的该部分串接来生成安全码。
如果应用或协议要求安全码是唯一的,则可将所生成的安全码与其它已知或可发现的安全性值进行比较以确定是否存在冲突。如果没有找到冲突,则可返回2536所生成的安全性值。可以理解,任何适当的计算设备可生成安全码。例如,第一设备可计算其自己的安全码,或者,诸如第一设备的制造商等第三方可计算安全码并将该安全码及其相关联的修饰符和/或散列指示符储存在第一设备的数据存储中。在另一示例中,用户可计算安全码(使用第一设备或另一设备)并将该安全码传送到第一设备。在又一示例中,第二散列值可由制造商计算,并且第一散列值可由该设备计算,同时在附加数据中包括制造商不可用的某些信息。
如果存在冲突,则可修改对第一散列函数和第二散列函数中的任一个或两者的输入参数。例如,可用任何适当的方式来递增冲突计数,诸如递增1。可将冲突计数与一冲突阈值进行比较。如果冲突计数等于或超过该冲突阈值,则可采取适当的动作。例如,可暂停生成安全码的过程,和/或可发送一出错消息。如果未超过该冲突阈值,则生成安全码的过程可返回到组合2522修饰符、作为第二散列参数的冲突计数、数据值和可任选的附加数据值,直到确定了适当的安全性值或该过程被暂停。
如果生成安全性参数,则该安全性参数可用任何适当的方式来编码以供使用。例如,该安全性参数可被编码成一字母数字组合。在某些情况下,编码可选择彼此可容易区分和/或不易于出现转录差错的字母和/或数字。例如,可避免数字0和1,和/或字母“I”和“O”以减少转录中的差错。本领域的技术人员可以理解,可适当避免或添加其它字母或数字,诸如避免单个数字或字母的顺序重复。可以理解,替换实施例不限于罗马字符和阿拉伯数字。例如,可使用符号和其它字母表和数字体系。
由人类用户传送到第一和/或第二设备中的任一个的所生成的安全码可与第二设备先前或随后知道的数据进行比较。
图26示出了将数据与安全码进行比较的另一示例方法2600的流程图,该方法类似于以上参考图8所描述的方法。为使第二设备能够认证第一设备和/或用户,第二设备可接收2602用户传送的安全码。如果所输入的安全码被编码,则第一设备可解码该安全码。第一设备可检索2604一个或多个散列参数。散列参数可包括散列指示符,诸如安全性参数、修饰符、数据、附加数据。数据或附加数据可包括冲突计数。例如,第一设备可从存储器中检索一个或多个散列参数、可从安全码中解析散列参数值(例如,该值与第一散列值的部分串接以形成安全码)等等。可以理解,可用不同的方式来检索不同的散列参数。
如果数据或附加数据包括冲突计数,则可将该冲突计数与预定阈值进行比较2608。如果冲突计数超过了预定阈值,则对安全码的认证失败,并且可采取2606适当的动作。例如,适当的动作可包括向用户发送出错消息、停止试图认证安全码、拒绝对第一设备的访问等等。
如果没有冲突计数,或者如果冲突计数没有超过该阈值,则可组合2610并由第一散列函数散列化2612一个或多个检索到的参数。可将第一散列函数的结果的预定部分与输入的安全码的一部分进行比较2614。如果值不同,则认证失败,并可采取2606适当的动作。
如果值匹配,则可用预定方式组合2616散列参数,诸如修饰符和数据值以及附加数据值,以形成对第二散列函数的输入。该组合可由第二散列函数来散列化2618。可例如通过从安全码中解码或通过使用一固定值或由协议上下文指定的值来确定2620用于所计算的第二散列值的散列指示符。可以确定该第二散列值是否属于由散列指示符定义的一组可接受的散列值。例如,可对第二散列值的最左边部分中0位的个数进行计数。可将所计算的第二散列值的散列指示符与检索到的所接收安全码的散列指示符进行比较2622。如果第二散列值的值不属于该组可接受的散列值(例如,如果0位的个数小于散列指示符所要求的个数),则认证失败,并可采取2606适当的动作。如果第二散列值属于该组可接受的散列值(例如,如果0位的个数大于或等于散列指示符所要求的个数),则该安全码可被认为已验证并可采取2634适当的动作。例如,第二设备可处理数据2305或可传送一成功消息、可允许访问等等。
在生成安全码时使用散列扩展,可提高安全码的强度和/或可将人类用户传输的平均信息量保持在合理小的水平。当计算能力随着时间推移而增长时,可增大时间参数和/或安全性值以适应对更强安全码的需求。例如,可增加0位的个数(例如,散列扩展的长度)。例如,32位的散列扩展对于用当前计算设备进行的计算可能是微不足道的。然而,使用散列扩展技术,人类输入安全码可具有30位的平均信息量,其针对蛮力攻击的提高的强度为30位+32位散列扩展=62位,典型攻击者难以在实时中间人攻击中对其破解。
本领域的技术人员可以认识到,用于储存程序指令的存储设备可分布在网络上。例如,远程计算机可储存被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载该软件的一部分或全部来运行程序。或者,本地计算机可按需下载软件片断,或通过在本地终端上执行某些软件指令并在远程计算机(或计算机网络)上执行某些指令来进行分布式处理。本领域的技术人员还可认识到,通过利用本领域的技术人员已知的常规技术,该软件指令的全部或一部分可由诸如DSP、可编程逻辑阵列等专用电路来执行。
参考所示实施例描述并示出了本发明的原理之后,可以认识到,可在不背离这些原理的前提下作出所示实施例的某些修改、置换、添加及其子组合。因此,所附权利要求书以及之后引入的权利要求书旨在被解释为包括落入其真实精神和范围之内的所有这些修改、置换、添加、子组者及其等效技术方案。
鉴于可应用本发明的原理的许多可能的实施例,应当认识到,此处相对于附图所描述的实施例意味着仅是说明性的,且不应被认为是限制本发明的范围。例如,出于性能原因,可用硬件,诸如在网卡上,而非软件来实现密码操作。因此,此处描述的本发明构想了落入所附权利要求书及其等效技术方案之内的所有这样的实施例。