信息安全毕业论文

软件设计中用户身份的认证方法

时间:2022-10-05 18:09:04 信息安全毕业论文 我要投稿
  • 相关推荐

软件设计中用户身份的认证方法

  软件设计中用户身份的认证方法

  摘要:介绍几种在计算机软件系统设计中常用的用户身份认证方法,着重阐述了采集用户硬件信息的方法,对程序设计人员设计应用程序有一定借鉴作用。

  关键词:计算机软件;身份认证;用户识别;信息采集

  用户身份的认证和识别,是设计计算机应用程序所必须考虑的因素,因为软件开发者需要通过识别用户来进行软件注册、升级及授权等服务。

  一、几种用户认证方法

  目前,获得用户身份的方法主要有以下几种。

  1、由用户自己提交个人信息进行认证。一些软件通过使用者自己提交相关信息,这些信息包含用户姓名、E-mail地址等,并以此数据作为软件提供服务的关键信息。这种方法的优点是简单、易实现。但这种方法的弱点也很明显,即不能确保信息的真实性,也不能阻止使用者把获得的信息与他人共享。

  即一个使用者获得了注册信息后,可以将注册信息与亲戚朋友共享,那么这些人都能使用此软件了。糟糕的情况是使用者将注册信息发布到网络上,后果更是难以预计。

  2、由程序自动采集用户信息进行认证。为了防止软件被非法用户自由使用,开发者可以使用程序来采集使用者计算机的一些相关信息。这些信息是使用者的计算机所特有的、不会轻易改变的,如硬盘序列号、CPU标识号等,开发者可以把这些信息与软件绑定到使用者的机器上执行。

  例如Windows XP的注册就是使用了这种方法。这种方法的优点是可以防止软件随意传播,但如果用户硬件更换,可能会使注册信息失效。

  3、由特定的硬件提供信息认证用户。使用加密锁、身份认证Token、动态口令生成器等硬件产品来提供信息。利用硬件的不可复制性,把硬件和软件捆绑在一起,利用硬件里面的唯一性的识别信息来识别用户身份。这种方法安全性好,但成本相对较高。

  二、用户信息的采集

  在实际应用中,使用的认证方法往往不是单一的,而是混合实施。对于个人开发者而言,要设计一个软件系统,为了既提高安全性,又降低成本,主要采用第二种方法。

  每台计算机的CPU ID、硬盘序列号、显卡型号、网卡的MAC地址等信息是不同的,把多种信息组合起来后,信息相同的概率就更低了,这些就是开发者需要采集的信息。

  1、获取网卡的MAC地址。网卡的MAC地址是网卡的唯一标志,它是固化在网卡串行EEPROM中的物理地址,以太网交换机就是根据信息包头中的MAC源地址和目的地址实现包的交换和传递的。理论上讲,不存在2块网卡的MAC完全相同,这点非常适合用于用户的身份认证。

  在Windows操作系统下,在DOS窗口中运行ipconfig/all命令,就可以查看本机的网卡MAC地址,如显示为:Physical Address:00――14――2A――6F――47――1A。

  在Windows XP系统下,可以使用系统提供的NetApi32.DLL功能,实现网卡信息的采集。方法为:(1)使用NCBENUM命令获得网卡的数目和每块网卡的内部编号;(2)使用NCBASTAT命令获取每块网卡的MAC地址。下面是部分程序源码,详细信息参见相关资料。

  typedef struct _ASTAT_

  {

  ADAPTER_STATUS adapt;

  NAME_BUFFER NameBuff[30];

  }ASTAT,*PASTAT;

  ASTAT Adapter;

  void main()

  {

  NCB ncb;

  UCHAR uRetCode;

  LANA_ENUM lenum;

  //向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等。

  memset(&ncb,0,sizeof(ncb));

  ncb.ncb_command=NCBENUM;

  ncb.ncb_buffer=(unsigned char*)&lenum;

  ncb.ncb_length=sizeof(lenum);

  uRetCode=Netbios(&ncb);

  if(uRetCode!=0)return;

  //对每一张网卡,通过其网卡编号,获取其MAC地址

  //网卡编号,一般从0开始,但在Windows 2000中并不一定是连续分配的

  For(int i=0;i  {

  //首先对选定的网卡发送一个NCBRESET命令,以便进行初始化

  Memset(&ncb,0,sizeof(ncb));

  ncb.ncb_command=NCBRESET;

  ncb.ncb_lana_num=lenum.lana[i];//指定网卡号

  uRetCode=Netbios(&ncb);

  //接着,可以发送NCBASTAT命令以获取网卡的信息

  Memset(&ncb,0,sizeof(ncb));

  ncb.ncb_command=NCBASTAT;

  ncb.ncb_lana_num=lenum.lana[i];//指定网卡号

  strcpy((char *)ncb.ncb_callname,“*”);

  ncb.ncb_buffer=(unsigned char *)&Adapter;//指定返回的信息存放的变量

  ncb.ncb_length=sizeof(Adapter);

  uRetCode = Netbios(&ncb);

  }

  }

  此时,按F7编译直至通过,按F5运行即可。这段代码可以直接嵌入相关的应用系统之中,或封装成.DLL或COM控件,以便可以在Visual Basic、Visual Foxpro、Power Builder或Delphi等其他程序中调用。

  2、获取CPU信息。以前的CPU型号有很多是相同的,但在Pentium III后,Intel公司为了安全交易和资产追踪,为每个处理器增加了一个唯一的序列号,这是我们希望获取的信息。在CPU指令集中,指令cupid被设计用来获取CPU有关的信息,关于这一指令的说明,可以参见相关资料,这里不再详细介绍。下面是用C语言编写的一段功能实现源码,用于识别CPU信息,并显示出来。

  {

  PROCESSOR_SIGNATURE ps;

  FEATURE_FLAGS ff;

  MISC_INFO mi;

  _asm

  {

  mov eax,1

  cupid

  mov ps,eax

  mov mi,ebx

  mov ff,edx

  }

  printf(“Processor Type:%d\n”,ps.ProcessorType);

  printf(“Model Number:%d\n”,ps.ModelNumber);

  printf(“Family Code:%d\n”,ps.FamilyCode);

  printf(“Extended Model:%d\n”,ps.ExtendedModel);

  printf(“Extended Family:%d\n”,ps.ExtendedFamily);

  printf(“Stepping ID:%d\n”,ps.SteppingID);

  printf(“Brand ID:%d\n”,mi.BrandID);

  if(ff.MMX) printf(“Support MMX\n”);

  if(ff.SSE)printf(“Support SSE\n”);

  if(ff.SSE2)printf(“Support SSE2\n”);

  if(ff.PSN)printf(“Support processor serial number\n”);

  }

  以上功能可以获取CPU的缓存信息,显示缓存的联合多路工作状态、缓存入口和标准标签的数目等,都可以作为识别CPU的标志,而CPU的序列号(processor serial number)是每个CPU的不变标识。

  3、获取硬盘序列号。大多数计算机中都配有硬盘,但由于其有损坏而被更换的可能性,所以其信息的可靠性要低于CPU信息。在网上能够找到很多获得硬盘序列号的程序,但大多数不是我们所需要的。

  如果在DOS窗口下输入Dir/p命令,我们就能看到”Volume Serial Number is xxxx-xxxx”这样的信息,很多程序取得的就是这个信息,而这是格式化程序产生并保存在硬盘上的一个信息,即”逻辑硬盘序列号”,不是我们所要的,我们要获得硬盘厂商提供的信息,由于程序比较复杂,限于篇幅,就不再详细介绍了,有兴趣的朋友可以进一步研究。

【软件设计中用户身份的认证方法】相关文章:

最新电话用户真实身份信息登记规定05-27

智能终端中的应用软件设计中的光传感器10-26

科学家们认证的学习方法10-06

浅析电子商务中的身份鉴别技术论文10-08

通信工程研究生认证方法论文10-08

论语中的学习方法10-06

Maven在Eclipse中配置方法10-05

《高级英语》中族裔文化身份与文化认同研究论文10-12

软件设计辞职报告03-16

用户报告模板04-26