返回博客
产品手记

为什么我们不给谱文件加密

灵弦的谱文件是可以被解开的:压缩包换个后缀就能看到里面的结构化数据。有人问要不要加密。我们的结论是不加——前端加密挡不住真想看的人,只会挡住十年后想打开自己谱子的你。本文讲这个决定的理由,以及我们把加密用在了什么地方。

灵弦琴学札记

琴学、技法与数字化打谱的持续记录。

产品手记3 分钟阅读

有琴友问过我们一个问题:灵弦导出的谱文件能不能被逆向解开?

能。而且很容易——它本质上就是一个压缩过的结构化数据文件,跳过开头的文件头、解压,里面的内容一目了然:有多少段、每段多少个音、每个音的弦、徽、分、指法。

这个问题背后通常跟着第二个问题:那要不要加密?

我们的答案是不加。这篇说为什么。

前端加密挡不住任何真想看的人

先说技术现实。

谱文件要在浏览器里被打开、渲染成谱面,意味着解密的钥匙必须在浏览器里。钥匙和锁在同一个盒子里,这不是加密,是障眼法。稍微有耐心的人打开开发者工具就能拿到明文。

这不是灵弦的问题,是所有「在客户端解密自己内容」的软件共有的处境。凡是用户能看到的,用户就能取到——中间那层混淆只是提高了一点门槛,代价是所有正常用户都得多绕一圈。

能被打开是前提,不是漏洞。谱子必须能显示,所以它必须能被解开。

更重要的理由:这对你不利

假设我们真的加密了,而且做得很结实。会发生什么?

十年后你打不开自己的谱子。软件停了、公司不在了、格式换代了——一个加密的私有格式在这些情况下就是一块砖。开放格式至少还能被人读出来、转出去。

这不是假设。很多人的硬盘里都有一批打不开的旧文件,用的是某个当年很流行、现在没人维护的软件。谱子不该落到这个下场。一份打谱成果可能花了一个琴家几个月到几年,它的寿命应该比任何一家软件公司都长。

互操作会断掉。加密的格式没法被别的工具读,你就没法把谱子带到别处继续用。而互操作本身是功能,不是妥协:所以灵弦除了自己的谱文件,还能导出文档、图片,以及给专业制谱软件用的结构化谱文件,指法以文字附注保留。

它也保护不了你想保护的东西。真要复制一份谱,最省事的办法从来不是逆向文件格式——是把打印出来的谱拍下来,或者照着弹一遍记下来。加密对这两条路毫无作用。

所以我们把加密用在了另一件事上

不给谱文件加密,不等于不用加密。我们用在了一个目标明确的地方:诊断。

之前谱文件里夹带着一部分编辑过程的记录,用来排查问题。这有两个不合适:一是普通用户导出一份谱,不该顺带把自己的操作过程带出去;二是这些内容对读谱的人毫无用处,只让文件变大。

现在拆开了:

  • 谱文件只装谱。段落、音符、标记、页面设置、谱本来源与打谱人这些。它是干净的、开放的、可以随便给人的。
  • 支持文件单独导出,且是加密的。遇到问题时你可以导出一份支持文件发给我们,里面带着定位问题需要的现场信息。

这里的加密是有意义的,因为收件人是唯一的:文件用我们的公钥加密,只有我们手上的私钥能打开。它不在你的浏览器里解密,所以不存在「钥匙和锁在同一个盒子里」的问题。文件如果在传输中被改动,解密会直接失败,不会吐出半截内容。

导出之前会有一个弹窗,逐条列明这份文件包含什么、不包含什么。这一点我们认为是必须的——让人在不知道内容的情况下发出一个加密文件,不是一件正当的事。

一句话总结这两个决定

谱子要能被打开,所以不加密;诊断信息只给一个人看,所以加密。

判断标准是同一条:这份内容的读者是谁。读者是所有人(包括十年后的你自己),就用开放格式;读者只有一个,才用加密。

加密不是安全等级的高低,是你在回答「谁该读到它」这个问题。