叛乱オンライン
HOME > Theory > Crypt

暗号を使おう!

 
The comp.security.pgp FAQ
Version 1.4
 

付録1――PGPの背景にある関数

この部分は、大半が J. Kelly Cunningham <deviate@lipschitz.sfasu.edu> の投稿に基づいている。
 

0) 背景

PGPは3つの暗号法構成要素を使っている。RSA、IDEA、md5である。

RSAは公開鍵暗号化である。つまり、一つの鍵だけではなく、特別な目的で使われる二つの構成要素がある。このテキストでは、 P0()を公開鍵、 S0() を秘密鍵とする。だれかが暗号化したものは他の人によって復号化されるが、これはPO()からSO()を決定することができないと考えられる。

X をメッセージとする。PO(X)は無意味で意味不明のものだが、SO(PO(X)) = X。同様に、SO(X)は意味不明だが、PO(SO(X)) = X。

IDEAは対称的な鍵暗号化である。これは「正常」な暗号法である。メッセージの暗号化と復号化で同じ鍵が使われる。IDEAは128ビット鍵を使って、メッセージを無意味な意味不明のものに変える。無意味な意味不明のものに使ったのと同じ鍵で、原文を作り出せる。

X をメッセージとし、K を鍵とする。IDEA(X,K)は無意味な意味不明のものだが、IDEA(IDEA(X,K),K) = X。

MD5は、いかなる入力に対しても、本質的に独特な128ビット一方通行ハッシュを作り出す。ハッシュされたときに入力を決定することはできないとされ、二つの異なった入力が同じハッシュを行なう確率は極めて小さい。ハッシュは非常によいチェックサムであると考えるとよい。

md5(X) は、Xの128ビット表現である。
 

1) 暗号化

公開鍵がP1()である受け手にメッセージ X を暗号化したいとする。PGPは無作為に128ビット鍵 k を作る。IDEA( ,k)が X に代入されて、無意味な意味不明の IDEA(X,k)を作る。P1()は k に代入されて、無意味な意味不明の P1(k)を作る。(IDEA(X,k), P1(k))が受け手に送られる。k は無作為なので、X は同じ方法で二度暗号化されることはない。

メッセージを二人の受け手に暗号化したい場合、無作為鍵 k はそれぞれの受け手の公開鍵で暗号化されるが、実際のメッセージは一度だけしか暗号化されない。ということで、(IDEA(X,k), P1(k), P2(k), ...)がそれぞれの受け手に送られ、受け手は自分の公開鍵で暗号化された部分を選び出すことになる。

 

2) 復号化

(IDEA(X,k), P0(k))を受け取った。PGPは、S0()を P0(k)に代入して、k = S0(P0(k))を検索する。そこで k が手に入ったら、PGPはIDEA( ,k)をIDEA(X,k)に代入して、X = (IDEA(X,k),k)を得る。
 

3) 署名

メッセージ X に署名したい。MD5が X に代入されて、MD5(X)が得られる。S0()がMD5(X)に代入されて、「署名」S0(MD5(X))が得られる。(X, SO(MD5(X)))が受け手に送られる。

ふつう、署名は送る実際のメッセージの前に置かれるが、「クリア署名」オプションを使ったら、署名はメッセージの後に置かれる。また、「クリア署名」を使うとき、行の末尾のスペースとタブは最初に取り除かれ、新しい行がキャリッジ・リターン/新行のペアに変換される。これは、メールとニューズ配送プログラムで、このように切り刻まないと署名が無効になってしまうからである。

 

4) 認証

あなたの公開鍵を持つ受け手が、あなたからの署名されたメッセージ (X, S0(MD5(X)))を確認したいとする。PGP はP0(X)をS0(MD5(X))に代入して、MD5(X) = P0(S0(MD5(X)))を回復する。次に、MD5()がXに代入されて、Xから直接MD5(X)が得られる。二つが一致すれば、そのメッセージはあなたの送ったものだということになる。

もちろん、署名をチェックするのに使った公開鍵が本当にその人からのものであるかを確かめておかなければならない。

 

5) 暗号化&署名

公開鍵が P1()である受け手に署名付きメッセージを暗号化したい。PGPは3)にあるように、(X,S0(MD5(X)))を生成する。PGPはそれから1)のとおり、(IDEA((X,S0(MD5(X))),k), P1(k))を生成する。これが受け手に送られる。
 

6) 復号化&認証

5)で作られた(IDEA((X,S1(MD5(X))),k), P0(k))を受け取った。PGPは2)にあるようにIDEA((X,S1(MD5(X)))を復元する。IDEA((X,S1(MD5(X)))は、4)のとおりに認証される。
 
[ PGP-FAQ目次]
[ 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11]
[ 追補 ]
[ このFAQについて | 用語集 | 著作権]
 

HOME > Theory > Crypt

2000年盗聴法対抗
ダウンロードPGP6.5.1iPGP disk
日本語化PGP鍵作成
PGPdiskマウント秘密鍵を隠す
落とし穴
完全抹消法

PGP ユーザーズ・マニュアル 第1巻
The comp.security.pgp FAQ 日本語版
パスフレーズFAQ 日本語版
バックドア NSAPhrack Magazineソースコード
暗号関係リンク集

叛乱オンライン