Mic*_*ley 6 ruby security encryption openssl public-key-encryption
我提前为传入的Wall-O-Text道歉.这是(至少对我来说)一个相当复杂的问题,我已经考虑了很多.你可以阅读我的问题,也可以在这个GitHub Gist中看到Ruby中的测试实现(非常匆忙构建,而不是数据库支持,可能非常难看).
想象一下,需要创建一个基于Web的密码管理系统(通过SSL!:),具有以下要求:
我不是密码学方面的专家.在考虑了一段时间后,我想出了以下内容. 我的问题是:这种实施安全吗?我错过了什么吗?如果是这样,上述规范是否可以实现?或者这有点矫枉过正?
数据库设置如下:
+------------------------------------------------------------------------------+
| users |
+---------+--------------+--------------+---------------+----------------------+
| salt | pub_key | enc_priv_key | priv_key_hmac | |
+---------+--------------+--------------+---------------+----------------------+
| entries |
+---------+--------------+--------------+---------------+----------+-----------+
| user_id | parent_entry | enc_sym_key | sym_key_sig | enc_data | data_hmac |
+---------+--------------+--------------+---------------+----------+-----------+
Run Code Online (Sandbox Code Playgroud)
让我们想象一下系统的两个用户,Alice和Bob.
鲍勃报名参加该网站:
salt字段中.pub_key字段中以纯文本格式存储.私钥通过AES-256使用Bob的密码和salt生成的哈希作为密钥加密并存储在enc_priv_key字段中.priv_key_hmac字段中.Bob 在系统中存储一个条目:
enc_data字段中.data_hmac字段中.enc_sym_key字段中.Bob 检索他存储的条目:
priv_key_hmac.enc_sym_key使用Bob的私钥解密存储在字段中的对称密钥.sym_key_sign使用Bob的公钥验证签名来验证加密的对称密钥未被篡改.data_hmac字段中的HMAC来验证加密数据未被篡改.Bob 和Alice分享了一个条目:
parent_entry设置为Bob的条目.parent_entry会导致系统使用Bob的公钥来验证签名(因为他的私钥用于创建它).Bob 更改了共享条目中的数据:
parent_entry等于刚修改的条目,并且每个条目都覆盖"Bob与Alice共享条目"中创建的数据.好处:
缺点/问题(我能想到):
从介绍中反复出现:我的问题是:这种实施安全吗?我错过了什么吗?如果是这样,上述规范是否可以实现?或者这有点矫枉过正?
谢谢你坚持这么久.我对你的意见感兴趣!我是在正确的轨道上,还是一个完整的白痴?你决定!:)
没有静脉注射储存?我猜你可以使用 AES-256-ECB,但这只允许用户存储 32 字节密码,并且你需要确保生成的私钥仅用于一种加密。(您当前的设计在这方面似乎是安全的,但如果您希望允许密码长度超过 32 个字节,或者考虑让此密钥发挥双重作用,则需要为每次加密存储 IV。)
我看不到priv_key_hmac和的安全价值data_hmac;如果私钥或加密数据被篡改,则使用私钥或对称密钥解密将产生垃圾输出。当鲍勃不知道如何输入该BEL字符时,他肯定会产生怀疑。:)(人类会看到输出吗?人类可能会意识到返回的密码是不正确的,而无需告知。计算机无法区分其中的差异,因此,如果自动化系统将使用生成的密码,那么当然,请保留田野。)
没有“我忘记了密码”的机制。确保您的用户知道,如果忘记密码,他们的数据将无法恢复。如今,用户受到了宠爱,并且可能也期望受到您的服务的宠爱。
我没有看到用户可以指定鲍勃想要解密哪个条目的机制。您应该为每个条目存储一个名称,或者像ssh(1)中那样known_hosts,存储名称的散列版本。直接存储名称将消除 SHA-256 操作,但报告用户拥有帐户的服务的明文名称的数据库泄露可能同样具有破坏性。(也许是在线陪护服务,或离岸银行,或搏击俱乐部。)
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |