RSA 军火 T 恤RSA munitions T-shirt
1995 年期间,美国政府将强加密技术归类为“军火”并严禁出口。为了抗议这一规定,Adam Back 编写了一段极其简短且混淆的 Perl 代码来实现 RSA 公钥加密算法,并将其作为电子邮件签名广泛传播。这段代码甚至被印在了 T 恤上,导致该 T 恤在法律意义上也被界定为“受限军火”。这一历史事件生动展现了早期极客对数字权利和密码自由的不屈抗争。
John
当年美国政府将强加密技术归类为“军需品”时,RSA公钥密码学是禁止出口的。1995年,Adam Back为了抗议这一点,用Perl代码编写了一个简短且混淆的RSA实现,并将其用作电子邮件签名。
这段代码还被印在了T恤上。因为这件T恤包含了强加密的源代码,它也被归类为军需品。关于这件T恤的更多信息请看这里。
这就是那段代码:
#!/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年的评论文章。
dc
代码中间是
echo ... | dc这是代码中最密集、最重要的部分。Perl调用dc计算器来执行RSA加密所需的高精度算术运算。
我曾多次写过关于bc的文章。bc(“basic calculator”,基础计算器)最初是一个更友好的包装器,封装了基于逆波兰表示法的dc(“desktop calculator”,桌面计算器)。dc至今仍是每个Unix和类Unix系统的一部分,但我认为bc要受欢迎得多。
就本文而言,dc的一个重要特性是它是基于栈的,这意味着用户会将数据和命令压入栈中,并从栈中弹出结果。在交互式使用dc时可能容易理解的一系列命令,在文本记录中看起来却像天书一样。这也是这段代码如此晦涩难懂的部分原因。
我将只解析一小段dc代码,让大家感受一下它的作用。前四个字符16do指示dc将16压入栈中,复制它,并将输出基数设置为16,也就是说,这四个字符让dc以十六进制进行工作。
信不信由你,这段dc代码正在计算
mk mod n
它使用了快速幂运算,这是RSA算法中的关键步骤。
教科书式的RSA
需要注意的是,Adam Back的代码计算的是我们现在所说的“教科书式RSA”,而不是多年来经过不断完善且目前实际实施的RSA。
相关文章
需要完整排版与评论请前往来源站点阅读。