为了登录大多数网站,您需要一个通常存储在 SQL 数据库中的用户名和密码。您正在存储可以更改的每个用户信息,这就是状态。您能否证明某人有权访问您的系统,例如管理员或用户,而无需存储每个用户的状态?
是否可以在没有状态的情况下进行身份验证
信息安全
密码学
验证
2021-08-26 08:37:06
3个回答
在某种程度上,您可以卸载客户端上的状态。您将用户的访问权限编码到一个 blob 中,向其中添加使用服务器密钥计算的MAC 。然后将 blob-with-MAC 发送到客户端。稍后,客户端返回并显示 blob;服务器验证 MAC,从而确保 blob 是合法的。这在 HTTP cookie 上映射得相当好。如果服务器想要存储一些与用户相关的数据而不使其对用户可见,则该 blob 可能包含一些加密数据(再次使用仅限服务器的对称密钥)。
当您想要撤销或更改权限时,麻烦就开始了。您无法阻止客户端显示陈旧的 blob。这可以通过使用到期日期(blob 包含一个日期并且有效期为例如一周)和撤销列表(如果需要,服务器知道它必须拒绝的 blob 列表,甚至如果他们的 MAC 看起来不错——这是状态,但并不多,因为大多数访问权限都没有被撤销)。
如果颁发访问权限的实体(创建 blob 的实体)和验证访问权限的实体(验证 MAC 的实体)不相同,则需要将 MAC 替换为数字签名方案。
通过使用Kerberos,必须跟踪身份验证状态的复杂性被隔离。访问客户端提供的服务的最后一步,Ticket其中包含向客户端授予身份验证所需的所有状态。非对称加密允许这种复杂的握手,而不需要三个服务器之间的通信。最后的打印服务器不需要用户凭据的存储状态或数据库。

您可以深入到系统上的硬连线管理员和用户权限,只允许管理员本地访问,其他任何人都可以访问。
不过会有点混乱。
图像板(wakaba、futaba 等)有一种令牌,它被加密并显示在用户昵称旁边,因此人们可以证明他们是谁。
但是,这些网站上的用户除了发帖之外没有太多权利——而且,它也没有那么混乱。
其它你可能感兴趣的问题