Realm Mobile Platform是否可以实现端到端加密?

时间:2016-12-29 17:19:48

标签: encryption realm realm-mobile-platform

在客户端设备上,可以使用对用户唯一且存储在设备密钥链中的加密密钥设置同步的Realm,因此数据在客户端上加密存储。 (相关问题:Can "data at rest" in the Realm Mobile Platform be encrypted?

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

但Realm对象服务器似乎不使用加密存储数据,因为管理员用户可以通过Realm Browser(https://realm.io/docs/realm-object-server/#data-browser)访问所有数据库内容。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

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

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

相关问题