完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
密钥详解
在之前的文章中,我们讲到了对称密码,公钥密码,消息认证码和数字签名等密码学的技术,这些技术中都使用到了一个叫做密钥的东西。 那么到底什么是密钥呢?密钥就是一个key,通过这个key可以获得最终的明文。所以密钥其实是和明文等价的。 举个例子,保险箱里面放着十万美元,保险箱被锁住了,并且有一个钥匙。那么这个拥有钥匙的人和拥有了十万美元是等价的。 各种密钥总结 之前的文章中,我们分别讲到了对称密码,公钥密码,消息认证码和数字签名这四种密码学技术。这里我们再来回顾一下。
对称密码使用相同的密钥来进行明文的加密和解密。
公钥密码使用不同的密钥来对消息进行加密解密。
消息认证码使用相同的密钥来对消息进行认证。
数字签名使用不同的密钥来对消息进行签名和验证。 其中对称密码和公钥密码是直接对明文进行加密,从而用来保证消息的机密性。 而消息认证码和数字签名则是用来做消息的认证,其本身并不用作对明文的加密,主要来验证消息的合法性。 其他密钥分类 上面的四种是按照加密方式和使用用途来分的,其实安装密钥的使用次数可以分为会话密钥和主密钥。 会话密钥是只用在一个会话中的密钥,用完之后就废弃不用了,而主密钥是固定的密钥,一直重复使用的密钥。 熟悉SSL/TLS协议的朋友肯定对这个比较熟悉,在这个协议中每次会话都会创建一个单独的密钥用来加密会话消息,也就是说每次会话都会创建一个会话密钥。 另外安装加密对象是内容还是密钥,我们可以分为加密消息的密钥(CEK)和加密密钥的密钥(KEK)。加密消息的密钥很好理解,之前的对称密钥和公钥密钥就是CEK。而加密密钥的密钥主要是为了减少密钥的保存个数。 密钥的管理 我们主要从下面几个方面来讲解密钥的管理:
随机数一定要有不可被推断的特性,一般来说我们需要使用伪随机送生成器来生成。 java代码中我们通常会用到Random类,但是这个类是不能用来生成密钥的。我们可以使用java.security.SecureRandom来生成密码安全的随机数。 下面是SecureRandom的两种常用用法: SecureRandom random = new SecureRandom(); byte bytes[] = new byte[20]; random.nextBytes(bytes); byte seed[] = random.generateSeed(20); 除了随机数,另外一种方式就是口令了。 口令是人类可以记住的密码,为了保证口令生成的密钥不会被暴力破解,需要对口令加盐。 简单点说就是向口令添加一个随机数,然后对添加之后的数进行hash计算,计算出来的结果就可以当做密钥了。
当密钥太多的话,离线保存密钥也成了一个非常困难的工作。这时候就可以使用到密钥的密钥KEK。将这些密钥加密后保存。 这样加密后的密钥我们不用特别考虑其安全性,因为即使被窃取也无法还原之前的密钥。我们只需要保存加密这些密钥的密钥即可。
之前的证书一文中,我们可以通过CRL列表来保存废弃的密钥。 |
|
|
|
只有小组成员才能发言,加入小组>>
4316个成员聚集在这个小组
加入小组3280 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4225 浏览 1 评论
4228 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-17 14:13 , Processed in 0.641035 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号