Are You Thinking What I'm Thinking?

#1
Hello HF!

I'm really digging the vibe here so far. Respect to @dchuk for taking the initiative. I hope my post generates some good discussion and feedback.

Here's the link: https://aytwit.com

I've had this project 99% of MVP for a while. When I saw the post on hacker news the past week introducing HF, something inspired me to finish up and post here. I was mostly trying to get that first Show HF spot :) But I had to take some time this weekend to finalize things so I guess I'll settle for 3rd place.

Thanks for looking!

Doug
Latest side project is https://aytwit.com. Check it out!

Re: Are You Thinking What I'm Thinking?

#4
how will that work with the message expiry dates?
Thank you for the question :)

Both the date that the message was pushed and the duration of the message are stored in plaintext alongside various other hashed/encrypted columns in the database. It's kind of buried right now but see https://aytwit.com/about/sql#thought_table for details.

I haven't thought of any real privacy leak that can happen from keeping these plaintext, barring any errors in implementation, or penetration through a few other layers of defense, which would mean bigger problems. And these time values are also kind of needed so that a background process can periodically sweep the table of expired thoughts.

That all said, as another layer of defense, they could be peppered or somehow included in one of the TLVs, but it's probably not worth the extra CPUs. A middle ground is to anonymize them more by rounding everything to the nearest minute, or 5 minutes, etc. That would kind of depend on traffic rate as far as effectiveness.

THAT all said, I'm first shooting to just get https://aytwit.com/about/sql#event_table public. Perhaps the other tables should be kept private just out of paranoia.

Thanks again for the question.
Latest side project is https://aytwit.com. Check it out!

Re: Are You Thinking What I'm Thinking?

#6
Ooh, your comments in the sql spec are great! And thanks for your answer to my question :)

Could you get away with just storing the expiry date, and not the push date? That'd give you enough to clear old messages, but viewers wouldn't be able to tell the duration. You'd need more trickery to do the email validation though, I guess. And you mention maybe using the push date for rate-limiting (but maybe rate-limiting data shouldn't be public, or could be done without data by proof of work).

If you were to make the thought table public, that would just be for single queries by `thought_token_hash`, right? To get the client-side encryption (which would be super neat), you'd need to make it at least that public? If I were using it, I'd feel better (paranoia-wise) with client-side encryption over hidden server magic, although that's possibly not realistic risk-wise :P

Re: Are You Thinking What I'm Thinking?

#7
Thanks for your thoughts @t0rt0ise. Hmm you may be right about being able to just use expiry dates. It's crazy the simple stuff you can miss when you're in the weeds. I'll leave it for now since I don't think it matters too much even if the table were leaked, but thankfully that scheme is something that I can migrate to pretty easily anyway as paranoid defense.

With the thought table getting made public, it would be the whole table. I try to think of the hacker scenario and make sure this whole table is leakable without any privacy concerns. Client-side encryption would involve clients passing me the `thought_yours_ciphertext__peppered` column directly (pre-peppering). Obviously there would have to be a different "out-of-band" flow here for validating email addresses. But after email validation, I could pass the native app a session token that they could use thereafter to prove ownership of the address. So the server would have to see a patron's email address in plaintext just once per native app install, and never see thought messages or the recipient. As far as "thought matched" communications, I wouldn't even use email (since I wouldn't have the recipient address available anyway), but just native app notifications, probably by the app polling the server periodically. So you would get the privacy win of avoiding email as well.

Thank you again for your thoughts about expiry dates. Might just have to tackle that after work tonight :)
Latest side project is https://aytwit.com. Check it out!

Re: Are You Thinking What I'm Thinking?

#8
Hi I just wanted to give a big thanks to @t0rt0ise for the feedback about thought-related timings. I managed to get rid of both `thought.thought_dawning` and `thought.thought_duration` and replace them with one column, `thought.thought_expiration_time`. The two removed column values now exist in the TLVs of various encrypted columns instead. I can see now why I kept the timings plaintext for initial release. There were several compromises that had to be made with reduced event tracking "completeness" and extra cryptographic operations. But since there's supposed to be paranoid-level privacy and anonymity, the compromises are well worth it and it makes everything look and feel much cleaner.

I also got rid of `thought.event_id` and moved that into encrypted TLV columns as well, since that was another known "leak" through cross-referencing with the `event` table for `event.thought_duration`. See https://aytwit.com/about/sql#thought_table for the new spec.

Anyway, @t0rt0ise, I know you probably gave that feedback as a minor distraction from your normal day and forgot about it, but for me it was very insightful and made me think a lot and introduce some subtle yet positive changes into the system. Is there any way I can thank you a little more, um, materially? Something like Patreon, Flattr, etc.? Your feedback was well-worth at least a few beers. Please PM me!
Latest side project is https://aytwit.com. Check it out!

Re: Are You Thinking What I'm Thinking?

#10
Well, the first thing I thought about when I read the title was that line from Pinky and the Brain.

https://www.youtube.com/watch?v=v-xrnIXQ3iQ

But I guess for this project to work you're kind of hoping for the opposite. That people are indeed thinking what other people are thinking, and not about where you can find a duck and a hose at this hour.

Either way, it's an interesting idea, and the example you give of a father and son wanting to reunite after a fight makes me wonder when the first big 'news story' could come out this one. Seems like there'd be a lot of material for the Buzzfeed/Reddit/tabloid news sites of the future.
Longtime journalist, web developer and owner of Wario Forums and Gaming Reinvented.

Re: Are You Thinking What I'm Thinking?

#11
Glad you took this as the impetus to ship it!

I'm wondering about some of the use cases - like if I'm in a relationship in the breakup example and I get a hint, I'll certainly know who it came from and I don't know if it gains anything over just standard talking to the person. In many, it feels like including the specific hashtag is a requirement, how do I know if it's e.g. #sorry or #imsorry or #apologies?

I've seen this model put to good use when both parties know they're participating but don't necessarily want to show their hand on something potentially embarrassing, like bucket list items or sexual preferences.

Really like the thought-through privacy and crypto.

Re: Are You Thinking What I'm Thinking?

#13
CM30 wrote:
Tue Jun 05, 2018 6:52 pm
Well, the first thing I thought about when I read the title was that line from Pinky and the Brain.

https://www.youtube.com/watch?v=v-xrnIXQ3iQ
Ha yea love that show and that image still pops into my head.

CM30 wrote:
Tue Jun 05, 2018 6:52 pm
Either way, it's an interesting idea, and the example you give of a father and son wanting to reunite after a fight makes me wonder when the first big 'news story' could come out this one. Seems like there'd be a lot of material for the Buzzfeed/Reddit/tabloid news sites of the future.
I'm way too technical and haven't thought at all about the publicity/marketing aspects of this, so I appreciate this feedback from the non-technical side of things. Although I don't know where to start past throwing this up here and on HN. On the HN post someone had a similar line of thought: https://news.ycombinator.com/item?id=17242319
Latest side project is https://aytwit.com. Check it out!

Re: Are You Thinking What I'm Thinking?

#14
localtalent wrote:
Tue Jun 05, 2018 7:02 pm
I'm wondering about some of the use cases - like if I'm in a relationship in the breakup example and I get a hint, I'll certainly know who it came from and I don't know if it gains anything over just standard talking to the person.
In that case you could send either a "general" hint that someone is thinking something about you, or that you specifically are thinking something but you don't tell your partner what it is exactly. See https://aytwit.com/about#hints for more details.

localtalent wrote:
Tue Jun 05, 2018 7:02 pm
In many, it feels like including the specific hashtag is a requirement, how do I know if it's e.g. #sorry or #imsorry or #apologies?
Very good question! Few ways to solve this. One of course is to just include the hashtag in a hint. Another is that hashtags for different common situations can slowly get "standardized", either organically or by having a dictionary on the site. Yet another is that a Patron can push multiple thoughts with all those different hashtags.

The UX for the latter (multiple pushes) is for now annoying. In the future I want to add session support, so you don't have to confirm email and input CC information multiple times. That way you could just blast off lots of thoughts with every possible hashtag for the given situation. I also want to support messages with multiple hashtags.

See second paragraph of https://aytwit.com/about#deep_example for basically the same situation.

localtalent wrote:
Tue Jun 05, 2018 7:02 pm
Really like the thought-through privacy and crypto.
Thanks! Those are the parts that took 99% of the time and a few years of work (~few hours a week). So I definitely want those to be appreciated, since otherwise this would have been a weekend project. :)
Latest side project is https://aytwit.com. Check it out!
cron