这个系列总结一下自己的笔记系统。 先说下目前采用的笔记方案。

  1. 日记和一些个人文档,使用Joplin+webdav的同步。
  2. 个人笔记,使用OneNote。
  3. 网络信息收集,有道云笔记。
  4. 笔记的临时分享。SimpleNote。

演化

小学时候因为61节发了一个小的日记本开始写日记,但是没坚持多久就放弃了,中学时候班主任要求写日记,后来老师不再要求了,但是已经形成习惯就一直到大学毕业开始工作很长时间。

那时候都是用纸质笔记本,现在偶尔翻起来随着时间的流逝而有着不同的感受。后来开始陆续用Lotus Note,eDairy在电脑上开始用电子格式来记录。但是由于电脑故障没有备份的那部分就永久的丢失了。

然后是智能手机时代,尝试了wiz大概一年多,再后来换到手机版的素记。对于Wiz虽然有同步功能,也支持跨平台,最终让我放弃的还是对隐私的顾虑,虽然wiz宣称支持证书对单个文件进行加密,但是毕竟处理过程不可见,存储的格式和内容也不可见,对于不可见的东西还是对宣称的东西多一点敬畏。

素记是纯手机app,并且通过icloud实现备份,对于可以要求交出用户数据的FBI说no的apple,我主观上还是会多一点信任。放弃素记主要是因为内容导出不方便,并且在导出时候只支持email和pdf,前者会自动保存在邮箱系统的draft里而同步,后者有一个长内容截断的bug。基于以上的考虑,会在选择方案时候主要考虑如下因素。

需求

  1. 私密性: 只有在授权的情况下才可以查看内容。
  2. 可用性: 不会因为设备的丢失或故障导致内容丢失。

Joplin

Joplin是一个开源的笔记软件,可以看到实现的细节,这保证了在对于信息的处理上对于隐私的保护要好太多。在默认的情况下,所有的信息是保存在本地磁盘,所以对于私密性的要求上,只要设置了bios开机密码和开启bitlocker,应该可以在易用性和私密性之间达到一个很好的平衡了。

因为内容是放在个人电脑上,但是并不是所有时间都方便使用,所以如果可以在多终端访问就好了。Joplin支持多端系统包括ios。考虑到可用性,能够在手机和电脑之间进行同步这个特性就非常期待了。而云端同步也是不少笔记软件的一个基本功能,但是基于上述的描述也自然的会不考虑商业和闭源的产品了。

同步

Joplin支持第三方的云同步产品,比如DropBox,OneDrive等。一开始我采用的是OneDrive作为云同步服务,但是可能是服务器在境外的原因吧,同步的过程非常慢,并且很容易失败,目前没有自动重试的机制,会出现版本冲突的情况。

所以考虑使用国内的服务,但是支持webdav的不多,坚果云算是其中一个吧,Free版本每个月有1G的上传和3G的下载流量限制,但是也是足够了。

坚果云设置

  1. 首先需要申请一个坚果云的账号。
  2. 登录后在右上角点账号下拉菜单,选择账户信息
  3. 选择安全选项
  4. 添加应用
  5. 将生成的密码保存

Joplin设置

设置中选择"Synchronization"。目标选择”WebDav“,然后分别填入如下信息。

  1. WebDAV URL: https://dav.jianguoyun.com/dav/Joplin
  2. Username: 坚果云的用户名
  3. Password: 上述步骤中的密码而不是登录密码

更新: 坚果云速度不错,但是免费账户有api call限制,文档多或者重新同步会出现api call limitation的问题。所以后来换到box的webdav。 地址为https://dav.box.com/dav/<note folder>

加密

但是和其他笔记内置的同步不同的是,Joplin在第三方存储的内容对你是可见的。当文档同步后,可以在坚果云的存储中看到同步的文件和内容。因为云存储只管保存,所以为了能够实现内容的加密,Joplin的端到端(E2E)加密特性就派上用场了。端到端加密简单来说从发送到接受和传输这三个点上,信息都是加密的。有些笔记软件只有在传输中使用加密比如https,但是服务端的存储是明文的,就不能称为端到端的加密。

设置

如果同时使用PC和手机那么需要在每个系统上配置加密。

  1. 在"选项"中选择Encryption项。
  2. 添加密钥,密钥要尽可能随机和长。如果有密码管理器可以自动生成。

然后Joplin会在上传之前进行加密。同步完后可以在坚果云中看到上传文件和内容,只不过内容都是经过加密后的密文,比如内容中encryption_cipher_text后的内容。

除了使用坚果云的web页面查看内容外也可通过webdav的命令行客户端cadaver查看。#<yum|apt> insatll cadaver

 1root@WingedExtrasmall-VM:~# !247
 2cadaver   https://dav.jianguoyun.com/dav/
 3WARNING: Untrusted server certificate presented for `*.jianguoyun.com':
 4Issued to: *.jianguoyun.com
 5Issued by: Sectigo Limited, Salford, Greater Manchester, GB
 6Certificate is valid from Wed, 19 Feb 2020 00:00:00 GMT to Fri, 18 Feb 2022 23:59:59 GMT
 7Do you wish to accept the certificate? (y/n) y
 8Authentication required for nutstore on server `dav.jianguoyun.com':
 9Username: <name>
10Password:
11dav:/dav/> cd Joplin
12dav:/dav/Joplin/> ls
13Listing collection `/dav/Joplin/': succeeded.
14Coll:   .lock                                  0  Jan  8 15:39
15Coll:   .resource                              0  Jan  8 15:39
16Coll:   .sync                                  0  Jan  8 15:39
17Coll:   locks                                  0  Jan  8 15:39
18Coll:   temp                                   0  Jan  8 15:39
19        0127a81ed6f8436d9d4ed1d06cb35875.md       2565  Jan 11 13:58
20        04679d74dd6745189a65e02258c4d81e.md      10513  Feb  5 00:06
21...
22        0c85ea74db704bec9af93beea9e45c6e.md       8777  Feb 18 15:39
23        10280d2aa22942c68d45d284c499a6e1.md       2805  Jan 30 09:11
24        11752bc4ff294901864084b003da17af.md       5229  Apr  1 20:09
25
26dav:/dav/Joplin/> cat 04713a61b6304b64a771cd8110a68dc6.md
27Displaying `/dav/Joplin/04713a61b6304b64a771cd8110a68dc6.md':
28id: 04713a61b6304b64a771cd8110a68dc6
29parent_id: bc83d3359854430ba5ebd9210c0afec9
30item_type:
31item_id:
32item_updated_time:
33title_diff:
34body_diff:
35metadata_diff:
36encryption_cipher_text: JED0100002205189e051f8419465d8163193121aebaa8002b78{"iv":"qbKqFQ0PpzcvdCtfpJ0/og==","v":1,"iter":101,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"JYz4+COWpU4=","ct":"TklWn+/rRwVSacuNfaYbCkYgw/hG4GTc87StmZkVaNkxQuSkXFzffiqa7h0qSAxwBBYvHd4IJNcy7yCLaTgx3vfJRNWa0XWknbbfA6G5tKaeC+LMBo0F40HvrJvDONJ44jR...CZ69IVs3E2vgLhk7kLSEjZGcVDU="}
37encryption_applied: 1
38updated_time: 2021-04-24T14:43:10.957Z
39created_time:
40type_: 13dav:/dav/Joplin/>

这样,一个免费的,具有良好的私密性的,同时又兼顾了备份的笔记系统设置完成。每天睡前反思一天中发生的事情,利用手机总结一天所失所得,或者在电脑上回顾,不用再有私隐和数据丢失方面的顾虑。感谢Joplin的开发者。

不足

目前的方案中仍有两个地方有待改进,这两个都是关于本地安全的。

  1. PC端本地数据明文存储

Joplin PC端的内容是存储在SQLite文件数据库,任何一个有系统访问权限的用户都可以查看数据库内容。这无疑在安全性会有些降低。而wiz还有onenote这样的是可以支持给单独文件进行设置密码或者加密。

1sqlite> select title,body from notes where title="测试标题";
2title|body
3测试标题|测试正文
4测试正文
5测试正文
6sqlite>

对于这样的问题,开发团队给出的解释是本地安全是操作系统的事情而不是Joplin的,所以如果对本地安全有需求的可以通过TrueCrypt这样的磁盘加密技术来保证本地的安全。这样说也没毛病,但是我还是觉得每次打卡joplin之前先mount一个加密盘有点繁琐,如果能在打开数据库时候输入加密密钥那就完美了。基于这一点,不要在不是自己完全拥有控制权的电脑上使用。

关于这个的讨论 https://discourse.joplinapp.org/t/please-add-built-in-pin-or-passsword-lock-when-you-launch-the-joplin-app/3236

  1. PC和手机应用解锁

这个和第一个问题类似,最后更新是在2020年11月,但是topic已经被close,可以预见在短期内应该不会解决吧。对于开源项目,使用、参与讨论也算是一种支持。