在通过网络进行通信的上下文中,身份等同于对特定数据的了解:概括地说,从外部来看,您可以从外部了解给定实体的信息仅包含该实体发出的字节数,即它可以计算什么。既然每个人都可以买到同一种PC,那么计算能力的差异最终在于实体所知道的。例如,从 StackExchange 的角度来看,您与我不同,只是您知道“Jus12”帐户的密码,而我不知道,而我知道“Tom Leek”帐户的密码,而您不知道.
识别是关于确保一个给定的实体参与其中并且以某种方式“活跃”。例如,StackExchange 服务器可以通过挑战我(我的计算机)显示我的密码来确保我还活着并且在踢。请注意,StackExchange 服务器(实际上是另一台服务器,因为它们使用间接方案,但这是技术性问题)也知道我的密码,因此当成功响应 SE 质询时,SE 服务器只知道,在另一端线,操作一个实体,它要么是我,要么是 SE 服务器本身。识别协议必须注意避免或至少可靠地检测到服务器被狡猾的恶意个人(以下称为通用术语“攻击者”)诱导与自己交谈的情况。
身份认同本身是毫无用处的。SE服务器想知道的不是我,Tom Leek,存在并且醒着;SE服务器对此深信不疑,并不在意。SE 服务器想要的是确保我批准我要发出的 HTTP 请求。他们想要身份验证:这是应用于其他一些数据的身份验证。因此,识别是有用的,因为它可以被认为适用于一堆数据,然后作为“经过验证的”出处。对于攻击者可能对数据造成的攻击,身份和数据之间的联系必须具有弹性。在 StackExchange 的情况下,攻击者应该是相当弱的,因为完整性HTTP 请求的假设:标识部分变成 cookie,作为 HTTP 请求的一部分,SE 服务器只是假设攻击者无法更改请求或 cookie,或复制 cookie 并将其移植到新的虚假 HTTP 上要求。
更彻底的身份验证通常使用加密的强链接,例如SSL/TLS隧道(通常作为 HTTPS 的一部分)。隧道的加密属性意味着服务器可以确定它会在整个 SSL 会话中与同一个实体进行对话;此外,服务器假定用户不会播放与他的帐户密码相关的任何识别协议,除非这发生在服务器经过适当身份验证的 SSL 隧道上(即,客户端确定它与正确的服务器通信 -这就是服务器证书的内容——它发送的任何数据都只会发送到该服务器,所以它是身份验证)。在这些条件下,如果服务器可以识别我在那个隧道中,然后标识覆盖了之后通过隧道发送的任何数据:隧道是标识和数据之间的链接,所以这就是身份验证。
不可否认性是某些身份验证协议的一个特征,其中身份和数据之间的链接不仅可以由位于线路另一端的任何人以交互方式进行验证,还可以由不可告人的第三方(例如法官)进行验证. 基于密码的方案通常不提供该属性,因为无论谁验证密码也必须或多或少直接知道它,因此可以构成所谓的发射器。不可否认性需要数学。请注意,在 SSL 隧道中,客户端通过其证书对服务器进行身份验证,该证书充满了非对称加密,但这并不授予不可否认性:客户端确信它从服务器接收到的任何数据确实来自服务器,但是客户端无法记录任何内容,这将使法官相信服务器确实发送了该数据。要获得不可否认性,您需要数字签名。在没有不可否认性的情况下,可以使用称为消息身份验证代码的算法进行身份验证,计算上更轻。令人困惑的是,有一个广泛的(但不正确的)将 MAC 称为“签名”的传统。
概括:
- 识别:特定实体E参与其中并做出响应。
- 完整性:接收到的任何数据都已由某个实体E'按原样发送并且未更改。
- 身份验证:身份和完整性同时进行(E = E')。
- 不可否认性:可以说服法官的认证。