1996-09-14 - Re: Internet Drivers’ Licenses

Header Data

From: dlv@bwalk.dm.com (Dr.Dimitri Vulis KOTM)
To: cypherpunks@toad.com
Message Hash: 2fd730d2185a68ecc1841dbae14b1ff0c9e43722459aa0ef40da2f7ca49cbe0d
Message ID: <cuX9TD33w165w@bwalk.dm.com>
Reply To: <Pine.BSF.3.91.960913225312.7410B-100000@mcfeely.bsfs.org>
UTC Datetime: 1996-09-14 17:07:11 UTC
Raw Date: Sun, 15 Sep 1996 01:07:11 +0800

Raw message

From: dlv@bwalk.dm.com (Dr.Dimitri Vulis KOTM)
Date: Sun, 15 Sep 1996 01:07:11 +0800
To: cypherpunks@toad.com
Subject: Re: Internet Drivers' Licenses
In-Reply-To: <Pine.BSF.3.91.960913225312.7410B-100000@mcfeely.bsfs.org>
Message-ID: <cuX9TD33w165w@bwalk.dm.com>
MIME-Version: 1.0
Content-Type: text/plain

Rabid Wombat <wombat@mcfeely.bsfs.org> writes:
> <Dr.D.V.KOTH Standard T.C.May reference deleted>
(fart) H??? Kook of the Hour?

> Nice concept, but it isn't that hard to slightly alter each message; now
> you've also got to determine which are "the same" messages,and which are
> not. Why would the headers be easier to vary than the body? Tack a few
> extra one-liner pieces of add copy on the end in pseudo-random order, and
> you've got "different" messages.

Consider the spam currently found on Usenet. Most multi-posters repeat
exactly the same text, and post it alphabetically once in each newsgroup.
That's what Cantor&Siegal did originally, and that's what they recommended
in their book (which by the way I highly recommend). I remember a couple
of incidents before C&S when someone forged an article from "B1FF" in
every newsgroup, and someone posted a warning about the second cumming of
Christ in every newsgroup, and they were mildly annoying, but didn't break
anything. During the C&S incident the traffic problems (Australia kicked
off the net et al) were caused not by the C&S spam itself, but by the
multitude of ineptly forged cancels. But I'm digressing...

In every e-mail spam I've seen so far, the bodies of all the e-mails
in the single spam are identical. To combat it, a trusted party could
simply post the body, and the readers who trust him would discard
incoming e-mails that match the body. I'm certain, however, that the
spamming technology will improve. I attach at the end an interesting
article that appeared anonymously about a year ago, explaining how
one can multi-post essentially the same message while varying the text.

> How do you view this specially designed newsgroup as working? Will you
> need to fetch all notices on a regular basis, and use the "warnings" to
> sort your mail? Seems like it would take longer to alter your trust level
> of third parties than it would take for your "opponent" to crank up
> another aol trial disk ...

The way I envision this system (and I don't think we really need this yet)
is: a trusted party (there may be more than one of them) posts templates
saying something like: 'don't compare after \n--' (randomized signature);
'contains the string CHAG ratings in the body 3 times'; 'contains the string
Received: from interramp.com in the headers once'. A reader who wants to
update his database of e-mail that needs to be junked would run a program
that would
1) get new articles in the filter notices newsgroup
2) look for articles digitally signed by the "raters" trusted by this reader
3) add their templates to this reader's mail filtering rules
Then when the reader filters his incoming e-mail, he won't see the junk
e-mail that matches the rules.
Of course if the rater posts templates that are "too general" and rejects
non-junk e-mail, the readers won't trust his notices anymore.

If the junk mail makes it through to a reader becase the template for it
hasn't yet been posted, the reader can forward it to the rater and ask him
to post a template for it for other readers' benefit.

Here's the old anonymous article on how to spam better:

]Subject: FAQ for Usenet Advertisers: Use Mathematical Algorithm to Avoid "Spam"
]Q-0. Introduction
]This mathematical advice is posted as an academic research study and is not a
]solicitation to act. It is a technical note and contains numerous mathematical
]algorithms and portions of pseudo-code. If you are not familiar with the
]intricacies of RFC 1036, you can ask a friendly techie to help implement these
]algorithms in a computer programming language, such as PERL. For example, the
]headers of your ad should contain the header "Approved: <your name>" to assure
]proper propagation in the so-called "moderated" newsgroups, but the techniques
]for inserting it are outside the scope of this article.
]Certain self-appointed "net-judges" keep trying to suppress the public
]dissemination of knowledge on how Usenet works (available from RFC 1036 and
]other publicly accessible documents). They rely on "security through obscurity"
]to protect their economic interests and harass honest Usenet entrepreneurs so
]as to keep the advertising pie all to themselves. Hence the need for anonymity.
]Q-1. Can I post a separate copy of my ad into each target newsgroup in
]the alphabetical order?
]No! That would be "spamming".
]Spamming is commonly defined as excessive posting of multiple, separate copies
]of identical messages to many newsgroups, one right after the other, without
]using the standard method of cross-posting, described in this article. Since
]it's really not that difficult to write a program that will post the same
]advertisement to dozens, if not hundreds of thousands of newsgroups, a lot of
]people have taken to doing this. People usually spam as a means of flooding
]Usenet with messages about a product or service that they want to sell,
]although they can spam for other reasons. Spamming Usenet is a BAD THING to do.
]DON'T DO IT. Follow the instructions in this article to advertise WITHOUT spam.
]Consider the old-fashioned way of spamming Usenet with ads. Let G be the list
]of all the relevant newsgroups where you want to post your ad. Let NG be the
]number of such newsgroups. We will refer to individual newsgroups as G[0]
]through G[NG-1].
]Remember once and for all: it's a very bad idea to run the equivalent of:
]for i=0 to NG-1 step 1 do                                          (1)
] post ad to G[i];
]This is SPAM. You can do better than that. But what happens if you just spam?
]First, some self-appointed net.cops, "vigilantes", or "net judges" will get
]upset if you post into every newsgroup in alphabetical order. Naturally, you
]couldn't care less if you hurt their feelings, but some of these vigilantes
]might go as far as impersonate you and "forge" a control article, making it
]look like you yourself are asking every computer on the network to delete your
]ad! This is illegal, but happens all too often.
]It is a major waste of Usenet resources to post your ad to one newsgroup at a
]time, without cross-posting. Please don't do it. On the other hand, if your
]"Newsgroups:" header is too long, it may break some Usenet newsreaders. Let NC
]be the number of newsgroups you will cross-post to at one time. Make sure your
]NC is never greater than 20, or else the self-appointed net.cops or "judges"
]will call your ad "velveeta" (spread into too many newsgroups) and forge
]cancels for it. In the pseudo-code below NC actually varies between 8 and 12.
]Section Q-2 explains what to do when NG is greater than NC.
]Second, some of the newsgroups on your list may have poor propagation. When you
]post your ad to them, they won't reach every other site on Usenet unless you
]cross-post the same ad to better propagated groups. After you've composed the
]list of newsgroups into which you want to post your announcement, separate them
]into two lists: the well-propagated newsgroups known at every site (like
]"sci.important.announce") and the poorly propagated ones (like "ca.spam.misc").
]Let NW be the number of well-propagated groups. Let NP be the number of poorly
]propagated groups. You'll probably have them listed in alphabetical order, but
]we'll see how to fix that. Let R be the integer part of NP/NW. You will cross-
]post to one newsgroup from the P list for every R newsgroups from the W list.
]Now you are going to go through the lists W and P and make sure that you cover
]each newsgroup. If you pick newsgroups from G at random, you will definitely
]miss a few and hit a few more than once. That would be a waste of Usenet
]resources, which you want to avoid. Instead, let SW be a random number
]relatively prime to NW. Recal Euclid's algorithm for computing the greatest
]common divisor of two integers m, n, such that n>m:
]do {
] g=m;
] m=n%m;
] n=g;
] } while (m);
]We now rewrite loop (1) as:
]i=SW;                                                                  (2)
]do {
] post ad to G[i];
] i=(i+SW) % NW;  /* where % denotes the remainder */
] } while (i!=SW);
]Note: the remainder is denoted "mod" in some computer programming languages.
]It is easy to see that this loop will cover every newsgroup in G exactly once,
]but not in any kind of alphabetical order. However you still want to cross-post
]your ad to both the W list and the P list. Here is the complete pseudo-code:
]/* choose the step for loop (2) */
]let SW=NW/3+random(NW/3)    /* random number betweem NW/3 and 2*NW/3 */
]while (GCD(SW,NW)<>1) ++SW; /* relatively prime to NW */
]let SP=NP/3+random(NP/3) /* likewise, random number betweem NP/3 and 2*NP/3 */
]while (GCD(SP,NP)<>1) ++SP;
]NR=0; /* when it reaches R, we take a newsgroup from the P list */
]i=j=0; /* control variables for the loops on W and P */
]do {
] L="";  /* random number of groups to cross-post to */
] for (NC=8+random(5); NC>0; --NC) {
]  if (NR<R) { /* choose a newsgroup from the W list */
]   L=L . W[i]; /* here . denotes concatenation, || in some languages */
]   i=(i+SW) % NW;
]   if (i==0) {
]    done=true; /* covered all of W */
]    NC=0; /* break from the for NC loop */
]    }
]   NR++;
]   }
]  else { /* choose a newsgroup from the P list */
]   L=L . P[j];
]   j=(j+SP) % NP;
]   NR=0; /* reset */
]   }
]  }
] post ad to L; /* the list of newsgroups */
] } while (!done);
]Q-n Why do some people object to posting multiple copies of the same ad?
]Because they're stupid. They don't object when one of them posts 100 inane
]one-liners with the same 20-line .sig art.
]However to keep the censors from forging cancels for your ads,
]Do not post the same body (ad copy) multiple times! Vary it every time.
]Go through your ad copy with a thesaurus and find all the little phrases that
]could be changed slightly without altering the meaning of the ad. For example,
]consider this famous passage:
] "We can make it easy to apply and increase your chance of winning one  (3)
] of the 55,000 Green Cards available in the 1994 Green Card Lottery."
]One could also rephrase (3) as:
] "We can help you apply and improve your chances of winning one
]          (A)                (B)
] of the 55,000 Green Cards distributed through 1994 Green Card Lottery."
]                                (C)
]or even as:
] "We can assist you in applying...
]We have immediately come up with 3 choices for the first variable phrase, 2
]choices for the second variable phrase, and 2 choices for the third variable
]phrase. Altogether there are 3x2x2=12 ways to combine these phrases to form ad
]copy equivalent to (3).
]Using the notation from Q-1, make sure that the number of differently phrased
]ads exceeds NG/NC. That's not as hard as it may sound! For example, if you have
]4 phrases with 2 variants each, 2 phrases with 3 variants, and 1 phrase with 7
]variants, you have a total of 2x2x2x2*3*7=1008 ways of phrasing your ad copy.
]The following pesudo-code, when invoked inside a loop, will list all possible
]ways to phrase your ad copy:
]SA=SB=SC=0; /* initialize the choice counters */
]do NG/NC times {
] printf("We can ");  /* could be array lookup: */
] printf( (SA==0) ? "make it easy to apply "
] : ((SA==1) ? "help you apply " : "assist you in applying "));
] printf(" and ");
]  printf( (SB==0) ? "increase " : "improve " );
] printf(" your chances of winning one of the 55,000 Green Cards ");
]  printf( (SC==0) ? "available in " : "distributed through " );
] printf("1994 Green Card Lottery.");
] /* advance the counters with carry */
] ++SA;
] if (SA==3) /* number of A choices */
]  {
]  SA=0;
]  ++SB;
]  if (SB==2) /* number of B choices */
]   {
]   SB=0;
]   ++SC;
]   if (SC==2) /* number of C choices */
]    {
]    SC=0; /* wrap around to all zero counters */
]    }
]   }
]  }
]/* pipe the output of printf through a formatter and append a
]  pre-formatted trailer before posting */
] }
]As usual, you are strongly encouraged to keep all variant phrasings hype-free.
]What often works very well is to post varying factual information about your
]services or products and include a constant pre-formatted contact address,
]World Wide Web site, or phone number for readers to ask for more information.
]You may wish to use the same technique to vary the "Subject:" headers of your
]ad slightly. You may even have to vary your "From:" and "Organization:" headers
]in your ads to bypass the self-appointed net.censors.
]If you have a product or service to advertise, but lack the technical expertise
]to implement these instructions, seek a knowledgeable consultant. Don't ask
]this poster for help. This advice is disseminated as free public service only.
]Finally, note that "Spam" and "Velveeta" are someone's registered trademarks
](ab)used unlawfully and without permission by the self-appointed "net judges".
]The "Subject:" of your message is one of the most important parts. Make
]it catchy. Remember, most modern newsreaders display a menu of article
]subjects and allow the user to select what articles they want to read.
]To be a good net.citizen, consider following the Usenet convention of
]starting the "Subject:" header of your post with the word "AD:". This
]will allow persons to filter them out, if they do not wish to see them,
]and so they'll have no basis no complain about your "unwanted ads".
]Add your phone number and other contact information to each Subject
]line. Never announce toll-free 800 on Usenet! You might get a lot of
]crank calls.
]The following example illustrates a little programming trick that will make
]your ad look more "catchy", and cause more people to read it. Suppose that your
]program is about to cross-post your ad into fictional newsgroups comp.os.cpm
]and alt.cpu.z80. Let your posting program pull a random article header from one
]of these newsgroups and its Subject: turns out to be "Re: Cross-jump
]optimization". Append it to your ad's subject to make it look like a follow-up.
]For example, if the fixed part of subject is:
]"Call 1-800-555-1212 for directory info"
]Then the ad cross-posted into these two newsgroups might have the subject:
]"Call 1-800-555-1212 for directory info (Was: Re: Cross-jump optimization"
]Q: What other neat headers are used in Usenet articles?
]Be a good net.citizen: include the "Followup-to: poster" in all your ads.
]If you post your ad to a newsgroup you don't normally read, you don't
]want its readers to ask for more information by posting the followup
]in that newsgroup.
]The "Expires:" header tells the other sites until what date to retain your
]ad. For example, if you're advertising a special price on a product or
]service and the offer lasts until December 31, 1999, you should add:
]Expires: 31 Dec 1999 01:00:00 GMT
]to your ad's header. Make sure the date complies with RFC 822.
]The "Approved:" header improves propagation in the so called "moderated"
]newsgroups. It doesn't hurt when posting to "unmoderated" newsgroups.
]Make sure your every ad contains the header:
]Approved: your name and e-mail address
]Other useful headers, such as "Distribution:" are described in RFC 1036.
]Q: What can I do if someone "flames" me or badmouthes the product I sell?
]It's a fairly common practice on Usenet to forge cancels for other people's
]articles whenever you disagree with their contents. Others are likely to forge
]cancels for your ads, so there's no reason why you can't forge cancels for
]their "flames".
]Automatic robocanceller: monitor specified newsgroups for specified
]patterns and forge cancels as soon as a matching patterns appears.
]Q: What can I do if someone forges cancels for my ads?
]for each message-id M post _twice_:
]into L with message-id M
]into "control".L with message-id "cancel.M"
](the so-called "$alz convention" used by the net.cop forgers)
]All M's must be distinct. It adds a nice touch to include the name of the
]product or service you're advertising in each M. Instead of boring
]<123456@your.site> say something like <123buy-my-widgets@your.site>.
]Make sure all message-ids are distinct and "legal".
]Ability to revive articles for which someone else has forged a cancel.
]Suppose you have posted article A1..An with message-id's M1..Mn.
]Save this information in a database. On a fast computer you could use
]PERL's associate list, with
]Mi's used as an index and Ai's being the info you've fed to NNTP, including
]article'b body and the relevant headers, like the list of newsgroups it was
]posted to.
]Now have a program monitor your control newsgroup and whenever it sees
]an incoming article with a "Control: M" header, check if M is equal to some Mi
]in your associate list. If it is, then:
] * Generate a new message-id, M'i.
] * Repost Ai with message-id M'i, adding the header "Supersedes: Mi"
] * Replace M' by M'i in your associate list.
]As an added touch, you can automatically add a little blurb to the reposted
]article providing header information about the forged cancel to which you're


Dr.Dimitri Vulis KOTM
Brighton Beach Boardwalk BBS, Forest Hills, N.Y.: +1-718-261-2013, 14.4Kbps