无中心密钥分发 (1)A
→
\to
→ B:
R
e
q
u
e
s
t
∣
∣
N
1
{\rm Request}||N_1
Request∣∣N1;
R
e
q
u
e
s
t
{\rm Request}
Request 密钥更新请求,
N
1
{N_1}
N1 现时值(Nouce)时间戳/序列号。 (2)B
→
\to
→ A:
E
K
M
K
[
K
s
∣
∣
R
e
q
u
e
s
t
∣
∣
N
1
∣
∣
I
D
B
∣
∣
f
(
N
1
)
∣
∣
N
2
]
E_{K_{MK}}[K_s||{\rm Request||N_1||ID_B||f(N_1)||N_2}]
EKMK[Ks∣∣Request∣∣N1∣∣IDB∣∣f(N1)∣∣N2];
K
s
K_s
Ks 随机密钥发生器生成的新密钥,
K
M
K
K_{MK}
KMK 共享的主密钥,
I
D
B
{\rm ID}_B
IDB 数字签名避免冒充,
f
f
f 共享的函数运算避免重放。 (3)A
→
\to
→ B:
E
K
s
[
f
(
N
2
)
]
E_{K_s}[f(N_2)]
EKs[f(N2)];避免重放,确认新密钥。
有中心密钥分发 KDC:密钥分发中心。 (1)A
→
\to
→ KDC:
R
e
q
u
e
s
t
∣
∣
N
1
{\rm Request}||N_1
Request∣∣N1。 (2)KDC
→
\to
→ A:
E
K
A
[
K
s
∣
∣
]
R
e
q
u
e
s
t
∣
∣
N
1
∣
∣
E
K
B
(
K
s
,
I
D
A
)
]
E_{K_A}[K_s||]{\rm Request}||N_1||E_{K_B}(K_s,ID_A)]
EKA[Ks∣∣]Request∣∣N1∣∣EKB(Ks,IDA)];
K
A
K_A
KA KDC 和 A 共享的密钥,
K
B
K_B
KB KDC 和 B 共享的密钥。 (3)A
→
\to
→ B:
E
K
B
(
K
s
,
I
D
A
)
E_{K_B}(K_s,ID_A)
EKB(Ks,IDA)。 (4)B
→
\to
→ A:
E
K
s
(
N
2
)
E_{K_s}(N_2)
EKs(N2)。 (5)A
→
\to
→ B:
E
K
s
[
f
(
N
2
)
]
E_{K_s}[f(N_2)]
EKs[f(N2)];避免冒用,确认新密钥。
公钥分发 CA:公钥管理机构。 (1)A
→
\to
→ CA:
R
e
q
u
e
s
t
∣
∣
T
i
m
e
1
{\rm Request}||{\rm Time}_1
Request∣∣Time1。 (2)CA
→
\to
→ A:
E
S
K
U
[
P
K
B
∣
∣
R
e
q
u
e
s
t
∣
∣
T
i
m
e
1
]
E_{SK_U}[PK_B||{\rm Request}||{\rm Time}_1]
ESKU[PKB∣∣Request∣∣Time1];
S
K
U
SK_U
SKU CA私钥,
P
K
B
PK_B
PKB B 公钥。 (3)B
→
\to
→ CA:
R
e
q
u
e
s
t
∣
∣
T
i
m
e
2
{\rm Request}||{\rm Time}_2
Request∣∣Time2。 (4)CA
→
\to
→ B:
E
S
K
U
[
P
K
A
∣
∣
R
e
q
u
e
s
t
∣
∣
T
i
m
e
2
]
E_{SK_U}[PK_A||{\rm Request}||{\rm Time}_2]
ESKU[PKA∣∣Request∣∣Time2];
P
K
A
PK_A
PKA A 公钥。 三次握手 (5)A
→
\to
→ B:
E
P
K
B
(
N
1
∣
∣
I
D
A
)
E_{PK_B}(N_1||ID_A)
EPKB(N1∣∣IDA)。 (6)B
→
\to
→ A:
E
P
K
A
(
N
1
∣
∣
N
2
)
E_{PK_A}(N_1||N_2)
EPKA(N1∣∣N2)。 (7)A
→
\to
→ B:
E
P
K
B
(
N
2
)
E_{PK_B}(N_2)
EPKB(N2)。
第一步:分离 V 和 SA V:应用服务器。 (1)C
→
\to
→ AS:
I
D
C
∣
∣
P
C
∣
∣
I
D
V
ID_C||P_C||ID_V
IDC∣∣PC∣∣IDV;
P
C
P_C
PC 用户口令。 (2)AS
→
\to
→ C:
T
i
c
k
e
t
V
=
E
K
V
(
I
D
C
∣
∣
A
D
C
∣
∣
I
D
V
)
{\rm Ticket}_V=E_{K_V}(ID_C||AD_C||ID_V)
TicketV=EKV(IDC∣∣ADC∣∣IDV);
T
i
c
k
e
t
{\rm Ticket}
Ticket 票据,
K
V
K_V
KV AS 和 V 共享的密钥,
A
D
C
AD_C
ADC C 网络地址。 (3)C
→
\to
→ V:
I
D
C
∣
∣
T
i
c
k
e
t
V
ID_C||{\rm Ticket}_V
IDC∣∣TicketV。 口令明文传输;需多次输入口令。
第二步:分离 SA 和 TGS TGS:票据授予服务器 (1)C
→
\to
→ AS:
I
D
C
∣
∣
I
D
T
G
S
ID_C||ID_{TGS}
IDC∣∣IDTGS 。 (2)AS
→
\to
→ C:
E
K
C
(
T
i
c
k
e
t
T
G
S
)
E_{K_C}({\rm Ticket}_{TGS})
EKC(TicketTGS),
T
i
c
k
e
t
T
G
S
=
E
K
T
G
S
(
I
D
C
∣
∣
A
D
C
∣
∣
I
D
T
G
S
∣
∣
T
S
1
∣
∣
L
i
f
e
t
i
m
e
1
)
{\rm Ticket}_{TGS}=E_{K_{TGS}}(ID_C||AD_C||ID_{TGS}||TS_1||{\rm Lifetime}_1)
TicketTGS=EKTGS(IDC∣∣ADC∣∣IDTGS∣∣TS1∣∣Lifetime1);
K
C
K_C
KC C 和 AS 共享密钥,
K
T
G
S
K_{TGS}
KTGS TGS 和 AS 共享密钥,
T
S
1
TS_1
TS1 时间戳,
L
i
f
e
t
i
m
e
1
{\rm Lifetime}_1
Lifetime1 生命周期。 (3)C
→
\to
→ TGS:
I
D
C
∣
∣
I
D
V
∣
∣
T
i
c
k
e
t
T
G
S
ID_C||ID_V||{\rm Ticket}_{TGS}
IDC∣∣IDV∣∣TicketTGS. (4)TGS
→
\to
→ C:
T
i
c
k
e
t
V
=
E
K
V
(
I
D
C
∣
∣
A
D
C
∣
∣
I
D
V
∣
∣
T
S
2
∣
∣
L
i
f
e
t
i
m
e
2
)
{\rm Ticket}_V=E_{K_V}(ID_C||AD_C||ID_V||TS_2||{\rm Lifetime}_2)
TicketV=EKV(IDC∣∣ADC∣∣IDV∣∣TS2∣∣Lifetime2);
K
V
K_V
KV V 和 TGS 共享密钥。 (5)C
→
\to
→ V:
I
D
C
∣
∣
T
i
c
k
e
t
V
ID_C||{\rm Ticket}_V
IDC∣∣TicketV。 有效期过短易用性差,过长安全性差;未验证 V 的真实性。
第三步:Kerbros v4 (1.1)C
→
\to
→ AS:
I
D
C
∣
∣
I
D
T
G
S
∣
∣
T
S
1
ID_C||ID_{TGS}||TS_1
IDC∣∣IDTGS∣∣TS1 ;防止重放。 (1.2)AS
→
\to
→ C:
E
K
C
,
A
S
(
K
C
,
T
G
S
∣
∣
I
D
T
G
S
∣
∣
T
S
2
∣
∣
L
i
f
e
t
i
m
e
2
∣
∣
T
i
c
k
e
t
T
G
S
)
E_{K_{C,AS}}(K_{C,TGS}||ID_{TGS}||TS_2||{\rm Lifetime}_2||{\rm Ticket}_{TGS})
EKC,AS(KC,TGS∣∣IDTGS∣∣TS2∣∣Lifetime2∣∣TicketTGS),
T
i
c
k
e
t
T
G
S
=
E
K
T
G
S
,
A
S
(
K
C
,
T
G
S
∣
∣
I
D
C
∣
∣
A
D
C
∣
∣
I
D
T
G
S
∣
∣
T
S
2
∣
∣
L
i
f
e
t
i
m
e
2
)
{\rm Ticket}_{TGS}=E_{K_{TGS,AS}}(K_{C,TGS}||ID_C||AD_C||ID_{TGS}||TS_2||{\rm Lifetime}_2)
TicketTGS=EKTGS,AS(KC,TGS∣∣IDC∣∣ADC∣∣IDTGS∣∣TS2∣∣Lifetime2);C 和 TGS 间获得安全共享密钥。 (2.1)C
→
\to
→ TGS:
I
D
V
∣
∣
T
i
c
k
e
t
T
G
S
∣
∣
A
u
t
h
e
n
t
i
c
a
t
o
r
C
,
T
G
S
ID_V||{\rm Ticket}_{TGS}||{\rm Authenticator}_{C,TGS}
IDV∣∣TicketTGS∣∣AuthenticatorC,TGS,
A
u
t
h
e
n
t
i
c
a
t
o
r
C
,
T
G
S
=
E
K
C
,
T
G
S
(
I
D
C
∣
∣
A
D
C
∣
∣
T
S
3
)
{\rm Authenticator}_{C,TGS}=E_{K_{C,TGS}}(ID_C||AD_C||TS_3)
AuthenticatorC,TGS=EKC,TGS(IDC∣∣ADC∣∣TS3);验证 C 真实性,防止窃听和重放。 (2.2)TGS
→
\to
→ C:
E
K
C
,
T
G
S
(
K
C
,
V
∣
∣
I
D
v
∣
∣
T
S
4
∣
∣
L
i
f
e
t
i
m
e
4
∣
∣
T
i
c
k
e
t
V
)
E_{K_{C,TGS}}(K_{C,V}||ID_v||TS_4||{\rm Lifetime}_4||{\rm Ticket}_V)
EKC,TGS(KC,V∣∣IDv∣∣TS4∣∣Lifetime4∣∣TicketV),
T
i
c
k
e
t
V
=
E
K
T
G
S
,
V
(
K
C
,
V
∣
∣
I
D
C
∣
∣
A
D
C
∣
∣
I
D
V
∣
∣
T
S
4
∣
∣
L
i
f
e
t
i
m
e
4
)
{\rm Ticket}_V=E_{K_{TGS,V}}(K_{C,V}||ID_C||AD_C||ID_V||TS_4||{\rm Lifetime}_4)
TicketV=EKTGS,V(KC,V∣∣IDC∣∣ADC∣∣IDV∣∣TS4∣∣Lifetime4);C 和 V 间获得安全共享密钥,防止窃听和重放。 (3.1)C
→
\to
→ V:
T
i
c
k
e
t
V
∣
∣
A
u
t
h
e
n
t
i
c
a
t
o
r
C
,
V
{\rm Ticket}_V||{\rm Authenticator}_{C,V}
TicketV∣∣AuthenticatorC,V,
A
u
t
h
e
n
t
i
c
a
t
o
r
C
,
V
=
E
K
C
,
V
(
I
D
C
∣
∣
A
D
C
∣
∣
T
S
5
)
{\rm Authenticator}_{C,V}=E_{K_{C,V}}(ID_C||AD_C||TS_5)
AuthenticatorC,V=EKC,V(IDC∣∣ADC∣∣TS5)。 (3.2)V
→
\to
→ C:
E
K
C
,
V
(
T
S
5
+
1
)
E_{K_{C,V}}(TS_5+1)
EKC,V(TS5+1);验证 V 真实性。
单点登录:多个应用系统中,用户只需登陆一次就可以访问所有互相信任的应用系统。
访问控制
方法:矩阵;链表;列表(ACL);授权关系表;安全标签(细粒度)。
原则:最小授权;最小泄露;多级。
DAC(自主):客体属主自行决定权限分配和管理;风险较高。
MAC(强制/非自住):系统管理员设置或系统自动设置,用户级无法修改;灵活性差。
下读:主体安全级别高于客体时允许读。
上读:主体安全级别低于客体时允许读。
下写:主体安全级别高于客体时允许写。
上写:主体安全级别低于客体时允许写。
BLP(下读上写):政府或军事;写给上级,不能写给下属。
Biba(上读下写):企业;领导写通知,员工读通知。
RBAC(基于角色):通过角色联系主客体权限;提升效率,便于管理。
应用层
PGP
认证:SHA-1/DSS + RSA + LZ77 + Base64(CRC);私钥签名,公钥验证。 发送方:
Z
=
C
o
d
e
[
Z
i
p
(
M
A
C
∣
∣
M
)
]
Z={\rm Code}[{\rm Zip}({\rm MAC}||M)]
Z=Code[Zip(MAC∣∣M)],
M
A
C
=
E
S
K
A
[
H
a
s
h
(
M
)
]
{\rm MAC}=E_{SK_A}[{\rm Hash}(M)]
MAC=ESKA[Hash(M)]。 接收方:
M
A
C
′
∣
∣
M
′
=
Z
i
p
−
1
[
C
o
d
e
−
1
(
Z
′
)
]
{\rm MAC}'||M'={\rm Zip}^{-1}[{\rm Code}^{-1}(Z')]
MAC′∣∣M′=Zip−1[Code−1(Z′)];
H
a
s
h
(
M
′
)
?
=
D
P
K
A
(
M
A
C
′
)
{\rm Hash}(M'){?\atop =}D_{PK_A}({\rm MAC'})
Hash(M′)=?DPKA(MAC′)。
加密:LZ77 + ANSI X9.17 + CAST-128/IDEA/TDEA + RSA + Base64(CRC);公钥加密,私钥解密。 发送方:
Z
=
C
o
d
e
(
K
∣
∣
C
)
Z={\rm Code}(K||C)
Z=Code(K∣∣C),
K
=
E
P
K
B
(
K
S
)
K=E_{PK_B}(K_S)
K=EPKB(KS),
C
=
E
K
S
[
Z
i
p
(
M
)
]
C=E_{K_S}[{\rm Zip}(M)]
C=EKS[Zip(M)];
K
S
K_S
KS 随机生成密钥。 接收方:
K
∣
∣
C
=
C
o
d
e
−
1
(
Z
)
K||C={\rm Code}^{-1}(Z)
K∣∣C=Code−1(Z),
K
S
=
D
S
K
B
(
K
)
K_S=D_{SK_B}(K)
KS=DSKB(K),
M
=
Z
i
p
−
1
[
D
K
S
(
C
)
]
M={\rm Zip}^{-1}[D_{K_S}(C)]
M=Zip−1[DKS(C)]。
认证-加密:SHA-1/DSS + RSA + LZ77 + ANSI X9.17 + CAST-128/IDEA/TDEA + RSA + Base64(CRC)。 发送方:
Z
=
C
o
d
e
(
K
∣
∣
C
)
Z={\rm Code}(K||C)
Z=Code(K∣∣C),
K
=
E
P
K
B
(
K
S
)
K=E_{PK_B}(K_S)
K=EPKB(KS),
C
=
E
K
S
[
Z
i
p
(
M
A
C
∣
∣
M
)
]
C=E_{K_S}[{\rm Zip}({\rm MAC}||M)]
C=EKS[Zip(MAC∣∣M)],
M
A
C
=
E
S
K
A
[
H
a
s
h
(
M
)
]
{\rm MAC}=E_{SK_A}[{\rm Hash}(M)]
MAC=ESKA[Hash(M)]。 接收方:
K
∣
∣
C
=
C
o
d
e
−
1
(
Z
)
K||C={\rm Code}^{-1}(Z)
K∣∣C=Code−1(Z),
K
S
=
D
S
K
B
(
K
)
K_S=D_{SK_B}(K)
KS=DSKB(K),
M
A
C
′
∣
∣
M
′
=
Z
i
p
−
1
[
D
K
S
(
C
)
]
{\rm MAC}'||M'={\rm Zip}^{-1}[D_{K_S}(C)]
MAC′∣∣M′=Zip−1[DKS(C)],
H
a
s
h
(
M
′
)
?
=
D
P
K
A
(
M
A
C
′
)
{\rm Hash}(M'){?\atop =}D_{PK_A}({\rm MAC'})
Hash(M′)=?DPKA(MAC′)。 私钥签名
→
\to
→ 压缩
→
\to
→ 公钥加密密钥
→
\to
→ 编码
→
\to
→ 不安全信道
→
\to
→ 解码
→
\to
→ 私钥解密获得密钥
→
\to
→ 解压
→
\to
→ 公钥验证。
实现:
D
S
=
E
S
K
C
[
H
a
s
h
(
H
a
s
h
(
P
I
)
∣
∣
H
a
s
h
(
O
I
)
)
]
DS=E_{SK_C}[{\rm Hash}({\rm Hash}(PI)||{\rm Hash}(OI))]
DS=ESKC[Hash(Hash(PI)∣∣Hash(OI))];
D
S
DS
DS 双重签名,
S
K
C
SK_C
SKC 消费者私钥,
P
I
PI
PI 支付信息,
O
I
OI
OI 订单信息。 商家:持有
D
S
DS
DS,
O
I
OI
OI,
P
I
M
D
=
H
a
s
h
(
P
I
)
{\rm PIMD}={\rm Hash}(PI)
PIMD=Hash(PI);验证
D
P
K
C
(
D
S
)
?
=
H
a
s
h
[
P
I
M
D
∣
∣
H
a
s
h
(
O
I
)
]
D_{PK_C}(DS){? \atop =}{\rm Hash}[{\rm PIMD}||{\rm Hash}(OI)]
DPKC(DS)=?Hash[PIMD∣∣Hash(OI)];
P
K
C
PK_C
PKC 消费者公钥。 银行:持有
D
S
DS
DS,
P
I
PI
PI,
O
I
M
D
=
H
a
s
h
(
O
I
)
{\rm OIMD}={\rm Hash}(OI)
OIMD=Hash(OI);验证
D
P
K
C
(
D
S
)
?
=
H
a
s
h
[
H
a
s
h
(
P
I
)
∣
∣
O
I
M
D
]
D_{PK_C}(DS){? \atop =}{\rm Hash}[{\rm Hash}(PI)||{\rm OIMD}]
DPKC(DS)=?Hash[Hash(PI)∣∣OIMD]。
第三步:Set 交易流程 (1.1)消费者提交购买请求:
P
∣
∣
O
∣
∣
P||O||
P∣∣O∣∣消费者证书(
P
K
C
PK_C
PKC);支付消息
P
=
K
∣
∣
C
P=K||C
P=K∣∣C,
K
=
E
P
K
B
(
K
S
)
K=E_{PK_B}(K_S)
K=EPKB(KS),
C
=
E
K
S
(
P
I
∣
∣
D
S
∣
∣
O
I
M
D
)
C=E_{K_S}(PI||DS||{\rm OIMD})
C=EKS(PI∣∣DS∣∣OIMD);购买消息
O
=
O
I
∣
∣
D
S
∣
∣
P
I
M
D
O=OI||DS||{\rm PIMD}
O=OI∣∣DS∣∣PIMD;
K
S
K_S
KS 消费者生成的随机密钥,
P
K
B
PK_B
PKB 支付网关公钥。 (1.2)商家验证购买信息: 验证证书,验证
D
P
K
C
(
D
S
)
?
=
H
a
s
h
[
P
I
M
D
∣
∣
H
a
s
h
(
O
I
)
]
D_{PK_C}(DS){? \atop =}{\rm Hash}[{\rm PIMD}||{\rm Hash}(OI)]
DPKC(DS)=?Hash[PIMD∣∣Hash(OI)];向消费者发送购买响应。 (2.1)商家发送支付授权请求:
P
∣
∣
C
I
D
∣
∣
K
∣
∣
P||CID||K||
P∣∣CID∣∣K∣∣ 消费者证书
∣
∣
||
∣∣ 商家密钥交换证书
∣
∣
||
∣∣ 商家签名密钥证书;
C
I
D
CID
CID 商家私钥签名随机密钥加密的交易 ID,
K
K
K 支付网关公钥加密的随机密钥,
S
K
B
SK_B
SKB 商家签名私钥,
P
K
M
PK_M
PKM 银行公钥。 (2.2)支付网关验证并生成支付授权:验证证书,验证
D
P
K
C
(
D
S
)
?
=
H
a
s
h
[
H
a
s
h
(
P
I
)
∣
∣
O
I
M
D
]
D_{PK_C}(DS){? \atop =}{\rm Hash}[{\rm Hash}(PI)||{\rm OIMD}]
DPKC(DS)=?Hash[Hash(PI)∣∣OIMD],验证商家交易 ID 与消费者交易 ID 相同;向发卡者发送授权请求。 (2.3)支付网关返回授权信息:发卡者授权信息,支付网关证书,捕获令牌(商家账户需要时可选);支付网关私钥签名,随机密钥加密,商家公钥加密随机密钥。 (3.1)商家发送捕获请求:最终支付金额,交易 ID;随机密钥加密,支付网关公钥加密随机密钥。 (3.2)支付网关响应捕获:解密验证捕获请求,向发卡者发送结算请求,发卡者转账到商家账户;向商家返回签名证书,随机密钥加密,商家公钥加密随机密钥。 (3.3)商家解密并验证捕获响应,保存收据,交易结束。
网络层
IPsec
协议簇体系:SA,IKE,AH 协议,ESP 协议,SAD,SPD,DOI(解释域)。
SA:单向安全关联;通信双方对工作模式、加密算法、密钥、生命周期等的约定;通信双方需要一对 SA,分为输入流和输出流。 安全参数索引(SPI):发送方产生 32 位随机数唯一标识 SA。 目的 IP 地址:SA 的终点地址;端系统/路由器/网关/防火墙。 安全协议标识符:表明关联的协议是 AH 还是 ESP。 传输模式:仅保护有效荷载。 隧道模式:保护整个 IP 数据包,包括 IP 报头及有效荷载。
组合 SA:单个 SA 不能同时使用 AH 和 ESP。 传输邻接:传输模式下,对 IP 数据包应用多个安全协议;仅允许在一个层次组合。 重复隧道:隧道模式下,可以多层嵌套 SA,每层 SA 的起始 IP 可互不相同。