32 (OC)* keyChain的本质

 1:它是一个sqlite数据库,其保存的所有数据都是加密过的。

 2:Keychain是加密规则(key)的集合。每个规则必须含有以下三个要素:认证算法、认证密钥(加密字符串)、规则的时间。

 3:keychain item。15000个item和1个item50个键值对。

 4:keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。

18  Keychain配置

Keychain是一个集中控制认证算法和认证密钥的应用程序,广泛应用于应用协议的认证中。

18.1  Keychain简介

介绍Keychain的定义和作用。

定义

Keychain是加密规则(key)的集合。它可以为应用程序提供认证功能,在认证过程中,Keychain可以动态地更改认证算法和密钥。Keychain在不中断业务的前提下,通过定期更改认证加密的密钥和算法,提升网络数据传输的安全性。

目的

在网络中,两个应用程序进行通信时,会有一些非法用户试图篡改数据报文或者伪装成认证用户,这样会导致安全问题。为了能识别这些被篡改的报文和伪装的用户,应用程序通过定义认证规则进行信息的认证。一个应用程序可以使用自己独有的认证规则。

然而,长期使用同一个认证规则,容易被非法用户破解。如果由管理员人工修改通信双方的认证规则,将是非常繁琐和复杂的任务,同时,人工修改也容易引入各种问题。此外,如果每个应用程序独立拥有自己的认证规则,当许多应用实例需要配置相同的认证算法时,将会导致数据和配置过程重复。

为了解决上述问题,需要一种能够管理所有认证信息的程序,因而引入了Keychain。Keychain可以集中控制所有的认证过程,并且能够在认证过程中动态更改认证算法和密钥,而不需要人工过多参与。这极大的提高了通信的安全性。

 

18.2  原理描述

介绍Keychain的实现原理。

 

18.2.1  基本概念

Keychain是加密规则(key)的集合。每个规则必须含有以下三个要素:认证算法、认证密钥(加密字符串)、规则的发送/接收时间。其中认证算法和认证密钥用来控制加密/解密报文,发送/接收时间表示在这段时间内,能够使用配置的算法和密钥对报文认证后发送/接收。

key

key包含认证信息和活跃时间。认证信息包括认证算法和认证密钥。Keychain支持MD5、SHA-1、SHA-256、HMAC-MD5、HMAC-SHA1-12、HMAC-SHA1-20等认证算法。应用程序应用Keychain时,也必须支持Keychain里配置的认证算法。认证密钥是一串字符,由用户配置得到。

活跃时间包括发送时间和接收时间。设备上通过设置key的接收和发送活跃时间实现动态变更认证信息。根据key配置的接收时间和发送时间,key可以分为活跃的发送key和活跃的接收key:

  • 活跃的发送key:当系统时间处于key配置的发送时间范围内时,该key处于发送活跃状态。应用程序发送报文时,使用此key配置的认证算法和密钥生成发送端的MAC(Message Authentication Code)。

  • 活跃的接收key:当系统时间处于key配置的接收时间范围内时,该key处于接收活跃状态。应用程序接收报文时,使用此key配置的认证算法和密钥生成接收端的MAC。

Message Authentication Code

Message Authentication Code(信息认证码,简称MAC)是一串字符。在Keychain的应用中,由设备使用认证算法,对数据报文和认证密钥进行计算得到。

Keychain的时间模式

Keychain的时间模式是指Keychain中的key按时间工作的方式,包括绝对时间模式和周期时间模式。

绝对时间模式指时间是UTC格式,它表示Keychain只能在一个绝对的时间段内工作。

周期时间模式表示Keychain周期性地在指定时间段内工作。周期时间模式又包括:
  • 日周期模式,表示Keychain中的key在每天固定时间段内生效。
  • 周周期模式,表示Keychain中的key在每周指定的周几生效。
  • 月周期模式,表示Keychain中的key在每月指定的日期生效。
  • 年周期模式,表示Keychain中的key在每年指定的月份生效。

一个Keychain只能指定一种时间模式。在Keychain创建时就需要指定时间模式,key的发送和接收时间根据Keychain的时间模式进行配置。

缺省发送key

如果在某个时间段管理员没有配置key,此时将没有活跃的发送key。在该时间段,应用程序将没有认证的交互。为了避免这种情况,可以配置缺省发送key。在没有其他活跃的发送key时,应用程序将使用缺省发送key作为活跃的发送key。 

接收容忍时间

当设备上的发送key发生改变时,对应接收端的接收key也必须发生改变。由于时间不同步,在两台设备上的key发生改变时,可能会有时间差。在这段时间内,由于key的不一致将导致报文丢失。为了避免该情况出现,需要在接收key发生切换时有一个平滑的过渡。这个平滑的过渡时间段称为接收容忍时间。

接收容忍时间只能对接收key有用,可以在每一个Keychain中配置接收容忍时间。配置接收容忍时间后,如图18-1所示,接收key的启动和结束时间都将做相应的延长。

图18-1  容忍时间生效时间段 

TCP kind-value和TCP algorithm-id

TCP应用程序之间通过TCP认证建立连接。对于TCP的认证交互,TCP使用增强的TCP认证选项。

  • 不同的厂商使用不同的kind-value值代表增强的TCP认证选项。为了实现不同厂商设备之间的交互,kind-value是可配置的,能根据对端设备的TCP类型进行调整。

  • 在TCP的增强认证选项中存在一个algorithm-id字段,该字段用来表示认证算法的类型。由于algorithm-id不是因特网地址分配组织IANA(Internet Assigned Numbers Authority)统一定义的,不同的厂商之间使用不同的algorithm-id值来代表认证算法。为了实现不同厂商之间的互通,algorithm-id的值与认证算法的对应关系也是可以配置的。

18.2.2  非TCP应用程序应用Keychain的原理

Keychain为应用层协议提供了认证服务。当创建之后,Keychain需要被应用程序使用才能生效。按照不同应用程序应用Keychain进行认证的不同处理流程,可分为非TCP应用程序使用Keychain认证和TCP应用程序使用Keychain认证。

非TCP应用程序使用Keychain认证发送报文

图18-2所示,非TCP应用程序使用Keychain发送报文的流程如下:
  1. 应用程序询问Keychain的活跃发送key ID和Keychain提供的算法类型。

  2. 如果存在活跃的发送key,Keychain模块提供活跃的发送key ID和算法类型;如果没有,应用程序正常发送报文。

  3. 应用程序收到活跃发送key ID和算法类型后,将Keychain算法类型转换为相应协议的标准算法ID,并将此算法ID和key ID封装进报文。

  4. 应用程序提供需要用来计算MAC(Message Authentication Code)的数据。

  5. Keychain模块使用活跃的发送key定义的认证算法和密钥,计算出MAC,并返回MAC。

  6. 应用程序产生携带认证信息的报文,并发送出去。

图18-2  非TCP应用程序使用Keychain发送报文 

非TCP应用程序使用Keychain认证接收报文

图18-3所示,非TCP应用程序接收到报文后的处理流程如下:
  1. 接收端接收到携带认证信息的报文。

  2. 接收端应用程序将接收的算法ID转换为Keychain算法类型。

  3. 接收端应用程序提供数据报文、key ID、算法类型、需要验证的MAC值。

  4. Keychain模块根据接收到报文的key的ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。

  5. 如果对应的接收key活跃,Keychain模块使用此key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。

  6. 返回成功消息或者失败消息。

  7. 应用程序根据Keychain的认证结果决定接收或丢弃报文。

图18-3  非TCP应用程序使用Keychain认证接收报文 
 说明: 
IS-IS使用Keychain认证,发送报文时不携带key ID。当接收端收到含认证信息的IS-IS报文时,设备会查看所有活跃的接收key,找一个算法相同的进行校验。

18.2.3  TCP应用程序应用Keychain的原理

TCP应用程序使用Keychain认证发送报文

在donica草案中,TCP使用增强的认证选项进行认证交互,增强认证选项的报文格式如图18-4所示:

图18-4  TCP增强认证选项格式 

目前该草案还没有标准化,IANA没有统一定义类型(Kind)值和认证算法对应的ID(Alg-id)。各设备商使用不同的取值。为了使不同厂商的设备能够互通,Keychain使TCP类型值和认证算法的ID可以配置和维护。

图18-5所示,TCP应用程序应用Keychain发送报文的流程如下:
  1. 应用程序询问活跃的发送key ID、TCP Kind、TCP algorithm-id。

  2. 如果存在活跃的发送key,则Keychain模块提供应用程序请求的信息。

  3. 应用程序用TCP Kind、TCP algorithm-id、key ID填充TCP增强认证选项。

  4. 应用程序给Keychain模块提供需要用来计算MAC(Message Authentication Code)的数据。

  5. Keychain模块根据活跃发送key所配置算法和密钥,计算MAC,并返回MAC值。

  6. 应用程序将获取的MAC填充到增强认证选项,将报文发送出去。

图18-5  TCP应用程序使用Keychain发送报文 

TCP应用程序使用Keychain认证接收报文

图18-6所示TCP应用程序接收到报文后的处理流程如下:
  1. 接收端收到携带认证信息的TCP报文。

  2. 接收端向Keychain模块提供数据报文、key ID、TCP algorithm-id、TCP Kind以及需要验证的MAC。

  3. Keychain模块检查,接收报文中的TCP类型和算法ID和本端的是否一致。如果不一致,则返回认证失败消息。

  4. Keychain模块根据接收到的key ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。

  5. 如果对应的接收key活跃,Keychain模块根据该接收key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。

  6. 返回成功消息或者失败消息。

  7. 应用程序根据Keychain的认证结果确认接收或丢弃报文。

图18-6  TCP应用程序使用Keychain接收报文 

18.3  应用场景

介绍Keychain的应用场景。

Keychain为多种应用协议提供了认证保护,设备支持Keychain认证的应用协议包括:RIP、IS-IS、OSPF、BGP、MSDP等。配置应用程序使用Keychain认证的流程都一样,首先需要创建Keychain,然后应用程序才能使用Keychain进行认证。

IS-IS使用Keychain进行认证

IS-IS作为一种广泛应用的路由协议,提高IS-IS协议的安全性是保证IS-IS正确路由的基础。IS-IS可以通过配置固定认证算法或密钥的方式对其进行认证,但是固定认证算法和密钥很容易被破解。为了增强IS-IS协议的安全性,可以使用Keychain对IS-IS协议报文进行认证。

图18-7所示,RouterA、RouterB、RouterC、RouterD、RouterE之间通过IS-IS协议实现网络互连。RouterA、RouterB、RouterC属于区域10,RouterD、RouterE属于区域20。RouterA和RouterB是Level-1设备,RouterD和RouterE是Level-2设备,RouterC是Level-1-2设备。配置Keychain对IS-IS协议报文进行认证,需要在每台设备上建立Keychain,然后在IS-IS进程下配置路由域认证和区域认证,同时在接口下配置接口认证。

图18-7  使用Keychain对IS-IS协议进行认证 
 

18.4  配置注意事项

介绍配置Keychain的注意事项。

Keychain只是对认证算法和加密密钥的管理,需要具体的应用程序使用Keychain,Keychain才能起作用。

目前设备支持应用Keychain的程序如下:
  • RIP
  • OSPF
  • OSPFv3
  • IS-IS
  • MSDP
  • MPLS
  • BGP and BGP4+
 

18.5  配置Keychain

配置Keychain,可以实现在不中断连接的情况下,定时更换认证加密的密钥和算法,从而保证应用程序数据传输的安全性。

前置任务

在配置Keychain之前,需完成以下任务:

  • 设备上电,自检正常

 

18.5.1  创建Keychain

背景信息

配置对应用程序进行认证和加密保护时,需要首先创建一个Keychain。另外,如果删除正在使用的Keychain,可能会造成通信的中断,请谨慎操作。

TCP(Transmission Control Protocol)应用程序之间通过TCP认证建立连接。对于TCP的认证交互,TCP使用增强的TCP认证选项。目前,不同的厂商使用不同的kind-value值代表增强的TCP认证选项,使用不同的ID值代表不同的认证算法。当TCP应用程序使用Keychain时,用户必须根据对端的配置,进行相应的配置,以实现不同厂商之间的互通。

操作步骤

  1. 执行命令system-view,进入系统视图。
  2. 执行命令keychain keychain-name mode { absolute | periodic { daily | weekly | monthly | yearly } },创建Keychain,并进入Keychain视图。
  3. (可选)配置TCP认证参数
    1. 执行命令tcp-kind kind-value,配置Keychain认证的TCP类型值。
    2. 执行命令tcp-algorithm-id { hmac-md5 | hmac-sha-256 | hmac-sha1-12 | hmac-sha1-20 | md5 | sha-1 | sha-256 } algorithm-id,配置TCP认证加密算法与算法ID的对应关系。

       

       说明: 

      HMAC-MD5和MD5认证算法存在安全风险,推荐配置HMAC-SHA-256或SHA-256认证算法。

       

  4. (可选)执行命令receive-tolerance { value | infinite },配置Keychain的接收容忍时间。 

     

     说明: 

    建议用户配置接收容忍时间,这样可以使接收key的启动和结束时间都做相应的延长,以确保不会因为网络上时间不同步而导致报文丢失。

     

18.5.2  配置key

背景信息

配置Keychain时,key代表Keychain认证规则,每一个key包括:认证算法、认证加密的密钥、活跃的发送时间、活跃的接收时间,以及该key是否为缺省的发送key。一个Keychain中最多可以有64个key。

同一个Keychain中key必须唯一。不同的Keychain中key ID可以相同。同一Keychain中不能有多个发送key同时生效,否则应用程序无法选择应用哪个发送key进行加密。但是同一Keychain中可以有多个接收key同时生效,接收端会根据接收到的key ID,选择ID相同的活跃的接收key进行解密。

如果发送端的key发生变更,接收端的key也需要变更。由于网络上时钟可能不同步,在接收端和发送端变更key时,有可能存在时间延迟。在延迟的时间范围内会造成数据丢失。为了实现两端key变更时不丢包,可以配置接收容忍时间。接收容忍时间只对接收端的key有效。接收容忍时间将导致接收的起始和终止的时间延长。

如果在某个时间段管理员没有配置key,此时将没有活跃的发送key。在该时间段,应用程序将没有认证的交互。为了避免这种情况,可以配置缺省发送key。任何存在的key都可以被指定为缺省发送key,在一个Keychain中只能有一个缺省发送key。在没有其他活跃的发送key时,应用程序将使用缺省发送key作为活跃的发送key。

操作步骤

  1. 执行命令system-view,进入系统视图。
  2. 执行命令keychain keychain-name,进入Keychain视图。
  3. 执行命令key-id key-id,创建key-id,并进入key-id视图。
  4. 执行命令algorithm { hmac-md5 | hmac-sha-256 | hmac-sha1-12 | hmac-sha1-20 | md5 | sha-1 | sha-256 | simple },配置key采用的认证加密算法。

     

    各个应用程序支持的算法有不同,具体情况如下:

    RIP支持MD5和simple;BGP和BGP4+支持MD5;IS-IS支持MD5和simple;OSPF支持MD5、simple和HMAC-MD5;MSDP支持MD5;MPLS的LDP支持MD5,MPLS的TE支持HMAC-MD5。

     说明: 

    HMAC-MD5和MD5认证算法存在安全风险,推荐配置HMAC-SHA-256或SHA-256认证算法。

    simple是一种不安全的认证算法,推荐配置HMAC-SHA-256或SHA-256认证算法。

     

  5. 执行命令key-string { plain plain-text | [ cipher ] cipher-text },配置key的认证加密的密钥。

     

     说明: 

    配置认证密码时,请尽量选择密文模式,因为明文格式密码会以明文的方式保存在配置文件中,有高安全风险。为保证设备安全,请定期修改密码。

     

  6. 配置发送时间。创建Keychain时,选择的时间模式不同,配置发送时间的命令也不同。具体请参考表18-1

     

    表18-1  配置发送时间

    创建Keychain的模式

    配置发送时间的命令

    absolute

    send-time utc start-time start-date { duration { duration-value | infinite } | to end-time end-date }

    periodic daily

    send-time daily start-time to end-time

    periodic weekly

    send-time day { start-day-name to end-day-name | day-name &<1-7> }

    periodic monthly

    send-time date { start-date-value to end-date-value | date-value &<1-31> }

    periodic yearly

    send-time month { start-month-name to end-month-name | month-name &<1-12> }

     

     

     说明: 
    建议配置NTP(Network Time Protocol),使网络中各设备的时钟保持一致,以避免因为时钟不同步,而产生混乱。

     

  7. 配置接收时间。创建Keychain时,选择的时间模式不同,配置接收时间的命令也不同。具体请参考表18-2

     

    表18-2  配置接收时间

    创建Keychain的模式

    配置接收时间的命令

    absolute

    receive-time utc start-time start-date { duration { duration-value | infinite } | to end-time end-date }

    periodic daily

    receive-time daily start-time to end-time

    periodic weekly

    receive-time day { start-day-name to end-day-name | day-name &<1-7> }

    periodic monthly

    receive-time date { start-date-value to end-date-value | date-value &<1-31> }

    periodic yearly

    receive-time month { start-month-name to end-month-name | month-name &<1-12> }

     

  8. (可选)执行命令default send-key-id,配置该key为缺省发送key。

18.5.3  配置应用Keychain

背景信息

配置Keychain之后,需要配置应用程序使用Keychain,否则Keychain不会生效。

该部分以RIP为例介绍应用程序使用Keychain的配置。不同的应用程序使用Keychain时,命令可能不一样,具体请参考表18-3
表18-3  支持Keychain认证的特性
特性配置链接

RIP

rip authentication-mode

MSDP

peer keychain(MSDP)

OSPF

authentication-mode(OSPF)

ospf authentication-mode

IS-IS

area-authentication-mode

isis authentication-mode

BGP\BGP4+

peer keychain (BGP)

MPLS LDP

authentication key-chain

MPLS RSVP

mpls rsvp-te authentication

操作步骤

  1. 执行命令system-view,进入系统视图。
  2. 执行命令interface interface-type interface-number,进入接口视图。
  3. 执行命令rip authentication-mode keychain keychain-name,配置RIP使用Keychain。

18.5.4  检查配置结果

操作步骤

  • 执行命令display keychain keychain-name,查看Keychain的当前配置。
  • 执行命令display keychain keychain-name key-id key-id,查看key-id的当前配置。

18.6  配置举例

介绍Keychain配置举例。配置示例中包括组网需求、配置思路等。

 

18.6.1  配置RIP应用Keychain认证示例

组网需求

图18-8所示,网络中RouterA和RouterB通过RIP-2实现互通。

要求在数据传输过程中,RIP连接始终稳定,不会因为非法用户的攻击而断开连接。

图18-8  RIP应用Keychain认证组网图 

配置思路

为了保证RIP连接稳定,需要保证RIP协议数据能够稳定正确的传输,建议采用认证和加密的方法,保证RIP协议数据传输的安全性。同时为了防止非法用户通过非法手段窃取认证和加密的算法和密钥,建议采用动态更改认证加密算法和密钥的方法实现RIP数据协议传输的安全。综上,采用Keychain协议来保证RIP连接的稳定。

采用如下思路配置Keychain对RIP协议进行保护:

  1. 配置RIP基本功能。

  2. 配置Keychain功能。

  3. 配置RIP应用Keychain。

操作步骤

  1. 配置RIP基本功能

     

    # 配置RouterA。

    <Huawei> system-view
    [Huawei] sysname RouterA
    [RouterA] rip 1
    [RouterA-rip-1] version 2
    [RouterA-rip-1] network 192.168.1.0
    [RouterA-rip-1] quit

    # 配置RouterB。

    <Huawei> system-view
    [Huawei] sysname RouterB
    [RouterB] rip 1
    [RouterB-rip-1] version 2
    [RouterB-rip-1] network 192.168.1.0
    [RouterB-rip-1] quit

     

  2. 配置Keychain功能

     

    # 配置RouterA。

    [RouterA] keychain huawei mode absolute
    [RouterA-keychain-huawei] receive-tolerance 100
    [RouterA-keychain-huawei] key-id 1
    [RouterA-keychain-huawei-keyid-1] algorithm sha-256
    [RouterA-keychain-huawei-keyid-1] key-string cipher Huawei@1234
    [RouterA-keychain-huawei-keyid-1] send-time utc 0:00 2012-3-12 to 23:59 2012-3-12
    [RouterA-keychain-huawei-keyid-1] receive-time utc 0:00 2012-3-12 to 23:59 2012-3-12
    [RouterA-keychain-huawei-keyid-1] default send-key-id
    [RouterA-keychain-huawei-keyid-1] quit
    [RouterA-keychain-huawei] quit
    

    # 配置RouterB。

    [RouterB] keychain huawei mode absolute
    [RouterB-keychain-huawei] receive-tolerance 100
    [RouterB-keychain-huawei] key-id 1
    [RouterB-keychain-huawei-keyid-1] algorithm sha-256
    [RouterB-keychain-huawei-keyid-1] key-string cipher Huawei@1234
    [RouterA-keychain-huawei-keyid-1] send-time utc 0:00 2012-3-12 to 23:59 2012-3-12
    [RouterA-keychain-huawei-keyid-1] receive-time utc 0:00 2012-3-12 to 23:59 2012-3-12
    [RouterB-keychain-huawei-keyid-1] default send-key-id
    [RouterB-keychain-huawei-keyid-1] quit
    [RouterB-keychain-huawei] quit
    

     

  3. 配置RIP应用Keychain

     

    # 配置RouterA。

    [RouterA] interface gigabitethernet 1/0/0
    [RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
    [RouterA-GigabitEthernet1/0/0] rip authentication-mode keychain huawei
    [RouterA-GigabitEthernet1/0/0] quit
    [RouterA] quit
    

    # 配置RouterB。

    [RouterB] interface gigabitethernet 1/0/0
    [RouterB-GigabitEthernet1/0/0] ip address 192.168.1.2 24
    [RouterB-GigabitEthernet1/0/0] rip authentication-mode keychain huawei
    [RouterB-GigabitEthernet1/0/0] quit
    [RouterB] quit
    

     

  4. 验证配置结果

     

    # 执行命令display keychain keychain-name命令,查看Keychain中Key-id的当前状态,如下所示:

    <RouterA> display keychain huawei
     Keychain Information:
     ----------------------
     Keychain Name             : huawei
       Timer Mode              : Absolute
       Receive Tolerance(min)  : 100
       TCP Kind                : 254
       TCP Algorithm IDs       :
         HMAC-MD5              : 5
         HMAC-SHA1-12          : 2
         HMAC-SHA1-20          : 6
         HMAC-SHA-256          : 7
         SHA-256               : 8
         MD5                   : 3
         SHA1                  : 4
     Number of Key IDs         : 1
     Active Send Key ID        : 1
     Active Receive Key IDs    : 01
     Default send Key ID       : Not configured
    
     Key ID Information:
     ----------------------
     Key ID                    : 1
       Key string              : ******
       Algorithm               : SHA-256
       SEND TIMER              :
         Start time            : 2012-03-12 00:00
         End time              : 2012-03-12 23:59
         Status                : Active
       RECEIVE TIMER           :
         Start time            : 2012-03-12 00:00
         End time              : 2012-03-12 23:59
         Status                : Active
                                       

    # RIP应用Keychain配置成功后,可以执行命令display rip process-id interface verbose,查看RIP报文的认证方式。以RouterA为例。

    <RouterA> display rip 1 interface verbose
     GigabitEthernet1/0/0(192.168.1.1)
      State           : UP          MTU    : 500
      Metricin        : 0
      Metricout       : 1
      Input           : Enabled     Output : Enabled
      Protocol        : RIPv2 Multicast
      Send version    : RIPv2 Multicast Packets
      Receive version : RIPv2 Multicast and Broadcast Packets
      Poison-reverse                : Disabled
      Split-Horizon                 : Enabled
      Authentication type           : MD5 (Non-standard - Keychain: huawei)
         Last Sequence Number Sent  : 0x0
      Replay Protection             : Disabled
    

     

配置文件

  • RouterA的配置文件

    #
     sysname RouterA
    #
    keychain huawei mode absolute
     receive-tolerance 100
     key-id 1
      algorithm sha-256
      key-string cipher %#%#e7,_2i0MfN6W5@Fb6Q3WU.\e)ju5"Jr&&())JmZ2%#%#  send-time utc 00:00 2012-03-12 to 23:59 2012-03-12
      receive-time utc 00:00 2012-03-12 to 23:59 2012-03-12
      default send-key-id 
    #
    interface GigabitEthernet1/0/0
     ip address 192.168.1.1 255.255.255.0
     rip authentication-mode keychain huawei
    #
    rip 1
     version 2
     network 192.168.1.0
    #
    return
  • RouterB的配置文件

    #
     sysname RouterB
    #
    keychain huawei mode absolute
     receive-tolerance 100
     key-id 1
      algorithm sha-256
      key-string cipher %#%#e7,_2i0MfN6W5@Fb6Q3WU.\e)ju5"Jr&&())JmZ2%#%#
      send-time utc 00:00 2012-03-12 to 23:59 2012-03-12
      receive-time utc 00:00 2012-03-12 to 23:59 2012-03-12
      default send-key-id
    #
    interface GigabitEthernet1/0/0
     ip address 192.168.1.2 255.255.255.0
     rip authentication-mode keychain huawei
    #
    rip 1
     version 2
     network 192.168.1.0
    #
    return

18.6.2  配置BGP应用Keychain认证示例

组网需求

图18-9所示,网络中的RouterA和RouterB之间通过BGP互通。

要求在数据传输过程中,BGP连接始终稳定,不会因为非法用户的攻击而断开连接。

图18-9  BGP应用Keychain认证组网图 

配置思路

采用如下思路配置BGP的Keychain认证:

  1. 配置Keychain的基本功能。

  2. 配置Router应用Keychain认证BGP。

操作步骤

  1. 配置Keychain认证

     

    # 配置RouterA。

    <Huawei> system-view
    [Huawei] sysname RouterA
    [RouterA] keychain huawei mode periodic weekly
    [RouterA-keychain-huawei] tcp-kind 182
    [RouterA-keychain-huawei] tcp-algorithm-id sha-256 17
    [RouterA-keychain-huawei] receive-tolerance 100
    [RouterA-keychain-huawei] key-id 1
    [RouterA-keychain-huawei-keyid-1] algorithm sha-256
    [RouterA-keychain-huawei-keyid-1] key-string cipher Huawei@1234
    [RouterA-keychain-huawei-keyid-1] send-time day fri sat
    [RouterA-keychain-huawei-keyid-1] receive-time day fri sat
    [RouterA-keychain-huawei-keyid-1] default send-key-id
    [RouterA-keychain-huawei-keyid-1] quit
    [RouterA-keychain-huawei] quit
    

    # 配置RouterB。

    <Huawei> system-view
    [Huawei] sysname RouterB
    [RouterB] keychain huawei mode periodic weekly
    [RouterB-keychain-huawei] tcp-kind 182
    [RouterB-keychain-huawei] tcp-algorithm-id sha-256 17
    [RouterB-keychain-huawei] receive-tolerance 100
    [RouterB-keychain-huawei] key-id 1
    [RouterB-keychain-huawei-keyid-1] algorithm sha-256
    [RouterB-keychain-huawei-keyid-1] key-string cipher Huawei@1234
    [RouterB-keychain-huawei-keyid-1] send-time day fri sat
    [RouterB-keychain-huawei-keyid-1] receive-time day fri sat
    [RouterB-keychain-huawei-keyid-1] default send-key-id
    [RouterB-keychain-huawei-keyid-1] quit
    [RouterB-keychain-huawei] quit
    

     

  2. 配置BGP应用Keychain进行认证和加密

     

    # 配置RouterA

    [RouterA] interface gigabitethernet 1/0/0
    [RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
    [RouterA-GigabitEthernet1/0/0] quit
    [RouterA] bgp 1
    [RouterA-bgp] router-id 1.1.1.1
    [RouterA-bgp] peer 192.168.1.2 as-number 1
    [RouterA-bgp] peer 192.168.1.2 keychain huawei
    [RouterA-bgp] quit
    [RouterA] quit
    

    # 配置RouterB。

    [RouterB] interface gigabitethernet 1/0/0
    [RouterB-GigabitEthernet1/0/0] ip address 192.168.1.2 24
    [RouterB-GigabitEthernet1/0/0] quit
    [RouterB] bgp 1
    [RouterB-bgp] router-id 2.2.2.2
    [RouterB-bgp] peer 192.168.1.1 as-number 1
    [RouterB-bgp] peer 192.168.1.1 keychain huawei 
    [RouterB-bgp] quit
    [RouterB] quit
    

     

  3. 验证配置结果

     

    # 执行display keychain keychain-name命令,查看Keychain中key-id的当前状态,如下所示:

    <RouterA> display keychain huawei
     Keychain Information:
     ---------------------
     Keychain Name             : huawei
       Timer Mode              : Weekly periodic
       Receive Tolerance(min)  : 100
       TCP Kind                : 182
       TCP Algorithm IDs       :
         HMAC-MD5              : 5
         HMAC-SHA1-12          : 2
         HMAC-SHA1-20          : 6
         HMAC-SHA-256          : 7
         SHA-256               : 17
         MD5                   : 8
         SHA1                  : 4
     Number of Key IDs         : 1
     Active Send Key ID        : 1
     Active Receive Key IDs    : 01
     Default send Key ID       : Not configured
    
    
     Key ID Information:
     -------------------
     Key ID                    : 1
       Key string              : ******
       Algorithm               : SHA-256
       SEND TIMER              :
         Day(s)                : Fri Sat
         Status                : Active
       RECEIVE TIMER           :
         Day(s)                : Fri Sat
         Status                : Active
    

    # BGP应用Keychain配置成功后,执行命令display bgp peer ipv4-address verbose,查看BGP对等体的认证信息。以RouterA为例。

    <RouterA> display bgp peer 192.168.1.2 verbose
            BGP Peer is 192.168.1.2,  remote AS 1
            Type: IBGP link
            BGP version 4, Remote router ID 2.2.2.2
            Update-group ID: 1
            BGP current state: Established, Up for 00h43m34s
            BGP current event: RecvKeepalive
            BGP last state: OpenConfirm
            BGP Peer Up count: 1
            Received total routes: 0
            Received active routes total: 0
            Advertised total routes: 0
            Port:  Local - 179      Remote - 55828
            Configured: Active Hold Time: 180 sec   Keepalive Time:60 sec
            Received  : Active Hold Time: 180 sec
            Negotiated: Active Hold Time: 180 sec   Keepalive Time:60 sec
            Peer optional capabilities:
            Peer supports bgp multi-protocol extension
            Peer supports bgp route refresh capability
            Peer supports bgp 4-byte-as capability
            Address family IPv4 Unicast: advertised and received
     Received: Total 45 messages
                     Update messages                0
                     Open messages                  1
                     KeepAlive messages             44
                     Notification messages          0
                     Refresh messages               0
     Sent: Total 48 messages
                     Update messages                0
                     Open messages                  2
                     KeepAlive messages             46
                     Notification messages          0
                     Refresh messages               0
     Authentication type configured: Keychain(huawei)
     Last keepalive received: 2012/04/20 11:37:27
     Last keepalive sent    : 2012/04/20 11:37:27
     Minimum route advertisement interval is 15 seconds
     Optional capabilities:
     Route refresh capability has been enabled
     4-byte-as capability has been enabled
     Peer Preferred Value: 0
     Routing policy configured:
     No routing policy is configured

     

配置文件

  • RouterA的配置文件

    #
     sysname RouterA
    #
    keychain huawei mode periodic weekly
     receive-tolerance 100
     tcp-kind 182
     tcp-algorithm-id sha-256 17
     key-id 1
      algorithm sha-256
      key-string cipher %#%#+q;c~,2pMWe)cb:9Yg[6ah3l+~r"GVAO*W.1f=v4%#%#
      send-time day fri sat
      receive-time day fri sat
      default send-key-id 
    #
    interface GigabitEthernet1/0/0
     ip address 192.168.1.1 255.255.255.0
    #
    bgp 1
     router-id 1.1.1.1
     peer 192.168.1.2 as-number 1
     peer 192.168.1.2 keychain huawei
     #
     ipv4-family unicast
      undo synchronization
      peer 192.168.1.2 enable
    #
    return
  • RouterB的配置文件

    #
     sysname RouterB
    #
    keychain huawei mode periodic weekly
     receive-tolerance 100
     tcp-kind 182
     tcp-algorithm-id sha-256 17
     key-id 1
      algorithm sha-256
      key-string cipher %#%#j8P<=eo2u$q}YxHvZ/"8M:=n!+K>xX1;D~L'`d78%#%#
      send-time day fri sat
      receive-time day fri sat
      default send-key-id 
    #
    interface GigabitEthernet1/0/0
     ip address 192.168.1.2 255.255.255.0
    #
    bgp 1
     router-id 2.2.2.2
     peer 192.168.1.1 as-number 1
     peer 192.168.1.1 keychain huawei
     #
     ipv4-family unicast
      undo synchronization
      peer 192.168.1.1 enable
    #
    return

18.7  参考信息

介绍Keychain的参考标准和协议。

 

 

 

KeyChain是什么
  • keychain是一个加密的容器,通常用来保存密码,证书,和一些需要加密的key。对于iOS应用来说,每个APP有独立的keychain。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个在所有app之外的sqlite数据库。

  • 通俗点来说 keychain相当于银行的一个金库,keychain Item就相当于金库里的一个个保险柜,保存在keychain Item里面的密码就相当于保险柜里面存放的金条。

  • 注意 :keyChain的访问权限依赖于provisioning file。所以,如果要在应用更新的时候,仍然能够访问之前保存的密码,要保证provisioning file是同一个文件。

KeyChain 结构组成
  • keyChain是通过字典来描述的,是一组key-value的对。用来描述这个keyChain是为什么样的应用保存什么样的数据,有什么样的访问权限等等。

  • Keychain内部可以保存很多的信息。每条信息作为一个单独的keychain item,keychain item一般为一个字典,每条keychain item包含一条data和很多attributes。
    1.组成部分由 {N个标签(属性) + 一个重要数据} 组成!
    2.@{@"属性key1":@"属性值1",@"属性keyN":@"属性值N",@"valueData":@数据}

     

    如图
     
    keychainItem.png

    -- kSecClass 表示存储数据的类型,kSecClassGenericPassword代表密码
    -- kSecAttrAccount 表示的是为IamUser这个账号存储的密码
    -- kSecAttrService 表示是为App Store 这个歌APP存储的账号

    -- 其余两个在查询的时候使用,知道如果要查询都设为ture就可以了

  • 如果把keychain item的类型指定为需要保护的类型比如password或者private key,item的data会被加密并且保护起来,如果把类型指定为不需要保护的类型,比如certificates,item的data就不会被加密。
    item可以指定为以下几种类型:
    kSecClassGenericPassword //指定通用密码项目
    kSecClassInternetPassword //指定Internet密码项目
    kSecClassCertificate //指定证书项目
    kSecClassKey //指定关键项目
    kSecClassIdentityOSX_AVAILABLE_STARTING(MAC_10_7, __IPHONE_2_0);//指定标识项

  • 注意:keychain虽然是可以保存15000条item,每条50个attributes,但是苹果工程师建议最好别放那么多,存几千条密码,几千字节没什么问题。


KeyChain的结构

iOS中Keychain Services使用key-value dictionary来指定我们想要创建或者查找的keychain item属性。

一个典型的搜索字典包含以下四部分:

  • The class key-value pair:指定了keychain item类型。
  • 一个或多个key-value pairs:指定keychain item的各种一般属性
  • 一个或多个key-value pairs:指定keychain item的各种查找属性,例如kSecMatchPolicy,为了查找的精确性
  • 一个返回类型的key-value pair:指定想要的返回结果的类型,例如是返回一个dictionary或者persistent reference
 


 
 

1:keychain的本质

 

iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的

 

posted on 2018-07-17 10:15  风zk  阅读(455)  评论(0编辑  收藏  举报

导航