您的位置:首页>软件开发>开发经验与感悟>

应用软件开发中的密码设计问题探讨

[ 来源:软件研发之窗 | 更新日期:2007-7-15 20:19:59 | 评论 0 条 | 我要投稿 ]
【摘要】由于各种类型的磁卡和IC卡使用越来越广泛,且各种类型磁卡或IC卡都是同用户的资金密切相关,然而,目前的各类面向用户的应用系统中的密码设计是否安全?密码长度固定会存在什么问题?这是人们普遍关注的问题,本文就此问题分别从应用软件的密码设定、密码的可选元素、长度与破译的关系、固定长度的密码带来的问题等做一些探讨。

随着计算机技术的广泛应用,它与人们的生活越来越密不可分。特别是近几年各行业为了提高服务质量、方便广大客户,纷纷推出各种磁卡和IC卡,各种类型的磁卡、IC卡已经成为人们的日常生活中不可缺少的组成部分,如各种银行信用卡、电话卡、乘车卡、200卡等。
各种卡进入人们生活,确实给人们的生活带来极大的方便,然而其中也存在着风险,你是否意识到其中的风险?笔者就面向用户的应用系统中的密码设计和密码使用中存在的一些问题提出来,供软件开发人员和广大用户参考。


一、 应用程序开发中密码的设计重要性

各种应用程序,特别是管理程序,为了数据的保密、可靠、准确,不论是系统管理人员还是用户对系统的访问,都必须是一个合法的用户,且能提供正确的密码,才能对系统进行相应权限的操作。对于目前使用的各种类型卡,卡号就代表了合法用户,一旦卡丢失,唯一的制约关系就取决于密码,因此在各类卡的管理应用程序的设计中,密码设计尤为重要。 字串2
由于密码对数据的安全性起着关键作用,因此密码的保存更为重要。现大多数管理型的应用系统的数据都是保存在不同类型的数据库中,为了安全起见,数据库中保存的密码应是经过加密处理。一般的加密过程如下图:
象SQL Server等数据库就提供了这种密码加密功能,但有些数据库,象FoxPro等就必须在程序设计时,利用程序对密码数据进行加密处理后才能保存在数据库中。


二、 密码可选元素、密码的长度与密码破译的关系

若可选密码元素为n、密码长度为r,则密码的破译的概率为多少?
如果从n个元素中取r个元素的选排列,
则A=n(n-1)...(n-r+2(n-r+1)
若r=n则为全排列
则Pn=n(n-1)...2*1=n!
若一个元素被选后,仍然可以允许再次被选就为“允许重复排列”。
则密码可选元素为n,密码长度为r的“允许重复排列”排列数为:nr
r
若密码长度为k~r(k≤r),则可能出现的排列数为:∑nI
I=k
密码的破译概率为密码排列数的倒数。如密码的排列数为nr,则破译的概率为1/ nr。 字串2
由此可知,可供选用的密码元素n越多、密码的长度r越长或密码的长度范围k~r越大,密码的排列数越多,换句话,破译密码的概率越小。


三、 密码长度固定存在的问题

不论是管理系统还是面向用户的各种服务应用系统,密码的安全性都是一个很重要的问题。但作者发现目前许多管理系统和面向用户的服务应用系统,其密码的长度为固定长度。密码长度固定会给用户带来什么样的问题呢?下面分析其中的原因:
对于管理系统而言,由于用户通过键盘操作输入密码,因此可选密码元素包括26个字母的大小写(52个)、数字(10个)、各种符号(32个)以及空格(还不包括采用汉字作密码),且字母、数字或符号都可以被重复选用,因此属于允许重复排列。若密码的长度为6,则密码的排列数总共有956(=735091890625,大约有七千多亿个不同的密码数)。
对于面向用户服务的应用系统就不同了。目前提供用户输入密码的柜台装置、柜员机或利用电话键输入密码只有0~9这10个数字,因此,可选密码元素只有这10个数,即n=10,由于也属于允许重复排列。若密码固定为6位长度,则密码的排列数为106。

字串9


问题一:密码长度固定,密码排列较少。目前许多磁卡或IC卡限定用户的密码长度,比如长城卡的密码长度为6位,这样可能出现的密码排列数为:106=1000000。但若不限制用户必须用6位密码,用户可以根据自己的要求选定一个小于或等于6位数的密码,则可能出现的密码排列数为:用户只用1位密码,共有10个不同密码;用户用2位密码,共有100个不同的密码等等。可能出现的排列数为:101+102+103+104+105+106=1111110。
问题二:密码长度固定,便于密码破译。比如密码长度固定为6位,从理论上讲固定6位密码长度可能出现的密码排列为106,若用穷举法破译密码,其破译密码的概率为1/106。然而由于密码长度限定长度,根据人类记忆规律,若长期记忆许多枯燥数字的难度远大于其他一些符号。为了不忘记密码,用户在一个固定长度内选用密码,只能选用一些便于记忆的数字;其次由于密码长度固定,破译时只需在同长度中寻找可能出现的密码,减少了破译难度。作者通过大量的调查发现:用户为了便于记忆枯燥的数字密码,在密码的选用上,都使用了一些特殊的数字。如用4位密码,许多用户使用的是出生月份和日期、房间号码或电话分机号码等;若用6位密码,大多数用户使用自己的出生日期(年月日)、BP机号码或电话号码等。殊不知,这些特殊的数字都是极易被破译的数字。 字串8

四、 对于固定长度密码,用户应注意的问题

由于柜台的密码输入装置、柜员机或电话只允许用户的密码为数字,因此作者希望开发面向用户服务的应用系统的开发人员,在开发过程中,尽量不要将密码限定为固定长度,且允许的密码长度尽可能长一点,这样用户可以在不同的长度内选用便于记忆的数字。然而,目前大多数服务应用系统仍采用固定长度密码的方式,如早期的牡丹卡的密码长度为4位(用户修改密码也只能是4位,后又推出6位卡)、长城卡的密码为6位、200卡的密码为6位等。因此,为了用户的资金安全,作者希望用户在密码选用上应特别注意,不要选用极易掌握的数字做密码。特别不要使用自己的生日、电话号码作为密码。因为目前在许多场合(如,住宿,购买机票等)都必须提供身份证,而自己的生日恰恰在身份证号码中存在;而电话号码大多印在名片上,因此都是极不安全的。试设想你在住宿时丢失信用卡,拣到卡的人会非常方便到住宿登记表中查到你的身份证号码或利用你的名片上的电话号码做简单的尝试就可以破译你的密码。


Tags:
责任编辑:
上一篇:软件开发中的弊病  下一篇:编程本质论
您的评论
用户名: 新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为