// COMPLETE THREAD

using perl-rsa

5 expanded posts ยท every known parent and child

NODE ca4b5539using perl-rsa
[managed to type kent instead of keng this time, touch typist and not
watching the screen either].

Kent Crispin <kent@songbird.com> writes:
> [...]
> 
> >print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
> >)]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`
> 
> BTW, how do you use this code?  I'm not a big "dc" user, I must admit.

You first of all extract your a PGP key with pgpacket.  (You'll need
to change the password to be no password (press enter when prompted
for password), so that PGP doesn't encrypt the private key.

Next, you can do:

	% perl rsa.pl [e] [n] < plaintext > ciphertext
	% perl rsa.pl [d] [n] < plaintext > ciphertext

to encrypt and decrypt.

Here's a small example (Fred is a notional eternity user who's key,
both public and private is included in the eternity distribution):

Fred's public key:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i

mQBNAzPfUPsAAAECAMn6jtL3ZNjmBrkDLIktHNmBGc+a59BSvFPN8howj5zAj1U8
5QOfVtV4kOliK2AkCcL2yyz3Wz+AHiYdVyuQJF0ABRG0FEZyZWQgPGZyZWRAZXRl
cm5pdHk+iQBVAwUQM99Q/B4mHVcrkCRdAQECQQH/YZqss3VQZwZi5KfylAzFOnz8
/pXOSh8Rf9pTsF2TbsAKIK4xL9PzYoicy/KAZdIN+AJO8dX/xY0a1v5A8xobeg==
=iWoN
-----END PGP PUBLIC KEY BLOCK-----

Fred's secret key (no password):

-----BEGIN PGP SECRET KEY BLOCK-----
Version: 2.6.3i

lQD4AzPfUPsAAAECAMn6jtL3ZNjmBrkDLIktHNmBGc+a59BSvFPN8howj5zAj1U8
5QOfVtV4kOliK2AkCcL2yyz3Wz+AHiYdVyuQJF0ABREAAfsEPkWwiGybJRn00/dB
RLZjOZHAmMRVDH6UC9si+GpHDsOs5/eLbK6GUqmbWXG4I4LadxRQz/nplQ+lCVYP
ecrbAQDixLjtXlj9ks1e9ZcroU71Pvk84oQjpUhiU1rAIkKh9wEA5APIvVJETEjm
DxEpdE6hJkty+nb6v8VNOYlslo8Ol0sA/iwRycjjcNs4A2c9Owt+xLCiMp2JIb0z
yf7d4xEcLI1vUXG0FEZyZWQgPGZyZWRAZXRlcm5pdHk+
=CHwS
-----END PGP SECRET KEY BLOCK-----

(to extract public key do:

% pgp -kxa fred fredpub ~/.pgp/pubring.pgp 

and to get private key do:

% pgp -kxa fred fredpri ~/.pgp/secring.pgp 

)

Next get pgpacket.pl, see ftp://ftp.ox.ac.uk/pub/crypto/pgp/utils/ or
something like that.

Then run pgpacket on the fredpri.asc (it contains all the info that
you want, without looking at fredpub.asc, ie the values for e, d and
n):

% pgpacket fredpri.asc

The values for e, d, and n are:

e = 11
d = 043E45B0886C9B2519F4D3F74144B6633991C098C4550C7E940BDB22F86A470E
    C3ACE7F78B6CAE8652A99B5971B82382DA771450CFF9E9950FA509560F79CADB
n = C9FA8ED2F764D8E606B9032C892D1CD98119CF9AE7D052BC53CDF21A308F9CC0
    8F553CE5039F56D57890E9622B602409C2F6CB2CF75B3F801E261D572B90245D

Now you can encrypt for fred like so:

% echo hello world | perl rsa.pl 11 C9FA8ED2F764D8E606B9032C892D1CD98119CF9AE7D052BC53CDF21A308F9CC08F553CE5039F56D57890E9622B602409C2F6CB2CF75B3F801E261D572B90245D > hello.rsa
%

and to decrypt:

% perl rsa.pl 043E45B0886C9B2519F4D3F74144B6633991C098C4550C7E940BDB22F86A470EC3ACE7F78B6CAE8652A99B5971B82382DA771450CFF9E9950FA509560F79CADB C9FA8ED2F764D8E606B9032C892D1CD98119CF9AE7D052BC53CDF21A308F9CC08F553CE5039F56D57890E9622B602409C2F6CB2CF75B3F801E261D572B90245D < hello.rsa
hello world
%

Now dc can do modular exponentiation like so (reverse polish notation):

dc> m e ^ n %

but that's going to take a long time because it will evaluate m ^ e
and then do mod n.

So the clever thing that the program does is to implement Knuth's
modexp algorithm which reduces the work factor immensly. 

Actually GNU dc 1.1 (distributed with GNU bc-1.04) now includes "|" as
a modular exponentiation operator, so you can do: "m e n |" and it'll
do it directly.  This feature was a special, just for perl rsa because
Ken Pizzini, author of GNU dc, happens to be one of the major
contributors of hacks to shorten the perl program, and so have a
vested interest.

With the dc 1.1 | operator, Ken got the script down to:

$/=$z;exec"dc -e'16i0[lN*lMlKlN|+lMlN/dsM0<J]dsJ\U@{[
pop,pop,unpack'H*',<>]}\EsMsKsNx[II*~aSad0<ZLaP]dsZx'"

a considerable improvement over:

print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
)]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`

> I dug out a midi interpreter I wrote a number of years ago, 
> and it is indeed trivial to modify it to read any text as input.  
> Unfortunately, I wrote that long before the midi file spec was 
> finalized, and the hardware I wrote it for is also long gone.  But 
> it's probably not much work to get file output working again...and 
> the thought of a general text-to-midi translator is rather 
> entertaining -- I could play this entire mail message through it, for 
> example... It would definitely make better music if some rhythmic 
> variation was part of the coding, but that would make it a little 
> harder to make an automatic decoder...

I'd find it most cool to hear an audio file of the above.

Adam
-- 
Have *you* exported RSA today? --> http://www.dcs.ex.ac.uk/~aba/rsa/

print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
)]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`
NODE 7e63daffRSA - the song
--Boundary..3980.1071713720.multipart/mixed
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

On Fri, Aug 01, 1997 at 11:35:02AM +0100, Adam Back wrote:
[...]
> 
> print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
> )]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`
> 
> > I dug out a midi interpreter I wrote a number of years ago, 
> > and it is indeed trivial to modify it to read any text as input.  
> > Unfortunately, I wrote that long before the midi file spec was 
> > finalized, and the hardware I wrote it for is also long gone.  But 
> > it's probably not much work to get file output working again...and 
> > the thought of a general text-to-midi translator is rather 
> > entertaining -- I could play this entire mail message through it, for 
> > example... It would definitely make better music if some rhythmic 
> > variation was part of the coding, but that would make it a little 
> > harder to make an automatic decoder...
> 
> I'd find it most cool to hear an audio file of the above.

Well, I generated a midi file that encodes music which in turn is a 
direct algorithmic encoding of your program.  I didn't have a 
convenient way to go to a direct sound file, but midi players are 
very widely available -- any recent pc with a sound card will have a 
"multimedia midi jukebox" or something like that.  And there are 
probably free ones on the net -- I didn't look.  The midi file will 
be a mime attachment to this message.  It's also at 

	ftp://songbird.com/pub/rsa.mid 

For aesthetic reasons I modified the encoding from the simple one
mentioned earlier, and, rather than try to modify one of my earlier
midi programs, I just hacked this one out from other sources.  The
program will actually encode any binary data into a piece of music. 

I think that musically the piece is actually somewhat interesting -- I
kind of like it.  Like the source text, it is rather dense.  But if
you listen to it a few times patterns and phrasing will appear.  It 
sounds like reasonable avante garde music, actually -- something a 
college radio station might broadcast to the world late at night...

The program is really rather trivial, so rather than describing the 
encoding, I am just appending it to this message.

--------------------------------------------------------------------
/*
    dtom -- convert data to midi
        dtom midifile <datafile
            or
        datasource | dtom midifile

        convert standard in to a midi representation of the data, and
        write it to a standard midi file.  The midi data is designed
        to so that the sound produced will permit decoding by a pitch
        to midi device.  Two things are done to increase the musical
	interest:  First, the notes are selected from a diatonic 
	scale, instead of a chromatic.  And second, the rhythm is 
        also varied algorithmically -- any decoding from the sound 
        should ignore all rhythmic variation.

	Code uses "midifilelib" from Tim Thompson & Michael 
	Czeiszperger, and is cobbled from one of their examples.

*/
    

#include <stdio.h>
#include <ctype.h>
#include "midifile.h"

#define ROOT 36

FILE *fp;

/* offsets for three octaves of diatonic major scale */
int scale[] = {0,2,4,5,7,9,11,12,14,16,17,19,23,24,26,28,29,31,33,35,36};

mputc(c) { return(putc(c,fp));}

int writetrack(track)
int track;
{
    int note_duration;
    int rest_duration;
    int high_nybble;
    int low_nybble;
    char c;
    char n1[2];
    char n2[2];

    mf_write_tempo((long)100000);

    while( (c = getchar()) != EOF ) {

        high_nybble = (c>>4) & 0xf;
        low_nybble  = c & 0xf;
	
	/* low note */
        n1[0] = scale[low_nybble]+ROOT;	/* note number */
        n1[1] = 64;                     /* velocity */

	/* high note */
        n2[0] = scale[high_nybble]+ROOT+scale[16];
        n2[1] = 64;

	/* shouldn't happen */
	if( n1[0] >= n2[0] ) printf("warning -- voice crossover!\n");

	/* note_duration needs to be long enough for pitch detectors */
	note_duration = 120*((c&15) + 4);
	rest_duration = 120*(((c>>5)&3));

        if(!mf_write_midi_event(rest_duration,note_on,1,n1,2)) 	return(-1);
        if(!mf_write_midi_event(0,note_on,1,n2,2))		return(-1);

        if(!mf_write_midi_event(note_duration,note_off,1,n1,2))	return(-1);
        if(!mf_write_midi_event(0,note_off,1,n2,2))		return(-1);
    }

    return(1);
} /* end of write_track() */

main(argc,argv)
char **argv;
{
    if( !(fp = fopen(argv[1],"w")) ) exit(1);

    Mf_putc = mputc;
    Mf_writetrack = writetrack;
    mfwrite(0,1,480,fp);
}

---------------------------------------------------------------------------


-- 
Kent Crispin				"No reason to get excited",
kent@songbird.com			the thief he kindly spoke...
PGP fingerprint:   B1 8B 72 ED 55 21 5E 44  61 F4 58 0F 72 10 65 55
http://songbird.com/kent/pgp_key.html


--Boundary..3980.1071713720.multipart/mixed
Content-Type: application/octet-stream; name="bin00000.bin"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bin00000.bin"
Content-Description: "rsa.mid"

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
--Boundary..3980.1071713720.multipart/mixed--
NODE e106df62Re: RSA - the song
Interesting.

Now for the obvious question, can you convert midi back to text?

Looks like a new way to hide encrypted messages.

amp

------------------------
  From: Kent Crispin <kent@songbird.com>
  Subject: RSA - the song 
  Date: Sat, 02 Aug 1997 12:02:26 -0700 
  To: cypherpunks@cyberpass.net, coderpunks@toad.com


> On Fri, Aug 01, 1997 at 11:35:02AM +0100, Adam Back wrote:
> [...]
> > 
> > print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
> > )]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`
> > 
> > > I dug out a midi interpreter I wrote a number of years ago, 
> > > and it is indeed trivial to modify it to read any text as input.  
> > > Unfortunately, I wrote that long before the midi file spec was 
> > > finalized, and the hardware I wrote it for is also long gone.  But 
> > > it's probably not much work to get file output working again...and 
> > > the thought of a general text-to-midi translator is rather 
> > > entertaining -- I could play this entire mail message through it, for 
> > > example... It would definitely make better music if some rhythmic 
> > > variation was part of the coding, but that would make it a little 
> > > harder to make an automatic decoder...
> > 
> > I'd find it most cool to hear an audio file of the above.
> 
> Well, I generated a midi file that encodes music which in turn is a 
> direct algorithmic encoding of your program.  I didn't have a 
> convenient way to go to a direct sound file, but midi players are 
> very widely available -- any recent pc with a sound card will have a 
> "multimedia midi jukebox" or something like that.  And there are 
> probably free ones on the net -- I didn't look.  The midi file will 
> be a mime attachment to this message.  It's also at 
> 
> 	ftp://songbird.com/pub/rsa.mid 
> 
> For aesthetic reasons I modified the encoding from the simple one
> mentioned earlier, and, rather than try to modify one of my earlier
> midi programs, I just hacked this one out from other sources.  The
> program will actually encode any binary data into a piece of music. 
> 
> I think that musically the piece is actually somewhat interesting -- I
> kind of like it.  Like the source text, it is rather dense.  But if
> you listen to it a few times patterns and phrasing will appear.  It 
> sounds like reasonable avante garde music, actually -- something a 
> college radio station might broadcast to the world late at night...
> 
> The program is really rather trivial, so rather than describing the 
> encoding, I am just appending it to this message.
> 
> --------------------------------------------------------------------
> /*
>     dtom -- convert data to midi
>         dtom midifile <datafile
>             or
>         datasource | dtom midifile
> 
>         convert standard in to a midi representation of the data, and
>         write it to a standard midi file.  The midi data is designed
>         to so that the sound produced will permit decoding by a pitch
>         to midi device.  Two things are done to increase the musical
> 	interest:  First, the notes are selected from a diatonic 
> 	scale, instead of a chromatic.  And second, the rhythm is 
>         also varied algorithmically -- any decoding from the sound 
>         should ignore all rhythmic variation.
> 
> 	Code uses "midifilelib" from Tim Thompson & Michael 
> 	Czeiszperger, and is cobbled from one of their examples.
> 
> */
>     
> 
> #include <stdio.h>
> #include <ctype.h>
> #include "midifile.h"
> 
> #define ROOT 36
> 
> FILE *fp;
> 
> /* offsets for three octaves of diatonic major scale */
> int scale[] = {0,2,4,5,7,9,11,12,14,16,17,19,23,24,26,28,29,31,33,35,36};
> 
> mputc(c) { return(putc(c,fp));}
> 
> int writetrack(track)
> int track;
> {
>     int note_duration;
>     int rest_duration;
>     int high_nybble;
>     int low_nybble;
>     char c;
>     char n1[2];
>     char n2[2];
> 
>     mf_write_tempo((long)100000);
> 
>     while( (c = getchar()) != EOF ) {
> 
>         high_nybble = (c>>4) & 0xf;
>         low_nybble  = c & 0xf;
> 	
> 	/* low note */
>         n1[0] = scale[low_nybble]+ROOT;	/* note number */
>         n1[1] = 64;                     /* velocity */
> 
> 	/* high note */
>         n2[0] = scale[high_nybble]+ROOT+scale[16];
>         n2[1] = 64;
> 
> 	/* shouldn't happen */
> 	if( n1[0] >= n2[0] ) printf("warning -- voice crossover!\n");
> 
> 	/* note_duration needs to be long enough for pitch detectors */
> 	note_duration = 120*((c&15) + 4);
> 	rest_duration = 120*(((c>>5)&3));
> 
>         if(!mf_write_midi_event(rest_duration,note_on,1,n1,2)) 	return(-1);
>         if(!mf_write_midi_event(0,note_on,1,n2,2))		return(-1);
> 
>         if(!mf_write_midi_event(note_duration,note_off,1,n1,2))	return(-1);
>         if(!mf_write_midi_event(0,note_off,1,n2,2))		return(-1);
>     }
> 
>     return(1);
> } /* end of write_track() */
> 
> main(argc,argv)
> char **argv;
> {
>     if( !(fp = fopen(argv[1],"w")) ) exit(1);
> 
>     Mf_putc = mputc;
>     Mf_writetrack = writetrack;
>     mfwrite(0,1,480,fp);
> }
> 
> ---------------------------------------------------------------------------
> 
> 
> -- 
> Kent Crispin				"No reason to get excited",
> kent@songbird.com			the thief he kindly spoke...
> PGP fingerprint:   B1 8B 72 ED 55 21 5E 44  61 F4 58 0F 72 10 65 55
> http://songbird.com/kent/pgp_key.html
> 

---------------End of Original Message-----------------

------------------------
Name: amp
E-mail: amp@pobox.com
Date: 08/02/97
Time: 16:46:07
Visit me at http://www.pobox.com/~amp

'Drug Trafficking Offense' is the root passphrase to the Constitution.

Have you seen 
http://www.public-action.com/SkyWriter/WacoMuseum
------------------------
NODE 30147e12Re: RSA - the song
On Sat, Aug 02, 1997 at 04:46:06PM -0500, amp@pobox.com wrote:
> Interesting.
> 
> Now for the obvious question, can you convert midi back to text?

Of course -- that was the point of the exercise.  Not only that, but
midi can be used to generate sound, and pitch to midi converters can
go from sound to midi -- one way to look at this is that I've just
implemented part of an inefficient modem protocol.  However, the 
interesting thing from a legal point of view is that the intermediate 
protocol is music.  It is clearly music, in fact.  I have written 
many such compositions, and if I didn't say, you wouldn't be able to 
pick out which one was RSA by listening.

> Looks like a new way to hide encrypted messages.

I'm not sure how good it would be for that.  I find it more
entertaining as another example of the absurdity of the export ban. 

-- 
Kent Crispin				"No reason to get excited",
kent@songbird.com			the thief he kindly spoke...
PGP fingerprint:   B1 8B 72 ED 55 21 5E 44  61 F4 58 0F 72 10 65 55
http://songbird.com/kent/pgp_key.html
NODE 84b4505aRe: RSA - the song
Kent Crispin <kent@songbird.com>:

> [...] the intermediate protocol is music.
> [...] another example of the absurdity of the export ban. 

For encoding numerical data as music, I usually use the following
scheme:

The digits 0 ... 9 are mapped to the C major scale:

  0 becomes B,   1 becomes c,  2 becomes d,  3 becomes e, ...,
  8 becomes c',  9 becomes d'.

(Of course, this can be transposed to any other key.)

The next step is to find appropriate rhythms, harmonies etc. that make
at least some sense, musically, in order to construct a melody out of
that sequence of notes.  As an example, I scribbled down the first
digits of pi = 3.141592653589793238462643383279502884197169...
The score can be found in the uuencoded GIF below (and soon also at
<URL:http://agn-www.informatik.uni-hamburg.de/people/3moeller/pi.gif>).
That version (in D major) is for harpsichord or piano.  I did not mark
which notes I think should be played legato, legatissimo or portato;
that is left as an exercise.

It would be quite cumbersome, of course, to use this method for
exporting software.  However, it is very convenient for memorizing
numbers: Melodies are much easier to remember than boring numbers
(unless you happen to be a computer in which case you'd prefer the
raw numbers because they contain less data, technically). 

This works good for decimal numbers (no large jumps, no difficult
harmonies: B d f g b d' can all be used as G 7 notes if all else
fails).  Hex numbers are not that easy to handle.  In addition to
0 ... 9 == B c ... c' d', then there are A ... F == e' ... c''
(i.e., the digits/notes are spread over slightly more than two
octaves).  Because of that, my PGP fingerprint is somewhat
avant-gardistic: C7AC7EAD  566A65 ECF  61666 83 7E 8668 28
(See what I mean? :-)


In addition to memorizing one's PGP fingerprint, there are other
possible cryptographic applications: Under certain circumstances, one
might need to implement crypto-software from scratch without having
access to any written documents and without having access to computer
networks.  For such situations, it would be good to have some kind of
"memorizable encryption standard".  Writing RSA routines is easy (at
least if you are lucky enough to have some bignum library or if the
programming language supports bignums), but often you will need more:
E.g., a key generator for RSA that will find your 1024 bits RSA key
(which is really 2048 bits long if you count both N and D) given a 128
bits secret as seed.  It might make sense to use some cryptographic
hash function as the core of the "memorizable encryption standard":
The hash function can be used by the key generator (similar to the DSA
"kosherizer"), and it can be used to build a symmetric cipher
(Luby-Rackoff style).

Musically, the "memorizable encryption standard" could be a suite
consisting of a Prelude that somehow defines the hash function and of
some other movements that give test data for the hash function, for
the derived encryption function, for the RSA (or DH/DSA) key generator
etc.

Bodo Moeller
<Bodo_Moeller@public.uni-hamburg.de>


The first four bars of pi:

begin 644 pi.gif
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
38WFF:_O&<WWG>_\'!H7#7@$`.]3E
`
end