一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种内核模块参数安全传递方法与流程

2022-03-05 08:23:52 来源:中国专利 TAG:


1.本发明涉及一种内核模块参数安全传递方法。


背景技术:

2.内核模块是操作系统内核向外部提供的一个插口,其全称为动态可加载内核模块(loadablekernelmodule,lkm),通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能的程序。内核模块与核心功能之间通过函数调用来实现数据流和计算的传递,linuxkernel提供了一个通过module_param()传递命令行参数的机制,其允许驱动程序声明参数,参数用法如同全局变量,用户可在系统启动或内核模块挂载时为参数指定相应值。若在内核模块挂载之后需要更新参数或用户需要向内核模块传递参数,则其权限设置必须设置为用户可读写,使全局变量出现在系统的/sys/module目录下,即用户可通过修改系统/sys/module目录下的全局变量来更新参数信息或向内核模块传递参数。因此,必然导致内核模块的参数可被任何登录该系统的用户读取、修改,增加了内核模块参数泄露、被篡改、遭受被攻击的风险。


技术实现要素:

3.本发明的目的,在于提供一种内核模块参数安全传递方法,既可实现内核模块与应用程序的双向认证,又能由内核模块和应用程序自行协商出会话密钥对参加进行加密,保证参数在传递过程中的机密性、真实性和完整性。
4.为了达成上述目的,本发明的解决方案是:
5.一种内核模块参数安全传递方法,包括如下步骤:
6.步骤1,基于sm2生成第一密钥对和第二密钥对,其中,第一密钥对包括第一公钥和第一私钥,第二密钥对包括第二公钥和第二私钥;
7.步骤2,将第一密钥对的第一私钥和第二密钥对的第二公钥以静态变量的形式安全地写入内核模块,将第二密钥对的第二私钥和第一密钥对的第一公钥以静态变量的形式安全地写入应用程序;
8.步骤3,在内核模块中声明4个用于密钥协商的全局变量,记为第1、第2、第3和第4全局变量,第1、第2全局变量为整型且初始化为-1,第3、第4全局变量类型为字符串,另外将第1全局变量的权限设置为用户读,其余全局变量为可读可写操作;
9.步骤4,内核模块挂载后执行如下操作:
10.步骤41,生成一个随机数,记为rk;
11.步骤42,计算rk=[rk]g,其中g为椭圆曲线上的基点,[
·
]表示多倍点运算;
[0012]
步骤43,计算hk=sm3(rk),其中sm3(
·
)为密码杂凑算法;
[0013]
步骤44,用第二公钥加密rk得到其中e
key
(
·
)表示使用密钥key对输入的明文进行加密;
[0014]
步骤45,将hk和写入第3和第4全局变量中,之后将第1全局变量的值修改为1;
[0015]
步骤5,应用程序读取第1全局变量,若其值为1则执行如下操作:
[0016]
步骤51,读取第3和第4全局变量的值,获得hk和
[0017]
步骤52,用第二私钥解密得到其中d
key
(
·
)表示使用密钥key对输入的密文进行解密;
[0018]
步骤53,计算hk'=sm3(rk');
[0019]
步骤54,判断hk与hk'是否相等,若相等则继续执行后续操作,否则将第2全局变量的值修改为0后结束操作;
[0020]
步骤55,生成一个随机数,记为ra;
[0021]
步骤56,计算ra=[ra]g;
[0022]
步骤57,计算ha=sm3(rk'||ra),其中||表示拼接操作;
[0023]
步骤58,用第一公钥加密ra得到
[0024]
步骤59,将ha和写入第3和第4全局变量中,之后将第2全局变量的值修改为1;
[0025]
步骤6,内核模块读取第1和第2全局变量的值,若第1全局变量和第2全局变量的值均为1,则执行如下操作:
[0026]
步骤61,读取第3和第4全局变量的值,获得ha和
[0027]
步骤62,用第一私钥解密得到
[0028]
步骤63,计算ha'=sm3(rk||ra');
[0029]
步骤64,判断ha与ha'是否相等,若相等(信息未被篡改,且应用程序可信)则继续执行后续操作,否则将第1全局变量的值修改为0后结束操作;
[0030]
步骤65,计算k
ka
=[rk]ra';
[0031]
步骤66,用k
ka
加密ra'得到
[0032]
步骤67,将写入第4全局变量中,之后将第1全局变量的值修改为2;
[0033]
步骤7,应用程序读取第1和第2全局变量的值,若第1全局变量的值为2且第2全局变量的值为1,则执行如下操作:
[0034]
步骤71,读取第4全局变量的值,获得
[0035]
步骤72,计算k
ak
=[ra]rk';
[0036]
步骤73,用k
ak
解密得到
[0037]
步骤74,判断ra与r
a”是否相等,若相等(信息未被篡改,内核模块可信,且协商的密钥正确)则继续执行后续操作,否则将第2全局变量的值修改为2后结束操作;
[0038]
步骤75,用k
ak
加密rk',得到
[0039]
步骤76,将写入第4全局变量中,之后将第2全局变量的值修改为3;
[0040]
步骤8,内核模块读取第1和第2全局变量的值,若第1全局变量的值为2且第2全局变量的值为3,则执行如下操作:
[0041]
步骤81,读取第4全局变量的值,获得
[0042]
步骤82,用k
ka
解密得到
[0043]
步骤83,判断rk与r
k”是否相等,若相等(协商的密钥正确)则将第1全局变量的值改为3后结束操作,否则将第1全局变量的值改为4后结束操作;
[0044]
步骤9,后续内核模块的所有需要同步给应用程序的参数都用k
ka
加密后再写入全局变量中,应用程序的所有需要同步给内核模块的参数都用k
ak
加密后再写入全局变量中。
[0045]
上述步骤2的具体内容是:
[0046]
步骤21,将第一私钥和第二私钥分别按位进行n等分和m等分切割,其中n和m相等或不相等;
[0047]
步骤22,将第一私钥的n个子密钥写入到内核模块的n个静态变量中;
[0048]
步骤23,将第二私钥的m个子密钥写入到应用程序的m个静态变量中。
[0049]
上述步骤9的具体内容是:
[0050]
步骤91,在内核模块中预先声明2个用于标记参数传递状态的全局变量,记为第1状态变量和第2状态变量,其中第1状态变量用于标记内核模块向应用程序传递参数,第2状态变量用于标记应用程序向内核模块传递参数;
[0051]
步骤92,当应用程序向内核模块传递第p个参数时,先用sm3计算该待传参数的数字摘要,再用k
ak
加密上述待传参数,接着将所述摘要信息及加密的待传参数写入对应的全局变量,最后应用程序将状态标记信息的第p位改为1,用sm3计算状态变量的数字摘要,用k
ak
加密状态信息后,将加密的状态信息写入第2状态变量,将状态变量的数字摘要写入对应的全局变量中;
[0052]
步骤93,当内核模块向应用程序传递第q个参数时,先用sm3计算该待传参数的数字摘要,再用k
ka
加密的上述待传参数,接着将所述摘要信息及加密的待传参数写入对应的全局变量,最后应用程序将状态标记信息的第q位改为1,用sm3计算状态变量的数字摘要,用k
ka
加密状态信息后,将加密的状态信息写入第1状态变量,将状态变量的数字摘要写入对应的全局变量中;
[0053]
步骤94,当内核模块或应用程序分别通过第1、第2状态变量监测到参数传递状态的变化时,才进行新参数的接收,接收时需要先对状态变量及对应的参数进行解密,同时还需要进行完整性校验,完成参数接收后,将对应状态变量的标记位修改为0。
[0054]
采用上述方案后,本发明的改进点在于:
[0055]
(1)本发明基于sm2和ecdh设计了一套参数安全传递机制,保证参数在传递过程中的机密性、真实性和完整性;
[0056]
(2)本发明通过在内核模块和对应的应用程序中预置sm2密钥,实现内核模块和应用程序的双向身份认证;
[0057]
(3)本发明基于ecdh协商内核模块和应用程序之间传递参数时的参数加密密钥,
密钥仅内核模块和应用程序知晓,安全性高;
[0058]
(4)本发明利用密钥协商的公钥作为身份认证的秘密信息,基于数字摘要提出一种将身份认证过程与密钥协商过程有机结合的方法,整个过程达到了轻量化的效果,与普通的独立进行身份认证和密钥协商的方案相比,实现步骤更少,执行效率更高;
[0059]
(5)本发明基于协商出来的会话密钥,设计了一种具体的参加加密传递方法。
附图说明
[0060]
图1是本发明的流程图。
具体实施方式
[0061]
以下将结合附图,对本发明的技术方案及有益效果进行详细说明。
[0062]
如图1所示,本发明提供一种内核模块参数安全传递方法,包括如下步骤:
[0063]
步骤一,基于sm2生成两对密钥,一对下发给内核模块,记为第一密钥对;一对下发给应用程序,记为第二密钥对;将第一密钥对和第二密钥对的公私钥分别记为第一公钥、第一私钥、第二公钥、第二私钥;
[0064]
步骤二,将第一私钥和第二公钥以静态变量的形式安全地写入内核模块,将第二私钥和第一公钥以静态变量的形式安全地写入应用程序;具体的安全写入方法如下:
[0065]
1)将第一私钥和第二私钥分别按位进行n等分和m等分切割,其中n和m可相等,也可不相等;
[0066]
2)取内核模块中的n个静态变量,将第一私钥的n个子密钥对应写入到这n个静态变量中;
[0067]
3)取应用程序的m个静态变量,将第二私钥的m个子密钥对应写入到这m个静态变量中;
[0068]
通过这样的设置,可以利用第一、第二密钥对实现内核模块与应用程序之间的身份认证,具体如下:
[0069]
(一)内核模块向应用程序证明身份的方法如下:
[0070]
内核模块用第一私钥(仅内核模块拥有)加密认证消息发送给应用程序;
[0071]
应用程序用第一公钥解密认证消息,若消息正确则认为内核模块可信;
[0072]
(二)应用程序向内核模块证明身份的方法如下:
[0073]
应用程序用第二私钥(仅应用程序拥有)加密认证消息发送给内核模块;
[0074]
内核模块用第二公钥解密认证消息,若消息正确则认为应用程序可信;
[0075]
步骤三,在内核模块中声明4个用于密钥协商的全局变量,记为第1、第2、第3和第4全局变量,第1、第2全局变量为整型且初始化为-1,第3、第4全局变量类型为字符串,另外将第1全局变量的权限设置为用户读(即用户只能读取该变量值,不能进行修改),其余全局变量为可读可写操作;
[0076]
步骤四,内核模块挂载后执行如下操作:
[0077]
1)生成一个随机数,记为rk;
[0078]
2)计算rk=[rk]g,其中g为椭圆曲线上的基点,[
·
]表示多倍点运算;
[0079]
3)计算hk=sm3(rk),其中sm3(
·
)为密码杂凑算法;
[0080]
4)用第二公钥加密rk得到其中e
key
(
·
)表示使用密钥key对输入的明文进行加密;
[0081]
5)将hk和写入第3和第4全局变量中,之后将第1全局变量的值修改为1;
[0082]
步骤五,应用程序读取第1全局变量,若其值不为1,则等待一段时间后重新读取第1全局变量值,重复若干次,如果第1全局变量值一直不为1,则返回相应提示信息并结束操作,等待的具体时间和重复的次数可根据实际情况自行设定;若其值为1则执行如下操作:
[0083]
1)读取第3和第4全局变量的值,获得hk和
[0084]
2)用第二私钥解密得到其中d
key
(
·
)表示使用密钥key对输入的密文进行解密;
[0085]
3)计算hk'=sm3(rk');
[0086]
4)判断hk与hk'是否相等,若相等(信息未被篡改)则继续执行后续操作,否则将第2全局变量的值修改为0后结束操作;
[0087]
5)生成一个随机数,记为ra;
[0088]
6)计算ra=[ra]g;
[0089]
7)计算ha=sm3(rk'||ra),其中||表示拼接操作;
[0090]
8)用第一公钥加密ra得到
[0091]
9)将ha和写入第3和第4全局变量中,之后将第2全局变量的值修改为1;
[0092]
步骤六,内核模块读取第1和第2全局变量的值,若第1全局变量和第2全局变量的值均为1,则执行如下操作:
[0093]
1)读取第3和第4全局变量的值,获得ha和
[0094]
2)用第一私钥解密得到
[0095]
3)计算ha'=sm3(rk||ra');
[0096]
4)判断ha与ha'是否相等,若相等(信息未被篡改,且应用程序可信)则继续执行后续操作,否则将第1全局变量的值修改为0后结束操作;
[0097]
5)计算k
ka
=[rk]ra';
[0098]
6)用k
ka
加密ra'得到
[0099]
7)将写入第4全局变量中,之后将第1全局变量的值修改为2;
[0100]
步骤七,应用程序读取第1和第2全局变量的值,若第1全局变量的值为2且第2全局变量的值为1,则执行如下操作:
[0101]
1)读取第4全局变量的值,获得
[0102]
2)计算k
ak
=[ra]rk';
[0103]
3)用k
ak
解密得到
[0104]
4)判断ra与r
a”是否相等,若相等(信息未被篡改,内核模块可信,且协商的密钥正
确)则继续执行后续操作,否则将第2全局变量的值修改为2后结束操作;
[0105]
5)用k
ak
加密rk',得到
[0106]
6)将写入第4全局变量中,之后将第2全局变量的值修改为3;
[0107]
步骤八,内核模块读取第1和第2全局变量的值,若第1全局变量的值为2且第2全局变量的值为3,则执行如下操作:
[0108]
1)读取第4全局变量的值,获得
[0109]
2)用k
ka
解密得到
[0110]
3)判断rk与r
k”是否相等,若相等(协商的密钥正确)则将第1全局变量的值改为3后结束操作,否则将第1全局变量的值改为4后结束操作;
[0111]
步骤九,后续内核模块的所有需要同步给应用程序的参数都用k
ka
加密后再写入全局变量中,应用程序的所有需要同步给内核模块的参数都用k
ak
加密后再写入全局变量中,所有用k
ka
或k
ak
加密的参数均通过sm3保证其完整性,具体操作如下:
[0112]
1)在内核模块中预先声明2个用于标记参数传递状态的全局变量(用状态变量的比特位标记全局变量的状态),记为第1状态变量和第2状态变量,其中第1状态变量用于标记内核模块向应用程序传递参数,第2状态变量用于标记应用程序向内核模块传递参数;
[0113]
2)当应用程序向内核模块传递第p个参数时,先用sm3计算该待传参数的数字摘要,再用k
ak
加密的上述待传参数,接着将所述摘要信息及加密的待传参数写入对应的全局变量,最后应用程序将状态标记信息的第p位改为1,用sm3计算状态变量的数字摘要,用k
ak
加密状态信息后,将加密的状态信息写入第2状态变量,将状态变量的数字摘要写入对应的全局变量中;
[0114]
3)当内核模块向应用程序传递第q个参数时,先用sm3计算该待传参数的数字摘要,再用k
ka
加密的上述待传参数,接着将所述摘要信息及加密的待传参数写入对应的全局变量,最后应用程序将状态标记信息的第q位改为1,用sm3计算状态变量的数字摘要,用k
ka
加密状态信息后,将加密的状态信息写入第1状态变量,将状态变量的数字摘要写入对应的全局变量中;
[0115]
4)当内核模块或应用程序分别通过第1、第2状态变量监测到参数传递状态的变化时,才进行新参数的接收,接收时需要先对状态变量及对应的参数进行解密,同时还需要进行完整性校验,完成参数接收后,将对应状态变量的标记位修改为0。
[0116]
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献