ディアスポラの嘘ぽいところ.
暗号関係で一つ見つけたのに, 確認していなかった. さっき確認したので書くことにする. 翻訳の問題だけではないだろう.
つづいて新しい市民のシグネチャー――ひとつはプライベート鍵、ひとつは公開鍵の、唯一の百万桁の数字――を作製し、それを孤児の<暗号書記>に埋め込んだ。
(中略)
ブランカがヤマチに別の種類のタグを送ってきた。その中身は、ヤマチのシグネチャーの公共用の分を使って符号化されたランダムな数字だった。ヤマチがそのタグの意味はなんだろうと思うより先に、ヤマチの<暗号書記>が自動的にそのチャレンジに反応した。ブランカのメッセージをデコードし、ブランカ自身の公共用シグネチャーを使って再暗号化して、それをまた別の種類のタグとして送り返す。
Then it constructed a signature for the new citizen ― two unique megadigit numbers, one private, one public ― and embedded them in the orphan's cypherclerk, a small structure which had lain dormant, waiting for these keys. It sent a copy of the public signature out into the polis, to be catalogued, to be counted.
(中略)
Blanca sent Yatima a different kind of tag; it contained a random number encoded via the public half of Yatima's signature. Before Yatima could even wonder about the meaning of the tag, vis cypherclerk responded to the challenge automatically: decoding Blanca's message, re-encrypting it via Blanca's own public signature, and echoing it back as a third kind of tag. Claim of identity. Challenge. Response.
符号化
符号化と暗号化は違う.
符号化ってのは, 符号にするだけ. 英語で言うとencode, decode. 暗号化は, encrypt, decrypt. 原文はどっちだろう. encodeであるとは思えないのだが. 原文は上に追記したようにencode, decode. この場合はencodeには暗号化するという意味があるので, 対にして暗号化・復号と訳した方が無難.
AがBを認証する場合.
上の文章をそのまま読むと,
- ランダムな数字を符号化して送る
- ランダムな数字をデコードする
- ランダムな数字を, 暗号化して送る
になって, 意味が通らない. 符号化・デコード
という言葉を使うと, 誰でも出来るように読めてしまう. その場合, 誰でもなりすましが可能だ.
本題
本当は暗号化・復号と言いたいのだろうと思って書くと, 以下の手続きになる.
Bを認証するために, Aはランダムな文字列 (r) をBの公開鍵で暗号化し (c=E_{pk_B}(r)), その暗号文をBに送る. Bは受け取った暗号文 (c) を復号して得た平文 (m=D_{sk_B}(c)) をAの公開鍵で暗号化して (c'=E_{pk_A}(m)) Aに返す. Aは復号して (m'=D_{sk_A}(c')), 最初に作ったランダムな文字列とBから返ってきたランダムな文字列が一致するかどうかを確かめる (m' = r ?).
で, このままでは解読オラクルとして使われてしまうので, 宜しくない. AがBに送るチャレンジは, Aが解読したい暗号文であってもよい. 認証と偽って, Bに送れば復号して貰える. CCA2的な状況. IND-CCA2 secureな暗号システムを使っているとは思うが, それでも良くは無かろう, この状況.