一种面向医疗机构的防止泄露患者隐私的系统及其方法与流程

文档序号:12670164阅读:207来源:国知局
一种面向医疗机构的防止泄露患者隐私的系统及其方法与流程

本发明涉及医疗健康领域,尤其涉及一种面向医疗机构的防止泄露患者隐私的系统及其方法。



背景技术:

近年来,侵犯公民个人信息及其所滋生的侵害事件不断发生,特别是近来一系列的诈骗电话引发的恶性事件,引发了人们对个人隐私保护的重视,首当其冲的患者就诊信息中的隐私保护问题成为了人们的研究热点。

申请号为201510059777.X的《患者病历数据保密方法及系统》分别设置身份数据库和病史数据库,将患者的隐私信息和病史数据分开存储,通过使用公共密钥的方法对两个数据库的信息进行匹配,只有正确匹配的数据才能输出,起到隐私保护的目的,该方法理论上非常完美,但是每次病史数据的变化势必造成匹配上的变动,同时对于既有的系统和数据改造的成本也比较大;

申请号为201510876310.4的《一种医疗隐私数据自加密及解密的方法》使用随机数种子,产生一个密钥区,将随机生成的密钥,将密钥的第一个数字存放在密钥区的位置p[81],然后在p[密钥的第一个数]中存放密钥的第二个数字,依次类推,最后将隐私数据加密后插入密钥区。这种思路非常精妙,与本方案提供的密钥隐藏于密文的方法有着异曲同工的效果,该方案侧重于密钥的隐藏,没有考虑到存储空间上的浪费问题,同时也不能防止内部人员通过正常操作途径泄漏患者隐私的行为。



技术实现要素:

本发明为克服上述的不足之处,目的在于提供一种面向医疗机构的防止泄露患者隐私的系统及其方法,系统改造方便低廉,能够完美对接医院的信息管理系统,该方法能够有效防止患者隐私被内部或外部人员窃取,同时也提供了一种将密码隐藏于密文中的方法。

本发明是通过以下技术方案达到上述目的:一种面向医疗机构的防止泄露患者隐私的系统,在应用系统和数据库之间插入服务接口,所述服务接口包括:存取服务模块、SQL语句分解模块、数据库元数据管理模块、行为监控模块、数据模拟模块、数据加密模块、数据解密模块、数据存储模块;所述存取服务模块与SQL语句分解模块连接,SQL语句分解模块与数据库元数据管理模块、行为监控模块连接,行为监控模块与数据模拟模块、数据存取模块连接,数据存取模块与数据加密模块、数据解密模块连接;所述存取服务模块用于提取SQL语句发送给SQL语句分解模块,SQL语句分解模块将分解提取的数据发送给数据库元数据管理模块,数据库元数据管理模块对数据进行判断处理并进行一次行为监测,行为监控模块用于进行二次行为监测,数据模拟模块模拟产生伪信息,数据加密模块和数据解密模块用于对患者隐私数据的加密和解密,数据存取模块用于对数据库的存取操作。

作为优选,所述存取服务模块包括数据存储接口和数据提取接口,与应用系统连接。

作为优选,所述存取服务模块以RESTful服务的形式对外提供数据存储接口和数据提取接口。

一种面向医疗机构的防止泄露患者隐私的方法,包括,数据存储处理步骤、数据提取处理步骤;

数据存储处理步骤:

11)存取服务模块的数据存储接口接收应用系统发送的数据,提取SQL语句发送给SQL语句分解模块;

12)SQL语句分解模块分解SQL语句,提取信息,并发送给数据库元数据管理模块;

13)数据库元数据管理模块判断是否存在数据提取的行为,如果存在数据提取的行为,则返回错误信息;若不存在,则继续判断是否存在对隐私数据的操作,如果涉及隐私数据的操作则执行步骤14),否则执行步骤15)。

14)通过数据加密模块对隐私数据进行加密;

15)数据存储模块将数据存入数据库;

数据提取处理步骤:

21)存取服务模块的数据提取接口接收应用系统发送的数据,提取SQL语句发送给SQL语句分解模块;

22)SQL语句分解模块分解SQL语句,提取信息,并发送给数据库元数据管理模块;

23)数据库元数据管理模块判断是否存在通过数据提取接口对数据库的数据进行修改的行为,如果存在,则返回错误信息;若不存在,则继续判断是否存在对隐私数据的提取,如果涉及隐私数据的提取操作则执行步骤24),否则执行步骤25);

24)行为监控模块,判断是否存在窥探隐私的行为,若不存在窥探隐私行为,则执行步骤25);若存在则调用数据模拟模块,返回模拟数据;

25)数据存取模块将请求的SQL语句提交数据库,返回结果集;

26)行为监控模块根据数据存取模块返回的结果集判断是否存在窥探隐私的行为,如果存在窥探隐私的行为,则调用数据模拟模块,返回模拟数据;否则,调用数据解密模块解密隐私数据并返回数据,并记录接口调用账户和所操作的时间和涉及患者的唯一标识。

作为优选,所述数据加密模块的加密步骤包括:

31)输入明文;

32)在加密算法字典中随机选择一种加密算法和其对应的加密算法标识,算法标识使用字符串表示,记字符串的长度为El;

33)随机生成一个符合加密算法密钥长度要求的字符串作为密码,使用步骤32)随机选择的加密算法,对明文进行加密,得到密文的长度Ml。

35)加密算法标识和密码字符串进行拼接,生成待隐藏的字符串strhide,并记录strhide的长度为Pl;

35)设置一个字符串buffer,将密文第一个字符迁移到buffer中;

36)取buffer第一个字符的ASCII码的十进制值n除以密文长度Ml的余数k;

37)将密文位置k处的字符迁移到buffer的前面,同时在密文的位置k处插入strhide的第一个字符h,将strhide的第一个字符h移除;

38)重复步骤36)至步骤37),直至strhide中的字符全部移除;

39)将buffer放到密文的前面,生成新的密文;

310)将Pl转化为两个字符长度的字符串,不足两位的前面补0,放在密文的首部,将El转化为一个字符长度的字符串放在密文的首部,输出密文。

作为优选,所述数据解密模块的解密步骤包括:

41)输入密文,得到密文和密文的长度Ml;

42)截取密文前三个字符,将第一个字符和后两个字符拆分并转换为数值,分别得到密码和加密算法标识的长度Pl、El,并将密文的前三个字符移除,此时密文的长度Ml=Ml-3;

43)定义一个空的字符串strhide,作为密码和加密算法标识的字符串;

44)定义一个字符串缓存buffer,在密文的Pl位置处将密文分为前半段和后半段,将密文前半段放到buffer中;

45)取buffer第二个字符的ASCII码的十进制值n除以密文长度Ml的余数k,取密文的位置k处的字符h,将h放入strhide前面,在密文的位置k处移除字符h,同时将buffer的第一个字符放到密文的位置k处;

46)重复步步骤45),直至buffer只有一个字符,将该字符放到密文的前面,此时密文还原完毕;

47)根据El将strhide拆分成密码和加密算法标识两个部分;

48)根据加密算法标识到加密算法字典中取得加密算法,使用密码和加密算法对密文进行解密;

49)输出明文。

作为优选,所述步骤24)中,行为监控模块判断是否存在窥探隐私的行为,具体判断方法为:根据接口调用账户的上次提取隐私数据的时间和隐私数据相关的患者唯一标识进行判断;如果在限定的时间间隔内多次对同一患者的隐私数据多次提取,则不认为是窥探隐私的行为;如果在限定时间间隔内,对多个患者提取隐私数据,则认为是隐私窥探行为。

作为优选,所述步骤26)中,行为监控模块进行二次监控,根据数据存取模块返回的结果集判断是否存在窥探隐私的行为,判断的方法是:根据步骤25)的判断结果查看是否查询隐私数据,同时判断数据存取模块是否返回多条记录,如果涉及隐私数据同时返回多条记录则判断为窥探隐私的行为。

本发明的有益效果在于:1、在医院的各种应用系统与数据库的连接之间插入RESTful服务向外提供服务接口,由应用系统直接存储数据库改为通过RESTful服务接口存取数据,不仅应用系统的开发语言不用更改,而且数据库的架构、模式均不用做任何调整,同时RESTful存取服务接口提供了SQL语句的支持,对应用系统与数据库交互的部分改动非常小,对既有系统的改造成本非常低;2、本发明对患者隐私数据进行二次监控,在限制的时间间隔内不允许多次提取患者的隐私数据,既保证了医务人员正常的诊疗工作又有效防止内部工作人员恶意窥探、泄漏甚至出卖患者隐私数据的行为;3、提供一种对患者隐私数据的加密解密的算法,随机选择加密算法和动态生成密码的方法提高隐私数据的安全,而将密码隐藏于密文中,减少对存储空间的占用,同时为了提高安全,数据加密模块和数据解密模块用到的加密算法字典使用系统内部的加密算法进行加密,系统管理员不能看到加密算法字典的真正内容,进一步提高数据的安全。

附图说明

图1是本发明系统的结构示意图;

图2是本发明数据存储处理步骤的流程示意图;

图3是本发明数据提取处理步骤的流程示意图;

图4是本发明加密步骤的流程示意图。

具体实施方式

下面结合具体实施例对本发明进行进一步描述,但本发明的保护范围并不仅限于此:

一种面向医疗机构的防止泄露患者隐私的系统,如图1所示,在应用系统和数据库之间插入服务接口,所述服务接口包括:存取服务模块、SQL语句分解模块、数据库元数据管理模块、行为监控模块、数据模拟模块、数据加密模块、数据解密模块、数据存储模块;所述存取服务模块与SQL语句分解模块连接,SQL语句分解模块与数据库元数据管理模块、行为监控模块连接,行为监控模块与数据模拟模块、数据存取模块连接,数据存取模块与数据加密模块、数据解密模块连接;所述存取服务模块用于提取SQL语句发送给SQL语句分解模块,SQL语句分解模块将分解提取的数据发送给数据库元数据管理模块,数据库元数据管理模块对数据进行判断处理并进行一次行为监测,行为监控模块用于进行二次行为监测,数据模拟模块模拟产生伪信息,数据加密模块和数据解密模块用于对患者隐私数据的加密和解密,数据存取模块用于对数据库的存取操作。所述存取服务模块以RESTful服务的形式对外提供数据存储接口和数据提取接口,数据存储接口和数据提取接口与应用系统连接。

一种面向医疗机构的防止泄露患者隐私的方法,包括,数据存储处理步骤、数据提取处理步骤。

图如2所示,数据存储处理包括以下步骤:

步骤一、接口调用者调用存取服务模块的数据存储接口时,将使用的SQL语句传入接口的第一个参数,第二个参数为可选参数,用于传入SQL语句的绑定参数或存储过程/函数的参数值,存取服务模块的数据存储接口提取SQL语句,发给SQL语句分解模块;

步骤二、SQL语句分解模块,分解SQL语句,提取DML的“insert”、“update”、“delete”关键字、涉及的表名和相关字段,如果没有“insert”、“update”、“delete”关键字,则检查是否存在形如“execute”、“call”等调用自定义的存储过程或函数的关键字,将自定义的存储过程或函数名提取出来,将提取的信息发给数据库元数据管理模块,执行步骤三;

步骤三、数据库元数据管理模块根据SQL语句的关键字或调用的自定义存储过程或函数判断是否存在数据提取的行为,如果存在数据提取的行为,则认为接口调用错误并返回错误信息,然后判断是否存在对隐私数据的操作,如果涉及隐私数据的操作则执行步骤四,否则执行步骤五;

步骤四、数据加密模块对传入的隐私数据进行加密,如果SQL语句或其绑定的参数中含有隐私数据,则将隐私数据进行加密,如果调用的是存储过程或函数,则对涉及隐私的参数值进行加密,执行步骤五。

步骤五、数据存储模块直接将SQL语句或存储过程或函数传入数据库,完成数据存储,并将存储结果反馈给存取服务模块的调用者。

如图3所示,数据提取处理步骤包括以下步骤:

步骤一、接口调用者调用存取服务模块的数据提取接口时,将使用的SQL语句传入接口的第一个参数,第二个参数为可选参数,用于传入SQL语句的绑定参数或存储过程/函数的参数值,存取服务模块的数据提取接口提取SQL语句,发给SQL语句分解模块;

步骤二、SQL语句分解模块,分解SQL语句,提取DML的“select”关键字、涉及的表名和相关字段,如果没有“select”关键字,则检查是否存在形如“execute”、“call”等调用自定义的存储过程或函数的关键字,将自定义的存储过程或函数名提取出来,将提取的信息发给数据库元数据管理模块,执行步骤三;

步骤三、数据库元数据管理模块根据表名和相关的表和字段或自定义的存储过程/函数判断是否存在通过数据提取接口对数据库的数据进行增加、删除、修改的行为(针对临时表的操作除外),如果存在,则返回错误信息,否则判断是否存在对隐私数据的提取,如果涉及隐私数据的提取操作则执行步骤四,否则执行步骤五;

步骤四,行为监控模块,判断是否存在窥探隐私的行为,判断的方法是根据接口调用账户的上次提取隐私数据的时间和隐私数据相关联的患者唯一标识进行判断,如果在限定的时间间隔内多次对同一患者的隐私数据多次提取,则不认为是窥探隐私的行为,执行步骤五,如果在限定时间间隔内,提取不同患者的隐私数据,则认为是隐私窥探行为,调用数据模拟模块,返回模拟数据;

步骤五、数据存取模块将请求的SQL语句提交数据库,返回结果集,如果数据库执行异常则将异常信息反馈给接口调用者;

步骤六、行为监控模块根据数据存取模块返回的结果集判断是否存在窥探隐私的行为,判断的方法是根据步骤三的判断结果查看是否查询隐私数据,同时判断数据存取模块是否返回多条记录,如果返回多条患者的隐私记录则判断为窥探隐私的行为,调用数据模拟模块,返回模拟数据,否则,调用数据解密模块解密隐私数据并返回数据,并记录接口调用账户的信息和操作的时间以及涉及患者的唯一标识(如存放隐私数据表的主键、患者的身份证号、就诊卡号、医保号等)。

加密算法字典至少维护两条以上加密算法和其对应的密钥长度要求,当隐私保护系统开始加载运行时,先判断加密算法字典自身是否已经加密,如果没有加密则系统为每个加密算法随机生成各自的加密标识,每个加密标识为各不相同的字符串,字符串的长度不必相等。随后,系统使用内部的加密算法将加密算法字典加密后,覆盖掉初始的加密算法字典明文。

如图4所示,数据加密模块的加密步骤包括:

步骤一、输入待加密的明文,假设患者的姓名为abc,对明文abc进行加密;

步骤二、在加密算法字典中随机选择一种加密算法和其对应的加密算法标识,并用内部的加密算法解密,得到加密算法和其对应的加密算法标识,假设得到的加密算法为DES算法,其对应的标识符为Ep,它的长度El=2,要求的密钥长度为64位(bit);

步骤三、随机生成一个符合加密算法密钥长度要求的字符串,假设该字符串为12345678,使用步骤二随机选择的加密算法,对明文进行加密,得到密文为:LINpMRouOPo=,它的长度Ml=12;

步骤四、加密算法标识和密码字符串进行拼接,生成待隐藏的字符串strhide=12345678Ep,并记录strhide的长度为Pl=10;

步骤五、设置一个字符串buffer,将密文第一个字符,即L迁移到buffer的最前面,此时密文为:INpMRouOPo=,它的长度为11;

步骤六、取buffer的第一个字符ASCII码的十进制值除以密文长度11的余数为10;

步骤七、将密文的位置10(位置的编号从0开始)处的字符迁移到buffer的最前面;

步骤八、在密文的位置10处插入strhide的第一个字符1,得到INpMRouOPo1,将strhide的第一个字符1移除,结果是2345678;

步骤九、重复步骤六至步骤八,直至strhide中的字符全部移除,此时密文的内容为:

8N57Ro2p6o1,buffer的内容为:E3IMP4pOu=L,将buffer的内容放到密文内容的前面,结果:E3IMP4pOu=L8N57Ro2p6o1;

步骤十、将Pl转化为两位字符长度的字符串,不足两位的前面补0,放在密文的首部,将El转换为1位字符长度的字符串,放在密文的首部;

步骤十一、输出密文:210E3IMP4pOu=L8N57Ro2p6o1。

相反的,数据解密模块的解密步骤包括:

步骤一、输入密文210E3IMP4pOu=L8N57Ro2p6o1;

步骤二、截取密文前三个字符,将第一个字符和后两个字符的字符串分别转换为数值,得到隐藏的字符串长度为10以及其中加密算法标识长度为2,并将密文的前三个字符移除,此时密文的内容为E3IMP4pOu=L8N57Ro2p6o1,长度为22;

步骤三、将密文内容从位置10处(位置的编号从0开始)拆成两个部分:E3IMP4pOu=L以及8N57Ro2p6o1,将第一部分的内容放到缓存字符buffer中。此时密文的内容为:8N57Ro2p6o1,buffer的内容为:E3IMP4pOu=L;

步骤四、定义一个空的字符串strhide,作为密码和加密算法标识的字符串;

步骤五、取buffer字符串的第二个字符(3)的ASCII码的十进制值(51)密文长度(11)的余数(7),将余数所指定的密文位置(7)处的字符转移到strhide的字符串前面,并在该位置插入buffer的第一个字符,同时将buffer的第一个字符删除;

步骤六、重复步骤五,直至buffer只剩下一个字符,将该字符放到密文的前面,得到原始密文:LINpMRouOPo=;

步骤七、加密算法标识长度为2将strhide拆分成密码(12345678)和加密算法标识(Ep)两个部分;

步骤八、根据加密算法标识到加密算法字典中取得加密算法(DES),使用密码和加密算法对密文进行解密得到明文为abc。

以上的所述乃是本发明的具体实施例及所运用的技术原理,若依本发明的构想所作的改变,其所产生的功能作用仍未超出说明书及附图所涵盖的精神时,仍应属本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1