一种linux操作系统环境下文件加密密钥的存储方法技术方案

技术编号:35035217 阅读:10 留言:0更新日期:2022-09-24 23:11
本发明专利技术公开了一种linux操作系统环境下文件加密密钥的存储方法,包括如下步骤:1、文件加密与加密密钥存储,2、密文加密密钥与文件解密。该方法并没有多余的I/O操作,也不依赖于其他软件,整个过程高效简洁,只要文件存在,就不会担心文件密钥的丢失。本专利的优点在于:1、文件加密密钥存储时,不再对第三方数据库的依赖;2、减少了系统资源的浪费;3、降低了系统维护人员的维护成本;4、减少了系统I/O操作次数,提高了应用程序的效率;5、文件与文件加密密钥存储在一起,只要文件存在的时候就一定存在文件加密密钥,防止数据库崩溃或无法连接时,应用业务无法正常进行的情况。用业务无法正常进行的情况。用业务无法正常进行的情况。

【技术实现步骤摘要】
一种linux操作系统环境下文件加密密钥的存储方法


[0001]本专利技术涉及一种加密密钥存储方法,具体是一种linux操作系统环境下文件加密密钥的存储方法。

技术介绍

[0002]对于文件加密密钥的存储保护,通常情况下的做法是将加密后的文件密钥与其对应的文件分开进行各自存储。应用程序通过密钥加密密钥(key)对文件密钥(key)进行加密保护,生成文件加密密钥(ekey)。因数据库表索引查找数据的方便性特点,在设计加密密钥存储方案时,一般会将文件加密密钥写入数据库表,而将与其对应的文件写入指定的文件目录,忽略了使用分开存储方式与数据库表存储带来的弊端;文件加密密钥的保护存储需要与数据库配套使用,这就意味着系统管理员预先安装好数据库,并且创建好数据表。文件加密密钥写入整个过程大致如下:应用程序连接数据库,打开数据库表,再将文件加密密钥插入数据库表中。在获取文件加密密钥时,大概的流程如下:应用程序连接数据库,打开数据库表,查询获取相应的文件加密密钥,再通过密钥加密密钥对文件加密密钥还原,生成文件密钥。
[0003]如以上描述可知,通常情况的做法不但增加了系统管理员的管理难度,程序员的开发工作量,系统资源也会造成不必要的浪费,在文件加密密钥存储与获取过程中过度依赖第三方的数据库,反复进行连接,打开,关闭,读,写等I/O操作,降低了程序运行的效率与性能。在数据库崩溃或无法连接时,整个程序的运行会陷入停滞状态,用户无法对密文文件进行解密,降低了程序应用的可靠性与安全性。如何解决在文件加密密钥更高效的存储与获取,对第三方的依赖程度更低,应用起来更独立是件很有意义的事情。

技术实现思路

[0004]本专利技术的目的在于提供一种linux操作系统环境下文件加密密钥的存储方法,以解决上述
技术介绍
中提出的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:
[0006]一种linux操作系统环境下文件加密密钥的存储方法,包括如下步骤:1、文件加密与加密密钥存储,其过程如下:
[0007]第一步:应用程序使用工具(硬件或软件)生成随机的文件密钥key;
[0008]第二步:应用程序使用文件密钥key对明文文件file进行加密,生成密文文件efile;
[0009]第三步:应用程序使用密钥加密密钥key对文件密钥key进行加密保护,生成文件加密密钥ekey;
[0010]第四步:应用程序在用户态调用Linux操作系统提供的标准API接口setxattr()函数,对密文文件的扩展属性进行设置;
[0011]其中,函数setxattr包含五个参数:第一个是指向目标对象对应的目录项,即/
path/efile;第二个参数表示用户空间的扩展属性名称,即user.key;第三个表示用户空间的扩展属性的值,即ekey;第四个表示扩展属性值的长度;第五个表示传递给文件系统相关操作的标志;
[0012]第五步:setxattr()函数对传入的参数进行合法性检查,如合法则继续,不合法则错误返回;
[0013]第六步:执行进程调用strncpy_from_user()函数或copy_from_user()函数将参数从用户空间拷贝到内核空间;
[0014]第七步:调用vfs_setxattr()函数,将扩展属性信息写入实际文件系统;
[0015]第八步:文件加密密钥被写入扩展属性,成功存储,返回。
[0016]2、密文加密密钥与文件解密,其过程如下:
[0017]第一步:应用程序获取预解密的密文文件efile路径path;
[0018]第二步:应用程序在用户态调用Linux操作系统提供的标准API接口getxattr()函数,对密文文件的扩展属性进行获取;
[0019]该函数包括四个参数,第一个表示目标对象对应的目录项,即/path/efile,第二个表示用户空间的扩展属性名称,即user.key,第三个为保存用户空间的扩展属性的值的缓冲区,第四个表示扩展属性的长度;
[0020]第三步:getxattr()函数对传入的参数进行合法性检查;
[0021]第四步:执行进程调用strncpy_from_user()函数或copy_from_user()函数将参数从用户空间拷贝到内核空间;
[0022]第五步:调用vfs_getxattr()函数,从文件系统记录获取将扩展属性信息,即文件加密密钥ekey;
[0023]第六步:获取到文件加密密钥,将其返回用户态;
[0024]第七步:应用程序将密钥加密密钥key对文件加密密钥ekey进行解密还原,生成key;
[0025]第八步:使用key对efile进行解密,生成明文文件file;
[0026]第九步:解密结束。
[0027]本专利的优点在于:
[0028]1、文件加密密钥存储时,不再对第三方数据库的依赖;
[0029]2、减少了系统资源的浪费(数据库所占用的资源开销);
[0030]3、降低了系统维护人员的维护成本;
[0031]4、减少了系统I/O操作次数,提高了应用程序的效率;
[0032]5、文件与文件加密密钥存储在一起,只要文件存在的时候就一定存在文件加密密钥,防止数据库崩溃或无法连接时,应用业务无法正常进行的情况。
附图说明
[0033]图1为本专利的文件加密密钥写入相应文件扩展属性与从相应文件扩展属性读取文件加密密钥过程示意图
[0034]图2为本专利的文件加密密钥写入扩展属性与从文件扩展属性获取文件加密密钥演变过程示意图
具体实施方式
[0035]目前linux操作系统环境下常见的文件系统ext2,ext3,ext4,XFS,reiserfs,Lustrefs,yaffs等都支持文件扩展属性的附加功能,提供了一个机制用来将键值对(Key/Value)永久地关联到文件中,对文件或是目录拥有读权限的用户可以看到其扩展属性。应用程序可以通过linux操作系统标准的接口setxattr、fsetxattr、lsetxattr、getxattr、listxattr等来设置与获取文件的扩展属性信息,接口不因文件系统的差异而使用不一。
[0036]基于此技术背景和应用需求,新的技术方案如下设计。
[0037]如图1和图2所示,一种linux操作系统环境下文件加密密钥的存储方法,包括如下步骤:
[0038]1、文件加密与加密密钥存储,其过程如下:
[0039]第一步:应用程序使用工具(硬件或软件)生成随机的文件密钥key;
[0040]第二步:应用程序使用文件密钥key对明文文件file进行加密,生成密文文件efile;
[0041]第三步:应用程序使用密钥加密密钥key对文件密钥key进行加密保护,生成文件加密密钥ekey;
[0042]第四步:应用程序在用户态调用Linux操作系统提供的标准API接本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种linux操作系统环境下文件加密密钥的存储方法,其特征在于,包括如下步骤:1)、文件加密与加密密钥存储,其过程如下:第一步:应用程序使用工具(硬件或软件)生成随机的文件密钥key;第二步:应用程序使用文件密钥key对明文文件file进行加密,生成密文文件efile;第三步:应用程序使用密钥加密密钥key对文件密钥key进行加密保护,生成文件加密密钥ekey;第四步:应用程序在用户态调用Linux操作系统提供的标准API接口setxattr()函数,对密文文件的扩展属性进行设置;第五步:setxattr()函数对传入的参数进行合法性检查,如合法则继续,不合法则错误返回;第六步:执行进程调用strncpy_from_user()函数或copy_from_user()函数将参数从用户空间拷贝到内核空间;第七步:调用vfs_setxattr()函数,将扩展属性信息写入实际文件系统;第八步:文件加密密钥被写入扩展属性,成功存储,返回;2)、密文加密密钥与文件解密,其过程如下:第一步:应用程序获取预解密的密文文件efile路径path;第二步:应用程序在用户态调用Linux操作系统提供的标准API接口getxattr()函数,对密文文件的扩展属性进行获取;第三步:getxattr()函数对传入的参数进行合法性检查;...

【专利技术属性】
技术研发人员:姚述源章翔凌李升平
申请(专利权)人:北京双洲科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1