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的定义和作用。 - 18.2 原理描述
介绍Keychain的实现原理。 - 18.3 应用场景
介绍Keychain的应用场景。 - 18.4 配置注意事项
介绍配置Keychain的注意事项。 - 18.5 配置Keychain
配置Keychain,可以实现在不中断连接的情况下,定时更换认证加密的密钥和算法,从而保证应用程序数据传输的安全性。 - 18.6 配置举例
介绍Keychain配置举例。配置示例中包括组网需求、配置思路等。 - 18.7 参考信息
介绍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中的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的启动和结束时间都将做相应的延长。
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认证发送报文
-
应用程序询问Keychain的活跃发送key ID和Keychain提供的算法类型。
-
如果存在活跃的发送key,Keychain模块提供活跃的发送key ID和算法类型;如果没有,应用程序正常发送报文。
-
应用程序收到活跃发送key ID和算法类型后,将Keychain算法类型转换为相应协议的标准算法ID,并将此算法ID和key ID封装进报文。
-
应用程序提供需要用来计算MAC(Message Authentication Code)的数据。
-
Keychain模块使用活跃的发送key定义的认证算法和密钥,计算出MAC,并返回MAC。
-
应用程序产生携带认证信息的报文,并发送出去。
非TCP应用程序使用Keychain认证接收报文
-
接收端接收到携带认证信息的报文。
-
接收端应用程序将接收的算法ID转换为Keychain算法类型。
-
接收端应用程序提供数据报文、key ID、算法类型、需要验证的MAC值。
-
Keychain模块根据接收到报文的key的ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。
-
如果对应的接收key活跃,Keychain模块使用此key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。
-
返回成功消息或者失败消息。
-
应用程序根据Keychain的认证结果决定接收或丢弃报文。
18.2.3 TCP应用程序应用Keychain的原理
TCP应用程序使用Keychain认证发送报文
在donica草案中,TCP使用增强的认证选项进行认证交互,增强认证选项的报文格式如图18-4所示:
目前该草案还没有标准化,IANA没有统一定义类型(Kind)值和认证算法对应的ID(Alg-id)。各设备商使用不同的取值。为了使不同厂商的设备能够互通,Keychain使TCP类型值和认证算法的ID可以配置和维护。
-
应用程序询问活跃的发送key ID、TCP Kind、TCP algorithm-id。
-
如果存在活跃的发送key,则Keychain模块提供应用程序请求的信息。
-
应用程序用TCP Kind、TCP algorithm-id、key ID填充TCP增强认证选项。
-
应用程序给Keychain模块提供需要用来计算MAC(Message Authentication Code)的数据。
-
Keychain模块根据活跃发送key所配置算法和密钥,计算MAC,并返回MAC值。
-
应用程序将获取的MAC填充到增强认证选项,将报文发送出去。
TCP应用程序使用Keychain认证接收报文
-
接收端收到携带认证信息的TCP报文。
-
接收端向Keychain模块提供数据报文、key ID、TCP algorithm-id、TCP Kind以及需要验证的MAC。
-
Keychain模块检查,接收报文中的TCP类型和算法ID和本端的是否一致。如果不一致,则返回认证失败消息。
-
Keychain模块根据接收到的key ID,检查本端对应ID的接收key是否活跃。如果不活跃,则返回认证失败消息。
-
如果对应的接收key活跃,Keychain模块根据该接收key配置的认证算法和密钥,重新计算MAC,并且比较新生成的MAC和接收到的MAC是否一致。
-
返回成功消息或者失败消息。
-
应用程序根据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.4 配置注意事项
介绍配置Keychain的注意事项。
Keychain只是对认证算法和加密密钥的管理,需要具体的应用程序使用Keychain,Keychain才能起作用。
- RIP
- OSPF
- OSPFv3
- IS-IS
- MSDP
- MPLS
- BGP and BGP4+
18.5 配置Keychain
18.5.1 创建Keychain
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。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令keychain keychain-name,进入Keychain视图。
- 执行命令key-id key-id,创建key-id,并进入key-id视图。
- 执行命令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认证算法。
- 执行命令key-string { plain plain-text | [ cipher ] cipher-text },配置key的认证加密的密钥。
说明:
配置认证密码时,请尽量选择密文模式,因为明文格式密码会以明文的方式保存在配置文件中,有高安全风险。为保证设备安全,请定期修改密码。
- 配置发送时间。创建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),使网络中各设备的时钟保持一致,以避免因为时钟不同步,而产生混乱。 - 配置接收时间。创建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> }
- (可选)执行命令default send-key-id,配置该key为缺省发送key。
18.5.3 配置应用Keychain
背景信息
配置Keychain之后,需要配置应用程序使用Keychain,否则Keychain不会生效。
18.6 配置举例
介绍Keychain配置举例。配置示例中包括组网需求、配置思路等。
18.6.1 配置RIP应用Keychain认证示例
操作步骤
- 配置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
- 配置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
- 配置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
- 验证配置结果
# 执行命令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认证示例
操作步骤
- 配置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
- 配置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
- 验证配置结果
# 执行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":@数据}
-- 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,其保存的所有数据都是加密过的