Code Monkey home page Code Monkey logo

kataomoi's People

Contributors

cryslith avatar duxovni avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

kataomoi's Issues

Give users a way to prove they aren't cheating

When another user takes too long to reply or gets disconnected during a time-sensitive stage of the SENPAI protocol, we currently flag them as cheating, but this could just be a problem with the server or with their internet connection. We should give users a "recovery phrase" that they can pass on to their partner if they get disconnected, containing either s or x depending on which role the user is playing in the protocol. The client will allow users to complete the answer-sharing and honesty-proving stages out-of-band if necessary, by exchanging these phrases over any medium they choose.

Allow users to select answers for other users who aren't currently online

Requiring people to organize and choose a time to use kataomoi together is a serious hindrance to using kataomoi successfully. We should allow users to select Yes/No answers for other users who aren't currently online; the protocol exchange still can't take place until both users are online at the same time, but online status can be detected automatically and acted upon by the client without further user intervention.

In more detail, this would require persistent user accounts instead of ephemeral rooms and usernames. Users would create accounts, and join (or be invited into) "circles" containing other users, who they could then select answers for. Clients would detect when users in the same circle come online, and perform exchanges then if they hadn't recently performed an exchange with the same user. Long-term client state (such as keypair, circle memberships, choices for other users, and past results) would be encrypted client-side with the user's password, and then both stored in browser localStorage (when possible) and sent to the server to be saved.

When dealing with users not in the same physical location, we'll need fancier mechanisms for authenticating mappings between real identity and username/public key. We should give users a way to display their own public key fingerprint for verification, and locally sign other users' public keys (these signatures would become part of the saved client state). Adding ways for users to verify public keys without face-to-face interaction (for example, users can upload a PGP-signed statement for other users to view) could also be useful.

Don't block with keygen on page load

Instead of just having page load stall while keys are generated, we should have a widget that says "Generating cryptographic keys, please wait..." and do the keygen in a way that doesn't hang up the browser. Not sure whether Forge's web worker keygen is useful, but we can always go with createKeyPairGenerationState and stepKeyPairGenerationState as used in their example code in the readme.

Properly handle crypto errors

I don't think we're doing anything sensible in case of issues with AES decryption or OEAP unpacking. We should make sure that an adversary who sometimes spews random garbage at the client doesn't break anything.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.