ディアスポラの嘘ぽいところ.

暗号関係で一つ見つけたのに, 確認していなかった. さっき確認したので書くことにする. 翻訳の問題だけではないだろう.

つづいて新しい市民のシグネチャー――ひとつはプライベート鍵、ひとつは公開鍵の、唯一の百万桁の数字――を作製し、それを孤児の<暗号書記>に埋め込んだ。
(中略)
ブランカがヤマチに別の種類のタグを送ってきた。その中身は、ヤマチのシグネチャーの公共用の分を使って符号化されたランダムな数字だった。ヤマチがそのタグの意味はなんだろうと思うより先に、ヤマチの<暗号書記>が自動的にそのチャレンジに反応した。ブランカのメッセージをデコードし、ブランカ自身の公共用シグネチャーを使って再暗号化して、それをまた別の種類のタグとして送り返す。

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を認証する場合.
上の文章をそのまま読むと,

  1. ランダムな数字を符号化して送る
  2. ランダムな数字をデコードする
  3. ランダムな数字を, 暗号化して送る

になって, 意味が通らない. 符号化・デコードという言葉を使うと, 誰でも出来るように読めてしまう. その場合, 誰でもなりすましが可能だ.

本題

本当は暗号化・復号と言いたいのだろうと思って書くと, 以下の手続きになる.
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な暗号システムを使っているとは思うが, それでも良くは無かろう, この状況.