0

在客户端设备上,可以使用用户唯一的加密密钥设置同步的 Realm,并存储在设备钥匙串上,因此数据在客户端上以加密方式存储。(相关问题:Realm Mobile Platform中的“静态数据”可以加密吗?

Realm Object Server 和客户端可以通过 TLS 进行通信,因此数据在传输过程中被加密。

但是领域对象服务器似乎没有使用加密存储数据,因为管理员用户能够通过领域浏览器访问所有数据库内容(https://realm.io/docs/realm-object-server/#data-browser)。

是否可以设置 Realm 移动平台,以便对用户数据进行端到端加密,例如除了用户(甚至服务器管理员)之外没有人可以访问解密密钥?

4

2 回答 2

2

由于我们处理冲突解决的方式,我们目前无法提供端到端加密,正如您正确推断的那样。让我们稍微详细介绍一下冲突解决方案。

为了以我们的方式处理冲突,我们使用了一种称为操作转换的方法。这意味着客户端不是直接发送数据,而是告诉服务器更改的意图,而不是结果。例如,当两个用户编辑一个文本字段时,我们会告诉服务器insert(data='new text', offset=0),因为第一个用户在文本字段的开头添加了数据,而insert(data='some more stuff', offset=10)第二个用户在字段中间添加了数据。这两个独立的操作允许服务器唯一地解决发生的事情,并且对两次写入具有无冲突的解决方案。

这也意味着,如果我们加密所有内容,服务器将无法处理这种冲突解决方案。

话虽这么说,那是针对当前版本的。对于未来如何处理这个问题,我们确实有很多想法,同时提供(某种程度的)加密。主要是这意味着客户端需要做更多的工作,也许会找到一种新算法,让我们可以告诉客户端意图,让客户端弄清楚如何合并所有内容。不过,这是一个二次问题,因此我们不愿在客户端投入过多的工作,因为它确实会耗尽电池电量。

这对于某些用户来说可能是可以接受的,这就是我们正在研究它的原因。基本上,会有一个取舍。正如古老的格言所说:快速、安全、方便:选择两个。我们只需要弄清楚如何正确处理这个问题。

于 2017-01-11T13:18:48.517 回答
1

我刚刚打开了一个功能请求,可能使用 Tresorit 的 ZeroKit 来解决提出的端到端加密问题。听起来冲突解决实施仍然会引起问题,但也许有一个不同的冲突解决级别可以应用于那些不需要实时动态编辑单个数据字段(如患者健康数据,其中只有一个单个临床医生曾经在任何给定时间真正编辑过记录)。

https://github.com/realm/realm-mobile-platform/issues/96

于 2017-01-14T02:55:05.517 回答