Whisper 私语:一款安全的、隐密的、离线的数据分享工具

陪她去流浪 桃子 2024年03月02日 编辑 阅读次数:984

最近经常有听到“程序员退休后的4️⃣个方向: 外卖、快递、滴滴、独立开发者”,一想到我也“退休”许久,以上职业我还是假装选择一个吧? 所以,有了今天这篇文章。当然,我并没有真正成为独立开发者(至少没盈利)。

简介

Whisper 是我从零开始摸爬打滚学习 iOS 开发、Swift 开发后写的第一个、也是至今唯一一个 iOS 应用/工具。 如其名字所言,Whisper/私语,这是一款非常注重安全和隐私的数据(文本、图片、视频等)分享工具。 虽然是今天才正式写文章对外公开,但是实际上,它开发于两年前,不足一个月就上线了稳定版本,后暂停开发至今。

今天也只是想简要地对外公开一下,谁有幸看到了并且可能有相关需求的就可以试用一下。 这注定会是一款非常小众需求的工具。并且从上线至今,我没有做过任何形式的公开推广。也许———是我在害怕什么?

AppStore:Whisper - 私语 (Apple Silicon、iPhone、iPad 可用)
GitHub: movsb/whisper: An iOS app that securely delivers... with your partners.

消歧义:OpenAI 有一款语音识别工具也叫 OpenAI/Whisper,但是它的发布时间是比我的工具晚几个月的。
吐槽: Apple 已经公开中国内地开发者的中文名字,我有感觉被严重地自我开盒。

想法来自哪里?

我需要安全地与朋友共享数据。 但是,我只相信自己,我不信任其它任何第三方。

这样的第三方包括但不限于: 即时通讯工具(微信、QQ等)、电子邮件、别人的服务器。

  • 不信任微信:即数据不能被微信以任何方式明文读取、审查。所以是专有的数据格式。
  • 不信任服务器:不需要中转/中心服务器——-不需要让别人担心我(开发者)留有后门,也不担心服务器哪天被查。所以不需要网络。

插曲

一位已故技术人员陈皓当初也有此想法,虽然我找不到原推文了,但是以下是我与他的一部分对话:

嗨,耗子叔,抱歉通过私信打扰您。你肯定不认识我,但是我听过好几次你的讲座😬。

之前有听你在推特上说起想要一款手机软件,就是能通过非对称加密的方式在微信之间安全地共享消息,通过剪贴板+纯文本的方式。其实我老早就有此想法,可惜的是一直不会手机端开发。最近呢,正好下定决心学习 iOS 开发,然后开发了一款这样的应用,从6月26号开始学习ObjC 和 Swift,7月10号开始上架。由于是第一次提交应用,上架过程很不顺畅。一直到今天(7月24号),才正式上架 App Store。所以想向你推荐一下,百忙之中体验一下并提提建议。🥰
这个应用不是直接操作剪贴板的,而是通过文件分享的方式,之所以这样是考虑到图片和视频分享的场景比较多。所以同时组合了文本、图片和视频三者的分享(后面还会添加文件)。

至于加密,目前对称加密使用的是 AES-256-GCM 模式,非对称加密使用的是 Curve25519 椭圆曲线(256 位公、私钥,我 SSH 也是使用的这个,因为相比 RSA 来说,要简短许多)。

App Store 链接:https://apps.apple.com/app/apple-store/id1633875546

感谢。

Jul 24, 2022, 8:34 PM

开发历程

始于 2022 年 06 月 26 日(某人的生日,可惜与我无缘)。 几乎完全从零开始注册成为 Apple Developer Program 开发者、学习 Xcode、学习 Swift、学习 SwiftUI、学习如何上架。

多年前看过一本 Objective-C 语法的书,可惜被劝退,语法难以让人接受,遂直接上手 Swift。 从这篇文档里面可以看到我的学习更新过程。基本上全部是现学现用。

工具大小仅 1.1 MB,是不是你见过的最小的 App?

使用方式

只需简单几步:

  1. 在你和你朋友的设备上分别创建账户(随机生成,一次性)
  2. 以安全的方式相互分享各自的公钥给对方(添加为朋友,一次性)
  3. 创建消息并分享给指定的朋友(安全分享,多次)
  4. 朋友接收后使用 Whisper 打开接收到的文件

部分技术细节

加密规范及加密算法参考:age-encryption.org/v1

Age 只针对桌面平台,并且只针对单文件,面向技术人员。 所以我参考并实现了我自己的版本:移动版 + 多文件支持。使其更易于普通用户使用。 两者的加密方案接近、文件格式不兼容,但是大同小异。也许只需要少量修改就可以兼容 Age?

一些关键词:AES、GCM、RSA、Curve25519、Ed25519、Chacha20、Poly1305、AEAD。

一些关键步骤:

  1. 生成密码学安全的随机对称密钥
    • 每次都是随机生成的
  2. 用对称密钥以流数据形式加密数据
    • 使用与 WireGuard 同安全级别的加密算法(State-of-the-Art)
  3. 用对方的公钥加密对称密钥
    • 仅指定的对方可以解密数据,未指定的对方不可解密
  4. 将加密后的数据发送给对方
    • 不会经过任何已知的服务器
    • 你可以选用任何方式发送给对方:微信、AirDrop、邮件
  5. 对方接收后用自己的私钥解密数据
    • 仅接收方可解密,任何中间人、包括发送者均不可解密
  6. 解密后提取其中的明文数据
    • 仅可在 App 内查看,不用担心泄漏

具体的细节我不多说,源代码完全开源。

最后

本 App 的初衷是以更加安全的方式保护自己的隐私数据。请正规、合法地使用本 App。