第21章存储秘密
怎样存储像口令和密钥这样的长期秘密呢?
这个秘密应该保持其私密性
丢失这个秘密的风险应该尽可能小
21.1磁盘
直接办法:把秘密存储在计算机的硬盘上或其他永久存储介质上
问题:需确保设备安全、用户可能会用多台设备、秘密不便携
更好的解决方案:让 Alice把密钥存储在她的PDA或智能手机上
21.2人脑记忆
记住口令?
人脑记忆能力差
不存在简单又安全的口令
攻击者用穷举就能攻破
可能只能用单词记忆长字符
好的口令不可预测
好口令应包含大量熵
用户拒绝使用过长至安全性到128位的口令
密码短语的想法
密码短语相对单纯口令可以更长更好记,如句子中每个单词的首字母
要确保句子唯一性
储存128位熵依然困难
加盐
盐就是一个随机数,与加密的口令存放在一起
最好采用256 位的盐
攻击者同时攻击大量口令时。盐能够防止他利用规模扩大而节约计算量
扩展
对口令进行加密的数次长计算
令p是密码口令,s是盐。使用任意保密性强的散列函数h得到密钥K来实际加密数据。参数r是计算迭代的次数,只要实际情况允许,r值应该尽可能大。
攻击者角度
给定盐s和用K加密的数据,你试图通过尝试不同的口令来找到K。选择一个特定的密码口令p,计算相应的K,用它解密数据,检查解密结果是否有意义并且能通过相关的完整性检查。如果不是,则p必定是假的。为了检查单个的p,必须要做r次不同的散列计算。r越大,攻击者做的工作就越多。
21.3便携式存储
在计算机之外存储
最简单的存储方式:把口令写在一页纸上
问题:每次使用口令时仍然需要通过用户的眼睛、大脑和手指来处理。为了把用户的错误限制在一个合理的界限内、这种技术仅仅适用嫡比较低的口令和密码短语。
便携式存储:一张存储芯片卡、一张磁条卡、一个USB 盘或是任何其他种类的数字存储设备
优势:数字存储系统总是能存储至少256位的密钥,因此我们可以排除低熵的口令
特性:非常像一个密钥,无论谁得到它,都能够拥有访问权,因此需要安全地放置。
21.4安全令牌
更好但也更贵的解决方案:使用安全令牌设备。这是 Alice能够随身携带的一个小型计算机。
形态:从智能卡到iButton、USB 加密狗或PC卡。
主要性质:有一个永久性存储器和一个 CPU。
安全性改进:通过口令或类似的方法来限制访问被存储的秘密、 在物理层面上保护了令牌(偷+破解)
需要注意的问题:用户行为,用户应始终把令牌带在身边,通过用户培训或其他方式养成
21.5安全UI
我们并不信任PC
在令牌中内置安全的UI,可以直接输入令牌而不用信任外部设备,防止PIN被攻破
为了防止PIN被PC泄露,我们最好在令牌中也前任密码学过程
最终会发展成一台全功能计算机,最相近的产品是个人数字助理和智能电话
21.6生物识别技术
结合生物识别技术可以把安全做得漂亮些,但安全性不够
方案:将指纹扫描仪或虹膜扫描仪设备嵌入安全令牌
问题:安全性不高,能够简单低成本地被欺骗
不过可以提高攻击成本,提供一点点的安全性
21.7单点登录
用户都有很多口令,因此产生一个单点登录系统就变得很有吸引力。
用给Alice一个的主口令,来给不同应用中的不同口令加密。
准备工作:所有的应用都必须与单点登录系统对话。大规模的工作带来了挑战
简单方法:用一个小程序把口令都存在一个文本文件中,登录时自动读入
21.8丢失的风险
代价:至少是不得不给每个应用注册一个新密钥,严重的话会永远失去访问重要数据的许可权
经验法则:把功能分开。保持密钥的两个副本∶ 一个容易使用,另一个更可靠。如果容易使用的系统忘记了密钥,可以从可靠存储的系统中恢复它
21.9秘密共享
将个秘密分成几个不同的分块(share),其中若干个组合后可恢复
技巧:任意两个人在一起绝对不会知道关于密钥的任何事情。
问题:应用、管理、操作都很复杂,不适用于现实工作
21.10清除秘密
只要秘密不再被需要,它的存储就应该被清除,以免将来被泄露。
21.10.1纸
烧掉后碾成粉末或混成泥浆
21.10.2磁存储介质
反复重写数据,请注意:
每次重写应该使用新的随机数据
一定要在存储秘密的实际位置重写
保证每次重写是写到磁盘上,而不是写到磁盘缓存中
清除自秘密数据之前开始,且到它之后结束一段区域
消磁机或消除介质理论可靠但不现实
21.10.3固态存储
消除非易失性内存(像 EPROM、EEPROM 和闪存)时对旧数据进行重写不能根本地清除旧数据
最好销毁固态存储
21.11习题
1.1 了解登录口令是如何在你的计算机中存储的。试编写程序,根据给定的被存储的口令(经加密或散列后的),对真实口令进行穷举搜索。穷举头一百万个密钥口令需要多长时间?
答:登录口令被存储在C:\WINNT\system32\config目录下的SAM文件中,而微软的服务登录通过微软账户单点登录,使用Advanced Archive Password Recovery穷举十进制口令,平均需要260ms(i7-8750H,60%性能下)
21.3 给定一个24位的盐。64个用户中。两个用户有相同盐值的概率是多少?1024个用户呢?4096个用户呢? 16 777 216 个用户呢?
答:盐值有224个可能,两人中有相同的可能为224/224*2=1/224,64人中有2人相同的概率是C2 64/224=1/219 ,1024人中有2人相同的概率是C2 1024/224=1/215,16777216人中有2人相同的概率是C2 64/224=1/2
21.4 举出一个维护长期秘密的产品或系统。
答:银行保险箱、