一种朴素的私密文件同步方案 A simple solution to do Privacy Diary Sync

Pre

现在可能还有人写日记。。。或者不算日记,但是是一些私密的东西,不想让人看的东西。

Issue

不想让人看很简单,你只写在本地就行了。
但是一般你不会只在一个设备上记录,有可能还会在别的设备上记录或查看,于是涉及到了同步。
隐私内容的同步是个问题,不过无非几种方式:

  • 云上中心化的存储方式:各大云盘,各大app,搭建服务器存储。
    缺点是传到网上内容就由不得你了,尽管所有笔记都声称自己加密了用户数据,也保证不会偷窥用户隐私,但是这种保障等于空气。至于搭建的服务器,机器是服务商提供的,仍然没有办法保证服务商不偷窥我们的内容。即使没有偷窥问题,如果服务器被攻击了隐私就会暴露。
  • 本地文件同步方案。由于没有上云,隐私安全性有所提高。

    p2p: 通过Syncthing一类的同步软件,进行同步。不过本地p2p需要一个常驻的在线设备。不过p2p的粗暴有可能会遇到多设备同时修改造成冲突的问题。
    git: 本地自建git server,可以很好地解决多设备修改冲突的问题。不过也同样需要git server常驻在线。
    如果不采用随时地可以同步的方法,就可以不需要常驻在线设备,只在需要同步的时候进行同步。不过这样需要不能随时随地备份最新的数据,总是感觉有点不放心。

Solution

其实对比两种方案,本质的区别也就是同步范围的区别。一个是通过更多人能接触的中心服务器,一个是限制范围只在本地小范围内同步。如果可以结合云上同步的便捷与本地同步的隐私就好了。

压缩加密文件

其实早就有了一种简单朴素的保护文件隐私的办法,那就是文件加密,相信其实有不少人都是这么做的。
我想这个方法虽然简单,但是其实经过上面的分析后却会发现这其实是一个很好的,简单又实用的方法。
于是文件的隐私通过对文件加密折中实现。
一种经典方法便是压缩文件并加上密码保护, zip/rar等。
于是,将文件加密并上传至云,并在各个设备间同步,似乎是一个不错的选择。

使用非对称加密

zip等压缩加密办法使用的是对称加密,通常面临暴力破解的问题,当然你也可以通过增加密码的复杂度来提升安全性。除了对称加密外还有非对称加密可以选择,ecc/rsa都可以。目前来看理论上只要你的密钥不外泄,加密文件是十分安全的。

Tools

推荐一个工具 GnuPG
其实加解密只是GPG的一个用途,其主要用途是用于用于身份认证,并提供了密钥管理。

An introduction to GnuPG

使用流程

将文件压缩,并对其进行加密,上传至云。同步至设备时再反向操作解密解压文件。
不过有个问题要注意,就是因为加密的缘故,git对它也不适用了,因为会被当作二进制文件。针对这个问题可以在文件夹内部建一个内部git用于控制,压缩加密时连同.git文件夹一起打包加密,这样就既可以使用git控制版本,又不影响加密了。
如此就可以完美和之前的笔记方法融合在一起。

一种朴素的几乎纯文本笔记和GTD方案 - A basic enough solution to organize GTD and dailyNotes

Diagram

flowchart LR;

subgraph A[Client A]
  F((Privacy File with Built-in Git)) --> |Zip| Z(zipped file);
  subgraph GPG[GnuPG]
    Z --> E[[Encrypted File]]
    P(Public key) --> |encrypt with Public Key| E
  end
end

subgraph B[Client B]
  subgraph GPGa[GnuPG]
    Ea[[Encrypted File]] --> Za
    S(Secret key) --> |decrypt with Secret Key| Za;
  end
  Za(zipped file) --> |Unzip| Fa((Privacy File with Built-in Git))
end

A <-.-> |Sync| G;
G[(Git repository)];
G <-.-> |Sync| B;