it's not steganography. the messages have little dots in them - they are very distinctive. it's trivial to find anyone using this.
why not use a typo instead? switch the letter at that point to another letter (could be a different one for each sentence). use fuzzy matching (eg locality sensitive hash) to find the correct sentence.
and construct the dictionary from previous tweets rather than books. then tweets look like tweets.
Good idea about using typos instead of a middle dot marker (TBH, it's not as unobtrusive as I would like, so perhaps it's better to rethink that part of the system).
For those who aren't aware, "Drink more Ovaltine" is a reference to the movie A Christmas Story [1]. The boy in the story is excited to decode a message from the Ovaltine fan club using his decoder ring and is let down when the message is just "Be sure to drink your Ovaltine." [2]
The ad application is interesting; I hadn't been thinking along those lines at all...
I considered using public keys, but I didn't want the resulting encoded tweet to be illegible or look like gibberish.
The conceit here is that even a secret message looks completely innocent, something that no eavesdropper would notice as being out of the ordinary (though the middle dot marker does give it away, to people paying attention).
Yes, that's the simplest way to make the encoded tweets look natural, i.e., truly steganographic, but it's a fine balancing act between that and not making the corpus obvious.
The content of the corpus doesn't matter, so the answer to your first question is no, and yes, if you're clever in terms of how you've composed the corpus so that no one could re-create it easily, then it's ok (relatively speaking, of course).
Instead of using a corpus, why not select tweets from a list of followers and re-tweet them? This would make your encoded messages more like a natural twitter stream. You could curate followers lists to be themed around a subject (tech, gardening) to make them more naturally align with the rest of your twitter stream.
Edit: oops, this idea was already mentioned by akkatirk elsewhere in this thread.
It's a text steganography app using a simple book cipher, written in Clojure.
I welcome any feedback from HN so let me know what you think!
[1] http://lispinsummerprojects.org/