情報セキュリティ



情報セキュリティ
第5回
2014年5月9日(金)

1/24

本日学ぶこと

本日の授業を通じて



鍵の管理に着目して,対称暗号と公開鍵暗号の違いを理解し
ます.
公開鍵暗号のうち,RSA暗号アルゴリズムについて,暗号化・
復号・鍵生成の方法を学びます.
RSAを支える数論アルゴリズムとして,「べき剰余」と「拡張
ユークリッドの互除法」を学びます.
2
対称暗号をどう使う?


対称暗号(共通鍵暗号)は,暗号化の鍵=復号の鍵
鍵はいくつ必要?






2人なら1個
3人ならそれぞれ2個,全体で3個
4人ならそれぞれ3個,全体で6個
n人ならそれぞれn-1個,
全体でn(n-1)/2 = O(n2)個
1000人ならそれぞれ999個,全体で約50万個
新規加入者は(それまでの)人数分の相異なる鍵を作って
配布しないといけない…できる??
3
公開鍵暗号の特徴(1)


暗号化鍵は公開し,復号鍵を秘密にする
管理すべき鍵の個数を減らせる

n人ならそれぞれ1組,全体でn = O(n) 組
4
公開鍵暗号の特徴(2)

鍵一つあたりのビット長は長くなる

処理時間もかかる
暗号アルゴリズム
種類
鍵長
ブロック長
DES
対称
56
64
トリプルDES
対称
112, 168
64
AES
対称
128, 192, 256
128
RSA
公開鍵
2048~
≦鍵長
楕円曲線暗号
公開鍵
160~256
≦鍵長
5
RSA・公開鍵暗号を支えるもの

アルゴリズム





安全性



整数に対する加減乗除,剰余,べき剰余
ユークリッドの互除法とその拡張
少し先
乱数生成
素数判定
素因数分解
離散対数問題
次回
暗号化・復号
鍵生成
RSAの暗号アルゴリズムは整数値を対象とするが,
計算機で扱うためのフォーマットなどは,
PKCS (Public Key Cryptography Standards)が有名
6
アルゴリズムの書き方・読み方


「入力」「出力」「手順(アルゴリズム)」の順に書く.
代入と比較を区別する.




手順では適切に番号を振り,「…へ進む」「…へ戻る」という
形でジャンプ先を明記する.
処理を終えるときは「…を出力して終了する」と書く.


このスライドでは「←」と「=」
C言語では「=」と「==」
「…を出力する」のみだと,まだ終了しないと考える.
書く人は簡単に検証できる例を添えておく.
読む人は最低限,その例でうまくいくことを確認する.
7
整数に対する加減乗除と剰余

加算








入力:整数x, y
出力:x-y
入力:整数x, y
出力:x*y
除算


剰余

乗算


入力:整数x, y
出力:x+y
減算


入力:整数x, y (y>0)
出力:x/y (xをyで割った商)
入力:整数x, y (y>0)
出力:x%y (xをyで割った余り)
注意点


いずれも自明なのでアルゴリズ
ムは省略
x, yがともにnビットのとき
 加減算の結果は
最大n+1ビット
 乗算の結果は最大2nビット
 除算と剰余の結果は
最大nビット
8
剰余演算子

この授業では字数を減らすため,剰余演算子には「%」を使
用している.


「mod」と書くのが一般的.「モッド」または「モジュロ」と読む.
もっぱら2項演算子として使用しているが,2項関係として
modを使う本もある.

例: 5≡-1 (mod 2)
 「5 合同 -1 モッド 2」または「5 合同 -1 モジュロ 2」と読む.
 この式は「5 % 2 = -1 % 2」,「5-(-1) が 2 で割り切れる」,
「5-(-1)=2k を満たす整数 k が存在する」と同値.
9
乗除算の注意(1)


5を3で割ったとき,商は1,余りは2
-5を3で割ったときの商と余りは?


候補1:商は-1,余りは-2
候補2:商は-2,余りは1
-6
候補1の剰余 0
-5
-4
-3
-2
-1
0
候補2の剰余 0
-2
1
-1
2
0
0
-2
1
-1
2
0
0
1
1
2
2
0
0
1
1
2
2
0
0
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
被除数
10
乗除算の注意(2)

商と剰余の基本要件



商と剰余の追加要件



a を b で割ったときの商が q,余りが r のとき,
a=q*b+r
aが負で bが正なら
0≦|r|<|b|
a % bは0または負
a = q * b + r ⇔ (-a) = (-q) * b + (-r).
すなわち余りの符号は除数と被除数に依存する.
演習室環境を含め,多くのC処理系で採用されている.
b>0 のときは 0≦r<b.すなわち余りは常に非負.
整数論やRSA暗号アルゴリズムでは,こちらを用いる.
プログラムで常に非負の余りを得るには

(a % b + b) % b により求められる.
割り切れない場合には a % b + b でよい.
11
べき乗(べき剰余の準備として)



入力:正整数a,非負整数b
出力:ab
アルゴリズム






Step 1. r ← 1, s ← a, t ← b とする.
Step 2. t=0 ならば,Step 5へ進む.
Step 3. t%2=1 ならば,r ← r*s とする.
Step 4. s ← s*s, t ← t / 2 とし,Step 2へ戻る.
Step 5. r を出力して終了する.
例


「%2」と「/2」の計算は,
ビット演算を使用する!
a=3, b=10 のとき, ab= 38×32=59049
計算効率は?

乗算回数は最大で 2×(bのビット数)
12
べき剰余



入力:正整数a,非負整数b,正整数m
出力:ab % mとなる整数値
アルゴリズム






例


Step 1. r ← 1, s ← a, t ← b とする.
Step 2. t=0 ならば,Step 5へ進む.
Step 3. t%2=1 ならば,r ← r*s % m とする.
Step 4. s ← s*s % m, t ← t / 2 とし,Step 2へ戻る.
Step 5. r を出力して終了する.
a=3, b=10, m=7 のとき, ab % m=4
(x * y) % m = (x % m) * (y % m) % m に注意
13
RSA暗号アルゴリズム

暗号化




復号




平文: 整数M (0≦M<N)
暗号化鍵(公開鍵): 整数E,N
暗号化: C=ME%N
暗号文: 整数C (0≦C<N)
復号鍵(プライベート鍵): 整数D,N
復号: M=CD%N
暗号化と復号の関係


任意の平文M (0≦M<N)に対して,(ME%N)D%N=M
(MD%N)E%N=Mも成立し,ディジタル署名で利用される
14
RSA鍵生成



入力:鍵長b
出力:暗号化鍵と復号鍵のペア(N, E, D)
アルゴリズム





Step 1. b/2ビットの2つの素数p, qをランダムに生成し,
N←p*q とする.
Step 2. (p-1) と (q-1)の最小公倍数をLとする.
Step 3. 1<E<L かつLと互いに素な整数Eをランダムに生成す
る.
Step 4. E*D % L = 1 および 1<D<L を満たすDを求める.
Step 5. (N, E, D)を出力して終了する.
15
最大公約数



入力:正整数a, b
出力:最大公約数 gcd(a,b)
アルゴリズム(ユークリッドの互除法)





「互助法」ではない
Step 1. r←a%b とする.
Step 2. r=0 ならば,Step 4へ進む.
Step 3. a←b, b←r として,Step 1へ戻る.
Step 4. bを出力して終了する.
例

a=144, b=5のとき,gcd(a,b)=1
aとbは互いに素
16
最小公倍数


入力:正整数a, b
出力:最小公倍数 lcm(a,b) = a * b / gcd(a,b)
17
拡張ユークリッドの互除法



入力:正整数a, b
出力:a*x+b*y=gcd(a,b)を満たす整数x, y
アルゴリズム






変数はすべて
整数値をとる
さらにq,r は非負
Step 1. x←1, x’←0 , y←0, y’←1, r←a, r’←b とする.
Step 2. q←r/r’, r’’←r%r’(=r-q*r’), x’’←x-q*x’, y’’←y-q*y’ とす
る.
Step 3. r’’=0ならば,Step 5へ進む.
Step 4. x←x’, x’←x’’, y←y’, y’←y’’ , r←r’, r’←r’’ として,
Step 2へ戻る.
Step 5. x’, y’ を出力して終了する.
例


一般に無限個ある中の
1組
a=1440, b=50のとき,x=-1, y=29.
Step 2開始時に必ず a*x + b*y = r が成立する.
18
拡張ユークリッドの互除法の応用




入力:正整数a, n
出力:a*b % n = 1, 0<b<n を満たす整数b
考え方: a*b % n = 1 ⇔ ∃m a*b+n*m=1
アルゴリズム




Step 1. gcd(a,n)>1ならば,「解なし」を出力して終了する.
Step 2. a, nを入力として拡張ユークリッドの互除法を適用し,
その出力をx, yに代入する.
Step 3. x%n を出力して終了する.
Step 1では,a と n が
例

「nを法とするaの逆数」
ともいう.a, n から一意
に定まる.
a=5, n=144のとき,b=29.実際,
5*29 % 144 = 145 % 144 = 1である.
互いに素でない場合の
例外処理をしている.
(互いに素 ⇔ gcd(a,n)=1)
19
数論アルゴリズムの計算例(1)

310 % 7 は?



初期化: a = 3, b = 10, m = 7, r ← 1, s ← a = 3, t ← b = 10
反復: t が奇数のとき r ← r * s % m
t の偶奇に関係なく,s ← s * s % m, t ← t / 2
t=0 と同じ行の r の値が解(以下の表では,4)
r
1
↓
s
3
2
t
10
5
2
↓
4
4
2
2
1
0
20
数論アルゴリズムの計算例(2)

1440x + 50y = gcd(1440, 50) を満たす整数x, yは?
x


y
r
q
1
0 1440
0
1
50
1
-28
40
28
-1
29
10
1
5 -144
0
4
r=0 の一つ前の行より,x=-1, y=29が解となる.実際,
1440*(-1)+50*29=10 である.
各行において 1440x+50y=r が成立し,検算に役立つ.
21
検算の方法

Linuxが使えるなら,bcコマンドが便利



echo '3 ^ 10 % 7' | bc
echo '1440 * -1 + 50 * 29' | bc
計算機が使えない場合,目で危なそうな箇所をチェック


べき剰余
 r の更新と s の更新を間違えていないか?
 t の最後は…→1→0になっているか?
拡張ユークリッドの互除法
 すべて整数になっているか?
 最初の2行を除き,x と y の一方が正,もう一方が負になっ
ているか?
 各行で a*x+b*y=r (a, bは固定,x, y, rは変化)が成り立つ
か?
22
自習用の課題

117 % 13は?

194x + 37y = 1 を満たす整数(x,y)は?

104x % 231 = 1 を満たす整数xは?

104x + 231y = 1と変形して求める
23
本日のまとめテスト
① 以下の下線部を訂正しなさい.
 RSAは,暗号化も復号も べき乗 により計算する.
② 「O(n2)」といったオーダーの表記について,知っていること
を書きなさい.


過去に(この授業以外で)学んだことを書くこと.
授業メモに記入して提出すること.
24 E