用 CloudKit 实现一个私密的小圈子社交软件

298 天前
 andyzhshg

最近在研究 Apple 的 CloudKit ,基本上通读了相关的文档:CloudKitCloudKit Web Service

CloudKit 基本上可以认为是一个支持存储用户私人数据的 NoSQL 数据库,其本身的设计保证了即使是 App 的开发者也无法访问用户的私人数据,可以有效的保护用户的隐私。这使得其非常适用于私人数据的同步,比如记账类,日记类的 App 。

但我的关注点在它的另外一项功能,也就是分享Shared Records,使得可以在用户可控的情况下分享指定的资源(虽然这个分享实操起来比较复杂)。

我的计划是通过分享功能创建一个私密的小圈子社交( Apple 的文档说一个记录只能分享最多 100 人),用户之间可以通过创建分享记录,来查看彼此的信息。

这整个过程,都可以仅基于 Apple 的 CloudKit API 完成!虽然实现起来很复杂,但是开发者可以无需提供自己的网络服务,好处有几个:

  1. 解除用户对开发者的隐私疑虑,开发者看不到用户的数据 [可以通过开源,或者测试 App 是否链接 Apple 之外的外源服务来审计]
  2. 解除用户对服务持续性的疑虑,因为不使用 CloudKit 之外的任何外源服务,所以原则上只要 Apple 不倒闭,或者不关闭 CloudKit ,用户就可以继续使用。

问题:

  1. Apple 生态的封闭性,很少看到在 Apple 生态之外使用 CloudKit 的案例,但是读过CloudKit Web Service文档之后,我认为 CloudKit Web Service 提供的能力是与原生 Apple 平台等价的,可以借助 CloudKit Web Service 实现 Web Apple 甚至是其他平台的原生 App 。要求是用户至少有一个 Apple ID 。
  2. 国内的特殊生态,众所周知,Apple iCloud 在中国是独立的由云上贵州运营的,不可避免的就会有各种问题,我目前测试的是通过 CloudKit Web Service 的授权登录国内账号返回的 token 不可用,但是通过设备 Native 获取的 token (CKFetchWebAuthTokenOperation)又可用;也有人说分享功能在国内不可用(/t/1035315);更别说国区账号和外区账号是否可以 share 更是需要测试。

抛开问题不谈,我觉得理想状态下,这非常适合实现一个类似私密朋友圈的社交软件,三五好友,或者家人之间建立一个小的圈子,分享些照片视频之类的,无需担心被平台窥视(当然,你是你相信 Apple 不会作恶窥视你的信息的前提下)。

大家对这个有什么建议,或者有类似想法或者使用过 CloudKit 踩过什么坑的都可以来分享一下。

3041 次点击
所在节点    奇思妙想
30 条回复
gogo88
297 天前
“关于”这个页面内容排列有点怪异。“客户支持”“五星好评,分享 App”这些非功能类的东西是不是应该放在“实验室”下面?
wyd011011daniel
297 天前
@icestraw

1 用户审计代码是指所有用户中有一部分愿意审计代码

2 还有“app 不会向除了苹果以外的服务器发送消息”这件可以另一个角度证明的方式

app 不可能知道什么时候在不在被监控对不对,那如果任何时候任意一个用户发现 app 在对除了苹果以外的服务器发送消息,那不就会暴露并且开发者身败名裂。

上述两个部分是同时互相交叉验证的。逻辑链我来给你缕缕

1 开发者宣传只使用 cloudkit 并且开源
2 部分用户审计代码发现代码逻辑里确实没有对除了苹果以外的服务器发送消息
3 部分用户使用流量监测发现确实没有对除了苹果以外的服务器发送消息
4 如果用户审计代码发现代码逻辑对除了苹果以外的服务器发送消息 则开发者需要解释或者身败名裂
5 如果用户使用流量监测发现对除了苹果以外的服务器发送消息 则开发者需要解释或者身败名裂

对比使用开发者自己的服务器的 app
1 用户无法确认自己的数据去的服务器是否安全 会不会泄露 (apple cloud 和 开发者自己服务器安全性的对比)
2 用户无法确认自己的数据会不会被开发者滥用( cloudkit 上传的数据开发者看不了 服务器上的数据开发者看得了)

那么在 开发者宣传只使用 cloudkit 并且开源 是不是比使用开发者自己的服务器 的 app 有更好的安全性和可审核性?
wyd011011daniel
297 天前
@icestraw 我说了 审计方式是使用 app 的用户数量大了必然有愿意审计 app 的看得懂代码的用户 不依靠第三方用户审计。

即对这种软件的信任来自于用户量大了之后必然存在的 geek 用户,geek 用户可以通过自己审计代码自己检测流量的方式。

开发者宣传只使用 cloudkit 并且开源
geek 用户可以通过自己审计代码自己检测流量
没有问题爆出来即软件相对使用开发者自己的用户更安全

你对我的反驳完全来自己于期望用户能够完全掌握 app 的审计等工作以实现对软件安全性的完全掌握。

但这是事实上不可能,只要用户期望使用第三方联网的服务,独立个体用户也不可能审计所有代码并且对开发者的服务器也没有任何审计能力。

但是 cloukit 的信任链很容易建立不是么,只要软件宣传只是用 cloudkit ,任意用户发现异常并报告则软件生涯结束。
那么对大部分用户只要软件有大量用户并且没有异常报告就可以认为是可信任的。

类似的如果一个软件宣传只使用 webdav 上传数据到用户自己的服务器。这也是类似的逻辑链啊。
icestraw
297 天前
@wyd011011daniel 我为什么感觉我和你观点一样但是结论不一样

"只要用户期望使用第三方联网的服务,独立个体用户也不可能审计所有代码并且对开发者的服务器也没有任何审计能力。"
对啊,正因如此,开发者无论用什么技术都无所谓啊,反正用户信任的也是这个 App 。

问题就在于“他宣传 xxx”和“他实际 xxx”不一定是匹配的。开发者无论宣传的多好,都有可能做出额外的行为来泄露隐私,这本来就是无解的,用户只能选择“相信这个 App”或者“不用这个 App”。
至于他用不用 CloudKit...真没那么重要,开发者想传隐私信息,怎么都是能传的。方式有太多种了。
万一他接入了三方统计 SDK ,把数据发给他们了呢?
万一他用 AppLink 或者剪贴板传递隐私信息,实际发起请求的是别的程序呢?
哪怕就把它加密传在崩溃日志里,发给 Apple ,也是可以的啊。
这些需求都是合情合理的啊,防不住的。
更别提不合理的方式了:我检测到抓包我就不传隐私数据,没有抓包我再传。除非你在网络层抓包,那网络层同一个手机那么多 App 请求,谁知道是哪个 App 发出来的?开发者完全可以检测到手机上装了 qq 我再传,然后我还把隐私信息发给腾讯的统计 sdk ,诸如此类。域名看不出来,内容也是加密的,证书可能还做了 ssl pinning 。根本没法防的。
wyd011011daniel
297 天前
@icestraw

我认为你和我的逻辑是反过来的

你认为技术无论如何都做不到尽善尽美,所以用哪个技术手段完全不重要。
我认为更透明更开源的实现方式能给用户更多安全感和安全性。

这种观点的辩论无意义了。
andyzhshg
296 天前
看了大家的讨论都集中在隐私上,可见大家对隐私的确实是很关切。
其实我能有这个想法,第一点是我知道隐私对用户的重要性;第二点也是更现实的一点,就是对于小的独立开发者来说,运行和维护一个用户量越来越多的网络服务,是非常有挑战的,无论是资金还是精力的方面。
还有个问题前面没有提到,就是这个“社交网络”的数据,实际上是存储在用户的个人空间的,也就是说会占据用户的 iCloud 的存储,如果用户没有额外订阅 iCloud 空间,也会是一个问题。
icestraw
296 天前
@wyd011011daniel 我认为至少要是“理论成立”的技术信任链,才是证明。否则就是宣传,说得再好听,也是宣传。尤其是开源。其实完全不开放服务端,只开源客户端,同样是一种开源(这不就是 tg 和以前的 iMessage ),而且是“理论成立”的。客户端可以完成加密工作,密钥交换可以私底下进行。只需要客户端做好端到端加密,服务器做什么都无所谓。用户拿开源的代码一样可以接入到服务器,这才是“理论成立”的信任链。CloudKit 的问题就在于,只有开发者用自己证书签名过的代码,才能运行,而这个步骤开发者做了什么是完全不可知的。当然,这不是说 CloudKit 真有问题。CloudKit 应该是一种帮助开发者“尽到保护隐私责任”的工具,而不是“免除隐私泄露责任”的挡箭牌。保护隐私的责任仍必须在开发者。

当然,像楼主说的,他是“为了减少服务器维护成本”,这当然没问题,而且是好事情。但是一定要和隐私联系上,不太现实。而且这个数据同步的实时性,可能还有点挑战。
wyd011011daniel
296 天前
@icestraw 不是哥们,没人说“保护隐私的责任不在开发者。” 太无聊了,感觉自己浪费了好多时间
icestraw
296 天前
@wyd011011daniel 是 你时间宝贵 有法律效应的隐私协议都没有这种开源有安全感,那我还能说啥。反正对我来说,这种开源我安心不了一点,开源的项目和商店里完全可以是两个不相干的项目。你安心你随意吧...
agagega
243 天前
讨论开源是否可信任有点歪楼了,但我简单 Demo 试过 CloudKit Web Services ,能用是能用,但这玩意连文档都不完整,我甚至怀疑是不是已经不维护了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1095180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX