您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 实验十三操作系统安全性实验
实验十三操作系统安全性实验(一)实验目的在操作系统的安全性增强中,对程序的权限管理是非常重要的问题。对程序的运行和访问权限有不同的管理方法。目前常见的一种对程序运行权限的管理方法是采用授权的序列号来限定程序的运行。本次实验就是综合采用标识,加密和鉴别等多项技术来实现对一种对程序运行权限的限制,从而增强学生对相关安全技术的理解和掌握,并提高学生进行系统安全程序设计的应用能力。(二)实验题目在计算机系统中限制程序的运行权力大多都是用序列号来限定的。如果序列号只是一串符号的表示则不能防止同一个程序在不同的计算机复制运行。因为同一个序列号可以在许多机器上同时安装。如果将序列号的标示信息与特定计算机的硬件系统相结合就可以做到每个计算机对应一个序列号,这样同一个程序的必须拥有某计算机上的序列号才可以在该计算机上运行。获得这种与硬件系统绑定的序列号的方法有很多种,本次实验将采用硬盘标识信息来获得序列号。每个硬盘都有一个唯一的标识序列号,这样如果将硬盘序列号和程序绑定在一起就可以将程序限定在某块硬盘上面。程序运行时通过查询当前硬盘标识序列号信息并与提供的程序序列号相比较,从而确保是否有运行权限。但是,如果直接采用硬盘标识序列号作为程序序列号是不安全的,因为以明文方式存储的信息容易被破译。因此我们借鉴UNIX系统中保存用户密码信息的方法来保存序列号。在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在shadow文件中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明文的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。本次实验产生序列号和验证的方法与此类似,不过将用户密码变成了硬盘序列号信息。仔细阅读附件1中关于硬盘序列号信息的获取方法和附件2中关于MD5加密算法的介绍。设计并完成一个在Linux系统下产生软件序列号的程序,要求该程序能够读出硬盘序列号信息并用MD5算法加密,产生的密文存放在license.dat文件中。用教师提供的Test程序来测试产生的序列号是否正确(三)测试要求将license.dat与教师提供的Test程序放在同一目录下,运行Test程序。Test程序首先按照产生序列号的方式重新计算序列号,然后与license.dat中的信息进行比较,如果比较结果一致则继续运行。正确的运行结果是打印出“hello,world”。如果提示错误,则需要你重新调试自己的程序产生争取的序列号。(四)实验报告要求实验报告要包含以下几个方面:1.实验目的,实验题目、实验环境。2.算法思想和概要设计和重要函数功能和接口说明。3.源程序、注释和结果。注释如在上机时来不及打入,可在写报告时补上。4.测试方法,对测试结果的分析,错误的分析。5.程序及测试的改进、本次上机经验及体会。附1硬盘序列号的读写每个硬盘的序列号都是唯一的,硬盘的基本信息中还有其他的一些信息,如厂家设定、磁头数等等,而且这些信息都是连续的。每块IDE硬盘信息格式都是相同的,存放的位置也相同的,全部都放在磁盘的头部。硬盘标识的结构硬盘标识是保存在硬盘头上的256个字符:它们他们如下:WORD0:基本信息字WORD1:柱面数WORD2:保留WORD3:磁头数WORD4:保留WORD5:保留WORD6:每磁道扇区数WORD7-9:厂家设定值WORD10-19:序列号WORD20:缓冲类型WORD21:缓冲大小WORD22:ECC校验大小WORD23-26:固件版本WORD27-46:内部型号其中我们所关心的是第10-19个字符,在这个位置保存着银盘的序列号,在所有IDE硬盘都保符合这样的标准。但是事实上现在的硬盘并没用到全部的10个word,只用到了10-13这四个word,每个word是16位一共64位数据。读硬盘序列号由于在Linux系统中对应每个IDE硬盘都会生成一个对应得文件,这个文件里记录了硬盘前256个word的内容,除了从硬盘中直接读取外还可以从Linux系统中这个文件中读取。从Linux系统中读取文件比较简单,但是从硬盘中读取序列号更为确切和安全。读取序列号需要调用到系统IO读写。我们想要读的仅是最前面256个word中第10-13个word。在Linux系统中队硬盘序列号的读写方法如下:①向端口3F6写入控制字节,建立相应的硬盘控制方式;②检验硬盘控制器和驱动器的状态(检测端口的第7和第6两位),如果控制器空闲而且驱动器就绪,即可输入命令;③完整地输入7个字节长度的命令块,一次写入端口1F1H-1F7H,不论是否需要,端口1F1H-1F6H对应的前6个字节的参数必须读出,端口1F7H的输出命令码为“0ECH”;④检测端口1F7H的第7和第3两位,如果控制器空闲且第3位置1,表示操作结束,即可读取结果;⑤通过端口1F0H读取100H字节到缓冲区;附2MD5加密算法的实现在加密过程中采用单向加密算法MD5。MD5的全称是Message-Digestalgorithm5(信息-摘要算法),在90年代初由mitlaboratoryforcomputerscience和rsadatasecurityinc的ronaldl.rivest开发出来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被压缩成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。在MD5这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。想要试探出MD5的密码是非常困难的。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。假设密码的最大长度为8位字节(8bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是p(62,1)+p(62,2)….+p(62,8),那也已经是一个很天文的数字了,存储这个字典就需要Tb级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。MD5的加密算法如下:1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。具体补位操作:补一个1,然后补0至满足上述要求。我们的硬盘序列号只有64位,所以需要先补一个1然后再补383个0,这样补齐448位。2、补数据长度:用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填补成长度为512位的倍数。在已经填补好的448位数据后再添入64位长度的0000000000000040H,这样补齐512位。3、初始化MD5参数:四个32位整数(A,B,C,D)用来计算信息摘要,初始化使用的是十六进制表示的数字,这些值可以是任意的。A=0X01234567B=0X89abcdefC=0Xfedcba98D=0X765432104、主要变换过程:将512位数据用16个32位的整数数组X[]表示。MD5具体过程如下,一共4轮循环,每轮16次运算:/*第1轮*//*以[abcdksi]表示如下操作*/a=b+((a+F(b,c,d)+X[k]+T[i])s)./*第2轮*//*以[abcdksi]表示如下操作*/a=b+((a+G(b,c,d)+X[k]+T[i])s)./*第3轮*//*以[abcdksi]表示如下操作*/a=b+((a+H(b,c,d)+X[k]+T[i])s).*第4轮*//*以[abcdksi]表示如下操作*/a=b+((a+I(b,c,d)+X[k]+T[i])s).最后再将循环好的a,b,c,d分别加上四个32位整数(A,B,C,D)其中的四个处理位操作函数如下:(X,Y,Z为32位整数)F(X,Y,Z)=X&Y|NOT(X)&ZG(X,Y,Z)=X&Z|Y?(Z)H(X,Y,Z)=XxorYxorZI(X,Y,Z)=Yxor(X|not(Z)
本文标题:实验十三操作系统安全性实验
链接地址:https://www.777doc.com/doc-1261217 .html