我第一份工作是在一家做金融软件的小公司,总共 30 来号人,开发占了 15 个。2019 年夏天,我们一个核心产品的源代码被一个离职的哥们儿拷走了,用的是最原始的办法——U 盘。那会儿公司刚融了 A 轮,投资人尽调的时候发现代码在 GitHub 上有个公开仓库,虽然只泄露了 30% 的模块,但估值直接砍了 2000 万。老板气得把 IT 主管开了,然后花 80 万上了一套源代码加密软件。结果呢?三个月后,又泄了。这次不是 U 盘,是那哥们儿用手机拍屏幕。加密软件防住了文件外发,但没防住摄像头。所以我现在特别烦那些一上来就吹“军工级加密”的销售,真出了事,他们跑得比谁都快。
后来我自己创业,做一个小工具,也面临源代码保护的问题。我前后试了 5 款工具:深信达的 SDC、亿赛通的 DLP、天锐绿盾、GitLab 自带的审计、还有开源的 OpenDLP。说几个具体数字。SDC 沙箱模式,在我们那台 i7-8700 + 16G 内存的机器上,编译一个 20 万行的 Java 项目,时间从 2 分 30 秒涨到了 4 分 10 秒,慢了 66%。亿赛通 DLP 的误报率,我统计了 30 天,平均每天 12 次,其中 9 次是正常提交代码到私有 Git。天锐绿盾倒是轻量,但它只支持 Windows,我们前端用 Mac 的同事直接没法干活。GitLab 审计最便宜,但只能记录谁下载了代码,不能防。OpenDLP 配置太复杂,我照着文档折腾了两天,最后卡在一个 Python 依赖上,放弃了。
所以我的结论可能跟很多厂商说的不一样:源代码防泄密,核心根本不是加密,而是权限的最小化和行为审计。举个例子,你把代码加密成一坨乱码,但开发人员上班时间总要打开 IDE 看代码吧?他只要能看到,就能拍照、就能抄。真正有用的是两件事:第一,把代码仓库按模块拆分,每个人只能 clone 自己负责的那部分,比如一个 100 万行的项目,拆成 50 个仓库,每个仓库 2 万行。第二,所有 clone、pull、push 操作都记录到日志,并且定期分析异常。我们团队现在用 GitLab + Jenkins + 自研的一个小脚本,每个开发每天只能拉取 3 次代码,超过就触发告警。听起来很变态,但确实管用——过去一年,零泄露。
如果你非要上加密软件,我建议关注这几个参数:第一,加密后对编译速度的影响,超过 30% 就别考虑了,开发会疯。第二,支持的操作系统,至少 Windows + Mac + Linux 三端。第三,误报率,你可以让厂商提供 30 天试用的日志,自己数。第四,能不能跟 Git 集成,比如 commit 的时候自动加密,而不是手动加密。第五,价格,按终端算,超过 500 块/年的基本是智商税。最后说个扎心的,我见过最有效的防泄密手段,其实是把核心代码放在内网,物理隔离,然后给每个开发配一台没有 USB 口、没有摄像头、不能装微信的电脑。但这样的结果是,招不到人。