开云优惠体育网页版入口

开云优惠体育网页版入口:基于隐私计算的防撞库方法及系统发明专利

更新时间:2026-09-01
基于隐私计算的防撞库方法及系统发明专利 专利申请类型:发明专利;
地区:河南-周口;
源自:周口高价值专利检索信息库;

专利名称:基于隐私计算的防撞库方法及系统

专利类型:发明专利

专利申请号:CN202410280372.8

专利申请(专利权)人:滕文娟
权利人地址:河南省周口市鹿邑县任集乡北代行政村藤冈

专利发明(设计)人:发明人:滕文娟

专利摘要:本发明公开了基于隐私计算的防撞库方法及系统,所述方法包括:第一阶段的用户凭据处理中,第二阶段的矩阵分割存储,以及第三阶段的撞库检测阶段中,用户登入服务器节点中基于用户提交的凭据和生物特征数据,以及基于和第一阶段相同的规则将用户提交的凭据和生物特征数据转换为请求矩阵,并向第二阶段确定的所述多个服务器节点发送所述请求矩阵;多个服务器节点向用户登入服务器节点反馈各自计算的局部相似性结果;用户登入服务器节点基于平均的局部相似度结果触发撞库预警。本发明提供了一种安全、隐私保护的用户验证机制,通过分布式存储和局部相似性计算有效地减少了撞库攻击的风险,同时保护了用户的隐私信息。

主权利要求:
1.一种基于隐私计算的防撞库方法,所述方法包括:第一阶段的用户凭据处理中,用户登入服务器节点接收基于用户提交的凭据以及生物特征数据并转换成一个稀疏矩阵;
第二阶段的矩阵分割存储中,将包含生物特征数据的稀疏矩阵进行安全分割,并分布式存储在多个服务器节点中;
第三阶段的撞库检测阶段,当用户尝试登录时,在用户登入服务器节点中基于用户提交的凭据和生物特征数据,以及基于和第一阶段相同的规则将用户提交的凭据和生物特征数据转换为请求矩阵,并向第二阶段确定的所述多个服务器节点发送所述请求矩阵;
所述多个服务器节点比较所述请求矩阵和各自持有的稀疏矩阵份额,包括计算所述请求矩阵和各自持有的稀疏矩阵份额之间的局部相似性;
之后,所述多个服务器节点向用户登入服务器节点反馈各自计算的局部相似性结果;
用户登入服务器节点基于平均的局部相似度结果触发撞库预警;
其中,将包含生物特征数据的稀疏矩阵M随机分割为n个份额M1,M2,…,Mn,每个份额包含所述稀疏矩阵M的一部分;
将稀疏矩阵M分割成n个子矩阵,每个子矩阵包含行的连续段,每个位置存储着链表的头节点指针;
之后,不同份额Mi被分发给不同的服务器或者节点,具体地:选择n个服务器或节点,记这些服务器为S1,S2,…,Sn;
根据稀疏矩阵M的大小p×q和服务器数量n,确定每个份额Mi的大小ri×q;令ri为分配给第i个服务器的行数;
按照以上定义的Mi,生成n个份额;
在分发之前,每个份额Mi被加密以保护数据;
其中,服务器节点S1,S2,…,Sn向用户登入服务器节点反馈各自计算的局部相似性结果;
用户登入服务器节点基于平均的局部相似度结果触发撞库预警;
用户登入服务器节点确定服务器节点S1,S2,…,Sn反馈各自计算的局部相似性结果的均值,当所述均值落入撞库预警区间时,触发撞库预警。
2.如权利要求1所述的基于隐私计算的防撞库方法,其特征在于,所述第一阶段中,当用户在系统中注册时,用户提供的凭据以及生物特征数据首先经过预定义的编码规则被转换为稀疏矩阵,包括定义矩阵维度,选择系数矩阵M的维度为p×q,之后将用户提供的凭据以及生物特征数据映射到所述稀疏矩阵中的特定位置;
所述用户提供的凭据为用户名和密码;
以及在用户修改密码时更新上述稀疏矩阵。
3.如权利要求2所述的基于隐私计算的防撞库方法,其特征在于,对于用户名中的第i个字符ui,映射函数f(ui)如下:f(ui)=(imodp,ASCII(ui)modq);
所述映射函数f(ui)产生一个二元组,其中:
第一个元素是用户名中字符的位置i对p取模的结果,这个结果决定了散列表中的行位置;
第二个元素是字符ui的ASCII码对q取模的结果,这个结果决定了散列表中的列位置;
i是字符在用户名中的索引;
x坐标为字符位置i对p取模的结果:x=imodp;
y坐标为字符的ASCII值对q取模的结果:y=ASCII(ui)modq;
用户名中第i个字符映射到矩阵M的位置为M[x][y]。
4.如权利要求2所述的基于隐私计算的防撞库方法,其特征在于,对于密码中的第j个字符pj,映射函数f(pj)如下:f(pj)=((len(username)+j)modp,ASCII(pj)modq);
上述映射函数f(pj)产生一个二元组,其中:
第一个元素是用户名的长度与密码中字符的位置j的和对p取模的结果;
第二个元素是字符pj的ASCII码对q取模的结果;
j是字符在密码中的索引;
x坐标为用户名长度和字符位置j的和对p取模的结果:x=(len(username)+j)modp;
y坐标与用户名映射相同,为字符的ASCII值对q取模的结果:y=ASCII(pj)modq;
密码中第j个字符映射到矩阵M的位置为M[x][y]。
5.如权利要求2所述的基于隐私计算的防撞库方法,其特征在于,对于数值向量V中的第k个元素Vk,映射函数f(Vk)如下,:f(Vk)=((len(username)+len(password)+k)modp,Vkmodq);
其中Vk是数值向量V中的第k个元素;
这里的映射函数f(Vk)产生的二元组包括:
第一个元素是用户名长度、密码长度和V的位置k的和对p取模的结果,这样可以确保用户名、密码和数值向量映射到的行位置互不冲突;
第二个元素是Vk对q取模的结果,由于Vk已经是一个数值,我们可以直接对q取模得到列位置;
x坐标(行)为用户名长度、密码长度和元素索引k的和对p取模的结果:x=(len(username)+len(password)+k)modp;
y坐标(列)为数值Vk对q取模的结果:y=Vkmodq;
数值向量V中第k个元素映射到矩阵M的位置为M[x][y];
对于生物特征数据B,提取特征F:F=ExtractFeatures(B);
其中Extractfeatures函数是一个根据生物特征类型定义的函数;并将特征F编码为数值向量V:V=Encode(F),Encode函数将提取的特征F转换为一个数值向量V。
6.如权利要求2?5任一项所述的基于隐私计算的防撞库方法,其特征在于,为对于每对映射结果(x,y),填充稀疏矩阵包括将矩阵M在(x,y)位置的值设为1;
或者,为对于每对映射结果(x,y),将矩阵M在(x,y)位置的值设为与映射到该位置的元素相关的信息,填充值为与元素信息对应的预定义的非零值。
7.如权利要求2?5任一项所述的基于隐私计算的防撞库方法,其特征在于,基于链表法解决映射冲突,对于存储矩阵M和链表节点的方式,有:初始化M为一个大小为p×q的二维数组矩阵M,每个位置M[x][y]存储一个链表的头节点指针;
链表节点包含值V和指向链表中下一个节点的指针;
对于每个映射结果(x,y),检查矩阵M的相应位置;针对位置(x,y)检查矩阵M:如果M[x][y]是空的,说明没有发生冲突,创建一个新的链表节点并设置为M[x][y]的值;
如果M[x][y]已经链接到一个链表,说明发生了冲突,将新节点添加到链表的末尾。
8.一种基于隐私计算的防撞库系统,所述系统包括用户登入服务器节点和至少一个服务器节点,所述系统用于实现权利要求1?7任一项的基于隐私计算的防撞库方法,其中,所述用户登入服务器节点用于接收用户提供的用户名和密码以及生物特征数据,转换稀疏矩阵、稀疏矩阵分割、分割后矩阵的分发,以及判定和触发撞库预警;
所述至少一个服务器节点用于存储分割后的矩阵,以及比较所述请求矩阵和各自持有的矩阵分份额,包括计算所述请求矩阵和各自持有的矩阵分份额之间的局部相似性。 说明书 : 基于隐私计算的防撞库方法及系统技术领域[0001] 本发明属于计算机技术领域,尤其涉及基于隐私计算的防撞库方法及系统。背景技术[0002] 随着信息技术的快速发展和互联网服务的普及,用户需要在多个平台上注册并使用账户和密码进行身份验证。这一过程中,用户的登录凭据(如用户名和密码)以及生物特征数据(如指纹、面部识别等)被广泛用于身份确认。然而,这些敏感信息的安全性成了公众关注的焦点。撞库攻击是一种常见的网络攻击手段,攻击者通过自动化工具尝试使用泄露的用户名和密码组合登录不同的网站,以此来识别用户的凭据在多个网站上的重用情况。[0003] 现有的撞库攻击防御方法或多或少都带来了用户体验上的不便,或者无法在早期阶段发出预警,从而防止攻击的进一步发展。此外,大多数防御系统都需要集中存储用户凭据和生物特征数据,这给数据安全带来了潜在风险。一旦安全防护措施被突破,所有用户的信息都可能一次性泄露,造成严重后果。[0004] 因此,亟需一种新的防撞库方法,既能提高系统的安全性,又能在不影响用户体验的前提下保护用户隐私。发明内容[0005] 针对上述现有技术中存在的缺陷,本发明提供一种基于隐私计算的防撞库方法,所述方法包括:[0006] 第一阶段的用户凭据处理中,用户登入服务器节点接收基于用户提交的凭据以及生物特征数据并转换成一个稀疏矩阵;[0007] 第二阶段的矩阵分割存储中,将所述包含生物特征数据的稀疏矩阵进行安全分割,并分布式存储在多个服务器节点中;[0008] 第三阶段的撞库检测阶段,当用户尝试登录时,在用户登入服务器节点中基于用户提交的凭据和生物特征数据,以及基于和第一阶段相同的规则将用户提交的凭据和生物特征数据转换为请求矩阵,并向第二阶段确定的所述多个服务器节点发送所述请求矩阵;[0009] 所述多个服务器节点比较所述请求矩阵和各自持有的稀疏矩阵份额,包括计算所述请求矩阵和各自持有的稀疏矩阵份额之间的局部相似性;[0010] 之后,所述多个服务器节点向用户登入服务器节点反馈各自计算的局部相似性结果;[0011] 用户登入服务器节点基于平均的局部相似度结果触发撞库预警。[0012] 其中,所述第一阶段中,当用户在系统中注册时,用户提供的凭据以及生物特征数据首先经过预定义的编码规则被转换为稀疏矩阵,包括定义矩阵维度,选择系数矩阵M的维度为p×q,之后将用户提供的凭据以及生物特征数据映射到所述稀疏矩阵中的特定位置;[0013] 所述用户提供的凭据为用户名和密码;[0014] 以及在用户修改密码时更新上述稀疏矩阵。[0015] 其中,所述第一阶段中,当用户在系统中注册时,用户提供的凭据以及生物特征数据首先经过预定义的编码规则被转换为稀疏矩阵,包括定义矩阵维度,选择系数矩阵M的维度为p×q,之后将用户提供的凭据以及生物特征数据映射到所述稀疏矩阵中的特定位置;[0016] 所述用户提供的凭据为用户名和密码;[0017] 以及在用户修改密码时更新上述稀疏矩阵。[0018] 其中,对于用户名中的第i个字符ui,映射函数f(ui)如下:f(ui)=(imodp,ASCII(ui)modq);[0019] 所述映射函数f(ui)产生一个二元组,其中:[0020] 第一个元素是用户名中字符的位置i对p取模的结果,这个结果决定了散列表中的行位置;[0021] 第二个元素是字符ui的ASCII码对q取模的结果,这个结果决定了散列表中的列位置;[0022] i是字符在用户名中的索引;[0023] x坐标为字符位置i对p取模的结果:x=imodp;[0024] y坐标为字符的ASCII值对q取模的结果:y=ASCII(ui)modq;用户名中第i个字符映射到矩阵M的位置为M[x][y]。[0025] 其中,对于密码中的第j个字符pj,映射函数f(pj)如下:f(pj)=((len(username)+j)modp,ASCII(pj)modq);[0026] 上述映射函数f(pj)产生一个二元组,其中:[0027] 第一个元素是用户名的长度与密码中字符的位置j的和对p取模的结果;[0028] 第二个元素是字符pj的ASCII码对q取模的结果;[0029] j是字符在密码中的索引;[0030] x坐标为用户名长度和字符位置j的和对p取模的结果:x=(len(username)+j)modp;[0031] y坐标与用户名映射相同,为字符的ASCII值对q取模的结果:y=ASCII(pj)modq;[0032] 密码中第j个字符映射到矩阵M的位置为M[x][y]。[0033] 其中,对于数值向量V中的第k个元素Vk,映射函数f(Vk)如下,:f(Vk)=((len(username)+len(password)+k)modp,Vkmodq);[0034] 其中Vk是数值向量V中的第k个元素;[0035] 这里的映射函数f(Vk)产生的二元组包括:[0036] 第一个元素是用户名长度、密码长度和V的位置k的和对p取模的结果,这样可以确保用户名、密码和数值向量映射到的行位置互不冲突;[0037] 第二个元素是Vk对q取模的结果,由于Vk已经是一个数值,我们可以直接对q取模得到列位置;[0038] x坐标(行)为用户名长度、密码长度和元素索引k的和对p取模的结果:[0039] x=(len(username)+len(password)+k)modp;[0040] y坐标(列)为数值Vk对q取模的结果:y=Vkmodq;[0041] 数值向量V中第k个元素映射到矩阵M的位置为M[x][y]。[0042] 其中,为对于每对映射结果(x,y),填充稀疏矩阵包括将矩阵M在(x,y)位置的值设为1;[0043] 或者,为对于每对映射结果(x,y),将矩阵M在(x,y)位置的值设为与映射到该位置的元素相关的信息,填充值为与元素信息对应的预定义的非零值。[0044] 其中,基于链表法解决映射冲突,对于存储矩阵M和链表节点的方式,有:[0045] 初始化M为一个大小为p×q的二维数组矩阵M,每个位置M[x][y]存储一个链表的头节点指针;[0046] 链表节点包含值V和指向链表中下一个节点的指针;[0047] 对于每个映射结果(x,y),检查矩阵M的相应位置;[0048] 针对位置(x,y)检查矩阵M:[0049] 如果M[x][y]是空的,说明没有发生冲突,创建一个新的链表节点并设置为M[x][y]的值;[0050] 如果M[x][y]已经链接到一个链表,说明发生了冲突,将新节点添加到链表的末尾。[0051] 其中,将包含生物特征数据的稀疏矩阵M随机分割为n个份额M1,M2,…,Mn,每个份额包含所述稀疏矩阵M的一部分;[0052] 将稀疏矩阵M分割成n个子矩阵,每个子矩阵包含行的连续段,每个位置存储着链表的头节点指针;[0053] 之后,上述不同份额Mi被分发给不同的服务器或者节点,具体地:选择n个服务器或节点,记这些服务器为S1,S2,…,Sn;[0054] 根据稀疏矩阵M的大小p×q和服务器数量n,确定每个份额Mi的大小ri×q;令ri为分配给第i个服务器的行数;[0055] 按照上述定义的Mi,生成n个份额;[0056] 在分发之前,每个份额Mi被加密以保护数据。[0057] 其中,服务器节点S1,S2,…,Sn向用户登入服务器节点反馈各自计算的局部相似性结果;[0058] 用户登入服务器节点基于平均的局部相似度结果触发撞库预警;[0059] 用户登入服务器节点确定服务器节点S1,S2,…,Sn反馈各自计算的局部相似性结果的均值,当所述均值落入撞库预警区间时,触发撞库预警。[0060] 本发明还公开了一种基于隐私计算的防撞库系统,所述系统包括用户登入服务器节点和至少一个服务器节点,所述系统用于实现前述的基于隐私计算的防撞库方法,其中,所述用户登入服务器节点用于接收用户提供的用户名和密码以及生物特征数据,转换稀疏矩阵、稀疏矩阵分割、分割后矩阵的分发,以及判定和触发撞库预警;[0061] 所述至少一个服务器节点用于存储分割后的矩阵,以及比较所述请求矩阵和各自持有的矩阵分份额,包括计算所述请求矩阵和各自持有的矩阵分份额之间的局部相似性。[0062] 本发明通过局部相似性计算和平均值比较,系统可以更精确地检测撞库攻击,并在早期阶段发出预警,从而防止攻击的进一步发展,适合于需要处理大量用户凭据和生物特征数据的大规模系统,[0063] 本发明提供了一种安全、隐私保护的用户验证机制,它通过分布式存储和局部相似性计算有效地减少了撞库攻击的风险,同时保护了用户的隐私信息。附图说明[0064] 通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:[0065] 图1是示出根据本发明实施例的基于隐私计算的防撞库方法的流程图;[0066] 图2是示出根据本发明实施例的基于隐私计算的防撞库系统的示意图。具体实施方式[0067] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。[0068] 在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。[0069] 应当理解,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述……,但这些……不应限于这些术语。这些术语仅用来将……区分开。例如,在不脱离本发明实施例范围的情况下,第一……也可以被称为第二……,类似地,第二……也可以被称为第一……。[0070] 应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。[0071] 取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。[0072] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者装置中还存在另外的相同要素。[0073] 传统的登录系统在处理生物特征数据和其他凭据时,可能会将用户的完整信息存储在单一服务器节点上,这可能导致隐私泄露的风险。本方法通过将数据转换为矩阵,并分割存储在多个服务器节点中,用户的生物特征数据和凭据不再以完整形式存储在任何单个服务器上,这使得即使在数据泄露或未授权访问的情况下,用户的隐私信息仍然得到保护,保护用户的隐私信息不被单点泄露。以及,本发明通过实时计算局部相似性并在超过平均局部相似度阈值时触发预警,系统能够有效检测潜在的撞库攻击行为,并采取相应措施防御。如图1所示,基于隐私计算的防撞库方法,所述方法包括:[0074] 第一阶段的用户凭据处理中,用户登入服务器节点接收用户提供的用户名和密码以及生物特征数据并转换成一个矩阵M。[0075] 第二阶段的矩阵分割存储中,将所述包含生物特征数据的矩阵M进行安全分割,并分布式存储在多个服务器节点中。[0076] 第三阶段的撞库检测阶段,当用户尝试登录时,在用户登入服务器节点中基于用户提交的凭据和生物特征数据,以及基于和第一阶段相同的规则将用户提交的凭据和生物特征数据转换为请求矩阵,并向第二阶段确定的所述多个服务器节点发送所述请求矩阵。[0077] 所述多个服务器节点比较所述请求矩阵和各自持有的矩阵分份额,包括计算所述请求矩阵和各自持有的矩阵分份额之间的局部相似性。之后,所述多个服务器节点向用户登入服务器节点反馈各自计算的局部相似性结果。[0078] 用户登入服务器节点基于平均的局部相似度结果触发撞库预警。如图2所示,基于隐私计算的防撞库系统,包括用户登入服务器节点和至少一个服务器节点,所述用户登入服务器节点用于接收用户提供的用户名和密码以及生物特征数据,转换稀疏矩阵、稀疏矩阵分割、分割后矩阵的分发,以及判定和触发撞库预警。所述至少一个服务器节点用于存储分割后的矩阵,以及比较所述请求矩阵和各自持有的矩阵分份额,包括计算所述请求矩阵和各自持有的矩阵分份额之间的局部相似性。[0079] 其中,触发撞库预警后,系统采取一系列安全措施,包括登录限制、IP封禁、二次验证启用、密码更改提示或用户通知等。[0080] 该方法通过分布式服务器节点的协作,以及对请求矩阵和持有份额之间相似性的精确计算与评估,为系统提供了一种有效的撞库检测和响应机制,增强了用户数据的安全性,并提升了整个系统的抵抗撞库攻击的能力。[0081] 在某一实施例中,阶段1的凭据矩阵编码中,包括:[0082] 用户凭据处理:[0083] 当用户在系统中注册时,用户提供的凭据(用户名和密码)以及生物特征数据首先经过预定义的编码规则被转换为一个矩阵M。这个过程可以包括将密码字符串的字符以及生物特征数据映射到矩阵中的特定位置。[0084] 以及在用户修改密码时更新上述稀疏矩阵。[0085] 在某一实施例中,生物特征提。:通过相应的传感器进行采集生物特征数据如指纹、虹膜、面部等首先。对采集到的原始数据进行清洗、去噪声等预处理操作,以提高数据质量。应用特定的算法提取生物特征的关键信息。最后将提取的特征转换成适合进行匹配和存储的格式。[0086] 在某一实施例中,使用传感器收集生物特征数据,如指纹扫描控件捕获的指纹图像。对采集的数据进行处理,例如去噪、对比度增强以及规范化等,以提高数据质量。通过算法识别并提取生物特征中的关键信息,如指纹中的脊线和细节点。将特征转换为数值表示,这涉及到将特征信息转换为固定长度的向量。[0087] 对于生物特征指纹,需要提取细节点(minutiae):[0088] Bminutiae=ExtractMinutiae(Braw);[0089] 其中Braw是原始指纹图像数据,Bminutiae是提取出的细节点信息。对于指纹,会提取岭线结束点和分叉点等特征。[0090] 将提取的特征转换成适合进行匹配和存储的格式,包括基于一个或多个映射函数进行特征转换:Bvector=EncodeFeatures(Bminutiae),这里Bvector是将生物特征转换成数值向量的结果。[0091] 现有技术中,OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了各种工具和算法来处理图像和进行特征提取。或者,有一些专门处理指纹图像的库和软件包,如SourceAFIS,NBIS(NISTBiometricImageSoftware),等等也提供了一些函数可以调用可以实现这些功能。[0092] 在某一实施例中,假设B是一个原始生物特征数据集,F是从B中提取的特征集,那么提取过程可表示为:F=ExtractFeatures(B);其中,ExtractFeatures是一个抽象的特征提取函数,它的具体实现依赖于所使用的生物特征类型和算法。[0093] 将特征F编码为一个数值向量V:V=Encode(F)。这里,Encode是一个将生物特征编码为数值向量的函数,将特征信息转换为固定长度的向量。[0094] 在某一实施例中,对于用户凭据处理,需要进行数值化,假设对每一个用户有一个密码字符串password和用户名username。[0095] 首先,需要将这些字符串数值化:[0096] 对于用户名中的字符ui,其ASCII值表示为ASCII(ui)。[0097] 对于密码中的字符pj,其ASCII值表示为ASCII(pj)。[0098] 对于生物特征数据B,提取特征F:F=ExtractFeatures(B)。其中Extractfeatures是一个根据生物特征类型定义的函数,如果选择基于指纹作为生物特征,对于指纹,会提取岭线结束点和分叉点等特征。并将特征F编码为数值向量V:V=Encode(F),Encode函数将提取的特征F转换为一个数值向量V。[0099] 定义矩阵维度,包括选择矩阵M的维度为p×q,其中p和q应该足够大,以便能够容纳编码后的所有凭据和生物特征数据。[0100] 映射凭据和特征到矩阵,具体地:[0101] 对于用户名和密码,有:[0102] 对于用户名中的第i个字符ui,映射函数f(ui)如下:[0103] f(ui)=(imodp,ASCII(ui)modq);[0104] 这里的映射函数f(ui)产生一个二元组,其中:[0105] 第一个元素是用户名中字符的位置i对p取模的结果,这个结果决定了散列表中的行位置。[0106] 第二个元素是字符ui的ASCII码对q取模的结果,这个结果决定了散列表中的列位置。[0107] i是字符在用户名中的索引(从1开始)。[0108] x坐标(行)为字符位置i对p取模的结果:x=imodp;[0109] y坐标(列)为字符的ASCII值对q取模的结果:y=ASCII(ui)modq。因此,用户名中第i个字符映射到矩阵M的位置为M[x][y]。[0110] 对于密码中的第j个字符pj,映射函数f(pj)如下:[0111] f(pj)=((len(username)+j)modp,ASCII(pj)modq);[0112] 这里的映射函数f(pj)也产生一个二元组,其中:[0113] 第一个元素是用户名的长度与密码中字符的位置j的和对p取模的结果。[0114] 第二个元素是字符pj的ASCII码对q取模的结果,和用户名映射中的列位置计算方式一样。[0115] j是字符在密码中的索引。[0116] x坐标(行)为用户名长度和字符位置j的和对p取模的结果:x=(len(username)+j)modp;[0117] y坐标(列)与用户名映射相同,为字符的ASCII值对q取模的结果:y=ASCII(pj)modq;[0118] 密码中第j个字符映射到矩阵M的位置为M[x][y]。[0119] 对于数值向量V中的第k个元素Vk,映射函数f(Vk)如下,:f(Vk)=((len(username)+len(password)+k)modp,Vkmodq);[0120] 其中Vk是数值向量V中的第k个元素。[0121] 这里的映射函数f(Vk)产生的二元组包括:[0122] 第一个元素是用户名长度、密码长度和V的位置k的和对p取模的结果,这样可以确保用户名、密码和数值向量映射到的行位置互不冲突。[0123] 第二个元素是Vk对q取模的结果,由于Vk已经是一个数值,我们可以直接对q取模得到列位置。[0124] x坐标(行)为用户名长度、密码长度和元素索引k的和对p取模的结果:[0125] x=(len(username)+len(password)+k)modp;[0126] y坐标(列)为数值Vk对q取模的结果:y=Vkmodq;[0127] 数值向量V中第k个元素映射到矩阵M的位置为M[x][y]。[0128] 最后,填充稀疏矩阵。[0129] 其中,对于上述过程中的参数解释如下:[0130] ui:用户名中的第i个字符。[0131] pj:密码中的第j个字符。[0132] ASCII(c):字符c的ASCII值。[0133] len(string):字符串string的长度。[0134] B:原始生物特征数据集。[0135] F:从B中提取的特征集。[0136] V:编码后的数值向量。[0137] Vk:向量V中的第k个元素。[0138] M:编码后的稀疏矩阵。[0139] p:矩阵M的行数。[0140] q:矩阵M的列数。[0141] f():映射函数,用于确定元素在矩阵中的位置。[0142] 可选地,为对于每对映射结果(x,y),填充稀疏矩阵包括将矩阵M在(x,y)位置的值设为1。[0143] 填充稀疏矩阵是将映射函数f的结果用来标记矩阵M的特定位置。将矩阵M在每个映射结果的位置(x,y)的值设置为1。[0144] 稀疏矩阵是一个大部分元素为零的矩阵,而非零元素的位置表示映射函数f下用户名、密码、和数值向量V中元素的位置。[0145] 具体操作如下:[0146] 1.初始化矩阵M的大小为p×q,所有值默认为0。[0147] 2.对于用户名中的每个字符,应用映射函数f(ui)得到(x,y)坐标。然后将矩阵M在(x,y)的值设置为1。[0148] 3.对于密码中的每个字符,应用映射函数f(pj)得到(x,y)坐标。然后将矩阵M在(x,y)的值设置为1。[0149] 4.对于数值向量V中的每个元素,应用映射函数f(Vk)得到(x,y)坐标。然后将矩阵M在(x,y)的值设置为1。[0150] 可选地,为对于每对映射结果(x,y),将矩阵M在(x,y)位置的值设为与映射到该位置的元素相关的信息,填充值为与元素信息对应的预定义的非零值。[0151] 预定义的非零值填充方式如下:[0152] 对于用户名中的第i个字符ui:M[x][y]=a。其中x=imodp和y=ASCII(ui)modq。对于用户名中的第i个字符ui的填充值选择一个值a,如a=1。[0153] 对于密码中的第j个字符pj:M[x][y]=b。其中x=(len(username)+j)modp和y=ASCII(pj)modq。即对于密码中的第j个字符pj的填充值,选择另一个值b,如b=10。[0154] 对于数值向量V中的第k个元素Vk:M[x][y]=c。其中x=(len(username)+len(password)+k)modp和y=Vkmodq。对于数值向量V中的第k个元素Vk对应的填充值,可以选择领一个常数c,如c=2。[0155] 将矩阵M在(x,y)位置的值设为与映射到该位置的元素相关的信息,可以减少被撞库成功的概率,使得存储信息更加的安全。[0156] 在某一实施例中,每次映射都可能覆盖之前的值,为了使得尽可能地每个元素都被映射到一个独立的位置。减少覆盖发生,从而使得矩阵M成为一个有效的存储结构,减少了冲突并提高了检索效率,选择p和q为质数可以帮助减少映射冲突,因为这使得模运算的结果能够更均匀地分布在矩阵中。此外,设置p和q的值越大,矩阵M更加稀疏,发生映射冲突的概率更低。[0157] 在某一实施例中,虽然设置较大的p和q的值,以及设置p和q为质数可以减少映射冲突的概率,但如果发生了映射冲突,为了在后续进行验证时能够恢复出映射,基于一个能够记录冲突信息并在查询时进行相应寻找的链表,它能够在不改变原始散列位置的情况下存储所有冲突的元素。[0158] 在某一实施例中,基于链表法解决映射冲突,包括:[0159] 针对位置(x,y)检查矩阵M:[0160] 如果M[x][y]是空的(没有发生冲突),创建一个新的链表节点并插入值V:M[x][y]→Node(V)。[0161] 如果M[x][y]已经有一个链表(发生冲突),将值V添加到链表的末尾:M[x][y]→Node(V1)→Node(V2)→…→Node(V),其中V1,V2,…,V是已经插入到链表中的值。[0162] 这种方法确保了即使多个值映射到了同一散列位置,后续也可以通过遍历链表来恢复所有的映射关系。[0163] 具体地,对于存储矩阵M和链表节点的方式,有:[0164] 矩阵M:初始化M为一个大小为p×q的二维数组,每个位置M[x][y]可以存储一个链表的头节点指针。[0165] 链表节点:链表节点包含值V和指向链表中下一个节点的指针。对于每个映射结果(x,y),检查矩阵M的相应位置。[0166] 如果M[x][y]是空的,说明没有发生冲突,创建一个新的链表节点并设置为M[x][y]的值。[0167] 如果M[x][y]已经链接到一个链表,说明发生了冲突,将新节点添加到链表的末尾。[0168] 其中,对于将矩阵M在每个映射结果的位置(x,y)的值设置为1的情形,链表节点中的每个值是0或1。[0169] 其中,对于将矩阵M在(x,y)位置的值设为与映射到该位置的元素相关的信息的情形,包括对于每个元素,也根据其类型确定要填充的预定义非零值V(对用户名、密码、数值向量分别为a,b,c)。[0170] 检查矩阵M中对应位置的链表:[0171] 如果该位置为空,即M[x][y]是空的,创建一个新的链表节点并插入值V,然后设置M[x][y]指向该节点。如果该位置已有链表,即M[x][y]指向一个链表,将新节点添加到链表的末尾。[0172] 遍历链表来恢复映射关系当需要获取M中某个位置的所有映射值时,访问该位置的链表头节点。从头节点开始,遍历链表,直到到达链表的末端(下一个节点指针为空)。[0173] 在遍历过程中,收集链表节点中存储的预定义非零值V,这些值就是映射到同一散列位置的所有元素的相关信息。[0174] 该链表法确保了在一个散列位置映射了多个值的情况下,能够通过遍历链表恢复所有的映射关系以及对应的预定义非零值。[0175] 在用户修改密码时,需要更新稀疏矩阵。具体包括:[0176] 首先,确定旧密码中每个密码字符的映射位置。对于密码中的第j个字符pj,映射函数f(pj)如下:f(pj)=((len(username)+j)modp,ASCII(pj)modq)。即对于旧密码中的第j个字符pj,其位置由x和y决定,其中x=(len(username)+j)modp和y=ASCII(pj)modq。[0177] 由于密码修改后,x值不变,但y值可能变化,所以需要对每个旧密码字符的位置进行访问。[0178] 然后需要移除旧密码信息,具体为:[0179] 遍历旧密码,对于每个字符pj,找到对应的链表M[x][y]。[0180] 在该链表中,查找包含值b(密码字符对应的预定义非零值)的节点,并将其移除。[0181] 如果节点在链表头部,直接将头指针指向下一个节点。[0182] 如果节点在链表中间或末尾,需要调整前一个节点的指针,以指向当前节点的下一个节点,然后释放当前节点的内存。[0183] 最后,插入新密码信息,包括:[0184] 确定新密码中每个字符的映射位置。对于新密码中的第j个字符pj′,其位置由x和y决定,其中x保持不变,y=ASCII(pj′)modq。[0185] 对于新密码中的每个字符pj′,在对应的链表M[x][y]中插入一个新节点,包含值b[0186] 如果新密码字符映射到的M[x][y]已经有一个链表,需要将新节点添加到链表的末尾。[0187] 如果M[x][y]是空的,则创建一个新的链表节点并插入值b,然后设置M[x][y]指向该节点。[0188] 阶段2:矩阵分割存储[0189] 将包含生物特征数据的矩阵M随机分割为n个份额M1,M2,…,Mn,每个份额包含矩阵的一部分。具体包括:[0190] 矩阵M是一个p×q的二维数组,其中每个元素M[x][y]存储了一个链表的头节点指针。矩阵M可以表示如下:[0191][0192] 其中,M[x][y]∈LinkedListNode*表示M[x][y]是指向一个链表节点的指针。[0193] 分割矩阵M,包括:[0194] 将矩阵M分割成n个较小的子矩阵M1,M2,…,Mn,并且每个子矩阵都有r行,其中r是满足r×n≤p的最大整数。每个子矩阵Mi可以表示为:[0195][0196][0197] 对于最后一个子矩阵Mn,如果p不能被n整除,那么它将包含所有剩余的行:[0198][0199] 通过上述过程将矩阵M分割成n个子矩阵,每个子矩阵包含行的连续段,而每个位置仍然存储着链表的头节点指针。[0200] 之后,上述不同份额Mi被分发给不同的服务器或者节点,分割存储可以确保即使部分份额被泄露,也不会导致凭据和生物特征数据的泄露。[0201] 其中,选择n个服务器或节点,记这些服务器为S1,S2,…,Sn。根据矩阵M的大小p×q和服务器数量n,确定每个份额Mi的大小ri×q。令ri为分配给第i个服务器的行数。[0202] 按照上述定义的Mi,生成n个份额。[0203] 可选地,在分发之前,每个份额Mi应被加密以保护数据。使用密钥Ki加密第i个份额,产生加密后的份额E(Mi)。E(Mi)=Encrypt(Mi,Ki)。安全地将加密的份额E(Mi)分发给相应的服务器Si。以及,使用TLS/SSL加密的连接。每个服务器在接收到加密份额E(Mi)后进行验证。验证通过后,服务器存储加密份额。可选地,选择分发服务器节点时,基于服务器节点所在的地理位置的分布确定,以减少延迟问题。[0204] 阶段3:撞库检测阶段当用户尝试登录时,在用户登入服务器节点中基于用户提交的凭据和生物特征数据,以及基于和阶段1相同的规则将用户提交的凭据和生物特征数据转换为请求矩阵Mreq。[0205] 向阶段2确定的服务器节点S1,S2,…,Sn发送所述请求矩阵Mreq。不同服务器节点S1,S2,…,Sn比较Mreq和各自持有的矩阵分份额Mi,包括计算Mreq和Mi之间的局部相似性。[0206] 其中,计算局部相似性的过程如下:[0207] 定义以下参数:[0208] p:矩阵的总行数。[0209] q:矩阵的总列数。[0210] Lreq(x,y):请求矩阵Mreq在坐标(x,y)处的链表。[0211] Li(x,y):服务器节点Si持有的矩阵份额Mi在坐标(x,y)处的链表。定义sim(L1,L2)是两个链表的相似性函数,有:[0212][0213][0214] 其中,参数定义如下:[0215] L1和L2:待比较的两个链表。[0216] len(L1)和len(L2):链表L1和L2的长度。[0217] numberofmatchingelementsinL1andL2:链表L1和L2中匹配元素的数量。[0218] max(len(L1),len(L2)):链表L1和L2长度的最大值。[0219] sim函数计算两个链表L1和L2中匹配元素的数量,然后将其除以两者长度的最大值,以获取标准化的相似性得分。[0220] 对于子矩阵Mi与请求矩阵Mreq,局部相似度localsimilarityi可以定义为:[0221][0222] 其中,[0223] xi代表子矩阵Mi在原始矩阵M中的起始行索引,xi=(i?1)·r。Lreq(xi+x,y)代表请求矩阵Mreq在坐标(xi+x,y)的链表。[0224] Li(x,y)代表子矩阵Mi在坐标(x,y)的链表。[0225] sim()是两个链表的相似性函数。[0226] 在某一实施例中,对于预定义的非零值填充方式,计算局部相似性的过程如下:[0227] 链表的加权相似性函数weighted_sim表示为:[0228][0229] 其中count(e,L1,L2)是元素e在两个链表L1和L2中匹配的次数。len(L1)和len(L2):链表L1和L2的长度。max(len(L1),len(L2)):链表L1和L2长度的最大值。[0230] 局部相似度计算公式如下:[0231][0232] 其中,Lreq(xi+x,y)是请求矩阵Mreq在坐标(xi+x,y)的链表,Li(x,y)是子矩阵Mi在坐标(x,y)的链表。[0233] 权重weights是一个映射,它根据元素值映射到相应的权重a、b或c:weights={1:a,10:b,2:c}。[0234] 其中,参数定义包括:[0235] a:权重,用于衡量用户名字符的重要性。b:权重,用于衡量密码字符的重要性。c:权重,用于衡量数值向量元素的重要性。p:整数,表示矩阵的总行数。q:整数,表示矩阵的总列数。ri:整数,表示子矩阵Mi的行数。xi:整数,表示子矩阵Mi在原始矩阵M中的起始行索引。L1和L2:两个链表,每个链表中的元素包含了对应矩阵条目的信息。weights[e]:映射函数,返回与元素e相关联的权重。count(e,L1,L2):函数,计算元素e在链表L1和L2中出现的次数。Lreq(xi+x,y):函数,返回请求矩阵Mreq在位置(xi+x,y)的链表。Li(x,y):函数,返回子矩阵Mi在位置(x,y)的链表。[0236] 上述过程通过权重a、b和c考虑了不同属性的重要性,通常来说,对密码属性的元素设置最高的权重。[0237] 之后,服务器节点S1,S2,…,Sn向用户登入服务器节点反馈各自计算的局部相似性结果。用户登入服务器节点基于平均的局部相似度结果触发撞库预警。[0238] 可选地,用户登入服务器节点确定服务器节点S1,S2,…,Sn反馈各自计算的局部相似性结果的均值,当所述均值落入撞库预警区间时,触发撞库预警。[0239] 撞库预警区间是一个特定的数值范围,用于识别异常行为。当计算出的平均相似度落入这个预警区间时,系统会认为有撞库攻击的嫌疑,并触发预警。[0240] 正常用户的登录行为可能会因为常用密码或用户名的相似性而产生一定程度的相似度,但这并不意味着存在撞库行为。撞库攻击通常会产生特定范围内的相似度模式,因为攻击者可能会尝试大量不同的用户名和密码组合来尝试登录。[0241] 如果均值太低,这可能意味着尝试的用户名和密码与服务器上的数据差异很大,这并不符合典型的撞库模式。[0242] 如果均值太高,这可能表示是正常用户的登录行为而非大规模的撞库行为。[0243] 只有当均值落在一个特定的中间区间,才满足撞库行为的特征,因为这表示攻击者尝试了一系列可能在数据库中存在的凭证,从而产生了一定程度的相似度,但又不是特别高,以至于看起来像是针对特定账户的攻击。[0244] 为了精确设定预警区间,需要对过往的登录尝试数据进行统计分析,以确定正常登录和撞库攻击的相似度分布,从而设定一个能够有效区分两者的区间。这个区间的设定需要定期根据最新数据进行调整,以保持检测系统的准确性和有效性。[0245] 此外,可以对不同用户适应性地设置不同的预警区间,对高风险用户(如高等级用户被攻击风险更高),预警区间的上线可以提高,即高风险用户的预警区间的上线高于低风险用户,以提高账户的对抗撞库能力。[0246] 可选地,用户登入服务器节点根据服务器节点S1,S2,…,Sn反馈各自计算的局部相似性结果中,落入撞库预警区间的节点数大于阈值时,触发撞库预警。[0247] 在这种撞库预警机制中,用户登录服务器节点需要收集各个服务器节点S1,S2,…,Sn计算的局部相似性结果,并判断这些结果中有多少落入了预设的撞库预警区间。如果落入此区间的节点数超过了一个预定的阈值,那么系统会触发撞库预警。[0248] 每个服务器节点Si计算它持有的数据与用户登录请求的数据之间的局部相似性。根据历史数据和安全策略,定义一个撞库预警区间。这个区间是一个相似度值的范围,被认为是撞库行为的特征相似度区间。用户登录服务器节点统计有多少个服务器节点反馈的局部相似性结果落入了预警区间。设定一个阈值T,它代表了落入预警区间内的节点数的最小值,超过这个值时认为系统可能遭受撞库攻击。如果落入撞库预警区间的节点数count大于或等于阈值T,即count>=T就会触发撞库预警,在这个判定条件下,如果落入预警区间的节点数超过了阈值T,用户登录服务器节点将触发撞库预警。[0249] 可选地,用户登入服务器节点触发撞库预警后,将采取进一步的安全措施,包括以下至少之一:[0250] 对触发预警的IP地址或用户账户施加临时的登录限制,如增加登录延迟、限制短时间内的登录尝试次数,或暂时禁止登录。[0251] 将检测出的恶意IP地址加入黑名单,阻止它们进一步访问服务器。对疑似受到撞库攻击的账户启用二次验证(如短信验证码、电子邮件确认、或使用身份验证器应用程序)来验证用户的身份。[0252] 强制或提示用户更改密码,特别是对那些密码强度较低或长时间未变更密码的账户。[0253] 通过邮件或应用内通知等方式警告用户可能存在的账户危险。[0254] 本发明通过局部相似性计算和平均值比较,系统可以更精确地检测撞库攻击,并在早期阶段发出预警,从而防止攻击的进一步发展,适合于需要处理大量用户凭据和生物特征数据的大规模系统。[0255] 本发明提供了一种安全、隐私保护的用户验证机制,它通过分布式存储和局部相似性计算有效地减少了撞库攻击的风险,同时保护了用户的隐私信息。[0256] 需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD?ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。[0257] 上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。[0258] 可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。[0259] 附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。[0260] 描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。[0261] 以上介绍了本发明的较佳实施方式,旨在使得本发明的精神更加清楚和便于理解,并不是为了限制本发明,凡在本发明的精神和原则之内,所做的修改、替换、改进,均应包含在本发明所附的权利要求概括的保护范围之内。

专利地区:河南

专利申请日期:2024-03-12

专利公开日期:2024-10-22

专利公告号:CN118171315B


以上信息来自国家知识产权局,如信息有误请联系我方更正!
该专利所有权非本平台所有,我方无法提供专利权所有者联系方式,请勿联系我方。
电话咨询
到底部
搜本页
回顶部
开云优惠体育(中国)官网 — 开云优惠体育app下载