简单来说,BLP模型的两条基本规则——“不上读”和“不下写”——本身并不冲突,而是相辅相成、共同协作的。它们从两个方向共同构筑了一道坚固的防线,其设计目的就是为了彻底防止数据从高安全级别向低安全级别泄露。
很多人觉得它们“冲突”,其实是感觉它们“把路堵死了”,导致信息流动非常困难。这种感觉是对的,但这正是BLP模型为了达成“绝对安全”目标而做出的设计特性,而非设计缺陷。
下面我们详细解释一下:
一、 两条规则是什么?
首先,我们明确一下两条规则:
-
简单安全规则(Simple Security Property) - “不上读” (No Read Up)
-
内容:一个主体(用户/程序)只能读安全级别低于或等于自身的客体(文件/数据)。
-
比喻:一个「秘密」级别的官员不能去查阅「绝密」级的文件。这很好理解,是为了防止低权限者获取高密级信息。
-
-
星属性规则(*-Property) - “不下写” (No Write Down)
-
内容:一个主体只能向安全级别高于或等于自身的客体写入信息。
-
比喻:一个「绝密」级别的官员不能在「秘密」级的公告板上留言。这一点更关键,是为了防止高权限者无意或有意地将高密级信息泄露到低密级区域。
-
二、 为什么它们看起来“冲突”并导致“僵局”?
假设有两个安全级别:高(High) 和 低(Low)。
有一个 High 级别的用户(用户H)和一个 Low 级别的用户(用户L)。
根据两条规则:
-
用户L(Low)想读用户H(High)的数据 → 被“不上读”规则禁止。
-
用户H(High)想把自己数据发给用户L(Low) → 被“不下写”规则禁止。
结果就是:信息在 High 和 Low 之间完全无法流动!
这种感觉就是所谓的“冲突”或“僵局”。它使得任何跨安全级别的正常通信都变得不可能。这在实际环境中非常不灵活。
三、 它们的真实关系是“协作”而非“冲突”
实际上,这两条规则非但不冲突,反而是一个完美的组合拳,从一个“读”和一个“写”的方向双向堵死了任何泄密的可能路径。
我们可以用一个单向阀系统来比喻:
想象一个水槽系统,有两个隔层,High 层在上,Low 层在下。
-
“不上读”规则就像是防止低处的水通过任何管道向上逆流到高处的阀门。
-
“不下写”规则就像是防止高处的水通过任何管道向下流动到低处的阀门。
这两个阀门共同作用,确保了水(信息)只能存在于它原本所在的隔层,绝对无法从High层泄露到Low层。它们的目标高度一致:确保信息流是单向的,只能是低安全级别向高安全级别流动(或平级流动),而绝对禁止任何形式的高向低流动。
| 可能的数据流向 | BLP 规则 | 是否允许 | 解释 |
|---|---|---|---|
| Low → High (读/写) | 不上读 / 不下写 | 允许 | 低级别用户可以向高级别区域提交数据(例如,提交报告),高级别用户可以读取低级别数据。这是安全的。 |
| High → Low (读/写) | 不上读 / 不下写 | 绝对禁止 | 核心禁区! 任何可能造成高密级信息泄露到低密级区域的行为都被禁止。 |
| 平级 (读/写) | 不上读 / 不下写 | 允许 | 同安全级别内的信息可以自由交流。 |
四、 如何解决这种“僵局”?—— 可信主体
BLP模型的设计初衷是极致安全(主要用于军事领域),但这种绝对的隔离在实际办公中无法使用。因此,模型引入了一个关键概念:可信主体 (Trusted Subject)。
-
是什么:可信主体是被豁免于“星属性规则”(不下写) 的特殊主体(通常是经过严格审计的程序或管理员)。
-
作用:可信主体可以作为“安全的数据中转站”。它有权从High级别读取数据,并经过严格的净化(降级)处理(例如,删除所有敏感内容),然后将其写入Low级别。
-
比喻:回到水槽的例子,可信主体就像一个受严格监管的水处理泵,它可以从High层取水,经过过滤和净化,确认无毒无害后,再注入Low层。
总结一下:
-
两条规则本身不冲突:它们是共同协作、双向密封的机制,旨在万无一失地防止信息从高密级流向低密级。
-
“冲突”感源于模型的绝对性:这种设计为了达到理论上的最高安全等级,牺牲了所有的灵活性和便利性。
-
解决方案是引入特权:通过“可信主体”这个被严格控制的特权通道,在确保安全的前提下,完成必需的信息降级流动。
所以,BLP模型的规则不是“矛盾”,而是用一种“因噎废食”的方式确保了绝对的安全,然后再通过“可信主体”这个例外来小心翼翼地“进食”。
开启新对话
1465

被折叠的 条评论
为什么被折叠?



