一种以委托方式安全使用密码的方法与流程

文档序号:28381178发布日期:2022-01-07 23:04阅读:129来源:国知局
一种以委托方式安全使用密码的方法与流程

1.本发明属于密码委托使用的技术领域,具体涉及一种以委托方式安全使用密码的方法。


背景技术:

2.用户密码的存放,目前普遍安全的做法是使用hash加盐的方式,好处是不可逆,在数据库泄漏的情况下也无法反推出用户密码,但也杜绝了系统使用该密码的可能,hash加盐的密码只能在认证的时候作为对比依据存在。
3.尤其是在管理其他系统的系统中,如果要实现使用用户密码登录其他系统,由于密码的不可逆性而无法实现该功能,也无法实现在密码强度策略变更后,如提醒不符合要求的用户修改密码,因为存储的用户密码不可逆导致无法使用用户密码做其他事。


技术实现要素:

4.本发明的目的在于提供一种以委托方式安全使用密码的方法,在保证密码明文的安全性的前提下,解决hash加盐存储密码导致密码不可逆而无法使用的问题。
5.本发明通过下述技术方案实现:一种以委托方式安全使用密码的方法,包括以下步骤:步骤1、若干用户通过用户端向登录服务器发送加密的密码,登录服务器针对不同用户端的密码进行解密得到若干密码明文,通过密码明文进行验证登录;步骤2、登录服务器将若干密码明文存储至委托服务器,委托服务器针对每一个密码明文生成唯一一个与当前密码明文对应的密码对象识别id;需要说明的是密码明文会被加密并只存放在委托服务器的内存中,并不进行持久化存储;步骤3、向委托服务器中添加若干委托功能程序,委托服务器针对每一个委托功能程序生成唯一一个与当前委托功能程序对应的委托功能识别id;步骤4、委托服务器将密码对象识别id与委托功能识别id返回至客户端,客户端通过调用密码对应识别id与委托功能识别id从委托服务器中调用密码对应识别id对应的密码明文与委托功能识别id对应的委托功能程序。
6.为了更好的实现本发明,进一步地,所述步骤2与步骤3中,通过在单个委托服务器中部署双进程进行密码明文与委托功能程序的同步交互或通过两个委托服务器进行密码明文与委托功能程序的同步交互实现密码明文与委托程序功能的安全保存与备份。
7.为了更好的实现本发明,进一步地,若只存在一个委托服务器,则在委托服务器中部署一个主进程与一个备份进程,通过负载均衡的方式进行主进程与备用进程之间的密码明文与委托功能程序的同步交互。
8.为了更好的实现本发明,进一步地,若存在两个委托服务器,则将一个委托服务器部署为主服务器,将另一个委托服务器部署为备用服务器以构成ha集群,所述主服务器与备用服务器之间进行密码明文与委托功能程序的同步交互,且主服务器与备用服务器根据
密码明文与委托功能程序同步情况进行实时切换。
9.为了更好的实现本发明,进一步地,所述委托服务器上设置有代码加载接口,通过代码加载接口加载带有委托功能程序的插件实现向委托服务器中添加若干委托功能程序。
10.为了更好的实现本发明,进一步地,采用动态加载或静态停机加载的方式将带有委托功能程序的插件加载至委托服务器中。
11.为了更好的实现本发明,进一步地,所述插件中的委托功能程序包括用户名、密码、控制参数、实际功能代码。
12.为了更好的实现本发明,进一步地,所述步骤1中,在用户端采用公钥对密码进行非对称加密,并将加密后的密码发送至登录服务器,登录服务器通过私钥对密码进行解密得到密码明文;登录服务器对密码明文采用加盐hash的方式处理得到的hash值并与登录服务器中存储的用户密码的hash值进行对比以验证登录是否成功;登录成功则将密码明文发送至委托服务器,登录失败则向客户端返回登录失败信息。
13.为了更好的实现本发明,进一步地,所述委托服务器通过存储接口与登录服务器连接,通过使用接口与用户端连接,所述存储接口与使用接口在内网进行访问。
14.为了更好的实现本发明,进一步地,步骤2与步骤3中,采用生成uuid的方式针对密码明文生成唯一的密码对象识别id或针对委托功能程序生成唯一的委托功能识别id。
15.本发明与现有技术相比,具有以下优点及有益效果:(1)本发明通过在用户登录成功时将解密得到的密码明文发送至委托服务器的内存汇中进行储存,并通过委托服务器针对密码明文生成唯一的密码对象识别id,通过委托服务器针对委托功能程序生成唯一的委托功能识别id,然后通过客户端直接从委托服务器中调取密码对象识别id与委托功能识别id,进而实现针对特定对象实现特定功能,调用期间使用者仅知道密码对象识别id与委托功能识别id,并不会接触密码明文,实现严格数据隔离要求的远程功能安全调用;(2)本发明在密码明文的安全性得到保证的前提下,解决hash加盐存储密码导致密码不可逆而无法使用的问题,让密码名为可以以密码对象识别id委托的方式用作于其他管理用途,方便系统的密码管理和使用。
附图说明
16.图1为本发明的步骤流程示意图;图2为委托功能程序更新的示意图。
具体实施方式
17.实施例1:本实施例的一种以委托方式安全使用密码的方法,如图1所示,包括以下步骤:步骤1、若干用户通过用户端向登录服务器发送加密的密码,登录服务器针对不同用户端的密码进行解密得到若干密码明文,通过密码明文进行验证登录;步骤2、登录服务器将若干密码明文存储至委托服务器,委托服务器针对每一个密码明文生成唯一一个与当前密码明文对应的密码对象识别id;步骤3、向委托服务器中添加若干委托功能程序,委托服务器针对每一个委托功能
程序生成唯一一个与当前委托功能程序对应的委托功能识别id;步骤4、委托服务器将密码对象识别id与委托功能识别id返回至客户端,客户端通过调用密码对应识别id与委托功能识别id从委托服务器中调用密码对应识别id对应的密码明文与委托功能识别id对应的委托功能程序。
18.通过步骤1进行验证登录,若登录成功,则登录服务器将密码明文发送至委托服务器,委托服务器对密码明文的管理的方式只能通过委托的方式进行调用,不能直接取出密码明文。密码明文也不会持久性储存在委托服务器中,而是完全储存在委托服务器的内存中,如果关闭委托服务器,那么委托服务器中的密码明文就会消失。
19.若干用户通过公若干用户端向登录服务器进行登录验证,一旦验证登录成功,则登录服务器将若干密码明文发送至委托服务器进行临时储存,同时委托服务器针对每一个密码明文生成唯一一个对应的密码对象识别id。同时委托服务器中加载有若干委托功能程序,同时委托服务器针对每一个委托功能程序生成唯一一个对应的委托功能识别id。
20.用户端调用委托服务器中的密码对象识别id以确定执行对象,调用委托功能识别id以确定执行的委托功能程序,即通过用户端以密码对象识别id+委托功能识别id的方式通过委托服务器进行指定对象的指定功能服务。
21.如现在有功能a: 校验密码强度;功能b:使用用户密码登录其他程序/机器。现在需要校验用户x的密码强度,首先在委托服务器的数据库中找到功能a对应的委托表。委托表包含用户账号、密码对象识别id和委托功能识别id。
22.委托功能a执行过程如下:带着用户x对应的密码对象识别id+委托功能a对应的委托功能识别id去委托服务器调用委托功能a,委托服务器会根据密码对象识别id取出在内存中的密码密文,然后委托服务器用自己的私钥对密码密文进行解密得到密码明文,委托服务器将还原的密码明文使用委托功能a来执行密码强度校验,然后委托服务器向用户x返回密码强度是否符合要求这个结果。
23.委托功能b执行过程如下:带着用户x对应的密码对象识别id+委托功能b对应的委托功能识别id去委托服务器调用委托功能b,委托服务器会根据密码对象识别id取出在内存中的密码密文,然后委托服务器用自己的私钥解密出密码明文,委托服务器使用还原的密码明文登录对应程序/机器,委托服务器登录后按功能b这个插件中的要求执行对应操作,委托服务器向用户x返回登录后的执行结果。
24.以委托的方式,在能使用密码明文的同时,使用者就彻底和密码明文脱钩。只要在向委托服务器中加载委托功能程序时,遵循委托的模式,那使用者就只知道密码对象识别id,而无法获取到真正的密码明文,能够实现更严格数据隔离要求的远程功能调用。
25.实施例2:本实施例在实施例1的基础上做进一步优化,如图2所示,所述步骤2与步骤3中,通过在单个委托服务器中部署双进程进行密码明文与委托功能程序的同步交互或通过两个委托服务器进行密码明文与委托功能程序的同步交互实现密码明文与委托程序功能的安全保存与备份。
26.进一步的,若只存在一个委托服务器,则在委托服务器中部署一个主进程与一个
备份进程,通过负载均衡的方式进行主进程与备用进程之间的密码明文与委托功能程序的同步交互。
27.进一步的,若存在两个委托服务器,则将一个委托服务器部署为主服务器,将另一个委托服务器部署为备用服务器以构成ha集群,所述主服务器与备用服务器之间进行密码明文与委托功能程序的同步交互,且主服务器与备用服务器根据密码明文与委托功能程序同步情况进行实时切换。
28.若密码委托服务器对密码记录的可靠性要求并不高,只是对用户登录时的密码记录到密码委托服务器,用户要登录系统才会有密码记录,当密码委托服务器由于某些原因意外重启导致内存中信息丢失,但期间用户没有重新登录,那只需要在用户使用到需要密码明文的服务时,再提示用户输入一次密码即可。
29.若密码委托服务器对密码记录的可靠性要求较高,在单台委托服务器下可以部署两个进程,包括一个主进程与一个备用进程,使用负载均衡处理发往主进程与备用进程的委托请求,委托请求包括调用的密码对象识别id与委托功能识别id,同时主进程与备用进程之间实时进行数据同步交互。需要向委托服务器中添加新的密码明文或加载新的委托功能程序时,维持主进程与用户端之间的通信,即用户端依然可以通过主进程从委托服务器中调用密码对象识别id与委托功能识别id,同时通过备用进程向委托服务器中加入新的密码明文或委托功能程序,并生成相应的密码对象识别id或委托功能识别id,然后主进程与备用进程之间进行信息交互,完成密码对象识别id与委托功能识别id的更新。
30.在两台委托服务器存在的情况下,可以使用ha集群主备部署的方式,即一个委托服务器作为主服务器,另一个委托服务器作为备用服务器,主服务器与备用服务器构成ha集群。
31.备用服务器与主服务器连接后,备用服务器同步主服务器所有密码信息和插件功能模块,当委托服务器需要重启升级委托功能时,那可以把ha集群中的备用服务器关闭,然后对备用服务器进行密码明文与委托功能程序更新升级,然后将更新后的备用服务器重新加入集群,并将更新后的密码数据和插件功能同步至主服务器。密码数据和插件功能的同步完成后,ha集群的主服务器切换为备用服务器再次加入ha集群中,备用服务器切换为主服务器对外提供服务。
32.主服务器与备用服务器之间的数据同步也采用非对称加密,主服务器同步数据给备用服务器的步骤如下:(1)主服务器与备用服务器启动时均初始化自己的私钥和对应公钥;(2)主服务器请求备用服务器的公钥;(3)主服务器使用备用服务器的公钥加密密码信息和插件数据并发送给备用服务器;(4)备用服务器接收到自己公钥加密密码和插件数据后使用自己私钥解密。
33.这样保证了主服务器与备用服务器之间既有不同的密钥,又能相互进行通信,提高了主服务器与备用服务器之间的安全性。
34.本实施例的其他部分与实施例1相同,故不再赘述。
35.实施例3:本实施例在上述实施例1或2的基础上做进一步优化,所述委托服务器上设置有代
码加载接口,通过代码加载接口加载带有委托功能程序的插件实现向委托服务器中添加若干委托功能程序。
36.进一步的,采用动态加载或静态停机加载的方式将带有委托功能程序的插件加载至委托服务器中。
37.动态加载:委托服务器上设置有http、rpc等动态接口用于加载动态插件,允许密码委托服务器提供一个可以加载代码的动态接口,通过动态接口可以接收符合规则的委托功能程序的代码并将代码加载到委托服务器的委托功能程序集合之中。采用动态语言进行插件的动态加载,动态接口接收的参数是委托功能识别id+文本代码。动态语言都有动态加载代码的能力,以python这种动态语言为例,python直接对文本代码执行exec函数,就会将代码加载进委托服务器的内存中的解释器,实现动态加载功能的效果。除了采用python之外,还可以使用其他热加载方式。
38.进一步的,所述插件中的委托功能程序包括用户名、密码、控制参数、实际功能代码。
39.插件中的委托功能程序,就是提供用户名、密码和控制参数这三个变量以及剩余的实际功能代码,插件在编写的时候和上述参数耦合。以密码强度校验功能为例,用户名、密码和选填的控制参数,控制参数可以包括最小密码长度、最大密码长度等,控制参数跟插件本身强耦合。
40.同理,用户密码登录其他机器/程序的功能,也是用户名和密码,还有选填的控制参数,这里可以是登录机器/程序后要实现的功能。
41.本实施例的其他部分与上述实施例1或2相同,故不再赘述。
42.实施例4:本实施例在上述实施例1-3任一项的基础上做进一步优化,所述步骤1中,在用户端采用公钥对密码进行非对称加密,并将加密后的密码发送至登录服务器,登录服务器通过私钥对密码进行解密得到密码明文;登录服务器对密码明文采用加盐hash的方式处理得到的hash值并与登录服务器中存储的用户密码的hash值进行对比以验证登录是否成功;登录成功则将密码明文发送至委托服务器,登录失败则向客户端返回登录失败信息。
43.用户端输入的密码采用非对称加密,在用户端使用公钥对登录密码进行加密,将非对称加密的密码传输到登录服务器。
44.客户端可以是web或者专用客户端,客户端向登录服务器初始化登陆请求信息时,公钥就随初始化信息同步返回给客户端,用户输入的密码就用公钥进行加密,登陆时提交公钥加密过的密码信息。登录服务器接收到登录信息后,使用私钥解密出公钥加密过的密码。密码从客户端传输到登录服务器的过程中,就确保了密码全程加密,就算使用https时被中间人攻击,也能保证密码不泄漏。
45.登录服务器端的密码在数据库中存储是加盐后hash的形式,这种密码常见格式为:x8mcpap3tvo.a1a8887793acfc199182a649e905daab,点号前面为盐,点号后面是用盐哈希计算后的哈希值。
46.登录服务器端使用私钥对用户端传输过来的密码进行解密后获取到密码明文,按
规则使用密码明文拼接密码哈希的盐之后再进行哈希运算,将运算结果和数据库中用户密码的哈希值进行比较确认登录是否成功,对解密的密码使用哈希的方式和数据库存储的密码进行比对来确认登录密码的正确性。
47.如果用户密码的哈希对比正确,则认为用户登录成功。此时登录服务器将密码明文存储到委托服务器,之后登录过程就结束,密码明文也就在登录服务器中彻底消失,密码明文已经转移到委托服务器上。
48.本实施例的其他部分与上述实施例1-3任一项相同,故不再赘述。
49.实施例5:本实施例在上述实施例1-4任一项的基础上做进一步优化,所述委托服务器通过存储接口与登录服务器连接,通过使用接口与用户端连接,所述存储接口与使用接口在内网进行访问,将存储接口与使用接口限制在内网进行使用,避免增加使用储接口与使用接口的鉴权,进而省去调用复杂度。
50.委托服务器并未设计对使用者的身份鉴权,只是把它当做一个可调用的功能,放在内网中供其他服务调用。如果一定要添加身份鉴权,那也是在这个功能之外再套一层身份鉴权的外壳,跟委托服务器完全解耦。
51.本实施例的其他部分与上述实施例1-4任一项相同,故不再赘述。
52.实施例6:本实施例在上述实施例1-5任一项的基础上做进一步优化,所述步骤2与步骤3中,采用生成uuid的方式针对密码明文生成唯一的密码对象识别id或针对委托功能程序生成唯一的委托功能识别id。
53.本实施例的其他部分与上述实施例1-5任一项相同,故不再赘述。
54.以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1