暗号技術入門
色々あって暗号技術に興味をもった僕はこんな本を読みました。
で、正直なところネットで探せる情報よりさらに奥深く知られたかというと微妙なラインでしたが、体系だって学べました。しかし、そのまんまにしとくと忘れるのは目に見えてるのでここで暗号技術について自分なりにまとめを書いたのでそのまま載せます。
- 隠すことによるセキュリティ(security of obscurity)
- どのような攻撃が可能なのか調べて尽くすことができない。暗号とは今まで誰にも敗れていないという事実がその機密性を担保する。
- 暗号鍵
- 対称暗号
- XOR
- 使い捨てパッド
- 最強の暗号。破れない。しかし、鍵が平文と同じ長さになってしまうという本末転倒。量子暗号に期待
- DES、トリプルDES
- 古い暗号技術。使ってはいけない。ただしDESで使われるファイステルネットワークは多くのブロック暗号で利用されている。
- ラウンドを繰り返して暗号化する。この構造もほかのブロック暗号と同じ
- 差分解読法
- 線形解読法
- AES(Rijndael)
- DESが破られたのでDESの後継として開発。アルゴリズムがまったく違う。
- SPN構造
- ラウンド
- SubBytes
- ShiftRows
- MixColumns
- AddRoudKey
- ブロック暗号
- ECB(Electronic CodeBook)
- 愚直に暗号化。平文と暗号文の位置関係が保存される。(改変の余地がり危険)
- CBC (Cipher Block Chaining)
- CFB (Cipher-FeedBack)
- OFB (Output-FeedBack)
- CTR (CounTeR)
- CRYTREC推奨
- CBC, CFB, CTR
- Practical Cyptography推奨
- CBC, CTR
- 詳細
- 2者間で共有鍵を共有して、それ以外には秘密。低いビット数でも安全性が高く、高速に暗号化ができる。
- 鍵配送問題がある。
- 鍵の事前共有
- 鍵の個数の組み合わせ爆発が起こる。(保存しておけない)
- 鍵配布センタによる鍵配送(KDC:key distribution center)
- 暗号通信のたびに鍵配布センタの発行した鍵を使って通信する。鍵配布センタとの間の通信の鍵は事前共有する。KDCは暗号通信をすべて盗聴、改竄ができてしまう。
- Diffie-Hellman鍵交換
- ハイブリッド暗号
- 3,4が有望。使われてる
- 鍵の事前共有
- ECB(Electronic CodeBook)
- 公開鍵暗号
- 一方向ハッシュ関数
- PBE(password based encryption)
- saltソルトを使った辞書攻撃に対する対処
- 擬似乱数生成器
- 乱数生成器の要素
- 乱数
- 暗号化ではこれは知られるもとして扱わなくてはならない
- 内部状態
- 乱数を生成するにあたって使われる値。乱数を生成するごとに更新される
- 知られてはいけない
- 種
- 最初に与えられる内部状態
- 乱数
- 無作為性
- 乱雑であること(必須)
- 予測不可能性
- ある乱数が知られても生成器の内部状態が明らかにならないこと(暗号化には必須)
- 再現不可能性
- 内部状態が物理的な乱雑さ(例:熱雑音)に依存させ完全な乱数を生成する。周期をもたない
- CPUレベルで組み込まれ、CPUのハードウェアが提供してくれる。
- 乱数生成器の要素
- 暗号かぎの強さ
-
RFC6637参照
-
- PGP(Pretty Good Privacy)
- SSL/TLS (Secure Socket Layer/ Transport Layer Security)
- TLSはSSL3.1にあたりSSL3.0は安全ではない。
- 対称暗号
正しく設計された暗号技術はたしかに破ることが難しい。しかし、なにも暗号で守られてデータにアクセスする方法は暗号を破るだけではなくソーシャルエンジニアリングなどで破ることができる。もっと言えば、結局のところ公開鍵基盤で得る信用というのはルート認証局への信用を源泉としているように、信用というものそのものが無から埋めないものである。人間の主観に依存するほかにないのが現状だ。自分以外に誰も信用できない状態ではまったく意味を持たない。