客户端私钥如何保存?

2019 年 8 月 24 日 黑客技术与网络安全
来自公众号:车小胖谈网络
SSL要验证客户端,那么客户端私钥如何保存的?
读者可能已经熟悉访问https服务器时,验证服务器的身份是强制的,必不可少的。 而服务器验证客户端的身份却是可选的。 之所以这样规定是为了防止客户端与冒充的服务器通信,并且由于客户端很少拥有自己的证书,所以采用了客户端单向认证服务器,而服务器不必验证客户端。
 
但是,在一些场景下服务器却需要验证客户端的身份,比如企业网上报税,则需要双向的认证。在https安全握手阶段,不仅报税软件要验证税务局的服务器身份,同时税务局服务器要验证客户端的企业身份。
 
企业的数字证书的私钥保存在哪里?
保存在USB Token里。
 


为什么要保存在Token,而不是保存在电脑里?
假设Token保存在Alice的电脑,有一天Alice的电脑在办公室被盗了,或者出差的途中丢了,被Eve捡到了,公司的私钥就面临泄露的风险。
 
私钥在Token里是明文保存吗?
很显然不能,如果Alice不小心将物理Token丢失,再一次被Eve见到,Eve一样可以读出明文的私钥。所以,私钥需要加密保存,即使被Eve捡到,也只能望Token兴叹,因为没有密钥,Eve读不出私钥啊!
 
私钥通过什么方式加密?
能使用不对称方式加密吗?比如使用公司的公钥来加密私钥,很显然不能!为什么?Alice要想读取Token里的私钥,必须要拥有私钥,而私钥却加密保存再Token里,所以这是一个自锁的矛盾过程。
 
能否使用另外一张Token的公钥来加密Alice的私钥?
可以是可以,那另外一张的Token的私钥怎么来保护呢?如果也像保护Alice的私钥一样的方式,将会是一个无限的循环,无穷无尽。
 
看来只有对称加密才是最合理的选择,问题又来了。
 
加密/解密密钥从哪里来?
Token的PIN码,PIN码很拗口,如果用口令或密码则很好理解。
 
Token在发放到Alice手中时,需要Alice在税务局的柜台输入自己的口令,通常至少要8位密码,比如“abc12345”,Token会使用“abc12345”来加密Alice的私钥?
 
No,这个密码不够随机化,需要使用Hash()函数将密码随机化,然后才能当做密钥使用。此外,为了提高安全性,还需要撒点盐(Salt),盐通常包括,企业单位的名称、企业账号,然后和口令连接成字符串,做Hash运算,将Hash运算的输出,截短为128位,或扩展到256位,即得到加密密钥(Encryption Key),同时也是解密密钥(Decryption Key)。
 
税务局的电脑使用加密密钥将Alice的私钥加密之后,将其写入USB Token。
 
AIice如何从Token里被加密的私钥?
Alice输入口令,Token将口令与预先保存在Token里的盐做字符串连接,计算Hash,得到密钥,然后用密钥解密,即得到明文的私钥。


如果Alice输入的口令错误,自然无法得到正确的密钥,自然无法解密。
 
安全系数
Alice的电脑、Token一起丢失,Eve捡到了,没有Alice的口令Eve无法从Token里读出私钥。
万一Alice的电脑、Token丢失了,Alice的口令写在Token上,那神仙来了也救不了Alice。Eve可以轻松地读出Alice的私钥。
 
此外,如果Alice的口令非常简单,比如“12345678”,Eve捡到了Alice的Token,只要尝试几下就可以成功,就可以毫不费力地得到Alice的私钥。
 
所以,提高网络安全不仅仅要依赖于技术手段,而且还要依赖于人的安全意识。以上种种技术手段仅仅是将人为失误造成的风险降到最低。
 
只要Alice不把自己弄丢、不把口令写在Token上,将口令设置得尽量复杂,那么Alice的私钥就是安全的。


●编号932,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

Linux学习

更多推荐25个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

登录查看更多
13

相关内容

【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
116+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
Deep Co-Training for Semi-Supervised Image Segmentation
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
116+阅读 · 2020年5月10日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
相关资讯
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
Top
微信扫码咨询专知VIP会员