专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 信息/网络安全

请问怎么用AES和SHA1实现数据传输机密性和完整性

发布时间:2011-07-03 07:08:10 文章来源:www.iduyao.cn 采编人员:星星草
请教如何用AES和SHA1实现数据传输机密性和完整性
请教各位一个弱智问题:
一段数据M要从A发送到B,怎样在传输过程中同时保证机密性和完整性?
不用公钥/私钥,可用SHA-1和AES,假设A、B都有一个预装的相同的密钥库,可用ID从中取得密钥。
我想的是:
A:
1.用ID1从密钥库中取得一个密钥1;
2.用SHA-1对(M+密钥1)做摘要,即得HMAC=HASH(M+密钥1);
3.用ID2从密钥库中取得一个密钥2;
4.用密钥2对(M+HMAC+ID1)做AES加密,即得C=AES(M+HMAC+ID1);完了A将(C+ID2)传给B。

B收到(C'+ID2')
1.取出ID2',根据ID2'从密钥库中取密钥2';
2.用密钥2'对C'解密,得(M'+HMAC'+ID1');
3.用ID1'从密钥库中取得密钥1';
4.用SHA-1对(M'+密钥1')做摘要,即得HMAC=HASH(M'+密钥1');
5.比较HMAC与解密得到的HMAC',如果相同就认为完整性未受破坏。
同时传输过程中M被加密,所以认为机密性受到保护。

对安全一知半解,自己感觉这种方法有点怪,不知道有没有漏洞,或者是不是走了弯路。
请各位大侠指点。如果有更好的办法恳请提示,多谢!!!



------解决方案--------------------
那你的(C+ID2)没加密啊。
还有如何保证密钥库的同步?

------解决方案--------------------
这样的做法不安全吧,至少扩展性不好,就如lxrxyz说的,密钥库同步问题,如果系统扩展,需要加入更多的密钥对,怎样保持同步。而且,这种对应关系最好不要放在客户端,现在的反向工程还是挺厉害的说,如果找到了你的这个密钥库,整个系统就相当于没有加密了。
------解决方案--------------------
或者你不用sha1,用hmac,带密钥的mac来计算啊
------解决方案--------------------
不需要那么多密钥,这个过程可以简化为:

利用SHA-1对明文数据M计算Hash:H=SHA-1(M)

通过ID1从密钥库中取得密钥1:Key1。

计算密文 C=AES(M||H),将C||ID1送至B。

B根据ID1从密钥库中提取密钥Key1。

对密文C解密的M||H。

重新计算H'=SHA-1(M)。

检查H'=?H,如相等则说明数据未被篡改过。

但这一设计还是有安全漏洞的,即密文数据中没有加入随机因子。可以设想,当C截获数据C||ID1时,可以冒充A给B发送数据,B无法识别该数据是从A发来的还是从其他地方发来的。这种攻击手段为重放攻击。
------解决方案--------------------
1, 机密性是保证数据在传输过程中不是明文方式传输,也就是说保证攻击者嗅探之后也不能得到明文。
完整性是保证数据在传输过程中没有经过篡改。
2,验证机密性和完整性,应该首先验证数据的完整性。一个不能保证完整性的数据显然不能保证机密性。
3,对于明文M,应该在加密后得到密文W,对密文W使用摘要算法,得到其摘要H(w),将其附加在密文W后
得到带有摘要的密文W+H(w)。在接受方接受到数据之后,对W重新进行摘要,与H(w)进行比对,得知数
据是否被篡改。
完整性检验通过之后对数据进行解密。
4,改过程需要两次密钥同步,1是摘要算法的密钥同步,2是解密算法的密钥同步。
5,原则上不使用不安全信道传送密钥。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: