Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java Security  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 斑竹~如何用java实现数据安全传输(实现CHAP,加密算法 )
vamn9894





发贴: 2
积分: 0
于 2006-05-31 19:29 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我现在在做CA证书安全传输的课题
就是在网上给别人发送数据,但是过程中要实现CHAP协议,RSA加密.
我没有接触过这方面的知识,不知道怎么做,有做过的给点意见!~~
最好有摸板可以参考,我先谢谢了~!
马上要答辩了,还没有做出来,请一定帮帮忙了。



作者 Re:斑竹~如何用java实现数据安全传输(实现CHAP,加密算法 ) [Re:vamn9894]
menzy



版主


发贴: 754
积分: 113
于 2006-06-02 12:09 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果企业应用,一般这个问题属于专业的CA厂商提供的服务,不用考虑。
但是如果你需要自己实现,恐怕客户端和服务器端都需要单独考虑。

PAP和CHAP协议是目前的在PPP(MODEM或ADSL拨号)中普遍使用的认证协议,CHAP在RFC1994中定义,是一种挑战响应式协议,双方共享的口令信息不用在通信中传输;PAP在RFC1334中定义,是一种简单的明文用户名/口令认证方式。

2. PAP

PAP全称为:Password Authentication Protocol(口令认证协议),是PPP中的基本认证协议。PAP就是普通的口令认证,要求将密钥信息在通信信道中明文传输,因此容易被sniffer监听而泄漏。

PAP协商选项格式:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

对于PAP,参数为: Type = 3,Length = 4,Authentication-Protocol = 0xc023(PAP)

PAP数据包格式:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+

Code:1字节,表示PAP包的类型

1 认证请求
2 认证确认
3 认证失败

Identifier:ID号,1字节,辅助匹配请求和回应

Length:2字节,表示整个PAP数据的长度,包括Code, Identifier, Length和

Data字段。

Data:可能是0字节或多个字节,具体格式由Code字段决定,成功或失败类型包中长

度可能为0。

对于认证请求(Code = 1)类型,PAP包格式为:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer-ID Length| Peer-Id ...
+-+-+-+-+-+-+-+-+-+-+-+-+
| Passwd-Length | Password ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+

Code(Code = 1),Identifier和Length字段含义如前面所述,响应包的Identifier字段值和挑战包中的相同,Identifier字段必须每次认证时改变。



Peer-ID-Length:长度1个字节,表示Peer-ID域的长度



Peer-ID:可为0到多个字节长,表示认证对方的名称。



Passwd-Length:长度1个字节,表示Password域的长度



Password:可为0到多个字节长,表示认证的口令,明文

对于认证确认(Code = 2)和认证失败(Code = 3)类型,PAP包格式为:



0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Msg-Length | Message ...
+-+-+-+-+-+-+-+-+-+-+-+-+-



其中:

Code,Identifier和Length字段含义如前面所述,响应包的Identifier字段值和认证请求包中的相同。



Msg-Length:长度1个字节,表示Message域的长度



Message:可为0到多个字节长,具体内容由应用实际实现时确定,RFC中没有限制其

内容,推荐使用可读的ASCII字符表示信息内容。

3. CHAP



CHAP全称为:Challenge Handshake Authentication Protocol(挑战握手认证协议),主要就是针对PPP的,除了在拨号开始时使用外,还可以在连接建立后的任何时刻使用。



CHAP协议基本过程是认证者先发送一个随机挑战信息给对方,接收方根据此挑战信息和共享的密钥信息,使用单向HASH函数计算出响应值,然后发送给认证者,认证者也进行相同的计算,验证自己的计算结果和接收到的结果是否一致,一致则认证通过,否则认证失败。这种认证方法的优点即在于密钥信息不需要在通信信道中发送,而且每次认证所交换的信息都不一样,可以很有效地避免监听攻击。



CHAP缺点:密钥必须是明文信息进行保存,而且不能防止中间人攻击。



使用CHAP的安全性除了本地密钥的安全性外,网络上的安全性在于挑战信息的长度、随机性和单向HASH算法的可靠性。



CHAP选项格式:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+



对于CHAP,参数固定为:

Type = 3,Length = 5,Authentication-Protocol = 0xc223(CHAP),Algorithm = 5 (MD5)

CHAP数据包格式:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+



Code:1字节,表示CHAP包的类型

1 挑战
2 响应
3 成功
4 失败


Identifier:ID号,1字节,辅助匹配挑战、响应和回答,每次使用CHAP时必须改变
Length:2字节,表示整个CHAP数据的长度,包括Code, Identifier, Length和Data字段。
Data:可能是0字节或多个字节,具体格式由Code字段决定,成功或失败类型包中长度可能为0

对于挑战(Code = 1)和响应(Code = 2)类型,CHAP包格式为

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Value-Size | Value ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Name ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


其中:
Code,Identifier和Length字段含义如前面所述,响应包的Identifier字段值和挑战包中的相同。
Value-Size:此字段1字节表示Value的长度
Value:至少是一个字节,可变长,按网络序传输,挑战/响应信息在此字段中说明,
挑战信息必须是随机的,在每次认证时改变,挑战信息是由应用在实际实现
中自己定义的,RFC中并没有规定挑战信息的具体格式;

响应值按下面的公式进行计算:
Response=HASH(Identifier+secret+Challenge)
其中“+”号表示将各数据在内存中串起来,其中HASH算法可以使用MD5,所以计算出来的HASH值是固定的,16字节长。
Name:至少一个字节,用来标志所传的这个包,必须是以'\0'或“\r\n”结束,
Name字段的长度可根据Length和Value-Size计算出来。

对于成功(Code = 3)或失败(Code = 4)类型

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ...
+-+-+-+-+-+-+-+-+-+-+-+-+-

Code,Identifier和Length字段含义如前面所述,Identifier字段和挑战/响应信息一致。
Message可以是0字节,也可以是多个字节,内容可以根据实际应用自己确定。

4. 结语

PAP和CHAP在目前的PPP应用中都在使用,CHAP相对要复杂一些,但安全性也高一些。在PPP具体实现中通常是同时使用,在Linux下PPP的实现中,如果服务器要求的PAP认证失败,会再次要求用CHAP认证。




flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923