これまで暗号技術として、 共有鍵暗号なら IDEA や RC 2(Rivest Code 2)、 公開鍵暗号なら RSA がおもに用いられてきました。 しかし、これらの暗号は特許やロイアリティがかかっています。
このような問題に悩まされずにすむ 共有鍵暗号としては DES(Digital Encryption Standard) がありますが、 ご存知のように DES は弱く暗号としての役割を果たせません。 そこで、DES を強化するために Triple DES が考案されました。 Triple DES は、普及している DES をそのまま再利用できるという 利点に加えて、特許の問題などにも悩まされません。
公開鍵暗号は、特定の相手に対しデータを暗号化したり、 署名を施したりするのに用います。 ただし、すべての公開鍵暗号が 暗号化と署名の両方に利用できるわけではありません。 公開鍵暗号によっては、 暗号化のみだったり、署名のみだったりします。 実質的な標準となっていた RSA はやはり技術的にも優れており、 両方に使えます。
多くの人が待ち望んだ1997年4月に、Diffie-Hellman という公開鍵暗号の 特許が切れました。また、この特許にカバーされるといわれていた ElGamal 公開鍵暗号もフリーになりました。 これらの暗号は署名にも使えますが、 最近では暗号化のみに使う傾向にあります。
では署名はどうするのかというと、 DSS(Digital Signature Standard)を使います。 DSS は NIST(Natinal Institute of Standards and Technology) が公開した署名方式ですが、 後に NSA(National Security Agency) が関与していることが発覚しました。 NSA は DSS の署名を偽造できるという噂も流れており、 なにやらうさん臭いのですが、 長年欠点が見付からないことに安心してか DSS を採用する アプリケーションが増えています。
Diffie-Hellman と DSS、ElGamal と DSS の相性はどうなのかと 気になる人もいるでしょう。実はこの相性はばっちりなのです。 数学的にいえば、RSA、DSS、Diffie-Hellman、ElGamal は親戚の 関係にあるので、 引数を変えるだけでこれらすべてを実現してしまう関数を書くこともできます。 ただし、秘密鍵と公開鍵はそれぞれの技術用に 別々に生成する必要があります。
PGP は、現在普及している 2.x から 5.x への移行の時期にあります。 PGP 2.x では RSA と IDEA が使われていましたが、PGP 5.x では ElGamal/DSS と Triple DES が標準になります。 (PGP 5.x では ElGamal/DSS のことを Diffie-Hellman と言っていますが、 紛らわしいので止めて欲しいです。)
S/MIME は、バージョン 2 のときは RSA と RC 2 を用いていました。 バージョン 3 では、共有鍵暗号として Triple DES を採用することが決定しています。 また、DSS の相手となる公開鍵暗号を現在選考中です。 候補には、Static Static Diffie-Hellman (X9.42) と Ephemeral Static Diffie-Hellman があります。 まだ勉強不足で違いが分かりませんが、 前者はおそらく ANSI なのでしょう。 (Web で検索したけど仕様は見付かりませんでした。)
というわけで、まだまだ輸出規制の問題などがありますが、 かなり明るい方向に向かっていると思います。 これで、2000年9月に RSA の特許が切れれば万万歳ですね。