软件设计中安全性与易用性的考虑
来源:计算机安全 更新时间:2012-04-15
 
 
 
计算机安全界曾经有个笑话:“实现计算机系统安全很容易,把计算机的电源关掉,锁在保险箱里,然后把钥匙扔掉。”实际上,这个笑话一定程度上揭示了计算机的安全性与易用性之间的关系。

一、易用性和安全性之间的关系

在计算机的安全性和易用性设计之间存在权衡,一台不设口令的计算机非常方便使用,但是不安全;但是如果一台计算机每5分钟要求你做一次身份确认,输入口令甚至做血样检验,这样的计算机是安全的,但是不会有人愿意使用。一般说来,安全软件产品的操作要比其他软件产品的操作困难,因为实现机制复杂了,需要配置的参数也多了。
 
安全性和易用性在设计上有共同点 :
(1)都需要从软件的整体考虑;
(2)需要对系统结构、开发团队和市场份额等方面统筹考虑;
(3)都要在系统设计的开始阶段考虑,在系统开发临近结束时无法临时增加;但是由于易用性和安全性是不同的技术,所以建立一个既有安全性又有易用性的系统比较昂贵。
 
(4)易用性方面出现问题可能会妨碍安全性的效果。
目前安全性和易用性之间的接口成为计算机安全界研究的对象,被称作人机交互和安全性(HCI-SEC)。在2003年ACM人机交互大会召开了HCI-SEC研讨会,随后HCI-SEC的有关问题逐步提了出来。2004年计算机界把易用安全性列为信息安全研究者的“重大挑战”,有下面两个问题:
 
问题1 口令问题。每个人都面临口令问题,安全的口令都是难猜测的,但是难猜测的口令都是难记忆的。同时口令策略一般要求用户口令是唯一的并且要及时更新,如果一个人的帐户比较多,很难想象一个人可以完全凭借记忆牢记十多个不同的口令,并且不断地分别更新。
 
问题2 身份确认问题。当认识到传统的口令字不够安全后,用户需要新的身份确认手段。研究表明,人记忆图像的能力比字符强,因此图像口令字被作为字符口令字的替代方案,研究还发现,用户对图像口令字的选择与种族和性别高度关联。生物测量和硬件令牌也属于用户身份确认的方法,但是现在还缺乏对这些身份确认手段的统一评价和比较方法。
 

二、易用安全性的实现途径

HCI-SEC的研究课题之一就是如何在某些特定的应用系统中实现易用的安全性,主要有三种类型的方法:
(1)构造不需要用户干预就可以执行相关的安全和私有功能的系统。这种方法的问题是当用户不了解某些方面的安全问题时,他们的操作可能会无意中减弱到位的安全保护。
(2)开发一种安全和私有相关的隐喻模型,让用户自发地正确使用安全和私有软件。目前的钥匙和锁的隐喻模型显然是不完全和不准确的,但是目前也没有出现更具有广泛接受性的其他隐喻模型。
(3)教给用户有效使用私有和安全工具所需要的知识。但是以什么形式把这些信息教给用户,让用户少花时间去学习掌握,还是没有解决好的问题。
 很容易想到利用一种基于上述方法混合的方法,但实际上这更困难,因为上述方法的思路和实现根本上就是不同的。
 
现在有人开始用HCI-SEC的方法对安全系统进行评估,测试结果发现用户在安全决策理解方面存在障碍,从而导致安全配置失误遭受危险,用户往往为了使用方便,而关闭某些安全防护。
 
Jerome Saltzer 和Michael Schroeder于1975年就在讨论易用性是否是安全系统必要的成分,他们提出了信息保护的8条原则[1],最后一条就是对信息保护系统的“心理可接受性”,但是有些安全系统对这些思想不够重视。此后30年来,HCI技术也有了很大的发展,在技术市场上,开始有人应用HCI设计和评价技术对安全系统进行评价,他们发现最终用户在理解所面临的安全设计和决定方面非常困难,所以非常容易出现误配置的情况,而导致安全风险。很多时候用户为了工作方便停止或者忽略安全功能,例如取消口令或者共享口令,都会把系统置于高安全风险之下。
 
很多用户习惯将系统安全决策的权利交给系统管理员负责,但是当用户离开自己的工作场所,脱离了所在机构的防火墙保护,在家里或者在路上使用移动设备的时候,就必须根据自己的知识和经验做出安全决定,而不能依靠机构的安全管理员了。因此,需要开发把安全决策权放在用户手中的技术。
 
1983年,Don Norman指出许多引起数据损失的错误是由于糟糕的界面设计,虽然相关的操作需要用户确认,但是有时候用户确认只是出于习惯的机械点击,因此把系统操作动作设计成可见的和可以取消的并不能完全解决问题。
 
这里有一个说明问题的例子。在美国PARC研究中心建立无线局域网时,采用了基于PKI的方案,需要给200个用户X.509证书,使用802.1x传输层安全认证协议EAP-TLS进行认证。统计表明许多人觉得PKI不容易理解,技术复杂和不易用。由于PARC中心对于PKI技术熟悉,他们认为有信心成功克服使用困难,但是他们错了。在无线局域网的第一个版本里,每个用户都必须从内部认证中心申请和安装一个X.509证书,然后配置操作系统提供的802.1x客户软件来使用EAP-TLS认证协议。为了提交证书申请,用户必须决定和提供无线网卡的MAC地址和安装内部认证中心的CA根证书。在建立系统过程中,技术管理团队的大量时间花费在管理CA软件和钥匙上。利用Microsoft Windows XP提供的GUI802.1x的无线配置软件,用户需要总共完成38步才能完成注册过程,每一步都强迫用户做出决定或者采取行动。为了帮助用户完成这个过程,系统管理员编写了一个详细的注册指南,但是用户很容易脱离这个指南自行其事,最后用户甚至不知道对计算机做了什么操作,如果出错,他们就会不知所措。尽管PKI提供了安全保护,但是降低了用户配置自己机器的能力。
 

三、易用安全软件的设计考虑

安全敏感的应用软件的设计要求在易用性和安全性之间是平衡的,如果修改现有的系统设计,提高易用性就可能降低安全性,而增强安全性,就有可能让软件难以使用或者难以理解。在设计一个软件系统时,安全性和易用性两者都不能忽略,这两方面的缺陷都可能导致产品无法使用。
 
1、安全性和易用性统筹考虑
在软件产品的设计过程中要注意将安全性和易用性统筹考虑:
(1)安全和易用的元素不能撒胡椒面,应该把这两个元素合并在一起,贯穿整个设计过程。无论是安全性还是易用性都不能作为附加设计的内容。
(2)设计者要牢记安全性和易用性都是用户需求的一个方面,最后的取舍还是要根据用户的需要,系统的安全状态要和用户头脑中的模型相符合,并且两者都是随时间变化的。
(3)尽量将安全性元素合并到用户现在已经使用的工作流程中,他们已经习惯了这样的工作方式,不容易对安全手段产生厌倦情绪。
 
2、避免安全性和易用性的冲突
在安全软件产品的设计过程中,安全性和易用性可能会产生冲突:
(1)设计阶段的冲突
1) 不恰当的安全性会损害易用性
让差不多要开发结束的产品变得更加安全是设计者可能会遇到的要求,但是设计者会发现在最后一分钟增加安全功能是多么困难和无效。尽管可以通过代码审查发现一些Bug,但是安全则是整个设计更深的属性,John Viega和Gary Mcgraw 认为“在一个现存系统上捆绑安全是一个糟糕的主意,安全不是一个在任何时间都能增加到系统上去的属性”[2]。如果不是从设计一开始就考虑安全性问题,就可能不得不增加很多配置设置和提示,这种做法不能根本上解决问题,反而在出现问题的时候,容易将过错推给用户。
 
2) 不适当的易用性会损害安全性
让差不多要开发结束的产品变得更加好用则是设计者可能会遇到的另外一种要求,但是这是同样困难的任务。好的易用性设计强调理解用户需求,在设计过程中溶入某种概念和风格,而不是仅仅玩弄一些表面的特色,比如动画或者界面外表。没有经过慎重考虑的易用性可能会向用户隐藏一些安全相关的决定或者选择松散的缺省设置,另外不容易理解的界面也会增加操作的复杂性和迷惑用户,降低产品的安全性。
 
3) 集成的交互设计
安全性和易用性的研究者都赞成叠代的开发过程,执行重复的分析、设计和评估周期,而不是最后进行安全性测试或者易用性测试,将用户交互和安全手段的设计同时考虑非常重要,叠代提供了检查安全性和易用性相互影响的机会,如果一直割裂两个方面的设计几乎肯定会带来问题。
 
(2)使用中的冲突 
从目标上讲,安全通常是使用户操作变得困难,而易用性是使操作变得更容易,安全性所引起的操作困难的结果通常是用户不情愿接受的,而易用性所带来的结果一般是用户所欢迎的,当系统设计不够好时,这两者可能发生冲突。
安全性对于用户来说永远是第二位的功能,用户使用计算机肯定不是要使用它的安全功能,用户使用计算机是为了使用资源和进行业务系统管理等,要求用户采用额外的安全步骤可能会打断他的工作流程,最后导致用户关闭掉让他烦恼的安全提示。这样自然造成易用性和安全性之间的冲突。解决的办法是尽量从自然的用户交互中提取安全信息,提取的安全信息越多,安全性对用户正常使用的干扰就越少。
 
(3) 安全交互设计的原则
研究者曾经提出安全交互设计的10条原则[3]:
 
(1)完成一个任务最自然的方式也是最安全的;
(2)用户能够清楚理解授权过程,明确过程中的操作;
(3)用户的交互界面应该能够吸引用户的吸引力;
(4)影响安全决定的用户交互界面应该便于检查;
(5)在任何时候都应该允许撤消做出的安全授权;
(6)用户界面不应该让用户误以为拥有实际上没拥有的权限;
(7)用户与授权实体之间的通讯渠道必须是不能被欺骗和不容易瘫痪;
(8)确认实体与确认操作在界面上应该与其他实体和操作不同;
(9)交互界面应该提供足够的表达能力让用户容易按照自己的目标表达安全决定;
(10)在动作生效前应该让用户清楚授权操作的结果。
 
    现在计算机的构件都被标注成可信的,可信不是一个yes 或者 no 的问题,不明确下述问题“可信”这个词是没有任何意义的。这些问题就是:(1)“被谁信任?”(2)“被信任做什么?”(3)“什么条件下不可信?”(4)“应对的安全风险是什么?”
Simson Garfinkel 和Gene Spafford给出的定义是:“如果你能够依赖一台计算机和它上面的软件做出你期待的行为,就说它是安全的”[3],用户的期待是基于系统的概念模型,这个概念模型的基本元素是“谁”和做“什么”,对应“角色”和“能力”,每个角色有一系列的“能力”(可以影响用户的可能动作),可以通过有限状态机来模拟所有角色的所有可能动作。
安全性和易用性是贯穿软件开发过程的要求,不仅需要早期考虑,还需要同时兼顾。特别在大型系统的开发过程中,负责这两个方面的开发人员需要很好的沟通和交互。
 
参考文献
[1] J.H. Saltzer 和 M.D Schroeder, “The Protection of Information in Computer Systems,” Proc. IEEE, vol.63, no.9,1975.
[2]J. Viega 和G. McGraw, Building Secure Software, Addison-Wesley, 2002,p.14.
[3]S. Garfinkel 和G Spafford, Practical UNIX and Internet Security,2nd ed. O’Relly & Associates, 1996,p.6.