微服务架构系列二:密码强度评测的实现与实验

640?wx_fmt=gif

本文是继《微服务架构系列一:关键技术与原理研究》的后续,系列一中论述了微服务研究的背景和意义,主要调研了传统架构的发展以及存在的问题和微服务架构的由来,然后针对微服务架构的设计原则、容器技术、服务发现、通信机制、持续集成等方面进行了分析与研究,并简单讲述了谷歌Kubernetes的相关组件和原理。系列二依据系列一中讲述的相关技术,进行了业务原理分析和建模,然后一步步实现了基于机器学习的密码强度评测服务,搭建相关环境并部署编排服务和进行了相关验证,最后对微服务架构设计进行了总结和展望,并简单概述了后续系列的工作。

基于机器学习的密码强度评测微服务实现

随着互联网技术的迅猛发展和广泛应用,在数据信息日益敏感的当下,网络安全问题也变得日益严峻。加上数字化和网络化在生活中的普及,防止数据遭到未经授权访问变得越来越重要,由于便于理解,使用简单和部署成本低,自从互联网诞生以来,文本密码几乎应用于需要保护我们的数据的每一个地方,尽管它们有许多已知的缺陷[1][2][3]。评测密码强度的方式有很多,除了常规的基于字符种类规则,也有借助猜测熵和最小熵对密码强度进行估计的研究[4],基于模糊概率上下文无关语法的密码强度估计[5]。


机器学习是人工智能领域中最能体现智能的分支,从历史看,机器学习也是人工智能领域发展最快的分支之一[6]。本章节会通过机器学习方法去对密码强弱进行分类,并通过Python把对应算法即K最近邻算法,决策树算法实现成微服务,供上游调用,以组成整体微服务架构中核心业务部分。另外因为机器学习相关算法研究及实现不是本文重点,同时鉴于时间和篇幅,对于朴素贝叶斯、多层感知器、支持向量机等其它适用于密码强度评测的机器学习算法,在本文就不做讨论和相关具体实现了,而且已经有相关研究对其它几种算法进行了可行性论述[7][8],后续可能会通过发起Github上的开源项目去继续研究和探讨。


1. K-最近邻算法

K 最近邻算法 (k-Nearest Neighbor),简称KNN,是一个在理论上比较成熟的算法,也是目前最简单的机器学习算法之一,它是一种惰性学习算法(分类器不需使用训练数据集进行训练,训练的时间复杂度为0,有利有弊,与其它惰性学习算法一样,KNN的计算复杂度会随着训练集的空间大小增大而增大,也就是说分类复杂度为O(n)),是在1968年由 Cover 和Hart 提出的。该算法的思想是:如果一个样本它的特征空间中,有K个最相似也就是最邻近的样本的大多数都属于一个分类,那么这个样本也属于这个分类。当然算法的前提是,所选的K个样本都是经过正确分类过的,一般K是不大于20的整数。一句话概括就是找到离自己最近的K个点中的大多数同一分类的类别作为自己的类别。


距离计算数学描述:

对于任意的特征向量x:

640?wx_fmt=png

ar(x)表示实例x的第r个属性值,两个实例xixj之间的距离定义为d(xi xj)

根据欧式距离公式:

640?wx_fmt=png

训练算法:

对于每个训练实例<x,f(x)>,把这个样本加入训练实例列表中

分类算法:

给定一个要分类的查询实例x,在训练实例列表中选出最邻近xq的k个实例,并用x1…xk来表示,定义离散目标函数

640?wx_fmt=png

V是有限集合{v1,v... vs},则

640?wx_fmt=png

其中如果a=b那么

640?wx_fmt=png

否则

640?wx_fmt=png

对前面的K最近邻算法做一下简单修改,使其能被用于逼近连续值的目标函数,为了达到此目标,我们只需要让算法计算K个最临近实例的平均值,而不再是计算其中的最普遍的值,定义实值目标函数

640?wx_fmt=png

640?wx_fmt=png

2. 决策树

决策树(Decision Tree),顾名思义,是一种树——依托策略抉择而建立的树。在机器学习里面,它是一个预测模型,它所代表的是一个对象的属性和值之间的映射关系。决策树是应用最广的归纳推理算法之一,属于监督学习中的一种,所谓监督学习,就是给定一定数量的都有属于自己的一些属性以及类别的样本。其中类别是根据数据本身属性确定的,然后,通过对样本数据进行训练学习得到一个分类器,得到的分类器可以对新出现的实例进行分类,这种机器学习方式就被称为监督学习。


我们可以用下面的箭线图1-1来形象的表示决策的过程的各个阶段之间的联系。

640?wx_fmt=png

图1-1 决策树决策过程关系图 


选择分割的方法可以有很多,但最终目的一致:也就是对目标类尝试进行最佳分割,由于从根到叶子有多条路径,一条规则对应一条路径,很明显,决策树是一颗二叉树或多叉树。


决策树有四种构成要素,决策结点、状态节点、方案枝、概率枝。决策结点也叫方块结点;状态结点又叫圆形结点;决策结点引出若干条分支每条分支代表一个方案,故称方案枝;状态结点又会引出很多分支,代表不同的状态,由于上面会反映客观状态和出现的频率,每个分支又被称为概率枝,在概率枝的末端会有该状态下所达到结果也就是权重值。如图1-2所示。

640?wx_fmt=png

图1-2 决策树图标示例


决策树分类的思想跟大学报志愿类似,我们会考虑,学校层次是名校、985还是211等,然后地域是南方还是北方、专业是否热门等因素,不同的因素不同的人会有不同的侧重,所谓因人而异,那么就需要具体情况具体分析和决策。如果把每一个未知的选项都归类到已有的分类类别中就形成了一颗决策树。

 

3. 训练数据准备

训练数据是利用了2014年俄罗斯黑客在网上公布的近500万Gmail邮箱及对应密码,再加上密码强度分类——把这部分密码重新请求谷歌密码强度验证服务https://accounts.google.com/RatePassword得到的与相应密码对应的密码强度数据。技术上是通过PHP来抓取的,因为模拟请求比较简单,主要是用Curl伪造User-Agent等相关Header,借助于multi_exec,并发100,速度还是比较快的,不到一天就抓完了。需要注意的是谷歌服务器对IP访问有一定的限制,所以这部分操作是事先在网络上寻找免费的代理IP,集合到共享内存,然后用另外一个脚本去取IP并用此IP访问百度,如果HTTP请求在一秒钟返回200,在给当前IP权值加1,一秒钟未返回或返回非200,则减1,加1最大到7,减1最小到-3,一段时间后,就会有一个相对活跃的IP池,供抓取脚本随机选取利用。


之所以抓取谷歌密码强度数据,是因为在调研了包括12306注册,百度账号注册,腾讯QQ注册,阿里的淘宝注册,Microsoft Bing,Facebook账号注册,Google Gmail注册等相对较大的网站后发现,除了Facebook对于非法或简单密码是通过服务端返回比较有意思的"请选择更安全的密码。密码必须多于 6 个字符,并且对你意义独特,使其他人难以猜出。"信息,Google是通过前端返回最短长度提示以及服务端返回弱,一般,较强,强的密码强度提示外,其它网站及应用都是通过纯前端的规则来进行限制和提示,比如字符的长短,数字,大小写,特殊字符的种类多少等。


4. 数据预处理

密码按长度和字符类型划分为五个维度,分别是密码长度,是否含有数字,是否含有大写字母,是否含有小写字母,是否含有特殊字符。程序简单实现如图1-3所示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值