关于数字遗嘱网站密码加密方面的设计 v0.1

目前只是一个初步的加密设计,请各位指正,希望最终可以形成一套可以接受的加密和解密流程。

变量定义
username:用户名
mp:用户主密码
bp: 遗嘱接收人的密码(可选)
MSG: 数字遗嘱正文

K1:加密数字遗嘱所用的秘钥

S1:加密过的K1
S2: 加密过的MSG

H1:用来验证登录

R1:随机字符串1
R2:随机字符串2
R3:随机字符串3

MDB:主数据库
CDB:离线数据库

网站需要强制使用HTTPS

注册流程:
1.设定用户名和密码,并设定MSG
2.为用户生成R1并存入MDB
3.生成H1并存入MDB H1 = Hash(username + mp + R1)
3.为用户生成R2并存入MDB
4.生成K1 K1 = Hash(username + mp + R2)
5.使用K1加密MSG并存入MDB
6.生成R3并写入缓存
7.生成S1并存入MDB K1->加密->S1 如果用户设定了bp就使用Hash(bp+R3)作为秘钥加密K1,如果用户没有设定bp则使用Hash(username+R3)为秘钥
8.生成S2并存入MDB 使用K1加密MSG得到S2

签到流程:
1.用户登录 发送username和mp到服务器,对比Hash(username+mp+R1)和H1,如果相同登录成功
2.更新CDB中相应的释放时间

数字遗嘱释放:
假设用户设定,如果30天没有签到就释放数字遗嘱,并设定7天缓冲期
1.如果用户连续23天没有签到,发送邮件给用户提醒其签到
2.如果用户连续30天没有签到,发送邮件给遗嘱接收人,请其帮助提醒用户来签到
3.37天用户仍然没有签到,R3应该已经被释放,将R3转存到MDB,并发送邮件给遗嘱接收人邀请其登录网站接收数字遗嘱
4.遗嘱接收人登陆后,如果有设定bp,则要求其输入然后使用Hash(bp+R3)解密S1并得到K1,再使用K1解密S2得到MSG

离线数据库的使用:
项目初期限制于我只打算用一台vps,所以MDB和CDB会同时在线,但是如果有条件预计使用以下的设计。
CDB在通常情况下是一个只写数据库,生成的R3会用R3的释放时间一同存入CDB,但是在释放时间到来以前内容不可读,用这种方法保证只有用户在一定时间没有登录本网站,作为秘钥的一部分使用的R3才会被读取

Leave a Reply

Your email address will not be published. Required fields are marked *