Swift/ideas/网络安全
此想法的初始内容来自一个 现有的蓝图。
Swift 假定其内部网络(代理和存储节点之间的连接)是安全的。因此,Swift 不会对传输中的数据进行任何加密或请求授权。
在圣地亚哥峰会上,我们围绕如何提高 Swift 内部网络安全性进行了一次由 Sam Merritt 主导的良好讨论。会后,Robert Clark、Sam 和我聚在一起,更详细地讨论了一些挑战和可能的解决方案。
通常,要解决的问题是在内部网络中存在攻击者时保护集群。我们如何阻止该攻击者向 Swift 服务器发送消息?
最明显的解决方案是使用 SSL。这为我们提供了我们想要的结果,并允许对所有消息进行加密。但是,SSL 在对象服务器上非常昂贵。我们需要找到不同的解决方案。
一个可行的解决方案是用共享密钥对来自 Swift 服务器的每个请求进行签名。如果签名与请求不匹配,则拒绝该请求。
应该同时支持两个密钥。这允许密钥轮换和分阶段推出。请求签名应以与现有 Swift 代码(tempurl 和 formpost)相同的方式生成:使用 sha1 的 hmac。
请求签名很好,但如果我们也能防止无限重放攻击,那就更好了。为此,服务器应该有一个配置选项用于请求签名 TTL。请求可以包含 TTL,但服务器将使用请求 TTL 和配置 TTL 中较短的一个。
签名是时间戳和事务 ID 的 hmac。它在时间戳、事务 ID 以及 TTL 是否已过期上进行验证。