PigPGP は、JavaScript で RSA暗号系を実装する試みです。
おもしろいといえばおもしろいですし、クレイジーといえばクレイジーです。
2004年になって、とうとう本物のPGPと同等の1024ビット強度も実現、
乱数ジェネレーターも Mersenne Twister を搭載するなど、「なんちゃって暗号」と呼ぶにはちょっと本格的になりすぎたかもしれません。
以下はいちばん最初、たった64ビットでも苦労していた時期のメモです。最新版のデモは下記URLにあります。
http://www.faireal.net/demo/PigPGP/
Mozillaユーザのボブは デモページ を開いて、「鍵生成」をクリックした。1秒程度で64-bit鍵が生成された。
/H/b+9-D+u-e+P+o2=*=-8s+rW2がボブの公開鍵、
/H/b+9-D+u-e+P+o2=*=/n/X-a/r/2-Q/g$がボブの秘密鍵だ。
ボブは公開鍵をホームページで公開する一方、秘密鍵は秘密の場所に保存した。
アリスはボブに秘密のメッセージを送ることにした。ボブが公開している公開鍵/H/b+9-D+u-e+P+o2=*=-8s+rW2を「公開鍵」欄にペーストしてから、テキスト欄にメッセージをタイプする。
「暗号化」をクリックすると、アリスのメッセージは、ボブにだけ解読可能な形で暗号化された。
以下が出力例である。(注: この暗号系はセッション鍵を使っているため、同じ文章を同じ鍵で暗号化しても、そのつど異なる出力になる。)
-----BEGIN PigPGP MESSAGE----- Version: PigPGP 0.1.0 by JavaScript 7/y+t/3-r-eO/5j-S+C-T+gB7J+t-v-r-J/I+2/g-l+C/U+gd77J+4+HG/IP/g-V +C-S+g+67i+t/4-rs/Iqc+x+C/m+gC74+t-s+HJ-Y/wC/W+C-T+gr7/L+t-b-r-P E/0/g+N+C/i+g17H+t-A+HJ-Y/w9+R-f-2+g07I+t+W-r-a/I+F/g-k+C/5+g@7e J+4+HG/Io/g-c+C/3+gH76+t-2-r+T/Iq/g-R+C-N+gC+f+U-9/Y-r-O/Is/g-e+ C-J+gd7/$+t-A+HJ-Y/w/g-k+C/J+g-Y7y+t+Y-r+A/I+q/g-d+C-L+g+171J+4+ HG/IP/g+P+C/3+gy7/y+t-l-r+T/I+6/L-3-5B+gGA+q/3/0-r-Ogf/g-l+C/e+g r78+t-d-r-D/Is-wWS+R+gB7/C+t-d-r-7/Io/g-c+C/3+gD7f-d/a-r+A/Iy/g- K+C-X+gv77+t-0-r-a/Iq/g-r+C/i+gj7D+t+Y+HJ-Y/wl+c+C-U+gy7/A+t/2-V /q/IZ0-G+C/3+gX7a+t-A-r+ID$/g+N+C/h+g17H+t/6+HJ-Y/w/g/$+CZ+g-e/m -JJ+1-r+y/IR/g-5+C/m+gA74+t-n-r-zT/D/g+N+C-$+gA71+t-8-r-0-Y/z-wT -a+U+O07f-i-f-r+E/I+1/g+N+C-S+g+67-w-7+t-VEl2/g-R = +z-Z-V-7/f+x+c+o -----END PigPGP MESSAGE-----
Pig PGPというだけあって、いかにもPGPっぽいが、もちろん互換性はない。
アリスは、この秘密のメッセージを、ボブにメールで送った。メールは盗聴されていたが、だれにも解読できなかった。
さて、ボブはアリスからのメッセージをテキスト欄にペーストし、「秘密鍵」の欄には、自分の公開している公開鍵に対応する秘密鍵
/H/b+9-D+u-e+P+o2=*=/n/X-a/r/2-Q/g$
をペーストした。
「暗号解除」をクリックすると、アリスからのメッセージがあらわれた。
ボブはアリスに返事を書いた。アリスへの返事を暗号化するときには、今度はアリスが公開しているアリスの公開鍵を使う。ボブ自身の鍵では、ない。そして、ボブはアリスの秘密鍵を知らない。このように、やりとりする方向によって異なる鍵を使い、しかも暗号化するときの鍵(受信者の公開鍵)と暗号解除するときの鍵(受信者の秘密鍵)が異なる。「公開鍵暗号は非対称鍵だ、というのは、こういうことなんだなぁ」アリスとボブは、しみじみ実感するのであった。