1994-02-13 - Setting up a Magic Money server

Header Data

From: anonymous@extropia.wimsey.com
To: cypherpunks@toad.com
Message Hash: d58008aaafc8d13f436c15d31fd52b7b5092c5572cb67a5660356c61ba6031df
Message ID: <199402122015.AA06992@xtropia>
Reply To: N/A
UTC Datetime: 1994-02-13 22:31:16 UTC
Raw Date: Sun, 13 Feb 94 14:31:16 PST

Raw message

From: anonymous@extropia.wimsey.com
Date: Sun, 13 Feb 94 14:31:16 PST
To: cypherpunks@toad.com
Subject: Setting up a Magic Money server
Message-ID: <199402122015.AA06992@xtropia>
MIME-Version: 1.0
Content-Type: text/plain


-----BEGIN PGP SIGNED MESSAGE-----

Magic Money seems to have reached a usable state. (Open mouth, insert foot,
bite down firmly :-) ) Someone needs to set up the first server. Here's how:

You can set up a Magic Money server on any machine with a net connection.
You need to be able to run a program when mail comes in. You do not need
root access. Running a Magic Money server is no harder than running a
cypherpunks remailer. Unlike a remailer, there is no possibility of your
server being used to harass or mailbomb anyone.

Get Magic Money and PGP Tools (needed to compile it) from csn.org. 
Get pgptl10c.zip and mgmny10e.zip. If mgmny10e.zip isn't up yet, get 
mgmny10d.zip and fix the bug in mms_mint() by moving the free(fp); to 
the end of the function. This is the only change in version e. This 
version has been reported to work on both big and little endian machines. 

If your machine has assembly-language speedups, get them from the pgp23a
source code. Use the same defines PGP uses to compile on your machine,
and take out the NO_ASM define in my makefile. This will speed up your
server quite a bit.

Compile the client and the server. Define UPTON or one of the other modmult 
functions, because I have had problems with Smith's modmult. The hash file
is currently set to about half a meg. It grows if it fills up. If you need
to use less disk space, change the settings in mm.h.

Put the server program "s" in one directory, and the client program "c" in 
another. Put something random (i.e. unknowable to an attacker) in a file
called rand.dat in each directory. The programs won't work without this. 
The directories should be otherwise empty. 

Go to the server directory and run "s i" to initialize the server. It will
ask you for the name of your server, size of your key, name of your coins,
and denominations to use. Powers of 2 make good denominations. For example,
you might use 1,2,4,8... up to 32768. With these 16 coin values, you can
transfer any sum up to 65535 with 16 or fewer coins.

After you have entered all the information, the server generates a PGP key
pair, and an e/d list pair. Your server's ascii-armored public key is saved 
to bank.asc. You will need to distribute this key to everyone who wants to
use your server.

Copy bank.asc into the directory with the client. In that directory, run
"c -i" to setup the client. The client generates a key, then creates a
message "output.asc" which should be sent to the server. For example, if
"client" and "server" were subdirectories in a common directory, you could
run "s < ../client/output.asc > ../client/reply.asc" from the server's
directory. Now go back to the client directory and run "c reply.asc" to
finish setting up your client. You will be running this sequence a lot if
you play with the system, so write a script.

Your client now knows the name of your coins, and has the elist. This
information is updated automatically when the server discovers the client's
copy is out of date.

Go back to the server directory and run "s m <x>" where x is one of your
higher-value coins. You will have problems if you are using version d and
did not fix the bug as described above. This mints a coin and writes it out
to coins.dat.

Go back to the client directory and run "c ../server/coins.dat". The client
reads the coin, checks it, and asks you for values of new coins to create.
Create several smaller coins. The client keeps prompting you until you have
created coins with a value equalling that of the old coin.

The client creates another "output.asc". Run your script to pass it through
the server, and run "c reply.asc" to process the results. The client now
takes the signed coins from the server and the blinding factors from 
proto.dat, and unblinds the coins. The result is written to allcoins.dat.

Now run "c -p" to withdraw coins from allcoins.dat. Enter the denominations
to withdraw, and 0 to end. Now you have a coins.dat in the client's
directory, so run "c coins.dat" to process it. It will count up the coins
you withdrew, and prompt you for new coin values again, then produce another
output.asc for the server. You can create a second client in another
directory, and pass coins from one to the other.

Try creating a "msg.txt" file in the server's directory. The client will
then display the contents of the message whenever it processes a reply from
the server. The client waits for a keypress after the message.

Now that you know the server works, set it up so that incoming mail to your
account is passed to the server, and the output from the server is sent back
to the person who sent the mail. If you want to use the same account for
the server and regular mail, have users put a specific word in the subject
line of messages to the server.

Announce your server, including its public key from bank.asc. You might want
to provide binaries of the client for DOS, either by ftp or by automatic
mail. You might also want to write a better makefile for the Unix version.

Now you need to mint and distribute some, but not too much, money for people
to play with. Give a few coins to the first x people who send a message to 
your system. Later you can have lotteries, post puzzles and simple ciphers 
for people to break, etc. to put more money into circulation. But keep your
money scarce. People should be able to get a few coins to play with, but
they should always want more than they have. Good luck!

                                              Pr0duct Cypher


-----BEGIN PGP SIGNATURE-----
Version: 2.3a

iQCVAgUBLVyldMGoFIWXVYodAQGo4AP/SQz82XRtWC1W/qjGQWouVDn/82TBBGne
ktNIfmPE92lPpH0V3f7EizBs466AEXTwaxq5qVpj4Fx6low1ceiaKBQxhNosB8Wa
BydiS2E2iC6kQ1RPj5jb6UOdLTQzl2MM7UrI8J3KpxszQWjhbgM/5ddHoDXgqs/J
VjjeM/iqNF8=
=2ggl
-----END PGP SIGNATURE-----





Thread