App 加密算法建议 Possible lab 土豪军 小陈
设计思路 设计简单易实现 基于安卓平台 用户密码储存于本地,即没有密钥服务器, 存入/取出过程完全不涉及网络数据交换 用对称加密(symmetric encryption),简单效率 同时用MAC保证数据真实性
安全性分析 由于两把密钥存于本地,如果用户手机被黑, 密钥丢失可能性大 解决方案:1 使用密钥服务器(不考虑)2 人脑记忆(一般密钥都长于128位,不实际)3 加密密钥(可行) 加密密钥的密钥可以是较短的用户密码, 这样用户只用一个密码就可以加密存储的N个密码
流程图 用户下载app 内嵌的随机数列生成器生成两把密钥,k1 & k2 用户安装app 用户进入app,被要求设置一个密码 用户输入的密码 p, 用来加密k1, k2。 Encp(k1), Encp(k2), 密文储存本地 用户写入的任何信息m, 使用block cipher(GCM mode) 加密(谷歌也用), 即c= Enck1(m), MACk2(c) 用户写入要存储的密码组
流程图cont. 用户本地只存储用密码加密过的密钥,用密钥加密过的用户密码组 用户要求取出密码 用户输入密码 p, 用来解密取出k1, k2。 然后用k1解密c= Enck1(m),取出m, 并用k2验证m的真实性 用户被要求输入原始密码p 用户取出密码组 窗口关闭后flush掉内存里的k1,k2和p. 用户关闭窗口
可行性分析 弱口令(p)加密密钥(k1, k2)理论上不安全, 用brutal force可以破解密钥的加密 目前最流行的包是PBKDF2, 可以解决 原理:用户输入初始密码(p)后只存Hash1000(p), 这样每次attacker尝试的密码需要被hash 1000次,即 需要约5秒试一个密码, brutal force需要很长很长时间来破。 可以考虑每隔一段时间(一个月?)内部更换密码的一位,比如p’ = p-1, hash(p’). hash值完全更改, attacker又需要重新算一遍