3 Minutes NetWorking Supplement
No.15

3Minutes NetWorking Supplement

補講第15回PKI(2) 共通鍵暗号化方式

■ シーザー暗号

おねーさん

おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3 Minutes Networking、

ほげたん

Supplement !!

おねーさん

さて、前回からPKIをやってるわね。「電子署名を正しく使える基盤」、これがPKIだったわね。

ほげたん

「技術」でもなく、「製品」でもなく、「基盤」、ってことだったよね。

おねーさん

そうそう。「電話」っていう「インフラ」は、「回線交換技術」でもなく、「電話機」でもなく、それらを含みかつ、電話というシステムを動かす基盤、それと同じ考えね。

ほげたん

「基盤」…、いまいちそこらへんがよくわかってないというか。

おねーさん

ま、そこらへんは、やっていくうちわかるわよ。
さて、前回、4つの脅威をやったわね。「盗聴」「改ざん」「なりすまし」「否認」ね。

ほげたん

うん、電子商取引に対する「脅威」だったよね。
僕にとっての脅威はおねーさんだけど

おねーさん

……。(ガシッ)

ほげたん

ふわっ!!

おねーさん

(ギリギリギリギリ)
このまま握りつぶせちゃうかしら〜?

ほげたん

痛い痛い痛い痛い痛い痛い痛い痛いっ!! ごめんなさいごめんなさいごめんなさい、おね〜さんっ!!

おねーさん

ふんっ。ま、いいでしょ。
ともかく、この脅威を防ぐことが「安全な電子商取引を行う」前提となるわけ。

ほげたん

安全でない電子商取引は、誰もやらないからね。怖くって。

おねーさん

だよね。というわけで、どうやったらこの脅威から電子商取引を守れるのか、という話をしましょう。
まず、「盗聴」からの防衛策。

ほげたん

暗号化だったよね。

おねーさん

そう。暗号化により、特定の人物以外は読めないデータを作り上げ、それでやりとりするわけね。
この暗号化はPKIの根幹技術の1つなので、とても重要よ。

ほげたん

そりゃ、PKIは「公開鍵」基盤だしね。公開鍵暗号化方式から名前をもらってるわけだしね。

おねーさん

まぁ、そうよね。その暗号化だけど、今回はまず暗号化の基本から話しましょ。
え〜っとどこから話そうかしら……、暗号化は紀元前の時代からあった、って知ってた?

ほげたん

紀元前? 2000年以上前から?

おねーさん

そう。有名なのはシーザー暗号ね。

ほげたん

シーザーって、あのシーザー?

おねーさん

そう、ローマの軍人・政治家・文筆家の。ローマ史上最強の天才、ガイウス・ユリウス・カエサルね。 ▼ link
彼が使った暗号が、シーザー暗号、またはシフト暗号と呼ばれる暗号なわけ。

ほげたん

へー、どんなの?

おねーさん

こんなのよ。

[FigureSP15-01:シーザー暗号]

ほげたん

あー、なんかわかりやすいっていうか、簡単っていうか。
「小学○年生」のおまけの「名探偵コ○ンの謎ブック」とかでありそうなネタというか。

おねーさん

また微妙な例えね、それ。
ま、ともかく、他にも暗号化といえば、「通信文自体を隠す」方法や「特定の文字への置き換え」なんかがあるんだけど。

ほげたん

それってどんなの?

おねーさん

え〜っと、頭髪を剃って、そこに文面を刺青して。で、髪が生えた頃にその人を相手に送って、頭髪を剃ってもらうとか。
置き換えは「ニイタカヤマノボレ」とかね。

ほげたん

また豪快な方式だね、その刺青使うの。「ニイタカヤマ」は「真珠湾」を指すんだっけ。

おねーさん

で、このシーザー暗号のような方式がコンピュータでは一般的なんだけど。つまり文字やビットを置き換えたり、場所を変えたりする方式ね。
ま、シーザー暗号は「古典的な暗号」だから、実際コンピュータで使われてるわけじゃないけど。

ほげたん

だよね、結構簡単に解けちゃうよね。

おねーさん

でも、これから先説明していく暗号化の方法も、このシーザー暗号が原型って考えると理解しやすいかも。
シーザー暗号には暗号化の基本である「暗号化アルゴリズム」と「」の概念がちゃんと存在するから。

ほげたん

「暗号化アルゴリズム」と「鍵」?
「鍵」って言葉はよく暗号化ででてくるよね。

おねーさん

そうね。鍵はよく使われる言葉よね。
じゃあ、この2つは何を意味するかというと。

  • 暗号化アルゴリズム … 元データを暗号化する際、文字やビットをどのように扱うかを決めたもの
  • 鍵 … 暗号化する際に必要となる、秘密のデータ
ほげたん

んん? わかるようなわからないような。

おねーさん

シーザー暗号で考えると、こう。

シーザー暗号での「暗号化アルゴリズム」と「鍵」

[FigureSP15-02:シーザー暗号での「暗号化アルゴリズム」と「鍵」]

ほげたん

「指定された文字数分だけ後ろへずらす」という「扱い」。 「3文字」という指定文字数の「秘密のデータ」、ということ?

おねーさん

そう、この2つにより暗号化が行われるわけでしょ?
さらにこの2つが一致しなければ、暗号文を元に戻せない、と。

ほげたん

ん〜、そうだね。「後ろへずらす」を間違えて「前へずらす」にしたらダメだし。
ずらす文字数を「3文字」じゃなくて「5文字」にしてもダメだね。

おねーさん

でしょでしょ。つまり、暗号化は指定された暗号化アルゴリズムを送信側と受信側双方が同じものを使うこと。
そして、鍵となるデータを双方が保持しなければいけないということなのよ。

ほげたん

なるほど、暗号化の方法と、その際の秘密データ、この2つがないとダメってことだね。

おねーさん

そゆこと。あとね、次の基本用語を覚えてね。

  • 暗号化 … 平文を暗号文に変換すること
  • 復号 … 暗号文を平文に変換すること
  • 平文 … 暗号化される前のデータ、暗号文を復号したデータ
  • 暗号文 … 暗号化された平文
ほげたん

「暗号化/復号」「平文」と「暗号文」ね。OKOK。

おねーさん

で。暗号のポイントなんだけど。
暗号化を行う際には「アルゴリズム」と「鍵」を決定するんだけど。このどちらかが秘密であれば暗号化は破られない。

ほげたん

うん、そうなるよね。

おねーさん

ポイント1、暗号化アルゴリズム。これは通常、既知のよく使われているアルゴリズムが使用される。
そりゃそうよね、毎回毎回独自にアルゴリズムを考え出して、それを相手に伝えるのは大変だもの。

ほげたん

ん〜っと、つまり。アルゴリズムは秘密じゃないってこと?

おねーさん

そういうこと。つまり秘密を維持するのは通常「鍵」の役割ってことね。
ただし、これが脆弱なアルゴリズムはダメなんだけどね。

ほげたん

アルゴリズムが脆弱? どういうこと?

おねーさん

ん〜例えば鍵が適当なものでも復号できちゃったりとか、暗号文から平文が推測できちゃったりとか。まぁいろいろ。
暗号に対する攻撃により破られちゃうようなアルゴリズムはダメってこと。

ほげたん

そんなことできるんだ…。

おねーさん

ほら、軍事暗号とかだと破ったり破られたりって話があるじゃない。そーゆーの。
んで、ポイント2、鍵。鍵は鍵の長さ(鍵長)が長いほど強い

ほげたん

鍵…秘密のデータだよね。これの長さが長い方が破られにくいってこと?

おねーさん

そう。短い鍵の場合、総当り攻撃だったり、なんか数学的な方法だったりで破られちゃうから長いほうがいい。
でも、鍵長が長いとその分処理時間が長くなるので、あんまり長いのも考え物なのよ。

ほげたん

ふ〜ん。痛し痒しだねぇ。

■ 共通鍵暗号化

おねーさん

さて、その暗号化アルゴリズムなんだけど、種類があるわ。
まぁ、今までも出てきてると思うけど、以下の2つね。

  • 共通鍵暗号化方式/対称鍵暗号化方式
  • 公開鍵暗号化方式/非対称鍵暗号化方式
ほげたん

……共通鍵方式と公開鍵方式だね。

おねーさん

有名だから知ってるわよね。Kerberosでもやったし。でもまぁちゃんと説明しておこうかしら。
えーっと。暗号化と復号に同じ鍵を使う方式ね。この暗号/復号に使う鍵を共通鍵と呼びます。

ほげたん

送信側と受信側、暗号化と復号で共通して使う鍵だね。

[FigureSP15-03:共通鍵暗号化方式]

おねーさん

で、この共通鍵暗号化方式だけど、主に使われる方式には2種類あるわけね。

方式説明代表的な暗号化
ブロック暗号平文をある単位で区切り暗号化する3DES、AES
ストリーム暗号平文をビットもしくはバイトごと暗号化するRC2、RC4

[TableSP15-01:共通鍵暗号化方式の種類]

ほげたん

ブロックとストリーム? ある単位で区切るのと、ビット・バイトで?
いまいちパッとしないんですけど、おね〜さん。

おねーさん

ん〜。つまり例えば3DESは64ビットブロック暗号化なわけなんだけど。平文を64ビットで分割してそれぞれ暗号化するってこと。

ほげたん

ははぁ。ストリームは?

おねーさん

ストリームだと、例えばRC4なら1ビット単位で暗号化していくわけ。これは後で説明するわ。
ともかく、ブロック暗号、ストリーム暗号の2種類あるとわかってもらえれば。

ほげたん

へぇ。要は共通鍵暗号化方式っていっても種類があるってことでいいのかな?

おねーさん

そういうこと。
ん〜あとは、この共通鍵暗号化方式の利点と欠点の話。まず利点、それは暗号/復号処理が速いことね。

ほげたん

処理速度が速いのはいいよね。

おねーさん

ほげたん。よくわかってるのかな?
処理速度が速い暗号化は大きなサイズのデータを暗号化するのに適してるってことよ。

ほげたん

んん? 処理速度が速いと、大きなサイズのデータを暗号化するのにも時間がかからないよね。
それは確かに利点だよね、わかってるよ。

おねーさん

本当かなぁ。「処理速度が速いとハッピー」って意味じゃなくて「大サイズを暗号化できる」ってのが利点ってことよ。これは公開鍵暗号化方式との比較でよく話になるから覚えておいてね。

ほげたん

うん、わかったよ。

おねーさん

で、欠点。
Kerberosでもでてきたけど、共通鍵の安全なやりとりが大問題。

ほげたん

共通鍵を他に知られたら問題だもんね。
盗聴されちゃう。

おねーさん

そうそう。それと、管理する鍵の数の問題
10人と共通鍵暗号化方式でやり取りしようと思うと、10個の鍵が必要になっちゃうってこと。

共通鍵の数の問題

[FigureSP05-02:共通鍵の数の問題]

ほげたん

同一の鍵ってわけにはいかないもんね。

おねーさん

そゆこと。特に不特定多数とのやりとりで大きな問題になっちゃうわけなのよ。

ほげたん

そこでKDCだね。

おねーさん

まぁ、Kerberosはそれに対する解答の1つかもしれないけど、それは置いておいて。
とりあえず、共通鍵暗号化方式はそういう特徴を持ってるって事ね。

ほげたん

あい。

■ ブロック暗号とストリーム暗号

おねーさん

さてさて、続いて代表的な共通鍵暗号化方式を説明しちゃう。

ほげたん

しちゃってください。

おねーさん

ブロック暗号としては、DES、3DES、AESの3つがメジャー級。
DESと3DESはアルゴリズムとしては同じだけど、DESを3回行うってので3DESと名前が。

ほげたん

なんで3回も行うの?

おねーさん

DESは鍵長が短くってね。弱いとされてるの。なので、それを3回行って鍵の長さを3倍にしているわけね。
まぁ、DESの後継として誕生したAESの方が強いんだけどね。

  • DES … ブロック長64ビット、鍵長56ビット
  • 3DES … ブロック長64ビット、鍵長168ビット
  • AES … ブロック長128ビット、鍵長128、192、256ビット
ほげたん

へへぇ。他にはないの?

おねーさん

あるわよ。でもまぁ、よく耳にするのはこの3つかな。
で、DESを例にして細かい話をしようと思ったけど。

ほげたん

思ったけどってことは、しないってこと?

おねーさん

うん。無理。無理じゃないけど、あんまり細かい話しても意味がない。
なので、モードの話をしようかな。

ほげたん

モード?

おねーさん

そう。DESやAESにはモードってのがあって。これで暗号化の手順がちょっと違ったりするのよ。
代表的なのは、ECBモードと、CBCモードかな。

ほげたん

どう違うの? 同じ共通鍵暗号化のブロック暗号なんでしょ?

おねーさん

うん、そうなんだけど。ちょっとやり方が違うのよ。

[FigureSP15-04:ブロック暗号化のモード]

ほげたん

んー、違うのはわかるけど。CBCモードって面倒くさくない? ECBでいいのに。

おねーさん

ECBは確かに簡単だし、ブロックを並列で処理できるからスピードも速いわね。
CBCは1つ前の処理が終わらないと次のブロックが処理できないから遅くなってしまうから。

ほげたん

だよね。

おねーさん

でもECBは、同じ内容の平文ブロックが存在する場合同じ暗号ブロックができてしまうのよ。
それはちょっとね。

ほげたん

え? ダメなの?

おねーさん

ダメじゃないけど、同じ暗号文を複数入手するってのは暗号解析の基本だったりするのよ。
なのでセキュリティ的にちょっと弱くなってしまうの、ECBモードは。

ほげたん

あー、だからCBCモード。前の暗号化が組み合わされるから、同じ平文ブロックでも違う暗号ブロックになるんだ。

おねーさん

そゆこと。

ほげたん

で、IV? 何これ?

おねーさん

IVは無作為につくられたデータね。最初のブロックには前の暗号ブロックがないから必要なのよ。

ほげたん

あぁ、そうか。前の暗号ブロックの代わりをするデータのことなんだね。

おねーさん

そうそう。でね、このIVは暗号化データと一緒に宛先に送るのよ。
じゃないと復号できないからね。

ほげたん

ふむふむ。

おねーさん

で、次はストリーム暗号。ストリーム暗号で代表的なのはRC4ね。WindowsやTLS、無線LANで使われてたりするわ。
ストリーム暗号はビット、もしくはバイト単位で暗号化していく方式なの。

ほげたん

ん〜? ブロック暗号化のブロックがビットやバイトってこと?

おねーさん

んー、そうじゃなくて。方式がまったく違うんだけどね。
まずブロック暗号化ならブロック分のデータが揃うまで暗号化処理が始まらないけど、ストリーム暗号ならすぐできる。

ほげたん

ビットやバイト単位だもんね。

おねーさん

あと処理が簡単。なので速い。さっきのと組み合わせてまさしく「ストリーム」に使える暗号なの。特に処理が排他的論理和(XOR)を使うのでハードウェア向けね。

ほげたん

へぇ。他には?

おねーさん

他には、ブロック暗号の場合、ブロック長に足りない分はパディングされるけど、ストリーム暗号はそれがないからデータ量が増えないとか。
ストリーム暗号はこんな感じ。

[FigureSP15-05:ストリーム暗号]

ほげたん

この擬似乱数発生関数って何?

おねーさん

とある値(シード)を入れると乱数を発生させる装置って思ってくれればいいわ。
でこの装置から出力される値は、シードが同じなら同じ順番で同じ値が出てくるの。

ほげたん

あー、だから鍵を入れるのかな?

おねーさん

そうそう、共通鍵を入れれば、送信側でも受信側でも同じ値を同じ順番で入手できるのね。
この値の流れを鍵ストリームって呼ぶの。

ほげたん

ふむふむ。同じ鍵ストリームが入手できるなら、復号ができる、と。

おねーさん

そういうこと。で、鍵(シード)がないと鍵ストリームがどうなるかは予測できないわけ。
なので簡単な排他的論理和を使っても、一応大丈夫ってことになってるわけよ。

ほげたん

なるほどなるほど。

おねーさん

さてさて。今回は暗号化の基本と共通鍵暗号化方式だったわけだけど。
なんかずいぶん長くなっちゃったわね。

ほげたん

そういえばそだね。

おねーさん

ま、次は公開鍵暗号方式ね。ではでは。 おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3分間ネットワーク、

ほげたん

サプリメントでした〜〜〜っ!!

暗号化
[Encryption] or [Encipher]
公開鍵暗号化方式
[Public Key Cryptosystem]
「非対称鍵暗号化方式」とも。
ガイウス・ユリウス・カエサル
[Gaius Julius Caesar]
ラテン語のドイツ語読み。英語読みならばジュリアス・シーザー。ローマ共和制時代の軍人・政治家。詳しくは参考リンクのWikipediaで。
シーザー暗号のような方式
この方式は[Chiper]と呼ばれます。
他の2つは[Steganography]と[Code]。
共通鍵
[Shared Key]
もしくは対称鍵[Symmetric Key]。
3DES
[Triple Data Encryption Standard]
旧アメリカ合衆国国家暗号規格のDESを3回行う暗号化方式。読みは「トリプルデス」。
KDC
[Key Distribution Center]
「鍵配布センター」と訳される。詳しくは3Min NetのKerberosを参照のこと。
AES
[Advanced Encryption Standard] DESが時代遅れになったため、新たに規格化されたアメリカ合衆国国家暗号規格。
ECB
[Electronic CodeBook]
CBC
[Cipher Block Chaining]
RC4
[Rivest Cipher 4]
または[Ron's Code 4]。RSAの開発者の一人であるロナルド・リベスト[Ronald Rivest]が設計したストリーミング暗号化方式。他にもRC2、RC5、RC6がある。
ほげたんほげたんの今日のポイント
  • 暗号化は「暗号化アルゴリズム」と「鍵」からなる。
    • 鍵長が長いほうが暗号として強い
  • 暗号化として一般的なものに「共通鍵暗号化」と「公開鍵暗号化」がある。
  • 共通鍵暗号化方式は暗号化/復号に共通の鍵(共通鍵)を使用する。
    • 処理が高速なため、サイズの大きいデータを暗号化できる
    • 鍵の受け渡しの問題や鍵の数の問題がある。
    • ブロック暗号とストリーム暗号がある。

3 Minutes NetWorking Supplement No.15

管理人:aji-ssz(at)selene.is.dream.jp