高分征集一个加密思路
明天我还可以再加100分。
给出一个理论上可行的思路即可。
要求是使用现有的密码体系,使用一种或多种算法实现下面的问题。
一个服务器,多个用户。
用户的所有数据都加密存储在服务器上。
用户可以随意的访问、修改自己的数据。
用户可以设置自己的某些数据在某些时刻可以被某些人访问,也可以随时撤销那些访问权限。
简单点说,有点像QQ空间的权限管理。
可以随意的设置哪些人可以进来看,哪些人不能进来看。不同的是要把权限细化到哪些人可以看到哪些文件,不能看到哪些文件。
这种设计还要求即使服务器管理员拿到了存储数据,也没有办法解密数据。
(当然,用户自己必须要有自己的密钥。现在假设这些密钥始终都是安全的。)
------解决方案--------------------单纯的加密不是问题,用可逆加密。
------解决方案--------------------首先这个问题个人感觉应该分为2个问题:
1、权限分配的问题。
这个问题可以参考操作系统的用户群和权限设置进行分类和权限定义。
权限可采用用户类型和用户名结合的方法来方便用户设置。如好友群加、减个别用户名的方法快速设定。
2、加解密问题。
密匙如果是用户自己保管并且安全的话,可以采用对称加密DES进行加密和解密。由于管理员没有用户的密匙,所以不可能打开用户的数据。
存储时,先采用用户自己的密匙进行加密。访问时,先验证权限,如果通过,然后要求用户提交密匙进行解密。如果密匙和加密的文件都正确,用户应该能正常访问。
不要在服务端存储解密后的文件。加解密可以在客户端进行,这样可以有效增加数据和密匙的安全性。
如果还需要增加安全性的话,可以考虑在服务器端再进行一次对称加密,采用公匙进行加、解密。解密时需要注意加解密的次序。
一般我都采用一次客户端用户自己密匙加解密,这样速度会好点。
------解决方案--------------------不会。帮顶......
------解决方案--------------------呵呵,还要说的哪么详细吗?
你的最后一条归入第一个问题,即权限分配的问题。
再加上一个时间区间有效性判断即可,这个在网络上不是很常用吗?
撤销就是删除特定用户或者用户群的权限分配即可。限时就用增加的时间有效性来判断。
至少在路由器上经常用。你可以参考下TP Links的路由器权限分配及时间有效性指定。
Goodluck!
------解决方案--------------------从你现在的设想,应该是不太现实的。除非是双重安全。也就是说通过授权的用户可以访问用户数据,但是是加密过的数据。同时还必须需要用户的解密密钥。不然的话,权限的分配和设置无非是数据库,文本,配置文件等存储方式,如果不是双重安全的话,管理员很容易就通过修改数据库等方式得到权限了,那么你最后说的“这种设计还要求即使服务器管理员拿到了存储数据,也没有办法解密数据”的要求就很难成立了。
总之我认为你最后对管理员的限制实现起来需要下很大的功夫设计,因为管理员肯定是拥有Windows管理员权限的,那么你服务器上任何的设置,从理论上来说,都是可以被恶意破解的。而且即使你实现了对管理员的限制,你还要考虑到用户的密匙丢失情况,在这种高安全的级别下,是没有管理员可以帮忙恢复或找回的,你需要什么样的机制来实现密匙丢失的操作呢?
以上为个人愚见,互相探讨。
------解决方案--------------------
------解决方案--------------------顶
------解决方案--------------------权限管理就可以了,加密慎用,毕竟数据库的权限功能已经很完善了,记录内容再加密,开库操作就麻烦了,成批操作也基本不行了,总之没有必要不要这样设计。
真要这样做,去搜“不对称加密”,里面就有这种情况
------解决方案--------------------这里需要对称加密,比如DES,和RSA。因为数据需要原样地给解回来。像MD5、SHA之类的,就不能用了。
不过……我觉得,楼主的描述更多的是权限的要求,而不是数据加密。因为,如果你某时刻需要对某些人公开你的数据,而不是所有人的话,那么你需要与这些人分享你的密钥。这是危险的。所以……数据加密的话,你的第二点无法满足。
同时,还需要考虑效率。还有管理的方便性。除非你可以定时地允许用户更换自己的密钥,但这样的话,就必须再次通知全部的当前可共享用户资源者。但通知的过程,这是否保密呢?呵呵。但可以公开公钥进行通信,但是双方都需要各自保存自己的私钥,这样通信的双方是不好变动的,你就不能频繁地更改“好友”。加密不仅无效,反而成为了累赘。
总之,你的要求,按照目前的有效机制来说,自相矛盾……毕竟,现有的机制也是你要求的。
------解决方案--------------------按照楼主的意思多半是在说权限问题,如果是权限就要简单,需要在数据库里设置就可以了
------解决方案--------------------权限问题,楼上们都已经解决了,加密问题可以用MD5加密,可以在客户端加密后存储在服务器上。其他用户验证时,需要权限和密码。
------解决方案--------------------推荐使用AES加密
------解决方案--------------------需要密匙和KEY以及向量
------解决方案--------------------在我看来你这个肯定问题是数据库设计的问题,在你实现了功能之后再来考虑加密的问题,是吧?
“用户可以设置自己的某些数据在某些时刻可以被某些人访问,也可以随时撤销那些访问权限。 ”
我想到的解决方案是这样:你在设计数据库的时候有一张用户表(userid,...),一张文件表(fileid,...),你可以从这两张表中再建一张访问权限表:(fileid, userid, 访问权限,时间段),fileid, userid为主键,这样就维护不就可以实现你的功能了吗?
至于用什么加密方法,非对称和对称加密方法都可以,看你的安全级别是多少了。
------解决方案--------------------