Skip to content

暗号化学び直し

mao-test-h edited this page Mar 16, 2019 · 3 revisions

暗号化に関する知見が虚無だったので学び直した。
その際に得た知見諸々をメモ。(学習の初期段階なので間違っている可能性もあり)

その際の参考サイトは以下。

初歩的かもしれないが、色々見ていて「ASE、RSA、CBC、ECBと沢山あるけど違いは何?」となったので以下に纏める。

  • AES
    • 共通鍵暗号方式の実装
      • 「共通鍵暗号」とは?
        • 特徴 : 暗号化に使う鍵と復号に使う鍵が同じ。処理が早い。
  • RSA
    • 公開鍵暗号方式の実装
      • 「公開鍵暗号」とは?
        • 特徴 : 暗号化に使う鍵と復号に使う鍵が違う。処理が遅い。
        • SSHで使われているやつ。

今回触れるのは共通鍵暗号の方。以下に種別を纏める。

  • ブロック暗号
    • 特徴 : 平文を128bitなどの固定長ブロックに分割して暗号化する暗号
      • CBCECBと言ったアルゴリズムはそのブロックを暗号する際に使われるロジックの名称
  • ストリーム暗号
    • 特徴 : 平文をビット単位あるいはバイト単位などで逐次暗号化する暗号

上述のようにブロック暗号はCipherModeを選択してアルゴリズムを選べる。
詳細については上記の参考サイトにあるので割愛するが、多分関連するであろう項目を挙げると以下。

  • ECBモード
    • 暗号化/復号すると必ず同じ暗号文になる。ザル
    • ランダムアクセスの性質上、こちらを使うことになりそう感...。
  • CBC
    • 初期ベクトル(IV)や鍵の追加要素(Solt)を与えてブロックを暗号化。
      • 次のブロックでは前の結果を使って暗号化していく(雑な説明)
    • 簡単に言うと暗号化すると必ず違う暗号文になる。
    • デフォルトでもこちらが指定されており、安全性としては良い感あるけど...アルゴリズムの性質上、多分ランダムアクセスは不可能。
      • ※TechConで言われている「大半の暗号化用のStreamの実装はランダムアクセス不能なので注意」はこの性質を指してそう...。実際にCipherModeで指定できる大半のアルゴリズムは前のブロックの結果を見たりしているので...。
  • CTR

後は名称が混在しているので単語の意味についても調べてみた。
↓とのことらしい。

  • 【IT英語】encryption と cipher と cryptography の違い
    • encryption : [名] 暗号化(暗号にすること)
    • cryptography : [名] (学問としての)暗号法、暗号学
    • cipher : [名] 暗号化アルゴリズム(サイファーと読む)
      • ※とりあえずはencryptioncipherの違いを抑えておけばいろいろ見やすくなりそう。

▼ 参考リンク

MSDN

CTRの実装について

Bouncy Castle

シーク可能な暗号化ストリームについて

暗号化基礎