ビットコイン・インスティテュート

アダム・バック​「最も​小さな​軍需品の​プログラムを​求めて」:1995年からの​Perlの​RSAの​版

最も小さな軍需品のプログラムを求めて

PerlのRSAのハックには、短くする工夫をいろいろな人が寄せてくれたおかげで、いくつもの改訂版がある。面白いものを、小さくて新しい順に挙げる。

今の最小版(perl5とdc)

今のところ、この版の説明はない。ただ、仕組みは下の3行の版に似ている。

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`

前の最小版(perl4とdcで動く)

仕組みの詳しい説明 (http://www.dcs.ex.ac.uk/~aba/rsa/story2.html)がある。

#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)

その前の版

(多くのTシャツ (http://www.obscura.com/~shirt/)に刷られ、入れ墨にもなったのが、この版だ)

#!/bin/perl -s-- -export-a-crypto-system-sig -RSA-3-lines-PERL
$m=unpack(H.$w,$m."\0"x$w),$_=`echo "16do$w 2+4Oi0$d*-^1[d2%Sa
2/d0<X+d*La1=z\U$n%0]SX$k"[$m*]\EszlXx++p|dc`,s/^.|\W//g,print
pack('H*',$_)while read(STDIN,$m,($w=2*$d-1+length$n&~1)/2)

流れの始まりになった最初の版

1995年3月9日 (http://www.dcs.ex.ac.uk/~aba/rsa/org-post.html):Perlの暗号のハックの流れの始まりになった、最初の版。

この版の仕組みの説明 (http://www.dcs.ex.ac.uk/~aba/rsa/hal-reply.html)を、私が投稿してすぐに、ハル・フィニーがサイファーパンクのメーリングリストに投稿した。

#!/usr/local/bin/perl -- export-a-crypto-system sig, RSA in 5 lines of PERL:
($s,$k,$n)=@ARGV;$w=length$n;$k="0$k"if length($k)&1;$n="0$n",$w++if$w&1;die
"$0 -d|-e key mod <in >out\n"if$s!~/^-[de]$/||$#ARGV<2;$v=$w;$s=~/d/?$v-=2:
$w-=2;$_=unpack('B*',pack('H*',$k));s/^0*//g;s/0/d*ln%/g;s/1/d*ln%lm*ln%/g;
$c="1${_}p";while(read(STDIN,$m,$w/2)){$m=unpack("H$w",$m);chop($a=
`echo 16o16i\U$m\Esm\U$n\Esn$c|dc`);print pack('H*','0'x($v-length$a).$a);}

Perlだけの版

クリフォード・アダムズが5行で書いた、Perlだけ (http://www.dcs.ex.ac.uk/~aba/rsa/pureperl.html)の版。

#!/usr/local/bin/perl -s
do 'bigint.pl';($_,$n)=@ARGV;s/^.(..)*$/0$&/;($k=unpack('B*',pack('H*',$_)))=~
s/^0*//;$x=0;$z=$n=~s/./$x=&badd(&bmul($x,16),hex$&)/ge;while(read(STDIN,$_,$w
=((2*$d-1+$z)&~1)/2)){$r=1;$_=substr($_."\0"x$w,$c=0,$w);s/.|\n/$c=&badd(&bmul
($c,256),ord$&)/ge;$_=$k;s/./$r=&bmod(&bmul($r,$r),$x),$&?$r=&bmod(&bmul($r,$c
),$x):0,""/ge;($r,$t)=&bdiv($r,256),$_=pack(C,$t).$_ while$w--+1-2*$d;print}

コメントやHTMLの不具合は、私(アダム・バック (http://www.dcs.ex.ac.uk/~aba/))まで。<aba@dcs.ex.ac.uk>

原典の外部ソース

https://web.archive.org/web/19990116235144/http://www.dcs.ex.ac.uk:80/~aba/rsa/story.html
エクセター大学にあったアダム・バックのサイトのページ。Internet Archiveが1999年1月16日(23:51:44 UTC)に保存したもの。このページは今もcypherspace.org/rsa/story.htmlで公開されていて、連絡先のリンクだけが変わっている。相対リンクは元のアドレスを指す。