设想我们在ZeroNet上搭建了一个分布式OJ,会有怎样的问题
首先是评测,zeronet是没有服务器的概念的,分布式框架会使得所有人获得所有与站点相关的数据,但没有人提供计算服务(除了你自己)
因此谁来评测这个问题,回答应该是用户自己评测
用户自己评测带来第二个问题,无法规定时限和空间限制,这是硬伤,同时也提醒我们这个OJ很有可能要办成(旧)gcj赛制
然后是数据的in和ans,如果这两个数据都公开的话,这就不叫OJ了,只能算是数据共享网站
在对数据加密状态下进行计算在理论上使用同态加密是可能的,但是同态加密带来的计算消耗是无法忍受的
因此in文件应该公开,需要关注的是out
抽象化这个问题,出题人Alice出了一道题,并知晓答案为x,而一个聪明的解答者Peggy得到了x,并希望向大家证明他得到了x,但不希望向他人透露有关x的信息(用户不能通过观察其他用户的提交来获取答案),Victor是一个验证者,在不知情x的情况下希望验证Peggy是否是对的,注意Alice不会一直在线,她只能够留下一些信息
经过一天思考和查阅资料,搞定了
Alice随机一对RSA密钥(sk,pk)并公开 x xor sk和pk
Peggy通过x计算sk,并公开r,E(r,sk)
Victor验证D(E(r,sk),pk)=r
完
有空可能会写这个OJ
《分布式OJ的数据加密》有一个想法