题目:移动存储设备的认证
专业班级:学 号:姓 名:指导老师:时 间:
信息安全0801 班 0909080121 谢 旺 辉 柳 溶
2011.12-2012.01
一、 任务描述与需求分析
1. 任务描述
1.1设计背景:当今世界,随着电子信息产业的飞速发展,计算机已成为信息产业行业主流产品和人们在工作、生活、学习等各个方面不可缺少的工具,从而,信息数据的存储和转移成为计算机的一大问题,移动存储设备的发展和使用似乎成功解决了这一问题,但新的产品必然面临着新的问题:病毒和木马以移动存储设备为媒介进行传播,移动存储设备的广泛使用转移和窃取计算机主机的机密文件或重要文件等。我们可以给移动存储设备和计算机之间添加认证和保护层来解决这些问题。
1.2 任务描述:实现一个基于移动存储设备的认证系统,以U盘为介质,PC主机实现软件,合理选择加密算法,实现U盘和主机之间的内部认证、外部认证及双向认证。
2. 需求分析
(1) 以客户端形式实现认证系统软件和界面。
(2) 对盘符进行扫描,保存于数据库中,当有U盘插入时进行检测,
实现移动存储设备的检测功能。
(3) 通过权限对自己的或获得允许的U盘进行注册,生成加密文件,
供检测U盘时使用,实现U盘的权限管理功能。
(4) 对U盘进行认证,通过检测认证文件的对应和符合性,检测该U
盘是否为本机的合法注册设备,实现对非法U盘的控制和U盘访问的权限
(5) 对U盘的系统主机进行认证,检测系统是否为U盘的合法主机,
实现内部认证。
3. 开发平台与工具
本系统采用Java语言开发,其跨平台性和可移植性的特点适合于本系统的开发。
.开发平台:Win7系统; .开发环境:Java 6.0; .开发工具:Eclipse 3.2。
二、 系统设计
1、 系统结构
移动存储设备 认证系统 初始化环境模块 U盘注册模块 U盘认证模块 系统认证模块 2.1 系统功能实现模块图
如图2.11,系统分为四大模块:初始化环境模块、U盘注册模块、U盘认证模块、系统认证模块。
2、 功能说明
(1) 初始化环境功能
通过盘符扫描,实现U盘或移动存储设备的检测。 (2) U盘注册功能
通过生成加密文件,实现对U盘的注册。 (3) U盘认证功能
通过检测加密文件的对应性,实现对U盘的合法性和权限检测。 (4) 系统认证功能
通过主机数据库,检测系统主机。
3、 数据库
如下表是系统主机数据库中的初始盘符表。
表2.1 root_sys rootName C D E F G H
如下表是系统数据库中已注册U盘的加密认证文件。 表2.2 key_input keyStr keyET 12 C20ad4d76fe97759aa27a0c99bff6710
三、 详细设计
1. 系统流程图
开始
客户端启动
U盘认证 初始化环境 系统认证 U盘注册
初始化成功
密码输入
成功与否 成功与否
否 否 否 正确是否
是 认证失败认证失败重新输入 U盘弹出 认证成功 是 欢迎使用
输入代号 是
认证成功 注册成功
图3.1 系统流程图
2. 系统用例图
MyFrame
main()
RegFrame
dealReg() dealPW()
Encrypt
Encrypt(str) Compute()
Jtime
run()
3.2系统用例图
DealRoots deal() dealGetU() RootDao CreateDB() Save() RootsScan listRoots() toSting()
3. 代码实现
图3.3 代码结构实现
3.1客户端界面功能实现
用java控件实现系统客户端界面功能,通过调用和解析系统数据库中和U 盘中的加密文件实现系统认证和U盘认证,即实现内部认证,外部认证及双向认证功能,利用认证系统的初始化功能,实现U盘插入的检测功能。 相关代码: super();
getContentPane().setLayout(null); setBounds(100,100,400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel =new JPanel(); panel.setLayout(null);
panel.setBounds(0, 0, 400, 300); getContentPane().add(panel); final JButton bt1=new JButton();
bt1.setText(\"u盘注册\"); bt1.setBounds(10,40,80,30); panel.add(bt1);
final JButton entry=new JButton();
entry.setText(\"认证系统\"); entry.setBounds(115,40,90,30); panel.add(entry);
final JButton bt2=new JButton();
bt2.setText(\"认证u盘\"); bt2.setBounds(245,40,80,30);
panel.add(bt2);
final JLabel label=new JLabel(); label.setText(\"欢迎使用u盘认证系统!\"); label.setBounds(10,5,300,30); panel.add(label);
final JButton bt3=new JButton(); bt3.setText(\"初始化环境\"); bt3.setBounds(10,180,100,30); panel.add(bt3); outt=new JTextField();
outt.setBounds(20, 120, 200, 30); outt.setText(\"系统信息:\"); panel.add(outt);
3.2 注册功能实现
在系统和U盘中生成加密文件,保存在数据库和U盘中,实现U盘的注册功能。 相关代码:
setTitle(\"u盘注册密码输入\");
final JPanel panel =new JPanel(); panel.setLayout(null);
panel.setBounds(0, 0, 300, 180); getContentPane().add(panel); final JLabel passWord=new JLabel();
passWord.setFont(new Font(\"微软雅黑\",Font.PLAIN,12)); passWord.setText(\"请输入权限密码:\"); passWord.setBounds(20,20,100,30); panel.add(passWord);
passWordTextField=new JPasswordField(); passWordTextField.setText(\"\");
passWordTextField.setBounds(120,20,100,30); panel.add(passWordTextField); final JButton jb=new JButton(); jb.setText(\"确定\");
jb.setBounds(200,80,60,40); panel.add(jb);
3.3使用MD5加密
对注册生成文件进行加密,生成加密文件保存于数据库中。 代码实现算法:
public class Encrypt { private String inStr; private MessageDigest mad5; public Encrypt(String inStr){
this.inStr=inStr; try{
this.mad5=MessageDigest.getInstance(\"MD5\"); }
catch(Exception e){
System.out.println(e.toString()); e.printStackTrace(); } }
public String compute(){
char[] charArray=this.inStr.toCharArray(); byte[] byteArray=new byte[charArray.length]; for(int i=0;i hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } 3.4数据库实现 利用数据库实现系统初始环境和加密文件的保存,利于检测和认证外来 存储设备。 代码实现: private Connection conn=null; public void initConnection() throws Exception{ Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); conn=DriverManager.getConnection(\"jdbc:odbc:mySQL\",\"root\",\"admin\"); } public void closeConnection(){ if(conn!=null){ try { } } conn.close(); // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { } public void createDB(){ try { } closeConnection(); this.initConnection(); String sql1 = \"drop table Root_sys\"; String sql = \"drop table key_input\"; String sql2=\"create table Root_sys(rootName char(5))\"; String sql0=\"create table key_input(keyStr char(20),keyET varchar(50))\"; Statement stat = conn.createStatement(); stat.executeUpdate(sql1); stat.executeUpdate(sql); stat.executeUpdate(sql2); stat.executeUpdate(sql0); System.out.println(\"创建成功!\"); // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { finally{ } } 四、 实现过程 1. 具体实现 1.1客户端启动 图4.1为客户端启动的初始状态。 图4.1 客户端 当没有U盘或移动存储设备插入时,会显示系统信息,然后自动关闭,如下图: 图4.2无U盘插入的客户端状态图 1.2初始化环境 对系统盘符进行扫描和数据保存,用于检测U盘。 图4.3初始化成功图 1.3 U盘注册 对合法或获得允许的U盘进行注册,给与其访问权限。 无U盘插入时显示如下: 图4.4 U盘提示插入检测 当U盘插入时 图4.5 密码输入 图4.6 注册代码输入 1.4 U盘认证 无U盘插入时如图4.4。 对U盘进行认证: 当认证成功时如下图: 图4.7 U盘认证成功 如果认证失败则如图4.8: 图4.8 U盘认证失败 1.5 系统认证 无U盘插入时如图4.4。 当对系统进行认证成功时如图4.9: 图4.9 系统验证成功 验证失败时如下图4.10: 图4.10 系统认证失败 2进一步延伸和发展方向 虽然实现了移动存储认证系统的基本功能,但有些细节还需要改进,有些功 能还需要完善和增加。如: (1) 初始化环境时,可设置权限,只有主机用户才能拥有权限进行管理。 (2) U盘注册,可对生成的加密文件进行深入解析,使其不容易被删除。 (3) 当U盘认证失败时,U盘自动弹出,使其无法访问系统主机。 (4) 对主机重要文件实现访问读写控制功能,保护重要文件。 (5) 实现认证系统的自启动和自关闭功能和随时监听功能。 五、 总结 通过本次信息安全综合课程设计,我学到了很多,认识到移动存储设备安全问题的重要性以及自身很多知识的缺乏和不熟练,当然在编程方面也有很大的进步,分析问题和解决问题的能力也加强了。总的来说,这次课程设计让我受益匪浅。 因篇幅问题不能全部显示,请点此查看更多更全内容