基于口令的攻击分析与防御设计

2018-10-17 01:47◆徐
网络安全技术与应用 2018年10期
关键词:服务器端哈希口令

◆徐 军



基于口令的攻击分析与防御设计

◆徐 军

(山东理工大学计算机科学与技术学院 山东 255049)

使用口令的目的是为了对用户进行认证,防止各种攻击及非法登录行为。为了抵抗暴力攻击、字典攻击、彩虹表攻击、中间假冒攻击等手段,对口令认证的原理以及使用的关键技术进行了综述分析,在此基础之上,利用哈希技术、加盐技术和慢哈希技术设计了一个简单有效、易于编程实现的口令认证方案,方案计算量可调控,安全强度较高,能抵抗一般常见形式的网络攻击。

口令认证;哈希;加盐;慢哈希;攻击

0 引言

口令认证是最常用的方法,我们无论登录什么系统都要用到账户与密码,现实中web系统面临许多的威胁,而对口令的攻击是手段和目的最直接的攻击,取得口令即可实现入侵。同时,服务器端的口令数据库也是网络入侵的高价值目标。在编程实践与相关教学中,看似简单的口令技术,我们发现大量偏差的理解与错误的用法,本研究试图对口令攻击、防御技术给出系统化的、全面的分析,并提出口令加固的方法、方案,以提高口令认证的应用水平。

1 口令认证形式与存储

一般,口令认证基于客户机/服务器(C/S)模式。客户端提交账户、口令,经网络传输至服务器端进行认证。主要的威胁关键点有两个,一在网络传输过程,要防止窃听;二是服务器端口令的存储,不能泄露口令的明文,甚至要在网站被入侵,口令被“拖库”的情况下,也要保证口令不能被破解。

务器端的口令数据库不能存储明文的口令,口令在服务器端的存储形式决定了采用什么样的安全技术与认证方案。将口令变换的技术称为哈希技术。表1为服务器端常见的简单存储结构,只包含两个字段:username 、passwordhashvalue,passwordhashvalue采用公开常规MD5工具计算得出,其对应的明文口令值为(“20180602”, “Dia-loutes”, “My love”)。

表1 服务器端口令存储结构

2 口令认证方案的关键技术

基于口令认证的关键技术主要包括哈希函数、口令加盐技术公钥密码技术等,实际的认证方案是几种技术的综合运用。

2.1 哈希函数技术

哈希函数是一种人为设计性质特殊的函数,一般用来实现保密、认证和消息完整性保护,也是安全认证协议、数字签名算法的重要组成部分。

Hash函数H具备以下几个基本特性:

(1)输入x可以为任意长度;输出数据串长度固定,128bit或256bit;

(2)单向性,正向计算实现容易,即给定任何x,容易算出H(x);而反向计算实现困难,即给出一Hash值h,很难找出一特定输入x,使h=H(x);

(3)抗冲突碰撞性,即对于任意两条消息x、y,使得H(x)=H(y)在计算上是不可行的;

函数单向性决定了即使取得口令的哈希值也不可能从中恢复出口令, 因此能应对网络窃听,网站内部人员也看不能明文口令,能防止一般的字典攻击和暴力破解(Dictionary and Brute Force Attacks)。

ash函数安全性是不够的,破解Hash的原理是,对于给出的一个y,反算出一个x来满足y = H(x),因其直接计算是不可能的,目前一般采用查表法,即设计一个大型字典表,记录下尽可能多的x与y的对应关系,直接查表匹配。

瑞典的Philippe Oechslin在2003年提出了一种高效破解windows开机密码的时空折中算法[1],这就是“彩虹表Rainbow”技术,主要针对破解Windows Xp开机认证的LM-HASH算法。根据这个原理,同样可以用于破解SHA、MD5等算法。

该算法的原理是预先计算得到一个较大的表,对于一个给定的hash值,在表内进行查找,破译速度快,效率高。彩虹表的核心是精心设计的R函数,该函数的定义域是hash函数的值域,值域是合理的输入域,R函数使用哈希链方法计算各哈希值的与之对应值,并进行储存,查表时根据哈希值从头节点开始做H、R交替运算,直到某个hash值和给定hash值相等,或者找到尾节点,就会得到一个与用户输入等价的密码。[2]提供了针对LM、NTLM、MD5、SHA1等常用算法的彩虹表下载。

2.2 口令加盐技术

防御彩虹表攻击,最好用的方法就是加盐(salt)。“盐”的实质就是一个具有一定长度的随机数串,加盐的结果使密码更长,强度更高,使彩虹表逆推的难度也更大,使用攻击手段进行撞库时运算量更大,破解的难度更高。

基本加盐过程:

图1 口令加盐过程

加盐算法后,服务器端的存储结构变为表2的形式:

表2 加盐哈希表

这里,服务器端存储的其实是H(password)+salt value。在登录界面,客户端程序要与服务器端协商一个盐值数据,同时与密码的哈希值结合,传输给服务器端验证,网络信道传输的是内容是H(password+salt)或者H(H(password)+salt),这样,攻击者即使通过彩虹表找到了特定hash值对应的密码,也无法得到用户输入的密码,甚至根本得不到密码。如果攻击者获得盐值以及其位置,破解时也需要对R函数重新设计修改,因此已有的彩虹表数据就会完全失去作用。

存储盐值明文会降低安全性,实际编程时,一般要采取不同的加盐方案。文献[3]中采用了伪随机数生成器的加盐哈希算法,大大增强了口令认证安全性。

如果知道加盐的方式或盐值泄露,攻击者通过重新构造彩虹表或者暴力遍历就能够实现破解,所以加盐技术方案需要遵循几个基本原则:

(1)静态不变的salt、明文存储的salt不能使用。

(2)salt 要具有一定的安全长度。

(3)salt最好是随机的,由服务端的随机函数生成。

(4)服务器不能存储用户口令加盐的hash结果。

(5)salt库和口令密码库尽量分离开存放。

2.3 慢哈希技术

加入干扰项后使攻击者无法采用特定的查询表和彩虹表快速破解大量哈希值,但是却不能防止最原始的字典攻击或暴力攻击。攻击者可在web前端大量尝试各种密码可能,在高速强大的计算能力面前,哈希函数显得很脆弱,为了应对这种对密码的字典攻击或暴力攻击,可以采取慢哈希技术。慢哈希技术的思想就是通过重新设计哈希函数,把哈希函数变得很慢,让字典攻击和暴力攻击者耗费大量的机器时间,将破解的代价变得不可接受;同时这种缓慢对单个用户登录又不会造成大的影响。

图2 慢哈希技术

显然,慢哈希算法也有着明显的缺点,它在消耗对手计算资源的同时,也消耗自己的大量计算资源。如果遇到恶意用户,发起大量的登录请求,服务器端会造成资源被耗尽,不能提供正常服务。所以,上图中的方案中,将慢哈希的计算放在了web前端。

慢哈希函数的设计有很多方法,最简单的方法就是对原哈希函数做循环计算,但我们一般提倡使用标准的慢哈希函数,主要有PBKDF2或者Bcrypt。

3 口令加固方案设计

基于上述详细分析,我们可以得出结论,如果在网络应用编程中使用口令认证方式,至少应满足如下条件:

(1)口令不可以明文在网络上传输,应该使用哈希函数。

(2)即使被拖库,也无法还原用户密码。

(3)应该有能力应对暴力破解、字典攻击。

(4)应该有能力应对查表攻击与彩虹表攻击。

(5)应该不占用过大的计算资源。

(6)应该易于编程实现。

3.1 方案设计

因此,认证方案中应该包括的技术有哈希技术、加盐技术,若欲达到一定的安全强度,则须考虑在web前端采用慢哈希技术,慢哈希的计算速度应该由服务器端来确定。

假定:注册阶段已完成,此时,客户端已拥有账号与密码;服务器端已建立起用户密码库,存储模式为(userid, password_hash),盐值单独存放,防止拖库,存储模式为(userid,salt_hash,cost),其中cost字段为慢哈希代价,用来指定客户端的慢哈希速度,cost值越大,web端运行越慢。

则登录阶段的协议描述为:

(1)客户端以userid发起登录请求。

(2)服务器端响应,生成一随机盐值salt=random(),h(salt)存储,选定cost值,将cost、salt发送。

(3)客户端计算r= PBKDF2( PRE, Password, Salt, cost, LEN),发送。PRE为随机函数,LEN为输出长度。

(4)服务端收到r,与自己计算的PBKDF2 (password, salt, cost)比较,若相等,则存储于password_hash字段,通过认证。若不相等则丢弃。

3.2 方案分析

此方案设计相当简洁,只用到2 次交互,计算量取决于慢哈希速度,但计算量可控,能够满足上面提到的6个条件。

在方案中采用了加盐的hash技术,并且,盐值由服务端随机生成,且每次登录都不会相同,所以能够抵抗查表法、彩虹表法的攻击。

由于使用了PBKDF2慢哈希函数,因此对暴力破解、字典攻击有较好的效果。

显然,慢哈希会增大服务器的计算量,在这里我们采取了一种折中方案,也就是说,双方的运算量由服务器决定,服务器可根据自己的网络负载情况,选择cost值,并且将此值发送web客户端。cost值越大,运算量越大,速度越慢。

几种特殊情况:

(1)假定攻击者网络监听,窃取了userid,然后实行假冒攻击,但他无法对服务器发送来的cost、salt计算出r,即使他知道函数PBKDF2,也无法知道password。

(2)因监听导致单个盐值泄露,因为盐值是随机、一次性的,攻击者构造彩虹表是困难的。

(3)最坏的情况,服务器被拖库,但攻击者拿到的不是密码明文、盐值明文,而是哈希变换过的值,且密码是经过加盐存储的,破解难度很大。

4 总结

口令认证是目前普遍使用的方式,但口令方式并不是一种简单的方式,方案越简单,意味着越不安全;口令认证也不是一种廉价的方式,如果综合考虑登录、密码更新协议,口令认证其实较复杂。因此设计方案时,须权衡安全级别与资源占用代价,尽可能堵住已知漏洞,正确选择方案中的参数,比如盐值不能太短,哈希函数的位数等;灵活使用目前的密码设计的关键技术,哈希技术、加盐技术、慢哈希技术等,包括S/KEY一次一密等。本方案的安全性、资源占用均衡,易于编程实现,能够满足一般的网络应用系统的要求。

[1]Oechslin P.Making a Faster Cryptanalytic Time-Memory Trade-Off. In: Boneh D. Advances in Cryptology - CRYPTO 2003. CRYPTO 2003. Lecture Notes in Computer Science, vol 2729. Springer, Berlin, Heidelberg.

[2]http://www.freerainbowtables.com/en/tables/.

[3]祁鑫,魏美荣,蒋文保.口令加密算法安全性分析与对比[J].网络空间安全,2016.

[4]韩霖,张烨青,金健宇,方丹丹.高校信息平台用户口令安全策略研究[J].信息安全研究,2016.

[5] https://crackstation.net/.

[6]邓飞,朱莹.基于口令的客户端/服务器认证协议[J].计算机工程与应用,2015.

[7]汪定等.一个强口令认证方案的攻击与改进[J].计算机科学,2012.

[8]王平,汪定,黄欣沂.口令安全研究进展[J].计算机研究与发展,2016.

[9]于江,苏锦海,张永福.基于Hash函数的强口令认证方案设计与分析[J].计算机应用,2009.

山东省重点研发计划项目(2016GGX101027)。

猜你喜欢
服务器端哈希口令
基于特征选择的局部敏感哈希位选择算法
哈希值处理 功能全面更易用
Linux环境下基于Socket的数据传输软件设计
文件哈希值处理一条龙
高矮胖瘦
口 令
好玩的“反口令”游戏
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
巧用哈希数值传递文件