密码学课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息安全技术应用实践

课程设计报告

设计题目信息的安全传递

专业名称:

班级:

学号:

姓名:

指导教师:

2014年7月

目录

一、引言 (3)

二、设计方案 (3)

1.安全需求 (3)

2.概要设计 (3)

3.详细设计 (5)

三、安全性分析........................................................................................................... 错误!未定义书签。

四、运行结果 (8)

五、总结 (8)

参考文献 (11)

一、引言

对于信息安全问题,经常出现QQ被盗号骗取财物等案件的出现。信息的安全性十分重要,尤其是一些个人的隐私。

人们也越来越重视信息的安全传递,所以设计出一个安全传递信息的系统刻不容缓。所以在此次课程设计我设计了一个信息传递系统,此系统是基于JAVA应用程序开发的,结合密码学的加密算法实现。其主要特性是安全的完成信息的传递。

二、设计方案

1.安全需求

1).服务器端每一客户口令安全存储(口令保护)

2).对所有通信内容用分组密码以计数器模式进行加密

3).对所有的通信内容用认证码(MAC)进行完整性检验

4).服务器对每个客户进行身份认证

5).服务器端抗重放攻击

2概要设计

1. (BrokerGUI)

发送代理端代替发送者进行内部操作,它设置了与服务端的共享密钥、实现共享口令的加密密钥的加密、随机密钥的加密,、文件的加密、消息的验证。

工作进程:

假设口令“sharedPwd”为代理与授权服务器共享口令

1)用“sharedPwd”生成加密密钥“K-BC”,以及MAC密钥“K-MAC”

2)随机生成一个密钥“K”;并且用“K”生成一个新的加密密钥“K-temp”

和一个新的MAC密钥“K-MAC-temp”。

3)对输入文件内容进行加密和计算MAC

E[ K-temp, file contents ] || MAC[ K-MAC-temp, E[ K-temp, file contents ] ]

4)对新的密钥“K”进行加密和计算MAC

E[ K-BC, K ] || MAC[ K-MAC, E[ K-BC, K ] ]

5)输出所有上述信息

2.(BrokerClient)

接收代理端应该设置自己的用户名和密码,且要发防重放的随机数。与服务器端建立通信通道,向服务器端发送加密后的信息。对方接收来自服务器的信息。

相对服务器而言,接收端的任务主要就是保证消息的安全性、保密性、完整性等。

1)用“用户口令”生成加密密钥“K-BC-user”,以及MAC密钥“K-MAC-user1”;

2)接收端提供给服务器

R ||user1 || MAC[ K-MAC-user1, R || user1 ]

这里R是一个随机数,user1为用户名

3)接收端从服务器获得

E[ K-BC-user1, K ] || MAC[ K-MAC-user1, E[ K-BC-user1, K ] ] 解密得“K”,并计算出加密密钥“K-temp”和

一个新的MAC密钥“K-MAC-temp”。

解密和验证“file contents”。

3.AuthorityServer)

服务端实现发送代理端和接收代理端之间的连接,是一个中转站。服务器接受和发送的信息都是加密的,保证了消息的安全性。

服务端实现对了发送代理端的消息认证,实现接收代理端的用户身份认证,对密钥的解密和加密,实现了防重放攻击。

工作进程:

1)服务器解密得“K”,并且确认“K”的完整性;

2)检验用户名,解密“R”并验证它们的完整性;

3)选取新的密钥“K”,并且加密“K”及计算“K”的MAC:E[ K-BC-user1, K ] || MAC[ K-MAC-user1, E[ K-BC-user1, K ] ] 发送给用户

3.详细设计

选择AES加密算法,密钥长度为128位。

随机密钥K的实现方法:

public static byte[] initKey() throws Exception { // 实例化

KeyGenerator kgen =KeyGenerator.getInstance("AES");

// 设置密钥长度

kgen.init(128);

// 生成密钥

SecretKey skey = kgen.generateKey();

// 返回密钥的二进制编码

return skey.getEncoded();

}

共享口令生成密钥的实现方法:

public static byte[] sharepwd() throws Exception{ FileInputStream f1=new FileInputStream("pwd.txt");

int num1=f1.available();

byte[ ] kb1=new byte[num1];

f1.read(kb1);

return kb1;

}

用HmacMD5算法计算出加密密钥的实现方法:

SecretKeySpec k1 = new SecretKeySpec(k, "HMACMD5");

Mac m1 = Mac.getInstance("HmacMD5");

m1.init(k1);

String x1 = "yl";

m1.update(x1.getBytes("UTF8"));

byte s1[] = m1.doFinal();

SecretKeySpec KBC = new SecretKeySpec(s1, "AES");

相关文档
最新文档