Main Content

保护源代码的安全考虑事项

虽然 MATLAB® 源代码 (.m) 本身是可执行的,但 MATLAB 源文件的内容很容易被访问,会揭示设计和实现的详细信息。如果您不想以这种格式分发您的专有应用程序代码,可以改用以下一个或多个选项:

创建 P 代码文件

将部分或全部源代码文件转换为内容经过模糊处理的格式,称为 P 代码文件(文件扩展名为 .p),并以此格式分发应用程序代码。

有关生成 P 代码文件的详细信息,请参阅Create a Content-Obscured File with P-Code

编译独立可执行文件

保护源代码的另一种方法是将其编译为独立可执行文件,并将该可执行文件与所需的任何其他文件一起分发给用户。您必须安装 MATLAB Compiler™Simulink® Compiler 及受支持的 C 或 C++ 编译器,才能准备要部署的文件。但最终用户无需安装 MATLAB。

MATLAB CompilerSimulink Compiler 创建独立可执行文件时,该应用程序所需的所有文件都捆绑到一个存档中。在该存档中,每个 MATLAB 代码文件(纯文本 MATLAB 文件或 P 代码文件)都使用标准 AES-256 算法进行加密。默认情况下,文件名和目录结构不会进行模糊处理,其他文件类型(如 MAT、FIG、MEX 等)也不会加密。

从 R2021b 开始,您可以隐藏文件名和目录结构,还可以使用 mcc (MATLAB Compiler)-s 选项加密其他文件类型(如 MAT、FIG、MEX 等)。在运行时,加密文件在磁盘上保持加密状态,但在内存中解密为编译前的原始状态。根据具体使用情况,您可以将其他方法与此方法结合使用来增加一层保护。例如,您可以在编译 MATLAB 代码文件之前先从这些文件创建一个 P 代码文件。

要针对您的 MATLAB 应用程序编译独立可执行文件,请按照 MATLAB 程序文件的惯常工作流开发并调试您的应用程序。有关如何生成可执行文件的信息,请参阅Create Standalone Application from MATLAB Function (MATLAB Compiler)

使用模型保护

保护模型可以通过将原始模型编译为引用模型来隐藏原始模型的实现细节。当您创建受保护模型时,原始模型将编译为称为 SLXP 的包而隐藏其实现细节。SLXP 包括派生文件,以支持 Simulink 环境中用户请求的功能,如代码生成或仿真。

如果用户创建一个仅用于仿真的受保护模型,则大部分 IP 隐藏在派生的二进制文件中。如果用户为创建的受保护模型还要支持代码生成,则 SLXP 会包括某些支持代码生成的文件,这些文件可以是可读的 C/C++ 代码文件,也可以是经过混淆处理的二进制格式文件,具体取决于用户是如何创建 SLXP 的。

仿真和代码生成功能可以有选择地采用密码保护,以便只有知道密码的接收方才能使用这些功能。使用密码保护时,使用 AES-256 加密保护该功能的主要支持文件。当最终用户输入密码时,这些文件会在磁盘上解密。

并非包中的所有支持文件都经过加密。这些文件包含很少的 IP,但仍可以透露关于模型的某些信息,如接口和采样时间。

有关详细信息,请参阅保护模型以隐藏内容 (Simulink Coder)

将代码转换为本机代码

将部分或全部源代码或算法转换为 C/C++ 代码,然后编译为二进制文件。将代码转换为二进制文件有几种选择:

  • 使用 mex 命令从 C/C++ 代码生成二进制文件。

  • 使用 MATLAB Coder 从 MATLAB 代码生成二进制文件。

  • 使用 Simulink Coder 从 Simulink 模型生成 C/C++ 代码,并将生成的代码编译为独立二进制文件。

为了增加一层保护,您可以对生成的二进制文件应用二进制混淆处理(使用 MathWorks 之外的工具)。

在远程受保护服务器上托管编译的应用程序

保护源代码的一种方法是使用 MATLAB Web App ServerMATLAB Production Server 将源代码存储在远程受保护服务器上。存储的源代码驻留在访问受限的服务器上,用户通过安全接口访问该应用程序。这些文件使用 编译独立可执行文件 中所述的相同机制进行加密。

利用安全的操作系统服务

使用操作系统提供的不同系统强化方法。例如,算法可以驻留在受保护虚拟机上运行的访问受限的服务器上。受保护虚拟机为保护您的 IP 增加了一层安全保证。

另请参阅

相关主题