
Longyuan Journal Net Linux文件加密系统的设计: ARCHIVES张起军谭家瑞颜志润来源: 《物联网技术》 2018年02月摘要: 文件加密的内容,可以有效解决数据泄漏问题. 目前,传统的第三方软件大多使用非透明加密,给用户带来不便. 新的堆叠文件加密方案可以有效解决透明性问题,但是这种设计方案的实现更为复杂,并且具有内核版本依赖性. . 本文采用Hook机制监视用户对指定文件目录的操作,以捕获用户对目录中特定文件的访问. 应用层加密解密模块自动调用完成特定文件的加密解密,解决了透明性问题. 由于系统的加解密功能是在应用层实现的,因此与特定的文件系统无关,因此可以有效简化系统设计,具有强大的容灾能力和较高的稳定性. 关键字: 数据加密;进程间约束;消息挂钩机制;锁定机制. CLC编号: TP309.7; TP316.81文档标识码: A文章编号: 2095-1302(2018)02-00-03 0在过去的几年中,基于Linux内核开发的操作系统已逐渐从服务器转移到用户终端. 特别是在某些单位中,Linux被用作从服务器到个人终端的系统支持. 因此,对Linux上存储的敏感数据进行加密和保护已成为亟待解决的问题.

大多数第三方加密软件使用非透明文件存储方法,该方法要求用户在打开指定文件时调用解密模块;同样,当用户关闭文件时,需要调用加密模块,从而导致体验不佳. 尽管新的堆叠文件加密系统[1]可以解决用户透明性的问题,但仍需要重新设计新的文件管理层来加密文件,因此需要重新设计加密的文件系统. 对于此类设计人员,有必要深入了解Linux的各个方面,例如文件系统管理,内存管理和驱动程序设计. 尽管该设计方案在理论上是可行的,但在系统的具体实现过程中却非常复杂,开发周期长且昂贵,并且在短时间内无法看到测试结果. 1总体方案设计本系统采用文件锁定[2]和消息挂钩机制[3]进行设计,不仅可以有效解决用户透明性问题,而且可以降低总体设计难度. 如图1所示,系统中的目录A用作受监视的目录,用于存储需要加密的文件,目录B可以视为缓存目录或备份目录. 当纯文本文件存储在目录A中时,加密子进程在目录B中创建一个新的临时文件以保存加密的密文. 纯文本文件加密完成后,目录A中的文件将替换为目录B中的临时密文文件. 类似地,当需要解密目录A中的密文文件时,请读取目录中的临时密文文件B,然后调用解密子进程对其进行解密,最后用解密后的数据覆盖目录A中的密文文件.

龙源期刊网络整个解决方案仅需调用Linux提供的接口即可完成设计,并且大多数数据处理过程都位于应用程序层中. 即使系统遇到无法控制的因素并造成灾难性后果,完整的加密数据也可以在现有文件系统中找到并解密,以有效解决文件恢复问题. 可以看出,基于应用层的方案设计不需要对Linux内核进行深入修改,从而降低了开发难度. 2关键技术要点目录A和目录B之间的数据交换需要多个子流程的协调,包括子流程的维护,子流程的加密和子流程的解密. 如果用户操作目录A和目录A中的文件,则维护子进程可以捕获用户的操作并通知其他子进程执行后续操作. 系统解决方案的设计需要解决两个技术问题,即监视目录和进程间控制. 2.1监视目录在最新版本的Linux内核中,添加了一个消息Hook模块,用于监视操作文件,即inotify,它以inotify为核心来实现监视目录. 监视模块初始化后,将返回相应的监视实例ID,然后将要监视的对象的路径添加到监视实例. 这些对象可以是文件或文件目录. 如果未监视对象,则可以将其从监视实例中删除. 监视用户操作文件并生成消息队列的过程如图2所示.

当用户操作监视目录A中的文件时,消息Hook模块监视虚拟文件系统(VFS),并通过该消息将用户的操作类型发送到应用程序层的消息队列中,以便后台维护可以实时捕获子进程(通过轮询). 维护子过程通过读取消息队列[4]来判断生成的事件,并调用相应的加密或解密子过程. 通常,当用户访问文件时,可能会连续发生多个消息事件. 例如,如果用户打开一个加密文件加密linux系统,则监视模块首先生成IN_OPEN消息事件,然后生成IN_WRITE消息事件,最后生成IN_CLOSE消息事件. 因此,在监视对象时,必须保持子进程以顺序捕获由该对象生成的一系列消息事件,并确定当前监视对象需要执行的操作. 2.2进程间控制用户使用诸如编辑器之类的软件打开目录A中的密文文件. 维护子进程自动调用加密和解密模块以完成文件解密过程,并将解密后的纯文本数据呈现给用户. . 在解密过程中,使用文件锁定模式使用户进程等待,方便解密模块解密. 但是大多数编辑软件在打开文件时不会检查文件锁定,而是直接读取文件内容,因此用户会读取密文数据. 为了使这些软件等待,在打开文件时,有必要强制检查这些软件生成的过程,以检查文件是否被锁定.

由于这些进程打开的文件最终需要调用内核层中的open函数加密linux系统,因此需要修改Linux内核中系统定义的open部分[5]. 在Linux内核中,需要添加文件锁检测功能,名为myFlock. 由于内核中Flock的系统定义只能提供给上层进行系统调用,而不能由内核层中的其他函数直接调用,因此有必要在do_sys_open中调用自定义锁. 由于内核中的函数全部通过EXPORT_SYMBOL等输出全局信号量,因此Flock和myFlock可以通过调用全局输出信号量来共享缓存队列,以便其他进程在打开文件时可以强制检查锁定. 另外,内核层中各进程之间的约束过程如下: (1)在控制过程中,密文文件被维护子进程称为flock(),维护子进程保存加密文件
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-280279-1.html
这一天不会太晚