The Website
Crypto Basics
  • One-way hashing is an important concept behind some of the security and privacy features of the Aytwit website and Thoughter especially. Imagine Alice writes a secret on a piece of paper using a big marker, lays the paper on the ground, and lights it on fire. The ink causes the paper to burn in a special way compared to a plain piece of paper, but when Bob looks at the ashes he can't guess the original secret. Now imagine that Chris comes up and writes the same secret (secretly) on a second piece of paper and lights it on fire the exact same way as Alice. Physically impossible of course but you get the point. Bob can look at this second pile of ashes and confirm it looks identical to the first pile. Thus Alice and Chris can prove to Bob they know the same secret without showing the actual secret. One-way hashing is the mathematical equivalent of all that.
  • Symmetric Key Encryption is where you take plain text like the word "Hello", create an encryption key using (for example) a password, then through dark mathemagic use the key to encrypt the text so that it is indistinguishable from random noise. Maybe you end up with "pRhX". It will always be different depending on the key and you can't turn it back into the word "Hello" without the key. So unlike a one-way hash, you can take the paper ashes, cast a reversal spell with your wand (the key), and turn it back into the original piece of paper with the secret written on it.
  • Security Tokens are really big random numbers. So big that it's impossible to roll the same one twice. Well, if you made one roll every nanosecond you might get a duplicate before the Sun exploded. This makes them good secrets to give out. For example if you use Thoughter with email it attaches such a random token in a link to the first email it sends you after pushing a thought. When you click the link it gives Thoughter the token back, thus proving you own the address, because nobody else can provide that number unless they're spying on your email (or frantically rolling big dice enough times before the sun explodes). That same token is used by Thoughter as the Symmetric Encryption Key for your data, and Thoughter stores the One-way Hash of the token in the database alongside your encrypted data. The hash lets us "match ashes" while not leaving a proverbial key in the door.
The Stack
  • Ikwyt for application logic and rendering.
  • Simple SQL table for completely anonymous analytics and patronage metrics.
  • Java 8 programming language and runtime.
  • Bouncy Castle for AES-128 and SHA-256/512.
  • jBCrypt for bcrypt hashing.
  • GAE for running the application, auto-scaling, job queues, etc. Eventual plans to move to self-hosted infrastructure.
  • Google Cloud SQL for database storage. Again eventual plans for self-hosting.
  • Luminati for proxying proof check requests to social network profiles for Thoughter.
  • Hover for domain name registration.
  • Postmark for all outgoing transactional emails.
  • Stripe for credit card processing.
Future Plans
  • Support more secure communication mediums beyond email, like encrypted messaging protocols and SMS. Thoughter for example can only use email for outgoing communication. It's very tricky to send messages through other identity providers like social media. Possible but tricky.
  • Move from cloud to self hosting.
  • Add support for Bitcoin and other cryptocurrencies for donations and the shop
  • Add support for more than two people per thought on Thoughter.
  • Implement Thoughter protocol v3 that encrypts/decrypts all sensitive at-rest data on clients.
  • Make a mobile app for Thoughter with thought match notifications and hashtag shortcuts.
  • Release Ikwyt publicly, the software verification engine running this whole site.
  • Get some physical contraptions under final development in our labs available for sale in the shop.
Basic Idea
The combination of identityA + identityB + hashtag is the secret that both parties know. Not like super secret but still pretty secret, and Patron-adjustable in strength depending on the situation. This combination is first one-way hashed so it's matchable yet remains a secret, and then forms the encryption key for both people's thought messages. You can figure out the rest yourself, but here is the down'n'dirty SQL spec. If that's a little too heavy at this time of day then let's walk though it...
  1. Receive two identities (e.g. Email address, Facebook username, Twitter handle, etc.) and a message containing one hashtag from Alice, who wants to match a thought with Bob.
  2. Combine the two identities and the hashtag into one long string.
  3. Do a one-way hash of this string.
  4. Generate a security token, use that token as an encryption key for Alice's Thought data, insert (a) the encrypted Thought data, (b) the hashed Thought data, and (c) a one-way hash of the token all into the database. Note also that the hashed Thought data is further encrypted by a master key located on the application server.
  5. Alice must now prove she owns her Email, Facebook, etc. account...
    • If using email, send her a link with the thought token that she must click to prove she owns the email account.
    • If using Facebook, Twitter, etc., Alice must copy a given random alphanumeric passphrase into her public profile.
  6. She has 30 minutes to prove ownership...
    • If she never does, a cleanup process will delete the unconfirmed Thought after 30 minutes and the funnel ends here.
    • If she does prove ownership...
  7. Mark the account ownership confirmed and the Thought available for matching. This means taking the Thought's message and encrypting it using the hashed Thought (one-way hash of the two identities and the hashtag) as the encryption key and adding all this in another field in the database, which is also encrypted by a master key on the application server for further defense. All Thought data is now encrypted even from Thoughter itself.
  8. Alice now waits for Bob to match the Thought. To help her chances she can ask Thoughter to send a hint to Bob.
  9. Some time later Bob gets the Hint and can attempt to match the Thought if they wish...
    • If he doesn't then Alice's Thought data is deleted by a cleanup process at the end of its duration and the funnel ends here.
    • But if he correctly guesses the hashtag and who sent the Thought...
  10. Remember Alice's Thought data is locked from Aytwit, but Bob's Thought data acts as the symmetric key to (a) check if there's a match in the first place and (b) unlock the match. In this case there's a match so...
  11. Inform Alice and Bob of the thought match. Bob is informed immediately. Alice must either refresh the page again or sign up for an email notification.
  12. Delete all of Alice's and Bob's data from the database.
There's only one inherent conceptual weakness in Thoughter's protocol. If the Federales knock down the door and demand to know whether Pancho Villa has an unmatched thought to Francisco Madero using #vivaLaRevolucion, that can be checked. However, the Federales must provide the exact email addresses and hashtag used within the time window that Pancho pushed his thought. In other words they must already know the information they're looking for in the first place, and look for it at the right time. They can't just look through the entire database to see if any revolutions are forming. Furthermore, Pancho and Fransisco can use private email addresses or a secret hashtag to make it practically impossible for anyone to decipher their shared thought. And of course the thought is deleted as soon as it can be. As a result of all this, if there's a public database leak, not only is the data limited and largely useless, but it is also encrypted by a private key stored entirely separately from the database. So a hacker would have to compromise two separate systems and their reward would still be a bunch of random numbers and letters, each row of which is only decipherable if the hacker knows the two email addresses and the hashtag used to form that row. And if they know it already then the information causes limited damage.
If Alice pushes a thought to Bob, Alice can have Thoughter send a hint to Bob without revealing the whole thought or who it's from. This helps solve problems like Bob not even knowing that Thoughter exists, in which case Alice's thought would obviously never get matched. Sending a hint costs $0.50 USD to help support the service and reduce spam. As the service becomes popular then hints may be used less. Here are the following hint types and what they reveal:

  • Anonymous: The other person is told that someone is thinking something about them, but not who or what.
  • Hashtag Only: The other person is given the exact hashtag you used in your thought and that's it. They have to guess who sent it and on what platform.
  • Platform Only: The other person is given the platform (Email, Facebook, Twitter, etc.) and that's it. They have to guess who sent it and what hashtag was used.
  • Platform and Hashtag: The other person is given the platform and hashtag. They just have to guess who sent the thought.
  • Identity Only: The other person is told who precisely sent the thought. They just have to guess the hashtag.
  • Everything: The other person is told who sent the thought and the hashtag. This is useful for hashtags like #coinFlip, #rocksPaperScissors and for secure messaging with a #channelName.
General Policy
The Aytwit project strives to inspire trust and sparkle with transparency in every way possible - social, legal, and technical. There is no software system that can be trusted 100% and the Aytwit website is no exception. But most of the work that goes into projects like Thoughter is aimed at establishing the most trust possible. So you should always be suspicious, but Aytwit logically deserves at least a tiny bit more trust than most online entities, because instead of openly selling your data you're asked for money to help protect it. So it would be extra evil to take both your money and your sou- I mean data. Like devil evil. But this is not the devil. Trust me.
  • Do not track any freely available information like IP address and Browser User Agent from website visitors. In fact don't even have a way to know how many people are visiting the site. This is unlike 99.9% of websites that are tracking and measuring everything they can.
  • When someone's personal data is required, like for Thoughter or subscribing, ask for as little information as possible.
  • What little is asked should be encrypted as securely as possible, even to the degree that only the visitor or a chosen other party can decrypt it, because...
  • Assume all stored data will be leaked at some point and act accordingly.
  • Keep all the HTML, CSS, and JavaScript for the website easily readable and auditable. No minifying or obfuscating.
  • Respect the resources, time, attention and personal cyberspace of all people who visit the website or utilize its goods and services in any way. So no tracking, ads, or dark patterns. Keep the site fast to load and simple to render so it looks and works the same on all devices. Avoid visual/layout changes unless absolutely necessary. Minimal access by, or use of, third parties. Lots of sub-rules here.
  • Assume every vistor's cyberspace is already being unknowingly invaded and disrespected by questionable entities, even authorized tenants like email providers, browser plugins, web browsers, and operating systems. Therefore always transmit as little information as possible so the gremlins don't have as much to chew on.
Technical Considerations
  • Email is currently an identity you can use with Thoughter and it's insecure on several levels. It is encouraged to use one of the other identity options like Facebook or Twitter in order to keep all of your information confined to Thoughter's iron clad protections.
  • Credit card information is handled entirely by the payment processor Stripe, for example for donations or the shop. The Aytwit server never stores or even sees any actual credit card information. It is sent to Stripe directly from your browser over an encrypted connection and they return a token (which is a fancy word for a bunch of random letters and numbers) to Aytwit. When it comes time to charge your credit card, the Aytwit server sends this token back to Stripe and they charge your credit card. Credit cards are pretty secure but they don't allow anonymity, so cryptocurrencies are on the short list for new features.
  • Data Transfer to/from the website uses TLS to protect data over the wire, but for Thoughter Aytwit's server currently sees emails and messages for a brief instant before deleting them and/or mathemagically scrambling them for everyone except the two parties who are thinking of each other. A second version of the protocol is already designed to account for this weakness, where at-rest encryption happens before data even gets to Aytwit's server, but implementing it will take time.
  • Server Hosting is currently provided by Google's Cloud Services, which is fine for now, but who knows how Google is sniffing around. For sure they're logging stuff that I don't want to be logged. So it would be nice to self-host more and more infrastructure in the long run.
  • Social Media Integration is actually NOT integrated at all! Most other websites use things like "Sign In With Facebook" and this not only gives Facebook more information about you, it also lets a website sniff your information from Facebook. Aytwit has a very clever way of verifying that you own a particular social media account, WITHOUT letting that social media company know about it at all. This is a bit hard to explain, so just try Thoughter to see how it works.
  • Cookies are only used in the event that you choose to remember your third party account (email, Facebook, etc.) so you don't have to reprove your ownership. In this case an HTTP cookie is set that stores a unique identifier. For extra security, only a hashed version of this identifier is stored in the database. See Crypto Basics for more technical discussion about the benefits of hashing.
  • What is not done (just to be clear) is storing any Personally identifiable information unless you subscribe or donate on a recurring basis, in which case we store your email address encrypted in a database. See the subscriber SQL table for more details, but the main thing is that this is a major step beyond how your email is stored by 99% of other websites. Anyway, no personally identifiable information is shared with third parties beyond the temporarily necessary "evils" outlined above of using email as the communication medium and 3rd party services for donation mechanisms. But everybody does that, and again even those technicalities will both be addressed.
Legal Considerations
There are probably a few ways to make Aytwit more trustworthy through legal mechanisms, but this is not something that has been looked into deeply yet. Some possible options here include passing third party audits, official compliance with new regulations coming out of various governments, turning Aytwit into some kind of nonprofit entity that is inherently more open and "aquisition-proof" than standard corporations. Who knows. Need to talk to some lawyers and get back to you.

For what it's worth Aytwit is currently an LLC registered in the state of Delaware just because that was the simplest option to get started.
Social Considerations
  • Open Source is a good signal for inspiring trust. Aytwit will eventually be open sourced, probably under some flavor of the GPL so that anyone may see the actual code.
  • The Website Itself along with all the writing here hopefully signal strong passion for ensuring privacy and security. If Aytwit is a plot to collect personal data and sell it to ad agencies then it's really protesting too much.
  • The Identities behind Aytwit in the end shouldn't matter too much. After open sourcing everything, forming proper legal structures, improving protocols, etc. etc., then we could be an ad agency or the NSA and it wouldn't (greatly) affect Aytwit's privacy guarantees for projects like Thoughter and Ikwyt. But anyway for what it's worth here's my profile, which should show that I'm at least not probably trying to steal your data.
  • Incentives are interesting to consider. For example Big Tech companies have a huge financial incentive to minimize your privacy. So even if they say otherwise in their privacy policy, or have some technical proof that seems ironclad, there's still that incentive lurking in the background. Aytwit's incentive is to pursue interesting engineering projects that hopefully generate enough honest money to sustain themselves. Of course incentives can change at any time so they're not worth much. Just something to consider.