现在有个问题: 公司训练好的模型以及服务,希望加密后给到用户。
Java Web 服务使用 JNI 调用 C++的.so 接口,C++代码载入模型文件和调用推理。
希望这些文件交付给用户的时候,加密好模型,也对此进行一些限制:
比如限制实例数,限制时长,( TPS 不重要,有这个有更好) 且不能将所有文件(模型,.so )拷贝到其他更多的机器上分发给别人用。
毕竟客户没有购买和买断这些模型。
1
Rheinmetal 2021-07-02 11:50:55 +08:00
。为啥不能远程调用?说明还是不够强势。
|
2
learningman 2021-07-02 12:04:02 +08:00
|
3
3dwelcome 2021-07-02 12:19:31 +08:00
你可以在模型里额外加个以服务器系统时间为基准的 relu 噪声层。
这个时间必须是 ntp 苹果服务器官方返回的,只要时间大于现在起的三个月,就在模型权重里添加额外噪音,到半年后自然就没办法继续用了。 |
4
Jat001 2021-07-02 12:30:53 +08:00
这些都可以在代码里控制啊,把模型文件加密,运行的时候在内存里解密,除非你的客户是做安全相关的,会反汇编,能找到绕过限制的方法,还知道如何从内存里拿需要的数据,那你要研究的就是 Intel SGX 这样的 Trusted execution environment 了
|
5
gxw86 2021-07-02 14:14:29 +08:00
我认为这是两个问题,模型加密和服务授权,模型加密是为了避免别人直接写代码调用模型,这一块我简单用了 AES 加密,然后加载时在内存中解密;授权是为了避免别人直接复制整套部署环境,这一块比较麻烦,坑也比较多,直接采购了外部方案,用的德国威步,校验机器码
|
6
wangxiaoaer 2021-07-02 14:16:02 +08:00
@gxw86 #5 机器码方案在 docker 环境下有用吗?
|
7
fl2d 2021-07-02 14:19:17 +08:00
加密的虚拟机?
|
8
gxw86 2021-07-02 14:22:02 +08:00
@wangxiaoaer 会有问题,但是我印象里这家有 docker 的方案,好像是授权做到宿主机上,docker 容器里面通过 tcp/ip 访问宿主机的授权,具体没有测试过
|
9
EPr2hh6LADQWqRVH 2021-07-02 14:25:06 +08:00
前两天谷歌不是刚开源了那个 FHE 同态加密的东西嘛,可以用这个试试
|
10
paopjian 2021-07-02 15:29:33 +08:00 via Android
百度有个加密模型方法,不过可能得转 paddle
|
11
lplk 2021-07-02 15:33:57 +08:00
@Rheinmetal #1 有的公司的数据不可能提供给给你的服务的,比如银行,我现在做的就是 to B,就算是采购测试,也要到银行内部部署好服务,在他们内部测试
|
12
youxiachai 2021-07-02 15:36:35 +08:00
买供应商解决吧.....
|
13
Rheinmetal 2021-07-02 16:28:42 +08:00
@lplk
银行爸爸那的确..... |
14
inframe 2021-07-02 20:32:17 +08:00
考虑物理方法:
1 直接搞个三防本子设置好密码丢客户现场,关键服务放三防本上,测试完了三防本收回来。 2 U 盘加密狗,模型放一些关键参数在加密狗上,一机一狗 |
15
xuanbg 2021-07-03 07:54:49 +08:00
模型才多大,肯定是远程调用啊。
|
16
bthulu 2021-07-03 09:36:12 +08:00
u 盘加密啊, 插上 u 盘才能用, 一个 u 盘就是一个授权
|
17
wangzhangup 2021-07-04 13:03:30 +08:00
模型就是一个大字典,你们可以自己加密。
|
18
bitdepth 2021-07-04 22:17:08 +08:00 via iPad
Synaptics 也有一個系列的 arm 晶片提供全 trustpath 的 AI 環境,模型是加密過的無法明文訪問
可以考慮部署到相關硬體上 |