作业6 访问控制
题目:
设计一个投票系统APP,投票信息关乎隐私,一般采用无记名投票,但在网络上投票具有可溯源性,明文传输别人窃听,就会知道投票人投谁的票。为了保护隐私、又要确认每个人都投了票,要求设计一款APP。
软件需求:
- 采用网络服务器server + 用户手机app模式,
- 主要功能包括:注册、登陆、报名参加选举人、app投票、统计公布选举结果。
- 投票,单选,内容为各选举人加弃权。
- 确认每个人都投了票,而且投了有效票。
- 任何人(包括服务器管理员)也不能知道投票人投了什么票。
- 网络传输要防止窃听。
设计要求,
- 写清楚你的系统为了完成上述功能要求,设计了那些功能模块,每个模块有什么功能;
- 写清楚你的认证协议,要核实身份,是不是有效注册用户;
- 写清楚你是如何保证隐私不被别人得到的;
- 写清楚如何保证无法伪造投票。
大家加油吧。
题目作答
功能模块与对应功能
模块一:登录模块(通过注册和登录确定用户是人而不是机器,防止机器刷票)
模块二:身份选择模块(仅以投票人的身份还是选择成为被选举人,成为被选举人则server在投票列表中加入该用户)
模块三:投票模块(用户给自己想要投票的人投票)
模块四:统计模块(server对用户发送的投票信息进行认证和统计,并实时公布选举结果)
认证协议:
采用Needham-Schroeder公钥认证。服务器首先需要通过邮箱或者手机核实这是一个真人,然后允许其注册账号,并为该用户生成完全独立而保密的私钥和对应的公钥。用户在登录时,服务器给用户一个明文挑战消息,用户接收到挑战后,用自己的私钥对挑战明文消息加密,称为签名。然后用户将签名信息反馈给服务器,服务器用该用户的公钥尝试解密,即验证签名,来确定此用户的合法身份
隐私保证
用户端与server的通讯应在安全信道中进行,并对传输信息进行加密。用户需保管好自己的私钥。
在用户进行“报名参加选举人”操作时,用户端与server会使用Kerberos进行身份认证,可以保证客户端与server的真实性。
在用户进行“app投票”时直接使用环加密,并将签名好的信息直接发送到server;server在接收信息的同时进行身份认证。
无法伪造
环加密算法中,需要使用n个公钥(包括信息发送者)及信息发送者的个人私钥生成签名。在AOS环加密中使用的变色龙哈希是一种输入为特定结构的哈希函数,其中包含陷门(trapdoor)。直到陷门的用户可以通过构造输入数据使在改变输入的情况下使得输出不变。