暗号技術
共通鍵方式
暗号化と復号化の鍵が一緒
公開鍵
暗号化と復号化の鍵が異なる
いまのインターネットやブロックチェーンのセキュリティが守られてきた根源
1方向ハッシュ
平文をハッシュ値に変換
平文のメッセージと一緒に起こることによって、その平文メッセージが改ざんされてないことを証明
メッセージ認証コード(MAC)
改ざんされてないことと、それが期待された人から送られてきたかを検証できる仕組み
電子署名
改ざん+誰から送られてきたかも分かる
エニグマとは
ドイツが使ってた暗号、復号器
ローターが3つついていて、文字のボタンを押すと暗号化、復号化された文字が光
このローターの初期配置が鍵となる
また、この鍵を暗号化するためにも、日替わり鍵で、この鍵自体を暗号化する(日替わり鍵は事前に決めている)
暗号アルゴリズムと鍵
暗号化アルゴリズムと鍵を使うことにって暗号化できる
暗号アルゴリズム
変わらない
鍵
暗号化ごとに変わる
DEC
64ビットのデータを暗号化し、復号化もできる仕組み
構造としてはファイステルネットワークを3回している
ファイステルネットワーク
あるデータを左右に分け、右のデータとサブ鍵をインプットとしてアウトプットを、得られる関数を使い、そのアウトプットと左のデータを排他的論理和で計算したものを繰り返していき、暗号化する方法
利点としては、排他的論理和の性質上暗号化されたデータを同じサブ鍵を使えば平文に戻せる点
また、関数fがなんでも成り立つ点(復号化できなくても問題ない)
トリプルDES
DESを3回使い、セキュリティのレベルを上げる
DESの鍵も56×3になるので、総当たり攻撃にDESよりは強い
すべての鍵を同じにすると、シングルDESと同じ結果になる
同じ鍵で2回DESによって操作すると暗号化→復号化されるため
一般的には、鍵を2種類か、3種類のパターンがあるらしい
AES
2000年に決まった次世代の対象暗号
ラインダールが採用された
ラインダール
128ビットを4つのフェーズで暗号化するアルゴリズム
10回くらい繰り返すのを推奨される
1. 1バイトずつ他の1バイトに変換
2. 1バイトごとにバイト位置をシャッフル
3. 4バイトのずつビット演算で計算
4. 128の鍵と排他的論理和を取る
また、ラインダールは1-3の逆関数を持つことで復号化できる
公開鍵暗号
公開鍵は暗号化、秘密鍵は復号化できる鍵で、それを使うことで鍵の配送問題を解決し、メッセージを安全にやりとりできる
RSA
暗号文 = 平文^E mod N
E, Nが公開鍵
平文 = 暗号文^D mod N
D, Nが秘密鍵
決め方
1. 素数 p, q(512ビット)から N = p x qで決定
2. Lはp-1とq-1の最小公倍数
3. 1 < E < LでLと素な数
4. E x D mod L = 1を満たすDを使う
RSAは本当に破られない?
E、Nが分かってる前提
暗号文=平文'E mod Nなので、離散対数問題むりげ
E x D mod L=1はLが分からないから無理
Lはp, qから分かり、Nを素因数分解すればわかる
ただし現在の素因数分解をとく方法も確立されていない
なにだったらダメージ受けるか
man in the middle
送信者と受診者の間でメッセージを改ざんし、攻撃者の公開鍵を、送信者に偽造して送る方法
有効な対策は認証(誰から送られてきたかを明らかにする)が必要
ハッシュ関数
あるメッセージを一意なハッシュ値にする関数のこと
任長さでも一定長さになる
特徴としては
あるハッシュ値と同じハッシュ値をもつメッセージを見つけにくい
弱衝突体制
2つのメッセージが同じハッシュ値になるのを、みつけにくい
強衝突耐性
SHA1
4ステップで任意のメッセージを、160ビット32x5のハッシュ値にすふ
1. メッセージを512ビットの整数倍にする
1, 0000, メッセージ長さ
バンディング
2. W1〜W80を、求める
W1〜Wxはパディング後を32ビット単位で細切れにしたの
Wx〜W8'0はW同士を加算していって求めたもの
3. SHA1で決まってるABCDEをW1〜W80を使って計算していく
4. 最終的な結果ABCDEがハッシュ値
MAC
そのメッセージが本当に送信者から送られてきたことを確認でき方法
認証
鍵と一方向ハッシュを主に使っている
簡単にステップを説明
1. 共有鍵を送信者と受診者で用意
2. 送信者はメッセージを鍵と合わせてハッシュ化
3. メッセージとハッシュ値を送信
4. 受者のは受け取ったメッセージを再度ハッシュ化し、受け取ったハッシュ値と等しいか確認