スライド 1

暗号技術
~対称暗号方式の仕組み~
(2週目)
情報工学科 04A1004
石川 真悟
対称暗号(共通鍵暗号)
•
•
•
•
•
ストリーム暗号
ブロック暗号
DES(米国標準の暗号技術)
トリプルDES(DESを強化したもの)
AES/Rijndael(DESに代わる新し
い米国標準暗号技術)
ストリーム暗号(逐次暗号)
同じ鍵を使って平文を1ビット、または8ビット(1バ
イト)単位で逐次的に暗号化。
例えば、鍵の長さが32ビットあっても、暗号化処
理の単位は1ビットまたは8ビット(1バイト)単位に
なる。
平文のデータがなくなるまで、8ビット単位で繰り
返し処理が行われる。
ストリーム暗号の処理例(32ビット)
8ビット
平文
鍵
8ビット
8ビット
10101010 10101010 10101010 10101010
+
+
+
+
11111111 11111111 11111111 11111111
処理1
処理1
暗号文
8ビット
処理2
処理3
処理4
01010101 01010101 01010101 01010101
ストリーム暗号の特徴
同じ処理を繰り返すだけなので、平文と暗号文の対応関係から鍵の
情報を解読することが、比較的容易にできる。⇒できるだけ頻繁に鍵
を変える必要がある。
鍵を生成する際には、できるだけ複雑な乱数を生成する必要がある。
ストリーム暗号は乱数を使った鍵の生成が、とても高速に処理できる。
⇒音声通話、データ通信の暗号化方式として多く用いられる。
ストリーム暗号の1つに、バーナム暗号がある。
バーナム暗号は、乱数を使って平文と同じ長さの鍵を生成し、この鍵
は1回利用する毎に完全に使い捨てる。このため、バーナム暗号は
理論的には解読不可能とされている。ただし、鍵の生成処理や鍵の
受け渡し、鍵の保管など解決されていない多くの課題があるために
実用化されていない。
近年のストリーム暗号は、特定の長さで鍵を生成するため、バーナム
暗号に比べて暗号強度が低いものの、実用的な暗号化方式として一
般に利用されている。
ブロック暗号
同じ鍵を使って平文を一定のビットのまとまりごとに
暗号化する。この一定のビットのまとまりをブロック
と呼び、1つのブロックの長さをブロック長と呼ぶ。
ストリーム暗号との違い⇒ストリーム暗号は同じ暗
号化処理を行なうのに対しブロック暗号は、換字暗
号や転置暗号と呼ばれる暗号化処理をブロック毎
に複雑に組み合わせて暗号化処理を行なう。
ブロック暗号の処理例(64ビット)
64ビット
平文
鍵
64ビット
101010・・・10 101010・・・10 101010・・・10
+
+
+
111111・・・11 111111・・・11 11111・・・111
処理1(換字暗号)
暗号文
64ビット
処理2(転置暗号)
処理3(換字暗号)
010101・・・01 010101・・・01 010101・・・01
ブロック暗号の特徴
ブロック毎に換字暗号や転置暗号といった異なった暗号化を複雑に
組み合わせて処理を行なうため、一部のブロックの平文と暗号文の
対応関係がわかったとしても、鍵の情報を簡単に解読できない。
最も暗号強度が高いブロック暗号は、平文の途中1ビットが正しく変
換されなかった場合、このビット以降の暗号文全体に影響して、平文
と暗号文の関係を見つけられなくする。
近年のブロック暗号は、これに近い暗号強度を持っているため、暗号
解読は、現実的な時間内では困難。
しかし、近年のコンピュータの性能が飛躍的に向上しているので、解
読処理にかかる時間が短縮されつつある。よって、コンピュータの性
能が向上するにつれて、鍵の長さをさらに長くしたり、暗号化の組み
合わせをさらに複雑にするといった対処が必要。
ブロック暗号のモード
ブロック暗号はブロックごとに暗号化処理を行なうが、処理の順番や
方法がいくつかある。この処理の方法をモードと呼ぶ。
モード
ECB
モード
名称
説明
電子符号表モード 平文ブロックを最初から順番にそのまま暗
号化する。シンプルだが、弱点があるため、
あまり使われていない。
CBC
モード
暗号ブロック連鎖
モード
1つ前の暗号文ブロックと平文ブロックの内
容を混ぜ合わせてから暗号化を行なう。
CFB
モード
暗号フィードバック
モード
1つ前の暗号化ブロックを暗号アルゴリズム
の入力に戻して暗号化し、平文ブロックの
内容と混ぜ合わせる。
OFB
モード
出力フィードバック
モード
カウンタモード
1つ前の暗号化の出力を暗号アルゴリズム
の入力に戻して暗号化し、平文ブロックの
内容と混ぜ合わせる。
CTR
モード
1ずつ増加していくカウンタを暗号化して、
鍵ストリームを作り出し、平文ブロックの内
容と混ぜ合わせる。
ECBモード
ECBモードで暗号化すると平文ブロックと暗号文ブロックは一対一の関係の対応表ができる。このこと
から、ECBモードは電子符号表モードと呼ばれる。
平文ブロックを最初から順番に暗号化し最後の平文ブロックがブロック長に満たない場合、パディング
と呼ばれるダミーのデータを埋め込み、暗号化処理が行なわれる。
ECBモードの暗号化
平文
ECBモードの復号化
平文
平文
平文
ブロック1 ブロック2 ブロック3 ・・・
暗号化
暗号化
暗号化
暗号文
・・・
暗号文
暗号文
暗号文
暗号文
・・・
ブロック1 ブロック2 ブロック3
暗号文
暗号文
暗号文
ブロック1 ブロック2 ブロック3 ・・・
復号化
復号化
復号化
・・・
平文
平文
平文
平文
・・・
ブロック1 ブロック2 ブロック3
弱点・・・どれか1つの平文ブロックと暗号文ブロックの関係を解析できてしまうと、ここから鍵
の情報がわかってしまい、他のブロックも解読される。また、ブロックの長さがわかってしまう
と、暗号文ブロックを入れ替えるだけで、巧妙に情報を改竄できる。暗号文ブロックを入れ替
えると、復号化では正常に処理ができる。
CBCモード
1つ前の暗号文ブロックと平文ブロックの内容を混ぜ合わせてから、さ
らに暗号化を行なう。ブロックがチェーンのように連携していくため、暗
号ブロック連鎖モードと呼ばれる。
最初の平文ブロックを暗号化するときには、1つ前の暗号化ブロックが
ないため、この暗号ブロックの代わりに、初期化ベクトルと呼ばれる特
別なビット列のブロックを用意する必要がある。初期化ベクトルは、暗
号化のたびに変化させることで暗号強度を高くすることができる。
CBCモードは、必ず1つ前の暗号文ブロックと平文ブロックの内容を
混ぜ合わせてから、さらに暗号化するため、平文ブロック1と平文ブ
ロック2の値が等しくても、暗号化ブロック1と暗号化ブロック2の値が
等しくなるとは限らない。
また、途中のブロックだけ抜き出しても解読することはできない。例え
ば、暗号ブロック3を解読したい場合には、初期化ベクトルと解読を終
えた平文ブロック1と平文ブロック2が必要になる。このため、CBC
モードは解読が難しいのが特徴。
CBCモードの暗号化・復号化
CBCモードの暗号化
平文
CBCモードの復号化
平文
平文
平文
ブロック1 ブロック2 ブロック3 ・・
暗号文
暗号文
暗号文
暗号文
ブロック1 ブロック2 ブロック3 ・・
初期化
ベクトル
XOR
処理
XOR
処理
XOR
処理 ・・・
復号化
復号化
復号化 ・・
暗号化
暗号化
暗号化 ・・・
XOR
処理
XOR
処理
XOR
・・
処理
暗号文
初期化
ベクトル
暗号文
暗号文
暗号文
・・
ブロック1 ブロック2 ブロック3
平文
平文
平文
平文
・・
ブロック1 ブロック2 ブロック3
CFBモード
1つ前の暗号文ブロックを暗号アルゴリズムの入力に戻し、再度暗号
化を行なった後、平文ブロックの内容と混ぜ合わせを行なう。
暗号ブロックを暗号アルゴリズムの入力に戻すため、暗号フィードバッ
クモードと呼ばれる。
最初の平文を暗号化するときには、1つ前の暗号文ブロックがないた
め、この暗号文ブロックの代わりに、初期化ベクトルのブロックを用意
する必要がある。
暗号アルゴリズムが生成するビット列を鍵ストリームという。
CFBモードでは、復号化を行なう時にも暗号化を行なう。
初期化ベクトルは、暗号化のたびに変化させることで暗号強度を高く
することができる。
CFBモードの暗号化・復号化
CFBモードの暗号化
平文
CFBモードの復号化
平文
平文
平文
ブロック1 ブロック2 ブロック3 ・・
暗号文
暗号文
暗号文 暗号文
・・
ブロック1 ブロック2 ブロック3
初期化
ベクトル
暗号化
暗号化
暗号化 ・・・
暗号化
暗号化
XOR
処理
XOR
処理
XOR
・・・
処理
XOR
処理
XOR
処理
暗号文
初期化
ベクトル
暗号文
暗号文
暗号文
・・
ブロック1 ブロック2 ブロック3
平文
暗号化 ・・
XOR
処理
・・
平文
平文
平文
・・
ブロック1 ブロック2 ブロック3
OFBモード
1つ前の暗号化の出力を暗号アルゴリズムの入力に戻し、再度暗号
化を行なった後、平文ブロックの内容と混ぜ合わせる。暗号化の出力
を暗号アルゴリズムの入力に戻すため、出力フィードバックモードと呼
ばれる。
最初の平文を暗号化するときには、1つ前の暗号文ブロックがないた
め、この暗号文ブロックの代わりに、初期化ベクトルのブロックを用意
する必要がある。
暗号アルゴリズムが生成するビット列を鍵ストリームという。
OFBモードでは、復号化を行なう時にも暗号化を行なう。
初期化ベクトルは、暗号化のたびに変化させることで暗号強度を高く
することができる。
この暗号アルゴリズムでの鍵の生成は、平文ブロックの処理とは無関
係に処理できるため、事前に鍵を生成しておけば実際の平文の処理
を高速に行なえる。
OFBモードの暗号化・復号化
OFBモードの暗号化
暗号化
平文
初期化
ベクトル
暗号化
OFBモードの復号化
暗号化 ・・・
平文
平文
平文
・・
ブロック1 ブロック2 ブロック3
XOR
処理
XOR
処理
XOR
・・
処理
暗号文
暗号文
暗号文
・・
ブロック1 ブロック2 ブロック3
暗号文
暗号化
暗号化
暗号化 ・・・
暗号文 暗号文
暗号文
暗号文
・・
ブロック1 ブロック2 ブロック3
初期化
ベクトル
XOR
処理
XOR
処理
XOR
・
処理
平文
平文
平文 平文
ブロック1 ブロック2 ブロック3 ・
CTRモード
1つずつ増加していくカウンタを暗号化して、鍵ストリーム(暗号アルゴ
リズムが生成するビット列)を作りだし、平文ブロックの内容と混ぜ合
わせる。
カウンタから鍵ストリームを生成するため、CTRモードはカウンタモー
ドと呼ばれる。
CTRモードは、復号化を行なう時にも暗号化を行なう。
この暗号アルゴリズムでの鍵の生成は、平文ブロックの処理とは無関
係に処理できるため、事前に鍵を生成しておけば実際の平文の処理
を高速に行なえる。
カウンタの初期値は、ノンスと呼ばれる暗号化のたびに異なる値とカ
ウントアップする値を組み合わせて生成する。
(例)カウンタの長さが128ビットの時、前半64ビットをノンス、後半64
ビットをカウントアップ値として使用する。
11 22 33 44 55 66 77 88 00 00 00 00 00 00 00 01
ノンス
カウントアップ値
CTRモードでは、このカウンタの値をさらに暗号化しているため、暗号
強度はより高くなる。
CTRモードの暗号化・復号化
CTRモードの暗号化
カウンタ
カウンタ+1
暗号化
平文
暗号化
CTRモードの復号化
カウンタ+2 ・ カウンタ
暗号化 ・・・
カウンタ+1
暗号化
暗号化
カウンタ+2 ・・・
暗号化 ・・・
暗号文
平文
平文
平文
・・
ブロック1 ブロック2 ブロック3
XOR
処理
XOR
処理
XOR
・・
処理
暗号文
暗号文
ブロック1 ブロック2
XOR
処理
XOR
処理
暗号文
・・
ブロック3
XOR
・・
処理
暗号文
暗号文
暗号文
暗号文
・・ 平文
ブロック1 ブロック2 ブロック3
平文
平文
平文
・・
ブロック1 ブロック2 ブロック3
使い捨てパット(バーナム暗号)
代表的なストリーム暗号方式。
平文とランダムなビット列で生成した鍵でXOR(排
他的論理和)の計算を行なう。シンプルな暗号方
式だが、鍵の情報が外部に漏れない限り、解読す
ることはできない。
使い捨てパットの特徴
解読することが不可能な暗号方式(あくまで、鍵の情報が外部に漏
れないことが前提)
鍵の情報は、ランダムなビット列なため、あらゆるパターンが考えら
れる。解読する際、このすべてのパターンのビット列の鍵の中から本
当の鍵を見つけなければならない。しかし、盗聴者は鍵の情報も平
文の情報も知らないため、復号化した平文から本当の鍵を見つける
ことができない。
また、使い捨てパットは、平文と同じ長さのビット列の鍵を使って暗
号化するという特徴がある。これが、さらに解読を難しくしている。
使い捨てパットの欠点
• 鍵の生成の問題
• 鍵の受け渡しの問題
• 鍵の保管の問題
鍵の生成の問題
使い捨てパットは、平文と同じ長さのビット列の鍵を、平文ごとに生成
する必要がある。平文がまれに同じ長さであっても、鍵は作り替える必
要がある。これは、同じ鍵を使って情報交換を続けることは、盗聴者に
対して読解のパターンと機会を多く与えてしまうことになるから。このた
め、一度使った鍵は捨てる必要がある。
また、簡単に解読されないようにするため、コンピュータを使って生成
した擬似的な乱数でなく、再現性のない真の乱数を使って鍵を生成す
る必要がある。この鍵の生成が手間のかかる作業になる。
※擬似乱数とは、乱数列(乱数)のように見えるが、実際には確定的な計算によって求めてい
る数列に含まれる数を指す。擬似乱数を生成する機器(やアルゴリズム)を擬似乱数生成器
(や擬似乱数生成法)と呼ぶ。乱数は本来規則性も再現性も無いために予測は不可能だが、
擬似乱数は計算によって作るので、作り方が分かれば理論的には予測可能であり、また内部
の初期値(シード)が分かれば、先に計算しておくこともできる。
弱い擬似乱数・・・ 無作為性しか持たない
強い擬似乱数・・・ 無作為性、予測不可能性を持つ
真の乱数・・・ 3つすべての性質を持つ
無作為性・・・ 統計的な偏りがなく、でたらめな数列になっているという性質。
予測不可能性・・・ 過去の数列から次の数を予測できないという性質。
再現不可能性・・・ 同じ数列を再現できないという性質。再現するためには、数列そのものを保存しておくしかない。
鍵の受け渡しの問題
使い捨てパットは、平文と同じ長さのビット列の鍵を
使って暗号化するため、復号化する際には、この同
じ鍵を使う必要がある。
暗号文をネットワークを介して相手に送る際、鍵は別
ルートで安全に受け渡す必要がある。
また、鍵は平文ごとに作り直す必要があるため、平
文を送るたびに鍵も受け渡す必要がある。
鍵の保管の問題
情報を暗号化して保管する場合には、鍵も保管する
必要がある。鍵を紛失すると暗号文を復号化できな
くなる。
情報が100Mバイトのサイズがあると鍵の長さも10
0Mバイトになり、保管しなければならない情報のサ
イズが2倍になってしまう。また、同じ場所に保管して
いても意味がないため、保管場所を考慮する必要が
ある。