わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

暗号化が先か,圧縮が先か

 いきなりですが問題です.

 先生の授業で,PGPで暗号化をするとき,配布資料には「メッセージは圧縮してから暗号化する」と書いてあったんですが,授業中のスクリーンの表示は,「メッセージは暗号化の前に圧縮する」になっていました.
 これも配布資料を訂正しておいたほうがいいんでしょうか.

 さっそくですが教員です.配布資料は,スクリーンに表示する中から12枚を厳選しており,穴埋めや,数は少ないですが訂正してもらう箇所を入れています.訂正の例としては,初回授業で「(計算機管理を怠ると)踏み台攻撃の被害者になる」を「踏み台攻撃の加害者になる」に書き換えるよう,指示したことがあります.
 さて今回の質問ですが,

  • メッセージは圧縮してから暗号化する

  • メッセージは暗号化の前に圧縮する

を並べて考えれば分かるとおり,2つは同じ意味になる文です.なので訂正する必要はありません.
 ただし,この2つの文のあいだで,細かな違いもあります.
 手順を書く場合には,文章や箇条書きにおいても,先に行うことを先に,あとで行うことをあとに書くのが鉄則です.
 この観点では,配布資料の「メッセージは圧縮してから暗号化する」のほうが優れていると言えます.
 なのですが「メッセージは暗号化の前に圧縮する」のほうがより良いという理由を言うこともできます.ここはPGPの「暗号化」の説明であり,主従関係としては圧縮は従,暗号化が主となります.
 そういうときには,主の方を先に示すのも可能となります.知っている情報すなわち「暗号化」を先に,読み手が知らない(新たに学ぶ)情報となる「圧縮」をあとに書く,というルールなのです.


 書く順序ではなく,処理として「なぜ圧縮が先,暗号化があとなのか」については,授業で「直感的には」を付けた上で,次のように解説しています:
 人間が読み書きするメッセージには冗長性があり,そこで,圧縮してサイズを減らすことが可能です.
 圧縮したデータは,コンピュータ上で0と1の不規則な並びで構成された,人間が読めない(一見して意味の分からない)情報であり,さらに圧縮をかけても,サイズの縮小は期待できません.
 暗号文も同様に,0と1の人間が読めない情報ですので,暗号化したものに対する圧縮は,効きにくいのです.*1
 だからデータ量を減らすには,先に暗号化し,それから圧縮をかけるのではなく,先に圧縮し,それから暗号化するのです.

*1:なお,暗号化処理によるサイズの増減ですが,ブロック暗号を用いる場合,ブロック長の整数倍となるので,メッセージよりも大きくなる可能性はあります.ただし,メッセージがある程度のサイズであれば,得られる暗号文のサイズは大きく変わりません.