你正在进入撤销的阴暗区域。基本上,您希望拥有一个“工作”但带有取消开关的系统,该开关表示:即使使用密码学和其他所有东西看起来都是合法的,也不要打开。
如果您的系统完全脱机,则没有解决方案。“清洁工”有权打开所有储物柜;如果一切都离线,他就不会失去这种权力,因为关于劫持清洁工状态(盗窃他的钥匙)的信息无法进入完全离线的系统,因为它来自“外部”。要解决您的问题,您必须至少需要一个间歇性网络。
通常的解决方案,例如在X.509 中,是拥有声明“现在一切都很好”的短期签名对象。在您的清洁工/储物柜类比中:
- 每个储物柜都有一个时钟,并且知道当前的日期和时间。
- 每天早上,清洁工都会去主要的清洁办公室,向一名官员出示他的脸和钥匙,该官员核实清洁工确实是合法的并被允许进入;然后,该官员给清洁工一个签名的“访问令牌”,上面写着“清洁工 X 被允许在 3 月 8 日 23:00 UTC 之前访问”。
- 当清洁工想要打开储物柜时,他必须插入他的钥匙和访问令牌。储物柜验证官员的签名,以及访问令牌尚未过期。
在 X.509 中,“访问令牌”是 CRL 或 OCSP 响应。关于如何将对象带到验证器(这里是储物柜)的细节有所不同。在上面的类比中,“间歇性网络”是中心局;这是系统暂时“在线”的点。或者,签名的访问令牌可以由其他人主动分发到储物柜。
一个基石是验证器必须有一个可靠的时间源,用于一个合适的时间概念(在精度和准确性方面你不一定需要太多)。