这是一个潜在的假设性问题,因为尚未确定我们是否需要这样做,但我认为这个问题会更频繁地出现。
背景
在实现RESTful 服务时,标准方法是 URI 包含识别相关资源所需的信息。虽然我不是餐厅主义者,但与我们希望利用的方法相比,这种方法有很多优势。
问题
我们遵守有关保护某些类型信息的法规要求。如果我们遵循基本的 REST 公式,其中一些受保护的元素将最终出现在资源路径中。
由于 URL 是加密的,TLS 将涵盖大部分问题。但是,有一些地方可以将它们存放在透明的地方。值得注意的是,默认情况下,它们通常被写入访问日志(这很有用),如果人们为此使用浏览器,它们可以清楚地存储在浏览历史记录中。
方法
假设这是一个问题并且我们想要使用这种方法,似乎有一个解决方案的主要竞争者,即加密部分 URI 或全部。散列似乎不是一种选择,因为数据是高度可预测的,并且计算整个值集很容易。加密整个 URI 将限制该方法的许多优点。对称加密需要广泛分发密钥,因此无法达到目的。似乎最好的选择是使用公钥加密敏感数据。
据我了解,您的加密输出至少需要与模数一样长。因此,如果我们使用 2048 位密钥,则每个数据至少需要 256 字节。这将导致一些相当长的 URI,但我认为这在一段时间内应该没问题,而且这个限制可能并不真正适用于我们的解决方案。
这种方法似乎有效和/或我还缺少什么吗?使用与 TLS 相同的密钥对是否有效?加密部分可能需要一些其他信息以避免重放攻击或将加密值映射回给定密钥,对吗?
注意:我应该提到,对于我的具体问题,只有经过身份验证的方才能打电话。尽管可能会发生错误,但这并不是我们要在公共互联网上公开的内容。所有相关方都有法律义务保护数据。由于 RESTful 服务越来越受欢迎,我认为值得探索这种想法的更一般用法。