LabVIEW开发人员在安全的机密区域创建代码。要将代码迁移到非安全区域,必须确保不含任何机密内容:代码、信息或数据。机密代码可能包含执行机密工作的算法、用于代码输入的信息,以及应用程序收集并存储在文件中的数据。在将代码移出机密区域前,必须由受过机密信息识别培训且了解LabVIEW代码的人进行审核。
LabVIEW代码解密与任何编程语言一样:
按良好的文档规范开发代码。
手动审核代码,确保所有敏感数据都已删除。
清理代码中的所有机密信息。
记录密级过程,包括所用工具、操作步骤和结果。
获得批准安全负责人的审核。
在本文中,我们概述了以下建议和最佳做法,以让LabVIEW代码解密变得尽可能简单。
最小化在安全环境中开发的代码量
模块化代码以区分机密开发与非机密开发
清晰记录代码以识别机密和非机密信息
使用VI分析器对代码运行静态分析
使用打印VI手动检查代码
记录采取的步骤
向训练有素的安全官员提交结果
处理机密代码时,通常更容易避免将代码从机密环境移至非机密环境。尽可能在非机密环境中开发代码,然后将完成的代码移至机密环境。LabVIEW的模块化特性允许使用占位符子VI来定义输入和输出,从而进行代码开发,并将敏感代码的开发留到代码进入机密区域后再进行。理想情况下,移动后发生的唯一代码更改就是实现代码的机密部分。但由于该做法并非始终可行,在机密环境中工作的LabVIEW开发人员应遵循本文档其余部分介绍的某些最佳实践。
在LabVIEW中使用子VI提供了一种分离机密信息代码的方法。构建代码,使机密代码的开发能够隔离到各个子VI中。
开发代码时,可以考虑在顶层VI中创建占位符算法。开发实际算法前先定义算法的输入和输出,然后将代码部分创建为子VI,如图1所示。
图1.编辑菜单中的创建子VI选项
创建子VI后,打开它并实现算法的其余部分。
保存子VI。可以把所有机密子VI保存到一个单独的文件夹,以便从代码中移除。
文档是简化解密流程最重要的步骤。如果安全负责人无法理解代码的作用,则无法对其进行解密审核。LabVIEW提供了多种文档选项。
为每个前面板控件、指示器和常量添加标签,使数据类型和功能尽可能直观。添加标签时,请考虑控件中的数据未来是否可能被分类为机密数据。如果数据可能被分类,请使用NSA颜色编码识别机密信息的可能性。
图2中的图像来自前面板,表明某些输入可能包含机密信息。在解密过程中,这使得哪些容器需要检查一目了然。
图2.颜色编码控件标签
尽可能避免将机密信息直接放在程序框图常量中,因为在审核过程中常量容易被忽略。此外,移除常量以解密代码更为困难。可以考虑从数据文件导入输入,把机密信息保存在那个文件中。在解密过程中,将该文件与LabVIEW程序框图分开,则LabVIEW框图中就不会含有机密数据。
该做法并非总是可行,因此当常量包含机密数据时,必须对其进行标注,如图3所示。按照NSA颜色编码对标签进行颜色标记,以识别数据类型。
图3.LabVIEW常量使用颜色编码识别分类
通过选择“文件”(File)>“VI属性”(VI Properties)打开子VI的VI属性,可以在子VI层记录LabVIEW代码。
打开此对话框后,从下拉菜单中选择“文档”(Documentation),如图4所示。
图4.在VI说明属性中将VI记录为机密
VI说明中的注释会出现在一些有用的位置,但只有在该对话框中填写后才会显示。
为机密子VI使用通用描述符也很有帮助,比如上例中的**CLASSIFIED**。然后在解密过程中,可以利用自动化工具查找这些注释。
注释会出现在即时帮助窗口中。鼠标移到子VI上时,会显示包含说明材料的描述,如图5所示。
图5.在LabVIEW即时帮助窗口查看VI说明
新建的子VI将在右上角显示默认图标,如图6所示。
图6.LabVIEW VI的默认图标
双击该图标将打开LabVIEW图标编辑器对话框。该图标编辑器可用于识别子VI的功能。您也可以通过图标颜色快速判断函数是否包含机密数据,如图7所示。
图7.使用图标颜色识别代码分类
这样用颜色标记,即使审核者不是LabVIEW程序员,也能在解密时轻松检查代码。
双击LabVIEW程序框图或前面板中的空白区域,可以创建文本书签。文本前加上#,即可将文本设为书签。
自动化工具会查找这些书签。您可以指定要查找哪些书签。将代码的每个部分标记为#CLASSIFIED或#UNCLASSIFIED很有帮助,如图8所示。您将能够自动扫描这些书签。
图8.用于机密代码部分的LabVIEW标签
可以使用书签管理器窗口查看代码中的所有书签,包括子VI。打开书签管理器窗口,从LabVIEW前面板中选择“查看”(View)>“书签管理器”(Bookmark Manager)。
图9展示了书签管理器窗口查找本指南所示代码的样例。
图9.LabVIEW书签管理器
在此窗口中,您可以双击任何列出的标签跳转到对应代码部分进行审查。也可以将此列表导出为文本文件,以便向评估者展示所有机密代码部分。
下一节将介绍如何使用VI Analyzer在代码中查找书签。
LabVIEW专业版包含VI分析器。VI Analyzer自动进行代码检查,查找由审核者定义的代码问题。
下一个界面如图10所示,提供了定义要运行哪些测试的方法。您可以定义测试并在此从<用户定义>测试中选择它。VI Analyzer主要用于代码质量测试,因此这里的许多测试不适用于数据解密。
图10.LabVIEW VI Analyzer窗口
以下是在解密过程中最有用的测试:
“文档>开发者>注释用法”(Documentation > Developer > Comment Usage)—识别没有注释的VI。
第一次搜索会返回所有未在列表中的书签。将#CLASSIFIED从列表中去除,搜索结果会返回所有带有该标识符的代码部分。包含#UNCLASSIFIED时,如图11所示,搜索将忽略被认定为非机密的代码部分。
第二次搜索会识别没有注释的代码段,迫使开发人员在代码审查前为每段加书签。
图11.使用VI Analyzer忽略批准的书签标签
调整测试后,单击“保存”(Save)按钮可减少每次运行测试的设置时间。
单击“分析”(Analyze)来运行测试。最终报告将显示#CLASSIFIED书签,如图12所示。
图12.VI分析器结果
在解密过程中,保存VI项目及子VI副本。移除VI,运行测试,确保代码中没有标记为#Classified的部分。
完成代码自动化检查后,需进行详细的手动审查以确保文档过程中没有遗漏机密数据。
使用Microsoft Word等标准文档工具打开文件。该文件将包含VI的所有信息,包括截图。请注意,图像可能比页面大并出现截断,但可缩小以适应页面。
请注意,所有子VI文档都会出现。凭此文档,安全负责人可以审核代码以进行解密。使用NSA分类颜色能立即清楚代码哪些部分包含机密信息。
在解密过程中,最好将VI保存到新位置,删除所有机密部分,然后再运行该流程。如操作正确,代码中不应保留任何标记为机密的内容。
在任何安全流程中,文档都是关键。文档对于让安全负责人相信您在机密环境中执行了信息保护步骤至关重要。文档还能简化流程,使您能按安全负责人批准的办法操作,并让安全负责人了解您所做步骤。尽可能详细描述保护信息的流程。
如已执行我们列出的步骤,您可放心与安全负责人沟通,确保机密信息不会离开安全区域。采用良好编码规范、创建完整文档以及使用代码检查工具,有助于您证明已为保护机密信息做了必要工作。