众所周知,中情局对安全的需求意味着:
- 保密
- 正直
- 可用性
我不明白为什么要定义“完整性”和“可用性”,
- 如果我们做一个明文的Confidentiality,Integrity就是一个完整的明文,这是基本的,为什么还有镀金的百合?
- 如果定义了 Integrity,那么解密后的明文必须是可用的,所以 Availability 也是锦上添花。
众所周知,中情局对安全的需求意味着:
我不明白为什么要定义“完整性”和“可用性”,
您在这里关注的范围非常狭窄。CIA 三元组是关于整个系统的安全性,而不仅仅是加密消息。
话虽如此,三合会的所有元素都适用于您的示例:
虽然多项式的答案很出色,但它可能有助于理解 CIA 原则,以添加如何破坏每个方面以及如何保护每个方面的示例。
机密性的目的只是控制“谁阅读了什么?”。如果信息泄露给未经授权的一方,机密性可能会被破坏。什么样的信息完全取决于威胁模型。我举几个例子:
如您所见,机密性不仅仅是消息的内容。元数据也很重要,而且很难加密。但总的来说,加密是获得机密性的好方法。然而,在这些具体示例中,需要采取进一步措施对所有泄露信息保密。
完整性可以看作是消息不能被未经授权的一方修改的属性。由于这通常是一个不可行的目标,一个好的折衷方案是任何类型的未经授权的修改都需要是可识别的。
您将了解密码学的第一件事就是始终使用算法来完成它们的设计目的。加密被用来保证机密性,而不是完整性。
One-Time Pad就是一个很好的例子。它是通过使用至少与消息一样长的随机密钥对消息进行异或运算来实现的。让我给你举个例子。作为消息,我们将使用
ATTACK AT 09:00
作为关键,我们将使用
jHiA015Ak4012Kf
这将导致十六进制消息
2b1c3d00737a15003f140008087b56
攻击者知道消息的粗略格式,但不知道内容,现在可以恶意将密文更改为:
2b1c3d00737a15003f140101087b56
使用相同的密钥,这将破译成
ATTACK AT 10:00
这可能被证明是一个致命的结果。攻击者仍然无法读取密文,因此仍然保持机密性,但是通过操纵密文并且接收者无法检测到这种操纵,攻击者得到了他们想要的东西。
可以通过向消息添加某种代码来验证消息是否已被修改来维护完整性。可以使用带有密钥的散列、散列上的加密签名等。重要的是,对消息的任何修改都会被注意到,并且攻击者自己无法伪造有效的身份验证代码。
可用性经常被那些对安全性较新的人看不起,作为一种“好有”的目标。但是让我问你:如果服务器一直处于离线状态,那么完全加密并且没有人可以写入的服务器有什么用?
可用性可以通过许多指标来判断,具体取决于每个单独的用例。有时是正常运行时间,有时是响应时间,有时是性能。如果企业受到重大影响,这些因素中的每一个都可能导致企业倒闭。
想象一下,如果 StackExchange 会在 90% 的时间里因“维护”而停机,因为 ████████████bringStackExchangeDown.sh
中的一些小伙伴设置了一个 cronjob 以每 30 分钟运行一次。而网站在线的 10%,速度太慢了,相比之下 54k 拨号调制解调器似乎快得惊人。
你不想使用那个网站,而攻击者得到了他们想要的东西。可悲的是,无法通过投入更多加密来提高可用性。只有通过扩大和扩大、增加冗余以及修复会降低可用性的错误,才能提高可用性。
正如其他答案所提到的,机密性、完整性、可用性意味着应用整个数据中心应用程序,而不是单个加密消息。
也就是说,确实适用的 CIA 定义略有不同:机密性、完整性、身份验证——例如,请参阅Python 中的实用密码学、Nieslon 和 Monson
保密
攻击者无法阅读您的消息。这是不言自明的。
正直
攻击者无法修改您的消息。
我会争辩说,这与保密性是正交的。考虑以下情况:
验证
您可以通过加密方式确定发送消息的人。同样,这与其他两个是正交的,因为从本质上讲,它归结为确保只有一个人可以访问生成此消息的私钥,并且您有一种可靠的方式将该密钥映射到该人. 提供强身份验证的示例是由数字证书中的密钥生成的签名,或您为自己加密的 AES_GCM,即您知道您必须创建此消息,因为没有其他人拥有密钥的副本
我接受了培训,指定 CIA 不仅是三个词的助记符,而且是记住它们首选顺序的一种方式。也就是说,有一个既定的优先级:
以该顺序。
推理路线如下:
有些人可能不相信这是最好的。我确实认为人们可能出于某些明智的原因不同意上述某些观点,并为他们的不同观点提出一些令人信服的论据。
我教给我的学生的是,上面的顺序很容易熟悉,以防它出现在行业考试中,并且很容易理解,因此您可以明智地考虑该标准优先级的好处,即使出现成为对某些方面存在分歧的正当理由。