一 安全协议引论

1.协议的概念:两个或者两个以上的参与者为了达到特定的目的而釆取的一系列步骤。

2.协议的主要特点:

协议规定了一系列有序执行的步骤,必须依次执行。

协议中有两个或者两个以上的参与者。一个参与者是不能构成协议的。

协议都有明确的目的,即需要完成什么目标、防范什么风险等。

3.协议的特殊需求

①安全需求基本的安全需求包括加密、认证和不可抵赖性。

加密保证密码协议执行过程中所涉及的敏感数据不能为非授权者所知;

认证可以保证协议参 与者的合法身份;

不可抵赖性可以保证协议执行过程是可以稽查的,这对于有可信第三方参与的密码协议是很关键的。

②鲁棒性要求密码协议在有恶意参与者的情况下能部分地正确执行,同时严格保护其他诚实参与者所持有的秘密信息。

4.协议的分类

通常根据协议对可信第三方的依赖程度可以将密码协议分为如下几类:

①仲裁协议:仲裁者就是可信第三方,协议需要可信第三方的帮助才能正确执行。可信第三方的存在可以使密码协议高效执行。仲裁协议的问题是现实的计算机网络中很难找到一个协议参与者都信任的仲裁者,且如果网络中参与者都信任仲裁者的话,仲裁者容易成为易受攻击之处

②裁决协议:裁决者也是可信第三方,但是裁决者并不直接参与协议的执行。裁决者只是在有争议的时候才参与协议的执行。这样协议对可信第三方的依 赖程度降低了。

③自动执行协议:最理想的协议,协议本身体现了公平性,不需要可信第三方的参与,当某个参与者实施欺骗行为时能够被其他参与者发觉,从而终止协议或者将欺骗者排除。

5.密码协议的模型

通常人们从三个方面来描述密码协议模型,这三个方面分别是协议参与者的类型、参与者之间的网络连接情况和协议攻击者的能力。

6.密码协议的参与者类型

①协议参与者按照协议的要求参与协议的执行,向协议提供输入,从协议中获得输出。

②协议攻击者通过窃听或者篡改报文等方法“主动”参与到协议的执行过程。密码协议中始终要考虑攻击者的存在。

③可信第三方是协议参与者都信任的一个主体或者一个组织。如果没有可信第三方的存在,一些基础密码协议,如公钥分发等协议是无法执行的。可信第三方的存在还可以简化很多密码协议的设计,提高协议的效率。

④仲裁者这是一个历史悠久的概念,人类社会中有一些人,如执政官、律 师,他们有公平处理事情的权威。密码协议中引入仲裁者的概念,可以使协议执行 过程中发生的争端以公平合理的方式得到处理。

7.协议参与者的诚实程度

①诚实:参与者按照协议的要求参与协议的执行,向协议提供输入,从协议中获得输出。

②半诚实:这类参与者按照协议的要求执行,只是窃听或获取其他参与者在协议进行中的所有输入。也称这种参与者为被动攻击者或窃听者。

③恶意:攻击者不仅窃听或获取不诚实参与者在协议进行中的所有输入,还要控制参与者按照自己设计的方式参与协议。恶意攻击者以破坏协议正确执行或者获取其他参与者的隐私输入为目的。这种攻击者称为主动攻击者。

8.协议攻击者的能力

①攻击者对于通信信道没有任何控制能力。在这种情况下,诚实协议参与者之间的通信既不会被攻击者窃听,也不会被攻击者篡改,这种情况称为安全信道(secure channel)

②攻击者可以窃听任意协议参与者之间的通信,但是不能篡改通信的内容。这种情况称为非安全信道,有些文献也称这种通信信道是认证的信道(authenticated channel)

③攻击者对于通信网络有着完全的控制权,不仅可以窃听所有 协议参与者之间的通信,还可以篡改通信的内容。这种情况下的通信信道称为未认证的信道(unauthenticated channel)

攻击者对于不诚实参与者的控制

  • 攻击者只是窃听或获取参与者在协议进行中的所有输入。这种攻击者称为被动攻击者或窃听者
  • 攻击者不仅窃听或获取参与者在协议进行中的所有输入,还要控制不诚实参与者按照自己设计的方式参与协议。这种攻击者称为主动攻击者

9. Dolev-Yao  模型

一是将认证协议本身与认证协议所具体采用的密码系统分开,在假定密码系统是“完美”的基础上讨论认证协议本身的正确性、安全性、冗余性等课题。

二是为攻击者建立了模型。他们认为不能够低估攻击者的知识和能力,攻击者可控制整个通信网络,具有以下能力:

1) 转发消息到其意定接收者处。

2)延迟消息的送达;

3)将消息篡改后转发。

4)将消息与以前接收的消息合并。

5)改变部分或全部消息的去处。

6)重放消息。

10.协议设计过程

协议设计过程是一个重复迭代的过程,在一轮迭代中就能设计出安全严谨的 密码协议是不现实的。在正确性分析和安全性分析阶段如果有错误或者漏洞被发 现,则需要重复这个迭代过程,直到正确性分析中没有发现任何错误,安全性分析能够证明密码协议满足安全需求定义为止。

二 Identity-Based Cryptography 基于身份的密码学

1.公钥加密,其中身份用作公钥

2. IBE Public Key:  alice@gmail.com

与传统的RSA及数字证书相比①不需要证书了,身份就是公钥 ② 自己无法生成私钥,需要可信第三方生成,且可信第三方能知道私钥

三 公钥基础设施

1.密码体制的分类

①单钥密码 优点:算法简单,加解密速度快。  不足:不便密钥管理。

②双钥密码 优点:能公开加密密钥,而仅需保密解密密钥,所以双钥密码不存在密钥管理问题,还可用于消息认证(数字签名);  不足:算法一般比较复杂,加解密速度慢。

2.数字证书

通过数字证书可以将一个公钥和一个身份的实体及其相关信息相绑定,这种绑定的方法使得被验证方的信息必须与数字验证系统中的信息完全吻合才能通过,这也正是数字验证的目的所在。

{证书的序列号、身份(证书持有人唯一的标识符)、证书持有人的公钥、有效期、证书认证机构的签名}

大体上证书被废除的原因有如下几点:

(1)密钥泄露:证书的私钥泄露或被破坏。

(2)从属变更:某些关于密钥的信息变更,如机构从属变更等。

(3)终止使用:该密钥对已不再用于原用途,或者证书的有效期已到。

(4)CA本身原因:由于CA系统私钥泄露,在更新自身密钥和证书的同时,必须用新的私钥重新签发所有它发放的下级证书。

(5)CA有理由怀疑证书细节不真实、不可信。

(6)证书持有者没有履行其职责和登记人协议。

(7)证书持有者死亡、违反电子交易规则或者已经被判定犯罪。

实际上是将此证书序列号放入由CA签发CRL(Certificate Revocation List 证书作废表,或证书黑名单表)中。

证书链-根证书是由自己颁发的。

3.公钥基础设施

公钥基础设施是提供公钥加密和数字签名服务的综合系统,简称PKI 。

PKI是一个提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。

PKI(公钥基础设施)技术采用证书管理公钥,通过第三方的可信任机构----认证中心CA,把用户的公钥和用户的其他标识信息(如身份证号等)捆绑在一起,在Internet 网上验证用户的身份。  PKI核心元素是数字证书,核心执行者是CA认证机构

4.数字签名

数字签名的目的是提供一种手段,使得一个实体把他的身份与某个信息捆绑在一起。

一个信息的数字签名实际上是一个数,它仅仅依赖于签名者的密钥和被签名的消息。

【RSA的一种“逆”,签名用私钥,验证用公钥】【RSA使用公钥加密,接受者用私钥解密】

数字签名算法必须满足的条件

签名者事后不能否认自己的签名;

其他人不能伪造签名;

当通信双方为签名真伪发生争执时, 可以由第三方解决争端

5.RSA算法

四 密钥交换协议1

1.概念

在实际应用系统中,一般是使用公钥密码或其他方法来确立一个适用于对称密码的共享密钥,即会话密钥(session key)。建立这种仅用于一次会话的会话密钥机制就是本章所要介绍的密钥交换协议。密钥交换(key exchange),也称密钥协商(key agreement), 利用这种协议,通信双方(或多方)在一个公开的信道上通过相互传递某些信息来共同建立一个共享的秘密密钥,该密钥的值是关于双方提供输入的一个函数,并将用于对称密码协议中以实现保密性、数据完整性等密码服务。

优点:共享秘密的参与双方对最后的输出都有自己的控制权,因此参与双方对于输出密钥的质量都可以拥有比较高的信心。

• 密钥建立:密钥建立是一个过程,通过该过程,使得两个或多个主体拥有良好的共享密钥。

• 会话密钥:在协议成功运行完毕后,主体间进行应用层会话时使用的密钥,使用时间较短。

• 长期密钥:与会话密钥相对应,可以长时间多次使用,可能是共享的对称密钥,也可能是公开密钥系统中的公钥或私钥。

2.会话密钥的性质

①只有A和B知道k,②A和B确保对方知道k,③A和B知道k是新生成的。这里,第一条是保证参与者知道自己将要通信的目标主体。第二条确保参与者知道目标主体参与了当前通信,并对当前通信作出回应。最后,当一个密钥是共享密钥并用于大量数据加密时,只能使用较短时间,这是密钥管理的一个基本原则。

3. 密钥建立协议的基本目标

–隐式密钥认证:协议参与的一方要确信只有身份确定的协议参与另一方才能知道共享密钥。

–密钥确认:协议参与的一方要确认另一方已经拥有了共享的密钥。

–显示密钥认证:同时提供隐式密钥认证和密钥确认性。

4.密钥建立协议包括

•密钥传输协议A key transport protocol is a key establishment protocol in which one of the principals generates the key and this key is then transferred to all principals.

•密钥协商协议【密钥交换协议】A key agreement protocol is a key establishment protocol in which the session key is a function of inputs by all protocol uses.

•混合协议A hybrid protocol is a key establish protocol in which the session key is a function of inputs by more than one principal, but not by all users.

5.设计一个密钥建立协议

问题:攻击者可以窃听密码协议中传输的所有信息

问题:攻击者能够使用任何可用的信息对密码协议中传输的消息进行修改 ↑

这里C成功的冒充了B,与前一个攻击相比这里要求C必须是一个对于服务器S来说的一个合法用户

问题:攻击者可能是合法用户,也可能是非法用户,也可能是既有内部攻击者也有外部攻击者。

为避免上述攻击,必须将分享会话密钥KAB的用户的名字和会话密钥进行绑定

问题:攻击者在一定时间以后有能力得到以前运行的协议当中的会话密钥。↑这都使得重放攻击成为可能,攻击者C冒充服务器S通过重放旧的消息完成了这次协议,使得A和B使用了旧的会话密钥,而这个旧的会话密钥可能是已经被破译了的。

解决办法:加随机数Needham-Schroeder协议

1.2 NA确认服务器是否被冒充

4.5 B确认A是否拿到密钥【密钥确认】

问题:C可以夹在A、B中间冒充A与B进行密钥确认,而使用之前已经破译的密码 ↑

为了避免上述问题,可以采用↓

我们把公钥证书的使用看作是使用一种离线的可信服务器(CA)这里两个协议参与建立一个新的会话密钥主要有三种可能的方式:

①两个参与者之间已经共享了某个密钥

离线服务器的使用,这里指参与者之间使用公钥加密体制进行通信。

在线服务器的使用。每个参与者与服务器共享一个密钥。通过服务器转发彼此的通信内容。

6.协议的安全性质

•秘密性:保证数据只能够被授权用户得到。通常使用数据加密的手段使得只有掌握正确密钥的用户才能得到数据。

•数据完整性:保证数据没有被非法用户篡改。一般通过hash函数或消息认证码(MAC)实现数据完整性。

•数据起源认证性:保证数据的起源。这也是身份认证的基础。因为篡改数据意味着数据的起源发生改变,一般的数据起源认证可以保证数据完整性。

•非否认性:保证用户对于承诺过的消息不能进行否认。一般使用数字签名实现。对于认证协议或密钥建立协议,非否认性一般不需要,但是它能够自动提供数据的完整性和数据起源认证。

EA(M)表示用A的公钥对消息M加密

{M}K表示用对称密钥K对消息M加密

MAC(M)表示用密钥K构造的消息认证码

SigA(M)表示用户A产生的关于消息M的数字签名

新鲜性

新鲜性的保证可以有效的抵抗重放攻击

时间戳 如果A收到的消息包括一时戳,且在A看来这一时戳接近自己的当前时刻,A才认为收到的消息是新的并接受之。这种方案要求所有各方的时钟是同步的。

询问-应答 用户A向B发出一个一次性随机数(Nonce)作为询问,如果收到B发来的消息(应答)也包含一正确的一次性随机数,A就认为B发来的消息是新的并接受之。

7.协议的攻击类型

①窃听:是最基本的攻击方式,通常被看作是被动攻击因为攻击者并不影响合法用户的通信。除此之外的其它攻击方式都看作主动攻击。

②篡改:如果协议的消息域没有冗余则篡改是一种潜在的攻击。因此一般的协议要求必须提供数据完整性保证。有时加密并不能提供数据完整性。

③重放:攻击者可以在任何时候插入或替换他已经获取的消息。重放是基本的攻击方式的一种。

④反射:这种攻击是重放攻击的一种特例,一般在相同协议并行运行的时候容易发生。尤其是用户在并行的协议中使用相同的身份和密钥的情况下。

1’ A认为有新的参与者开启一轮新的协议

2’ A解开密钥

2   C冒充B给A回信

3   A以为C是B 给C发送NA’,协议执行完毕

反射攻击不太能用时间戳避免

⑤类型攻击:实际当中用户接收到的信息都是二进制串。用户无法判断是否是经过加密等处理。类型攻击就是利用这一点使得用户将一个消息错误的解释成其他的消息。

因为第一条和最后一条消息中加密部分的相似的,因此类型攻击成为可能

这时用户A将使用M, A, B作为会话密钥,而这对攻击者是已知的。

抵抗类型攻击的方法有很多,有的使用每次改变消息元素的顺序,确保每次的加密密钥不同。或者在消息中添加认证数或消息域的类型信息。

8. Diffie-Hellman 协议

Here g generates a suitable group in which the discrete logarithm problem is hard.

K=grArB  (mod p)

这个协议的安全性依赖于求解离散对数问题的困难性。但因为攻击者可以同时截获tA,tB此时攻击者如果能够计算k,也就意味着能够求解CDH (Computational Diffie-Hellman)问题,因此本协议的安全性依赖于更强的假设:CDH问题是困难的

攻击者能够计算ZAC、ZBC,可以利用这两个密钥在AB之间转发内容并对于一方伪装成另一方。

为了抵抗中间人攻击,提出端到端的协议

9.端到端协议

在这个协议中,当攻击者截取消息后,进一步希望用生成的信息代替它, 但由于无法产生有效签名,正是由于签名的使用,端-端协议能够抵抗中间人攻击。在端-端协议中,通信双方A和B除了需要使用自己的数字签名之外,共需三次消息传递,亦即这是一个三段协议。

10.证书操纵与MTI协议

在公钥体制中使用证书作为一种离线的服务器。可以确定证书中公钥的所有者,但是不能够确定与证书相对应的私钥是否为该用户所有,这使得攻击者可以获得一个合法的证书,当中的公钥为攻击者所有但是他并不知道相对应的私钥。

MTI协议:

1. A-B: gx, Cert(A)

2. B-A: gy, Cert(B)

Principals A and B possess public keys ga and gb respectively, and corresponding private keys a and b. Each public key is certified and so A and B possess certificates Cert(A) and Cert(B) respectively which contain copies of their public keys. x and y are random values chosen by A and B respectively.

The shared key is Kab=gay+bx,calculated by A as (gy)a(gb)xand by B as (ga)y(gx)b

对A gy B发的,gb是B的公钥,a是自己的私钥,x是自己选的随机数

对B gx A发的,ga是A的公钥,b是自己的私钥,y是自己选的随机数

攻击:

1. A-C冒充B: gx, Cert(A)

2. C-B: gx, Cert(C)

3. B-C: gy, Cert(B)

4. C冒充B-A: gyc, Cert(B)

The adversary C engineers an attack by choosing a random value c, claiming that gac is its public key, and obtaining a certificate for this public key.

(Notice that C cannot obtain the corresponding private key ac.)

A和B可以计算相同的密钥KAB=gacy+bx

A认为是在和B通信,但是B认为是在和C通信,这在后面的通信中可能会产生问题。

对A  (gyc)a(gb)x  gyc是C冒充B发的,gb是B的公钥,a是A的私钥,x是A的随机数

对B  (gx)b(gac)y  gx是A发的,gac是C的公钥,b是B的私钥,y是B的随机数

五 经典认证协议

1. NSPK协议

A - B : EB (NA ,A )

B - A : EA (NA ,NB)

A - B : EB (NB)

The protocol was designed to provide mutual entity authentication but with the option of using the exchanged nonces, NA and NB as shared secrets for key establishment.

Lowe的攻击

2. Otway-Rees协议

注意:在Otway-Rees协议中,M是会话识别号;而临时值NA和NB不仅提供了时序信息,还因为在消息1和消息2中受到了加密保护,所以在消息3和消息4中这两个临时值作为主体身份的替身出现。S检查消息2中两个加密消息内的M,A,B是否一致,如果匹配,才会为A,B生成会话密钥,并向B发送消息3。

攻击:类型攻击

攻击者P可以冒充B,重放消息1中的加密分量,将它作为消息4中的加密分量发送给A

攻击者还可以冒充认证服务器S攻击Otway Rees协议。P将消息2中的加密分量重放给B

3.Otway-Rees协议Abadi-Needham改进版本

攻击:平行会话攻击

在攻击者的特意安排下,一个协议两次或更多的并发执行,并发的多个运行使得攻击者能够从一个运行中得到另外某个运行中困难问题的答案。以下攻击导致A、B无法建立会话密钥。

4. Andrew 安全RPC 协议

In the first three messages, A and B perform a handshake using a key they already share, Kab. In the final message, B sends a new session key to A. Nonce Na is chosen by A and nonces Nb and Nb’ are chosen by B.

攻击

攻击:类型攻击,攻击者P可以记录监听到的消息2,截获A发送给B的消息3,并在第4步重放消息2给A,如此协议执行后, A 相信临时值Na+1是B 新分配的会话密钥,因此攻击是有效的。虽然,这时攻击者并不一定知道新的会话密钥.

5.大嘴青蛙协议

适用于一个用户信任另一个用户选择密钥的环境。服务器只是将一个用户选择的密钥提供给另一个用户。

攻击:重放攻击

The intruder continues to execute new runs of the protocol, long after the session key is discarded Therefore, the intruder can force B to accept the key again simply by allowing him to receive a sufficiently up to date message from S containing the key.

在回合1中,攻击者P记录A与B之间的一次会话。

然后,在第2与第3回合,攻击者假冒A与B从S处获得对他有用的消息2’’和2’。这时,攻击者P可以假冒S向A与B重放上述消息,引起A与B之间的重新认证。

6. Helsinki 协议

攻击:重放

Both A and B have view of a successful protocol run,A believes it shares f(Ki,Kr) with P, while B believes it shares f(Kp,Kr) with A. C does not know f(Ki,Kr) and f(Kp,Kr). However, entity authentication is not achieved in that B has incorrect knowledge of his peer entity.

Mitchell 和 Yeun 对 Helsinki 协议进行了改进。他们认为 Horng Hsu 攻击成功的原因是 A相信B发送的第2条消息来源于P。这是因为消息2没有明确指出消息来源,从而造成了消息的重放。因此,攻击者P虽然并不知道消息2的真实内容,但 P可以将消息2转发给A,使A相信消息2来源于P。改进如下:

7. Woo Lam 单向认证协议

攻击1:

攻击2:

攻击1:在第二轮中4’5’操作得到的结果帮助了第一轮中P冒充服务器S

攻击2:平行会话攻击,B看到Nb 以为是第一轮的成功执行,其实不然,是第二轮P将Nb’替换成了Nb的结果。

8:认证协议设计与分析的困难性①安全目标本身的微妙性。②协议运行环境的复杂性。③攻击者模型的复杂性。④认证协议本身具有高并发性的特点。

六 密钥交换协议 2

1.基于自证明公钥的密钥交换

与传统公钥基础设施不同,自证明公钥系统组合了RSA和离散对数的特点,系统中的用户从可信中心获得一个自证明公钥,但不需要公钥证书,其身份与他的公钥值隐式地相互认证。

A计算K=(gkB)^xA×(yB)^kA=g^(kBxA)×g^(xBkA)

B计算K=(gkA)^xB×(yA)^kB=g^(kAxB)×g^(xAkB)

 攻击:

kA’是E自己指定的新随机数

A计算 K=(gkB)^xA×(yB)^kA=g^(kBxA)×g^(xBkA)

B计算 K=(gkA’)^xB×(yA’)^kB=g^(kA’xB)×g^(xA’kB)

E计算 K=(gkB)^xA’×(yB)^kA’=g^(kBxA’)×g^(xBkA’)

2.双线性映射满足下列三条性质

①双线性性 e(aq,br)=e(q,r)^(ab)

②非退化性 e(p,p)≠1

③计算有效性 存在有效算法e(q,r)

3. 一个基于身份的非交互式密钥分配体制

这一过程无需在线交互

具有两个局限性:①得到的密钥是静止的,对于很多应用需要每次会话均使用新鲜的会话密钥,这种情况下使用动态的方式会更佳,②通信双方需要先注册并得到自己的私钥才能进行通信。

4. 基于身份的两方密钥交换

K=e(aQB+bQA,sP)

缺点:A、B各要要计算两次双线性映射,且是静态的

5. 三方Diffie-Hellman 密钥交换

(执行两轮)↑

6. 基于双线性配对的三方密钥交换

假定公开参数G1、G2、q、P、e

7. 四方Diffie-Hellman密钥交换

8. Burmester-Desmedt 多方密钥交换

9.协议应该关注成员动态变化

值得一提的是,在设计多方密钥交换协议时,除了关注其安全性、有效性之外,还必须注意到对成员关系动态变化的处理,即允许参与者可以动态地加人和离开用户群体。在一个动态的群体中,当成员关系有变化时必须确保会话密钥得到更新,密钥更新必须满足这样的两个条件:①离开了的成员无法获取之后的会话密钥;②新加人的成员无法获取先前的会话密钥。满足这样要求的多方密钥协商方案的构造与分析已形成了当前密钥交换协议研究的一个重要方向。

七 秘密握手协议

1. Secret handshakes

秘密握手协议可以帮助组中的两个成员互相验证身份。同时,一个成员不会向另一个成员透露他/她的归属,除非他们属于同一组。

For instance, when a FBI agent (say Alice) and another FBI agent (Bob) execute a

secret handshake protocol, Bob can learn Alice’s affiliation, only if Bob is also a FBI agent and vice versa.

2.The syntax of secret handshakes

设置:该算法是公开执行的。输入安全参数,输出公共参数。

创建组:GA (Group Authority)执行此算法创建组G。

添加用户:由GA执行,将用户U添加到组中。GA为U生成证书,U通过经过身份验证的私有通道从GA获得证书。

握手: A protocol executed between users A and B, which ensures that B discovers A ∈G if and only if A also discovers B∈G.

撤销用户:GA通过该算法来撤销U的证书。

3. A simple handshake protocol

id 不能有现实中的身份信息

八 实体认证协议 2

1.基于公钥密码的一次传输单向认证

显然,一个直接的认证方式是A对某个消息(比如身份信息)进行签名操作,将签名结果发送给对方,如果验证者B验证签名有效,则意味着该签名确实由A产生。此处同样有一个问题是:攻击者E有可能事先获得了这个签名,然后他在现在这个时刻冒充A发送了该签名。这也就说明A需要在签名消息中加入判断性数据,如时间戳或序列号。基于公钥密码的一次传输单向认证协议如下:

A计算SignA([TAISNA],Bob),将所得结果与[TAISNA]、Bob以及自己的公钥证书CertA一起发送给B。

[TAISNA]表示时间戳TA或者序列号SNA。收到A发来的数据后,B可以利用这些数据执行签名验证运算,如果A的数字签名通过了验证,则相信本次通信确实就是与A进行的.

由于时间戳或序列号均存在同步和维护的问题,这在有些环境中是无法实现的。此时可以使用随机数代替时间戳/序列号,对应地,非交互式的协议就变成了交互式的了。

2. 基于公钥密码的两次传输单向认证

(1)B选择一个一次性随机数NB,发送给A。

(2)A将 CertA和 SignA(NB,Bob)返回给B。

(3)B执行签名验证运算:如果A 的签名通过验证,则B接受此次运行,否则拒绝。

确实,通过这样的交互过程,B实现了自己的目的:对A执行了认证,对方确实是A。但是对于A来说,这个过程是不公平的,一个不诚实的B可以利用这个过程欺骗A,使A蒙受损失。比如B可以这样做:

(1)B计算N=h(将A名下的所有财产转至B名下),其中h(·)是某个哈希函数,从而这样计算出来的NB看上去也像一个随机数。

(2)B将NB发送给A。

(3)A将CertA、和SignA(NB,Bob)返回给B。

(4)B执行签名验证运算:如果A的签名通过验证,则B接受此次运行,否则拒绝。

本例中,B能够这样做是因为A对签名内容中的随机数没有任何控制权。找到这个原因后,只需要改进协议以使A可以在待签名的数据中加入一些自己可以控制的随机输入。稍作修改,可得到一个合理的基于公钥密码的两次传输单向认证协议:

(1)B选择一个一次性随机数NB,将NB发送给A。

(2)A选择一个一次性随机数NA,计算SignA (NA,NB,Bob)将所得签名与NA,NB、Bob、CertA一起返回给B。

(3)B执行签名验证运算:如果A的签名通过验证,则B接受此次运行,否则拒绝。

这里允许A自由选择随机数NA正是由于这个随机数的存在,防止了A不经意间对B事先选择好的信息进行签名。

3. 基于公钥密码的两次传输双向认证

显然,协议参与方各执行一次数字签名,然后将签名发送给对方是使用公钥密码实现双向认证的一个直接方法。如前类似,签名内容中需要嵌入判断性数据。,使用时间戳或序列号,我们可以给出下面的基于公钥密码的两次传输双向认证协议:

①A计算SignA([TAISNA],Bob),将所得结果与[TAISNA]、Bob以及自己的公钥证书CertA一起发送给B。

②B计算SignB([TBISNB],Ali),将所得结果与[TBISNB]、Ali以及自己的公钥证书CertB一起发送给A。

这个协议其实是1小节中协议的两次独立运用。A 和B利用接收到的时间戳或序列号执行签名验证操作以判定是否接受对方为一次有效运行

4. 基于公钥密码的三次传输双向认证

不能说双向认证就是简单的两次单向认证,即:双向认证只是通过对应的单向认证协议来实现,一个方向执行一次(B认证A,A也认证B)。事实上,如果采用这种做法的话,有时会带来一些安全性方面的问题,攻击者将有机可乘。以两次运行第2小节当中的协议为例:

(1)B选择一个一次性随机数NB,将NB发送给A。

(2)A选择一个一次性随机数NA,计算SignA (NA,NB,Bob)将所得签名与NA,NB、Bob、CertA一起返回给B。

(3) B验证A的数字签名,如果签名有效,则认为A是真实的;然后B选择一个一次性随机数NB2,计算SignB(NB2,NA,Alice),将所得签名结果、Alice,NB2、NA以及自己的证书CertB一起返回给A。

(4)A利用接收到的数据对B的数字签名执行验证运算,如果签名有效,则认为B是真实的。

攻击如下:

改进:

(1)B选择一个一次性随机数NB,将NB发送给A。

(2)A选择一个一次性随机数NA,计算SignA (NA,NB,Bob)将所得签名与NA,NB、Bob、CertA一起返回给B。

(3) B验证A的数字签名,如果签名有效,则认为A是真实的;然后B计算SignB(NB,NA,Alice),将所得签名结果、Alice,NB、NA以及自己的证书CertB一起返回给A。

(4)A利用接收到的数据对B的数字签名执行验证运算,如果签名有效,则认为B是真实的。

这里B不再选取新的随机数NB2,而是使用NB,这样就使得两次单向协议不再独立,而是相互关联的,使得上述攻击失效。

5. 基于口令的实体认证

主机H在初始化用户U之后,建立一个保存所有用户口令的文档,文档中的每一条记录均形如(IDu,PWu),分别对应用户的身份和该用户的口令。以后U每次登录计算机H时,H都要求他输人口令,然后从自己存储的用户口令表中查找以决定U的输入是否有效。具体过程是:

(1)U→H:IDu。(2)H→U:“请输入口令”。 (3)U→H:PW。

(4)H从自已的口令文档中查找是否存在与U的输入(IDu,PW)相匹配的记录,如果有,则允许.

不过此协议并不适用于现在的网络通信环境:由于用户身份和口令均是明文传输,在开放信道上窃听的任意攻击者都能够获得这个用户的身份和口令,以后就可以像U一样,使用其身份和口令(IDu,PW)从而获得H的服务,换句话说,该协议并没有实现任何实体认证功能。在最坏的情况下,攻击者可能会读取主机H保存的口令文档,从而就会拥有所有用户的所有权限,可以进一步对整个系统造成不可检测的巨大危害。

6. 使用单向函数

在5小节给出的协议中,主机H保存了用户口令表。如同前面分析,这个口令表极具脆弱性,易受攻击者的攻击。可以对此加以以进。为了决定用户是否可以使用自己的服务﹐H只要具备区分有效口令和无效口令的能力即可,而无需知道口令本身。可以让主机存储口令的单向函数值,而不是存储口令本身。具体来说,主机H事先对用户U进行初始化,发给他一个口令,并建立一个保存所有用户口令的文档,文档中的每一条记录均形如(IDu,0WF(PW))

(1)U→H:IDu。(2)H→U:“请输入口令”。 (3)U→H:PW。

(4)H将接收到的PW作为单向函数OWF(·)的输入,计算其值,然后从自己的口令文档中查找是否存在相匹配的记录(ID,OWF(PW)),如果有,则允许U使用自己的服务。

由于H不再存储口令本身,所以即便攻击者窃取主机存储的口令表得到OWF(PWu),也无法直接将该值作为用户IDu的口令在协议中使用;由于OWF(·)是单向函数,也无法由该值计算出PWu。

显然,即便使用了单向函数,在线窃听的攻击者仍然可以获得U发送给H的以明文显示的口令。

7.使用单向函数加盐

在6小节给出的协议中,主机H保存了用户口令表,口令表中的记录不再是用户身份和口令,而是用户身份与口令的单向函数值。这确实增加了一定的安全性,但由于口令通常都是比较短并且易于记住的,所以这个协议仍然存在下面的攻击方法。攻击者E在本地搜集了很多(比如10^6个)最常用的口令,用单向函数OWF(·)对这些口令进行计算,得到对应的单向函数值,将这些结果存储起来。以口令长为8B计算,E存储的文件也不超过8 MB。然后E窃取到主机保存的(经过单向函数加密处理的)口令表,与自己存储的文件比较,如果得到匹配数据就意味着E获得了对应用户的口令。这种攻击方式称为字典式攻击(dictionary attack)。为了消除字典式攻击,可以采用下面的方法:主机H事先对U进行初始化,发给U一个口令PWu,并建立一个保存所有用户口令的文档,文档中的每一条记录均形如(IDu,salt,OWF(PWu,salt)),分别对应用户的身份、随机数以及用户口令联合随机数的单向函数值。

(1)U→H:IDu。(2)H→U:“请输入口令”。 (3)U→H:PW。

(4)H在自己的口令文件中找到该用户对应的记录(IDu,salt,OWF(PWu,salt)),将其中的salt和接收到的PWu作为单向函数OWF(·)的输入,如果计算所得的值与自己保存的单向函数值相等,则允许U使用自己的服务。

这里使用了随机数salt。如果salt的取值范围足够大的话,就可以消除对常用口令采取的字典式攻击,因为E不得不产生每个可能的salt值的单向函数值。协议中加入的随机数通常被称为盐,这种使用随机数的做法被称为加盐操作。

读者可能会认为E可以先窃取主机存储的口令文档,然后再针对某个用户的salt值联合常用口令计算对应的单向函数值,而不是先离线计算单向函数值再窃取口令文档。但是,这样有几个问题:一是E先窃取文档再花费较长时间穷举计算,主机可能会在这个时间段内察觉到入侵从而采取防范措施;二是,即便E能够成功,采取这种做法最多也只是推测出某一个用户的口令,如果他要猜测另外一个用户的口令,则需要花费同样的计算量,这仍然是巨大的代价。

显然,即便同时使用了单向函数和加盐操作还是不能抵抗在线口令窃听攻击,即攻击者可以获得U发送给H的以明文显示的口令。

8.使用哈希链

在线窃听的原因是用户每次登录都使用同一个口令,因此哈希链采取“一次性”口令的思想。

 

E已经获取到了Hash^(c-2),下次登录H就会发c-1,E就直接可以直接冒充U登录H。

9. 加密的密钥交换协议EKE

 

10.攻击类型

重放攻击、中间人攻击

平行会话攻击:在攻击者E的操控下,被攻击协议的两个或多个运行并发执行,他可以从其中某次运行中传输的消息得到其他运行中所需要的应答。

交错攻击:指的是在E的操纵下,某个被攻击协议的两次(或多次)运行按交错的方式执行。

九 高级签名协议

一、盲签名

1. 持有某个消息m的用户User最终将获得签名人Signer对消息m 的数字签名s ;但 Signer却不知道消息m的内容,即便以后将(m,s)公开,他也无法追踪消息与自己执行签名过程之间的相互关系。

2.盲签名的基本概念

在一个盲签名体制中存在两个参与实体:一个是签名人,另一个是用户。其中签名人拥有自己的公、私钥,用户有一个消息m,并希望得到签名人对m的签名。一个盲签名方案一般由满足如下条件的3个算法 Setup 、Sign和Verify构成:

(1)算法Setup是一个概率多项式时间算法,其输出为系统参数params和签名人的公、私钥对(pk,sk)。

(2)算法 Sign是一个概率多项式时间的交互协议,公共输入是系统参数和签名人的公钥pk,签名人的秘密输人为自己的私钥sk,用户的秘密输入为待签名消息m。双方交互执行签名协议,在多项式时间内停止,停止时用户输出签名s.

(3)算法Verify是一个多项式时间算法,其输入为系统公开参数params、签名人的公钥pk以及待验证的消息签名对(m,s);其输出为1(表示签名有效)或0(表示签名无效),记作1或0←Verify(params,pk,m,s)。

3.盲签名的安全性需求

(1)正确性(也称完备性或一致性):如果s是Sign算法正确执行后输出的对于消息m的签名,则总有Verify(params,pk,m,s)=1。

(2)不可伪造性:任意不知道签名人私钥sk的人无法有效地计算出一个能够通过签名验证方程的消息签名对(m* ,s*)。

(3)盲性:除请求签名的用户外,任何人(包括签名人)都无法将交互协议Sign产生的会话信息(签名人与用户在公共信道上交互的信息的集合)与最终的盲签名正确匹配起来。如果签名人能将其会话信息与最终所得的签名正确匹配,他就能够跟踪签名。

4. 盲签名的基本设计思路

(1)在发送消息给签名人之前,用户先引入盲化因子,由消息m计算出数据m',发送m'给签名人(这个过程称为盲化)。

(2)签名人对m'执行签名操作得到签名s' ,发回给用户。

(3)用户从s'中计算出消息m的签名s(这个过程称为去盲)。

5. 基于RSA问题的盲签名

Setup:假设选举委员会(即 Signer)选定p,q,d是私钥,n = pq和e是公钥。

Sign

 Verify

6. 基于离散对数的盲签名

给定一个素数阶群G,如果存在一个有效的算法 VDDH(·)能够求解其上的DDH问题,但不存在有效算法求解其上的CDH问题,则将这样的群称为GDH群。

                Sign

7.部分盲签名

在普通的盲签名体制中,被签名的消息完全由用户控制,签名人对此一无所知,也不知道关于最终签名的任何信息。这有可能成为一个缺点,造成签名被非法使用等问题。

用户和签名者约定一个公共的信息c,用户将公共信息c嵌入需要签名的消息中发送给签名者签名。

二、群签名

1.在一个群签名体制中,群体(group)中的成员(member)可代表整个群体进行匿名签名。一方面,验证者只能确定签名是由群体中的某个成员产生的,但不能确定是哪个成员,此即群签名的匿名性;另一方面,在必要的时候(比如发生争执的情况下)群管理者可以打开(open)签名来揭示签名人的身份,使得签名人不能否认自己的签名行为,此即群签名的可追踪性。将两者结合在一起,可以说群签名是一种同时提供匿名性和可跟踪性的技术,其匿名性为合法用户提供匿名保护,其可跟踪性又使得可信机构可以跟踪违法行为。群签名还具有无关联性(unlinkability),即在不打开群签名的条件下,任何人不能确定两个群签名是否为同一个成员产生的。

2. 群签名的基本概念

(1)系统初始化算法 产生群公钥、群成员的公钥和私钥以及群管理员用于打开签名的私钥。

(2)成员加入 一个新用户通过和群管理员的交互协议请求加入,协议执行结束后,合法的新成员完成身份注册并获得一个秘密密钥(有的方案中还会包含一个成员资格证书)。

(3)签名 群签名产生算法,用群成员的私钥和成员资格证书对消息m进行签名。

(4)验证 验证消息m的签名是否为合法的群签名。

(5)打开 群管理员输入消息、消息的签名和自己的私钥,运行打开算法以揭示签名者的真实身份。

3.群签名的安全性需求

(1)正确性 一个合法的群成员按照签名产生算法产生的群签名一定能够通过签名验证算法。

(2)不可伪造性 非群成员要产生一个通过验证算法的群签名在计算上是不可行的。

(3)匿名性 除群管理员之外,任何人要确定一个给定群签名的实际签名人在计算上是不可行的。

(4)无关联性(unlinkability)在不打开签名的情况下,确定两个不同的群签名是否为同一个签名人所签是不可能的。

(5)可跟踪性(traceability)一个正确的签名可以由群管理员揭示签名者的真实身份。

(6)防陷害性 包括群管理员在内的任何成员都不能以其他群成员的名义产生合法的群签名。

(7)抗联合攻击 任意多个群成员勾结或与群管理员勾结都不能伪造其他群成员的签名。

4. 一个简单的群签名方案

(1)系统初始化算法 在这个算法里,群管理者GM为群中的每个成员分发一张秘密密钥表,这些表是互不相交的。GM将各个成员拥有的私钥汇总在一起,将这些私钥对应的公钥以一种随机的次序排成一张表,并将这个公钥表公开。

(2)签名 每个群成员每次从自己的私钥表中选取一个没有使用过的私钥,利用这个密钥对消息产生签名。

(3)签名验证 如果接收者要对某个群成员产生的群签名执行签名验证操作,他就用公钥表中的每个公钥去验证,只要发现有一个公钥使得签名验证通过,就说明这个签名是该群的合法签名。

(4)打开 在发生争端的情况下,由于群管理者知道所有群成员的私钥和公钥之间的对应关系,从而可以根据签名、公钥恢复出签名人的身份。

存在问题:

在这个简单的方案中,假设群成员都是在系统初始化时固定加入的,所以没有讨论群成员的动态加入问题。此外,每个群成员的任一私钥只能使用一次,否则,如果某个群成员使用自己的某个私钥x同时对消息m1、m2执行签名操作,则验证者可以利用x对应的公钥y,验证这两个签名有效,同时验证者可以确定这两个签名是由该群中的同一个成员产生的。这导致方案丧失不可关联性。

在这个方案中,由于群管理者知道每个群成员的私钥,所以他能够以任一群成员的名义产生有效群签名。不过,如果假设群管理者总是可信的,则可以认为GM不会试图假冒群成员伪造群签名。

5. 另一个简单的群签名机制

可以看到,在这个方案中,每个群成员的签名私钥只有一个,即risi mod(p-1),且群管理者不再拥有群成员执行群签名时所使用的这个签名私钥。此外,群管理者可以定期更新颁发给每个群成员的ri∈Zp,以使方案具有更大的灵活性。这个方案的一个明显缺点是如果有新的群成员参加,所有的群成员都不得不改变他们的密钥,否则接收者能将旧的群成员和新的群成员区别开来。

6.短的群签名方案

前面介绍的群签名方案中,群公钥的长度是群成员个数n的线性函数,而且每个群成员使用当前的私钥执行签名操作时所能签名的次数都是固定的。因此,前述方案虽然简单,但不能算是有效的。另外,一个群签名的长度依赖于所使用的签名算法。这样长的签名长度对某些应用是不合适的。Boneh等人在2004年的美国密码学会上提出了一个基于双线性对的短的群签名体制(short group signature)。该方案假设系统中存在两个群管理者,其中一个被称为issuer,负责为群成员颁发用于执行群签名操作所需的私钥,另一个被称为opener,在发生争端的情况下负责打开群成员身份。

这个方案的最大优点是每个群成员产生的群签名都是固定长度的,而与群成员的个数无关。

7.成员撤销

所谓安全有效地撤销群成员,是指一种机制,使得某个群成员被撤销后,他拥有的私钥和成员证书不能再用于产生有效的群签名。

当一个成员的加入或撤销时,如果需要更新群公钥或群成员的私钥,称这样的群签名体制为静态群签名;反之,则称为动态群签名。

三、环签名

1. 在一个环签名体制中,签名人可以随意挑选n-1个人,这些人连同他自身构成一个含n个人的集合,该集合被称为环。然后他可以用自己的私钥和其他n-1个人的公钥一起对某个消息m执行环签名操作,产生签名σ。接到消息签名对(m,σ)后,任一验证者执行环签名验证算法,如果签名有效则可以确信该签名是由这个环中某个签名者产生的,但他无法识别该签名人的身份。由此可见,环签名体制能够提供签名人匿名性。与群签名提供的置名性不同,在环签名体制中不存在一个具有撤销匿名性的管理者,因此环签名体制提供的是一种不可撤销的匿名性。给定一个环签名,除了签名人自己外,任何人均无法获知产生该签名的签名人身份。

2、环签名的基本概念

3. 环签名的安全性需求

(1)正确性 环中的任一成员执行环签名算法后输出的签名都能通过该体制中的签名验证算法。

(2)匿名性 给定一个环签名,则任一验证者不会以大于1/n的概率识别产生该签名的真正签名人,其中n为环中成员个数。

(3)不可伪造性 任意不在环U={U1,U2 ,…,Un}中的用户不能有效地产生一个消息签名对(m,σ)使得ring-verify(m,σ,pk1,pk2,…)=1。

如果一个环签名体制满足性质(1)~(3) ,就称该体制是安全的。

(4)可链接性 如果环U={U1,U2 ,…,U}中的某个签名人产生了两个消息签名对( m1,σ1).(m2,σ2) ,则存在有效算法使得签名验证者可以确定这两个消息是由环中同一个签名人产生的(但他仍然不知道这个签名人的身份)。

四、基于身份的数字签名

1.基于身份的数字签名体制的定义

(1)Setup 系统初始化算法,该算法由PKG完成,输出系统的主密钥和系统参数param。PKG将系统参数公开发布,主密钥秘密保存

(2)Extract私钥提取算法,该算法由PKG执行。算法的输入是系统中用户的身份信息ID∈ {0,1}*。PKG利用自己的主密钥和系统参数,计算出对应ID的私钥d ,最后将私钥秘密发送给该用户。

(3) Sign 签名产生算法,由签名人完成。算法的输入是系统参数 param、签名者私钥d以及待签名的消息m;输出即为签名人对该消息的签名σ。记作σ←Sign(param,d,m)。

(4) Verify签名验证算法, 由任意验证者完成。算法的输入是系统参数param、签名者的身份信息ID以及待验证的消息签名对(m,σ);输出为1或0,前者表示接受该签名有效,后者表示拒绝该签名。记作1或0<—Verify (param,ID,m,σ).

2.使用双线性对技术的IBS

十 比特承诺

1. 比特承诺协议概述

概括说来比特承诺包括两个阶段:承诺阶段和打开阶段。

(1)承诺阶段(commit)发送方A选择一个要承诺的比特b(b等于0或1),并把能表示该比特的消息c送给B。

(2)打开阶段(open)A把打开承诺的消息d和b发送给B。B用d打开c并验证b是否是A承诺的比特。

一个安全的比特承诺方案必须满足两个安全性质:

(1)隐藏性(hiding)在协议的第1个阶段结束时,接收方(如前所述的B)得不到发送方(如前所述的A)承诺的比特b的值。即使一个不诚实的接收方也要满足这个条件。称一个承诺方案是完善隐蔽的是指接收方不能从c中获取关于比特b的任何有用信息。

(2)绑定性(binding)给定第1阶段的交互信息,接收者只能接受一个合法的承诺。即发送者不能在打开承诺阶段改变自己承诺的比特。

2. 使用对称加密函数

3. 使用单向散列函数

4. 使用伪随机数发生器

5. Pedersen承诺协议

安全协议设计与分析-32学时 考试复习相关推荐

  1. [渝粤教育] 西南科技大学 动态网页设计(JSP) 在线考试复习资料

    动态网页设计(JSP)--在线考试复习资料 一.单选题 1.下面关于通过JDBC访问数据库哪项说明正确? A.对数据库操作一定要驱动程序 B.对数据库操作一定要DriverManager.getCon ...

  2. 计算机算法设计与分析第四版复习,计算机算法设计与分析(第4版)第1章.ppt

    <计算机算法设计与分析(第4版)第1章.ppt>由会员分享,可在线阅读,更多相关<计算机算法设计与分析(第4版)第1章.ppt(50页珍藏版)>请在人人文库网上搜索. 1.计算 ...

  3. 【算法设计与分析】期末考试知识总结(知识超浓缩版)

    目录 简要介绍 ·复杂度 ·迭代 插入排序 二分查找 快排划分 选择排序 计数排序 基数排序 桶排序 ·递归 递归式的计算-四种方法 欧几里得算法 汉诺塔问题 快速排序 归并排序 堆排序 ·分治 二维 ...

  4. CUMT2022算法设计与分析A上机考试

    总结 一共5道题,都是原题,2道英文题是算法课的作业题,以为不会考,结果考了.勉强做了4个,最后一个忘了转移方程了,想写个暴力的解法,结果没写完.本来以为会出个回溯题的,但是一个也没出,白练了一堆.整 ...

  5. 计算机仿真与MATLAB-32学时 考试复习

    第1章 系统仿真的基本概念 1.三个基本要素: 系统.模型.计算机 2.三项基本活动: 模型建立.仿真模型建立(二次建模).仿真试验 3.建模方法: 白盒子系统  用已知的基本定律,经过分析和演绎推导 ...

  6. 哈工大2021算法设计与分析期末试题

    注1:本试题为回忆版,因而部分语言描述可能有不准确的地方,还请谅解! 注2:PDF文件近期将上传至Github的HITSZ-OpenCS项目(2022.04.05update:已经完成上传) 注3:自 ...

  7. USTC算法设计与分析-总结

    <算法设计与分析>是中国科学技术大学计算机专业的研究生学科基础课,黄刘生老师讲概率算法和近似算法,汪炀老师讲分布式算法,因为课程内容繁杂且难度较大,所以结合了上课所做笔记和期末复习总结成思 ...

  8. 商用密码应用与安全性评估要点笔记(密码协议设计、密码功能实现)

    1.19 密码协议设计 词条 内容 协议设计与分析 根据经验设计的密钥协议时非常脆弱和危险的,各种未知的攻击会不断涌现.协议安全缺乏安全性证明. 密码协议设计原则 (1)独立完整性原则.(2)消息前提 ...

  9. 基于BS架构考试系统的设计与分析

    摘  要 计算机网络如果结合使用信息管理系统,能够提高管理员管理的效率,改善服务质量.优秀的考试系统能够更有效管理用户考试和评分业务规范,帮助管理者更加有效管理用户考试和评分,可以帮助提高克服人工管理 ...

最新文章

  1. linux定时任务简记
  2. (二) 关于配置travis-ci持续集成python pytest测试的相关记录
  3. 重磅:国家正式出台学术不端行为界定
  4. 下列不属于android布局的是( ),Android软件工程师笔试题(全选择题)【0-1年经验】...
  5. java如何把string转化E_java将string转为代码执行
  6. MySQL+号的作用
  7. 不同特权级间代码段的跳转{ 门 + 跳转(jmp + call) + 返回(ret) }
  8. SVN查看提交日志的命令
  9. 最小生成树 kruskal_使用Kruskal算法求解Java最小生成树问题
  10. 019、Linux性能监控:memory
  11. 纽约大学计算机工程专业课程,纽约大学计算机工程硕士专业介绍及课程要求
  12. 一、Asp.Net Core WebAPI——修改默认监听端口
  13. 【Java程序设计】接口与多态
  14. 好奇怪呀后面加什么标点_好奇怪,为什么开发商就不能把这款好户型打造得更完美些呢?...
  15. 记录自己的心路文字~
  16. 增长率用计算机怎么算,excel如何利用公式来计算平均增长率的方法
  17. 医学激光成像仪行业研究及十四五规划分析报告
  18. 初识微信小程序 字体样式设置
  19. mysql计算相关系数_用sql实现相关系数的计算
  20. 深入了解触摸事件的分发

热门文章

  1. hi3516配置wifi_海思Hi3516A全功能开发板支持4G网络支持BT1120输入方案订制开发
  2. 一文带你深入理解【Java基础】· 枚举类
  3. OpenHarmony啃论文俱乐部方法总结分析
  4. 美赛 LaTex排版笔记
  5. BackTrack V5的汉化
  6. 【无标题】IP地址段必须正好可以聚合成1个地址块
  7. 【老鸟进阶】deepfacelab训练参数详解
  8. Yii需要php版本,为什么我们要选择yii框架
  9. Python 数据清理实战
  10. 所谓框架到底是什么?